5#include "test_macros.inc"
13 use,
INTRINSIC :: iso_c_binding
22 SUBROUTINE write_dummy_scrip_grid_file_c ( &
23 grid_name, grid_filename, mask_filename, &
24 with_corner, num_lon, num_lat, lon_range, lat_range ) &
25 bind( c, name=
'write_dummy_scrip_grid_file' )
26 use,
INTRINSIC :: iso_c_binding, only : c_char, c_int, c_size_t, c_double
27 CHARACTER(KIND=c_char),
DIMENSION(*) :: grid_name
28 CHARACTER(KIND=c_char),
DIMENSION(*) :: grid_filename
29 CHARACTER(KIND=c_char),
DIMENSION(*) :: mask_filename
30 INTEGER(KIND=c_int),
value :: with_corner
31 INTEGER(KIND=c_size_t),
value :: num_lon
32 INTEGER(KIND=c_size_t),
value :: num_lat
33 REAL(KIND=c_double),
DIMENSION(*) :: lat_range
34 REAL(KIND=c_double),
DIMENSION(*) :: lon_range
35 END SUBROUTINE write_dummy_scrip_grid_file_c
39 SUBROUTINE c_unlink ( path ) bind ( c, name='unlink' )
40 use,
INTRINSIC :: iso_c_binding, only : c_char
41 CHARACTER(KIND=c_char),
DIMENSION(*) :: path
42 END SUBROUTINE c_unlink
45 INTEGER :: comm_size, comm_rank
55 CALL mpi_comm_size(mpi_comm_world, comm_size, ierror)
56 CALL mpi_comm_rank(mpi_comm_world, comm_rank, ierror)
58 CALL test(comm_size == 4)
63 CALL test_yac_read_scrip_basic_grid_parallel()
68 CALL test_yac_read_scrip_cloud_basic_grid_parallel()
73 CALL test_yac_read_scrip_generic_basic_grid_parallel()
75 CALL mpi_finalize(ierror)
82 SUBROUTINE test_yac_read_scrip_basic_grid_parallel()
86 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: grid_name = &
87 "dummy_grid" // c_null_char
88 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: grid_filename = &
89 "test_read_scrip_parallel_grids.nc" // c_null_char
90 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: mask_filename = &
91 "test_read_scrip_parallel_masks.nc" // c_null_char
93 INTEGER(KIND=C_INT),
PARAMETER :: with_corner = 1_c_int
94 INTEGER(KIND=C_INT),
PARAMETER :: valid_mask_value = 0_c_int
95 INTEGER(KIND=C_INT),
PARAMETER :: use_ll_edges = 0_c_int
97 INTEGER(KIND=C_SIZE_T) :: cell_coord_idx
98 TYPE(C_PTR) :: duplicated_cell_idx
99 TYPE(C_PTR) :: orig_cell_global_id
100 INTEGER(KIND=C_SIZE_T) :: nbr_duplicated_cells
102 TYPE(C_PTR) :: scrip_grid
105 IF (comm_rank == 0) &
106 CALL write_dummy_scrip_grid_file_c( &
107 grid_name, grid_filename, mask_filename, with_corner, &
108 360_c_size_t, 180_c_size_t, (/0.0_c_double, 360.0_c_double/), &
109 (/-90.0_c_double, 90.0_c_double/))
110 CALL mpi_barrier(mpi_comm_world, ierror)
114 grid_filename, mask_filename, mpi_comm_world, grid_name, &
115 valid_mask_value, grid_name, use_ll_edges, cell_coord_idx, &
116 duplicated_cell_idx, orig_cell_global_id, nbr_duplicated_cells)
124 CALL mpi_barrier(mpi_comm_world, ierror)
125 IF (comm_rank == 0)
THEN
126 CALL c_unlink(grid_filename)
127 CALL c_unlink(mask_filename)
130 END SUBROUTINE test_yac_read_scrip_basic_grid_parallel
132 SUBROUTINE test_yac_read_scrip_cloud_basic_grid_parallel()
136 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: grid_name = &
137 "dummy_grid" // c_null_char
138 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: grid_filename = &
139 "test_read_scrip_cloud_parallel_grids.nc" // c_null_char
140 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: mask_filename = &
141 "test_read_scrip_cloud_parallel_masks.nc" // c_null_char
143 INTEGER(KIND=C_INT),
PARAMETER :: with_corner = 0_c_int
144 INTEGER(KIND=C_INT),
PARAMETER :: valid_mask_value = 0_c_int
146 INTEGER(KIND=C_SIZE_T) :: vertex_coord_idx
147 TYPE(C_PTR) :: duplicated_vertex_idx
148 TYPE(C_PTR) :: orig_vertex_global_id
149 INTEGER(KIND=C_SIZE_T) :: nbr_duplicated_vertices
151 TYPE(C_PTR) :: scrip_cloud_grid
153 INTEGER :: local_nbr_duplicated_vertices(1)
154 INTEGER :: global_nbr_duplicated_vertices(1)
157 IF (comm_rank == 0) &
158 CALL write_dummy_scrip_grid_file_c( &
159 grid_name, grid_filename, mask_filename, with_corner, &
160 380_c_size_t, 180_c_size_t, (/0.0_c_double, 380.0_c_double/), &
161 (/-90.0_c_double, 90.0_c_double/))
162 CALL mpi_barrier(mpi_comm_world, ierror)
166 grid_filename, mask_filename, mpi_comm_world, grid_name, &
167 valid_mask_value, grid_name, vertex_coord_idx, &
168 duplicated_vertex_idx, orig_vertex_global_id, nbr_duplicated_vertices)
170 local_nbr_duplicated_vertices(1) = int(nbr_duplicated_vertices)
171 CALL mpi_allreduce( &
172 local_nbr_duplicated_vertices, global_nbr_duplicated_vertices, &
173 1, mpi_integer, mpi_sum, mpi_comm_world, ierror)
174 CALL test(global_nbr_duplicated_vertices(1) == 20 * 180)
182 CALL mpi_barrier(mpi_comm_world, ierror)
183 IF (comm_rank == 0)
THEN
184 CALL c_unlink(grid_filename)
185 CALL c_unlink(mask_filename)
188 END SUBROUTINE test_yac_read_scrip_cloud_basic_grid_parallel
190 SUBROUTINE test_yac_read_scrip_generic_basic_grid_parallel()
194 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: grid_name = &
195 "dummy_grid" // c_null_char
196 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: grid_filename = &
197 "test_read_scrip_parallel_2_grids.nc" // c_null_char
198 CHARACTER(KIND=c_char,LEN=*),
PARAMETER :: mask_filename = &
199 "test_read_scrip_parallel_2_masks.nc" // c_null_char
201 INTEGER(KIND=C_INT) :: with_corner
202 INTEGER(KIND=C_INT),
PARAMETER :: valid_mask_value = 0_c_int
203 INTEGER(KIND=C_INT),
PARAMETER :: use_ll_edges = 0_c_int
205 INTEGER(KIND=C_SIZE_T) :: cell_coord_idx
206 TYPE(C_PTR) :: duplicated_cell_idx
207 TYPE(C_PTR) :: orig_cell_global_id
208 INTEGER(KIND=C_SIZE_T) :: nbr_duplicated_cells
210 INTEGER(KIND=C_SIZE_T) :: vertex_coord_idx
211 TYPE(C_PTR) :: duplicated_vertex_idx
212 TYPE(C_PTR) :: orig_vertex_global_id
213 INTEGER(KIND=C_SIZE_T) :: nbr_duplicated_vertices
215 INTEGER(KIND=C_INT) :: point_location
217 TYPE(C_PTR) :: scrip_grid
218 TYPE(C_PTR) :: scrip_cloud_grid
221 IF (comm_rank == 0)
THEN
222 with_corner = 1_c_int
223 CALL write_dummy_scrip_grid_file_c( &
224 grid_name, grid_filename, mask_filename, with_corner, &
225 360_c_size_t, 180_c_size_t, (/0.0_c_double, 360.0_c_double/), &
226 (/-90.0_c_double, 90.0_c_double/))
228 CALL mpi_barrier(mpi_comm_world, ierror)
232 grid_filename, mask_filename, mpi_comm_world, grid_name, &
233 valid_mask_value, grid_name, use_ll_edges, cell_coord_idx, &
234 duplicated_cell_idx, orig_cell_global_id, nbr_duplicated_cells, &
245 CALL mpi_barrier(mpi_comm_world, ierror)
246 IF (comm_rank == 0)
THEN
247 CALL c_unlink(grid_filename)
248 CALL c_unlink(mask_filename)
251 CALL mpi_barrier(mpi_comm_world, ierror)
254 IF (comm_rank == 0)
THEN
255 with_corner = 0_c_int
256 CALL write_dummy_scrip_grid_file_c( &
257 grid_name, grid_filename, mask_filename, with_corner, &
258 380_c_size_t, 180_c_size_t, (/0.0_c_double, 380.0_c_double/), &
259 (/-90.0_c_double, 90.0_c_double/))
261 CALL mpi_barrier(mpi_comm_world, ierror)
265 grid_filename, mask_filename, mpi_comm_world, grid_name, &
266 valid_mask_value, grid_name, use_ll_edges, vertex_coord_idx, &
267 duplicated_vertex_idx, orig_vertex_global_id, nbr_duplicated_vertices, &
278 CALL mpi_barrier(mpi_comm_world, ierror)
279 IF (comm_rank == 0)
THEN
280 CALL c_unlink(grid_filename)
281 CALL c_unlink(mask_filename)
284 END SUBROUTINE test_yac_read_scrip_generic_basic_grid_parallel
subroutine, public start_test(name)
subroutine, public stop_test()
subroutine, public exit_tests()