Skip to content
Open
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
0389dfc
Interim Commit while migrating from FCM branch - XML, namelist and ro…
mcdalvi Apr 29, 2026
388b69b
Second commit transferring changes from FCM: Nudging field and file ,…
mcdalvi Apr 29, 2026
8a745da
Compilation fixes, mainly updating other calls to setup_model_data fo…
mcdalvi Apr 30, 2026
e2c6817
Improve trigerring in metadata
mcdalvi Apr 30, 2026
05b457a
include files that were not explicitly 'git add'ed
mcdalvi May 1, 2026
f1f0ddb
First round of fixes from testing: only handle fields and settings th…
mcdalvi May 5, 2026
dd2ed96
Fixes -mostly aligning field definitions; rationalised tests to use 3…
mcdalvi May 12, 2026
de251b0
merge into origin/main at 08455b0
mcdalvi May 13, 2026
8baec12
modify path to point to files containing licence information
mcdalvi May 13, 2026
ea85331
Minor fixes, style fixer, update KGOs
mcdalvi May 13, 2026
d4f3adc
Metadata fiex and re-alignment with configuration variables in modeld…
mcdalvi May 14, 2026
50f08f3
more metadata and style fixes
mcdalvi May 14, 2026
7723834
Changes in response to Code owner review: Remove new fields from xml …
mcdalvi May 15, 2026
d48f524
Rename test group to reflect target system and add to *lfric_atm_azsp…
mcdalvi May 18, 2026
642225b
Changes from review -configure *nudging_era_coarse* test to use coars…
mcdalvi May 19, 2026
3293ee2
Update KGO for *nudging_coarse* test, now reverted back to main mesh …
mcdalvi May 19, 2026
b906772
Changes from Review- mainly consistent naming of fields; remove dupli…
mcdalvi May 29, 2026
6975f0a
Attempt to get away from hardwired numbers in collection declaration.
mcdalvi Jun 5, 2026
344ff27
Revert some changes after review as modeldb may not available in all …
mcdalvi Jun 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions applications/lfric_atm/metadata/axis_def_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
<axis id="photolysis_pathways" name="photolysis_pathways" />
<axis id="photol_species" name="photol_species" />
<axis id="one_time_axis" name="one_time_axis" n_glo="1" />
<axis id="nudging_time_axis" name="nudging_time_axis" />
<axis id="nudging_levels" name="nudging_levels" />

<axis id="random_seed_size" name="random_seed_size" />
<axis id="stph_spectral_dimensions" name="stph_spectral_dimensions" />
Expand Down
3 changes: 3 additions & 0 deletions applications/lfric_atm/metadata/field_def_diags.xml
Comment thread
mcdalvi marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@
<field id="height_wth" name="height_wth" long_name="height_of_cell_interfaces_above_earth_radius" standard_name="height_above_mean_sea_level" unit="m" grid_ref="full_level_face_grid" />
<field id="height_w2h" name="height_w2h" long_name="height_of_cell_faces_above_earth_radius" standard_name="height_above_mean_sea_level" unit="m" grid_ref="half_level_edge_grid" />
<field id="height_w0" name="height_w0" long_name="height_of_cell_vertices_above_earth_radius" standard_name="height_above_mean_sea_level" unit="m" grid_ref="node_grid" />
<field id="theta_nudging_ref" name="theta_nudging_ref" long_name="nudging_reference_air_potential_temperature" unit="K" grid_ref="nudging_ref_full_grid" />
<field id="u_in_w3_nudging_ref" name="u_in_w3_nudging_ref" long_name="nudging_reference_eastward_wind_at_cell_centres" unit="ms-1" grid_ref="nudging_ref_half_grid" />
<field id="v_in_w3_nudging_ref" name="v_in_w3_nudging_ref" long_name="nudging_reference_northward_wind_at_cell_centres" unit="ms-1" grid_ref="nudging_ref_half_grid" />
<!-- First line extracts level 0, second line removes vertical coordinate, cannot do as one -->
<field id="zoomed__orography" field_ref="height_wth" grid_ref="full_level_0_face_zoom" />
<field id="orography" name="orography" long_name="surface_altitude" standard_name="surface_altitude" unit="m" domain_ref="face" > zoomed__orography </field>
Expand Down
24 changes: 24 additions & 0 deletions applications/lfric_atm/metadata/grid_def_nudging.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!-- Nudging ancillary grid definitions - on prime mesh-->
<!-- Grid for reading input fields -->
<grid_definition>
<grid id="nudging_input_full_grid">
<domain domain_ref="face"/>
<axis axis_ref="nudging_time_axis"/>
<axis axis_ref="nudging_levels"/>
</grid>

