Skip to content

Commit 5d6b2db

Browse files
mo-rickywongtommbendallstevemullerworthandrewcoughtrieMatthewHambley
authored
Remove module scope access from LFRic Core driver/applications (#324)
Co-authored-by: Thomas Bendall <14180399+tommbendall@users.noreply.github.com> Co-authored-by: Steve Mullerworth <26165365+stevemullerworth@users.noreply.github.com> Co-authored-by: Andrew Coughtrie <24609575+andrewcoughtrie@users.noreply.github.com> Co-authored-by: Matthew Hambley <MatthewHambley@users.noreply.github.com> Co-authored-by: James Bruten <109733895+james-bruten-mo@users.noreply.github.com>
1 parent b85ebad commit 5d6b2db

95 files changed

Lines changed: 2805 additions & 1838 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ OPERATE_ON ?= infrastructure \
2222
mesh_tools \
2323
applications/skeleton \
2424
applications/simple_diffusion \
25+
applications/coupled \
2526
applications/lbc_demo \
2627
applications/io_demo
2728

applications/coupled/example/configuration_glo.nml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ coord_system='native'
6060
&partitioning
6161
partitioner='cubedsphere',
6262
panel_decomposition = 'auto',
63+
tile_size_x=1,
64+
tile_size_y=1,
65+
inner_halo_tiles=.false.
6366
/
6467

6568
&planet

applications/coupled/example/configuration_lam.nml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ coord_system='native'
5959
&partitioning
6060
partitioner='planar',
6161
panel_decomposition = 'auto',
62+
tile_size_x=1,
63+
tile_size_y=1,
64+
inner_halo_tiles=.false.
6265
/
6366

6467
&planet

applications/coupled/rose-meta/lfric-coupled/versions.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,37 @@ def upgrade(self, config, meta_config=None):
5555
)
5656

5757
return config, self.reports
58+
59+
60+
class vn31_t324(MacroUpgrade):
61+
"""Upgrade macro for ticket #324 by Ricky Wong."""
62+
63+
BEFORE_TAG = "vn3.1_t238"
64+
AFTER_TAG = "vn3.1_t324"
65+
66+
def upgrade(self, config, meta_config=None):
67+
# Commands From: rose-meta/lfric-driver
68+
# Only add in new configuration settings if the namelists
69+
# are already present
70+
#
71+
if config.get(["namelist:partitioning"]) is not None:
72+
self.add_setting(
73+
config, ["namelist:partitioning", "inner_halo_tiles"], ".false."
74+
)
75+
self.add_setting(
76+
config, ["namelist:partitioning", "tile_size_x"], "1"
77+
)
78+
self.add_setting(
79+
config, ["namelist:partitioning", "tile_size_y"], "1"
80+
)
81+
if config.get(["namelist:multigrid"]) is not None:
82+
self.add_setting(
83+
config,
84+
["namelist:multigrid", "coarsen_multigrid_tiles"],
85+
".false.",
86+
)
87+
self.add_setting(
88+
config, ["namelist:multigrid", "max_tiled_multigrid_level"], "1"
89+
)
90+
91+
return config, self.reports

applications/coupled/source/coupled.f90

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ program coupled
5050
call init_config( filename, coupled_required_namelists, &
5151
config=modeldb%config )
5252

