51 #ifdef HAVE_FC_IS_CONTIGUOUS
54 #ifdef HAVE_FC_LOGICAL_INTEROP
55 USE iso_c_binding,
ONLY: c_ptr, c_loc
57 USE iso_c_binding,
ONLY: c_ptr
61 CHARACTER(len=*),
PARAMETER :: filename =
'xt_redist_logical.f90'
63 MODULE PROCEDURE xt_redist_s_exchange_l_1d
64 MODULE PROCEDURE xt_redist_s_exchange_l_2d
65 MODULE PROCEDURE xt_redist_s_exchange_l_3d
66 MODULE PROCEDURE xt_redist_s_exchange_l_4d
67 MODULE PROCEDURE xt_redist_s_exchange_l_5d
68 MODULE PROCEDURE xt_redist_s_exchange_l_6d
69 MODULE PROCEDURE xt_redist_s_exchange_l_7d
73 MODULE PROCEDURE xt_redist_a_exchange_l_1d
74 MODULE PROCEDURE xt_redist_a_exchange_l_2d
75 MODULE PROCEDURE xt_redist_a_exchange_l_3d
76 MODULE PROCEDURE xt_redist_a_exchange_l_4d
77 MODULE PROCEDURE xt_redist_a_exchange_l_5d
78 MODULE PROCEDURE xt_redist_a_exchange_l_6d
79 MODULE PROCEDURE xt_redist_a_exchange_l_7d
85 SUBROUTINE xt_redist_s_exchange_l_1d_as(redist, src_size, src_data, &
87 TYPE(xt_redist),
INTENT(in) :: redist
88 INTEGER,
INTENT(in) :: src_size, dst_size
89 LOGICAL,
TARGET,
INTENT(in) :: src_data(src_size)
90 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(dst_size)
91 TYPE(c_ptr) :: src_data_cptr, dst_data_cptr
92 #ifdef HAVE_FC_LOGICAL_INTEROP
93 src_data_cptr = c_loc(src_data)
94 dst_data_cptr = c_loc(dst_data)
96 CALL xt_slice_c_loc(src_data, src_data_cptr)
97 CALL xt_slice_c_loc(dst_data, dst_data_cptr)
100 END SUBROUTINE xt_redist_s_exchange_l_1d_as
103 SUBROUTINE xt_redist_s_exchange_l_1d(redist, src_data, dst_data)
104 TYPE(xt_redist),
INTENT(in) :: redist
105 LOGICAL,
TARGET,
INTENT(in) :: src_data(:)
106 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:)
108 LOGICAL,
POINTER :: src_p(:), dst_p(:)
109 LOGICAL,
TARGET :: dummy(1)
110 INTEGER :: src_size, dst_size
111 src_size =
SIZE(src_data)
112 dst_size =
SIZE(dst_data)
113 IF (src_size > 0)
THEN
119 IF (dst_size > 0)
THEN
125 CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
126 END SUBROUTINE xt_redist_s_exchange_l_1d
129 SUBROUTINE xt_redist_s_exchange_l_2d(redist, src_data, dst_data)
130 TYPE(xt_redist),
INTENT(in) :: redist
131 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:)
132 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:)
134 LOGICAL,
POINTER :: src_p(:,:), dst_p(:,:)
135 LOGICAL,
TARGET :: dummy(1,1)
136 INTEGER :: src_size, dst_size
137 src_size =
SIZE(src_data)
138 dst_size =
SIZE(dst_data)
139 IF (src_size > 0)
THEN
145 IF (dst_size > 0)
THEN
151 CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
152 END SUBROUTINE xt_redist_s_exchange_l_2d
155 SUBROUTINE xt_redist_s_exchange_l_3d(redist, src_data, dst_data)
156 TYPE(xt_redist),
INTENT(in) :: redist
157 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:)
158 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:)
160 LOGICAL,
POINTER :: src_p(:,:,:), dst_p(:,:,:)
161 LOGICAL,
TARGET :: dummy(1,1,1)
162 INTEGER :: src_size, dst_size
163 src_size =
SIZE(src_data)
164 dst_size =
SIZE(dst_data)
165 IF (src_size > 0)
THEN
171 IF (dst_size > 0)
THEN
177 CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
178 END SUBROUTINE xt_redist_s_exchange_l_3d
181 SUBROUTINE xt_redist_s_exchange_l_4d(redist, src_data, dst_data)
182 TYPE(xt_redist),
INTENT(in) :: redist
183 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:,:)
184 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:,:)
186 LOGICAL,
POINTER :: src_p(:,:,:,:), dst_p(:,:,:,:)
187 LOGICAL,
TARGET :: dummy(1,1,1,1)
188 INTEGER :: src_size, dst_size
189 src_size =
SIZE(src_data)
190 dst_size =
SIZE(dst_data)
191 IF (src_size > 0)
THEN
197 IF (dst_size > 0)
THEN
203 CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
204 END SUBROUTINE xt_redist_s_exchange_l_4d
207 SUBROUTINE xt_redist_s_exchange_l_5d(redist, src_data, dst_data)
208 TYPE(xt_redist),
INTENT(in) :: redist
209 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:,:,:)
210 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:)
212 LOGICAL,
POINTER :: src_p(:,:,:,:,:), dst_p(:,:,:,:,:)
213 LOGICAL,
TARGET :: dummy(1,1,1,1,1)
214 INTEGER :: src_size, dst_size
215 src_size =
SIZE(src_data)
216 dst_size =
SIZE(dst_data)
217 IF (src_size > 0)
THEN
223 IF (dst_size > 0)
THEN
229 CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
230 END SUBROUTINE xt_redist_s_exchange_l_5d
233 SUBROUTINE xt_redist_s_exchange_l_6d(redist, src_data, dst_data)
234 TYPE(xt_redist),
INTENT(in) :: redist
235 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:,:,:,:)
236 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:,:)
238 LOGICAL,
POINTER :: src_p(:,:,:,:,:,:), dst_p(:,:,:,:,:,:)
239 LOGICAL,
TARGET :: dummy(1,1,1,1,1,1)
240 INTEGER :: src_size, dst_size
241 src_size =
SIZE(src_data)
242 dst_size =
SIZE(dst_data)
243 IF (src_size > 0)
THEN
249 IF (dst_size > 0)
THEN
255 CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
256 END SUBROUTINE xt_redist_s_exchange_l_6d
259 SUBROUTINE xt_redist_s_exchange_l_7d(redist, src_data, dst_data)
260 TYPE(xt_redist),
INTENT(in) :: redist
261 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:,:,:,:,:)
262 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:,:,:)
264 LOGICAL,
POINTER :: src_p(:,:,:,:,:,:,:), dst_p(:,:,:,:,:,:,:)
265 LOGICAL,
TARGET :: dummy(1,1,1,1,1,1,1)
266 INTEGER :: src_size, dst_size
267 src_size =
SIZE(src_data)
268 dst_size =
SIZE(dst_data)
269 IF (src_size > 0)
THEN
275 IF (dst_size > 0)
THEN
281 CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
282 END SUBROUTINE xt_redist_s_exchange_l_7d
285 SUBROUTINE xt_redist_a_exchange_l_1d_as(redist, src_size, src_data, &
286 dst_size, dst_data, request)
287 TYPE(xt_redist),
INTENT(in) :: redist
288 INTEGER,
INTENT(in) :: src_size, dst_size
289 LOGICAL,
TARGET,
INTENT(in) :: src_data(src_size)
290 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(dst_size)
291 TYPE(xt_request),
INTENT(out) :: request
293 LOGICAL,
TARGET :: dummy(1)
294 TYPE(c_ptr) :: src_data_cptr, dst_data_cptr
295 IF (src_size > 0)
THEN
296 #ifdef HAVE_FC_LOGICAL_INTEROP
297 src_data_cptr = c_loc(src_data)
299 CALL xt_slice_c_loc(src_data, src_data_cptr)
302 #ifdef HAVE_FC_LOGICAL_INTEROP
303 src_data_cptr = c_loc(dummy)
305 CALL xt_slice_c_loc(dummy, src_data_cptr)
308 IF (dst_size > 0)
THEN
309 #ifdef HAVE_FC_LOGICAL_INTEROP
310 dst_data_cptr = c_loc(dst_data)
312 CALL xt_slice_c_loc(dst_data, dst_data_cptr)
315 #ifdef HAVE_FC_LOGICAL_INTEROP
316 dst_data_cptr = c_loc(dummy)
318 CALL xt_slice_c_loc(dummy, dst_data_cptr)
322 END SUBROUTINE xt_redist_a_exchange_l_1d_as
325 SUBROUTINE xt_redist_a_exchange_l_1d(redist, src_data, dst_data, &
327 TYPE(xt_redist),
INTENT(in) :: redist
328 LOGICAL,
TARGET,
INTENT(in) :: src_data(:)
329 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:)
330 TYPE(xt_request),
INTENT(out) :: request
332 INTEGER :: src_size, dst_size
333 src_size =
SIZE(src_data)
334 dst_size =
SIZE(dst_data)
335 #ifdef HAVE_FC_IS_CONTIGUOUS
336 IF (.NOT. (is_contiguous(src_data) .AND. is_contiguous(dst_data))) &
337 CALL xt_abort(
'arguments to xt_redist_a_exchange must be contiguous!',&
340 CALL xt_redist_a_exchange_l_1d_as(redist, src_size, src_data, dst_size, &
342 END SUBROUTINE xt_redist_a_exchange_l_1d
345 SUBROUTINE xt_redist_a_exchange_l_2d(redist, src_data, dst_data, &
347 TYPE(xt_redist),
INTENT(in) :: redist
348 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:)
349 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:)
350 TYPE(xt_request),
INTENT(out) :: request
352 INTEGER :: src_size, dst_size
353 src_size =
SIZE(src_data)
354 dst_size =
SIZE(dst_data)
355 #ifdef HAVE_FC_IS_CONTIGUOUS
356 IF (.NOT. (is_contiguous(src_data) .AND. is_contiguous(dst_data))) &
357 CALL xt_abort(
'arguments to xt_redist_a_exchange must be contiguous!',&
360 CALL xt_redist_a_exchange_l_1d_as(redist, src_size, src_data, dst_size, &
362 END SUBROUTINE xt_redist_a_exchange_l_2d
365 SUBROUTINE xt_redist_a_exchange_l_3d(redist, src_data, dst_data, &
367 TYPE(xt_redist),
INTENT(in) :: redist
368 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:)
369 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:)
370 TYPE(xt_request),
INTENT(out) :: request
372 INTEGER :: src_size, dst_size
373 src_size =
SIZE(src_data)
374 dst_size =
SIZE(dst_data)
375 #ifdef HAVE_FC_IS_CONTIGUOUS
376 IF (.NOT. (is_contiguous(src_data) .AND. is_contiguous(dst_data))) &
377 CALL xt_abort(
'arguments to xt_redist_a_exchange must be contiguous!',&
380 CALL xt_redist_a_exchange_l_1d_as(redist, src_size, src_data, dst_size, &
382 END SUBROUTINE xt_redist_a_exchange_l_3d
385 SUBROUTINE xt_redist_a_exchange_l_4d(redist, src_data, dst_data, &
387 TYPE(xt_redist),
INTENT(in) :: redist
388 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:,:)
389 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:,:)
390 TYPE(xt_request),
INTENT(out) :: request
392 INTEGER :: src_size, dst_size
393 src_size =
SIZE(src_data)
394 dst_size =
SIZE(dst_data)
395 #ifdef HAVE_FC_IS_CONTIGUOUS
396 IF (.NOT. (is_contiguous(src_data) .AND. is_contiguous(dst_data))) &
397 CALL xt_abort(
'arguments to xt_redist_a_exchange must be contiguous!',&
400 CALL xt_redist_a_exchange_l_1d_as(redist, src_size, src_data, dst_size, &
402 END SUBROUTINE xt_redist_a_exchange_l_4d
405 SUBROUTINE xt_redist_a_exchange_l_5d(redist, src_data, dst_data, &
407 TYPE(xt_redist),
INTENT(in) :: redist
408 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:,:,:)
409 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:)
410 TYPE(xt_request),
INTENT(out) :: request
412 INTEGER :: src_size, dst_size
413 src_size =
SIZE(src_data)
414 dst_size =
SIZE(dst_data)
415 #ifdef HAVE_FC_IS_CONTIGUOUS
416 IF (.NOT. (is_contiguous(src_data) .AND. is_contiguous(dst_data))) &
417 CALL xt_abort(
'arguments to xt_redist_a_exchange must be contiguous!',&
420 CALL xt_redist_a_exchange_l_1d_as(redist, src_size, src_data, dst_size, &
422 END SUBROUTINE xt_redist_a_exchange_l_5d
425 SUBROUTINE xt_redist_a_exchange_l_6d(redist, src_data, dst_data, &
427 TYPE(xt_redist),
INTENT(in) :: redist
428 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:,:,:,:)
429 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:,:)
430 TYPE(xt_request),
INTENT(out) :: request
432 INTEGER :: src_size, dst_size
433 src_size =
SIZE(src_data)
434 dst_size =
SIZE(dst_data)
435 #ifdef HAVE_FC_IS_CONTIGUOUS
436 IF (.NOT. (is_contiguous(src_data) .AND. is_contiguous(dst_data))) &
437 CALL xt_abort(
'arguments to xt_redist_a_exchange must be contiguous!',&
440 CALL xt_redist_a_exchange_l_1d_as(redist, src_size, src_data, dst_size, &
442 END SUBROUTINE xt_redist_a_exchange_l_6d
445 SUBROUTINE xt_redist_a_exchange_l_7d(redist, src_data, dst_data, &
447 TYPE(xt_redist),
INTENT(in) :: redist
448 LOGICAL,
TARGET,
INTENT(in) :: src_data(:,:,:,:,:,:,:)
449 LOGICAL,
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:,:,:)
450 TYPE(xt_request),
INTENT(out) :: request
452 INTEGER :: src_size, dst_size
453 src_size =
SIZE(src_data)
454 dst_size =
SIZE(dst_data)
455 #ifdef HAVE_FC_IS_CONTIGUOUS
456 IF (.NOT. (is_contiguous(src_data) .AND. is_contiguous(dst_data))) &
457 CALL xt_abort(
'arguments to xt_redist_a_exchange must be contiguous!',&
460 CALL xt_redist_a_exchange_l_1d_as(redist, src_size, src_data, dst_size, &
462 END SUBROUTINE xt_redist_a_exchange_l_7d
void xt_redist_a_exchange1(Xt_redist redist, const void *src_data, void *dst_data, Xt_request *request)
void xt_redist_a_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data, Xt_request *request)
void xt_redist_s_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data)
void xt_redist_s_exchange1(Xt_redist redist, const void *src_data, void *dst_data)