Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
a1faf6b
Stable to Main 2026.03.1 (#298)
james-bruten-mo Mar 3, 2026
c640308
IO_Demo benchmarking configuration (#232)
EdHone Mar 6, 2026
d93d272
add validate symlinks calling workflow (#300)
james-bruten-mo Mar 9, 2026
6c47d43
Purge Intermediate Api access to configuration object from in favor o…
mo-rickywong Mar 10, 2026
9a9717f
Enable reading for cyclic data files using temporal controller (#231)
EdHone Mar 13, 2026
681ea91
Correct bug in global mesh (#309)
mike-hobson Mar 17, 2026
018e40c
Safely compute height fields for continuous function spaces (#284)
tommbendall Mar 17, 2026
b7543b9
Adding fortitude (#217)
mo-lucy-gordon Mar 19, 2026
c6ebe4e
Fix name of kernel stub generator (#315)
andrewcoughtrie Mar 25, 2026
6dfdb87
removed creation of xmap in generate_redistribution_map (#276)
shreybh1 Mar 27, 2026
4637bb3
Null island left as uninitialised value for planar non-spherical mesh…
stevemullerworth Mar 27, 2026
3ef2ace
Replace sleep intrinsic with C bindings (#320)
EdHone Apr 7, 2026
3a1cf78
Reformat stop calls to avoid model stopping without error code (#331)
EdHone Apr 15, 2026
1fe91a5
Add fortitude to CI/CD pipeline (#258)
Pierre-siddall Apr 15, 2026
7ed072b
Removed rules that were causing errors (#335)
mo-lucy-gordon Apr 16, 2026
03753d8
Infrastructure for PMSL calculation (#303)
iboutle Apr 21, 2026
a963e38
Allow applications partitioning meshes to specify partition constrain…
mo-rickywong Apr 22, 2026
2073832
bump revision (#343)
james-bruten-mo Apr 22, 2026
f9ae4ed
remove source directory from housekeeping (#346)
james-bruten-mo Apr 24, 2026
3c8ccc6
Add external rose metadata to configurator (#285)
james-bruten-mo Apr 27, 2026
401e98f
Clean halo depth (#333)
mike-hobson Apr 28, 2026
74edca9
Replace copy_field_alg_mod with real_to_real_x (#317)
mo-alistairp Apr 29, 2026
70e51d5
Enable interpolation of time-varying input data with temporal control…
EdHone Apr 29, 2026
3df4c5c
Temporal reading configuration for io_demo (#330)
EdHone May 1, 2026
f865507
New function space options for coordinate fields (#238)
tommbendall May 5, 2026
18ccb42
Add skeleton fab script (#246)
hiker May 5, 2026
ee17961
Release management: version string and components (#340)
mo-marqh May 5, 2026
70405b5
Fix core macros (#360)
james-bruten-mo May 5, 2026
3c9620f
Extend values doc in modeldb section (#362)
stevemullerworth May 6, 2026
ae610b1
Fix log field (#347)
mike-hobson May 11, 2026
b1bf318
Enable lfric_core rose-stem suites to use the use EX1b Genoa nodes (#…
EdHone May 12, 2026
4cfebd4
Remove norm from block gcr diagnostics (#365)
thomasmelvin May 14, 2026
fd80e31
Profiling kernels with additional function in psyclone tools (#339)
mattatmet May 19, 2026
7cf9e2e
manage normal queue targeting based on Milan (#377)
mo-marqh May 20, 2026
4ab10bf
Add an io_value type for integers (#326)
stevemullerworth May 21, 2026
9e2718e
Adding fortitude rules 1 (#370)
mo-lucy-gordon May 21, 2026
8b3c066
Better handling on unset file frequencies (#378)
EdHone May 22, 2026
bf23673
Deprecate copy field halo kernel (#341)
mo-alistairp May 26, 2026
93e7354
Enable lfric_xios_file_type to take configuration from an associated …
EdHone Jun 3, 2026
9c85548
Fix coupled checkpointing (#376)
timgraham-Met Jun 4, 2026
1b3978b
Use theta perturbation parameters from namelist (#374)
Adrian-Lock Jun 5, 2026
de2527f
Fab pFunit support (#323)
hiker Jun 8, 2026
4637958
Polish unit tests (#364)
MatthewHambley Jun 8, 2026
d85a661
Add Intel OneAPI Fortran compiler support to mpif90.mk include file (…
tinyendian Jun 8, 2026
5306f5b
Hello World (Skeleton) Tutorial (#385)
andrewcoughtrie Jun 8, 2026
29c0982
Simple diffusion tutorial (#387)
andrewcoughtrie Jun 9, 2026
1565aa4
IO_demo checkpointing (#304)
EdHone Jun 9, 2026
4eab65b
Address Issues with Face Selectors (#349)
tommbendall Jun 10, 2026
bb10f89
_field_group naming convention for lfric_apps use (#388)
mo-marqh Jun 10, 2026
0426836
Remove post processing core (#372)
mo-marqh Jun 15, 2026
4c8b0a8
Lessimplicit (#407)
stevemullerworth Jun 16, 2026
fa820c1
De-couple XIOS context definition from object initialisation (#382)
EdHone Jun 16, 2026
ce5d8d6
Remove buffer_factor_size setting from canned iodef.xml files (#408)
EdHone Jun 16, 2026
a53c2ac
Remove base mesh dependency in compute sample kernel (#313)
ukmo-juan-castillo Jun 17, 2026
b2374d3
Allow coarse-grid fields with ndata levels: vn3.1 read coarse 2d (#369)
mcdalvi Jun 23, 2026
23f4ee4
Fix parallel implementation of temporal reading (#414)
EdHone Jun 24, 2026
b85ebad
Add new stretching transformation to mesh tools (#270)
cjohnson-pi Jun 30, 2026
5d6b2db
Remove module scope access from LFRic Core driver/applications (#324)
mo-rickywong Jul 1, 2026
99d8d2b
Add support for psyclone 3.3, nvfortran and amdflang (#338)
sergisiso Jul 7, 2026
5ab4814
Core vn3.2 release (#425)
james-bruten-mo Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .github/workflows/lint-fortran.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Lint Fortran

on:
pull_request_target:

jobs:
fortitude-lint:
uses: MetOffice/growss/.github/workflows/fortran-lint.yaml@main
with:
runner: 'ubuntu-24.04'
10 changes: 10 additions & 0 deletions .github/workflows/validate_symlinks.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Validate Symlinks

on:
pull_request:
types: [opened, synchronize, reopened]
workflow_dispatch:

jobs:
validate_symlinks:
uses: MetOffice/growss/.github/workflows/validate_symlinks.yaml@main
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,11 @@ __pycache__
# LFRic CL Builds
applications/**/bin
applications/**/working
applications/**/fab-workspace
applications/**/test
applications/**/documents
applications/**/example*/
applications/**/fab-workspace/
mesh_tools/**/bin
mesh_tools/**/working
mesh_tools/**/test
Expand Down
61 changes: 36 additions & 25 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,36 @@
# Contributors

| GitHub user | Real Name | Affiliation | Date |
| ---------------- | ---------------------- | ----------- | ---------- |
| andrewcoughtrie | Andrew Coughtrie | Met Office | 2025.12.12 |
| james-bruten-mo | James Bruten | Met Office | 2025-12-09 |
| jedbakerMO | Jed Baker | Met Office | 2025-12-29 |
| jennyhickson | Jenny Hickson | Met Office | 2025-12-10 |
| mo-marqh | Mark Hedley | Met Office | 2025-12-11 |
| mo-rickywong | Ricky Wong | Met Office | 2025-01-30 |
| mike-hobson | Mike Hobson | Met Office | 2025-12-17 |
| MatthewHambley | Matthew Hambley | Met Office | 2025-12-15 |
| mo-lottieturner | Lottie Turner | Met Office | 2025-12-16 |
| tommbendall | Thomas Bendall | Met Office | 2026-01-23 |
| yaswant | Yaswant Pradhan | Met Office | 2025-12-16 |
| stevemullerworth | Steve Mullerworth | Met Office | 2026-01-08 |
| harry-shepherd | Harry Shepherd | Met Office | 2026-01-08 |
| EdHone | Ed Hone | Met Office | 2026-01-09 |
| tom-j-h | Tom Hill | Met Office | 2026-01-19 |
| mo-alistairp | Alistair Pirrie | Met Office | 2026-01-12 |
| t00sa | Sam Clarke-Green | Met Office | 2026-01-27 |
| MetBenjaminWent | Benjamin Went | Met Office | 2026-01-30 |
| jcsmeto | James Cunningham-Smith | Met Office | 2026-02-06 |
| thomasmelvin | Thomas Melvin | Met Office | 2026-01-15 |
| ericaneininger | Erica Neininger | Met Office | 2026-03-02 |
| GitHub user | Real Name | Affiliation | Date |
| ---------------- | ----------------- | --------------------- | ---------- |
| iboutle | Ian Boutle | Met Office | 2026-03-06 |
| andrewcoughtrie | Andrew Coughtrie | Met Office | 2025.12.12 |
| james-bruten-mo | James Bruten | Met Office | 2025-12-09 |
| jedbakerMO | Jed Baker | Met Office | 2025-12-29 |
| jennyhickson | Jenny Hickson | Met Office | 2025-12-10 |
| mo-marqh | Mark Hedley | Met Office | 2025-12-11 |
| mo-rickywong | Ricky Wong | Met Office | 2025-01-30 |
| mike-hobson | Mike Hobson | Met Office | 2025-12-17 |
| MatthewHambley | Matthew Hambley | Met Office | 2025-12-15 |
| mo-lottieturner | Lottie Turner | Met Office | 2025-12-16 |
| tommbendall | Thomas Bendall | Met Office | 2026-01-23 |
| yaswant | Yaswant Pradhan | Met Office | 2025-12-16 |
| stevemullerworth | Steve Mullerworth | Met Office | 2026-01-08 |
| harry-shepherd | Harry Shepherd | Met Office | 2026-01-08 |
| Pierre-siddall | Pierre Siddall | Met Office | 2026-01-29 |
| EdHone | Ed Hone | Met Office | 2026-01-09 |
| tom-j-h | Tom Hill | Met Office | 2026-01-19 |
| mo-alistairp | Alistair Pirrie | Met Office | 2026-01-12 |
| t00sa | Sam Clarke-Green | Met Office | 2026-01-27 |
| MetBenjaminWent | Benjamin Went | Met Office | 2026-01-30 |
| jcsmeto | James Cunningham-Smith | Met Office | 2026-02-06 |
| thomasmelvin | Thomas Melvin | Met Office | 2026-01-15 |
| ericaneininger | Erica Neininger | Met Office | 2026-03-02 |
| mo-lucy-gordon | Lucy Gordon | Met Office | 2026-03-18 |
| shreybh1 | Shrey Bhardwaj | Met Office | 2026-03-26 |
| hiker | Joerg Henrichs | Bureau of Meteorology | 2026-02-11 |
| sergisiso | Sergi Siso | UKRI-STFC | 2026-04-20 |
| mattatmet | Matthew Walker | Met Office | 2026-04-21 |
| timgraham-Met | Tim Graham | Met Office | 2026-05-20 |
| tinyendian | Wolfgang Hayek | Earth Sciences New Zealand | 2026-05-04 |
| Adrian-Lock | Adrian Lock | Met Office | 2026-05-21 |
| ukmo-juan-castillo | Juan M. Castillo | Met Office | 2026-03-24 |
| mcdalvi | Mohit Dalvi | Met Office | 2026-06-19 |
| cjohnson-pi | Christine Johnson | Met Office | 2026-06-29 |
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ OPERATE_ON ?= infrastructure \
mesh_tools \
applications/skeleton \
applications/simple_diffusion \
applications/coupled \
applications/lbc_demo \
applications/io_demo

Expand Down
2 changes: 1 addition & 1 deletion applications/coupled/documentation/mainpage.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ operations which can be specified within an invoke call in the algorithm layer b
directly by the infrastructure.

For more up-to-date information about the <b>LFRic-specific Built-ins</b> functionality (e.g. names, argument order) please refer to the
<a href="https://github.com/stfc/PSyclone/blob/master/doc/dynamo0p3.rst#built-ins">dynamo 0.3 API Built-ins documentation</a>.
<a href="https://github.com/stfc/PSyclone/blob/master/doc/user_guide/lfric.rst#built-ins">dynamo 0.3 API Built-ins documentation</a>.


5 changes: 5 additions & 0 deletions applications/coupled/example/configuration_glo.nml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ element_order_h=0,
element_order_v=0,
rehabilitate=.true.,
coord_order=1
coord_order_nonprime=1
coord_space='Wchi'
coord_system='native'
/

Expand Down Expand Up @@ -58,6 +60,9 @@ coord_system='native'
&partitioning
partitioner='cubedsphere',
panel_decomposition = 'auto',
tile_size_x=1,
tile_size_y=1,
inner_halo_tiles=.false.
/

&planet
Expand Down
5 changes: 5 additions & 0 deletions applications/coupled/example/configuration_lam.nml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ element_order_h=0,
element_order_v=0,
rehabilitate=.true.,
coord_order=1
coord_order_nonprime=1
coord_space='Wchi'
coord_system='native'
/

Expand Down Expand Up @@ -57,6 +59,9 @@ coord_system='native'
&partitioning
partitioner='planar',
panel_decomposition = 'auto',
tile_size_x=1,
tile_size_y=1,
inner_halo_tiles=.false.
/

&planet
Expand Down
1 change: 0 additions & 1 deletion applications/coupled/example/iodef.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@
<variable_definition>
<variable_group id = "buffer">
<variable id = "optimal_buffer_size" type = "string" >performance</variable>
<variable id = "buffer_factor_size" type = "double" >1.0</variable>
</variable_group>

<variable_group id = "parameters" >
Expand Down
100 changes: 100 additions & 0 deletions applications/coupled/rose-meta/lfric-coupled/version31_32.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import re
import sys

from metomi.rose.upgrade import MacroUpgrade # noqa: F401

from .version30_31 import *


class UpgradeError(Exception):
"""Exception created when an upgrade fails."""

def __init__(self, msg):
self.msg = msg

def __repr__(self):
sys.tracebacklimit = 0
return self.msg

__str__ = __repr__


"""
Copy this template and complete to add your macro
class vnXX_txxx(MacroUpgrade):
# Upgrade macro for <TICKET> by <Author>
BEFORE_TAG = "vnX.X"
AFTER_TAG = "vnX.X_txxx"
def upgrade(self, config, meta_config=None):
# Add settings
return config, self.reports
"""


class vn31_t238(MacroUpgrade):
"""Upgrade macro for ticket #238 by Thomas Bendall."""

BEFORE_TAG = "vn3.1"
AFTER_TAG = "vn3.1_t238"

def upgrade(self, config, meta_config=None):
# Commands From: rose-meta/lfric-driver
self.add_setting(
config, ["namelist:finite_element", "coord_space"], "'Wchi'"
)
coord_order = self.get_setting_value(
config, ["namelist:finite_element", "coord_order"]
)
self.add_setting(
config,
["namelist:finite_element", "coord_order_nonprime"],
coord_order,
)
return config, self.reports


class vn31_t324(MacroUpgrade):
"""Upgrade macro for ticket #324 by Ricky Wong."""

BEFORE_TAG = "vn3.1_t238"
AFTER_TAG = "vn3.1_t324"

def upgrade(self, config, meta_config=None):
# Commands From: rose-meta/lfric-driver
# Only add in new configuration settings if the namelists
# are already present
#
if config.get(["namelist:partitioning"]) is not None:
self.add_setting(
config, ["namelist:partitioning", "inner_halo_tiles"], ".false."
)
self.add_setting(
config, ["namelist:partitioning", "tile_size_x"], "1"
)
self.add_setting(
config, ["namelist:partitioning", "tile_size_y"], "1"
)
if config.get(["namelist:multigrid"]) is not None:
self.add_setting(
config,
["namelist:multigrid", "coarsen_multigrid_tiles"],
".false.",
)
self.add_setting(
config, ["namelist:multigrid", "max_tiled_multigrid_level"], "1"
)
return config, self.reports


class vn31_t611(MacroUpgrade):
"""Upgrade macro for ticket TTTT by Unknown."""

BEFORE_TAG = "vn3.1_t324"
AFTER_TAG = "vn3.2"

def upgrade(self, config, meta_config=None):
# Commands From: rose-meta/lfric-driver
# Blank Upgrade Macro
# Commands From: rose-meta/lfric-coupled
# Blank Upgrade Macro
return config, self.reports
2 changes: 1 addition & 1 deletion applications/coupled/rose-meta/lfric-coupled/versions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from metomi.rose.upgrade import MacroUpgrade # noqa: F401

from .version30_31 import *
from .version31_32 import *


class UpgradeError(Exception):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import=lfric-driver/vn3.2
23 changes: 10 additions & 13 deletions applications/coupled/source/coupled.f90
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,24 @@ program coupled
call parse_command_line( filename, component_name=cpl_component_name )

call modeldb%values%initialise( 'values', 5 )

call modeldb%configuration%initialise( program_name, table_len=10 )
call modeldb%config%initialise( program_name )

write(log_scratch_space,'(A)') &
'Application built with '// trim(precision_real) // &
'-bit real numbers.'
call log_event( log_scratch_space, log_level_trace )
call modeldb%values%add_key_value('cpl_name', cpl_component_name)

modeldb%mpi => global_mpi

call modeldb%values%add_key_value('cpl_name', cpl_component_name)
call init_comm( "coupled", modeldb )

call init_config( filename, &
coupled_required_namelists, &
configuration=modeldb%configuration, &
call init_config( filename, coupled_required_namelists, &
config=modeldb%config )

call init_logger( modeldb%mpi%get_comm(), &
call init_logger( modeldb%config, &
modeldb%mpi%get_comm(), &
program_name//"_"//cpl_component_name )

write(log_scratch_space,'(A)') &
'Application built with '// trim(precision_real) // &
'-bit real numbers.'
call log_event( log_scratch_space, log_level_trace )

call init_collections()
call init_time( modeldb )
deallocate( filename )
Expand Down
35 changes: 29 additions & 6 deletions applications/coupled/source/driver/coupled_driver_mod.f90
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,17 @@ subroutine initialise( program_name, modeldb, calendar )
integer(i_def) :: geometry
integer(i_def) :: method
integer(i_def) :: number_of_layers
integer(i_def) :: tile_size_x
integer(i_def) :: tile_size_y
real(r_def) :: domain_bottom
real(r_def) :: domain_height
real(r_def) :: scaled_radius
logical :: apply_partition_check
logical :: check_partitions

logical :: inner_halo_tiles
logical :: prepartitioned

integer(i_def), allocatable :: tile_size(:,:)
integer(i_def) :: i
integer(i_def), parameter :: one_layer = 1_i_def

Expand All @@ -91,6 +97,17 @@ subroutine initialise( program_name, modeldb, calendar )
domain_height = modeldb%config%extrusion%domain_height()
number_of_layers = modeldb%config%extrusion%number_of_layers()
scaled_radius = modeldb%config%planet%scaled_radius()
prepartitioned = modeldb%config%base_mesh%prepartitioned()

if (prepartitioned) then
tile_size_x = 1
tile_size_y = 1
inner_halo_tiles = .false.
else
tile_size_x = maxval([1,modeldb%config%partitioning%tile_size_x()])
tile_size_y = maxval([1,modeldb%config%partitioning%tile_size_y()])
inner_halo_tiles = modeldb%config%partitioning%inner_halo_tiles()
end if

! Initialise mesh
! Determine the required meshes
Expand Down Expand Up @@ -119,24 +136,30 @@ subroutine initialise( program_name, modeldb, calendar )

! Create the required meshes
stencil_depth = 1
apply_partition_check = .false.
call init_mesh( modeldb%configuration, &
check_partitions = .false.
allocate(tile_size(2,size(base_mesh_names)))
tile_size(1,:) = tile_size_x
tile_size(2,:) = tile_size_y
call init_mesh( modeldb%config, &
modeldb%mpi%get_comm_rank(), &
modeldb%mpi%get_comm_size(), &
base_mesh_names, extrusion, &
stencil_depth, apply_partition_check )
inner_halo_tiles, tile_size, &
stencil_depth, check_partitions )

allocate( twod_names, source=base_mesh_names )
do i=1, size(twod_names)
twod_names(i) = trim(twod_names(i))//'_2d'
end do

call create_mesh( base_mesh_names, extrusion_2d, &
inner_halo_tiles, tile_size, &
alt_name=twod_names )
call assign_mesh_maps( twod_names )


! Build the FEM function spaces and coordinate fields
call init_fem( mesh_collection, chi_inventory, panel_id_inventory )
call init_fem( modeldb%config, chi_inventory, panel_id_inventory )

! Create and initialise prognostic fields
mesh => mesh_collection%get_mesh(prime_mesh_name)
Expand Down Expand Up @@ -188,7 +211,7 @@ subroutine finalise( program_name, modeldb )
depository => modeldb%fields%get_field_collection("depository")
call depository%get_field("field_2", field_2)

! Write checksum of coupled field (on incoming component) to file
! Write checksum of coupled field (on incoming component) to file
call modeldb%values%get_value("cpl_name", cpl_component_name)
if (trim(cpl_component_name) == "lfric_i") then
call checksum_alg(program_name, field_2, 'coupled_field_2')
Expand Down
Loading
Loading