<grid id="nudging_input_2D_grid">
<domain domain_ref="face"/>
<axis axis_ref="nudging_time_axis"/>
</grid>

<!-- Grids for outputting diagnostics -->
<grid id="nudging_ref_full_grid">
<domain domain_ref="face"/>
<axis axis_ref="nudging_levels"/>
</grid>

<grid id="nudging_ref_2D_grid">
<domain domain_ref="face"/>
</grid>
</grid_definition>
24 changes: 24 additions & 0 deletions applications/lfric_atm/metadata/grid_def_nudging_coarse.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!-- Nudging ancillary grid definitions - on coarse mesh-->
<!-- Grid for reading input fields -->
<grid_definition>
<grid id="nudging_input_full_grid">
<domain domain_ref="multigrid_l2_face"/>
<axis axis_ref="nudging_time_axis"/>
<axis axis_ref="nudging_levels"/>
</grid>

<grid id="nudging_input_2D_grid">
<domain domain_ref="multigrid_l2_face"/>
<axis axis_ref="nudging_time_axis"/>
</grid>

<!-- Grids for outputting diagnostics -->
<grid id="nudging_ref_full_grid">
<domain domain_ref="multigrid_l2_face"/>
<axis axis_ref="nudging_levels"/>
</grid>

<grid id="nudging_ref_2D_grid">
<domain domain_ref="multigrid_l2_face"/>
</grid>
</grid_definition>
1 change: 1 addition & 0 deletions applications/lfric_atm/metadata/lfric_dictionary.xml
Comment thread
mcdalvi marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -399,5 +399,6 @@
<field id="frozen_soil_moisture" name="frozen_soil_moisture" long_name="mass_fraction_of_frozen_water_in_saturated_soil_moisture" unit="1" domain_ref="face" axis_ref="soil_levels" />
<!-- energy correction -->
<field id="temperature_correction_rate" name="temperature_correction_rate" long_name="temperature_rate_for_energy_correction" unit="K s-1" axis_ref="scalar_axis" />

</field_group>
</field_definition>
4 changes: 2 additions & 2 deletions dependencies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ lfric_apps:
ref:

lfric_core:
source: git@github.com:MetOffice/lfric_core.git
ref: 70405b50bda5a86c8711a2cceae0ea69dd04c2bc
source: git@github.com:mcdalvi/lfric_core.git
ref: vn3.1_read_coarse_2d

