YAC 3.13.0
Yet Another Coupler
Loading...
Searching...
No Matches
test_read_icon_parallel.F90
Go to the documentation of this file.
1! Copyright (c) 2024 The YAC Authors
2!
3! SPDX-License-Identifier: BSD-3-Clause
4
5#include "test_macros.inc"
6
10
11PROGRAM main
12
13 use, INTRINSIC :: iso_c_binding
14 USE utest
15 USE yac_core
16 USE yac_utils
17 USE mpi
18
19 IMPLICIT NONE
20
21 CHARACTER(KIND=c_char,LEN=*), PARAMETER :: grid_filename = &
22 "test_read_icon_parallel_grid.nc" // c_null_char
23
24 INTERFACE
25 SUBROUTINE write_test_grid_file_c ( grid_filename, coord_unit ) &
26 bind( c, name='write_test_grid_file_f2c' )
27 use, INTRINSIC :: iso_c_binding, only : c_char, c_int
28 CHARACTER(KIND=c_char), DIMENSION(*) :: grid_filename
29 INTEGER(KIND=c_int), value :: coord_unit
30 END SUBROUTINE write_test_grid_file_c
31 END INTERFACE
32
33 INTERFACE
34 SUBROUTINE c_unlink ( path ) bind ( c, name='unlink' )
35 use, INTRINSIC :: iso_c_binding, only : c_char
36 CHARACTER(KIND=c_char), DIMENSION(*) :: path
37 END SUBROUTINE c_unlink
38 END INTERFACE
39
40 INTEGER :: comm_size, comm_rank
41 INTEGER :: ierror
42
43 ! ===================================================================
44
45 CALL start_test('read_icon_parallel')
46
47 CALL mpi_init(ierror)
48
49
50 CALL mpi_comm_size(mpi_comm_world, comm_size, ierror)
51 CALL mpi_comm_rank(mpi_comm_world, comm_rank, ierror)
52
53 CALL test(comm_size == 4)
54
55 CALL write_test_grid_file_c(grid_filename, 0_c_int)
56
57 ! ===================================================================
58 ! yac_read_icon_grid_information_parallel (incl. halos)
59 ! ===================================================================
60 block
61
62 INTEGER(KIND=c_int), PARAMETER :: ref_num_cells(4) = (/11,9,14,9/)
63 INTEGER(KIND=c_int), PARAMETER :: ref_num_vertices(4) = (/11,10,13,10/)
64
65 INTEGER(KIND=C_INT) :: num_vertices
66 INTEGER(KIND=C_INT) :: num_cells
67 TYPE(C_PTR) :: num_vertices_per_cell ! int **
68 TYPE(C_PTR) :: cell_to_vertex ! int **
69 TYPE(C_PTR) :: global_cell_id ! int **
70 TYPE(C_PTR) :: cell_owner ! int **
71 TYPE(C_PTR) :: global_vertex_ids ! int **
72 TYPE(C_PTR) :: vertex_owner ! int **
73 TYPE(C_PTR) :: x_vertices ! double **
74 TYPE(C_PTR) :: y_vertices ! double **
75 TYPE(C_PTR) :: x_cells ! double **
76 TYPE(C_PTR) :: y_cells ! double **
77 TYPE(C_PTR) :: cell_mask ! int **
78
80 grid_filename, mpi_comm_world, num_vertices, num_cells, &
81 num_vertices_per_cell, cell_to_vertex, global_cell_id, &
82 cell_owner, global_vertex_ids, vertex_owner, &
83 x_vertices, y_vertices, x_cells, y_cells, cell_mask)
84
85 CALL test(num_vertices == ref_num_vertices(comm_rank + 1))
86 CALL test(num_cells == ref_num_cells(comm_rank + 1))
87
88 CALL yac_free_c(num_vertices_per_cell)
89 CALL yac_free_c(cell_to_vertex)
90 CALL yac_free_c(global_cell_id)
91 CALL yac_free_c(cell_owner)
92 CALL yac_free_c(global_vertex_ids)
93 CALL yac_free_c(vertex_owner)
94 CALL yac_free_c(x_vertices)
95 CALL yac_free_c(y_vertices)
96 CALL yac_free_c(x_cells)
97 CALL yac_free_c(y_cells)
98 CALL yac_free_c(cell_mask)
99 END block
100
101 ! ===================================================================
102 ! yac_read_icon_basic_grid_parallel
103 ! ===================================================================
104 block
105
106 TYPE(C_PTR) :: icon_grid
107 icon_grid = &
109 grid_filename, trim("icon_grid")//c_null_char, mpi_comm_world)
110 CALL test(yac_basic_grid_get_data_size_c(icon_grid, yac_loc_cell) == 4)
111 CALL test(yac_basic_grid_get_data_size_c(icon_grid, yac_loc_corner) == 6)
112 CALL yac_basic_grid_delete_c(icon_grid)
113
114 END block
115
116 CALL mpi_barrier(mpi_comm_world, ierror)
117 IF (comm_rank == 0) THEN
118 CALL c_unlink(grid_filename)
119 END IF
120
121 CALL mpi_finalize(ierror)
122
123 CALL stop_test
124 CALL exit_tests
125
126END PROGRAM main
Definition utest.F90:5
subroutine, public start_test(name)
Definition utest.F90:20
@ yac_loc_cell
Definition yac_core.F90:33
@ yac_loc_corner
Definition yac_core.F90:34