9#include "test_macros.inc"
19 INTEGER :: global_rank, global_size, rank_type, ierror, i, j, rank, idx
20 INTEGER :: yac_id, comp_id, comp_id_instance, grid_id, point_id, &
21 field_id, field_id_instance, prelim_id, prelim_id_instance, mask_id
22 INTEGER :: ref_nbr_comps, ref_nbr_grids
23 INTEGER :: mask_valid(1)
24 CHARACTER (LEN=YAC_MAX_CHARLEN) :: comp_name
25 CHARACTER (LEN=YAC_MAX_CHARLEN) :: ref_comp_name, ref_grid_names(3), &
27 CHARACTER (LEN=YAC_MAX_CHARLEN) :: grid_name
28 CHARACTER (LEN=YAC_MAX_CHARLEN) :: field_name
29 TYPE(
yac_string),
ALLOCATABLE :: comp_names(:), comp_names_instance(:)
30 TYPE(
yac_string),
ALLOCATABLE :: grid_names(:), grid_names_instance(:)
31 TYPE(
yac_string),
ALLOCATABLE :: field_names(:), field_names_instance(:)
32 TYPE(
yac_string),
ALLOCATABLE :: comp_grid_names(:)
34 DOUBLE PRECISION,
PARAMETER :: yac_rad = 0.017453292519943295769d0
37 allocate(comp_names(0), comp_names_instance(0), &
38 grid_names(0), grid_names_instance(0), &
39 field_names(0), field_names_instance(0), &
45 CALL xt_initialize(mpi_comm_world)
58 CALL mpi_comm_rank(mpi_comm_world, global_rank, ierror)
59 CALL mpi_comm_size(mpi_comm_world, global_size, ierror)
66 rank_type = mod(global_rank, 5)
68 IF (rank_type == 0)
THEN
77 WRITE (comp_name ,
"('comp_',I0)") global_rank
82 CALL test(prelim_id == comp_id)
83 CALL test(prelim_id_instance == comp_id_instance)
87 IF (rank_type > 1)
THEN
90 comp_name, trim(comp_name) //
" METADATA_C")
92 yac_id, comp_name, trim(comp_name) //
" METADATA_C_instance")
94 WRITE (grid_name ,
"('grid_',I0,'_0')") global_rank
97 grid_name, [2, 2], [0,0], [0.,180.]*yac_rad, &
98 [-45.,45.]*yac_rad, grid_id)
99 CALL test(prelim_id == grid_id)
104 [90.]*yac_rad, [0.]*yac_rad,
"points_0", point_id)
105 CALL test(prelim_id == point_id)
111 CALL test(prelim_id == mask_id)
115 IF (rank_type > 2)
THEN
117 WRITE (grid_name ,
"('grid_',I0,'_1')") global_rank
119 grid_name, [2, 2], [0,0], [0.,180.]*yac_rad, &
120 [-45.,45.]*yac_rad, grid_id)
124 [90.]*yac_rad, [0.]*yac_rad, point_id)
127 grid_name, trim(grid_name) //
" METADATA_G")
129 yac_id, grid_name, trim(grid_name) //
" METADATA_G_instance")
135 IF (rank_type > 3)
THEN
137 WRITE (grid_name ,
"('grid_',I0,'_2')") global_rank
139 grid_name, [2, 2], [0,0], [0.,180.]*yac_rad, &
140 [-45.,45.]*yac_rad, grid_id)
144 [90.]*yac_rad, [0.]*yac_rad, point_id)
147 grid_name, trim(grid_name) //
" METADATA_G")
149 yac_id, grid_name, trim(grid_name) //
" METADATA_G_instance")
151 WRITE (field_name ,
"('field_',I0,'_0')") global_rank
153 field_name, comp_id, [point_id], 1, 1,
"PT5M", &
156 field_name, comp_id_instance, [point_id], 1, 1,
"PT5M", &
159 WRITE (field_name ,
"('field_',I0,'_1')") global_rank
161 field_name, comp_id, [point_id], 1, 1,
"PT5M", &
164 field_name, comp_id_instance, [point_id], 1, 1,
"PT5M", &
167 comp_name, grid_name, field_name, &
168 trim(field_name) //
" METADATA_F")
170 yac_id, comp_name, grid_name, field_name,&
171 trim(field_name) //
" METADATA_F_instance")
181 CALL test(field_id_instance ==
yac_fget_field_id(yac_id, comp_name, grid_name, field_name))
207 ref_nbr_comps = 4 * ((global_size - 1) / 5) + mod(global_size - 1, 5)
208 IF (
ALLOCATED(comp_names))
DEALLOCATE(comp_names)
210 IF (
ALLOCATED(comp_names_instance))
DEALLOCATE(comp_names_instance)
212 CALL test(
SIZE(comp_names) == ref_nbr_comps)
213 CALL test(
SIZE(comp_names_instance) == ref_nbr_comps)
216 3 * ((global_size - 1) / 5) +
merge(1, 0, mod(global_size - 1, 5) > 2) + &
217 merge(2, 0, mod(global_size - 1, 5) > 3)
219 IF (
ALLOCATED(grid_names))
DEALLOCATE(grid_names)
221 IF (
ALLOCATED(grid_names_instance))
DEALLOCATE(grid_names_instance)
223 CALL test(
SIZE(grid_names) == ref_nbr_grids)
224 CALL test(
SIZE(grid_names_instance) == ref_nbr_grids)
226 DO rank = 0, global_size - 1
228 rank_type = mod(rank, 5)
229 WRITE (ref_comp_name,
"('comp_',I0)") rank
231 WRITE (ref_grid_names(i),
"('grid_',I0,'_',I0)") rank, i - 1
234 WRITE (ref_field_names(i),
"('field_',I0,'_',I0)") rank, i - 1
237 IF (rank_type == 0)
THEN
241 DO i = 1, ref_nbr_comps
242 IF (ref_comp_name == comp_names(i)%string) idx = i
246 DO i = 1, ref_nbr_comps
247 IF (ref_comp_name == comp_names_instance(i)%string) idx = i
252 DO j = 1, ref_nbr_grids
253 IF (ref_grid_names(i) == grid_names(j)%string) idx = j
257 DO j = 1, ref_nbr_grids
258 IF (ref_grid_names(i) == grid_names_instance(j)%string) idx = j
267 DO i = 1, ref_nbr_comps
268 IF (ref_comp_name == comp_names(i)%string) idx = i
272 DO i = 1, ref_nbr_comps
273 IF (ref_comp_name == comp_names_instance(i)%string) idx = i
277 IF (rank_type == 1)
THEN
286 DO j = 1, ref_nbr_grids
287 IF (ref_grid_names(i) == grid_names(j)%string) idx = j
291 DO j = 1, ref_nbr_grids
292 IF (ref_grid_names(i) == grid_names_instance(j)%string) idx = j
297 IF (
ALLOCATED(comp_grid_names))
DEALLOCATE(comp_grid_names)
299 CALL test(
SIZE(comp_grid_names) == 0)
300 IF (
ALLOCATED(comp_grid_names))
DEALLOCATE(comp_grid_names)
302 CALL test(
SIZE(comp_grid_names) == 0)
312 IF (rank_type == 2)
THEN
317 DO j = 1, ref_nbr_grids
318 IF (ref_grid_names(i) == grid_names(j)%string) idx = j
322 DO j = 1, ref_nbr_grids
323 IF (ref_grid_names(i) == grid_names_instance(j)%string) idx = j
328 IF (
ALLOCATED(comp_grid_names))
DEALLOCATE(comp_grid_names)
330 CALL test(
SIZE(comp_grid_names) == 0)
331 IF (
ALLOCATED(comp_grid_names))
DEALLOCATE(comp_grid_names)
333 CALL test(
SIZE(comp_grid_names) == 0)
338 DO j = 1, ref_nbr_grids
339 IF (ref_grid_names(1) == grid_names(j)%string) idx = j
343 DO j = 1, ref_nbr_grids
344 IF (ref_grid_names(1) == grid_names_instance(j)%string) idx = j
351 DO j = 1, ref_nbr_grids
352 IF (ref_grid_names(2) == grid_names(j)%string) idx = j
356 DO j = 1, ref_nbr_grids
357 IF (ref_grid_names(2) == grid_names_instance(j)%string) idx = j
363 CALL test(
yac_fget_grid_metadata(yac_id, ref_grid_names(2)) == trim(ref_grid_names(2)) //
" METADATA_G_instance")
364 IF (
ALLOCATED(field_names))
DEALLOCATE(field_names)
366 CALL test(
SIZE(field_names) == 0)
367 IF (
ALLOCATED(field_names_instance))
DEALLOCATE(field_names_instance)
368 field_names_instance = &
370 CALL test(
SIZE(field_names_instance) == 0)
372 IF (rank_type == 3)
THEN
376 DO j = 1, ref_nbr_grids
377 IF (ref_grid_names(3) == grid_names(j)%string) idx = j
381 DO j = 1, ref_nbr_grids
382 IF (ref_grid_names(3) == grid_names_instance(j)%string) idx = j
386 IF (
ALLOCATED(comp_grid_names))
DEALLOCATE(comp_grid_names)
388 CALL test(
SIZE(comp_grid_names) == 0)
389 IF (
ALLOCATED(comp_grid_names))
DEALLOCATE(comp_grid_names)
391 CALL test(
SIZE(comp_grid_names) == 0)
398 DO j = 1, ref_nbr_grids
399 IF (ref_grid_names(3) == grid_names(j)%string) idx = j
403 DO j = 1, ref_nbr_grids
404 IF (ref_grid_names(3) == grid_names_instance(j)%string) idx = j
410 CALL test(
yac_fget_grid_metadata(yac_id, ref_grid_names(3)) == trim(ref_grid_names(3)) //
" METADATA_G_instance")
411 IF (
ALLOCATED(field_names))
DEALLOCATE(field_names)
414 CALL test(
SIZE(field_names) == 2)
415 IF (
ALLOCATED(field_names_instance))
DEALLOCATE(field_names_instance)
416 field_names_instance = &
418 CALL test(
SIZE(field_names_instance) == 2)
422 IF (ref_field_names(i) == field_names(j)%string) idx = j
427 IF (ref_field_names(i) == field_names_instance(j)%string) idx = j
435 CALL test(
yac_fget_field_metadata(ref_comp_name, ref_grid_names(3), ref_field_names(2)) == trim(ref_field_names(2)) //
" METADATA_F")
436 CALL test(
yac_fget_field_metadata(yac_id, ref_comp_name, ref_grid_names(3), ref_field_names(2)) == trim(ref_field_names(2)) //
" METADATA_F_instance")
438 IF (
ALLOCATED(comp_grid_names))
DEALLOCATE(comp_grid_names)
440 CALL test(
SIZE(comp_grid_names) == 1)
441 CALL test(comp_grid_names(1)%string == ref_grid_names(3))
442 IF (
ALLOCATED(comp_grid_names))
DEALLOCATE(comp_grid_names)
444 CALL test(
SIZE(comp_grid_names) == 1)
445 CALL test(comp_grid_names(1)%string == ref_grid_names(3))
462 CALL mpi_finalize(ierror)
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 checking if default instance is defined.
Fortran interface for the coupler termination.
Fortran interface for invoking the end of the definition phase.
static void merge(char *base_a, size_t num_a, int a_ascending, char *base_b, size_t num_b, int b_ascending, size_t size, int(*compar)(const void *, const void *), char *target)
subroutine, public start_test(name)
subroutine, public stop_test()
subroutine, public exit_tests()
@ yac_time_unit_iso_format
@ yac_proleptic_gregorian
program test_query_routines