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)
62 yaml_filename =
"toy_dummy.yaml"
67 comp_name =
"dummy_ocean"
68 grid_name =
"dummy_ocean_grid"
74 print *,
'Local Comm', local_comm
76 CALL mpi_comm_rank ( local_comm, rank, ierror )
77 CALL mpi_comm_size ( local_comm, npes, ierror )
79 WRITE ( 6 , * ) trim(comp_name),
" rank ", rank,
": local size is ", npes
81 ALLOCATE(buffer_lon(nbr_vertices))
82 ALLOCATE(buffer_lat(nbr_vertices))
83 ALLOCATE(cell_to_vertex(3,nbr_cells))
85 nbr_vertices_per_cell = 3
99 buffer_lon(1) = 0.0 * yac_rad
100 buffer_lon(2) = -1.0 * yac_rad
101 buffer_lon(3) = 1.0 * yac_rad
102 buffer_lon(4) = 0.0 * yac_rad
103 buffer_lat(1) = 1.0 * yac_rad
104 buffer_lat(2) = 0.0 * yac_rad
105 buffer_lat(3) = 0.0 * yac_rad
106 buffer_lat(4) = -1.0 * yac_rad
109 cell_to_vertex(1,1) = 1
110 cell_to_vertex(2,1) = 2
111 cell_to_vertex(3,1) = 3
112 cell_to_vertex(1,2) = 2
113 cell_to_vertex(2,2) = 4
114 cell_to_vertex(3,2) = 3
121 & nbr_vertices_per_cell, &
131 cell_core_mask(i) = 1
145 buffer_lon(1) = 0.0 * yac_rad
146 buffer_lon(2) = 0.0 * yac_rad
147 buffer_lat(1) = 0.5 * yac_rad
148 buffer_lat(2) = -0.5 * yac_rad
156 & cell_point_ids(1) )
158 DEALLOCATE (buffer_lon, buffer_lat, cell_to_vertex)
161 ALLOCATE(cell_mask(nbr_cells))
168 & cell_point_ids(1) )
170 DEALLOCATE (cell_mask)
172 field_name(1) =
"surface_downward_eastward_stress"
173 field_name(2) =
"surface_downward_northward_stress"
174 field_name(3) =
"surface_fresh_water_flux"
175 field_name(4) =
"surface_temperature"
176 field_name(5) =
"total_heat_flux"
177 field_name(6) =
"atmosphere_sea_ice_bundle"
178 field_name(7) =
"sea_surface_temperature"
179 field_name(8) =
"eastward_sea_water_velocity"
180 field_name(9) =
"northward_sea_water_velocity"
181 field_name(10) =
"ocean_sea_ice_bundle"
182 field_name(11) =
"ocean_out1"
183 field_name(12) =
"ocean_out2"
184 field_name(13) =
"ocean_out3"
185 field_name(14) =
"ocean_out4"
187 field_collection_size(1) = 2
188 field_collection_size(2) = 2
189 field_collection_size(3) = 3
190 field_collection_size(4) = 1
191 field_collection_size(5) = 4
192 field_collection_size(6) = 4
193 field_collection_size(7) = 1
194 field_collection_size(8) = 1
195 field_collection_size(9) = 1
196 field_collection_size(10) = 5
197 field_collection_size(11) = 1
198 field_collection_size(12) = 1
199 field_collection_size(13) = 1
200 field_collection_size(14) = 1
202 ALLOCATE(field_id(no_of_fields))
206 DO i = 1, no_of_fields-4
212 & field_collection_size(i), &
220 DO i = no_of_fields-3, no_of_fields
226 & field_collection_size(i), &
236 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) = 110.0_wp
272 CALL yac_fput ( field_id(7), nbr_cells, 1, buffer(1:nbr_cells,1:1), info, ierror )
274 WRITE ( 6 , * )
"ocean CPL SST", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
277 buffer(:,1) = 120.0_wp
278 CALL yac_fput ( field_id(8), nbr_cells, 1, buffer(1:nbr_cells,1:1), info, ierror )
280 WRITE ( 6 , * )
"ocean CPL U", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
283 buffer(:,1) = 130.0_wp
284 CALL yac_fput ( field_id(9), nbr_cells, 1, buffer(1:nbr_cells,1:1), info, ierror )
286 WRITE ( 6 , * )
"ocean CPL V", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
289 buffer(:,1) = 140.1_wp
290 buffer(:,2) = 140.2_wp
291 buffer(:,3) = 140.3_wp
292 buffer(:,4) = 140.4_wp
293 buffer(:,5) = 140.5_wp
295 CALL yac_fput ( field_id(10), nbr_cells, 5, buffer(1:nbr_cells,1:5), info, ierror )
297 WRITE ( 6 , * )
"ocean CPL ice 1", minval(buffer(1:nbr_cells,1:1)), maxval(buffer(1:nbr_cells,1:1))
298 WRITE ( 6 , * )
"ocean CPL ice 2", minval(buffer(1:nbr_cells,2:2)), maxval(buffer(1:nbr_cells,2:2))
299 WRITE ( 6 , * )
"ocean CPL ice 3", minval(buffer(1:nbr_cells,3:3)), maxval(buffer(1:nbr_cells,3:3))
300 WRITE ( 6 , * )
"ocean CPL ice 4", minval(buffer(1:nbr_cells,4:4)), maxval(buffer(1:nbr_cells,4:4))
301 WRITE ( 6 , * )
"ocean CPL ice 5", minval(buffer(1:nbr_cells,5:5)), maxval(buffer(1:nbr_cells,5:5))
310 CALL yac_fget ( field_id(1), nbr_cells, 2, buffer, info, ierror )
314 CALL yac_fget ( field_id(2), nbr_cells, 2, buffer, info, ierror )
318 CALL yac_fget ( field_id(3), nbr_cells, 3, buffer, info, ierror )
321 CALL yac_fget ( field_id(4), nbr_cells, 1, buffer, info, ierror )
325 CALL yac_fget ( field_id(5), nbr_cells, 4, buffer, info, ierror )
329 CALL yac_fget ( field_id(6), nbr_cells, 4, buffer, info, ierror )
336 CALL mpi_finalize (ierror)
342 CHARACTER(LEN=max_char_length) :: configFilename
344 CHARACTER(LEN=max_char_length) :: arg
346 LOGICAL :: skip_arg = .false.
348 DO i = 1, command_argument_count()
350 IF (.NOT. skip_arg)
THEN
352 CALL get_command_argument(i, arg)
357 IF (i == command_argument_count())
THEN
358 print
'(2a, /)',
'missing parameter for command-line option: ', arg
359 print
'(a, /)',
'command-line options:'
360 print
'(a)',
' -c configFilename'
363 CALL get_command_argument(i+1, configfilename)
368 print
'(2a, /)',
'unrecognised command-line option: ', arg
369 print
'(a, /)',
'command-line options:'
370 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)
character(len=:) function, allocatable yac_fget_field_name_from_field_id(field_id)