Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
6f67d33
add additional extrusion
cjohnson-pi Jun 26, 2026
9b047e3
change_of_extrusion logical
cjohnson-pi Jun 26, 2026
479df93
logicals
cjohnson-pi Jun 29, 2026
f81bfc9
More mesh extrusions and regridding infrastructure
cjohnson-pi Jul 1, 2026
a2d157a
local build completes
cjohnson-pi Jul 1, 2026
bafc1ff
rose
cjohnson-pi Jul 1, 2026
a2e7291
corrections
cjohnson-pi Jul 2, 2026
8a08049
new task with vertical regridding
cjohnson-pi Jul 2, 2026
ddd9ac9
C12 to C12 extrusions
cjohnson-pi Jul 3, 2026
008515b
Merge remote-tracking branch 'upstream/main' into lfric2lfric_extrusions
cjohnson-pi Jul 3, 2026
6ee7186
lfric2lfric test suite completes on azspice
cjohnson-pi Jul 3, 2026
599cf12
Pass stretching height through argument list (AI Claude)
cjohnson-pi Jul 3, 2026
b978cf6
Revert "Pass stretching height through argument list (AI Claude)"
cjohnson-pi Jul 9, 2026
1a022fe
correction
cjohnson-pi Jul 9, 2026
5f97a96
Add stretching_height as a subroutine parameter
cjohnson-pi Jul 9, 2026
6d899ce
Add get_height to vertical regridding
cjohnson-pi Jul 9, 2026
ea75009
Blended orography corrections
cjohnson-pi Jul 13, 2026
c8d9b6a
Add orography to the output files
cjohnson-pi Jul 14, 2026
ac9165b
vertical_change horizontal_change logic
cjohnson-pi Jul 14, 2026
6beaf6d
corrections
cjohnson-pi Jul 14, 2026
64f8584
correction
cjohnson-pi Jul 15, 2026
0851038
Merge tag 'vn3.2' into lfric2lfric_extrusions
cjohnson-pi Jul 15, 2026
2325001
use modeldb for logicals horizontal_change and vertical_change
cjohnson-pi Jul 15, 2026
f732f3e
log messages
cjohnson-pi Jul 15, 2026
d27bb22
tidy
cjohnson-pi Jul 15, 2026
159085e
tidy
cjohnson-pi Jul 15, 2026
2468580
tidy
cjohnson-pi Jul 15, 2026
d14bbe0
reorganise extrusions, and whitespace
cjohnson-pi Jul 15, 2026
9ecb788
corrections and whitespace
cjohnson-pi Jul 15, 2026
6e59962
validate rose corrections
cjohnson-pi Jul 15, 2026
4a8b6d0
Remove tabs
cjohnson-pi Jul 15, 2026
ae18682
rose corrections
cjohnson-pi Jul 15, 2026
abdcd78
correction
cjohnson-pi Jul 15, 2026
4882762
gungho unit tests
cjohnson-pi Jul 16, 2026
4ca5114
Added nci
cjohnson-pi Jul 20, 2026
13a4f3f
source_config_list and target_config_list
cjohnson-pi Jul 30, 2026
19d9ad8
Revert "source_config_list and target_config_list"
cjohnson-pi Jul 30, 2026
7891730
Check for ndata difference
cjohnson-pi Jul 30, 2026
4a6c03f
example data with tiles and different ndata
cjohnson-pi Jul 30, 2026
96da3f4
iodef
cjohnson-pi Aug 3, 2026
3e6db1e
Merge branch 'lfric2lfric_extrusions' into change_tiles
cjohnson-pi Aug 3, 2026
b2665f6
infrastructure for tiles
cjohnson-pi Aug 4, 2026
b267540
tile mapping
cjohnson-pi Aug 7, 2026
3123afe
code review response # This is a combination of 9 commits.
cjohnson-pi Sep 1, 2026
887abdf
Additional
cjohnson-pi Sep 2, 2026
c58c7d3
additional2
cjohnson-pi Sep 2, 2026
d63e466
Merge remote-tracking branch 'upstream/main' into lfric2lfric_extrusions
cjohnson-pi Sep 4, 2026
54ac29a
correction after merge
cjohnson-pi Sep 4, 2026
6e4036b
additional changes since merge
cjohnson-pi Sep 4, 2026
a3b363c
correction after merge
cjohnson-pi Sep 4, 2026
c3602a9
separate src_c12 and dst_c12
cjohnson-pi Sep 7, 2026
145f84d
src_C12 should be src_c12_c70
cjohnson-pi Sep 7, 2026
e46d21e
typo
cjohnson-pi Sep 7, 2026
a8c9cf1
Merge branch 'lfric2lfric_extrusions' into change_tiles
cjohnson-pi Sep 8, 2026
3623bd6
compiles and runs example
cjohnson-pi Sep 14, 2026
2430f82
Copy fields if not vertical regrid or multidata
cjohnson-pi Sep 14, 2026
9086c7a
tidy
cjohnson-pi Sep 14, 2026
8471123
Loop surface fields over surface fields
cjohnson-pi Sep 14, 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
20 changes: 19 additions & 1 deletion applications/lfric2lfric/example/configuration.nml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,15 @@ stretching_height = 17507.0,
stretching_method = 'smooth',
/

