48 PROGRAM test_redist_collection_static
50 USE ftest_common
, ONLY: init_mpi, finish_mpi, test_abort
51 USE test_idxlist_utils
, ONLY: test_err_count
56 USE test_redist_common
, ONLY: build_odd_selection_xmap, check_redist
62 CALL test_repeated_redist
64 IF (test_err_count() /= 0) &
65 CALL test_abort(
"non-zero error count!", &
71 SUBROUTINE simple_test
75 TYPE(xt_redist) :: redist, redist_coll
76 INTEGER,
PARAMETER :: src_slice_len = 5, dst_slice_len = 3
77 DOUBLE PRECISION,
PARAMETER :: &
78 src_data(src_slice_len) = (/ 1.0d0, 2.0d0, 3.0d0, 4.0d0, 5.0d0 /), &
79 ref_dst_data(dst_slice_len) = (/ 1.0d0, 3.0d0, 5.0d0 /)
80 DOUBLE PRECISION :: dst_data(dst_slice_len)
81 INTEGER(mpi_address_kind),
PARAMETER :: &
82 src_displacements(1) = 0_mpi_address_kind, &
83 dst_displacements(1) = 0_mpi_address_kind
85 xmap = build_odd_selection_xmap(src_slice_len)
93 src_displacements, dst_displacements, mpi_comm_world)
98 CALL check_redist(redist_coll, src_data, dst_data, ref_dst_data)
102 END SUBROUTINE simple_test
104 SUBROUTINE test_repeated_redist_ds1(redist_coll)
105 TYPE(xt_redist),
INTENT(in) :: redist_coll
107 DOUBLE PRECISION,
PARAMETER :: src_data(5, 3) &
108 = reshape((/ (dble(i), i = 1, 15)/), (/ 5, 3 /)), &
110 = reshape((/ ((dble(i + j), i = 1,5,2), j = 0,10,5) /), (/ 3, 3 /))
111 DOUBLE PRECISION :: dst_data(3, 3)
113 CALL check_redist(redist_coll, src_data, dst_data, ref_dst_data)
114 END SUBROUTINE test_repeated_redist_ds1
116 SUBROUTINE test_repeated_redist_ds2(redist_coll)
117 TYPE(xt_redist),
INTENT(in) :: redist_coll
119 DOUBLE PRECISION,
PARAMETER :: src_data(5, 3) = reshape((/&
120 (dble(i), i = 20, 34)/), (/ 5, 3 /)), &
122 = reshape((/ ((dble(i + j), i = 1,5,2), j = 19,33,5) /), (/ 3, 3 /))
123 DOUBLE PRECISION,
SAVE :: dst_data(3, 3)
125 CALL check_redist(redist_coll, src_data, dst_data, ref_dst_data)
126 END SUBROUTINE test_repeated_redist_ds2
128 SUBROUTINE test_repeated_redist
132 INTEGER,
PARAMETER :: num_slice = 3
133 INTEGER,
PARAMETER :: src_slice_len = 5
134 TYPE(xt_xmap) :: xmap
135 TYPE(xt_redist) :: redist, redists(num_slice), redist_coll
136 INTEGER(mpi_address_kind) :: src_displacements(num_slice), &
137 dst_displacements(num_slice), src_base, dst_base, temp
138 DOUBLE PRECISION,
TARGET :: src_template(5, 3), dst_template(3, 3)
141 xmap = build_odd_selection_xmap(src_slice_len)
149 src_displacements(1) = 0_mpi_address_kind
150 dst_displacements(1) = 0_mpi_address_kind
151 CALL mpi_get_address(src_template(1, 1), src_base, ierror)
152 CALL mpi_get_address(dst_template(1, 1), dst_base, ierror)
154 CALL mpi_get_address(src_template(1, i), temp, ierror)
155 src_displacements(i) = temp - src_base
156 CALL mpi_get_address(dst_template(1, i), temp, ierror)
157 dst_displacements(i) = temp - dst_base
161 src_displacements, dst_displacements, mpi_comm_world)
165 CALL test_repeated_redist_ds1(redist_coll)
167 CALL test_repeated_redist_ds2(redist_coll)
169 CALL test_repeated_redist_ds1(redist_coll)
172 END SUBROUTINE test_repeated_redist
174 END PROGRAM test_redist_collection_static