59 USE iso_c_binding,
ONLY: c_int, c_null_ptr, c_ptr, c_loc, c_associated
62 #include "xt_slice_c_loc.inc"
68 TYPE,
BIND(C),
PUBLIC :: xt_redist
72 TYPE(c_ptr) :: cptr = c_null_ptr
75 TYPE,
BIND(c),
PUBLIC :: xt_offset_ext
76 INTEGER(c_int) :: start, size, stride
79 TYPE,
BIND(c),
PUBLIC :: xt_redist_msg
80 INTEGER(xt_mpi_fint_kind) :: rank, datatype
89 TYPE(xt_redist),
INTENT(in) :: redist
95 MODULE PROCEDURE xt_redist_delete_1
96 MODULE PROCEDURE xt_redist_delete_a1d
100 SUBROUTINE xt_redist_delete_c(redist) &
101 bind(c, name=
'xt_redist_delete')
104 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
105 END SUBROUTINE xt_redist_delete_c
109 MODULE PROCEDURE xt_redist_is_null
110 END INTERFACE xt_is_null
114 MODULE PROCEDURE xt_redist_s_exchange_a1d
115 MODULE PROCEDURE xt_redist_s_exchange_i2_a1d
116 MODULE PROCEDURE xt_redist_s_exchange_i4_a1d
117 MODULE PROCEDURE xt_redist_s_exchange_i8_a1d
122 MODULE PROCEDURE xt_redist_a_exchange_a1d
123 MODULE PROCEDURE xt_redist_a_exchange_i2_a1d
124 MODULE PROCEDURE xt_redist_a_exchange_i4_a1d
125 MODULE PROCEDURE xt_redist_a_exchange_i8_a1d
130 SUBROUTINE xt_redist_s_exchange_c(redist, num_ptr, src_data_cptr, &
131 dst_data_cptr) bind(C, name='xt_redist_s_exchange')
132 import:: c_ptr, c_int
133 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
134 INTEGER(c_int),
VALUE,
INTENT(in) :: num_ptr
135 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
136 END SUBROUTINE xt_redist_s_exchange_c
138 SUBROUTINE xt_redist_a_exchange_c(redist, num_ptr, src_data_cptr, &
139 dst_data_cptr, request) bind(C, name='xt_redist_a_exchange')
140 import:: c_ptr, c_int, xt_request
141 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
142 INTEGER(c_int),
VALUE,
INTENT(in) :: num_ptr
143 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
144 TYPE(xt_request),
INTENT(out) :: request
145 END SUBROUTINE xt_redist_a_exchange_c
147 FUNCTION xt_redist_get_mpi_comm(redist) &
148 bind(c, name=
'xt_redist_get_mpi_comm_c2f') result(comm)
150 TYPE(xt_redist),
INTENT(in) :: redist
151 INTEGER(xt_mpi_fint_kind) :: comm
152 END FUNCTION xt_redist_get_mpi_comm
154 FUNCTION xt_redist_get_num_send_msg_c(redist)
RESULT(num_send_msg) &
155 bind(c, name=
'xt_redist_get_num_send_msg')
156 IMPORT :: c_ptr, c_int
158 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
159 INTEGER(c_int) :: num_send_msg
160 END FUNCTION xt_redist_get_num_send_msg_c
162 FUNCTION xt_redist_get_num_recv_msg_c(redist)
RESULT(num_recv_msg) &
163 bind(c, name=
'xt_redist_get_num_recv_msg')
164 IMPORT :: c_ptr, c_int
166 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
167 INTEGER(c_int) :: num_recv_msg
168 END FUNCTION xt_redist_get_num_recv_msg_c
170 FUNCTION xt_redist_get_recv_mpi_datatype(redist, rank) &
171 bind(c, name=
'xt_redist_get_recv_MPI_Datatype_c2f') result(dt)
173 TYPE(xt_redist),
INTENT(in) :: redist
174 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: rank
175 INTEGER(xt_mpi_fint_kind) :: dt
176 END FUNCTION xt_redist_get_recv_mpi_datatype
178 FUNCTION xt_redist_get_send_mpi_datatype(redist, rank) &
179 bind(c, name=
'xt_redist_get_send_MPI_Datatype_c2f') result(dt)
181 TYPE(xt_redist),
INTENT(in) :: redist
182 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: rank
183 INTEGER(xt_mpi_fint_kind) :: dt
184 END FUNCTION xt_redist_get_send_mpi_datatype
187 src_displacements, dst_displacements, comm_f) &
188 bind(c, name=
'xt_redist_collection_static_new_f') result(res)
189 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind
191 TYPE(xt_redist),
INTENT(in) :: redists_f(*)
192 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: num_redists
193 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(*), &
195 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: comm_f
200 src_displacements, dst_displacements, comm_f, config) &
201 bind(c, name=
'xt_redist_collection_static_custom_new_f') result(res)
202 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind, xt_config
204 TYPE(xt_redist),
INTENT(in) :: redists_f(*)
205 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: num_redists
206 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(*), &
208 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: comm_f
209 TYPE(xt_config),
INTENT(in) :: config
214 comm_f) bind(C, name='xt_redist_collection_new_f')
RESULT(res)
215 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind
217 TYPE(xt_redist),
INTENT(in) :: redists_f(*)
218 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: &
219 num_redists, cache_size, comm_f
224 cache_size, comm_f, config) &
225 bind(c, name=
'xt_redist_collection_custom_new_f') result(res)
226 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind, xt_config
228 TYPE(xt_redist),
INTENT(in) :: redists_f(*)
229 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: &
230 num_redists, cache_size, comm_f
231 TYPE(xt_config),
INTENT(in) :: config
236 num_dst_ext, dst_extents, datatype) &
237 bind(c, name=
'xt_redist_p2p_ext_new_c2f') result(redist)
238 IMPORT :: c_int, c_ptr,
xt_offset_ext, xt_mpi_fint_kind, xt_xmap
239 TYPE(xt_xmap),
INTENT(in) :: xmap
240 INTEGER(c_int),
VALUE,
INTENT(in) :: num_src_ext, num_dst_ext
241 TYPE(xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
242 dst_extents(num_dst_ext)
243 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
244 TYPE(c_ptr) :: redist
248 num_dst_ext, dst_extents, datatype, config) &
249 bind(c, name=
'xt_redist_p2p_ext_custom_new_c2f') result(redist)
250 IMPORT :: c_int, c_ptr,
xt_offset_ext, xt_mpi_fint_kind, xt_xmap, &
252 TYPE(xt_xmap),
INTENT(in) :: xmap
253 INTEGER(c_int),
VALUE,
INTENT(in) :: num_src_ext, num_dst_ext
254 TYPE(xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
255 dst_extents(num_dst_ext)
256 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
257 TYPE(xt_config),
INTENT(in) :: config
258 TYPE(c_ptr) :: redist
261 FUNCTION xt_redist_repeat_new_c(redist_f, src_extent, dst_extent, &
262 num_repetitions, displacements) &
263 bind(c, name=
'xt_redist_repeat_new') result(res)
264 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind, c_int
266 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist_f
267 INTEGER(mpi_address_kind),
VALUE,
INTENT(in) :: src_extent, dst_extent
268 INTEGER(c_int),
VALUE,
INTENT(in) :: num_repetitions
269 INTEGER(c_int),
INTENT(in) :: displacements(*)
271 END FUNCTION xt_redist_repeat_new_c
273 FUNCTION xt_redist_repeat_custom_new_c(redist_f, src_extent, dst_extent, &
274 num_repetitions, displacements, config) &
275 bind(c, name=
'xt_redist_repeat_custom_new') result(res)
276 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind, c_int
278 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist_f
279 INTEGER(mpi_address_kind),
VALUE,
INTENT(in) :: src_extent, dst_extent
280 INTEGER(c_int),
VALUE,
INTENT(in) :: num_repetitions
281 INTEGER(c_int),
INTENT(in) :: displacements(*)
282 TYPE(c_ptr),
VALUE,
INTENT(in) :: config
284 END FUNCTION xt_redist_repeat_custom_new_c
286 FUNCTION xt_redist_repeat_asym_new_c(redist_f, src_extent, dst_extent, &
287 num_repetitions, src_displacements, dst_displacements) &
288 bind(c, name=
'xt_redist_repeat_asym_new') result(res)
289 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind, c_int
291 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist_f
292 INTEGER(mpi_address_kind),
VALUE,
INTENT(in) :: src_extent, dst_extent
293 INTEGER(c_int),
VALUE,
INTENT(in) :: num_repetitions
294 INTEGER(c_int),
INTENT(in) :: src_displacements(*), dst_displacements(*)
296 END FUNCTION xt_redist_repeat_asym_new_c
298 FUNCTION xt_redist_repeat_asym_custom_new_c(redist_f, src_extent, &
299 dst_extent, num_repetitions, src_displacements, dst_displacements, &
301 bind(c, name=
'xt_redist_repeat_asym_custom_new') result(res)
302 IMPORT ::
xt_redist, mpi_address_kind, c_ptr, xt_mpi_fint_kind, c_int
304 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist_f
305 INTEGER(mpi_address_kind),
VALUE,
INTENT(in) :: src_extent, dst_extent
306 INTEGER(c_int),
VALUE,
INTENT(in) :: num_repetitions
307 INTEGER(c_int),
INTENT(in) :: src_displacements(*), dst_displacements(*)
308 TYPE(c_ptr),
VALUE,
INTENT(in) :: config
310 END FUNCTION xt_redist_repeat_asym_custom_new_c
313 recv_msgs_f, comm_f) &
314 bind(c, name=
'xt_redist_single_array_base_new_c2f') result(res)
315 IMPORT :: c_ptr, c_int, xt_mpi_fint_kind
317 INTEGER(c_int),
VALUE :: nsend, nrecv
318 TYPE(c_ptr),
VALUE,
INTENT(in) :: send_msgs_f, recv_msgs_f
319 INTEGER(xt_mpi_fint_kind),
VALUE :: comm_f
324 send_msgs_f, recv_msgs_f, comm_f, config) &
325 bind(c, name=
'xt_redist_single_array_base_custom_new_c2f') result(res)
326 IMPORT :: c_ptr, c_int, xt_mpi_fint_kind, xt_config
328 INTEGER(c_int),
VALUE :: nsend, nrecv
329 TYPE(c_ptr),
VALUE,
INTENT(in) :: send_msgs_f, recv_msgs_f
330 INTEGER(xt_mpi_fint_kind),
VALUE :: comm_f
331 TYPE(xt_config),
INTENT(in) :: config
338 MODULE PROCEDURE xt_redist_collection_static_new_a_i_2ak_i
339 MODULE PROCEDURE xt_redist_collection_static_new_a_i_2ak_i_cfg
340 MODULE PROCEDURE xt_redist_collection_static_new_a_2ak_i
341 MODULE PROCEDURE xt_redist_collection_static_new_a_2ak_i_cfg
345 MODULE PROCEDURE xt_redist_collection_static_new_a_i_2ak_i_cfg
346 MODULE PROCEDURE xt_redist_collection_static_new_a_2ak_i_cfg
350 MODULE PROCEDURE xt_redist_collection_new_a_3i
351 MODULE PROCEDURE xt_redist_collection_new_a_3i_cfg
352 MODULE PROCEDURE xt_redist_collection_new_a_2i
353 MODULE PROCEDURE xt_redist_collection_new_a_2i_cfg
354 MODULE PROCEDURE xt_redist_collection_new_a_i
355 MODULE PROCEDURE xt_redist_collection_new_a_i_cfg
359 MODULE PROCEDURE xt_redist_collection_new_a_3i_cfg
360 MODULE PROCEDURE xt_redist_collection_new_a_2i_cfg
361 MODULE PROCEDURE xt_redist_collection_new_a_i_cfg
365 MODULE PROCEDURE xt_redist_p2p_ext_new_i2_a1d_i2_a1d
366 MODULE PROCEDURE xt_redist_p2p_ext_new_i2_a1d_i2_a1d_cfg
367 MODULE PROCEDURE xt_redist_p2p_ext_new_i4_a1d_i4_a1d
368 MODULE PROCEDURE xt_redist_p2p_ext_new_i4_a1d_i4_a1d_cfg
369 MODULE PROCEDURE xt_redist_p2p_ext_new_i8_a1d_i8_a1d
370 MODULE PROCEDURE xt_redist_p2p_ext_new_i8_a1d_i8_a1d_cfg
371 MODULE PROCEDURE xt_redist_p2p_ext_new_a1d_a1d
372 MODULE PROCEDURE xt_redist_p2p_ext_new_a1d_a1d_cfg
376 MODULE PROCEDURE xt_redist_p2p_ext_new_i2_a1d_i2_a1d_cfg
377 MODULE PROCEDURE xt_redist_p2p_ext_new_i4_a1d_i4_a1d_cfg
378 MODULE PROCEDURE xt_redist_p2p_ext_new_i8_a1d_i8_a1d_cfg
379 MODULE PROCEDURE xt_redist_p2p_ext_new_a1d_a1d_cfg
383 MODULE PROCEDURE xt_redist_repeat_new_i4_a1d
384 MODULE PROCEDURE xt_redist_repeat_new_i4_a1d_cfg
385 MODULE PROCEDURE xt_redist_repeat_new_a1d
386 MODULE PROCEDURE xt_redist_repeat_new_a1d_cfg
387 MODULE PROCEDURE xt_redist_repeat_asym_new_i4_a1d
388 MODULE PROCEDURE xt_redist_repeat_asym_new_i4_a1d_cfg
389 MODULE PROCEDURE xt_redist_repeat_asym_new_a1d
390 MODULE PROCEDURE xt_redist_repeat_asym_new_a1d_cfg
394 MODULE PROCEDURE xt_redist_repeat_new_i4_a1d_cfg
395 MODULE PROCEDURE xt_redist_repeat_new_a1d_cfg
396 MODULE PROCEDURE xt_redist_repeat_asym_new_i4_a1d_cfg
397 MODULE PROCEDURE xt_redist_repeat_asym_new_a1d_cfg
401 MODULE PROCEDURE xt_redist_single_array_base_new_i2_a1d_i2_a1d
402 MODULE PROCEDURE xt_redist_single_array_base_new_i2_a1d_i2_a1d_cfg
403 MODULE PROCEDURE xt_redist_single_array_base_new_i4_a1d_i4_a1d
404 MODULE PROCEDURE xt_redist_single_array_base_new_i4_a1d_i4_a1d_cfg
405 MODULE PROCEDURE xt_redist_single_array_base_new_i8_a1d_i8_a1d
406 MODULE PROCEDURE xt_redist_single_array_base_new_i8_a1d_i8_a1d_cfg
407 MODULE PROCEDURE xt_redist_single_array_base_new_a1d_a1d
408 MODULE PROCEDURE xt_redist_single_array_base_new_a1d_a1d_cfg
412 MODULE PROCEDURE xt_redist_single_array_base_new_i2_a1d_i2_a1d_cfg
413 MODULE PROCEDURE xt_redist_single_array_base_new_i4_a1d_i4_a1d_cfg
414 MODULE PROCEDURE xt_redist_single_array_base_new_i8_a1d_i8_a1d_cfg
415 MODULE PROCEDURE xt_redist_single_array_base_new_a1d_a1d_cfg
426 xt_redist_get_send_mpi_datatype, xt_redist_get_recv_mpi_datatype, &
432 CHARACTER(len=*),
PARAMETER :: filename =
'xt_redist_f.f90'
435 FUNCTION xt_redist_is_null(redist)
RESULT(p)
436 TYPE(xt_redist),
INTENT(in) :: redist
438 p = .NOT. c_associated(redist%cptr)
439 END FUNCTION xt_redist_is_null
442 TYPE(c_ptr),
INTENT(in) :: redist
451 FUNCTION xt_redist_copy_c(redist) bind(C, name='xt_redist_copy')
453 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
454 TYPE(c_ptr) :: xt_redist_copy_c
455 END FUNCTION xt_redist_copy_c
457 redist_copy%cptr = xt_redist_copy_c(redist%cptr)
460 SUBROUTINE xt_redist_delete_1(redist)
462 CALL xt_redist_delete_c(redist%cptr)
463 redist%cptr = c_null_ptr
464 END SUBROUTINE xt_redist_delete_1
466 SUBROUTINE xt_redist_delete_a1d(redists)
467 TYPE(
xt_redist),
INTENT(inout) :: redists(:)
471 CALL xt_redist_delete_c(redists(i)%cptr)
472 redists(i)%cptr = c_null_ptr
474 END SUBROUTINE xt_redist_delete_a1d
478 INTEGER :: num_send_msg
481 IF (n > huge(num_send_msg) .OR. n < -huge(num_send_msg)) &
482 CALL xt_abort(
"num_send_msg out of bounds", filename, __line__)
483 num_send_msg = int(n)
488 INTEGER :: num_recv_msg
491 IF (n > huge(num_recv_msg) .OR. n < -huge(num_recv_msg)) &
492 CALL xt_abort(
"num_recv_msg out of bounds", filename, __line__)
493 num_recv_msg = int(n)
498 TYPE(c_ptr),
INTENT(in) :: src_data_cptr, dst_data_cptr
500 SUBROUTINE xt_redist_s_exchange1_c(redist, src_data_cptr, dst_data_cptr) &
501 bind(c, name=
'xt_redist_s_exchange1')
503 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
504 TYPE(c_ptr),
VALUE :: src_data_cptr, dst_data_cptr
505 END SUBROUTINE xt_redist_s_exchange1_c
507 CALL xt_redist_s_exchange1_c(
xt_redist_f2c(redist), src_data_cptr, &
514 TYPE(c_ptr) :: src_data_cptr, dst_data_cptr
515 TYPE(xt_request),
INTENT(out) :: request
517 SUBROUTINE xt_redist_a_exchange1_c(redist, src_data_cptr, &
518 dst_data_cptr, request_c) bind(C, name='xt_redist_a_exchange1')
519 import:: c_ptr, xt_request
520 TYPE(c_ptr),
VALUE,
INTENT(in) :: redist
521 TYPE(c_ptr),
VALUE :: src_data_cptr, dst_data_cptr
522 TYPE(xt_request),
INTENT(out) :: request_c
523 END SUBROUTINE xt_redist_a_exchange1_c
525 CALL xt_redist_a_exchange1_c(
xt_redist_f2c(redist), src_data_cptr, &
526 & dst_data_cptr, request)
529 SUBROUTINE xt_redist_s_exchange_a1d(redist, src_data_cptr, dst_data_cptr)
531 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(:), dst_data_cptr(:)
533 INTEGER(c_int) :: num_ptr_c
534 n =
SIZE(src_data_cptr)
535 IF (n /=
SIZE(dst_data_cptr) .OR. n > huge(1_c_int)) &
536 CALL xt_abort(
"invalid number of pointers", filename, __line__)
537 num_ptr_c = int(n, c_int)
538 CALL xt_redist_s_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
539 src_data_cptr, dst_data_cptr)
540 END SUBROUTINE xt_redist_s_exchange_a1d
542 SUBROUTINE xt_redist_a_exchange_a1d(redist, src_data_cptr, dst_data_cptr, &
545 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(:), dst_data_cptr(:)
546 TYPE(xt_request),
INTENT(out) :: request
548 INTEGER(c_int) :: num_ptr_c
549 num_ptr =
SIZE(src_data_cptr)
550 IF (num_ptr /=
SIZE(dst_data_cptr) .OR. num_ptr > huge(1_c_int)) &
551 CALL xt_abort(
"invalid number of pointers", filename, __line__)
552 num_ptr_c = int(num_ptr, c_int)
553 CALL xt_redist_a_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
554 src_data_cptr, dst_data_cptr, request)
555 END SUBROUTINE xt_redist_a_exchange_a1d
557 SUBROUTINE xt_redist_s_exchange_i2_a1d(redist, num_ptr, &
558 src_data_cptr, dst_data_cptr)
560 INTEGER(i2),
INTENT(in) :: num_ptr
561 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
562 INTEGER(c_int) :: num_ptr_c
563 IF (num_ptr < 0_i2) &
564 CALL xt_abort(
"invalid number of pointers", filename, __line__)
565 num_ptr_c = int(num_ptr, c_int)
566 CALL xt_redist_s_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
567 src_data_cptr, dst_data_cptr)
568 END SUBROUTINE xt_redist_s_exchange_i2_a1d
570 SUBROUTINE xt_redist_a_exchange_i2_a1d(redist, num_ptr, &
571 src_data_cptr, dst_data_cptr, request)
573 INTEGER(i2),
INTENT(in) :: num_ptr
574 TYPE(xt_request),
INTENT(out) :: request
575 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
576 INTEGER(c_int) :: num_ptr_c
577 IF (num_ptr < 0_i2) &
578 CALL xt_abort(
"invalid number of pointers", filename, __line__)
579 num_ptr_c = int(num_ptr, c_int)
580 CALL xt_redist_a_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
581 src_data_cptr, dst_data_cptr, request)
582 END SUBROUTINE xt_redist_a_exchange_i2_a1d
584 SUBROUTINE xt_redist_s_exchange_i4_a1d(redist, num_ptr, &
585 src_data_cptr, dst_data_cptr)
587 INTEGER(i4),
INTENT(in) :: num_ptr
588 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
589 INTEGER(c_int) :: num_ptr_c
590 IF (num_ptr < 0_i4 .OR. num_ptr > huge(1_c_int)) &
591 CALL xt_abort(
"invalid number of pointers", filename, __line__)
592 num_ptr_c = int(num_ptr, c_int)
593 CALL xt_redist_s_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
594 src_data_cptr, dst_data_cptr)
595 END SUBROUTINE xt_redist_s_exchange_i4_a1d
597 SUBROUTINE xt_redist_a_exchange_i4_a1d(redist, num_ptr, &
598 src_data_cptr, dst_data_cptr, request)
600 INTEGER(i4),
INTENT(in) :: num_ptr
601 TYPE(xt_request),
INTENT(out) :: request
602 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
603 INTEGER(c_int) :: num_ptr_c
604 IF (num_ptr < 0_i4 .OR. num_ptr > huge(1_c_int)) &
605 CALL xt_abort(
"invalid number of pointers", filename, __line__)
606 num_ptr_c = int(num_ptr, c_int)
607 CALL xt_redist_a_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
608 src_data_cptr, dst_data_cptr, request)
609 END SUBROUTINE xt_redist_a_exchange_i4_a1d
611 SUBROUTINE xt_redist_s_exchange_i8_a1d(redist, num_ptr, &
612 src_data_cptr, dst_data_cptr)
614 INTEGER(i8),
INTENT(in) :: num_ptr
615 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
616 INTEGER(c_int) :: num_ptr_c
617 IF (num_ptr < 0_i8 .OR. num_ptr > huge(1_c_int)) &
618 CALL xt_abort(
"invalid number of pointers", filename, __line__)
619 num_ptr_c = int(num_ptr, c_int)
620 CALL xt_redist_s_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
621 src_data_cptr, dst_data_cptr)
622 END SUBROUTINE xt_redist_s_exchange_i8_a1d
624 SUBROUTINE xt_redist_a_exchange_i8_a1d(redist, num_ptr, &
625 src_data_cptr, dst_data_cptr, request)
627 INTEGER(i8),
INTENT(in) :: num_ptr
628 TYPE(xt_request),
INTENT(out) :: request
629 TYPE(c_ptr),
INTENT(in) :: src_data_cptr(num_ptr), dst_data_cptr(num_ptr)
630 INTEGER(c_int) :: num_ptr_c
631 IF (num_ptr < 0_i8 .OR. num_ptr > huge(1_c_int)) &
632 CALL xt_abort(
"invalid number of pointers", filename, __line__)
633 num_ptr_c = int(num_ptr, c_int)
634 CALL xt_redist_a_exchange_c(
xt_redist_f2c(redist), num_ptr_c, &
635 src_data_cptr, dst_data_cptr, request)
636 END SUBROUTINE xt_redist_a_exchange_i8_a1d
639 TYPE(xt_xmap),
INTENT(in) :: xmap
640 INTEGER,
INTENT(in) :: datatype
645 bind(c, name=
'xt_redist_p2p_new_f') result(res_ptr)
646 import:: xt_xmap,
xt_redist, c_int, c_ptr, xt_mpi_fint_kind
648 TYPE(xt_xmap),
INTENT(in) :: xmap
649 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
650 TYPE(c_ptr) :: res_ptr
659 TYPE(xt_xmap),
INTENT(in) :: xmap
660 INTEGER,
INTENT(in) :: datatype
661 TYPE(xt_config),
INTENT(in) :: config
666 bind(c, name=
'xt_redist_p2p_custom_new_f') result(res_ptr)
667 import:: xt_xmap,
xt_redist, c_ptr, xt_mpi_fint_kind, xt_config
669 TYPE(xt_xmap),
INTENT(in) :: xmap
670 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
671 TYPE(xt_config),
INTENT(in) :: config
672 TYPE(c_ptr) :: res_ptr
683 TYPE(xt_xmap),
INTENT(in) :: xmap
684 INTEGER,
INTENT(in) :: src_offsets(*)
685 INTEGER,
INTENT(in) :: dst_offsets(*)
686 INTEGER,
INTENT(in) :: datatype
691 datatype) bind(C, name='xt_redist_p2p_off_new_f')
RESULT(res_ptr)
692 IMPORT :: xt_xmap,
xt_redist, c_ptr, xt_mpi_fint_kind
694 TYPE(xt_xmap),
INTENT(in) :: xmap
695 INTEGER(xt_mpi_fint_kind),
INTENT(in) :: src_offsets(*), dst_offsets(*)
696 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
697 TYPE(c_ptr) :: res_ptr
707 datatype, config)
RESULT(res)
709 TYPE(xt_xmap),
INTENT(in) :: xmap
710 INTEGER,
INTENT(in) :: src_offsets(*), dst_offsets(*)
711 INTEGER,
INTENT(in) :: datatype
712 TYPE(xt_config),
INTENT(in) :: config
717 datatype, config) bind(C, name='xt_redist_p2p_off_custom_new_f') &
719 IMPORT :: xt_xmap,
xt_redist, c_ptr, xt_mpi_fint_kind, xt_config
721 TYPE(xt_xmap),
INTENT(in) :: xmap
722 INTEGER(xt_mpi_fint_kind),
INTENT(in) :: src_offsets(*), dst_offsets(*)
723 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
724 TYPE(xt_config),
INTENT(in) :: config
725 TYPE(c_ptr) :: res_ptr
736 & dst_block_sizes, dst_block_num, &
740 TYPE(xt_xmap),
INTENT(in) :: xmap
741 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*), src_block_num, &
742 dst_block_sizes(*), dst_block_num
743 INTEGER,
INTENT(in) :: datatype
747 & src_block_sizes, src_block_num, &
748 & dst_block_sizes, dst_block_num, &
750 bind(c, name=
'xt_redist_p2p_blocks_new_f') result(res_ptr)
751 IMPORT :: xt_xmap, xt_mpi_fint_kind,
xt_redist, c_int, c_ptr
753 TYPE(xt_xmap),
INTENT(in) :: xmap
754 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num, dst_block_num
755 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*), dst_block_sizes(*)
756 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
757 TYPE(c_ptr) :: res_ptr
763 & src_block_sizes, src_block_num, &
764 & dst_block_sizes, dst_block_num, &
770 & dst_block_sizes, dst_block_num, &
771 & datatype, config) &
774 TYPE(xt_xmap),
INTENT(in) :: xmap
775 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*), src_block_num, &
776 dst_block_sizes(*), dst_block_num
777 INTEGER,
INTENT(in) :: datatype
778 TYPE(xt_config),
INTENT(in) :: config
782 & src_block_sizes, src_block_num, &
783 & dst_block_sizes, dst_block_num, &
784 & datatype, config) &
785 bind(c, name=
'xt_redist_p2p_blocks_custom_new_f') result(res_ptr)
786 IMPORT :: xt_xmap, xt_mpi_fint_kind,
xt_redist, c_int, c_ptr, xt_config
788 TYPE(xt_xmap),
INTENT(in) :: xmap
789 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num, dst_block_num
790 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*), dst_block_sizes(*)
791 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
792 TYPE(xt_config),
INTENT(in) :: config
793 TYPE(c_ptr) :: res_ptr
799 & src_block_sizes, src_block_num, &
800 & dst_block_sizes, dst_block_num, &
805 src_block_sizes, src_block_num, &
806 dst_block_offsets, dst_block_sizes, dst_block_num, &
807 datatype)
RESULT(res)
809 TYPE(xt_xmap),
INTENT(in) :: xmap
810 INTEGER(c_int),
INTENT(in) :: src_block_offsets(*)
811 INTEGER(c_int),
INTENT(in) :: src_block_sizes(*)
812 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num
813 INTEGER(c_int),
INTENT(in) :: dst_block_offsets(*)
814 INTEGER(c_int),
INTENT(in) :: dst_block_sizes(*)
815 INTEGER(c_int),
VALUE,
INTENT(in) :: dst_block_num
816 INTEGER,
INTENT(in) :: datatype
820 src_block_sizes, src_block_num, &
821 dst_block_offsets, dst_block_sizes, dst_block_num, &
822 datatype) bind(C, name='xt_redist_p2p_blocks_off_new_f') &
824 IMPORT :: xt_xmap,
xt_redist, xt_mpi_fint_kind, c_int, c_ptr
826 TYPE(xt_xmap),
INTENT(in) :: xmap
827 INTEGER(c_int),
INTENT(in) :: src_block_offsets(*), src_block_sizes(*),&
828 dst_block_offsets(*), dst_block_sizes(*)
829 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num, dst_block_num
830 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
831 TYPE(c_ptr) :: res_ptr
837 src_block_sizes, src_block_num, &
838 dst_block_offsets, dst_block_sizes, dst_block_num, &
844 src_block_sizes, src_block_num, &
845 dst_block_offsets, dst_block_sizes, dst_block_num, &
846 datatype, config)
RESULT(res)
848 TYPE(xt_xmap),
INTENT(in) :: xmap
849 INTEGER(c_int),
INTENT(in) :: src_block_offsets(*), src_block_sizes(*), &
850 dst_block_offsets(*), dst_block_sizes(*)
851 INTEGER(c_int),
INTENT(in) :: src_block_num, dst_block_num
852 INTEGER,
INTENT(in) :: datatype
853 TYPE(xt_config),
INTENT(in) :: config
857 src_block_sizes, src_block_num, &
858 dst_block_offsets, dst_block_sizes, dst_block_num, &
860 bind(c, name=
'xt_redist_p2p_blocks_off_custom_new_f') result(res_ptr)
861 IMPORT :: xt_xmap,
xt_redist, xt_mpi_fint_kind, c_int, c_ptr, xt_config
863 TYPE(xt_xmap),
INTENT(in) :: xmap
864 INTEGER(c_int),
INTENT(in) :: src_block_offsets(*), src_block_sizes(*),&
865 dst_block_offsets(*), dst_block_sizes(*)
866 INTEGER(c_int),
VALUE,
INTENT(in) :: src_block_num
867 INTEGER(c_int),
VALUE,
INTENT(in) :: dst_block_num
868 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: datatype
869 TYPE(xt_config),
INTENT(in) :: config
870 TYPE(c_ptr) :: res_ptr
876 src_block_sizes, src_block_num, &
877 dst_block_offsets, dst_block_sizes, dst_block_num, &
882 FUNCTION xt_redist_collection_static_new_a_i_2ak_i(redists, num_redists, &
883 src_displacements, dst_displacements, comm)
RESULT(res)
884 TYPE(
xt_redist),
INTENT(in) :: redists(*)
885 INTEGER,
INTENT(in) :: num_redists, comm
886 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(*), &
889 INTEGER(c_int) :: num_redists_c
891 num_redists_c = int(num_redists, c_int)
893 num_redists_c, src_displacements, dst_displacements, comm))
894 END FUNCTION xt_redist_collection_static_new_a_i_2ak_i
896 FUNCTION xt_redist_collection_static_new_a_i_2ak_i_cfg(redists, num_redists, &
897 src_displacements, dst_displacements, comm, config)
RESULT(res)
898 TYPE(
xt_redist),
INTENT(in) :: redists(*)
899 INTEGER,
INTENT(in) :: num_redists, comm
900 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(*), &
902 TYPE(xt_config),
INTENT(in) :: config
904 INTEGER(c_int) :: num_redists_c
906 num_redists_c = int(num_redists, c_int)
908 num_redists_c, src_displacements, dst_displacements, comm, config))
909 END FUNCTION xt_redist_collection_static_new_a_i_2ak_i_cfg
911 FUNCTION xt_redist_collection_static_new_a_2ak_i(redists, &
912 src_displacements, dst_displacements, comm)
RESULT(res)
913 TYPE(
xt_redist),
INTENT(in) :: redists(:)
914 INTEGER,
INTENT(in) :: comm
915 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(:), &
918 INTEGER :: num_redists
919 INTEGER(c_int) :: num_redists_c
921 num_redists =
SIZE(redists)
922 IF (num_redists > huge(1_c_int) &
923 .OR. num_redists /=
SIZE(src_displacements) &
924 .OR. num_redists /=
SIZE(dst_displacements)) &
925 CALL xt_abort(
"invalid number of redists", filename, __line__)
926 num_redists_c = int(num_redists, c_int)
928 num_redists_c, src_displacements, dst_displacements, comm))
929 END FUNCTION xt_redist_collection_static_new_a_2ak_i
931 FUNCTION xt_redist_collection_static_new_a_2ak_i_cfg(redists, &
932 src_displacements, dst_displacements, comm, config)
RESULT(res)
933 TYPE(
xt_redist),
INTENT(in) :: redists(:)
934 INTEGER,
INTENT(in) :: comm
935 INTEGER(mpi_address_kind),
INTENT(in) :: src_displacements(:), &
937 TYPE(xt_config),
INTENT(in) :: config
939 INTEGER :: num_redists
940 INTEGER(c_int) :: num_redists_c
942 num_redists =
SIZE(redists)
943 IF (num_redists > huge(1_c_int) &
944 .OR. num_redists /=
SIZE(src_displacements) &
945 .OR. num_redists /=
SIZE(dst_displacements)) &
946 CALL xt_abort(
"invalid number of redists", filename, __line__)
947 num_redists_c = int(num_redists, c_int)
949 num_redists_c, src_displacements, dst_displacements, comm, config))
950 END FUNCTION xt_redist_collection_static_new_a_2ak_i_cfg
952 FUNCTION xt_redist_collection_new_a_3i(redists, num_redists, cache_size, &
954 TYPE(
xt_redist),
INTENT(in) :: redists(*)
955 INTEGER,
INTENT(in) :: num_redists, cache_size, comm
960 END FUNCTION xt_redist_collection_new_a_3i
962 FUNCTION xt_redist_collection_new_a_3i_cfg(redists, num_redists, cache_size, &
963 comm, config)
RESULT(res)
964 TYPE(
xt_redist),
INTENT(in) :: redists(*)
965 INTEGER,
INTENT(in) :: num_redists, cache_size, comm
966 TYPE(xt_config),
INTENT(in) :: config
970 cache_size, comm, config))
971 END FUNCTION xt_redist_collection_new_a_3i_cfg
973 FUNCTION xt_redist_collection_new_a_2i(redists, cache_size, comm) &
975 TYPE(
xt_redist),
INTENT(in) :: redists(:)
976 INTEGER,
INTENT(in) :: cache_size, comm
978 INTEGER(c_int) :: num_redists_c
980 num_redists_c = int(
SIZE(redists), c_int)
982 num_redists_c, cache_size, comm))
983 END FUNCTION xt_redist_collection_new_a_2i
985 FUNCTION xt_redist_collection_new_a_2i_cfg(redists, cache_size, comm, &
987 TYPE(
xt_redist),
INTENT(in) :: redists(:)
988 INTEGER,
INTENT(in) :: cache_size, comm
989 TYPE(xt_config),
INTENT(in) :: config
991 INTEGER(c_int) :: num_redists_c
993 num_redists_c = int(
SIZE(redists), c_int)
995 num_redists_c, cache_size, comm, config))
996 END FUNCTION xt_redist_collection_new_a_2i_cfg
998 FUNCTION xt_redist_collection_new_a_i(redists, comm) &
1000 TYPE(
xt_redist),
INTENT(in) :: redists(:)
1001 INTEGER,
INTENT(in) :: comm
1004 res = xt_redist_collection_new_a_3i(redists,
SIZE(redists), -1, comm)
1005 END FUNCTION xt_redist_collection_new_a_i
1007 FUNCTION xt_redist_collection_new_a_i_cfg(redists, comm, config) &
1009 TYPE(
xt_redist),
INTENT(in) :: redists(:)
1010 INTEGER,
INTENT(in) :: comm
1011 TYPE(xt_config),
INTENT(in) :: config
1014 res = xt_redist_collection_new_a_3i_cfg(redists,
SIZE(redists), &
1016 END FUNCTION xt_redist_collection_new_a_i_cfg
1019 FUNCTION xt_redist_repeat_new_i4_a1d(redist, src_extent, dst_extent, &
1020 num_repetitions, displacements)
RESULT(res)
1022 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
1023 INTEGER(i4),
INTENT(in) :: num_repetitions
1024 INTEGER(c_int),
INTENT(in) :: displacements(num_repetitions)
1026 INTEGER(c_int) :: num_repetitions_c
1028 num_repetitions_c = int(num_repetitions, c_int)
1030 src_extent, dst_extent, num_repetitions_c, displacements))
1031 END FUNCTION xt_redist_repeat_new_i4_a1d
1033 FUNCTION xt_redist_repeat_new_i4_a1d_cfg(redist, src_extent, dst_extent, &
1034 num_repetitions, displacements, config)
RESULT(res)
1036 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
1037 INTEGER(i4),
INTENT(in) :: num_repetitions
1038 INTEGER(c_int),
INTENT(in) :: displacements(num_repetitions)
1039 TYPE(xt_config),
INTENT(in) :: config
1041 INTEGER(c_int) :: num_repetitions_c
1043 num_repetitions_c = int(num_repetitions, c_int)
1045 src_extent, dst_extent, num_repetitions_c, displacements, &
1047 END FUNCTION xt_redist_repeat_new_i4_a1d_cfg
1049 FUNCTION xt_redist_repeat_new_a1d(redist, src_extent, dst_extent, &
1050 displacements)
RESULT(res)
1052 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
1053 INTEGER(c_int),
INTENT(in) :: displacements(:)
1056 INTEGER(c_int) :: num_repetitions_c
1058 num_repetitions_c = int(
SIZE(displacements), c_int)
1060 src_extent, dst_extent, num_repetitions_c, displacements))
1061 END FUNCTION xt_redist_repeat_new_a1d
1063 FUNCTION xt_redist_repeat_new_a1d_cfg(redist, src_extent, dst_extent, &
1064 displacements, config)
RESULT(res)
1066 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
1067 INTEGER(c_int),
INTENT(in) :: displacements(:)
1068 TYPE(xt_config),
INTENT(in) :: config
1071 INTEGER(c_int) :: num_repetitions_c
1073 num_repetitions_c = int(
SIZE(displacements), c_int)
1075 src_extent, dst_extent, num_repetitions_c, displacements, &
1077 END FUNCTION xt_redist_repeat_new_a1d_cfg
1079 FUNCTION xt_redist_repeat_asym_new_i4_a1d(redist, src_extent, dst_extent, &
1080 num_repetitions, src_displacements, dst_displacements)
RESULT(res)
1082 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
1083 INTEGER(i4),
INTENT(in) :: num_repetitions
1084 INTEGER(c_int),
INTENT(in) :: src_displacements(num_repetitions), &
1085 & dst_displacements(num_repetitions)
1087 INTEGER(c_int) :: num_repetitions_c
1089 num_repetitions_c = int(num_repetitions, c_int)
1091 src_extent, dst_extent, num_repetitions_c, src_displacements, &
1093 END FUNCTION xt_redist_repeat_asym_new_i4_a1d
1095 FUNCTION xt_redist_repeat_asym_new_i4_a1d_cfg(redist, src_extent, dst_extent,&
1096 num_repetitions, src_displacements, dst_displacements, config) &
1099 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
1100 INTEGER(i4),
INTENT(in) :: num_repetitions
1101 INTEGER(c_int),
INTENT(in) :: src_displacements(num_repetitions), &
1102 & dst_displacements(num_repetitions)
1103 TYPE(xt_config),
INTENT(in) :: config
1105 INTEGER(c_int) :: num_repetitions_c
1107 num_repetitions_c = int(num_repetitions, c_int)
1110 src_extent, dst_extent, num_repetitions_c, src_displacements, &
1112 END FUNCTION xt_redist_repeat_asym_new_i4_a1d_cfg
1114 FUNCTION xt_redist_repeat_asym_new_a1d(redist, src_extent, dst_extent, &
1115 src_displacements, dst_displacements)
RESULT(res)
1117 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
1118 INTEGER(c_int),
INTENT(in) :: src_displacements(:), dst_displacements(:)
1121 INTEGER(i4) :: num_repetitions
1123 num_repetitions =
SIZE(src_displacements)
1124 IF (num_repetitions /=
SIZE(dst_displacements)) &
1125 CALL xt_abort(
"inequal size for src and dst displacements", &
1129 src_extent, dst_extent, num_repetitions, src_displacements, &
1131 END FUNCTION xt_redist_repeat_asym_new_a1d
1133 FUNCTION xt_redist_repeat_asym_new_a1d_cfg(redist, src_extent, dst_extent, &
1134 src_displacements, dst_displacements, config)
RESULT(res)
1136 INTEGER(mpi_address_kind),
INTENT(in) :: src_extent, dst_extent
1137 INTEGER(c_int),
INTENT(in) :: src_displacements(:), dst_displacements(:)
1138 TYPE(xt_config),
INTENT(in) :: config
1141 INTEGER(i4) :: num_repetitions
1143 num_repetitions =
SIZE(src_displacements)
1144 IF (num_repetitions /=
SIZE(dst_displacements)) &
1145 CALL xt_abort(
"inequal size for src and dst displacements", &
1150 src_extent, dst_extent, num_repetitions, src_displacements, &
1152 END FUNCTION xt_redist_repeat_asym_new_a1d_cfg
1154 FUNCTION xt_redist_p2p_ext_new_i2_a1d_i2_a1d(xmap, num_src_ext, src_extents, &
1155 num_dst_ext, dst_extents, datatype)
RESULT(redist)
1156 TYPE(xt_xmap),
INTENT(in) :: xmap
1157 INTEGER(i2),
INTENT(in) :: num_src_ext, num_dst_ext
1158 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
1159 dst_extents(num_dst_ext)
1160 INTEGER,
INTENT(in) :: datatype
1162 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
1163 IF (num_src_ext < 0_i2 .OR. num_src_ext > huge(1_c_int) &
1164 .OR. num_dst_ext < 0_i2 .OR. num_dst_ext > huge(1_c_int)) &
1165 CALL xt_abort(
"invalid number of extents", filename, __line__)
1166 num_src_ext_c = int(num_src_ext, c_int)
1167 num_dst_ext_c = int(num_dst_ext, c_int)
1169 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
1170 END FUNCTION xt_redist_p2p_ext_new_i2_a1d_i2_a1d
1172 FUNCTION xt_redist_p2p_ext_new_i2_a1d_i2_a1d_cfg(xmap, num_src_ext, &
1173 src_extents, num_dst_ext, dst_extents, datatype, config)
RESULT(redist)
1174 TYPE(xt_xmap),
INTENT(in) :: xmap
1175 INTEGER(i2),
INTENT(in) :: num_src_ext, num_dst_ext
1176 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
1177 dst_extents(num_dst_ext)
1178 INTEGER,
INTENT(in) :: datatype
1179 TYPE(xt_config),
INTENT(in) :: config
1181 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
1182 IF (num_src_ext < 0_i2 .OR. num_src_ext > huge(1_c_int) &
1183 .OR. num_dst_ext < 0_i2 .OR. num_dst_ext > huge(1_c_int)) &
1184 CALL xt_abort(
"invalid number of extents", filename, __line__)
1185 num_src_ext_c = int(num_src_ext, c_int)
1186 num_dst_ext_c = int(num_dst_ext, c_int)
1188 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype, &
1190 END FUNCTION xt_redist_p2p_ext_new_i2_a1d_i2_a1d_cfg
1192 FUNCTION xt_redist_p2p_ext_new_i4_a1d_i4_a1d(xmap, num_src_ext, src_extents, &
1193 num_dst_ext, dst_extents, datatype)
RESULT(redist)
1194 TYPE(xt_xmap),
INTENT(in) :: xmap
1195 INTEGER(i4),
INTENT(in) :: num_src_ext, num_dst_ext
1196 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
1197 dst_extents(num_dst_ext)
1198 INTEGER,
INTENT(in) :: datatype
1200 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
1201 IF (num_src_ext < 0_i4 .OR. num_src_ext > huge(1_c_int) &
1202 .OR. num_dst_ext < 0_i4 .OR. num_dst_ext > huge(1_c_int)) &
1203 CALL xt_abort(
"invalid number of extents", filename, __line__)
1204 num_src_ext_c = int(num_src_ext, c_int)
1205 num_dst_ext_c = int(num_dst_ext, c_int)
1207 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
1208 END FUNCTION xt_redist_p2p_ext_new_i4_a1d_i4_a1d
1210 FUNCTION xt_redist_p2p_ext_new_i4_a1d_i4_a1d_cfg(xmap, num_src_ext, &
1211 src_extents, num_dst_ext, dst_extents, datatype, config)
RESULT(redist)
1212 TYPE(xt_xmap),
INTENT(in) :: xmap
1213 INTEGER(i4),
INTENT(in) :: num_src_ext, num_dst_ext
1214 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
1215 dst_extents(num_dst_ext)
1216 INTEGER,
INTENT(in) :: datatype
1217 TYPE(xt_config),
INTENT(in) :: config
1219 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
1220 IF (num_src_ext < 0_i4 .OR. num_src_ext > huge(1_c_int) &
1221 .OR. num_dst_ext < 0_i4 .OR. num_dst_ext > huge(1_c_int)) &
1222 CALL xt_abort(
"invalid number of extents", filename, __line__)
1223 num_src_ext_c = int(num_src_ext, c_int)
1224 num_dst_ext_c = int(num_dst_ext, c_int)
1226 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype, &
1228 END FUNCTION xt_redist_p2p_ext_new_i4_a1d_i4_a1d_cfg
1230 FUNCTION xt_redist_p2p_ext_new_i8_a1d_i8_a1d(xmap, num_src_ext, src_extents, &
1231 num_dst_ext, dst_extents, datatype)
RESULT(redist)
1232 TYPE(xt_xmap),
INTENT(in) :: xmap
1233 INTEGER(i8),
INTENT(in) :: num_src_ext, num_dst_ext
1234 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
1235 dst_extents(num_dst_ext)
1236 INTEGER,
INTENT(in) :: datatype
1238 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
1239 IF (num_src_ext < 0_i8 .OR. num_src_ext > huge(1_c_int) &
1240 .OR. num_dst_ext < 0_i8 .OR. num_dst_ext > huge(1_c_int)) &
1241 CALL xt_abort(
"invalid number of extents", filename, __line__)
1242 num_src_ext_c = int(num_src_ext, c_int)
1243 num_dst_ext_c = int(num_dst_ext, c_int)
1245 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
1246 END FUNCTION xt_redist_p2p_ext_new_i8_a1d_i8_a1d
1248 FUNCTION xt_redist_p2p_ext_new_i8_a1d_i8_a1d_cfg(xmap, num_src_ext, &
1249 src_extents, num_dst_ext, dst_extents, datatype, config)
RESULT(redist)
1250 TYPE(xt_xmap),
INTENT(in) :: xmap
1251 INTEGER(i8),
INTENT(in) :: num_src_ext, num_dst_ext
1252 TYPE(
xt_offset_ext),
INTENT(in) :: src_extents(num_src_ext), &
1253 dst_extents(num_dst_ext)
1254 INTEGER,
INTENT(in) :: datatype
1255 TYPE(xt_config),
INTENT(in) :: config
1257 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
1258 IF (num_src_ext < 0_i8 .OR. num_src_ext > huge(1_c_int) &
1259 .OR. num_dst_ext < 0_i8 .OR. num_dst_ext > huge(1_c_int)) &
1260 CALL xt_abort(
"invalid number of extents", filename, __line__)
1261 num_src_ext_c = int(num_src_ext, c_int)
1262 num_dst_ext_c = int(num_dst_ext, c_int)
1264 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype, &
1266 END FUNCTION xt_redist_p2p_ext_new_i8_a1d_i8_a1d_cfg
1268 FUNCTION xt_redist_p2p_ext_new_a1d_a1d(xmap, src_extents, dst_extents, &
1269 datatype)
RESULT(redist)
1270 TYPE(xt_xmap),
INTENT(in) :: xmap
1273 INTEGER,
INTENT(in) :: datatype
1275 INTEGER :: num_src_ext, num_dst_ext
1276 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
1277 num_src_ext =
SIZE(src_extents)
1278 num_dst_ext =
SIZE(dst_extents)
1279 IF (num_src_ext > huge(1_c_int) .OR. num_dst_ext > huge(1_c_int)) &
1280 CALL xt_abort(
"invalid number of extents", filename, __line__)
1281 num_src_ext_c = int(num_src_ext, c_int)
1282 num_dst_ext_c = int(num_dst_ext, c_int)
1284 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
1285 END FUNCTION xt_redist_p2p_ext_new_a1d_a1d
1287 FUNCTION xt_redist_p2p_ext_new_a1d_a1d_cfg(xmap, src_extents, dst_extents, &
1288 datatype, config)
RESULT(redist)
1289 TYPE(xt_xmap),
INTENT(in) :: xmap
1292 INTEGER,
INTENT(in) :: datatype
1293 TYPE(xt_config),
INTENT(in) :: config
1295 INTEGER :: num_src_ext, num_dst_ext
1296 INTEGER(c_int) :: num_src_ext_c, num_dst_ext_c
1297 num_src_ext =
SIZE(src_extents)
1298 num_dst_ext =
SIZE(dst_extents)
1299 IF (num_src_ext > huge(1_c_int) .OR. num_dst_ext > huge(1_c_int)) &
1300 CALL xt_abort(
"invalid number of extents", filename, __line__)
1301 num_src_ext_c = int(num_src_ext, c_int)
1302 num_dst_ext_c = int(num_dst_ext, c_int)
1304 num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype, &
1306 END FUNCTION xt_redist_p2p_ext_new_a1d_a1d_cfg
1308 FUNCTION xt_redist_single_array_base_new_i2_a1d_i2_a1d( &
1309 nsend, nrecv, send_msgs, recv_msgs, comm)
RESULT(redist)
1310 INTEGER(i2),
INTENT(in) :: nsend, nrecv
1312 send_msgs(nsend), recv_msgs(nrecv)
1313 INTEGER,
INTENT(in) :: comm
1316 INTEGER(c_int) :: nsend_c, nrecv_c
1317 TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1319 IF (nsend < 0_i2 .OR. nsend > huge(1_c_int) &
1320 .OR. nrecv < 0_i2 .OR. nrecv > huge(1_c_int)) &
1321 CALL xt_abort(
"invalid number of send messages", filename, __line__)
1322 IF (nsend > 0_i2)
THEN
1323 send_msgs_p = c_loc(send_msgs)
1325 send_msgs_p = c_null_ptr
1327 IF (nrecv > 0_i2)
THEN
1328 recv_msgs_p = c_loc(recv_msgs)
1330 recv_msgs_p = c_null_ptr
1332 nsend_c = int(nsend, c_int)
1333 nrecv_c = int(nrecv, c_int)
1335 nsend_c, nrecv_c, send_msgs_p, recv_msgs_p, comm))
1336 END FUNCTION xt_redist_single_array_base_new_i2_a1d_i2_a1d
1338 FUNCTION xt_redist_single_array_base_new_i2_a1d_i2_a1d_cfg( &
1339 nsend, nrecv, send_msgs, recv_msgs, comm, config)
RESULT(redist)
1340 INTEGER(i2),
INTENT(in) :: nsend, nrecv
1342 send_msgs(nsend), recv_msgs(nrecv)
1343 INTEGER,
INTENT(in) :: comm
1344 TYPE(xt_config),
INTENT(in) :: config
1347 INTEGER(c_int) :: nsend_c, nrecv_c
1348 TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1350 IF (nsend < 0_i2 .OR. nsend > huge(1_c_int) &
1351 .OR. nrecv < 0_i2 .OR. nrecv > huge(1_c_int)) &
1352 CALL xt_abort(
"invalid number of send messages", filename, __line__)
1353 IF (nsend > 0_i2)
THEN
1354 send_msgs_p = c_loc(send_msgs)
1356 send_msgs_p = c_null_ptr
1358 IF (nrecv > 0_i2)
THEN
1359 recv_msgs_p = c_loc(recv_msgs)
1361 recv_msgs_p = c_null_ptr
1363 nsend_c = int(nsend, c_int)
1364 nrecv_c = int(nrecv, c_int)
1366 nsend_c, nrecv_c, send_msgs_p, recv_msgs_p, comm, config))
1367 END FUNCTION xt_redist_single_array_base_new_i2_a1d_i2_a1d_cfg
1369 FUNCTION xt_redist_single_array_base_new_i4_a1d_i4_a1d( &
1370 nsend, nrecv, send_msgs, recv_msgs, comm)
RESULT(redist)
1371 INTEGER(i4),
INTENT(in) :: nsend, nrecv
1373 send_msgs(nsend), recv_msgs(nrecv)
1374 INTEGER,
INTENT(in) :: comm
1377 INTEGER(c_int) :: nsend_c, nrecv_c
1378 TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1380 IF (nsend < 0_i4 .OR. nsend > huge(1_c_int) &
1381 .OR. nrecv < 0_i4 .OR. nrecv > huge(1_c_int)) &
1382 CALL xt_abort(
"invalid number of send messages", filename, __line__)
1383 IF (nsend > 0_i4)
THEN
1384 send_msgs_p = c_loc(send_msgs)
1386 send_msgs_p = c_null_ptr
1388 IF (nrecv > 0_i4)
THEN
1389 recv_msgs_p = c_loc(recv_msgs)
1391 recv_msgs_p = c_null_ptr
1393 nsend_c = int(nsend, c_int)
1394 nrecv_c = int(nrecv, c_int)
1396 nsend_c, nrecv_c, send_msgs_p, recv_msgs_p, comm))
1397 END FUNCTION xt_redist_single_array_base_new_i4_a1d_i4_a1d
1399 FUNCTION xt_redist_single_array_base_new_i4_a1d_i4_a1d_cfg( &
1400 nsend, nrecv, send_msgs, recv_msgs, comm, config)
RESULT(redist)
1401 INTEGER(i4),
INTENT(in) :: nsend, nrecv
1403 send_msgs(nsend), recv_msgs(nrecv)
1404 INTEGER,
INTENT(in) :: comm
1405 TYPE(xt_config),
INTENT(in) :: config
1408 INTEGER(c_int) :: nsend_c, nrecv_c
1409 TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1411 IF (nsend < 0_i4 .OR. nsend > huge(1_c_int) &
1412 .OR. nrecv < 0_i4 .OR. nrecv > huge(1_c_int)) &
1413 CALL xt_abort(
"invalid number of send messages", filename, __line__)
1414 IF (nsend > 0_i4)
THEN
1415 send_msgs_p = c_loc(send_msgs)
1417 send_msgs_p = c_null_ptr
1419 IF (nrecv > 0_i4)
THEN
1420 recv_msgs_p = c_loc(recv_msgs)
1422 recv_msgs_p = c_null_ptr
1424 nsend_c = int(nsend, c_int)
1425 nrecv_c = int(nrecv, c_int)
1427 nsend_c, nrecv_c, send_msgs_p, recv_msgs_p, comm, config))
1428 END FUNCTION xt_redist_single_array_base_new_i4_a1d_i4_a1d_cfg
1430 FUNCTION xt_redist_single_array_base_new_i8_a1d_i8_a1d( &
1431 nsend, nrecv, send_msgs, recv_msgs, comm)
RESULT(redist)
1432 INTEGER(i8),
INTENT(in) :: nsend, nrecv
1434 send_msgs(nsend), recv_msgs(nrecv)
1435 INTEGER,
INTENT(in) :: comm
1438 INTEGER(c_int) :: nsend_c, nrecv_c
1439 TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1441 IF (nsend < 0_i8 .OR. nsend > huge(1_c_int) &
1442 .OR. nrecv < 0_i8 .OR. nrecv > huge(1_c_int)) &
1443 CALL xt_abort(
"invalid number of send messages", filename, __line__)
1444 IF (nsend > 0_i8)
THEN
1445 send_msgs_p = c_loc(send_msgs)
1447 send_msgs_p = c_null_ptr
1449 IF (nrecv > 0_i8)
THEN
1450 recv_msgs_p = c_loc(recv_msgs)
1452 recv_msgs_p = c_null_ptr
1454 nsend_c = int(nsend, c_int)
1455 nrecv_c = int(nrecv, c_int)
1457 nsend_c, nrecv_c, send_msgs_p, recv_msgs_p, comm))
1458 END FUNCTION xt_redist_single_array_base_new_i8_a1d_i8_a1d
1460 FUNCTION xt_redist_single_array_base_new_i8_a1d_i8_a1d_cfg( &
1461 nsend, nrecv, send_msgs, recv_msgs, comm, config)
RESULT(redist)
1462 INTEGER(i8),
INTENT(in) :: nsend, nrecv
1464 send_msgs(nsend), recv_msgs(nrecv)
1465 INTEGER,
INTENT(in) :: comm
1466 TYPE(xt_config),
INTENT(in) :: config
1469 INTEGER(c_int) :: nsend_c, nrecv_c
1470 TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1472 IF (nsend < 0_i8 .OR. nsend > huge(1_c_int) &
1473 .OR. nrecv < 0_i8 .OR. nrecv > huge(1_c_int)) &
1474 CALL xt_abort(
"invalid number of send messages", filename, __line__)
1475 IF (nsend > 0_i8)
THEN
1476 send_msgs_p = c_loc(send_msgs)
1478 send_msgs_p = c_null_ptr
1480 IF (nrecv > 0_i8)
THEN
1481 recv_msgs_p = c_loc(recv_msgs)
1483 recv_msgs_p = c_null_ptr
1485 nsend_c = int(nsend, c_int)
1486 nrecv_c = int(nrecv, c_int)
1488 nsend_c, nrecv_c, send_msgs_p, recv_msgs_p, comm, config))
1489 END FUNCTION xt_redist_single_array_base_new_i8_a1d_i8_a1d_cfg
1491 FUNCTION xt_redist_single_array_base_new_a1d_a1d(send_msgs, recv_msgs, comm) &
1493 TYPE(
xt_redist_msg),
TARGET,
INTENT(in) :: send_msgs(:), recv_msgs(:)
1494 INTEGER,
INTENT(in) :: comm
1497 INTEGER :: nsend, nrecv
1498 INTEGER(c_int) :: nsend_c, nrecv_c
1499 TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1500 TYPE(
xt_redist_msg),
ALLOCATABLE,
TARGET :: send_msgs_a(:), recv_msgs_a(:)
1502 nsend =
SIZE(send_msgs)
1503 nrecv =
SIZE(recv_msgs)
1505 CALL msgs_p_arg(send_msgs, send_msgs_a, send_msgs_p)
1506 CALL msgs_p_arg(recv_msgs, recv_msgs_a, recv_msgs_p)
1508 IF (nsend < 0 .OR. nsend > huge(1_c_int) &
1509 .OR. nrecv < 0 .OR. nrecv > huge(1_c_int)) &
1510 CALL xt_abort(
"invalid number of send messages", filename, __line__)
1511 nsend_c = int(nsend, c_int)
1512 nrecv_c = int(nrecv, c_int)
1514 nsend_c, nrecv_c, send_msgs_p, recv_msgs_p, comm))
1515 END FUNCTION xt_redist_single_array_base_new_a1d_a1d
1517 FUNCTION xt_redist_single_array_base_new_a1d_a1d_cfg(send_msgs, recv_msgs, &
1518 comm, config)
RESULT(redist)
1519 TYPE(
xt_redist_msg),
TARGET,
INTENT(in) :: send_msgs(:), recv_msgs(:)
1520 INTEGER,
INTENT(in) :: comm
1521 TYPE(xt_config),
INTENT(in) :: config
1524 INTEGER :: nsend, nrecv
1525 INTEGER(c_int) :: nsend_c, nrecv_c
1526 TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1527 TYPE(
xt_redist_msg),
ALLOCATABLE,
TARGET :: send_msgs_a(:), recv_msgs_a(:)
1529 nsend =
SIZE(send_msgs)
1530 nrecv =
SIZE(recv_msgs)
1532 CALL msgs_p_arg(send_msgs, send_msgs_a, send_msgs_p)
1533 CALL msgs_p_arg(recv_msgs, recv_msgs_a, recv_msgs_p)
1535 IF (nsend < 0 .OR. nsend > huge(1_c_int) &
1536 .OR. nrecv < 0 .OR. nrecv > huge(1_c_int)) &
1537 CALL xt_abort(
"invalid number of send messages", filename, __line__)
1538 nsend_c = int(nsend, c_int)
1539 nrecv_c = int(nrecv, c_int)
1541 nsend_c, nrecv_c, send_msgs_p, recv_msgs_p, comm, config))
1542 END FUNCTION xt_redist_single_array_base_new_a1d_a1d_cfg
1544 SUBROUTINE msgs_p_arg(msgs, msgs_a, msgs_p)
1546 TYPE(
xt_redist_msg),
TARGET,
ALLOCATABLE,
INTENT(inout) :: msgs_a(:)
1547 TYPE(c_ptr),
INTENT(out) :: msgs_p
1549 INTEGER :: msgs_size
1550 LOGICAL :: msgs_is_contiguous
1551 #ifndef HAVE_FC_IS_CONTIGUOUS
1554 bind(c, name=
'xt_redist_msg_contiguous')
1562 msgs_size =
SIZE(msgs)
1563 IF (msgs_size > huge(1_c_int)) &
1564 CALL xt_abort(
'invalid size', filename, __line__)
1565 IF (msgs_size > 0)
THEN
1566 IF (msgs_size > 1)
THEN
1567 #ifdef HAVE_FC_IS_CONTIGUOUS
1568 msgs_is_contiguous = is_contiguous(msgs)
1572 IF (msgs_is_contiguous)
THEN
1573 xt_slice_c_loc(msgs(1), msgs_p)
1575 ALLOCATE(msgs_a(msgs_size))
1577 msgs_p = c_loc(msgs_a)
1580 xt_slice_c_loc(msgs(1), msgs_p)
1585 END SUBROUTINE msgs_p_arg
1595 MODULE PROCEDURE xt_redist_p2p_orig_new
integer, parameter, public i8
integer, parameter, public i4
integer, parameter, public i2
integer, parameter mpi_address_kind
type(xt_redist) function, public xt_redist_c2f(redist)
subroutine, public xt_request_init(request, cptr)
void xt_redist_delete(Xt_redist redist)
int xt_redist_get_num_recv_msg(Xt_redist redist)
int xt_redist_get_num_send_msg(Xt_redist redist)
void xt_redist_a_exchange1(Xt_redist redist, const void *src_data, void *dst_data, Xt_request *request)
Xt_redist xt_redist_copy(Xt_redist redist)
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)
Xt_redist xt_redist_collection_new(Xt_redist *redists, int num_redists, int cache_size, MPI_Comm comm)
Xt_redist xt_redist_collection_custom_new(Xt_redist *redists, int num_redists, int cache_size, MPI_Comm comm, Xt_config config)
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)
Xt_redist xt_redist_collection_static_custom_new(Xt_redist *redists, int num_redists, const MPI_Aint src_displacements[num_redists], const MPI_Aint dst_displacements[num_redists], MPI_Comm comm, Xt_config config)
Xt_redist xt_redist_p2p_custom_new(Xt_xmap xmap, MPI_Datatype datatype, Xt_config config)
Xt_redist xt_redist_p2p_off_new(Xt_xmap xmap, const int *src_offsets, const int *dst_offsets, MPI_Datatype datatype)
Xt_redist xt_redist_p2p_blocks_custom_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, Xt_config config)
Xt_redist xt_redist_p2p_new(Xt_xmap xmap, MPI_Datatype datatype)
Xt_redist xt_redist_p2p_off_custom_new(Xt_xmap xmap, const int *src_offsets, const int *dst_offsets, MPI_Datatype datatype, Xt_config config)
Xt_redist xt_redist_p2p_blocks_off_custom_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_config config)
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_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_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)
Xt_redist xt_redist_p2p_ext_custom_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_config config)
Xt_redist xt_redist_repeat_custom_new(Xt_redist redist, MPI_Aint src_extent, MPI_Aint dst_extent, int num_repetitions, const int displacements[num_repetitions], Xt_config config)
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])
Xt_redist xt_redist_single_array_base_new(int nsend, int nrecv, const struct Xt_redist_msg send_msgs[], const struct Xt_redist_msg recv_msgs[], MPI_Comm comm)
Xt_redist xt_redist_single_array_base_custom_new(int nsend, int nrecv, const struct Xt_redist_msg send_msgs[], const struct Xt_redist_msg recv_msgs[], MPI_Comm comm, Xt_config config)
void * xt_redist_single_array_base_new_c2f(int nsend, int nrecv, const struct xt_redist_msg_f *send_msgs_f, const struct xt_redist_msg_f *recv_msgs_f, MPI_Fint comm_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_collection_static_custom_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Aint *src_displacements, MPI_Aint *dst_displacements, MPI_Fint comm_f, struct xt_config_f *config)
Xt_redist xt_redist_p2p_off_custom_new_f(struct xt_xmap_f *xmap_f, MPI_Fint *src_offsets, MPI_Fint *dst_offsets, MPI_Fint datatype_f, struct xt_config_f *config)
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_p2p_blocks_custom_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, struct xt_config_f *config)
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_p2p_blocks_off_custom_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, struct xt_config_f *config)
Xt_redist xt_redist_p2p_custom_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f, struct xt_config_f *config)
Xt_redist xt_redist_p2p_ext_custom_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, struct xt_config_f *config)
Xt_redist xt_redist_collection_custom_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Fint cache_size, MPI_Fint comm_f, struct xt_config_f *config)
Xt_redist xt_redist_p2p_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f)
Xt_redist 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_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_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Fint cache_size, MPI_Fint comm_f)
void * xt_redist_single_array_base_custom_new_c2f(int nsend, int nrecv, const struct xt_redist_msg_f *send_msgs_f, const struct xt_redist_msg_f *recv_msgs_f, MPI_Fint comm_f, struct xt_config_f *config)
int xt_redist_msg_contiguous(const struct xt_redist_msg_f *p_msgs_a, const struct xt_redist_msg_f *p_msgs_b)
Xt_config xt_config_f2c(struct xt_config_f *p)