&extrusion_dst
domain_height = 80000.0,
method = 'um_L70_50t_20s_80km',
number_of_layers = 70,
planet_radius = 6371229.0,
stretching_height = 17507.0,
stretching_method = 'smooth',
/

&files
diag_stem_name = 'lfric2lfric_diag',
start_dump_filename = 'mesh_C12_MG_dump',
Expand Down Expand Up @@ -59,7 +68,7 @@ coord_space = 'Wchi',
/

&logging
run_log_level = 'info',
run_log_level = 'debug',
/

&time
Expand Down Expand Up @@ -97,3 +106,12 @@ coord_space = 'Wchi',
&planet
scaling_factor = 125.0,
/

&orography
orog_init_option = 'none'
/

&dst_jules_surface_types
! https://github.com/MetOffice/um/blob/main/rose-stem/app/um_seukv_eg/opt/rose-app-reconukv.conf
multidata_map = 1,2,3,4,5,6,6,7,8,9,10
/
34 changes: 22 additions & 12 deletions applications/lfric2lfric/example/iodef.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<simulation>

<!-- File definition for LFRic checkpoint read -->
<!-- File definition for READ -->
<context id = "lfric2lfric_source">

<!-- Include axis definitions -->
Expand All @@ -15,15 +15,21 @@
<!-- Local file definitions -->
<file_definition type="one_file" par_access="collective" time_counter="none">

<!-- File definition for LFRic checkpoint read -->
<!-- File definition for READ -->
<!-- Reads restart_lfric_atm_nwp_gal10-C12_azspice_gnu_fast-debug-64bit_tstep_0000000072.nc from ~umtest/cylc-run/lfric_apps_heads_nightly_2026-09-09/run1/share/data and copied to example/mesh_C12_MG_dump.nc -->
<file id="lfric_checkpoint_read" name="lfric_checkpoint_read" mode="read" output_freq="1ts" convention="UGRID" cyclic="true" enabled=".FALSE.">
<field_group id="lfric_checkpoint_read_field_group" >
<!-- Atmosphere fields -->
<!-- 3D fields -->
<field id="restart_theta" name="theta" long_name="air_potential_temperature" standard_name="air_potential_temperature" unit="K" domain_ref="checkpoint_Wtheta" operation="once" />
<field id="restart_rho" name="rho" long_name="air_density" standard_name="air_density" unit="kg m-3" domain_ref="checkpoint_W3" operation="once" />