53-
call init_logger( modeldb%mpi%get_comm(), &
53+
call init_logger( modeldb%config, &
54+
modeldb%mpi%get_comm(), &
5455
program_name//"_"//cpl_component_name )
5556

5657
write(log_scratch_space,'(A)') &

applications/coupled/source/driver/coupled_driver_mod.f90

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,17 @@ subroutine initialise( program_name, modeldb, calendar )
7575
integer(i_def) :: geometry
7676
integer(i_def) :: method
7777
integer(i_def) :: number_of_layers
78+
integer(i_def) :: tile_size_x
79+
integer(i_def) :: tile_size_y
7880
real(r_def) :: domain_bottom
7981
real(r_def) :: domain_height
8082
real(r_def) :: scaled_radius
8183
logical :: check_partitions
8284

85+
logical :: inner_halo_tiles
86+
logical :: prepartitioned
87+
88+
integer(i_def), allocatable :: tile_size(:,:)
8389
integer(i_def) :: i
8490
integer(i_def), parameter :: one_layer = 1_i_def
8591

@@ -91,6 +97,17 @@ subroutine initialise( program_name, modeldb, calendar )
9197
domain_height = modeldb%config%extrusion%domain_height()
9298
number_of_layers = modeldb%config%extrusion%number_of_layers()
9399
scaled_radius = modeldb%config%planet%scaled_radius()
100+
prepartitioned = modeldb%config%base_mesh%prepartitioned()
101+
102+
if (prepartitioned) then
103+
tile_size_x = 1
104+
tile_size_y = 1
105+
inner_halo_tiles = .false.
106+
else
107+
tile_size_x = maxval([1,modeldb%config%partitioning%tile_size_x()])
108+
tile_size_y = maxval([1,modeldb%config%partitioning%tile_size_y()])
109+
inner_halo_tiles = modeldb%config%partitioning%inner_halo_tiles()
110+
end if
94111

95112
! Initialise mesh
96113
! Determine the required meshes
@@ -120,23 +137,29 @@ subroutine initialise( program_name, modeldb, calendar )
120137
! Create the required meshes
121138
stencil_depth = 1
122139
check_partitions = .false.
140+
allocate(tile_size(2,size(base_mesh_names)))
141+
tile_size(1,:) = tile_size_x
142+
tile_size(2,:) = tile_size_y
123143
call init_mesh( modeldb%config, &
124144
modeldb%mpi%get_comm_rank(), &
125145
modeldb%mpi%get_comm_size(), &
126146
base_mesh_names, extrusion, &
147+
inner_halo_tiles, tile_size, &
127148
stencil_depth, check_partitions )
128149

129150
allocate( twod_names, source=base_mesh_names )
130151
do i=1, size(twod_names)
131152
twod_names(i) = trim(twod_names(i))//'_2d'
132153
end do
154+
133155
call create_mesh( base_mesh_names, extrusion_2d, &
156+
inner_halo_tiles, tile_size, &
134157
alt_name=twod_names )
135158
call assign_mesh_maps( twod_names )
136159

137160

138161
! Build the FEM function spaces and coordinate fields
139-
call init_fem( mesh_collection, chi_inventory, panel_id_inventory )
162+
call init_fem( modeldb%config, chi_inventory, panel_id_inventory )
140163

141164
! Create and initialise prognostic fields
142165
mesh => mesh_collection%get_mesh(prime_mesh_name)

applications/coupled/source/driver/init_coupled_mod.X90

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,24 @@ module init_coupled_mod
7676
procedure(write_interface), pointer :: tmp_ptr
7777

7878
integer(i_def) :: order_h, order_v
79+
integer(i_def) :: coord_system
80+
integer(i_def) :: geometry
81+
integer(i_def) :: topology
82+
real(r_def) :: scaled_radius
83+
7984
type(function_space_type), pointer :: fs
8085

8186
call log_event( 'coupled: Initialising app ...', LOG_LEVEL_INFO )
8287

8388
! Get the name of the coupling component
8489
call modeldb%values%get_value("cpl_name", cpl_component_name)
8590

86-
order_h = modeldb%config%finite_element%element_order_h()
87-
order_v = modeldb%config%finite_element%element_order_v()
91+
order_h = modeldb%config%finite_element%element_order_h()
92+
order_v = modeldb%config%finite_element%element_order_v()
93+
coord_system = modeldb%config%finite_element%coord_system()
94+
geometry = modeldb%config%base_mesh%geometry()
95+
topology = modeldb%config%base_mesh%topology()
96+
scaled_radius = modeldb%config%planet%scaled_radius()
8897

8998
fs => function_space_collection%get_fs(mesh, order_h, order_v, W3)
9099

@@ -122,8 +131,10 @@ module init_coupled_mod
122131
call depository%get_field( trim(name), field_1_ptr)
123132
! Initialise the values in the field that will be sent to the coupler.
124133
! Set them to the longitude of the cell-centre (converted to degrees)
125-
call invoke(compute_latlon_kernel_type(field_2, field_1_ptr, &
126-
chi, panel_id), &
134+
call invoke(compute_latlon_kernel_type(field_2, field_1_ptr, &
135+
chi, panel_id, geometry, &
136+
topology, coord_system, &
137+
scaled_radius), &
127138
inc_a_times_X(radians_to_degrees, field_1_ptr))
128139
! Add that field to the coupling 2d "send" field collection
129140
abs_field_ptr => field_1_ptr

applications/io_demo/example/configuration.nml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ coord_system='native'
8787
&partitioning
8888
partitioner='cubedsphere',
8989
panel_decomposition = 'auto',
90+
tile_size_x=1,
91+
tile_size_y=1,
92+
inner_halo_tiles=.false.
9093
/
9194

9295
&planet

applications/io_demo/rose-meta/lfric-io_demo/versions.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,37 @@ def upgrade(self, config, meta_config=None):
126126
)
127127

128128
return config, self.reports
129+
130+
131+
class vn31_t324(MacroUpgrade):
132+
"""Upgrade macro for ticket #324 by Ricky Wong."""
133+
134+
BEFORE_TAG = "vn3.1_t287"
135+
AFTER_TAG = "vn3.1_t324"
136+
137+
def upgrade(self, config, meta_config=None):
138+
# Commands From: rose-meta/lfric-driver
139+
# Only add in new configuration settings if the namelists
140+
# are already present
141+
#
142+
if config.get(["namelist:partitioning"]) is not None:
143+
self.add_setting(
144+
config, ["namelist:partitioning", "inner_halo_tiles"], ".false."
145+
)
146+
self.add_setting(
147+
config, ["namelist:partitioning", "tile_size_x"], "1"
148+
)
149+
self.add_setting(
150+
config, ["namelist:partitioning", "tile_size_y"], "1"
151+
)
152+
if config.get(["namelist:multigrid"]) is not None:
153+
self.add_setting(
154+
config,
155+
["namelist:multigrid", "coarsen_multigrid_tiles"],
156+
".false.",
157+
)
158+
self.add_setting(
159+
config, ["namelist:multigrid", "max_tiled_multigrid_level"], "1"
160+
)
161+
162+
return config, self.reports

applications/io_demo/source/driver/io_demo_checkpoint_mod.f90

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
!! files and fields to it
99
module io_demo_checkpoint_mod
1010

11-
use constants_mod, only: i_def, str_max_filename, str_def, r_second
11+
use constants_mod, only: i_def, r_def, str_max_filename, &
12+
str_def, r_second
1213
use driver_modeldb_mod, only: modeldb_type
1314
use event_mod, only: event_action
1415
use event_actor_mod, only: event_actor_type
@@ -22,6 +23,12 @@ module io_demo_checkpoint_mod
2223
use lfric_xios_file_mod, only: lfric_xios_file_type, OPERATION_ONCE
2324
use log_mod, only: log_event, log_scratch_space, &
2425
LOG_LEVEL_DEBUG, LOG_LEVEL_ERROR
26+
use mesh_mod, only: mesh_type
27+
28+
use base_mesh_config_mod, only: geometry_spherical, &
29+
geometry_planar, &
30+
topology_fully_periodic, &
31+
topology_non_periodic
2532

2633
implicit none
2734

@@ -54,8 +61,34 @@ subroutine setup_checkpoint_io(modeldb, chi, panel_id)
5461
character(len=str_def) :: checkpoint_id
5562
integer(i_def) :: ts_start, ts_end, t_cp, freq_ts
5663

64+
type(mesh_type), pointer :: mesh
65+
66+
integer(i_def) :: geometry
67+
integer(i_def) :: topology
68+
integer(i_def) :: coord_system
69+
real(r_def) :: scaled_radius
70+
5771
call log_event( 'io_demo: Setting up checkpoint I/O', LOG_LEVEL_DEBUG )
5872

73+
mesh => chi(1)%get_mesh()
74+
if (mesh%is_geometry_spherical()) then
75+
geometry = geometry_spherical
76+
else
77+
geometry = geometry_planar
78+
end if
79+
80+
if (mesh%is_topology_periodic()) then
81+
topology = topology_fully_periodic
82+
else if (mesh%is_topology_non_periodic()) then
83+
topology = topology_non_periodic
84+
else
85+
call log_event( 'Unsupported mesh topology', &
86+
log_level_error )
87+
end if
88+
89+
coord_system = modeldb%config%finite_element%coord_system()
90+
scaled_radius = modeldb%config%planet%scaled_radius()
91+
5992
ts_start = modeldb%calendar%parse_instance(modeldb%config%time%timestep_start())
6093
ts_end = modeldb%calendar%parse_instance(modeldb%config%time%timestep_end())
6194
checkpoint_fields => modeldb%fields%get_field_collection("depository")
@@ -125,8 +158,10 @@ subroutine setup_checkpoint_io(modeldb, chi, panel_id)
125158
! Add checkpoint context to clock events so that it is advanced at each timestep
126159
event_actor_ptr => cp_context
127160
context_advance => advance
128-
call cp_context%initialise_xios_context( modeldb%mpi%get_comm(), chi, panel_id, &
129-
modeldb%clock, modeldb%calendar )
161+
call cp_context%initialise_xios_context( &
162+
modeldb%mpi%get_comm(), chi, panel_id, &
163+
modeldb%clock, modeldb%calendar, &
164+
geometry, topology, coord_system, scaled_radius )
130165

131166
call modeldb%clock%add_event(context_advance, event_actor_ptr)
132167
call cp_context%set_active(.true.)

0 commit comments

Comments
 (0)