58 USE iso_c_binding
, ONLY: c_int, c_null_ptr, c_ptr, c_associated
59 USE xt_mpi, ONLY: mpi_address_kind
69 TYPE(c_ptr) :: cptr = c_null_ptr
73 INTEGER(c_int) :: start, size, stride
88 MODULE PROCEDURE xt_redist_delete_1
89 MODULE PROCEDURE xt_redist_delete_a1d
93 SUBROUTINE xt_redist_delete_c(redist) &
94 bind(c, name=
'xt_redist_delete')
97 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
98 END SUBROUTINE xt_redist_delete_c
102 MODULE PROCEDURE xt_redist_is_null
103 END INTERFACE xt_is_null
107 MODULE PROCEDURE xt_redist_s_exchange_a1d
108 MODULE PROCEDURE xt_redist_s_exchange_i2_a1d
109 MODULE PROCEDURE xt_redist_s_exchange_i4_a1d
110 MODULE PROCEDURE xt_redist_s_exchange_i8_a1d
114 SUBROUTINE xt_redist_s_exchange_c(redist, num_ptr, src_data_cptr, &
115 dst_data_cptr) bind(C, name='xt_redist_s_exchange')
116 import:: c_ptr, c_int
117 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
118 INTEGER(c_int),
VALUE,
INTENT(in) :: num_ptr
119 TYPE(c_ptr) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
120 END SUBROUTINE xt_redist_s_exchange_c
122 FUNCTION xt_redist_get_mpi_comm(redist) &
123 bind(c, name=
'xt_redist_get_mpi_comm_c2f') result(comm)
126 INTEGER(xt_mpi_fint_kind) :: comm
127 END FUNCTION xt_redist_get_mpi_comm
130 src_displacements, dst_displacements, comm_f) &
131 bind(c, name=
'xt_redist_collection_static_new_f') result(res)
132 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind
134 TYPE(
xt_redist),
INTENT(in) :: redists_f(*)
135 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: num_redists
136 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(*), &
138 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: comm_f
143 comm_f) bind(C, name='xt_redist_collection_new_f')
RESULT(res)
144 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind
146 TYPE(
xt_redist),
INTENT(in) :: redists_f(*)
147 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: &
148 num_redists, cache_size, comm_f
153 num_dst_ext, dst_extents, datatype) &
154 bind(c, name=
'xt_redist_p2p_ext_new_c2f') result(redist)
155 IMPORT :: c_int, c_ptr,
xt_offset_ext, xt_mpi_fint_kind, xt_xmap
156 TYPE(xt_xmap),
INTENT(in) :: xmap
157 INTEGER(c_int),
VALUE,
INTENT(in) :: num_src_ext, num_dst_ext
158 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
159 dst_extents(num_dst_ext)
160 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
161 TYPE(c_ptr) :: redist
164 FUNCTION xt_redist_repeat_new_c(redist_f, src_extent, dst_extent, &
165 num_repetitions, displacements) &
166 bind(c, name=
'xt_redist_repeat_new') result(res)
167 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind, c_int
169 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist_f
170 INTEGER(mpi_address_kind),
VALUE,
INTENT(in) :: src_extent, dst_extent
171 INTEGER(c_int),
VALUE,
INTENT(in) :: num_repetitions
172 INTEGER(c_int),
INTENT(in) :: displacements(*)
174 END FUNCTION xt_redist_repeat_new_c
176 FUNCTION xt_redist_repeat_asym_new_c(redist_f, src_extent, dst_extent, &
177 num_repetitions, src_displacements, dst_displacements) &
178 bind(c, name=
'xt_redist_repeat_asym_new') result(res)
179 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind, c_int
181 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist_f
182 INTEGER(mpi_address_kind),
VALUE,
INTENT(in) :: src_extent, dst_extent
183 INTEGER(c_int),
VALUE,
INTENT(in) :: num_repetitions
184 INTEGER(c_int),
INTENT(in) :: src_displacements(*), dst_displacements(*)
186 END FUNCTION xt_redist_repeat_asym_new_c
191 MODULE PROCEDURE xt_redist_collection_static_new_a_i_2ak_i
192 MODULE PROCEDURE xt_redist_collection_static_new_a_2ak_i
196 MODULE PROCEDURE xt_redist_collection_new_a_3i
197 MODULE PROCEDURE xt_redist_collection_new_a_2i
198 MODULE PROCEDURE xt_redist_collection_new_a_i
202 MODULE PROCEDURE xt_redist_p2p_ext_new_i2_a1d_i2_a1d
203 MODULE PROCEDURE xt_redist_p2p_ext_new_i4_a1d_i4_a1d
204 MODULE PROCEDURE xt_redist_p2p_ext_new_i8_a1d_i8_a1d
205 MODULE PROCEDURE xt_redist_p2p_ext_new_a1d_a1d
209 MODULE PROCEDURE xt_redist_repeat_new_i4_a1d
210 MODULE PROCEDURE xt_redist_repeat_new_a1d
211 MODULE PROCEDURE xt_redist_repeat_asym_new_i4_a1d
212 MODULE PROCEDURE xt_redist_repeat_asym_new_a1d
223 FUNCTION xt_redist_is_null(redist)
RESULT(p)
226 p = .NOT. c_associated(redist%cptr)
227 END FUNCTION xt_redist_is_null
230 TYPE(c_ptr),
INTENT(in) :: redist
239 FUNCTION xt_redist_copy_c(redist) bind(C, name='xt_redist_copy')
241 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
242 TYPE(c_ptr) :: xt_redist_copy_c
243 END FUNCTION xt_redist_copy_c
245 redist_copy%cptr = xt_redist_copy_c(redist%cptr)
248 SUBROUTINE xt_redist_delete_1(redist)
250 CALL xt_redist_delete_c(redist%cptr)
251 redist%cptr = c_null_ptr
252 END SUBROUTINE xt_redist_delete_1
254 SUBROUTINE xt_redist_delete_a1d(redists)
255 TYPE(
xt_redist),
INTENT(inout) :: redists(:)
259 CALL xt_redist_delete_c(redists(i)%cptr)
260 redists(i)%cptr = c_null_ptr
262 END SUBROUTINE xt_redist_delete_a1d
266 TYPE(c_ptr),
INTENT(in) :: src_data_cptr, dst_data_cptr
268 SUBROUTINE xt_redist_s_exchange1_c(redist, src_data_cptr, dst_data_cptr) &
269 bind(c, name=
'xt_redist_s_exchange1')
271 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
272 TYPE(c_ptr),
VALUE :: src_data_cptr, dst_data_cptr
273 END SUBROUTINE xt_redist_s_exchange1_c
275 CALL xt_redist_s_exchange1_c(
xt_redist_f2c(redist), src_data_cptr, &
279 SUBROUTINE xt_redist_s_exchange_a1d(redist, src_data_cptr, dst_data_cptr)
281 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(:), dst_data_cptr(:)
283 INTEGER(c_int) :: num_ptr_c
284 n =
SIZE(src_data_cptr)
285 IF (n /=
SIZE(dst_data_cptr) .OR. n > huge(1_c_int)) &
286 CALL xt_abort(
"invalid number of pointers", &
289 num_ptr_c = int(n, c_int)
290 CALL xt_redist_s_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
291 src_data_cptr, dst_data_cptr)
292 END SUBROUTINE xt_redist_s_exchange_a1d
294 SUBROUTINE xt_redist_s_exchange_i2_a1d(redist, num_ptr, &
295 src_data_cptr, dst_data_cptr)
297 INTEGER(i2),
INTENT(in) :: num_ptr
298 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
299 INTEGER(c_int) :: num_ptr_c
300 IF (num_ptr < 0_i2) &
301 CALL xt_abort(
"invalid number of pointers", &
304 num_ptr_c = int(num_ptr, c_int)
305 CALL xt_redist_s_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
306 src_data_cptr, dst_data_cptr)
307 END SUBROUTINE xt_redist_s_exchange_i2_a1d
309 SUBROUTINE xt_redist_s_exchange_i4_a1d(redist, num_ptr, &
310 src_data_cptr, dst_data_cptr)
312 INTEGER(i4),
INTENT(in) :: num_ptr
313 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
314 INTEGER(c_int) :: num_ptr_c
315 IF (num_ptr < 0_i4 .OR. num_ptr > huge(1_c_int)) &
316 CALL xt_abort(
"invalid number of pointers", &
319 num_ptr_c = int(num_ptr, c_int)
320 CALL xt_redist_s_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
321 src_data_cptr, dst_data_cptr)
322 END SUBROUTINE xt_redist_s_exchange_i4_a1d
324 SUBROUTINE xt_redist_s_exchange_i8_a1d(redist, num_ptr, &
325 src_data_cptr, dst_data_cptr)
327 INTEGER(i8),
INTENT(in) :: num_ptr
328 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
329 INTEGER(c_int) :: num_ptr_c
330 IF (num_ptr < 0_i8 .OR. num_ptr > huge(1_c_int)) &
331 CALL xt_abort(
"invalid number of pointers", &
334 num_ptr_c = int(num_ptr, c_int)
335 CALL xt_redist_s_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
336 src_data_cptr, dst_data_cptr)
337 END SUBROUTINE xt_redist_s_exchange_i8_a1d
341 TYPE(xt_xmap),
INTENT(in) :: xmap
342 INTEGER,
VALUE,
INTENT(in) :: datatype
347 bind(c, name=
'xt_redist_p2p_new_f') result(res_ptr)
348 import:: xt_xmap,
xt_redist, c_int, c_ptr, xt_mpi_fint_kind
350 TYPE(xt_xmap),
INTENT(in) :: xmap
351 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
352 TYPE(c_ptr) :: res_ptr
363 TYPE(xt_xmap),
INTENT(in) :: xmap
364 INTEGER,
INTENT(in) :: src_offsets(*)
365 INTEGER,
INTENT(in) :: dst_offsets(*)
366 INTEGER,
VALUE,
INTENT(in) :: datatype
371 datatype) bind(C, name='xt_redist_p2p_off_new_f')
RESULT(res_ptr)
372 IMPORT :: xt_xmap,
xt_redist, c_int, c_ptr, xt_mpi_fint_kind
374 TYPE(xt_xmap),
INTENT(in) :: xmap
375 INTEGER(xt_mpi_fint_kind),
INTENT(in) :: src_offsets(*)
376 INTEGER(xt_mpi_fint_kind),
INTENT(in) :: dst_offsets(*)
377 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
378 TYPE(c_ptr) :: res_ptr
388 & dst_block_sizes, dst_block_num, &
392 TYPE(xt_xmap),
INTENT(in) :: xmap
393 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*)
394 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num
395 INTEGER(c_int),
INTENT(in) :: dst_block_sizes(*)
396 INTEGER(c_int),
VALUE,
INTENT(in) :: dst_block_num
397 INTEGER,
VALUE,
INTENT(in) :: datatype
401 & src_block_sizes, src_block_num, &
402 & dst_block_sizes, dst_block_num, &
404 bind(c, name=
'xt_redist_p2p_blocks_new_f') result(res_ptr)
405 IMPORT :: xt_xmap, xt_mpi_fint_kind,
xt_redist, c_int, c_ptr
407 TYPE(xt_xmap),
INTENT(in) :: xmap
408 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*)
409 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num
410 INTEGER(c_int),
INTENT(in) :: dst_block_sizes(*)
411 INTEGER(c_int),
VALUE,
INTENT(in) :: dst_block_num
412 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
413 TYPE(c_ptr) :: res_ptr
419 & src_block_sizes, src_block_num, &
420 & dst_block_sizes, dst_block_num, &
425 src_block_sizes, src_block_num, &
426 dst_block_offsets, dst_block_sizes, dst_block_num, &
427 datatype)
RESULT(res)
429 TYPE(xt_xmap),
INTENT(in) :: xmap
430 INTEGER(c_int),
INTENT(in) :: src_block_offsets(*)
431 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*)
432 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num
433 INTEGER(c_int),
INTENT(in) :: dst_block_offsets(*)
434 INTEGER(c_int),
INTENT(in) :: dst_block_sizes(*)
435 INTEGER(c_int),
VALUE,
INTENT(in) :: dst_block_num
436 INTEGER,
VALUE,
INTENT(in) :: datatype
440 src_block_sizes, src_block_num, &
441 dst_block_offsets, dst_block_sizes, dst_block_num, &
442 datatype) bind(C, name='xt_redist_p2p_blocks_off_new_f') &
444 IMPORT :: xt_xmap,
xt_redist, xt_mpi_fint_kind, c_int, c_ptr
446 TYPE(xt_xmap),
INTENT(in) :: xmap
447 INTEGER(c_int),
INTENT(in) :: src_block_offsets(*)
448 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*)
449 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num
450 INTEGER(c_int),
INTENT(in) :: dst_block_offsets(*)
451 INTEGER(c_int),
INTENT(in) :: dst_block_sizes(*)
452 INTEGER(c_int),
VALUE,
INTENT(in) :: dst_block_num
453 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
454 TYPE(c_ptr) :: res_ptr
460 src_block_sizes, src_block_num, &
461 dst_block_offsets, dst_block_sizes, dst_block_num, &
466 FUNCTION xt_redist_collection_static_new_a_i_2ak_i(redists, num_redists, &
467 src_displacements, dst_displacements, comm)
RESULT(res)
468 TYPE(
xt_redist),
INTENT(in) :: redists(*)
469 INTEGER,
INTENT(in) :: num_redists, comm
470 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(*), &
473 INTEGER(c_int) :: num_redists_c
475 num_redists_c = int(num_redists, c_int)
477 num_redists_c, src_displacements, dst_displacements, comm))
478 END FUNCTION xt_redist_collection_static_new_a_i_2ak_i
480 FUNCTION xt_redist_collection_static_new_a_2ak_i(redists, &
481 src_displacements, dst_displacements, comm)
RESULT(res)
482 TYPE(
xt_redist),
INTENT(in) :: redists(:)
483 INTEGER,
INTENT(in) :: comm
484 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(:), &
487 INTEGER :: num_redists
488 INTEGER(c_int) :: num_redists_c
490 num_redists =
SIZE(redists)
491 IF (num_redists > huge(1_c_int) &
492 .OR. num_redists /=
SIZE(src_displacements) &
493 .OR. num_redists /=
SIZE(dst_displacements)) &
494 CALL xt_abort(
"invalid number of redists", &
497 num_redists_c = int(num_redists, c_int)
499 num_redists_c, src_displacements, dst_displacements, comm))
500 END FUNCTION xt_redist_collection_static_new_a_2ak_i
502 FUNCTION xt_redist_collection_new_a_3i(redists, num_redists, cache_size, &
504 TYPE(
xt_redist),
INTENT(in) :: redists(*)
505 INTEGER,
INTENT(in) :: num_redists, cache_size, comm
510 END FUNCTION xt_redist_collection_new_a_3i
512 FUNCTION xt_redist_collection_new_a_2i(redists, cache_size, comm) &
514 TYPE(
xt_redist),
INTENT(in) :: redists(:)
515 INTEGER,
INTENT(in) :: cache_size, comm
517 INTEGER(c_int) :: num_redists_c
519 num_redists_c = int(
SIZE(redists), c_int)
521 num_redists_c, cache_size, comm))
522 END FUNCTION xt_redist_collection_new_a_2i
524 FUNCTION xt_redist_collection_new_a_i(redists, comm) &
526 TYPE(
xt_redist),
INTENT(in) :: redists(:)
527 INTEGER,
INTENT(in) :: comm
530 res = xt_redist_collection_new_a_3i(redists,
SIZE(redists), -1, comm)
531 END FUNCTION xt_redist_collection_new_a_i
534 FUNCTION xt_redist_repeat_new_i4_a1d(redist, src_extent, dst_extent, &
535 num_repetitions, displacements)
RESULT(res)
537 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
538 INTEGER(i4),
INTENT(in) :: num_repetitions
539 INTEGER(c_int),
INTENT(in) :: displacements(num_repetitions)
543 src_extent, dst_extent, num_repetitions, displacements))
544 END FUNCTION xt_redist_repeat_new_i4_a1d
546 FUNCTION xt_redist_repeat_new_a1d(redist, src_extent, dst_extent, &
547 displacements)
RESULT(res)
549 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
550 INTEGER(c_int),
INTENT(in) :: displacements(:)
553 INTEGER(i4) :: num_repetitions
555 num_repetitions =
SIZE(displacements)
557 src_extent, dst_extent, num_repetitions, displacements))
558 END FUNCTION xt_redist_repeat_new_a1d
560 FUNCTION xt_redist_repeat_asym_new_i4_a1d(redist, src_extent, dst_extent, &
561 num_repetitions, src_displacements, dst_displacements)
RESULT(res)
563 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
564 INTEGER(i4),
INTENT(in) :: num_repetitions
565 INTEGER(c_int),
INTENT(in) :: src_displacements(num_repetitions), &
566 & dst_displacements(num_repetitions)
569 src_extent, dst_extent, num_repetitions, src_displacements, &
571 END FUNCTION xt_redist_repeat_asym_new_i4_a1d
573 FUNCTION xt_redist_repeat_asym_new_a1d(redist, src_extent, dst_extent, &
574 src_displacements, dst_displacements)
RESULT(res)
576 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
577 INTEGER(c_int),
INTENT(in) :: src_displacements(:), dst_displacements(:)
580 INTEGER(i4) :: num_repetitions
582 num_repetitions =
SIZE(src_displacements)
583 IF (num_repetitions /=
SIZE(dst_displacements)) &
584 CALL xt_abort(
"unequal size for src and dst displacements", &
589 src_extent, dst_extent, num_repetitions, src_displacements, &
591 END FUNCTION xt_redist_repeat_asym_new_a1d
593 FUNCTION xt_redist_p2p_ext_new_i2_a1d_i2_a1d(xmap, num_src_ext, src_extents, &
594 num_dst_ext, dst_extents, datatype)
RESULT(redist)
595 TYPE(xt_xmap),
INTENT(in) :: xmap
596 INTEGER(i2),
INTENT(in) :: num_src_ext, num_dst_ext
597 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
598 dst_extents(num_dst_ext)
599 INTEGER,
INTENT(in) :: datatype
601 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
602 IF (num_src_ext < 0_i2 .OR. num_src_ext > huge(1_c_int) &
603 .OR. num_dst_ext < 0_i2 .OR. num_dst_ext > huge(1_c_int)) &
604 CALL xt_abort(
"invalid number of extents", &
607 num_src_ext_c = int(num_src_ext, c_int)
608 num_dst_ext_c = int(num_dst_ext, c_int)
610 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
611 END FUNCTION xt_redist_p2p_ext_new_i2_a1d_i2_a1d
613 FUNCTION xt_redist_p2p_ext_new_i4_a1d_i4_a1d(xmap, num_src_ext, src_extents, &
614 num_dst_ext, dst_extents, datatype)
RESULT(redist)
615 TYPE(xt_xmap),
INTENT(in) :: xmap
616 INTEGER(i4),
INTENT(in) :: num_src_ext, num_dst_ext
617 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
618 dst_extents(num_dst_ext)
619 INTEGER,
INTENT(in) :: datatype
621 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
622 IF (num_src_ext < 0_i4 .OR. num_src_ext > huge(1_c_int) &
623 .OR. num_dst_ext < 0_i4 .OR. num_dst_ext > huge(1_c_int)) &
624 CALL xt_abort(
"invalid number of extents", &
627 num_src_ext_c = int(num_src_ext, c_int)
628 num_dst_ext_c = int(num_dst_ext, c_int)
630 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
631 END FUNCTION xt_redist_p2p_ext_new_i4_a1d_i4_a1d
633 FUNCTION xt_redist_p2p_ext_new_i8_a1d_i8_a1d(xmap, num_src_ext, src_extents, &
634 num_dst_ext, dst_extents, datatype)
RESULT(redist)
635 TYPE(xt_xmap),
INTENT(in) :: xmap
636 INTEGER(i8),
INTENT(in) :: num_src_ext, num_dst_ext
637 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
638 dst_extents(num_dst_ext)
639 INTEGER,
INTENT(in) :: datatype
641 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
642 IF (num_src_ext < 0_i8 .OR. num_src_ext > huge(1_c_int) &
643 .OR. num_dst_ext < 0_i8 .OR. num_dst_ext > huge(1_c_int)) &
644 CALL xt_abort(
"invalid number of extents", &
647 num_src_ext_c = int(num_src_ext, c_int)
648 num_dst_ext_c = int(num_dst_ext, c_int)
650 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
651 END FUNCTION xt_redist_p2p_ext_new_i8_a1d_i8_a1d
653 FUNCTION xt_redist_p2p_ext_new_a1d_a1d(xmap, src_extents, dst_extents, &
654 datatype)
RESULT(redist)
655 TYPE(xt_xmap),
INTENT(in) :: xmap
658 INTEGER,
INTENT(in) :: datatype
660 INTEGER :: num_src_ext, num_dst_ext
661 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
662 num_src_ext =
SIZE(src_extents)
663 num_dst_ext =
SIZE(dst_extents)
664 IF (num_src_ext > huge(1_c_int) .OR. num_dst_ext > huge(1_c_int)) &
665 CALL xt_abort(
"invalid number of extents", &
668 num_src_ext_c = int(num_src_ext, c_int)
669 num_dst_ext_c = int(num_dst_ext, c_int)
671 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
672 END FUNCTION xt_redist_p2p_ext_new_a1d_a1d
Xt_redist xt_redist_repeat_new(Xt_redist redist, MPI_Aint src_extent, MPI_Aint dst_extent, int num_repetitions, const int displacements[num_repetitions])
integer, parameter, public i8
void xt_redist_delete(Xt_redist redist)
integer, parameter, public i4
Xt_redist xt_redist_p2p_blocks_off_new_f(struct xt_xmap_f *xmap_f, int *src_block_offsets, int *src_block_sizes, int src_block_num, int *dst_block_offsets, int *dst_block_sizes, int dst_block_num, MPI_Fint datatype_f)
Xt_redist xt_redist_collection_static_new(Xt_redist *redists, int num_redists, const MPI_Aint src_displacements[num_redists], const MPI_Aint dst_displacements[num_redists], MPI_Comm comm)
void xt_redist_s_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data)
integer, parameter, public xt_mpi_fint_kind
integer, parameter, public i2
Xt_redist xt_redist_p2p_off_new_f(struct xt_xmap_f *xmap_f, MPI_Fint *src_offsets, MPI_Fint *dst_offsets, MPI_Fint datatype_f)
Xt_redist xt_redist_collection_static_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Aint *src_displacements, MPI_Aint *dst_displacements, MPI_Fint comm_f)
Xt_redist xt_redist_p2p_ext_new(Xt_xmap xmap, int num_src_ext, const struct Xt_offset_ext src_extents[], int num_dst_ext, const struct Xt_offset_ext dst_extents[], MPI_Datatype datatype)
Xt_redist xt_redist_p2p_off_new(Xt_xmap xmap, const int *src_offsets, const int *dst_offsets, MPI_Datatype datatype)
void * xt_redist_p2p_ext_new_c2f(Xt_xmap *xmap, int num_src_ext, struct Xt_offset_ext src_extents[], int num_dst_ext, struct Xt_offset_ext dst_extents[], MPI_Fint datatype_f)
Xt_redist xt_redist_collection_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Fint cache_size, MPI_Fint comm_f)
Xt_redist xt_redist_copy(Xt_redist redist)
type(xt_redist) function, public xt_redist_c2f(redist)
Xt_redist xt_redist_p2p_blocks_off_new(Xt_xmap xmap, const int *src_block_offsets, const int *src_block_sizes, int src_block_num, const int *dst_block_offsets, const int *dst_block_sizes, int dst_block_num, MPI_Datatype datatype)
Xt_redist xt_redist_p2p_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f)
Xt_redist xt_redist_p2p_new(Xt_xmap xmap, MPI_Datatype datatype)
Xt_redist xt_redist_p2p_blocks_new(Xt_xmap xmap, const int *src_block_sizes, int src_block_num, const int *dst_block_sizes, int dst_block_num, MPI_Datatype datatype)
void xt_redist_s_exchange1(Xt_redist redist, const void *src_data, void *dst_data)
Xt_redist xt_redist_p2p_blocks_new_f(struct xt_xmap_f *xmap_f, int *src_block_sizes, int src_block_num, int *dst_block_sizes, int dst_block_num, MPI_Fint datatype_f)
Xt_redist xt_redist_collection_new(Xt_redist *redists, int num_redists, int cache_size, MPI_Comm comm)