<!-- Turbulence fields -->
<field id="restart_zh" name="zh" long_name="boundary_layer_depth" unit="m" domain_ref="face" operation="once" />
<!-- 2D fields -->
<field id="restart_zh" name="zh" long_name="boundary_layer_depth" unit="m" domain_ref="face" operation="once" />
<field id="restart_tile_snow_rgrain" name="tile_snow_rgrain" long_name="tile_snow_rgrain" unit="" domain_ref="face" operation="once" axis_ref="surface_tiles"/>
<field id="restart_n_snow_layers" name="n_snow_layers" long_name="n_snow_layers" unit="" domain_ref="face" operation="once" axis_ref="surface_tiles"/>
<field id="restart_tile_fraction" name="tile_fraction" long_name="tile_fraction" unit="" domain_ref="face" operation="once" axis_ref="surface_tiles"/>
<field id="restart_snow_layer_thickness" name="snow_layer_thickness" long_name="snow_layer_thickness" unit="" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles"/>
<field id="restart_snow_layer_temp" name="snow_layer_temp" long_name="snow_layer_temp" unit="" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles"/>
</field_group>
</file>
</file_definition>
Expand All @@ -42,29 +48,33 @@

</context>

<!-- File definition for LFRic checkpoint write -->
<!-- File definition for WRITE -->
<context id = "lfric2lfric_destination">

<!-- Include axis definitions -->
<axis_definition src="./axis_def_main.xml"/>
<axis_definition src="./axis_def_urban1t.xml"/>
<axis_definition src="./axis_def_urban2t.xml"/>

<!-- Include grid definitions -->
<grid_definition src="./grid_def_main.xml"/>

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

<!-- File definition for LFRic checkpoint read -->
<!-- File definition for WRITE -->
<file id="lfric_checkpoint_write" name="lfric_checkpoint_write" mode="write" output_freq="1ts" convention="UGRID" enabled=".FALSE.">

<!-- Atmosphere fields -->
<!-- 3D fields -->
<field id="checkpoint_theta" name="theta" long_name="air_potential_temperature" standard_name="air_potential_temperature" unit="K" prec="8" domain_ref="checkpoint_Wtheta" operation="once" />
<field id="checkpoint_rho" name="rho" long_name="air_density" standard_name="air_density" unit="kg m-3" prec="8" domain_ref="checkpoint_W3" operation="once" />

<!-- Turbulence fields -->
<field id="checkpoint_zh" name="zh" long_name="boundary_layer_depth" unit="m" prec="8" domain_ref="face" operation="once" />

<!-- 2D fields -->
<field id="checkpoint_zh" name="zh" long_name="boundary_layer_depth" unit="m" prec="8" domain_ref="face" operation="once" />
<field id="checkpoint_tile_snow_rgrain" name="tile_snow_rgrain" long_name="tile_snow_rgrain" unit="" domain_ref="face" operation="once" axis_ref="land_tiles_urban2t"/>
<field id="checkpoint_n_snow_layers" name="n_snow_layers" long_name="n_snow_layers" unit="" domain_ref="face" operation="once" axis_ref="land_tiles_urban2t"/>
<field id="checkpoint_tile_fraction" name="tile_fraction" long_name="tile_fraction" unit="" domain_ref="face" operation="once" axis_ref="land_tiles_urban2t"/>
<field id="checkpoint_snow_layer_thickness" name="snow_layer_thickness" long_name="snow_layer_thickness" unit="" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles_urban2t"/>
<field id="checkpoint_snow_layer_temp" name="snow_layer_temp" long_name="snow_layer_temp" unit="" domain_ref="face" operation="once" axis_ref="snow_layers_and_tiles_urban2t"/>
</file>
</file_definition>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,121 @@ compulsory=false
compulsory=false
!!trigger=namelist:partitioning: .false.;

[namelist:extrusion_dst]
compulsory=false
description=Vertical extrusion settings for the destination mesh.
help=
ns=namelist/Model/Mesh/Extrusion
sort-key=Section-A03

