46 PROGRAM test_redist_p2p_f
48 USE yaxt, ONLY: xt_int_kind, xt_xmap, xt_idxlist, xt_redist, xt_offset_ext, &
60 USE ftest_common
, ONLY: init_mpi, finish_mpi, test_abort
61 USE test_redist_common
, ONLY: check_redist, communicators_are_congruent
62 USE test_idxlist_utils
, ONLY: test_err_count
72 CALL test_without_offsets
73 CALL test_with_offsets
76 IF (test_err_count() /= 0) &
77 CALL test_abort(
"non-zero error count!", &
86 SUBROUTINE test_without_offsets
87 INTEGER,
PARAMETER :: src_num_indices = 14, dst_num_indices = 13
88 INTEGER(xt_int_kind),
PARAMETER :: src_index_list(src_num_indices) &
89 = (/ 5_xi, 67_xi, 4_xi, 5_xi, 13_xi, &
90 & 9_xi, 2_xi, 1_xi, 0_xi, 96_xi, &
91 & 13_xi, 12_xi, 1_xi, 3_xi /), &
92 dst_index_list(dst_num_indices) = &
93 & (/ 5_xi, 4_xi, 3_xi, 96_xi, 1_xi, &
94 & 5_xi, 4_xi, 5_xi, 4_xi, 3_xi, &
95 & 13_xi, 2_xi, 1_xi /)
98 DOUBLE PRECISION,
PARAMETER :: src_data(src_num_indices) = &
99 (/ (dble(i), i=0,src_num_indices-1) /)
102 DOUBLE PRECISION :: src_data(src_num_indices)
104 DOUBLE PRECISION,
PARAMETER :: ref_dst_data(dst_num_indices) &
105 = (/ 0.0d0, 2.0d0, 13.0d0, 9.0d0, 7.0d0, &
106 & 0.0d0, 2.0d0, 0.0d0, 2.0d0, 13.0d0, &
107 & 4.0d0, 6.0d0, 7.0d0 /)
108 LOGICAL :: src_l(src_num_indices), &
109 dst_l(dst_num_indices), ref_dst_l(dst_num_indices)
110 DOUBLE PRECISION :: dst_data(dst_num_indices)
111 TYPE(xt_idxlist) :: src_idxlist, dst_idxlist
112 TYPE(xt_xmap) :: xmap
113 TYPE(xt_redist) :: redist_dp, redist_copy, redist_l
116 DO i = 1, src_num_indices
117 src_data(i) = dble(i - 1)
132 IF (.NOT. communicators_are_congruent(xt_redist_get_mpi_comm(redist_dp), &
134 CALL test_abort(
"error in xt_redist_get_mpi_Comm", &
139 CALL check_redist(redist_dp, src_data, dst_data, ref_dst_data)
142 src_l = mod(src_data, 2.0d0) == 1.0d0
144 ref_dst_l = mod(ref_dst_data, 2.0d0) == 1.0d0
146 IF (.NOT. communicators_are_congruent(xt_redist_get_mpi_comm(redist_l), &
148 CALL test_abort(
"error in xt_redist_get_mpi_Comm", &
152 IF (any(dst_l .NEQV. ref_dst_l)) &
153 CALL test_abort(
"error in xt_redist_s_exchange for 1D logical array", &
158 CALL check_redist(redist_copy, src_data, dst_data, ref_dst_data)
166 END SUBROUTINE test_without_offsets
168 SUBROUTINE test_with_offsets
170 INTEGER,
PARAMETER :: src_num = 14, dst_num = 13
171 INTEGER(xt_int_kind),
PARAMETER :: src_index_list(src_num) = &
172 (/ 5_xi, 67_xi, 4_xi, 5_xi, 13_xi, &
173 & 9_xi, 2_xi, 1_xi, 0_xi, 96_xi, &
174 & 13_xi, 12_xi, 1_xi, 3_xi /), &
175 dst_index_list(dst_num) = &
176 (/ 5_xi, 4_xi, 3_xi, 96_xi, 1_xi, &
177 & 5_xi, 4_xi, 5_xi, 4_xi, 3_xi, &
178 & 13_xi, 2_xi, 1_xi /)
180 INTEGER,
PARAMETER :: src_pos(src_num) = (/ (i, i = 0, src_num - 1) /), &
181 dst_pos(dst_num) = (/ ( dst_num - i, i = 1, dst_num ) /)
182 TYPE(xt_idxlist) :: src_idxlist, dst_idxlist
183 TYPE(xt_xmap) :: xmap
184 TYPE(xt_redist) :: redist, redist_copy
186 DOUBLE PRECISION,
PARAMETER :: src_data(src_num) = &
187 (/ (dble(i), i=0,src_num-1) /)
190 DOUBLE PRECISION :: src_data(src_num)
192 DOUBLE PRECISION :: dst_data(dst_num)
193 DOUBLE PRECISION,
PARAMETER :: ref_dst_data(dst_num) = &
194 (/ 0.0d0, 2.0d0, 13.0d0, 9.0d0, 7.0d0, &
195 & 0.0d0, 2.0d0, 0.0d0, 2.0d0, 13.0d0, &
196 & 4.0d0, 6.0d0, 7.0d0 /)
200 src_data(i) = dble(i - 1)
214 IF (.NOT. communicators_are_congruent(xt_redist_get_mpi_comm(redist), &
216 CALL test_abort(
"error in xt_redist_get_MPI_Comm", &
221 CALL check_redist(redist, src_data, dst_data, ref_dst_data(dst_num:1:-1))
225 CALL check_redist(redist_copy, src_data, dst_data, &
226 ref_dst_data(dst_num:1:-1))
233 END SUBROUTINE test_with_offsets
235 SUBROUTINE test_offset_extents
237 INTEGER,
PARAMETER :: src_num = 14, dst_num = 13
238 INTEGER(xt_int_kind),
PARAMETER :: src_index_list(src_num) = &
239 (/ 5_xi, 67_xi, 4_xi, 5_xi, 13_xi, &
240 & 9_xi, 2_xi, 1_xi, 0_xi, 96_xi, &
241 & 13_xi, 12_xi, 1_xi, 3_xi /), &
242 dst_index_list(dst_num) = &
243 (/ 5_xi, 4_xi, 3_xi, 96_xi, 1_xi, &
244 & 5_xi, 4_xi, 5_xi, 4_xi, 3_xi, &
245 & 13_xi, 2_xi, 1_xi /)
246 INTEGER(xt_int_kind) :: i
247 INTEGER(xt_int_kind) :: dst_data(dst_num)
248 INTEGER(xt_int_kind),
PARAMETER :: src_data(src_num) &
249 = (/ (i, i = 0_xi, 13_xi) /), ref_dst_data(dst_num) = &
250 (/ 7_xi, 6_xi, 4_xi, 13_xi, 2_xi, &
251 & 0_xi, 2_xi, 0_xi, 7_xi, 9_xi, &
252 & 13_xi, 2_xi, 0_xi /)
253 TYPE(xt_idxlist) :: src_idxlist, dst_idxlist
254 TYPE(xt_xmap) :: xmap
255 TYPE(xt_redist) :: redist, redist_copy
256 TYPE(xt_offset_ext),
PARAMETER :: &
257 src_pos(1) = (/ xt_offset_ext(0, src_num, 1) /), &
258 dst_pos(1) = (/ xt_offset_ext(dst_num - 1, dst_num, -1) /)
267 src_pos, dst_pos, xt_int_mpidt)
269 IF (.NOT. communicators_are_congruent(xt_redist_get_mpi_comm(redist), &
271 CALL test_abort(
"error in xt_redist_get_MPI_Comm", &
276 CALL check_redist(redist, src_data, dst_data, ref_dst_data)
280 CALL check_redist(redist_copy, src_data, dst_data, ref_dst_data)
287 END SUBROUTINE test_offset_extents
289 END PROGRAM test_redist_p2p_f