15 INTEGER,
PARAMETER :: pd = 12
16 INTEGER,
PARAMETER :: rd = 307
18 INTEGER,
PARAMETER :: dp = selected_real_kind(pd,rd)
19 INTEGER,
PARAMETER :: wp = dp
21 INTEGER,
PARAMETER :: no_of_fields = 14
22 INTEGER,
PARAMETER :: max_char_length = 132
24 INTEGER,
PARAMETER :: nbr_cells = 2
25 INTEGER,
PARAMETER :: nbr_vertices = 4
27 REAL(wp),
PARAMETER :: yac_rad = 0.017453292519943295769_wp
29 CHARACTER(LEN=max_char_length) :: dummy_name
30 CHARACTER(LEN=max_char_length) :: field_name(no_of_fields)
31 INTEGER :: field_collection_size(no_of_fields)
32 CHARACTER(LEN=max_char_length) :: yaml_filename
33 CHARACTER(LEN=max_char_length) :: grid_name
34 CHARACTER(LEN=max_char_length) :: comp_name
35 CHARACTER(LEN=max_char_length) :: timestep_string
38 INTEGER :: i, info, ierror
40 INTEGER :: cell_point_ids(1)
43 INTEGER :: glb_index(nbr_cells)
44 INTEGER :: cell_core_mask(nbr_cells)
45 INTEGER :: nbr_vertices_per_cell
47 REAL(wp),
ALLOCATABLE :: buffer(:,:)
48 REAL(wp),
ALLOCATABLE :: buffer_lon(:)
49 REAL(wp),
ALLOCATABLE :: buffer_lat(:)
50 INTEGER,
ALLOCATABLE :: cell_to_vertex(:,:)
52 INTEGER,
ALLOCATABLE :: cell_mask(:)
53 INTEGER,
ALLOCATABLE :: field_id(:)
55 INTEGER :: local_comm, npes, rank
57 CALL mpi_init (ierror)
61 yaml_filename =
"toy_dummy.yaml"
66 comp_name =
"dummy_atmosphere"
67 grid_name =
"dummy_atmosphere_grid"
73 print *,
'Local Comm', local_comm
75 CALL mpi_comm_rank ( local_comm, rank, ierror )
76 CALL mpi_comm_size ( local_comm, npes, ierror )
78 WRITE ( 6 , * ) trim(comp_name),
" rank ", rank,
": local size is ", npes
80 ALLOCATE(buffer_lon(nbr_vertices))
81 ALLOCATE(buffer_lat(nbr_vertices))
82 ALLOCATE(cell_to_vertex(3,nbr_cells))
84 nbr_vertices_per_cell = 3
98 buffer_lon(1) = 0.0 * yac_rad
99 buffer_lon(2) = -1.0 * yac_rad
100 buffer_lon(3) = 1.0 * yac_rad
101 buffer_lon(4) = 0.0 * yac_rad
102 buffer_lat(1) = 1.0 * yac_rad
103 buffer_lat(2) = 0.0 * yac_rad
104 buffer_lat(3) = 0.0 * yac_rad
105 buffer_lat(4) = -1.0 * yac_rad
108 cell_to_vertex(1,1) = 1
109 cell_to_vertex(2,1) = 2
110 cell_to_vertex(3,1) = 3
111 cell_to_vertex(1,2) = 2
112 cell_to_vertex(2,2) = 4
113 cell_to_vertex(3,2) = 3
120 & nbr_vertices_per_cell, &
130 cell_core_mask(i) = 1
144 buffer_lon(1) = 0.0 * yac_rad
145 buffer_lon(2) = 0.0 * yac_rad
146 buffer_lat(1) = 0.5 * yac_rad
147 buffer_lat(2) = -0.5 * yac_rad
155 & cell_point_ids(1) )
157 DEALLOCATE (buffer_lon, buffer_lat, cell_to_vertex)
160 ALLOCATE(cell_mask(nbr_cells))
167 & cell_point_ids(1) )
169 DEALLOCATE (cell_mask)
171 field_name(1) =
"surface_downward_eastward_stress"
172 field_name(2) =
"surface_downward_northward_stress"
173 field_name(3) =
"surface_fresh_water_flux"
174 field_name(4) =
"surface_temperature"
175 field_name(5) =
"total_heat_flux"
176 field_name(6) =
"atmosphere_sea_ice_bundle"
177 field_name(7) =
"sea_surface_temperature"
178 field_name(8) =
"eastward_sea_water_velocity"
179 field_name(9) =
"northward_sea_water_velocity"
180 field_name(10) =
"ocean_sea_ice_bundle"
181 field_name(11) =
"atmos_out1"
182 field_name(12) =
"atmos_out2"
183 field_name(13) =
"atmos_out3"
184 field_name(14) =
"atmos_out4"
186 field_collection_size(1) = 2
187 field_collection_size(2) = 2
188 field_collection_size(3) = 3
189 field_collection_size(4) = 1
190 field_collection_size(5) = 4
191 field_collection_size(6) = 4
192 field_collection_size(7) = 1
193 field_collection_size(8) = 1
194 field_collection_size(9) = 1
195 field_collection_size(10) = 5
196 field_collection_size(11) = 1
197 field_collection_size(12) = 1
198 field_collection_size(13) = 1
199 field_collection_size(14) = 1
201 ALLOCATE(field_id(no_of_fields))
205 DO i = 1, no_of_fields-4
211 & field_collection_size(i), &
219 DO i = no_of_fields-3, no_of_fields
225 & field_collection_size(i), &
235 ALLOCATE(buffer(nbr_cells,5))
255 DO i = 1, no_of_fields
257 WRITE ( 6 , * )
"Field ID ", field_id(i), trim(timestep_string)
260 DO i = 1, no_of_fields
263 WRITE ( 6 , * )
"Requested role for ", trim(dummy_name) ,
" is ", role
271 buffer(:,1) = 10.1_wp
272 buffer(:,2) = 10.2_wp
274 CALL yac_fput ( field_id(1), nbr_cells, 2, buffer(1:nbr_cells,1:2), info, ierror )
276 WRITE ( 6 , * )
"atmosphere CPL TAUX 1", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
277 IF ( info > 0 )
WRITE ( 6 , * )
"atmosphere CPL TAUX 2", minval(buffer(1:nbr_cells,2:2)), maxval(buffer(1:nbr_cells,2:2))
280 buffer(:,1) = 20.1_wp
281 buffer(:,2) = 20.2_wp
283 CALL yac_fput ( field_id(2), nbr_cells, 2, buffer(1:nbr_cells,1:2), info, ierror )
285 WRITE ( 6 , * )
"atmosphere CPL TAUY 1", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
287 WRITE ( 6 , * )
"atmosphere CPL TAUY 2", minval(buffer(1:nbr_cells,2:2)), maxval(buffer(1:nbr_cells,2:2))
290 buffer(:,1) = 30.1_wp
291 buffer(:,2) = 30.2_wp
292 buffer(:,3) = 30.3_wp
294 CALL yac_fput ( field_id(3), nbr_cells, 3, buffer(1:nbr_cells,1:3), info, ierror )
297 buffer(:,1) = 40.1_wp
298 CALL yac_fput ( field_id(4), nbr_cells, 1, buffer(1:nbr_cells,1:1), info, ierror )
301 buffer(:,1) = 50.1_wp
302 buffer(:,2) = 50.2_wp
303 buffer(:,3) = 50.3_wp
304 buffer(:,4) = 50.4_wp
306 CALL yac_fput ( field_id(5), nbr_cells, 4, buffer(1:nbr_cells,1:4), info, ierror )
309 buffer(:,1) = 60.1_wp
310 buffer(:,2) = 60.2_wp
311 buffer(:,3) = 60.3_wp
312 buffer(:,4) = 60.4_wp
314 CALL yac_fput ( field_id(6), nbr_cells, 4, buffer(1:nbr_cells,1:4), info, ierror )
321 CALL yac_fget ( field_id(7), nbr_cells, 1, buffer(1:nbr_cells,1:1), info, ierror )
323 WRITE ( 6 , * )
"atmosphere CPL SST", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
326 CALL yac_fget ( field_id(8), nbr_cells, 1, buffer(1:nbr_cells,1:1), info, ierror )
328 WRITE ( 6 , * )
"atmosphere CPL OCEANU", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
331 CALL yac_fget ( field_id(9), nbr_cells, 1, buffer(1:nbr_cells,1:1), info, ierror )
333 WRITE ( 6 , * )
"atmosphere CPL OCEANV", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
337 CALL yac_fget ( field_id(10), nbr_cells, 5, buffer(1:nbr_cells,1:5), info, ierror )
339 WRITE ( 6 , * )
"atmosphere CPL ice 1", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
340 WRITE ( 6 , * )
"atmosphere CPL ice 2", minval(buffer(1:nbr_cells,2:2)), maxval(buffer(1:nbr_cells,2:2))
341 WRITE ( 6 , * )
"atmosphere CPL ice 3", minval(buffer(1:nbr_cells,3:3)), maxval(buffer(1:nbr_cells,3:3))
342 WRITE ( 6 , * )
"atmosphere CPL ice 4", minval(buffer(1:nbr_cells,4:4)), maxval(buffer(1:nbr_cells,4:4))
343 WRITE ( 6 , * )
"atmosphere CPL ice 5", minval(buffer(1:nbr_cells,5:5)), maxval(buffer(1:nbr_cells,5:5))
351 CALL mpi_finalize (ierror)
357 CHARACTER(LEN=max_char_length) :: configFilename
359 CHARACTER(LEN=max_char_length) :: arg
361 LOGICAL :: skip_arg = .false.
363 DO i = 1, command_argument_count()
365 IF (.NOT. skip_arg)
THEN
367 CALL get_command_argument(i, arg)
372 IF (i == command_argument_count())
THEN
373 print
'(2a, /)',
'missing parameter for command-line option: ', arg
374 print
'(a, /)',
'command-line options:'
375 print
'(a)',
' -c configFilename'
378 CALL get_command_argument(i+1, configfilename)
383 print
'(2a, /)',
'unrecognised command-line option: ', arg
384 print
'(a, /)',
'command-line options:'
385 print
'(a)',
' -c configFilename'
Fortran interface for the definition of coupling fields using default masks.
Fortran interface for the definition of grids.
Fortran interface for the definition of points.
Fortran interface for invoking the end of the definition phase.
Fortran interface for the coupler termination.
Fortran interface for getting back a local MPI communicator.
Fortran interface for getting the YAC version.
Fortran interface for receiving coupling fields.
Fortran interface for sending coupling fields.
Fortran interface for the reading of configuration files.
Fortran interface for the setting of a grid core masks.
Fortran interface for the setting of grid global ids.
Fortran interface for the setting of default pointset masks.
static void parse_arguments(int argc, char **argv, enum experiment_type *experiment)