[namelist:extrusion_dst=domain_height]
compulsory=false
description=Height of domain above the surface [m]
fail-if=this < 0.0 ;
help=Height of the model domain above the surface.
=Surface is 0m for planar domains and planet_radius for spherical.
!kind=default
range=this > 0.0:
sort-key=Panel-A02
type=real

[namelist:extrusion_dst=eta_values]
!bounds=namelist:extrusion_dst=number_of_layers-1
compulsory=false
description=Eta values, excluding 0 and 1
help=Non-dimensional height values defining the model vertical levels.
=The length should be smaller by number_of_layers by one.
=
=The values must strictly be between 0 and 1:
=0 < eta_values < 1
=because 0 and 1 are appended to the list automatically.
!kind=default
length=:
range=0.0:1.0
sort-key=Panel-A04
type=real

[namelist:extrusion_dst=method]
compulsory=false
description=Method for generating eta coordinate
!enumeration=true
fail-if=this == 'um_L38_29t_9s_40km' and namelist:extrusion_dst=number_of_layers != 38 ;
=this == 'um_L70_50t_20s_80km' and namelist:extrusion_dst=number_of_layers != 70 ;
=this == 'um_L85_50t_35s_85km' and namelist:extrusion_dst=number_of_layers != 85 ;
=this == 'um_L70_61t_9s_40km' and namelist:extrusion_dst=number_of_layers != 70 ;
=this == 'um_L120_99t_21s_40km' and namelist:extrusion_dst=number_of_layers != 120 ;
=this == 'um_L140_122t_18s_40km' and namelist:extrusion_dst=number_of_layers != 140 ;
help=Available extrusion methods are (\f$n$ is number of layers):
=0) Specified by user;
=1) Uniform eta spacing (\f$\frac{k}{n}\f$);
=2) Quadratic eta spacing (\f$\frac{k}{n}^2\f$);
=3) Geometric eta spacing (\f$d\eta = \frac{(s - 1)}{(s^{n} - 1)}$)
= with stretching factor prescribed (\f$s=1.03$);
=4) DCMIP eta spacing (Ullrich et al. (2012) DCMIP documentation, Appendix F.2.)
= with flattening parameter prescribed.
=5) L38 40km UM specific eta spacing;
=6) L70 80km UM specific eta spacing;
=7) L85 85km UM specific eta spacing;
=8) L70 40km UM specific eta spacing
=9) L120 40km UM specific eta spacing
=10) L140 40km UM specific eta spacing
sort-key=Panel-A01
trigger=namelist:extrusion_dst=eta_values: 'specified_values';
value-titles=Uniform, Quadratic, Geometric, DCMIP,
= um_L38_29t_9s_40km, um_L70_50t_20s_80km, um_L85_50t_35s_85km, um_L70_61t_9s_40km,
= um_L120_99t_21s_40km, um_L140_122t_18s_40km
values='uniform', 'quadratic', 'geometric', 'dcmip',
='um_L38_29t_9s_40km', 'um_L70_50t_20s_80km', 'um_L85_50t_35s_85km', 'um_L70_61t_9s_40km',
='um_L120_99t_21s_40km', 'um_L140_122t_18s_40km'

[namelist:extrusion_dst=number_of_layers]
compulsory=false
description=Number of layers in the vertical
fail-if=this < 1 ;
help=Setting for number of layers of 3D-mesh in vertical.
!kind=default
range=1:
sort-key=Panel-A03
type=integer

[namelist:extrusion_dst=planet_radius]
compulsory=false
description=Radius of the planet surface [m]
fail-if=this <= 0.0 ;
help=Radius of domain bottom. Note: Orography not included.
!kind=default
range=this > 0.0:
sort-key=Panel-A02
type=real