moci:
source: git@github.com:MetOffice/moci.git
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ module jedi_lfric_linear_modeldb_driver_mod
use constants_mod, only : r_def, l_def, str_def
use driver_config_mod, only : init_config
use driver_time_mod, only : init_time, final_time
use external_forcing_config_mod, only : theta_forcing, &
theta_forcing_nudging, &
wind_forcing, &
wind_forcing_nudging
use extrusion_mod, only : TWOD
use gungho_init_fields_mod, only : create_model_data, &
finalise_model_data
Expand Down Expand Up @@ -101,15 +105,20 @@ subroutine initialise_modeldb( modeldb_name, filename, mpi_obj, modeldb, atl_si_
type( mesh_type ), pointer :: twod_mesh
type( mesh_type ), pointer :: aerosol_mesh
type( mesh_type ), pointer :: aerosol_twod_mesh
type( mesh_type ), pointer :: nudging_mesh
type( mesh_type ), pointer :: nudging_twod_mesh
type( lfric_xios_context_type ), pointer :: io_context
character( len=str_def ) :: prime_mesh_name
character( len=str_def ) :: aerosol_mesh_name
character( len=str_def ) :: nudging_mesh_name
logical( kind=l_def ) :: coarse_aerosol_ancil
logical( kind=l_def ) :: coarse_ozone_ancil
logical( kind=l_def ) :: coarse_nudging

character(len=*), parameter :: io_context_name = "gungho_atm"

nullify( mesh, twod_mesh, aerosol_mesh, aerosol_twod_mesh )
nullify( nudging_mesh, nudging_twod_mesh )

! 1. Initialise modeldb field collections, configuration and mpi.
modeldb%mpi => mpi_obj
Expand Down Expand Up @@ -171,12 +180,30 @@ subroutine initialise_modeldb( modeldb_name, filename, mpi_obj, modeldb, atl_si_
aerosol_twod_mesh => twod_mesh
end if

! Get information on nudging and if data is on a different mesh, get this
! Use prime mesh by default
nudging_mesh => mesh
nudging_twod_mesh => twod_mesh
if ( modeldb%config%formulation%use_multires_coupling() ) then
coarse_nudging = modeldb%config%multires_coupling%coarse_nudging()
if (coarse_nudging) then
! For now use the coarsest mesh
nudging_mesh_name = modeldb%config%multires_coupling%nudging_mesh_name()
nudging_mesh => mesh_collection%get_mesh(nudging_mesh_name)
nudging_twod_mesh => mesh_collection%get_mesh(nudging_mesh, TWOD)
write( log_scratch_space,'(A,A)' ) "nudging mesh name:", nudging_mesh%get_mesh_name()
call log_event( log_scratch_space, LOG_LEVEL_TRACE )
end if
end if

! Instantiate the fields stored in model_data
call create_model_data( modeldb, &
mesh, &
twod_mesh, &
aerosol_mesh, &
aerosol_twod_mesh )
aerosol_twod_mesh, &
nudging_mesh, &
nudging_twod_mesh )

! Instantiate the linearisation state
call linear_create_ls_analytic( modeldb, mesh, twod_mesh )
Expand Down
12 changes: 12 additions & 0 deletions rose-stem/app/lfric_atm/file/file_def_nudging.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<file_definition>

<!-- Nudging reference data files -->
<file id="nudging" name="nudging" mode="read" output_freq="6h" convention="UGRID" cyclic="true" enabled=".FALSE.">
<field id="nudging_time" name="time" unit="hours" operation="once" axis_ref="nudging_time_axis" />
<field id="u_nudging_ext_ref_data" name="U" long_name="Eastward wind component for Nudging" unit="m s-1" grid_ref="nudging_input_full_grid" operation="instant" />
<field id="v_nudging_ext_ref_data" name="V" long_name="Northward wind component for Nudging" unit="m s-1" grid_ref="nudging_input_full_grid" operation="instant" />
<field id="temperature_nudging_ext_ref_data" name="T" long_name="Air temperature for Nudging" unit="K" grid_ref="nudging_input_full_grid" operation="instant" />
<field id="surface_pressure_nudging_ext_ref_data" name="LNSP" long_name="Log surface pressure for Nudging" unit="Pa" grid_ref="nudging_input_2D_grid" operation="instant" />
</file>

</file_definition>
113 changes: 113 additions & 0 deletions rose-stem/app/lfric_atm/file/iodef_gal_nwp_coarse_nudging.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<simulation>

<!-- file suitable for global NWP runs with aerosol climatology on a coarse mesh -->

<!-- In this version we have ONE context -->
<context id = "gungho_atm">

<!-- Include variable definitions -->
<variable_definition src="$METADATA/variable_def_main.xml"/>

<!-- Include axis definitions -->
<axis_definition src="$METADATA/axis_def_main.xml"/>
<axis_definition src="./axis_def_plev.xml"/>

<!-- Include domain definitions -->
<domain_definition src="$METADATA/domain_def_main.xml"/>

<!-- Include grid definitions -->
<grid_definition src="$METADATA/grid_def_main.xml"/>
<grid_definition src="$METADATA/grid_def_aero_ctl.xml"/>
<grid_definition src="$METADATA/grid_def_radaer_ctl.xml"/>
<grid_definition src="$METADATA/grid_def_nudging_coarse.xml"/>

<!-- Include field definitions -->
<field_definition src="$METADATA/lfric_dictionary.xml"/>
<field_definition src="$METADATA/field_def_diags.xml"/>
<field_definition src="$METADATA/field_def_initial_diags.xml"/>

<!-- Include file definitions -->
<file_definition src="./file_def_check_restart.xml"/>
<file_definition src="./file_def_ancil_main.xml"/>
<file_definition src="./file_def_ancil_gal.xml"/>
<file_definition src="./file_def_ancil_hadisst.xml"/>
<file_definition src="./file_def_nudging.xml"/>
<file_definition src="./file_def_diags_idealised.xml"/>
<file_definition src="./file_def_diags_ver.xml"/>
<file_definition src="./file_def_diags_name.xml"/>
<file_definition src="./file_def_initial_diags.xml"/>

<!-- Local file definitions -->
<file_definition type="one_file" time_counter="none">

<!-- File definition for writing an FD dump -->
<file id="lfric_fd_dump" name="lfric_fd_dump" output_freq="1ts" convention="UGRID" enabled=".FALSE." >
</file>

<!-- File definition for reading in from a UM2LFRic FD UGRID format dump -->
<file id="read_lfric_fd_dump" name="lfric_fd_dump" mode="read" output_freq="1ts" convention="UGRID" cyclic="false" enabled=".FALSE.">
<!-- Atmosphere fields -->
<field id="read_ew_wind_in_w3" name="ew_wind" long_name="eastward_wind" standard_name="eastward_wind" unit="m s-1" grid_ref="half_level_face_grid" operation="once" />
<field id="read_ns_wind_in_w3" name="ns_wind" long_name="northward_wind" standard_name="northward_wind" unit="m s-1" grid_ref="half_level_face_grid" operation="once" />
<field id="read_upward_wind_in_wtheta" name="upward_wind" long_name="upward_air_velocity" standard_name="upward_air_velocity" unit="m s-1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_theta_in_wtheta" name="theta" long_name="air_potential_temperature" standard_name="air_potential_temperature" unit="K" grid_ref="full_level_face_grid" operation="once" />
<field id="read_dry_rho_in_w3" name="rho" long_name="air_density" unit="1" grid_ref="half_level_face_grid" operation="once" />
<field id="read_mv_in_wtheta" name="m_v" long_name="humidity_mixing_ratio" unit="1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_mcl_in_wtheta" name="m_cl" long_name="cloud_liquid_water_mixing_ratio" unit="1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_mcf_in_wtheta" name="m_cf" long_name="cloud_ice_mixing_ratio" unit="1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_mr_in_wtheta" name="m_r" long_name="rain_mixing_ratio" unit="1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_zh" name="zh" long_name="boundary_layer_depth" unit="m" domain_ref="face" operation="once" />
<field id="read_area_fraction" name="area_fraction" long_name="cloud_area_fraction" unit="1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_bulk_fraction" name="bulk_fraction" long_name="cloud_bulk_fraction" unit="1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_liquid_fraction" name="liquid_fraction" long_name="cloud_liquid_fraction" unit="1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_frozen_fraction" name="frozen_fraction" long_name="cloud_frozen_fraction" unit="1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_z0msea" name="z0msea" long_name="sea_surface_roughness_length" unit="m" domain_ref="face" operation="once" />
<field id="read_dust1_mmr" name="dust1_mmr" long_name="dust_division_1_mass_mixing_ratio" unit="kg kg-1" grid_ref="full_level_face_grid" operation="once" />
<field id="read_dust2_mmr" name="dust2_mmr" long_name="dust_division_2_mass_mixing_ratio" unit="kg kg-1" grid_ref="full_level_face_grid" operation="once" />
<!-- surface fields -->
<field id="read_dd_mf_cb" name="dd_mf_cb" long_name="downdraft_massflux_at_cloud_base" unit="Pa s-1" domain_ref="face" operation="once" />
<field id="read_soil_sat_frac" name="soil_sat_frac" long_name="soil_saturated_fraction" unit="1" domain_ref="face" operation="once" />
<field id="read_water_table" name="water_table" long_name="water_table_depth" unit="m" domain_ref="face" operation="once" />
<field id="read_wetness_under_soil" name="wetness_under_soil" long_name="wetness_below_soil_column" unit="1" domain_ref="face" operation="once" />
<field id="read_soil_temperature" name="soil_temperature" long_name="soil_temperature" unit="K" domain_ref="face" operation="once" axis_ref="soil_levels"/>
<field id="read_soil_moisture" name="soil_moisture" long_name="soil_moisture" unit="kg kg-1" domain_ref="face" operation="once" axis_ref="soil_levels"/>
<field id="read_surface_conductance" name="surface_conductance" long_name="conductance" unit="m s-1" domain_ref="face" operation="once" />
<field id="read_can_water_in" name="tile_canopy_water" long_name="canopy_water_content_on_tiles" unit="kg m-2" domain_ref="face" operation="once" axis_ref="land_tiles"/>
<field id="read_land_tile_temp" name="tile_temperature" long_name="land_tile_temperature" unit="K" domain_ref="face" operation="once" axis_ref="land_tiles"/>
<field id="read_tstar_sea_ice" name="tstar_sea_ice" long_name="sea_ice_surface_temperature" standard_name="surface_temperature" unit="K" domain_ref="face" operation="once" />
<field id="read_sea_ice_temperature" name="sea_ice_temperature" long_name="sea_ice_temperature" unit="K" domain_ref="face" operation="once" />
<field id="read_tile_snow_mass_in" name="tile_snow_mass" long_name="tile_snow_mass" unit="kg m-2" domain_ref="face" operation="once" axis_ref="land_tiles"/>
<field id="read_n_snow_layers_in" name="tile_n_snow_layers" long_name="number_of_snow_layers" unit="1" domain_ref="face" operation="once" axis_ref="land_tiles"/>
<field id="read_snow_depth_in" name="tile_snow_depth" long_name="snow_depth_on_tiles" unit="m" domain_ref="face" operation="once" axis_ref="land_tiles"/>
<field id="read_tile_snow_rgrain_in" name="tile_snow_rgrain" long_name="tile_snow_grain_size" unit="microns" domain_ref="face" operation="once" axis_ref="land_tiles"/>
<field id="read_snow_soot" name="snow_soot" long_name="snow_soot_content" unit="kg kg-1" domain_ref="face" operation="once" />
<field id="read_snow_under_canopy_in" name="tile_snow_under_canopy" long_name="snow_under_canopy_on_tiles" unit="m" domain_ref="face" operation="once" axis_ref="land_tiles"/>
<field id="read_snowpack_density_in" name="tile_snowpack_density" long_name="snowpack_density_on_tiles" unit="kg m-3" domain_ref="face" operation="once" axis_ref="land_tiles"/>
<field id="read_snow_layer_thickness" name="tile_snow_layer_thickness" long_name="snow_layer_thickness_on_tiles" unit="m" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles"/>
<field id="read_snow_layer_ice_mass" name="tile_snow_layer_ice_mass" long_name="snow_layer_ice_mass_on_tiles" unit="kg m-2" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles"/>
<field id="read_snow_layer_liq_mass" name="tile_snow_layer_liq_mass" long_name="snow_layer_liquid_mass_on_tiles" unit="kg m-2" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles"/>
<field id="read_snow_layer_temp" name="tile_snow_layer_temp" long_name="snow_layer_temperature_on_tiles" unit="K" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles"/>
<field id="read_snow_layer_rgrain" name="tile_snow_layer_rgrain" long_name="snow_layer_grain_size_on_tiles" unit="microns" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles"/>
</file>

</file_definition>

</context>

<context id = "xios">
<variable_definition>
<variable_group id = "buffer">
<variable id = "optimal_buffer_size" type = "string" >performance</variable>
<variable id = "buffer_size_factor" type = "double" >1.0</variable>
</variable_group>

<variable_group id = "parameters" >
<variable id = "using_server" type = "bool" >true</variable>
<variable id = "info_level" type = "int" >50</variable>
<variable id = "print_file" type="bool">true</variable>
</variable_group>
</variable_definition>
</context>

</simulation>
Loading