48#include "fc_feature_defs.inc"
49MODULE xt_xmap_abstract
50 USE iso_c_binding,
ONLY: c_int, c_ptr, c_null_ptr, &
51 c_associated, c_f_pointer, c_loc
52 USE xt_core,
ONLY: xt_abort, xt_mpi_fint_kind,
xt_pos_ext, i2, i4, i8
62 xt_reorder_type_kind, &
63 xt_reorder_none, xt_reorder_send_up, xt_reorder_recv_up, &
81 TYPE,
BIND(C),
PUBLIC :: xt_xmap
85 TYPE(c_ptr) :: cptr = c_null_ptr
88 TYPE,
BIND(c),
PUBLIC :: xt_xmap_iter
92 TYPE(c_ptr) :: cptr = c_null_ptr
96 ENUMERATOR :: xt_reorder_none, xt_reorder_send_up, xt_reorder_recv_up
98 INTEGER,
PARAMETER :: xt_reorder_type_kind = kind(xt_reorder_none)
103 FUNCTION xt_xmap_f2c(xmap) bind(c, name='xt_xmap_f2c')
RESULT(p)
106 TYPE(xt_xmap),
INTENT(in) :: xmap
110 SUBROUTINE xt_xmap_delete_c(xmap) bind(C, name='xt_xmap_delete')
113 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
114 END SUBROUTINE xt_xmap_delete_c
119 MODULE PROCEDURE xt_xmap_delete_1
120 MODULE PROCEDURE xt_xmap_delete_a1d
124 MODULE PROCEDURE xt_xmap_is_null
125 MODULE PROCEDURE xt_xmap_iterator_is_null
126 END INTERFACE xt_is_null
129 FUNCTION xt_xmap_iterator_get_num_transfer_pos_c(iter)
RESULT(num) &
130 bind(c, name=
'xt_xmap_iterator_get_num_transfer_pos')
131 IMPORT :: c_int, c_ptr
132 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
133 INTEGER(c_int) :: num
134 END FUNCTION xt_xmap_iterator_get_num_transfer_pos_c
136 FUNCTION xt_xmap_iterator_get_num_transfer_pos_ext_c(iter)
RESULT(num) &
137 bind(c, name=
'xt_xmap_iterator_get_num_transfer_pos_ext')
138 IMPORT :: c_int, c_ptr
139 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
140 INTEGER(c_int) :: num
141 END FUNCTION xt_xmap_iterator_get_num_transfer_pos_ext_c
145 MODULE PROCEDURE xt_xmap_spread_a1d
146 MODULE PROCEDURE xt_xmap_spread_i2_a1d
147 MODULE PROCEDURE xt_xmap_spread_i4_a1d
148 MODULE PROCEDURE xt_xmap_spread_i8_a1d
151 CHARACTER(len=*),
PARAMETER :: filename =
'xt_xmap_f.f90'
154 FUNCTION xt_xmap_is_null(xmap)
RESULT(p)
155 TYPE(xt_xmap),
INTENT(in) :: xmap
157 p = .NOT. c_associated(xmap%cptr)
158 END FUNCTION xt_xmap_is_null
161 FUNCTION xt_xmap_c2f(xmap)
RESULT(p)
162 TYPE(c_ptr),
INTENT(in) :: xmap
165 END FUNCTION xt_xmap_c2f
168 TYPE(xt_xmap),
INTENT(in) :: xmap
169 TYPE(xt_xmap) :: xmap_copy
171 FUNCTION xt_xmap_copy_c(xmap) bind(C, name='xt_xmap_copy')
RESULT(res_ptr)
174 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
175 TYPE(c_ptr) :: res_ptr
176 END FUNCTION xt_xmap_copy_c
178 xmap_copy%cptr = xt_xmap_copy_c(xmap%cptr)
180 SUBROUTINE xt_xmap_delete_1(xmap)
181 TYPE(xt_xmap),
INTENT(inout) :: xmap
182 CALL xt_xmap_delete_c(xmap%cptr)
183 xmap%cptr = c_null_ptr
184 END SUBROUTINE xt_xmap_delete_1
186 SUBROUTINE xt_xmap_delete_a1d(xmaps)
187 TYPE(xt_xmap),
INTENT(inout) :: xmaps(:)
191 CALL xt_xmap_delete_c(xmaps(i)%cptr)
192 xmaps(i)%cptr = c_null_ptr
194 END SUBROUTINE xt_xmap_delete_a1d
198 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist
199 TYPE(xt_idxlist),
INTENT(in) :: dst_idxlist
200 INTEGER,
INTENT(in) :: comm
201 TYPE(xt_xmap) :: xmap
204 FUNCTION xt_xmap_all2all_new_f(src_idxlist, dst_idxlist, comm) &
205 bind(c, name=
'xt_xmap_all2all_new_f') result(xmap_ptr)
208 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist, dst_idxlist
209 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: comm
210 TYPE(c_ptr) :: xmap_ptr
211 END FUNCTION xt_xmap_all2all_new_f
214 xmap%cptr = xt_xmap_all2all_new_f(src_idxlist, dst_idxlist, comm)
220 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist
221 TYPE(xt_idxlist),
INTENT(in) :: dst_idxlist
222 INTEGER,
INTENT(in) :: comm
223 TYPE(xt_config),
INTENT(in) :: config
224 TYPE(xt_xmap) :: xmap
228 config) bind(C, name='xt_xmap_all2all_custom_new_f')
RESULT(xmap_ptr)
231 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist, dst_idxlist
232 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: comm
233 TYPE(xt_config),
INTENT(in) :: config
234 TYPE(c_ptr) :: xmap_ptr
244 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist
245 TYPE(xt_idxlist),
INTENT(in) :: dst_idxlist
246 INTEGER,
INTENT(in) :: comm
247 TYPE(xt_xmap) :: xmap
251 bind(c, name=
'xt_xmap_dist_dir_new_f') result(xmap_ptr)
254 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist, dst_idxlist
255 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: comm
256 TYPE(c_ptr) :: xmap_ptr
266 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist
267 TYPE(xt_idxlist),
INTENT(in) :: dst_idxlist
268 TYPE(xt_config),
INTENT(in) :: config
269 INTEGER,
INTENT(in) :: comm
270 TYPE(xt_xmap) :: xmap
273 config) bind(C, name='xt_xmap_dist_dir_custom_new_f') &
277 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist, dst_idxlist
278 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: comm
279 TYPE(xt_config),
INTENT(in) :: config
280 TYPE(c_ptr) :: xmap_ptr
288 inter_comm, intra_comm)
RESULT(xmap)
290 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist
291 TYPE(xt_idxlist),
INTENT(in) :: dst_idxlist
292 INTEGER,
INTENT(in) :: inter_comm, intra_comm
293 TYPE(xt_xmap) :: xmap
297 inter_comm, intra_comm) &
298 bind(c, name=
'xt_xmap_dist_dir_intercomm_new_f') result(xmap_ptr)
301 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist, dst_idxlist
302 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: inter_comm, intra_comm
303 TYPE(c_ptr) :: xmap_ptr
308 dst_idxlist, inter_comm, intra_comm)
312 inter_comm, intra_comm, config)
RESULT(xmap)
314 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist
315 TYPE(xt_idxlist),
INTENT(in) :: dst_idxlist
316 INTEGER,
INTENT(in) :: inter_comm, intra_comm
317 TYPE(xt_config),
INTENT(in) :: config
318 TYPE(xt_xmap) :: xmap
322 dst_idxlist, inter_comm, intra_comm, config) &
323 bind(c, name=
'xt_xmap_dist_dir_intercomm_custom_new_f') &
327 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist, dst_idxlist
328 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: inter_comm, intra_comm
329 TYPE(xt_config),
INTENT(in) :: config
330 TYPE(c_ptr) :: xmap_ptr
335 dst_idxlist, inter_comm, intra_comm, config)
339 TYPE(xt_xmap),
INTENT(in) :: xmap
342 FUNCTION xt_xmap_get_num_destinations_c(xmap)
RESULT(num) &
343 bind(c, name=
'xt_xmap_get_num_destinations')
344 IMPORT :: c_ptr, c_int
346 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
347 INTEGER(c_int) :: num
348 END FUNCTION xt_xmap_get_num_destinations_c
350 num = int(xt_xmap_get_num_destinations_c(xmap%cptr))
354 TYPE(xt_xmap),
INTENT(in) :: xmap
357 FUNCTION xt_xmap_get_num_sources_c(xmap)
RESULT(num) &
358 bind(c, name=
'xt_xmap_get_num_sources')
359 IMPORT :: c_ptr, c_int
361 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
362 INTEGER(c_int) :: num
363 END FUNCTION xt_xmap_get_num_sources_c
365 num = int(xt_xmap_get_num_sources_c(xmap%cptr))
369 TYPE(xt_xmap),
INTENT(in) :: xmap
370 INTEGER(c_int),
INTENT(out) :: ranks(*)
372 SUBROUTINE xt_xmap_get_destination_ranks_c(xmap, ranks) &
373 bind(c, name=
'xt_xmap_get_destination_ranks')
374 IMPORT :: c_ptr, c_int
376 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
377 INTEGER(c_int),
INTENT(out) :: ranks(*)
378 END SUBROUTINE xt_xmap_get_destination_ranks_c
380 CALL xt_xmap_get_destination_ranks_c(xmap%cptr, ranks)
384 TYPE(xt_xmap),
INTENT(in) :: xmap
385 INTEGER(c_int),
INTENT(out) :: ranks(*)
387 SUBROUTINE xt_xmap_get_source_ranks_c(xmap, ranks) &
388 bind(c, name=
'xt_xmap_get_source_ranks')
389 IMPORT :: c_ptr, c_int
391 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
392 INTEGER(c_int),
INTENT(out) :: ranks(*)
393 END SUBROUTINE xt_xmap_get_source_ranks_c
395 CALL xt_xmap_get_source_ranks_c(xmap%cptr, ranks)
399 TYPE(xt_xmap),
INTENT(in) :: xmap
402 FUNCTION xt_xmap_get_max_src_pos_c(xmap)
RESULT(num) &
403 bind(c, name=
'xt_xmap_get_max_src_pos')
404 IMPORT :: c_ptr, c_int
406 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
407 INTEGER(c_int) :: num
408 END FUNCTION xt_xmap_get_max_src_pos_c
410 num = int(xt_xmap_get_max_src_pos_c(xmap%cptr))
414 TYPE(xt_xmap),
INTENT(in) :: xmap
417 FUNCTION xt_xmap_get_max_dst_pos_c(xmap)
RESULT(num) &
418 bind(c, name=
'xt_xmap_get_max_dst_pos')
419 IMPORT :: c_ptr, c_int
421 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
422 INTEGER(c_int) :: num
423 END FUNCTION xt_xmap_get_max_dst_pos_c
425 num = int(xt_xmap_get_max_dst_pos_c(xmap%cptr))
430 TYPE(xt_xmap),
INTENT(in) :: xmap
431 INTEGER(xt_reorder_type_kind),
INTENT(in) :: reorder_type
432 TYPE(xt_xmap) :: xmap_reorder
438 LOGICAL,
PARAMETER :: static_assert_xt_reorder_type_kind &
439 = xt_reorder_type_kind == c_int
440 INTEGER,
PARAMETER :: assert_check &
441 = 1 / merge(1, 0, static_assert_xt_reorder_type_kind)
442# define xt_reorder_type_kind c_int
445 FUNCTION xt_xmap_reorder_c(xmap, reorder_type) &
446 bind(c, name=
'xt_xmap_reorder') result(xmap_reorder_ptr)
447 import:: xt_reorder_type_kind, c_ptr
448 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
449 INTEGER(xt_reorder_type_kind),
VALUE,
INTENT(in) :: reorder_type
450 TYPE(c_ptr) :: xmap_reorder_ptr
451 END FUNCTION xt_xmap_reorder_c
454# define UNUSED(x) IF (SIZE( (/(x)/) ) < 0) CONTINUE
458 IF (reorder_type < 0_xt_reorder_type_kind .OR. &
459 reorder_type > huge(1_c_int)) &
460 CALL xt_abort(
"invalid reorder type", filename, __line__)
461 xmap_reorder%cptr = xt_xmap_reorder_c(xmap%cptr, reorder_type)
464# undef xt_reorder_type_kind
471 TYPE(xt_xmap),
INTENT(in) :: xmap
472 INTEGER(xt_reorder_type_kind),
INTENT(in) :: reorder_type
473 TYPE(xt_config),
INTENT(in) :: config
474 TYPE(xt_xmap) :: xmap_reorder
480 LOGICAL,
PARAMETER :: static_assert_xt_reorder_type_kind &
481 = xt_reorder_type_kind == c_int
482 INTEGER,
PARAMETER :: assert_check &
483 = 1 / merge(1, 0, static_assert_xt_reorder_type_kind)
484# define xt_reorder_type_kind c_int
487 FUNCTION xt_xmap_reorder_custom_c(xmap, reorder_type, config) &
488 bind(c, name=
'xt_xmap_reorder_custom') result(xmap_reorder_ptr)
489 import:: xt_reorder_type_kind, c_ptr
490 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap, config
491 INTEGER(xt_reorder_type_kind),
VALUE,
INTENT(in) :: reorder_type
492 TYPE(c_ptr) :: xmap_reorder_ptr
493 END FUNCTION xt_xmap_reorder_custom_c
496# define UNUSED(x) IF (SIZE( (/(x)/) ) < 0) CONTINUE
500 IF (reorder_type < 0_xt_reorder_type_kind .OR. &
501 reorder_type > huge(1_c_int)) &
502 CALL xt_abort(
"invalid reorder type", filename, __line__)
503 xmap_reorder%cptr = xt_xmap_reorder_custom_c(xmap%cptr, reorder_type, &
507# undef xt_reorder_type_kind
514 TYPE(xt_xmap),
INTENT(in) :: xmap
515 INTEGER,
TARGET,
INTENT(in) :: src_positions(*)
516 INTEGER,
TARGET,
INTENT(in) :: dst_positions(*)
517 TYPE(xt_xmap) :: xmap_updated
518 INTEGER(c_int),
TARGET,
ALLOCATABLE :: src_positions_c(:), dst_positions_c(:)
519 TYPE(c_ptr) :: src_positions_p, dst_positions_p
521 FUNCTION xt_xmap_update_positions_c(xmap, src_positions, dst_positions) &
522 bind(c, name=
'xt_xmap_update_positions') result(xmap_updated_ptr)
524 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap, src_positions, dst_positions
525 TYPE(c_ptr) :: xmap_updated_ptr
526 END FUNCTION xt_xmap_update_positions_c
529 IF (c_int == kind(1))
THEN
530 src_positions_p = c_loc(src_positions)
531 dst_positions_p = c_loc(dst_positions)
534 src_positions_p = c_loc(src_positions_c)
536 dst_positions_p = c_loc(dst_positions_c)
538 xmap_updated%cptr = &
539 xt_xmap_update_positions_c(xmap%cptr, src_positions_p, dst_positions_p)
541 SUBROUTINE arg2ci(n, arg, argc)
542 INTEGER,
INTENT(in) :: n, arg(*)
543 INTEGER(c_int),
ALLOCATABLE,
INTENT(inout) :: argc(:)
547 argc(i) = int(arg(i), c_int)
549 END SUBROUTINE arg2ci
552 FUNCTION xt_xmap_spread_a1d(xmap, src_displacements, dst_displacements) &
555 TYPE(xt_xmap),
INTENT(in) :: xmap
556 INTEGER,
INTENT(in) :: src_displacements(:)
557 INTEGER,
INTENT(in) :: dst_displacements(:)
558 TYPE(xt_xmap) :: xmap_spread
559 INTEGER :: num_repetitions
560 INTEGER(i8) :: num_repetitions_i8
561 num_repetitions =
SIZE(src_displacements)
562 IF (num_repetitions /=
SIZE(dst_displacements)) &
563 CALL xt_abort(
"invalid number of repetitions", filename, __line__)
564 num_repetitions_i8 = int(num_repetitions, i8)
567 xmap, num_repetitions_i8, src_displacements, dst_displacements);
568 END FUNCTION xt_xmap_spread_a1d
570 FUNCTION xt_xmap_spread_i2_a1d(xmap, num_repetitions, src_displacements, &
574 TYPE(xt_xmap),
INTENT(in) :: xmap
575 INTEGER(i2),
INTENT(in) :: num_repetitions
576 INTEGER,
INTENT(in) :: src_displacements(num_repetitions)
577 INTEGER,
INTENT(in) :: dst_displacements(num_repetitions)
578 TYPE(xt_xmap) :: xmap_spread
579 INTEGER(i8) :: num_repetitions_i8
580 num_repetitions_i8 = int(num_repetitions, i8)
583 xmap, num_repetitions_i8, src_displacements, dst_displacements);
584 END FUNCTION xt_xmap_spread_i2_a1d
586 FUNCTION xt_xmap_spread_i4_a1d(xmap, num_repetitions, src_displacements, &
590 TYPE(xt_xmap),
INTENT(in) :: xmap
591 INTEGER(i4),
INTENT(in) :: num_repetitions
592 INTEGER,
INTENT(in) :: src_displacements(num_repetitions)
593 INTEGER,
INTENT(in) :: dst_displacements(num_repetitions)
594 TYPE(xt_xmap) :: xmap_spread
595 INTEGER(i8) :: num_repetitions_i8
596 num_repetitions_i8 = int(num_repetitions, i8)
599 xmap, num_repetitions_i8, src_displacements, dst_displacements);
600 END FUNCTION xt_xmap_spread_i4_a1d
602 FUNCTION xt_xmap_spread_i8_a1d(xmap, num_repetitions, src_displacements, &
606 TYPE(xt_xmap),
INTENT(in) :: xmap
607 INTEGER(i8),
INTENT(in) :: num_repetitions
608 INTEGER,
TARGET,
INTENT(in) :: src_displacements(num_repetitions)
609 INTEGER,
TARGET,
INTENT(in) :: dst_displacements(num_repetitions)
610 INTEGER(c_int) :: num_repetitions_c
611 TYPE(xt_xmap) :: xmap_spread
612 INTEGER(c_int),
TARGET,
ALLOCATABLE :: &
613 src_displacements_c(:), dst_displacements_c(:)
614 TYPE(c_ptr) :: src_displacements_p, dst_displacements_p
616 FUNCTION xt_xmap_spread_c(xmap, num_repetitions, src_displacements, &
618 bind(c, name=
'xt_xmap_spread') result(xmap_spread_ptr)
619 import:: c_ptr, c_int
620 TYPE(c_ptr),
VALUE,
INTENT(in) :: &
621 xmap, src_displacements, dst_displacements
622 INTEGER(c_int),
VALUE,
INTENT(in) :: num_repetitions
623 TYPE(c_ptr) :: xmap_spread_ptr
624 END FUNCTION xt_xmap_spread_c
626 IF (num_repetitions < 0_c_int .OR. &
627 num_repetitions > huge(1_c_int)) &
628 CALL xt_abort(
"invalid number of extents", filename, __line__)
629 num_repetitions_c = int(num_repetitions, c_int)
630 IF (c_int == kind(1))
THEN
631 src_displacements_p = c_loc(src_displacements)
632 dst_displacements_p = c_loc(dst_displacements)
634 CALL arg2ci(src_displacements, src_displacements_c)
635 src_displacements_p = c_loc(src_displacements_c)
636 CALL arg2ci(dst_displacements, dst_displacements_c)
637 dst_displacements_p = c_loc(dst_displacements_c)
641 xmap%cptr, num_repetitions_c, src_displacements_p, dst_displacements_p)
643 SUBROUTINE arg2ci(arg, argc)
644 INTEGER,
INTENT(in) :: arg(*)
645 INTEGER(c_int),
ALLOCATABLE,
INTENT(inout) :: argc(:)
647 n = int(num_repetitions)
650 argc(i) = int(arg(i), c_int)
652 END SUBROUTINE arg2ci
653 END FUNCTION xt_xmap_spread_i8_a1d
656 TYPE(xt_xmap),
INTENT(in) :: xmap
657 TYPE(xt_xmap_iter) :: iter
659 FUNCTION xt_xmap_get_out_iterator_c(xmap)
RESULT(cptr) &
660 bind(c, name=
'xt_xmap_get_out_iterator')
662 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
664 END FUNCTION xt_xmap_get_out_iterator_c
666 iter%cptr = xt_xmap_get_out_iterator_c(xmap%cptr)
670 TYPE(xt_xmap),
INTENT(in) :: xmap
671 TYPE(xt_xmap_iter) :: iter
673 FUNCTION xt_xmap_get_in_iterator_c(xmap)
RESULT(cptr) &
674 bind(c, name=
'xt_xmap_get_in_iterator')
676 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
678 END FUNCTION xt_xmap_get_in_iterator_c
680 iter%cptr = xt_xmap_get_in_iterator_c(xmap%cptr)
683 FUNCTION xt_xmap_iterator_is_null(iter)
RESULT(p)
684 TYPE(xt_xmap_iter),
INTENT(in) :: iter
686 p = .NOT. c_associated(iter%cptr)
687 END FUNCTION xt_xmap_iterator_is_null
690 TYPE(xt_xmap_iter),
INTENT(inout) :: iter
693 FUNCTION xt_xmap_iterator_next_c(iter)
RESULT(avail) &
694 bind(c, name=
'xt_xmap_iterator_next')
695 IMPORT :: c_ptr, c_int
696 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
697 INTEGER(c_int) :: avail
698 END FUNCTION xt_xmap_iterator_next_c
700 avail = xt_xmap_iterator_next_c(iter%cptr) /= 0
704 TYPE(xt_xmap_iter),
INTENT(in) :: iter
707 FUNCTION xt_xmap_iterator_get_rank_c(iter)
RESULT(rank) &
708 bind(c, name=
'xt_xmap_iterator_get_rank')
709 IMPORT :: c_ptr, c_int
710 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
711 INTEGER(c_int) :: rank
712 END FUNCTION xt_xmap_iterator_get_rank_c
714 rank = int(xt_xmap_iterator_get_rank_c(iter%cptr))
719 TYPE(xt_xmap_iter),
INTENT(in) :: iter
720 INTEGER(c_int),
POINTER :: transfer_pos(:)
723 FUNCTION xt_xmap_iterator_get_transfer_pos_c(iter)
RESULT(transfer_pos) &
724 bind(c, name=
'xt_xmap_iterator_get_transfer_pos')
726 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
727 TYPE(c_ptr) :: transfer_pos
728 END FUNCTION xt_xmap_iterator_get_transfer_pos_c
731 TYPE(c_ptr) :: transfer_pos_cptr
732 NULLIFY(transfer_pos)
733 n(1) = int(xt_xmap_iterator_get_num_transfer_pos_c(iter%cptr))
734 transfer_pos_cptr = xt_xmap_iterator_get_transfer_pos_c(iter%cptr)
735 CALL c_f_pointer(transfer_pos_cptr, transfer_pos, n)
739 TYPE(xt_xmap_iter),
INTENT(in) :: iter
741 num = int(xt_xmap_iterator_get_num_transfer_pos_c(iter%cptr))
746 TYPE(xt_xmap_iter),
INTENT(in) :: iter
747 TYPE(xt_pos_ext),
POINTER :: transfer_pos_ext(:)
750 FUNCTION xt_xmap_iterator_get_transfer_pos_ext_c(iter) &
751 result(transfer_pos_ext) &
752 bind(c, name=
'xt_xmap_iterator_get_transfer_pos_ext')
754 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
755 TYPE(c_ptr) :: transfer_pos_ext
756 END FUNCTION xt_xmap_iterator_get_transfer_pos_ext_c
759 TYPE(c_ptr) :: transfer_pos_ext_cptr
760 NULLIFY(transfer_pos_ext)
761 n(1) = int(xt_xmap_iterator_get_num_transfer_pos_ext_c(iter%cptr))
762 transfer_pos_ext_cptr = xt_xmap_iterator_get_transfer_pos_ext_c(iter%cptr)
763 CALL c_f_pointer(transfer_pos_ext_cptr, transfer_pos_ext, n)
767 TYPE(xt_xmap_iter),
INTENT(in) :: iter
769 num = int(xt_xmap_iterator_get_num_transfer_pos_ext_c(iter%cptr))
773 TYPE(xt_xmap_iter),
INTENT(inout) :: iter
775 SUBROUTINE xt_xmap_iterator_delete_c(iter) &
776 bind(c, name=
'xt_xmap_iterator_delete')
778 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
779 END SUBROUTINE xt_xmap_iterator_delete_c
781 CALL xt_xmap_iterator_delete_c(iter%cptr)
782 iter%cptr = c_null_ptr
784END MODULE xt_xmap_abstract
796 MODULE PROCEDURE xt_xmap_all2all_orig_new
801 MODULE PROCEDURE xt_xmap_dist_dir_orig_new
806 MODULE PROCEDURE xt_xmap_dist_dir_intercomm_orig_new
describes range of positions starting with start up to start + size - 1 i.e. [start,...
Xt_xmap xt_xmap_update_positions(Xt_xmap xmap, const int *src_positions, const int *dst_positions)
int xt_xmap_iterator_next(Xt_xmap_iter iter)
Xt_xmap xt_xmap_reorder(Xt_xmap xmap, enum xt_reorder_type type)
void xt_xmap_delete(Xt_xmap xmap)
Xt_xmap_iter xt_xmap_get_out_iterator(Xt_xmap xmap)
int xt_xmap_iterator_get_num_transfer_pos_ext(Xt_xmap_iter iter)
Xt_xmap xt_xmap_spread(Xt_xmap xmap, int num_repetitions, const int src_displacements[num_repetitions], const int dst_displacements[num_repetitions])
void xt_xmap_iterator_delete(Xt_xmap_iter iter)
int xt_xmap_get_num_destinations(Xt_xmap xmap)
Xt_xmap xt_xmap_copy(Xt_xmap xmap)
int xt_xmap_iterator_get_rank(Xt_xmap_iter iter)
int xt_xmap_get_max_dst_pos(Xt_xmap xmap)
int xt_xmap_get_num_sources(Xt_xmap xmap)
const struct Xt_pos_ext * xt_xmap_iterator_get_transfer_pos_ext(Xt_xmap_iter iter)
void xt_xmap_get_source_ranks(Xt_xmap xmap, int *ranks)
Xt_xmap xt_xmap_reorder_custom(Xt_xmap xmap, enum xt_reorder_type type, Xt_config config)
Xt_xmap_iter xt_xmap_get_in_iterator(Xt_xmap xmap)
void xt_xmap_get_destination_ranks(Xt_xmap xmap, int *ranks)
int const * xt_xmap_iterator_get_transfer_pos(Xt_xmap_iter iter)
int xt_xmap_get_max_src_pos(Xt_xmap xmap)
int xt_xmap_iterator_get_num_transfer_pos(Xt_xmap_iter iter)
Xt_xmap xt_xmap_all2all_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_all2all_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm, Xt_config config)
Xt_xmap xt_xmap_dist_dir_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_dist_dir_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm, Xt_config config)
Xt_xmap xt_xmap_dist_dir_intercomm_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm inter_comm, MPI_Comm intra_comm)
Xt_xmap xt_xmap_dist_dir_intercomm_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm inter_comm, MPI_Comm intra_comm, Xt_config config)
PPM_DSO_INTERNAL Xt_xmap xt_xmap_dist_dir_intercomm_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint inter_comm_f, MPI_Fint intra_comm_f)
PPM_DSO_INTERNAL Xt_xmap xt_xmap_dist_dir_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f)
PPM_DSO_INTERNAL Xt_xmap xt_xmap_dist_dir_intercomm_custom_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint inter_comm_f, MPI_Fint intra_comm_f, struct xt_config_f *config_f)
PPM_DSO_INTERNAL Xt_xmap xt_xmap_dist_dir_custom_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f, struct xt_config_f *config_f)
PPM_DSO_INTERNAL Xt_xmap xt_xmap_all2all_custom_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f, struct xt_config_f *config_f)
Xt_xmap xt_xmap_f2c(struct xt_xmap_f *p)
Xt_config xt_config_f2c(struct xt_config_f *p)