[namelist:extrusion_dst=stretching_height]
compulsory=false
description=Physical height above which surface altitude does not
= influence layer height
fail-if=this < 0.0 ;
help=Physical height above which surface altitude does not
=influence layer height.
=Note that in order to reproduce the vertical stretching used in
=the UM 'smooth' extrusion, this value should be set to
=the value of eta_rho corresponding to the UM level
=first_constant_r_rho_level and multiplied by domain_height.
!kind=default
range=0:
sort-key=Panel-A02 ;1
type=real

[namelist:extrusion_dst=stretching_method]
compulsory=false
description=Method of generating stretching
!enumeration=true
help=Available stretching methods are:
=1) Linear (linear multiple of physical depth)
=2) Smooth (quadratic below stretching_height, linear above)
sort-key=Panel-A01
trigger=namelist:extrusion_dst=stretching_height: 'smooth' ;
value-titles=Linear, Smooth
values='linear', 'smooth'

[namelist:lfric2lfric]
compulsory=true
description=
Expand Down Expand Up @@ -290,3 +405,26 @@ help=The designation of the mesh to which this
ns=namelist/lfric2lfric/configuration
!string_length=default
type=character

[namelist:dst_jules_surface_types]
compulsory=true
description=
ns=namelist/dst_jules_surface_types
title=dst_jules_surface_types

[namelist:dst_jules_surface_types=multidata_map]
compulsory=true
description=Multidata map for surface/land tiles.
help=List the multidata levels to map to the
=destination multidata field.
=For example, if src_field has 4 multidata fields
=and dst_field has 3 multidata fields.
=If multidata_map = 1,4,2 then
=dst_field(1) = src_field(1)
=dst_field(2) = src_field(4)
=dst_field(3) = src_field(2)
!kind=default
length=:
ns=namelist/lfric2lfric/configuration
range=0:
type=integer
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ def upgrade(self, config, meta_config=None):
return config, self.reports
"""


class vn32_t634(MacroUpgrade):
"""Upgrade macro for ticket #634 by Ian Boutle."""

Expand Down Expand Up @@ -72,3 +71,76 @@ def upgrade(self, config, meta_config=None):
# Commands From: rose-meta/lfric-lfric2lfric
# Blank Upgrade Macro
return config, self.reports


class vn32_t581(MacroUpgrade):
# Upgrade macro for #581 by Christine Johnson

BEFORE_TAG = "vn3.2_t655"
AFTER_TAG = "vn3.2_t581"

def upgrade(self, config, meta_config=None):
# Add settings

domain_height = self.get_setting_value(
config, ["namelist:extrusion", "domain_height"]
)
eta_values = self.get_setting_value(
config, ["namelist:extrusion", "eta_values"]
)
method = self.get_setting_value(
config, ["namelist:extrusion", "method"]
)
number_of_layers = self.get_setting_value(
config, ["namelist:extrusion", "number_of_layers"]
)
planet_radius = self.get_setting_value(
config, ["namelist:extrusion", "planet_radius"]
)
stretching_method = self.get_setting_value(
config, ["namelist:extrusion", "stretching_method"]
)
stretching_height = self.get_setting_value(
config, ["namelist:extrusion", "stretching_height"]
)
start_dump_filename = self.get_setting_value(
config, ["namelist:files", "start_dump_filename"]
)

if start_dump_filename != "'lfric2lfric_dump'" :
self.add_setting(
config,
["namelist:extrusion_dst", "domain_height"],
domain_height,
)
self.add_setting(
config,
["namelist:extrusion_dst", "eta_values"],
eta_values,
)
self.add_setting(
config,
["namelist:extrusion_dst", "method"],
method,
)
self.add_setting(
config,
["namelist:extrusion_dst", "number_of_layers"],
number_of_layers,
)
self.add_setting(
config,
["namelist:extrusion_dst", "planet_radius"],
planet_radius,
)
self.add_setting(
config,
["namelist:extrusion_dst", "stretching_method"],
stretching_method,
)
self.add_setting(
config,
["namelist:extrusion_dst", "stretching_height"],
stretching_height,
)

Loading