49 USE ftest_common
, ONLY: init_mpi, finish_mpi, test_abort
50 USE test_idxlist_utils
, ONLY: check_idxlist, test_err_count
56 CALL test_idxvec_modifier
57 CALL test_idxstripes_modifier
62 IF (test_err_count() /= 0)
CALL test_abort(
"non-zero error count", &
69 SUBROUTINE test_idxvec_modifier
70 INTEGER,
PARAMETER :: g_src_num = 9, g_dst_num=9, patch_num=7
73 INTEGER(xi),
PARAMETER :: &
74 g_src_idx(g_src_num) = (/ (i, i=1,g_src_num) /), &
75 g_dst_idx(g_dst_num) = (/ (i, i=g_dst_num,1,-1) /), &
78 INTEGER(xi),
PARAMETER :: &
79 g_src_idx(g_src_num) = (/ (int(i, xi), i=1,g_src_num) /), &
80 g_dst_idx(g_dst_num) = (/ (int(i, xi), i=g_dst_num,1,-1) /), &
82 patch_idx(patch_num) = (/ 3_xi, 4_xi, 4_xi, 4_xi, 7_xi, 7_xi, 8_xi /)
84 INTEGER(xi),
PARAMETER :: &
85 ref_mpatch_idx(patch_num) = (/ 7_xi, 6_xi, 6_xi, 6_xi, 3_xi, 3_xi, &
88 TYPE(xt_idxlist) :: g_src_idxlist, g_dst_idxlist, patch_idxlist, &
96 modifier(1) =
xt_modifier(g_src_idxlist, g_dst_idxlist, 0)
102 CALL check_idxlist(mpatch_idxlist, ref_mpatch_idx)
108 END SUBROUTINE test_idxvec_modifier
110 SUBROUTINE test_idxstripes_modifier
112 INTEGER,
PARAMETER :: patch_num = 8
116 TYPE(xt_idxlist) :: g_src_idxlist, g_dst_idxlist, patch_idxlist, &
119 INTEGER :: mstate(patch_num)
120 INTEGER,
PARAMETER :: ref_mstate(patch_num) &
121 = (/ 1, ior(2, 32), ior(3, 32), ior(4, 32), ior(5, 32), 6, 7, 8 /)
124 INTEGER(xi),
PARAMETER :: &
125 patch_idx(patch_num) = (/ 0_xi, 1_xi, 3_xi, 3_xi, &
126 & 5_xi, 50_xi, 100_xi, 150_xi /), &
127 ref_mpatch_idx(patch_num) = (/ 0, 100, 98, 98, &
128 & 96, 50, 100, 150 /)
133 modifier(1) =
xt_modifier(g_src_idxlist, g_dst_idxlist, 32)
141 mpatch_idxlist =
xt_idxmod_new(patch_idxlist, modifier, mstate)
143 CALL check_idxlist(mpatch_idxlist, ref_mpatch_idx)
146 IF (any(mstate(:) /= ref_mstate(:))) &
147 CALL test_abort(
"mstate(:) /= ref_mstate(:)", &
154 END SUBROUTINE test_idxstripes_modifier
157 SUBROUTINE test_multimod
158 INTEGER,
PARAMETER :: g1_src_num = 9, g1_dst_num = 9, &
159 g2_src_num = 5, g2_dst_num = 5, patch_num = 6, num_mod = 2
162 INTEGER(xi),
PARAMETER :: &
163 g1_src_idx(g1_src_num) = (/ (i, i = 1,g1_src_num) /), &
164 g1_dst_idx(g1_dst_num) = (/ (i, i = g1_dst_num,1,-1) /), &
167 INTEGER(xi),
PARAMETER :: &
168 g1_src_idx(g1_src_num) = (/ (int(i, xi), i = 1,g1_src_num) /), &
169 g1_dst_idx(g1_dst_num) = (/ (int(i, xi), i = g1_dst_num,1,-1) /), &
171 g2_src_idx(g2_src_num) = (/ 1_xi, 2_xi, 8_xi, 9_xi, 10_xi /), &
172 g2_dst_idx(g2_dst_num) = (/ 8_xi, 2_xi, 8_xi, 2_xi, 5_xi /), &
173 patch_idx(patch_num) = (/ 6_xi, 7_xi, 25_xi, 8_xi, 9_xi, 10_xi /), &
177 ref_mpatch_idx(patch_num) = (/ 4_xi, 3_xi, 25_xi, 2_xi, 8_xi, 5_xi /)
179 TYPE(xt_idxlist) :: mod_idxlist(2,2), patch_idxlist, mpatch_idxlist
181 INTEGER :: mstate(patch_num), k
182 INTEGER,
PARAMETER :: ref_mstate(patch_num) &
183 = (/ ior(1, 0), ior(1, 0), ior(0, 0), &
184 & ior(1, 2), ior(1, 2), ior(0, 2) /), &
197 modifier(k) =
xt_modifier(mod_idxlist(k, src), mod_idxlist(k, dst), &
200 mpatch_idxlist =
xt_idxmod_new(patch_idxlist, modifier, 2, mstate)
201 CALL check_idxlist(mpatch_idxlist, ref_mpatch_idx)
204 IF (any(mstate(:) /= ref_mstate(:))) &
205 CALL test_abort(
"mstate(:) /= ref_mstate(:)", &
211 END SUBROUTINE test_multimod
213 END PROGRAM test_idxmod_f