47#include "fc_feature_defs.inc"
48MODULE xt_redist_real_sp
52#ifdef HAVE_FC_IS_CONTIGUOUS
53 USE xt_core,
ONLY: xt_abort
55 USE iso_c_binding,
ONLY: c_ptr, c_loc
58 CHARACTER(len=*),
PARAMETER :: filename =
'xt_redist_real_sp.f90'
59 INTEGER,
PARAMETER :: ps = 6
60 INTEGER,
PARAMETER :: rs = 37
61 INTEGER,
PARAMETER :: sp = selected_real_kind(ps,rs)
64 MODULE PROCEDURE xt_redist_s_exchange_sp_1d
65 MODULE PROCEDURE xt_redist_s_exchange_sp_2d
66 MODULE PROCEDURE xt_redist_s_exchange_sp_3d
67 MODULE PROCEDURE xt_redist_s_exchange_sp_4d
68 MODULE PROCEDURE xt_redist_s_exchange_sp_5d
69 MODULE PROCEDURE xt_redist_s_exchange_sp_6d
70 MODULE PROCEDURE xt_redist_s_exchange_sp_7d
74 MODULE PROCEDURE xt_redist_a_exchange_sp_1d
75 MODULE PROCEDURE xt_redist_a_exchange_sp_2d
76 MODULE PROCEDURE xt_redist_a_exchange_sp_3d
77 MODULE PROCEDURE xt_redist_a_exchange_sp_4d
78 MODULE PROCEDURE xt_redist_a_exchange_sp_5d
79 MODULE PROCEDURE xt_redist_a_exchange_sp_6d
80 MODULE PROCEDURE xt_redist_a_exchange_sp_7d
86 SUBROUTINE xt_redist_s_exchange_sp_1d_as(redist, src_size, src_data, &
89 INTEGER,
INTENT(in) :: src_size, dst_size
90 REAL(sp),
TARGET,
INTENT(in) :: src_data(src_size)
91 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(dst_size)
92 TYPE(c_ptr) :: src_data_cptr, dst_data_cptr
93 src_data_cptr = c_loc(src_data)
94 dst_data_cptr = c_loc(dst_data)
96 END SUBROUTINE xt_redist_s_exchange_sp_1d_as
99 SUBROUTINE xt_redist_s_exchange_sp_1d(redist, src_data, dst_data)
101 REAL(sp),
TARGET,
INTENT(in) :: src_data(:)
102 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:)
104 REAL(sp),
POINTER :: src_p(:), dst_p(:)
105 REAL(sp),
TARGET :: dummy(1)
106 INTEGER :: src_size, dst_size
107 src_size =
SIZE(src_data)
108 dst_size =
SIZE(dst_data)
109 IF (src_size > 0)
THEN
115 IF (dst_size > 0)
THEN
121 CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
122 END SUBROUTINE xt_redist_s_exchange_sp_1d
125 SUBROUTINE xt_redist_s_exchange_sp_2d(redist, src_data, dst_data)
127 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:)
128 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:)
130 REAL(sp),
POINTER :: src_p(:,:), dst_p(:,:)
131 REAL(sp),
TARGET :: dummy(1,1)
132 INTEGER :: src_size, dst_size
133 src_size =
SIZE(src_data)
134 dst_size =
SIZE(dst_data)
135 IF (src_size > 0)
THEN
141 IF (dst_size > 0)
THEN
147 CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
148 END SUBROUTINE xt_redist_s_exchange_sp_2d
151 SUBROUTINE xt_redist_s_exchange_sp_3d(redist, src_data, dst_data)
153 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:)
154 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:)
156 REAL(sp),
POINTER :: src_p(:,:,:), dst_p(:,:,:)
157 REAL(sp),
TARGET :: dummy(1,1,1)
158 INTEGER :: src_size, dst_size
159 src_size =
SIZE(src_data)
160 dst_size =
SIZE(dst_data)
161 IF (src_size > 0)
THEN
167 IF (dst_size > 0)
THEN
173 CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
174 END SUBROUTINE xt_redist_s_exchange_sp_3d
177 SUBROUTINE xt_redist_s_exchange_sp_4d(redist, src_data, dst_data)
179 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:,:)
180 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:,:)
182 REAL(sp),
POINTER :: src_p(:,:,:,:), dst_p(:,:,:,:)
183 REAL(sp),
TARGET :: dummy(1,1,1,1)
184 INTEGER :: src_size, dst_size
185 src_size =
SIZE(src_data)
186 dst_size =
SIZE(dst_data)
187 IF (src_size > 0)
THEN
193 IF (dst_size > 0)
THEN
199 CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
200 END SUBROUTINE xt_redist_s_exchange_sp_4d
203 SUBROUTINE xt_redist_s_exchange_sp_5d(redist, src_data, dst_data)
205 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:,:,:)
206 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:)
208 REAL(sp),
POINTER :: src_p(:,:,:,:,:), dst_p(:,:,:,:,:)
209 REAL(sp),
TARGET :: dummy(1,1,1,1,1)
210 INTEGER :: src_size, dst_size
211 src_size =
SIZE(src_data)
212 dst_size =
SIZE(dst_data)
213 IF (src_size > 0)
THEN
219 IF (dst_size > 0)
THEN
225 CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
226 END SUBROUTINE xt_redist_s_exchange_sp_5d
229 SUBROUTINE xt_redist_s_exchange_sp_6d(redist, src_data, dst_data)
231 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:,:,:,:)
232 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:,:)
234 REAL(sp),
POINTER :: src_p(:,:,:,:,:,:), dst_p(:,:,:,:,:,:)
235 REAL(sp),
TARGET :: dummy(1,1,1,1,1,1)
236 INTEGER :: src_size, dst_size
237 src_size =
SIZE(src_data)
238 dst_size =
SIZE(dst_data)
239 IF (src_size > 0)
THEN
245 IF (dst_size > 0)
THEN
251 CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
252 END SUBROUTINE xt_redist_s_exchange_sp_6d
255 SUBROUTINE xt_redist_s_exchange_sp_7d(redist, src_data, dst_data)
257 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:,:,:,:,:)
258 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:,:,:)
260 REAL(sp),
POINTER :: src_p(:,:,:,:,:,:,:), dst_p(:,:,:,:,:,:,:)
261 REAL(sp),
TARGET :: dummy(1,1,1,1,1,1,1)
262 INTEGER :: src_size, dst_size
263 src_size =
SIZE(src_data)
264 dst_size =
SIZE(dst_data)
265 IF (src_size > 0)
THEN
271 IF (dst_size > 0)
THEN
277 CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
278 END SUBROUTINE xt_redist_s_exchange_sp_7d
281 SUBROUTINE xt_redist_a_exchange_sp_1d_as(redist, src_size, src_data, &
282 dst_size, dst_data, request)
284 INTEGER,
INTENT(in) :: src_size, dst_size
285 REAL(sp),
TARGET,
INTENT(in) :: src_data(src_size)
286 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(dst_size)
289 REAL(sp),
TARGET :: dummy(1)
290 TYPE(c_ptr) :: src_data_cptr, dst_data_cptr
291 IF (src_size > 0)
THEN
292 src_data_cptr = c_loc(src_data)
294 src_data_cptr = c_loc(dummy)
296 IF (dst_size > 0)
THEN
297 dst_data_cptr = c_loc(dst_data)
299 dst_data_cptr = c_loc(dummy)
302 END SUBROUTINE xt_redist_a_exchange_sp_1d_as
305 SUBROUTINE xt_redist_a_exchange_sp_1d(redist, src_data, dst_data, &
308 REAL(sp),
TARGET,
INTENT(in) :: src_data(:)
309 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:)
312 INTEGER :: src_size, dst_size
313 src_size =
SIZE(src_data)
314 dst_size =
SIZE(dst_data)
315#ifdef HAVE_FC_IS_CONTIGUOUS
316 IF (.NOT. (is_contiguous(src_data) .AND. is_contiguous(dst_data))) &
317 CALL xt_abort(
'arguments to xt_redist_a_exchange must be contiguous!',&
320 CALL xt_redist_a_exchange_sp_1d_as(redist, src_size, src_data, dst_size, &
322 END SUBROUTINE xt_redist_a_exchange_sp_1d
325 SUBROUTINE xt_redist_a_exchange_sp_2d(redist, src_data, dst_data, &
328 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:)
329 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:)
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_sp_1d_as(redist, src_size, src_data, dst_size, &
342 END SUBROUTINE xt_redist_a_exchange_sp_2d
345 SUBROUTINE xt_redist_a_exchange_sp_3d(redist, src_data, dst_data, &
348 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:)
349 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:)
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_sp_1d_as(redist, src_size, src_data, dst_size, &
362 END SUBROUTINE xt_redist_a_exchange_sp_3d
365 SUBROUTINE xt_redist_a_exchange_sp_4d(redist, src_data, dst_data, &
368 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:,:)
369 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:,:)
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_sp_1d_as(redist, src_size, src_data, dst_size, &
382 END SUBROUTINE xt_redist_a_exchange_sp_4d
385 SUBROUTINE xt_redist_a_exchange_sp_5d(redist, src_data, dst_data, &
388 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:,:,:)
389 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:)
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_sp_1d_as(redist, src_size, src_data, dst_size, &
402 END SUBROUTINE xt_redist_a_exchange_sp_5d
405 SUBROUTINE xt_redist_a_exchange_sp_6d(redist, src_data, dst_data, &
408 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:,:,:,:)
409 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:,:)
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_sp_1d_as(redist, src_size, src_data, dst_size, &
422 END SUBROUTINE xt_redist_a_exchange_sp_6d
425 SUBROUTINE xt_redist_a_exchange_sp_7d(redist, src_data, dst_data, &
428 REAL(sp),
TARGET,
INTENT(in) :: src_data(:,:,:,:,:,:,:)
429 REAL(sp),
TARGET,
INTENT(inout) :: dst_data(:,:,:,:,:,:,:)
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_sp_1d_as(redist, src_size, src_data, dst_size, &
442 END SUBROUTINE xt_redist_a_exchange_sp_7d
443END MODULE xt_redist_real_sp
void xt_redist_a_exchange1(Xt_redist redist, const void *src_data, void *dst_data, Xt_request *request)
void xt_redist_s_exchange(Xt_redist redist, int num_arrays, const void *const src_data[], void *const dst_data[])
void xt_redist_a_exchange(Xt_redist redist, int num_arrays, const void *const src_data[], void *const dst_data[], Xt_request *request)
void xt_redist_s_exchange1(Xt_redist redist, const void *src_data, void *dst_data)