Yet Another eXchange Tool  0.9.0
xt_redist_f.f90
Go to the documentation of this file.
1 
13 
14 !
15 ! Keywords:
16 ! Maintainer: Jörg Behrens <behrens@dkrz.de>
17 ! Moritz Hanke <hanke@dkrz.de>
18 ! Thomas Jahns <jahns@dkrz.de>
19 ! URL: https://doc.redmine.dkrz.de/yaxt/html/
20 !
21 ! Redistribution and use in source and binary forms, with or without
22 ! modification, are permitted provided that the following conditions are
23 ! met:
24 !
25 ! Redistributions of source code must retain the above copyright notice,
26 ! this list of conditions and the following disclaimer.
27 !
28 ! Redistributions in binary form must reproduce the above copyright
29 ! notice, this list of conditions and the following disclaimer in the
30 ! documentation and/or other materials provided with the distribution.
31 !
32 ! Neither the name of the DKRZ GmbH nor the names of its contributors
33 ! may be used to endorse or promote products derived from this software
34 ! without specific prior written permission.
35 !
36 ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
37 ! IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
38 ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
39 ! PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
40 ! OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
41 ! EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
42 ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
43 ! PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
44 ! LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
45 ! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
46 ! SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
47 !
48 
54 
56  USE xt_core, ONLY: xt_abort, xt_mpi_fint_kind, i2, i4, i8
58  USE xt_xmap_abstract, ONLY: xt_xmap
59  USE iso_c_binding, ONLY: c_int, c_null_ptr, c_ptr, c_loc, c_associated
60  USE xt_mpi, ONLY: mpi_address_kind
61  USE xt_requests, ONLY: xt_request, xt_request_init, xt_is_null
62 #include "xt_slice_c_loc.inc"
63  IMPLICIT NONE
64  PRIVATE
65  ! note: this type must not be extended to contain any other
66  ! components, its memory pattern has to match void * exactly, which
67  ! it does because of C constraints
68  TYPE, BIND(C), PUBLIC :: xt_redist
69 #ifndef __G95__
70  PRIVATE
71 #endif
72  TYPE(c_ptr) :: cptr = c_null_ptr
73  END TYPE xt_redist
74 
75  TYPE, BIND(c), PUBLIC :: xt_offset_ext
76  INTEGER(c_int) :: start, size, stride
77  END TYPE xt_offset_ext
78 
79  TYPE, BIND(c), PUBLIC :: xt_redist_msg
80  INTEGER(xt_mpi_fint_kind) :: rank, datatype
81  END TYPE xt_redist_msg
82 
83  INTERFACE
84  ! this function must not be implemented in Fortran because
85  ! PGI 11.x chokes on that
86  FUNCTION xt_redist_f2c(redist) bind(c, name='xt_redist_f2c') RESULT(p)
87  IMPORT :: c_ptr, xt_redist
88  IMPLICIT NONE
89  TYPE(xt_redist), INTENT(in) :: redist
90  TYPE(c_ptr) :: p
91  END FUNCTION xt_redist_f2c
92  END INTERFACE
93 
94  INTERFACE xt_redist_delete
95  MODULE PROCEDURE xt_redist_delete_1
96  MODULE PROCEDURE xt_redist_delete_a1d
97  END INTERFACE xt_redist_delete
98 
99  INTERFACE
100  SUBROUTINE xt_redist_delete_c(redist) &
101  bind(c, name='xt_redist_delete')
102  IMPORT :: c_ptr
103  IMPLICIT NONE
104  TYPE(c_ptr), VALUE, INTENT(in) :: redist
105  END SUBROUTINE xt_redist_delete_c
106  END INTERFACE
107 
108  INTERFACE xt_is_null
109  MODULE PROCEDURE xt_redist_is_null
110  END INTERFACE xt_is_null
111 
112  INTERFACE xt_redist_s_exchange
113  MODULE PROCEDURE xt_redist_s_exchange1
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
118  END INTERFACE xt_redist_s_exchange
119 
120  INTERFACE xt_redist_a_exchange
121  MODULE PROCEDURE xt_redist_a_exchange1
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
126  END INTERFACE xt_redist_a_exchange
127 
128 
129  INTERFACE
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
137 
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
146 
147  FUNCTION xt_redist_get_mpi_comm(redist) &
148  bind(c, name='xt_redist_get_mpi_comm_c2f') result(comm)
149  IMPORT :: xt_redist, xt_mpi_fint_kind
150  TYPE(xt_redist), INTENT(in) :: redist
151  INTEGER(xt_mpi_fint_kind) :: comm
152  END FUNCTION xt_redist_get_mpi_comm
153 
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
157  IMPLICIT NONE
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
161 
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
165  IMPLICIT NONE
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
169 
170  FUNCTION xt_redist_get_recv_mpi_datatype(redist, rank) &
171  bind(c, name='xt_redist_get_recv_MPI_Datatype_c2f') result(dt)
172  IMPORT :: xt_redist, xt_mpi_fint_kind
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
177 
178  FUNCTION xt_redist_get_send_mpi_datatype(redist, rank) &
179  bind(c, name='xt_redist_get_send_MPI_Datatype_c2f') result(dt)
180  IMPORT :: xt_redist, xt_mpi_fint_kind
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
185 
186  FUNCTION xt_redist_collection_static_new_f(redists_f, num_redists, &
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
190  IMPLICIT NONE
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(*), &
194  dst_displacements(*)
195  INTEGER(xt_mpi_fint_kind), VALUE, INTENT(in) :: comm_f
196  TYPE(c_ptr) :: res
198 
199  FUNCTION xt_redist_collection_static_custom_new_f(redists_f, num_redists, &
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
203  IMPLICIT NONE
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(*), &
207  dst_displacements(*)
208  INTEGER(xt_mpi_fint_kind), VALUE, INTENT(in) :: comm_f
209  TYPE(xt_config), INTENT(in) :: config
210  TYPE(c_ptr) :: res
212 
213  FUNCTION xt_redist_collection_new_f(redists_f, num_redists, cache_size, &
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
216  IMPLICIT NONE
217  TYPE(xt_redist), INTENT(in) :: redists_f(*)
218  INTEGER(xt_mpi_fint_kind), VALUE, INTENT(in) :: &
219  num_redists, cache_size, comm_f
220  TYPE(c_ptr) :: res
221  END FUNCTION xt_redist_collection_new_f
222 
223  FUNCTION xt_redist_collection_custom_new_f(redists_f, num_redists, &
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
227  IMPLICIT NONE
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
232  TYPE(c_ptr) :: res
234 
235  FUNCTION xt_redist_p2p_ext_new_c2f(xmap, num_src_ext, src_extents, &
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
245  END FUNCTION xt_redist_p2p_ext_new_c2f
246 
247  FUNCTION xt_redist_p2p_ext_custom_new_c2f(xmap, num_src_ext, src_extents, &
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, &
251  xt_config
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
260 
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
265  IMPLICIT NONE
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(*)
270  TYPE(c_ptr) :: res
271  END FUNCTION xt_redist_repeat_new_c
272 
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
277  IMPLICIT NONE
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
283  TYPE(c_ptr) :: res
284  END FUNCTION xt_redist_repeat_custom_new_c
285 
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
290  IMPLICIT NONE
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(*)
295  TYPE(c_ptr) :: res
296  END FUNCTION xt_redist_repeat_asym_new_c
297 
298  FUNCTION xt_redist_repeat_asym_custom_new_c(redist_f, src_extent, &
299  dst_extent, num_repetitions, src_displacements, dst_displacements, &
300  config) &
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
303  IMPLICIT NONE
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
309  TYPE(c_ptr) :: res
310  END FUNCTION xt_redist_repeat_asym_custom_new_c
311 
312  FUNCTION xt_redist_single_array_base_new_c2f(nsend, nrecv, send_msgs_f, &
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
316  IMPLICIT NONE
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
320  TYPE(c_ptr) :: res
322 
323  FUNCTION xt_redist_single_array_base_custom_new_c2f(nsend, nrecv, &
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
327  IMPLICIT NONE
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
332  TYPE(c_ptr) :: res
334 
335  END INTERFACE
336 
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
342  END INTERFACE xt_redist_collection_static_new
343 
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
348 
349  INTERFACE xt_redist_collection_new
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
356  END INTERFACE xt_redist_collection_new
357 
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
362  END INTERFACE xt_redist_collection_custom_new
363 
364  INTERFACE xt_redist_p2p_ext_new
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
373  END INTERFACE xt_redist_p2p_ext_new
374 
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
380  END INTERFACE xt_redist_p2p_ext_custom_new
381 
382  INTERFACE xt_redist_repeat_new
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
391  END INTERFACE xt_redist_repeat_new
392 
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
398  END INTERFACE xt_redist_repeat_custom_new
399 
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
409  END INTERFACE xt_redist_single_array_base_new
410 
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
417 
418  PUBLIC :: xt_redist_c2f, xt_redist_f2c, xt_is_null, xt_redist_copy, &
423  xt_redist_get_mpi_comm, xt_redist_p2p_ext_new, &
426  xt_redist_get_send_mpi_datatype, xt_redist_get_recv_mpi_datatype, &
432  CHARACTER(len=*), PARAMETER :: filename = 'xt_redist_f.f90'
433 CONTAINS
434 
435  FUNCTION xt_redist_is_null(redist) RESULT(p)
436  TYPE(xt_redist), INTENT(in) :: redist
437  LOGICAL :: p
438  p = .NOT. c_associated(redist%cptr)
439  END FUNCTION xt_redist_is_null
440 
441  FUNCTION xt_redist_c2f(redist) RESULT(p)
442  TYPE(c_ptr), INTENT(in) :: redist
443  TYPE(xt_redist) :: p
444  p%cptr = redist
445  END FUNCTION xt_redist_c2f
446 
447  FUNCTION xt_redist_copy(redist) RESULT(redist_copy)
448  TYPE(xt_redist), INTENT(in) :: redist
449  TYPE(xt_redist) :: redist_copy
450  INTERFACE
451  FUNCTION xt_redist_copy_c(redist) bind(C, name='xt_redist_copy')
452  import:: c_ptr
453  TYPE(c_ptr), VALUE, INTENT(in) :: redist
454  TYPE(c_ptr) :: xt_redist_copy_c
455  END FUNCTION xt_redist_copy_c
456  END INTERFACE
457  redist_copy%cptr = xt_redist_copy_c(redist%cptr)
458  END FUNCTION xt_redist_copy
459 
460  SUBROUTINE xt_redist_delete_1(redist)
461  TYPE(xt_redist), INTENT(inout) :: redist
462  CALL xt_redist_delete_c(redist%cptr)
463  redist%cptr = c_null_ptr
464  END SUBROUTINE xt_redist_delete_1
465 
466  SUBROUTINE xt_redist_delete_a1d(redists)
467  TYPE(xt_redist), INTENT(inout) :: redists(:)
468  INTEGER :: i, n
469  n = SIZE(redists)
470  DO i = 1, n
471  CALL xt_redist_delete_c(redists(i)%cptr)
472  redists(i)%cptr = c_null_ptr
473  END DO
474  END SUBROUTINE xt_redist_delete_a1d
475 
476  FUNCTION xt_redist_get_num_send_msg(redist) RESULT(num_send_msg)
477  TYPE(xt_redist), INTENT(in) :: redist
478  INTEGER :: num_send_msg
479  INTEGER(c_int) :: n
480  n = xt_redist_get_num_send_msg_c(xt_redist_f2c(redist))
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)
484  END FUNCTION xt_redist_get_num_send_msg
485 
486  FUNCTION xt_redist_get_num_recv_msg(redist) RESULT(num_recv_msg)
487  TYPE(xt_redist), INTENT(in) :: redist
488  INTEGER :: num_recv_msg
489  INTEGER(c_int) :: n
490  n = xt_redist_get_num_recv_msg_c(xt_redist_f2c(redist))
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)
494  END FUNCTION xt_redist_get_num_recv_msg
495 
496  SUBROUTINE xt_redist_s_exchange1(redist, src_data_cptr, dst_data_cptr)
497  TYPE(xt_redist), INTENT(in) :: redist
498  TYPE(c_ptr), INTENT(in) :: src_data_cptr, dst_data_cptr
499  INTERFACE
500  SUBROUTINE xt_redist_s_exchange1_c(redist, src_data_cptr, dst_data_cptr) &
501  bind(c, name='xt_redist_s_exchange1')
502  import:: c_ptr
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
506  END INTERFACE
507  CALL xt_redist_s_exchange1_c(xt_redist_f2c(redist), src_data_cptr, &
508  dst_data_cptr)
509  END SUBROUTINE xt_redist_s_exchange1
510 
511  SUBROUTINE xt_redist_a_exchange1(redist, src_data_cptr, dst_data_cptr, &
512  request)
513  TYPE(xt_redist), INTENT(in) :: redist
514  TYPE(c_ptr) :: src_data_cptr, dst_data_cptr
515  TYPE(xt_request), INTENT(out) :: request
516  INTERFACE
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
524  END INTERFACE
525  CALL xt_redist_a_exchange1_c(xt_redist_f2c(redist), src_data_cptr, &
526  & dst_data_cptr, request)
527  END SUBROUTINE xt_redist_a_exchange1
528 
529  SUBROUTINE xt_redist_s_exchange_a1d(redist, src_data_cptr, dst_data_cptr)
530  TYPE(xt_redist), INTENT(in) :: redist
531  TYPE(c_ptr), INTENT(in) :: src_data_cptr(:), dst_data_cptr(:)
532  INTEGER :: n
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
541 
542  SUBROUTINE xt_redist_a_exchange_a1d(redist, src_data_cptr, dst_data_cptr, &
543  request)
544  TYPE(xt_redist), INTENT(in) :: redist
545  TYPE(c_ptr), INTENT(in) :: src_data_cptr(:), dst_data_cptr(:)
546  TYPE(xt_request), INTENT(out) :: request
547  INTEGER :: num_ptr
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
556 
557  SUBROUTINE xt_redist_s_exchange_i2_a1d(redist, num_ptr, &
558  src_data_cptr, dst_data_cptr)
559  TYPE(xt_redist), INTENT(in) :: redist
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
569 
570  SUBROUTINE xt_redist_a_exchange_i2_a1d(redist, num_ptr, &
571  src_data_cptr, dst_data_cptr, request)
572  TYPE(xt_redist), INTENT(in) :: redist
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
583 
584  SUBROUTINE xt_redist_s_exchange_i4_a1d(redist, num_ptr, &
585  src_data_cptr, dst_data_cptr)
586  TYPE(xt_redist), INTENT(in) :: redist
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
596 
597  SUBROUTINE xt_redist_a_exchange_i4_a1d(redist, num_ptr, &
598  src_data_cptr, dst_data_cptr, request)
599  TYPE(xt_redist), INTENT(in) :: redist
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
610 
611  SUBROUTINE xt_redist_s_exchange_i8_a1d(redist, num_ptr, &
612  src_data_cptr, dst_data_cptr)
613  TYPE(xt_redist), INTENT(in) :: redist
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
623 
624  SUBROUTINE xt_redist_a_exchange_i8_a1d(redist, num_ptr, &
625  src_data_cptr, dst_data_cptr, request)
626  TYPE(xt_redist), INTENT(in) :: redist
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
637 
638  FUNCTION xt_redist_p2p_new(xmap, datatype) RESULT(res)
639  TYPE(xt_xmap), INTENT(in) :: xmap
640  INTEGER, INTENT(in) :: datatype
641  TYPE(xt_redist) :: res
642 
643  INTERFACE
644  FUNCTION xt_redist_p2p_new_f(xmap, 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
647  IMPLICIT NONE
648  TYPE(xt_xmap), INTENT(in) :: xmap
649  INTEGER(xt_mpi_fint_kind), VALUE, INTENT(in) :: datatype
650  TYPE(c_ptr) :: res_ptr
651  END FUNCTION xt_redist_p2p_new_f
652  END INTERFACE
653 
654  res = xt_redist_c2f(xt_redist_p2p_new_f(xmap, datatype))
655 
656  END FUNCTION xt_redist_p2p_new
657 
658  FUNCTION xt_redist_p2p_custom_new(xmap, datatype, config) RESULT(res)
659  TYPE(xt_xmap), INTENT(in) :: xmap
660  INTEGER, INTENT(in) :: datatype
661  TYPE(xt_config), INTENT(in) :: config
662  TYPE(xt_redist) :: res
663 
664  INTERFACE
665  FUNCTION xt_redist_p2p_custom_new_f(xmap, datatype, 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
668  IMPLICIT NONE
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
673  END FUNCTION xt_redist_p2p_custom_new_f
674  END INTERFACE
675 
676  res = xt_redist_c2f(xt_redist_p2p_custom_new_f(xmap, datatype, config))
677 
678  END FUNCTION xt_redist_p2p_custom_new
679 
680  FUNCTION xt_redist_p2p_off_new(xmap, src_offsets, dst_offsets, datatype) &
681  result(res)
682  IMPLICIT NONE
683  TYPE(xt_xmap), INTENT(in) :: xmap
684  INTEGER, INTENT(in) :: src_offsets(*)
685  INTEGER, INTENT(in) :: dst_offsets(*)
686  INTEGER, INTENT(in) :: datatype
687  TYPE(xt_redist) :: res
688 
689  INTERFACE
690  FUNCTION xt_redist_p2p_off_new_f(xmap, src_offsets, dst_offsets, &
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
693  IMPLICIT NONE
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
698  END FUNCTION xt_redist_p2p_off_new_f
699  END INTERFACE
700 
701  res = xt_redist_c2f(&
702  xt_redist_p2p_off_new_f(xmap, src_offsets, dst_offsets, datatype))
703 
704  END FUNCTION xt_redist_p2p_off_new
705 
706  FUNCTION xt_redist_p2p_off_custom_new(xmap, src_offsets, dst_offsets, &
707  datatype, config) RESULT(res)
708  IMPLICIT NONE
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
713  TYPE(xt_redist) :: res
714 
715  INTERFACE
716  FUNCTION xt_redist_p2p_off_custom_new_f(xmap, src_offsets, dst_offsets, &
717  datatype, config) bind(C, name='xt_redist_p2p_off_custom_new_f') &
718  result(res_ptr)
719  IMPORT :: xt_xmap, xt_redist, c_ptr, xt_mpi_fint_kind, xt_config
720  IMPLICIT NONE
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
726  END FUNCTION xt_redist_p2p_off_custom_new_f
727  END INTERFACE
728 
729  res = xt_redist_c2f(&
730  xt_redist_p2p_off_custom_new_f(xmap, src_offsets, dst_offsets, &
731  datatype, config))
732 
733  END FUNCTION xt_redist_p2p_off_custom_new
734 
735  FUNCTION xt_redist_p2p_blocks_new(xmap, src_block_sizes, src_block_num, &
736  & dst_block_sizes, dst_block_num, &
737  & datatype) &
738  result(res)
739  IMPLICIT NONE
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
744  TYPE(xt_redist) :: res
745  INTERFACE
746  FUNCTION xt_redist_p2p_blocks_new_f(xmap, &
747  & src_block_sizes, src_block_num, &
748  & dst_block_sizes, dst_block_num, &
749  & datatype) &
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
752  IMPLICIT NONE
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
758  END FUNCTION xt_redist_p2p_blocks_new_f
759  END INTERFACE
760 
761  res = xt_redist_c2f(&
763  & src_block_sizes, src_block_num, &
764  & dst_block_sizes, dst_block_num, &
765  & datatype))
766  END FUNCTION xt_redist_p2p_blocks_new
767 
768  FUNCTION xt_redist_p2p_blocks_custom_new(xmap, src_block_sizes, &
769  & src_block_num, &
770  & dst_block_sizes, dst_block_num, &
771  & datatype, config) &
772  result(res)
773  IMPLICIT NONE
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
779  TYPE(xt_redist) :: res
780  INTERFACE
781  FUNCTION xt_redist_p2p_blocks_custom_new_f(xmap, &
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
787  IMPLICIT NONE
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
795  END INTERFACE
796 
797  res = xt_redist_c2f(&
799  & src_block_sizes, src_block_num, &
800  & dst_block_sizes, dst_block_num, &
801  & datatype, config))
803 
804  FUNCTION xt_redist_p2p_blocks_off_new(xmap, src_block_offsets, &
805  src_block_sizes, src_block_num, &
806  dst_block_offsets, dst_block_sizes, dst_block_num, &
807  datatype) RESULT(res)
808  IMPLICIT NONE
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
817  TYPE(xt_redist) :: res
818  INTERFACE
819  FUNCTION xt_redist_p2p_blocks_off_new_f(xmap, src_block_offsets, &
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') &
823  result(res_ptr)
824  IMPORT :: xt_xmap, xt_redist, xt_mpi_fint_kind, c_int, c_ptr
825  IMPLICIT NONE
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
832  END FUNCTION xt_redist_p2p_blocks_off_new_f
833  END INTERFACE
834 
835  res = xt_redist_c2f(&
836  xt_redist_p2p_blocks_off_new_f(xmap, src_block_offsets, &
837  src_block_sizes, src_block_num, &
838  dst_block_offsets, dst_block_sizes, dst_block_num, &
839  datatype))
840 
841  END FUNCTION xt_redist_p2p_blocks_off_new
842 
843  FUNCTION xt_redist_p2p_blocks_off_custom_new(xmap, src_block_offsets, &
844  src_block_sizes, src_block_num, &
845  dst_block_offsets, dst_block_sizes, dst_block_num, &
846  datatype, config) RESULT(res)
847  IMPLICIT NONE
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
854  TYPE(xt_redist) :: res
855  INTERFACE
856  FUNCTION xt_redist_p2p_blocks_off_custom_new_f(xmap, src_block_offsets, &
857  src_block_sizes, src_block_num, &
858  dst_block_offsets, dst_block_sizes, dst_block_num, &
859  datatype, config) &
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
862  IMPLICIT NONE
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
872  END INTERFACE
873 
874  res = xt_redist_c2f(&
875  xt_redist_p2p_blocks_off_custom_new_f(xmap, src_block_offsets, &
876  src_block_sizes, src_block_num, &
877  dst_block_offsets, dst_block_sizes, dst_block_num, &
878  datatype, config))
879 
881 
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(*), &
887  dst_displacements(*)
888  TYPE(xt_redist) :: res
889  INTEGER(c_int) :: num_redists_c
890 
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
895 
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(*), &
901  dst_displacements(*)
902  TYPE(xt_config), INTENT(in) :: config
903  TYPE(xt_redist) :: res
904  INTEGER(c_int) :: num_redists_c
905 
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
910 
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(:), &
916  dst_displacements(:)
917  TYPE(xt_redist) :: res
918  INTEGER :: num_redists
919  INTEGER(c_int) :: num_redists_c
920 
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
930 
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(:), &
936  dst_displacements(:)
937  TYPE(xt_config), INTENT(in) :: config
938  TYPE(xt_redist) :: res
939  INTEGER :: num_redists
940  INTEGER(c_int) :: num_redists_c
941 
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
951 
952  FUNCTION xt_redist_collection_new_a_3i(redists, num_redists, cache_size, &
953  comm) RESULT(res)
954  TYPE(xt_redist), INTENT(in) :: redists(*)
955  INTEGER, INTENT(in) :: num_redists, cache_size, comm
956  TYPE(xt_redist) :: res
957 
958  res = xt_redist_c2f(xt_redist_collection_new_f(redists, num_redists, &
959  cache_size, comm))
960  END FUNCTION xt_redist_collection_new_a_3i
961 
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
967  TYPE(xt_redist) :: res
968 
969  res = xt_redist_c2f(xt_redist_collection_custom_new_f(redists, num_redists,&
970  cache_size, comm, config))
971  END FUNCTION xt_redist_collection_new_a_3i_cfg
972 
973  FUNCTION xt_redist_collection_new_a_2i(redists, cache_size, comm) &
974  result(res)
975  TYPE(xt_redist), INTENT(in) :: redists(:)
976  INTEGER, INTENT(in) :: cache_size, comm
977  TYPE(xt_redist) :: res
978  INTEGER(c_int) :: num_redists_c
979 
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
984 
985  FUNCTION xt_redist_collection_new_a_2i_cfg(redists, cache_size, comm, &
986  config) RESULT(res)
987  TYPE(xt_redist), INTENT(in) :: redists(:)
988  INTEGER, INTENT(in) :: cache_size, comm
989  TYPE(xt_config), INTENT(in) :: config
990  TYPE(xt_redist) :: res
991  INTEGER(c_int) :: num_redists_c
992 
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
997 
998  FUNCTION xt_redist_collection_new_a_i(redists, comm) &
999  result(res)
1000  TYPE(xt_redist), INTENT(in) :: redists(:)
1001  INTEGER, INTENT(in) :: comm
1002  TYPE(xt_redist) :: res
1003 
1004  res = xt_redist_collection_new_a_3i(redists, SIZE(redists), -1, comm)
1005  END FUNCTION xt_redist_collection_new_a_i
1006 
1007  FUNCTION xt_redist_collection_new_a_i_cfg(redists, comm, config) &
1008  result(res)
1009  TYPE(xt_redist), INTENT(in) :: redists(:)
1010  INTEGER, INTENT(in) :: comm
1011  TYPE(xt_config), INTENT(in) :: config
1012  TYPE(xt_redist) :: res
1013 
1014  res = xt_redist_collection_new_a_3i_cfg(redists, SIZE(redists), &
1015  &-1, comm, config)
1016  END FUNCTION xt_redist_collection_new_a_i_cfg
1017 
1018 
1019  FUNCTION xt_redist_repeat_new_i4_a1d(redist, src_extent, dst_extent, &
1020  num_repetitions, displacements) RESULT(res)
1021  TYPE(xt_redist), INTENT(in) :: redist
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)
1025  TYPE(xt_redist) :: res
1026  INTEGER(c_int) :: num_repetitions_c
1027 
1028  num_repetitions_c = int(num_repetitions, c_int)
1029  res = xt_redist_c2f(xt_redist_repeat_new_c(xt_redist_f2c(redist), &
1030  src_extent, dst_extent, num_repetitions_c, displacements))
1031  END FUNCTION xt_redist_repeat_new_i4_a1d
1032 
1033  FUNCTION xt_redist_repeat_new_i4_a1d_cfg(redist, src_extent, dst_extent, &
1034  num_repetitions, displacements, config) RESULT(res)
1035  TYPE(xt_redist), INTENT(in) :: redist
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
1040  TYPE(xt_redist) :: res
1041  INTEGER(c_int) :: num_repetitions_c
1042 
1043  num_repetitions_c = int(num_repetitions, c_int)
1044  res = xt_redist_c2f(xt_redist_repeat_custom_new_c(xt_redist_f2c(redist), &
1045  src_extent, dst_extent, num_repetitions_c, displacements, &
1046  xt_config_f2c(config)))
1047  END FUNCTION xt_redist_repeat_new_i4_a1d_cfg
1048 
1049  FUNCTION xt_redist_repeat_new_a1d(redist, src_extent, dst_extent, &
1050  displacements) RESULT(res)
1051  TYPE(xt_redist), INTENT(in) :: redist
1052  INTEGER(mpi_address_kind), INTENT(in) :: src_extent, dst_extent
1053  INTEGER(c_int), INTENT(in) :: displacements(:)
1054  TYPE(xt_redist) :: res
1055 
1056  INTEGER(c_int) :: num_repetitions_c
1057 
1058  num_repetitions_c = int(SIZE(displacements), c_int)
1059  res = xt_redist_c2f(xt_redist_repeat_new_c(xt_redist_f2c(redist), &
1060  src_extent, dst_extent, num_repetitions_c, displacements))
1061  END FUNCTION xt_redist_repeat_new_a1d
1062 
1063  FUNCTION xt_redist_repeat_new_a1d_cfg(redist, src_extent, dst_extent, &
1064  displacements, config) RESULT(res)
1065  TYPE(xt_redist), INTENT(in) :: redist
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
1069  TYPE(xt_redist) :: res
1070 
1071  INTEGER(c_int) :: num_repetitions_c
1072 
1073  num_repetitions_c = int(SIZE(displacements), c_int)
1074  res = xt_redist_c2f(xt_redist_repeat_custom_new_c(xt_redist_f2c(redist), &
1075  src_extent, dst_extent, num_repetitions_c, displacements, &
1076  xt_config_f2c(config)))
1077  END FUNCTION xt_redist_repeat_new_a1d_cfg
1078 
1079  FUNCTION xt_redist_repeat_asym_new_i4_a1d(redist, src_extent, dst_extent, &
1080  num_repetitions, src_displacements, dst_displacements) RESULT(res)
1081  TYPE(xt_redist), INTENT(in) :: redist
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)
1086  TYPE(xt_redist) :: res
1087  INTEGER(c_int) :: num_repetitions_c
1088 
1089  num_repetitions_c = int(num_repetitions, c_int)
1090  res = xt_redist_c2f(xt_redist_repeat_asym_new_c(xt_redist_f2c(redist), &
1091  src_extent, dst_extent, num_repetitions_c, src_displacements, &
1092  dst_displacements))
1093  END FUNCTION xt_redist_repeat_asym_new_i4_a1d
1094 
1095  FUNCTION xt_redist_repeat_asym_new_i4_a1d_cfg(redist, src_extent, dst_extent,&
1096  num_repetitions, src_displacements, dst_displacements, config) &
1097  result(res)
1098  TYPE(xt_redist), INTENT(in) :: redist
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
1104  TYPE(xt_redist) :: res
1105  INTEGER(c_int) :: num_repetitions_c
1106 
1107  num_repetitions_c = int(num_repetitions, c_int)
1108  res = xt_redist_c2f(xt_redist_repeat_asym_custom_new_c(&
1109  xt_redist_f2c(redist), &
1110  src_extent, dst_extent, num_repetitions_c, src_displacements, &
1111  dst_displacements, xt_config_f2c(config)))
1112  END FUNCTION xt_redist_repeat_asym_new_i4_a1d_cfg
1113 
1114  FUNCTION xt_redist_repeat_asym_new_a1d(redist, src_extent, dst_extent, &
1115  src_displacements, dst_displacements) RESULT(res)
1116  TYPE(xt_redist), INTENT(in) :: redist
1117  INTEGER(mpi_address_kind), INTENT(in) :: src_extent, dst_extent
1118  INTEGER(c_int), INTENT(in) :: src_displacements(:), dst_displacements(:)
1119  TYPE(xt_redist) :: res
1120 
1121  INTEGER(i4) :: num_repetitions
1122 
1123  num_repetitions = SIZE(src_displacements)
1124  IF (num_repetitions /= SIZE(dst_displacements)) &
1125  CALL xt_abort("inequal size for src and dst displacements", &
1126  filename, __line__)
1127 
1128  res = xt_redist_c2f(xt_redist_repeat_asym_new_c(xt_redist_f2c(redist), &
1129  src_extent, dst_extent, num_repetitions, src_displacements, &
1130  dst_displacements))
1131  END FUNCTION xt_redist_repeat_asym_new_a1d
1132 
1133  FUNCTION xt_redist_repeat_asym_new_a1d_cfg(redist, src_extent, dst_extent, &
1134  src_displacements, dst_displacements, config) RESULT(res)
1135  TYPE(xt_redist), INTENT(in) :: redist
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
1139  TYPE(xt_redist) :: res
1140 
1141  INTEGER(i4) :: num_repetitions
1142 
1143  num_repetitions = SIZE(src_displacements)
1144  IF (num_repetitions /= SIZE(dst_displacements)) &
1145  CALL xt_abort("inequal size for src and dst displacements", &
1146  filename, __line__)
1147 
1148  res = xt_redist_c2f(xt_redist_repeat_asym_custom_new_c(&
1149  xt_redist_f2c(redist), &
1150  src_extent, dst_extent, num_repetitions, src_displacements, &
1151  dst_displacements, xt_config_f2c(config)))
1152  END FUNCTION xt_redist_repeat_asym_new_a1d_cfg
1153 
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
1161  TYPE(xt_redist) :: redist
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)
1168  redist = xt_redist_c2f(xt_redist_p2p_ext_new_c2f(xmap, &
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
1171 
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
1180  TYPE(xt_redist) :: redist
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, &
1189  config))
1190  END FUNCTION xt_redist_p2p_ext_new_i2_a1d_i2_a1d_cfg
1191 
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
1199  TYPE(xt_redist) :: redist
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)
1206  redist = xt_redist_c2f(xt_redist_p2p_ext_new_c2f(xmap, &
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
1209 
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
1218  TYPE(xt_redist) :: redist
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, &
1227  config))
1228  END FUNCTION xt_redist_p2p_ext_new_i4_a1d_i4_a1d_cfg
1229 
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
1237  TYPE(xt_redist) :: redist
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)
1244  redist = xt_redist_c2f(xt_redist_p2p_ext_new_c2f(xmap, &
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
1247 
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
1256  TYPE(xt_redist) :: redist
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, &
1265  config))
1266  END FUNCTION xt_redist_p2p_ext_new_i8_a1d_i8_a1d_cfg
1267 
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
1271  TYPE(xt_offset_ext), INTENT(in) :: src_extents(:), &
1272  dst_extents(:)
1273  INTEGER, INTENT(in) :: datatype
1274  TYPE(xt_redist) :: redist
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)
1283  redist = xt_redist_c2f(xt_redist_p2p_ext_new_c2f(xmap, &
1284  num_src_ext_c, src_extents, num_dst_ext_c, dst_extents, datatype))
1285  END FUNCTION xt_redist_p2p_ext_new_a1d_a1d
1286 
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
1290  TYPE(xt_offset_ext), INTENT(in) :: src_extents(:), &
1291  dst_extents(:)
1292  INTEGER, INTENT(in) :: datatype
1293  TYPE(xt_config), INTENT(in) :: config
1294  TYPE(xt_redist) :: redist
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, &
1305  config))
1306  END FUNCTION xt_redist_p2p_ext_new_a1d_a1d_cfg
1307 
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
1311  TYPE(xt_redist_msg), TARGET, INTENT(in) :: &
1312  send_msgs(nsend), recv_msgs(nrecv)
1313  INTEGER, INTENT(in) :: comm
1314  TYPE(xt_redist) :: redist
1315 
1316  INTEGER(c_int) :: nsend_c, nrecv_c
1317  TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1318 
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)
1324  ELSE
1325  send_msgs_p = c_null_ptr
1326  END IF
1327  IF (nrecv > 0_i2) THEN
1328  recv_msgs_p = c_loc(recv_msgs)
1329  ELSE
1330  recv_msgs_p = c_null_ptr
1331  END IF
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
1337 
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
1341  TYPE(xt_redist_msg), TARGET, INTENT(in) :: &
1342  send_msgs(nsend), recv_msgs(nrecv)
1343  INTEGER, INTENT(in) :: comm
1344  TYPE(xt_config), INTENT(in) :: config
1345  TYPE(xt_redist) :: redist
1346 
1347  INTEGER(c_int) :: nsend_c, nrecv_c
1348  TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1349 
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)
1355  ELSE
1356  send_msgs_p = c_null_ptr
1357  END IF
1358  IF (nrecv > 0_i2) THEN
1359  recv_msgs_p = c_loc(recv_msgs)
1360  ELSE
1361  recv_msgs_p = c_null_ptr
1362  END IF
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
1368 
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
1372  TYPE(xt_redist_msg), TARGET, INTENT(in) :: &
1373  send_msgs(nsend), recv_msgs(nrecv)
1374  INTEGER, INTENT(in) :: comm
1375  TYPE(xt_redist) :: redist
1376 
1377  INTEGER(c_int) :: nsend_c, nrecv_c
1378  TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1379 
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)
1385  ELSE
1386  send_msgs_p = c_null_ptr
1387  END IF
1388  IF (nrecv > 0_i4) THEN
1389  recv_msgs_p = c_loc(recv_msgs)
1390  ELSE
1391  recv_msgs_p = c_null_ptr
1392  END IF
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
1398 
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
1402  TYPE(xt_redist_msg), TARGET, INTENT(in) :: &
1403  send_msgs(nsend), recv_msgs(nrecv)
1404  INTEGER, INTENT(in) :: comm
1405  TYPE(xt_config), INTENT(in) :: config
1406  TYPE(xt_redist) :: redist
1407 
1408  INTEGER(c_int) :: nsend_c, nrecv_c
1409  TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1410 
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)
1416  ELSE
1417  send_msgs_p = c_null_ptr
1418  END IF
1419  IF (nrecv > 0_i4) THEN
1420  recv_msgs_p = c_loc(recv_msgs)
1421  ELSE
1422  recv_msgs_p = c_null_ptr
1423  END IF
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
1429 
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
1433  TYPE(xt_redist_msg), TARGET, INTENT(in) :: &
1434  send_msgs(nsend), recv_msgs(nrecv)
1435  INTEGER, INTENT(in) :: comm
1436  TYPE(xt_redist) :: redist
1437 
1438  INTEGER(c_int) :: nsend_c, nrecv_c
1439  TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1440 
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)
1446  ELSE
1447  send_msgs_p = c_null_ptr
1448  END IF
1449  IF (nrecv > 0_i8) THEN
1450  recv_msgs_p = c_loc(recv_msgs)
1451  ELSE
1452  recv_msgs_p = c_null_ptr
1453  END IF
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
1459 
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
1463  TYPE(xt_redist_msg), TARGET, INTENT(in) :: &
1464  send_msgs(nsend), recv_msgs(nrecv)
1465  INTEGER, INTENT(in) :: comm
1466  TYPE(xt_config), INTENT(in) :: config
1467  TYPE(xt_redist) :: redist
1468 
1469  INTEGER(c_int) :: nsend_c, nrecv_c
1470  TYPE(c_ptr) :: send_msgs_p, recv_msgs_p
1471 
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)
1477  ELSE
1478  send_msgs_p = c_null_ptr
1479  END IF
1480  IF (nrecv > 0_i8) THEN
1481  recv_msgs_p = c_loc(recv_msgs)
1482  ELSE
1483  recv_msgs_p = c_null_ptr
1484  END IF
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
1490 
1491  FUNCTION xt_redist_single_array_base_new_a1d_a1d(send_msgs, recv_msgs, comm) &
1492  result(redist)
1493  TYPE(xt_redist_msg), TARGET, INTENT(in) :: send_msgs(:), recv_msgs(:)
1494  INTEGER, INTENT(in) :: comm
1495  TYPE(xt_redist) :: redist
1496 
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(:)
1501 
1502  nsend = SIZE(send_msgs)
1503  nrecv = SIZE(recv_msgs)
1504 
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)
1507 
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
1516 
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
1522  TYPE(xt_redist) :: redist
1523 
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(:)
1528 
1529  nsend = SIZE(send_msgs)
1530  nrecv = SIZE(recv_msgs)
1531 
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)
1534 
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
1543 
1544  SUBROUTINE msgs_p_arg(msgs, msgs_a, msgs_p)
1545  TYPE(xt_redist_msg), TARGET, INTENT(in) :: msgs(:)
1546  TYPE(xt_redist_msg), TARGET, ALLOCATABLE, INTENT(inout) :: msgs_a(:)
1547  TYPE(c_ptr), INTENT(out) :: msgs_p
1548 
1549  INTEGER :: msgs_size
1550  LOGICAL :: msgs_is_contiguous
1551 #ifndef HAVE_FC_IS_CONTIGUOUS
1552  INTERFACE
1553  FUNCTION xt_redist_msg_contiguous(msgs_a, msgs_b) RESULT(p) &
1554  bind(c, name='xt_redist_msg_contiguous')
1555  IMPORT :: c_int, xt_redist_msg
1556  TYPE(xt_redist_msg), INTENT(in) :: msgs_a, msgs_b
1557  INTEGER(c_int) :: p
1558  END FUNCTION xt_redist_msg_contiguous
1559  END INTERFACE
1560 #endif
1561 
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)
1569 #else
1570  msgs_is_contiguous = xt_redist_msg_contiguous(msgs(1), msgs(2)) /= 0
1571 #endif
1572  IF (msgs_is_contiguous) THEN
1573  xt_slice_c_loc(msgs(1), msgs_p)
1574  ELSE
1575  ALLOCATE(msgs_a(msgs_size))
1576  msgs_a = msgs
1577  msgs_p = c_loc(msgs_a)
1578  END IF
1579  ELSE
1580  xt_slice_c_loc(msgs(1), msgs_p)
1581  END IF
1582  ELSE
1583  msgs_p = c_null_ptr
1584  END IF
1585  END SUBROUTINE msgs_p_arg
1586 
1587 END MODULE xt_redist_base
1588 
1590  USE xt_redist_base, ONLY: xt_redist_p2p_orig_new => xt_redist_p2p_new, &
1592  IMPLICIT NONE
1593  PRIVATE
1594  INTERFACE xt_redist_p2p_new
1595  MODULE PROCEDURE xt_redist_p2p_orig_new
1596  MODULE PROCEDURE xt_redist_p2p_custom_new
1597  END INTERFACE xt_redist_p2p_new
1598  PUBLIC :: xt_redist_p2p_new
1599 END MODULE xt_redist_rename
1600 !
1601 ! Local Variables:
1602 ! f90-continuation-indent: 5
1603 ! coding: utf-8
1604 ! indent-tabs-mode: nil
1605 ! show-trailing-whitespace: t
1606 ! require-trailing-newline: t
1607 ! End:
1608 !
integer, parameter, public i8
Definition: xt_core_f.f90:60
integer, parameter, public i4
Definition: xt_core_f.f90:59
integer, parameter, public i2
Definition: xt_core_f.f90:58
integer, parameter mpi_address_kind
Definition: xt_mpi_f.f90:54
type(xt_redist) function, public xt_redist_c2f(redist)
subroutine, public xt_request_init(request, cptr)
void xt_redist_delete(Xt_redist redist)
Definition: xt_redist.c:68
int xt_redist_get_num_recv_msg(Xt_redist redist)
Definition: xt_redist.c:102
int xt_redist_get_num_send_msg(Xt_redist redist)
Definition: xt_redist.c:97
void xt_redist_a_exchange1(Xt_redist redist, const void *src_data, void *dst_data, Xt_request *request)
Definition: xt_redist.c:91
Xt_redist xt_redist_copy(Xt_redist redist)
Definition: xt_redist.c:63
void xt_redist_a_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data, Xt_request *request)
Definition: xt_redist.c:79
void xt_redist_s_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data)
Definition: xt_redist.c:73
void xt_redist_s_exchange1(Xt_redist redist, const void *src_data, void *dst_data)
Definition: xt_redist.c:86
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)
Definition: yaxt_f2c.c:486
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)
Definition: yaxt_f2c.c:366
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)
Definition: yaxt_f2c.c:383
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)
Definition: yaxt_f2c.c:339
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)
Definition: yaxt_f2c.c:279
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)
Definition: yaxt_f2c.c:291
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)
Definition: yaxt_f2c.c:328
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)
Definition: yaxt_f2c.c:261
Xt_redist xt_redist_p2p_custom_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f, struct xt_config_f *config)
Definition: yaxt_f2c.c:358
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)
Definition: yaxt_f2c.c:316
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)
Definition: yaxt_f2c.c:416
Xt_redist xt_redist_p2p_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f)
Definition: yaxt_f2c.c:351
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)
Definition: yaxt_f2c.c:305
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)
Definition: yaxt_f2c.c:242
Xt_redist xt_redist_collection_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Fint cache_size, MPI_Fint comm_f)
Definition: yaxt_f2c.c:401
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)
Definition: yaxt_f2c.c:461
int xt_redist_msg_contiguous(const struct xt_redist_msg_f *p_msgs_a, const struct xt_redist_msg_f *p_msgs_b)
Definition: yaxt_f2c.c:538
Xt_config xt_config_f2c(struct xt_config_f *p)
Definition: yaxt_f2c.c:166