Yet Another eXchange Tool  DO_NOT_EDIT_HERE
xt_xmap_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 !
49  USE iso_c_binding, ONLY: c_int, c_ptr, c_null_ptr, &
50  c_associated, c_f_pointer
53  IMPLICIT NONE
54  PRIVATE
55  PUBLIC :: xt_xmap_c2f, xt_xmap_f2c, xt_is_null
68 
69 
70  ! note: this type must not be extended to contain any other
71  ! components, its memory pattern has to match void * exactly, which
72  ! it does because of C constraints
73  TYPE, bind(c), PUBLIC :: xt_xmap
74 #ifndef __G95__
75  PRIVATE
76 #endif
77  TYPE(c_ptr) :: cptr = c_null_ptr
78  END TYPE xt_xmap
79 
80  TYPE, bind(c), PUBLIC :: xt_xmap_iter
81 #ifndef __G95__
82  PRIVATE
83 #endif
84  TYPE(c_ptr) :: cptr = c_null_ptr
85  END TYPE xt_xmap_iter
86 
87  INTERFACE
88  ! this function must not be implemented in Fortran because
89  ! PGI 11.x chokes on that
90  FUNCTION xt_xmap_f2c(xmap) bind(c, name='xt_xmap_f2c') RESULT(p)
91  IMPORT :: c_ptr, xt_xmap
92  IMPLICIT NONE
93  TYPE(xt_xmap), INTENT(in) :: xmap
94  TYPE(c_ptr) :: p
95  END FUNCTION xt_xmap_f2c
96 
97  SUBROUTINE xt_xmap_delete_c(xmap) bind(C, name='xt_xmap_delete')
98  IMPORT :: c_ptr
99  IMPLICIT NONE
100  TYPE(c_ptr), VALUE, INTENT(in) :: xmap
101  END SUBROUTINE xt_xmap_delete_c
102 
103  END INTERFACE
104 
105  INTERFACE xt_xmap_delete
106  MODULE PROCEDURE xt_xmap_delete_1
107  MODULE PROCEDURE xt_xmap_delete_a1d
108  END INTERFACE xt_xmap_delete
109 
110  INTERFACE xt_is_null
111  MODULE PROCEDURE xt_xmap_is_null
112  MODULE PROCEDURE xt_xmap_iterator_is_null
113  END INTERFACE xt_is_null
114 
115  INTERFACE
116  FUNCTION xt_xmap_iterator_get_num_transfer_pos_c(iter) RESULT(num) &
117  bind(c, name='xt_xmap_iterator_get_num_transfer_pos')
118  IMPORT :: c_int, c_ptr
119  TYPE(c_ptr), VALUE, INTENT(in) :: iter
120  INTEGER(c_int) :: num
121  END FUNCTION xt_xmap_iterator_get_num_transfer_pos_c
122 
123  FUNCTION xt_xmap_iterator_get_num_transfer_pos_ext_c(iter) RESULT(num) &
124  bind(c, name='xt_xmap_iterator_get_num_transfer_pos_ext')
125  IMPORT :: c_int, c_ptr
126  TYPE(c_ptr), VALUE, INTENT(in) :: iter
127  INTEGER(c_int) :: num
128  END FUNCTION xt_xmap_iterator_get_num_transfer_pos_ext_c
129  END INTERFACE
130 CONTAINS
131 
132  FUNCTION xt_xmap_is_null(xmap) RESULT(p)
133  TYPE(xt_xmap), INTENT(in) :: xmap
134  LOGICAL :: p
135  p = .NOT. c_associated(xmap%cptr)
136  END FUNCTION xt_xmap_is_null
137 
138 
139  FUNCTION xt_xmap_c2f(xmap) RESULT(p)
140  TYPE(c_ptr), INTENT(in) :: xmap
141  TYPE(xt_xmap) :: p
142  p%cptr = xmap
143  END FUNCTION xt_xmap_c2f
144 
145  FUNCTION xt_xmap_copy(xmap) RESULT(xmap_copy)
146  TYPE(xt_xmap), INTENT(in) :: xmap
147  TYPE(xt_xmap) :: xmap_copy
148  INTERFACE
149  FUNCTION xt_xmap_copy_c(xmap) bind(C, name='xt_xmap_copy') RESULT(res_ptr)
150  IMPORT :: xt_xmap, c_ptr
151  IMPLICIT NONE
152  TYPE(c_ptr), VALUE, INTENT(in) :: xmap
153  TYPE(c_ptr) :: res_ptr
154  END FUNCTION xt_xmap_copy_c
155  END INTERFACE
156  xmap_copy%cptr = xt_xmap_copy_c(xmap%cptr)
157  END FUNCTION xt_xmap_copy
158  SUBROUTINE xt_xmap_delete_1(xmap)
159  TYPE(xt_xmap), INTENT(inout) :: xmap
160  CALL xt_xmap_delete_c(xt_xmap_f2c(xmap))
161  xmap%cptr = c_null_ptr
162  END SUBROUTINE xt_xmap_delete_1
163 
164  SUBROUTINE xt_xmap_delete_a1d(xmaps)
165  TYPE(xt_xmap), INTENT(inout) :: xmaps(:)
166  INTEGER :: i, n
167  n = SIZE(xmaps)
168  DO i = 1, n
169  CALL xt_xmap_delete_c(xt_xmap_f2c(xmaps(i)))
170  xmaps(i)%cptr = c_null_ptr
171  END DO
172  END SUBROUTINE xt_xmap_delete_a1d
173 
174  FUNCTION xt_xmap_all2all_new(src_idxlist, dst_idxlist, comm) RESULT(xmap)
175  IMPLICIT NONE
176  TYPE(xt_idxlist), INTENT(in) :: src_idxlist
177  TYPE(xt_idxlist), INTENT(in) :: dst_idxlist
178  INTEGER, VALUE, INTENT(in) :: comm
179  TYPE(xt_xmap) :: xmap
180 
181  INTERFACE
182  FUNCTION xt_xmap_all2all_new_f(src_idxlist, dst_idxlist, comm) &
183  bind(c, name='xt_xmap_all2all_new_f') result(xmap_ptr)
184  IMPORT :: xt_idxlist, xt_xmap, xt_mpi_fint_kind, c_ptr
185  IMPLICIT NONE
186  TYPE(xt_idxlist), INTENT(in) :: src_idxlist, dst_idxlist
187  INTEGER(xt_mpi_fint_kind), VALUE, INTENT(in) :: comm
188  TYPE(c_ptr) :: xmap_ptr
189  END FUNCTION xt_xmap_all2all_new_f
190  END INTERFACE
191 
192  xmap = xt_xmap_c2f(xt_xmap_all2all_new_f(src_idxlist, dst_idxlist, comm))
193  END FUNCTION xt_xmap_all2all_new
194 
195  FUNCTION xt_xmap_dist_dir_new(src_idxlist, dst_idxlist, comm) RESULT(xmap)
196  IMPLICIT NONE
197  TYPE(xt_idxlist), INTENT(in) :: src_idxlist
198  TYPE(xt_idxlist), INTENT(in) :: dst_idxlist
199  INTEGER, VALUE, INTENT(in) :: comm
200  TYPE(xt_xmap) :: xmap
201 
202  INTERFACE
203  FUNCTION xt_xmap_dist_dir_new_f(src_idxlist, dst_idxlist, comm) &
204  bind(c, name='xt_xmap_dist_dir_new_f') result(xmap_ptr)
205  IMPORT :: xt_idxlist, xt_xmap, xt_mpi_fint_kind, c_ptr
206  IMPLICIT NONE
207  TYPE(xt_idxlist), INTENT(in) :: src_idxlist, dst_idxlist
208  INTEGER(xt_mpi_fint_kind), VALUE, INTENT(in) :: comm
209  TYPE(c_ptr) :: xmap_ptr
210  END FUNCTION xt_xmap_dist_dir_new_f
211  END INTERFACE
212 
213  xmap = xt_xmap_c2f(xt_xmap_dist_dir_new_f(src_idxlist, dst_idxlist, comm))
214  END FUNCTION xt_xmap_dist_dir_new
215 
216  FUNCTION xt_xmap_dist_dir_intercomm_new(src_idxlist, dst_idxlist, &
217  inter_comm, intra_comm) RESULT(xmap)
218  IMPLICIT NONE
219  TYPE(xt_idxlist), INTENT(in) :: src_idxlist
220  TYPE(xt_idxlist), INTENT(in) :: dst_idxlist
221  INTEGER, VALUE, INTENT(in) :: inter_comm, intra_comm
222  TYPE(xt_xmap) :: xmap
223 
224  INTERFACE
225  FUNCTION xt_xmap_dist_dir_intercomm_new_f(src_idxlist, dst_idxlist, &
226  inter_comm, intra_comm) &
227  bind(c, name='xt_xmap_dist_dir_intercomm_new_f') result(xmap_ptr)
228  IMPORT :: xt_idxlist, xt_xmap, xt_mpi_fint_kind, c_ptr
229  IMPLICIT NONE
230  TYPE(xt_idxlist), INTENT(in) :: src_idxlist, dst_idxlist
231  INTEGER(xt_mpi_fint_kind), VALUE, INTENT(in) :: inter_comm, intra_comm
232  TYPE(c_ptr) :: xmap_ptr
234  END INTERFACE
235 
236  xmap = xt_xmap_c2f(xt_xmap_dist_dir_intercomm_new_f(src_idxlist, &
237  dst_idxlist, inter_comm, intra_comm))
238  END FUNCTION xt_xmap_dist_dir_intercomm_new
239 
240  FUNCTION xt_xmap_get_num_destinations(xmap) RESULT(num)
241  TYPE(xt_xmap), INTENT(in) :: xmap
242  INTEGER :: num
243  INTERFACE
244  FUNCTION xt_xmap_get_num_destinations_c(xmap) RESULT(num) &
245  bind(c, name='xt_xmap_get_num_destinations')
246  IMPORT :: c_ptr, c_int
247  IMPLICIT NONE
248  TYPE(c_ptr), VALUE, INTENT(in) :: xmap
249  INTEGER(c_int) :: num
250  END FUNCTION xt_xmap_get_num_destinations_c
251  END INTERFACE
252  num = int(xt_xmap_get_num_destinations_c(xmap%cptr))
253  END FUNCTION xt_xmap_get_num_destinations
254 
255  FUNCTION xt_xmap_get_num_sources(xmap) RESULT(num)
256  TYPE(xt_xmap), INTENT(in) :: xmap
257  INTEGER :: num
258  INTERFACE
259  FUNCTION xt_xmap_get_num_sources_c(xmap) RESULT(num) &
260  bind(c, name='xt_xmap_get_num_sources')
261  IMPORT :: c_ptr, c_int
262  IMPLICIT NONE
263  TYPE(c_ptr), VALUE, INTENT(in) :: xmap
264  INTEGER(c_int) :: num
265  END FUNCTION xt_xmap_get_num_sources_c
266  END INTERFACE
267  num = int(xt_xmap_get_num_sources_c(xmap%cptr))
268  END FUNCTION xt_xmap_get_num_sources
269 
270  SUBROUTINE xt_xmap_get_destination_ranks(xmap, ranks)
271  TYPE(xt_xmap), INTENT(in) :: xmap
272  INTEGER(c_int), INTENT(out) :: ranks(*)
273  INTERFACE
274  SUBROUTINE xt_xmap_get_destination_ranks_c(xmap, ranks) &
275  bind(c, name='xt_xmap_get_destination_ranks')
276  IMPORT :: c_ptr, c_int
277  IMPLICIT NONE
278  TYPE(c_ptr), VALUE, INTENT(in) :: xmap
279  INTEGER(c_int), INTENT(out) :: ranks(*)
280  END SUBROUTINE xt_xmap_get_destination_ranks_c
281  END INTERFACE
282  CALL xt_xmap_get_destination_ranks_c(xmap%cptr, ranks)
283  END SUBROUTINE xt_xmap_get_destination_ranks
284 
285  SUBROUTINE xt_xmap_get_source_ranks(xmap, ranks)
286  TYPE(xt_xmap), INTENT(in) :: xmap
287  INTEGER(c_int), INTENT(out) :: ranks(*)
288  INTERFACE
289  SUBROUTINE xt_xmap_get_source_ranks_c(xmap, ranks) &
290  bind(c, name='xt_xmap_get_source_ranks')
291  IMPORT :: c_ptr, c_int
292  IMPLICIT NONE
293  TYPE(c_ptr), VALUE, INTENT(in) :: xmap
294  INTEGER(c_int), INTENT(out) :: ranks(*)
295  END SUBROUTINE xt_xmap_get_source_ranks_c
296  END INTERFACE
297  CALL xt_xmap_get_source_ranks_c(xmap%cptr, ranks)
298  END SUBROUTINE xt_xmap_get_source_ranks
299 
300  FUNCTION xt_xmap_get_out_iterator(xmap) RESULT(iter)
301  TYPE(xt_xmap), INTENT(in) :: xmap
302  TYPE(xt_xmap_iter) :: iter
303  INTERFACE
304  FUNCTION xt_xmap_get_out_iterator_c(xmap) RESULT(cptr) &
305  bind(c, name='xt_xmap_get_out_iterator')
306  IMPORT :: c_ptr
307  TYPE(c_ptr), VALUE, INTENT(in) :: xmap
308  TYPE(c_ptr) :: cptr
309  END FUNCTION xt_xmap_get_out_iterator_c
310  END INTERFACE
311  iter%cptr = xt_xmap_get_out_iterator_c(xmap%cptr)
312  END FUNCTION xt_xmap_get_out_iterator
313 
314  FUNCTION xt_xmap_get_in_iterator(xmap) RESULT(iter)
315  TYPE(xt_xmap), INTENT(in) :: xmap
316  TYPE(xt_xmap_iter) :: iter
317  INTERFACE
318  FUNCTION xt_xmap_get_in_iterator_c(xmap) RESULT(cptr) &
319  bind(c, name='xt_xmap_get_in_iterator')
320  IMPORT :: c_ptr
321  TYPE(c_ptr), VALUE, INTENT(in) :: xmap
322  TYPE(c_ptr) :: cptr
323  END FUNCTION xt_xmap_get_in_iterator_c
324  END INTERFACE
325  iter%cptr = xt_xmap_get_in_iterator_c(xmap%cptr)
326  END FUNCTION xt_xmap_get_in_iterator
327 
328  FUNCTION xt_xmap_iterator_is_null(iter) RESULT(p)
329  TYPE(xt_xmap_iter), INTENT(in) :: iter
330  LOGICAL :: p
331  p = .NOT. c_associated(iter%cptr)
332  END FUNCTION xt_xmap_iterator_is_null
333 
334  FUNCTION xt_xmap_iterator_next(iter) RESULT(avail)
335  TYPE(xt_xmap_iter), INTENT(inout) :: iter
336  LOGICAL :: avail
337  INTERFACE
338  FUNCTION xt_xmap_iterator_next_c(iter) RESULT(avail) &
339  bind(c, name='xt_xmap_iterator_next')
340  IMPORT :: c_ptr, c_int
341  TYPE(c_ptr), VALUE, INTENT(in) :: iter
342  INTEGER(c_int) :: avail
343  END FUNCTION xt_xmap_iterator_next_c
344  END INTERFACE
345  avail = xt_xmap_iterator_next_c(iter%cptr) /= 0
346  END FUNCTION xt_xmap_iterator_next
347 
348  FUNCTION xt_xmap_iterator_get_rank(iter) RESULT(rank)
349  TYPE(xt_xmap_iter), INTENT(in) :: iter
350  INTEGER :: rank
351  INTERFACE
352  FUNCTION xt_xmap_iterator_get_rank_c(iter) RESULT(rank) &
353  bind(c, name='xt_xmap_iterator_get_rank')
354  IMPORT :: c_ptr, c_int
355  TYPE(c_ptr), VALUE, INTENT(in) :: iter
356  INTEGER(c_int) :: rank
357  END FUNCTION xt_xmap_iterator_get_rank_c
358  END INTERFACE
359  rank = int(xt_xmap_iterator_get_rank_c(iter%cptr))
360  END FUNCTION xt_xmap_iterator_get_rank
361 
363  FUNCTION xt_xmap_iterator_get_transfer_pos(iter) RESULT(transfer_pos)
364  TYPE(xt_xmap_iter), INTENT(in) :: iter
365  INTEGER(c_int), POINTER :: transfer_pos(:)
366 
367  INTERFACE
368  FUNCTION xt_xmap_iterator_get_transfer_pos_c(iter) RESULT(transfer_pos) &
369  bind(c, name='xt_xmap_iterator_get_transfer_pos')
370  IMPORT :: c_ptr
371  TYPE(c_ptr), VALUE, INTENT(in) :: iter
372  TYPE(c_ptr) :: transfer_pos
373  END FUNCTION xt_xmap_iterator_get_transfer_pos_c
374  END INTERFACE
375  INTEGER :: n(1)
376  TYPE(c_ptr) :: transfer_pos_cptr
377  NULLIFY(transfer_pos)
378  n(1) = int(xt_xmap_iterator_get_num_transfer_pos_c(iter%cptr))
379  transfer_pos_cptr = xt_xmap_iterator_get_transfer_pos_c(iter%cptr)
380  CALL c_f_pointer(transfer_pos_cptr, transfer_pos, n)
382 
383  FUNCTION xt_xmap_iterator_get_num_transfer_pos(iter) RESULT(num)
384  TYPE(xt_xmap_iter), INTENT(in) :: iter
385  INTEGER :: num
386  num = int(xt_xmap_iterator_get_num_transfer_pos_c(iter%cptr))
388 
390  FUNCTION xt_xmap_iterator_get_transfer_pos_ext(iter) RESULT(transfer_pos_ext)
391  TYPE(xt_xmap_iter), INTENT(in) :: iter
392  TYPE(xt_pos_ext), POINTER :: transfer_pos_ext(:)
393 
394  INTERFACE
395  FUNCTION xt_xmap_iterator_get_transfer_pos_ext_c(iter) &
396  result(transfer_pos_ext) &
397  bind(c, name='xt_xmap_iterator_get_transfer_pos_ext')
398  IMPORT :: c_ptr
399  TYPE(c_ptr), VALUE, INTENT(in) :: iter
400  TYPE(c_ptr) :: transfer_pos_ext
401  END FUNCTION xt_xmap_iterator_get_transfer_pos_ext_c
402  END INTERFACE
403  INTEGER :: n(1)
404  TYPE(c_ptr) :: transfer_pos_ext_cptr
405  NULLIFY(transfer_pos_ext)
406  n(1) = int(xt_xmap_iterator_get_num_transfer_pos_ext_c(iter%cptr))
407  transfer_pos_ext_cptr = xt_xmap_iterator_get_transfer_pos_ext_c(iter%cptr)
408  CALL c_f_pointer(transfer_pos_ext_cptr, transfer_pos_ext, n)
410 
411  FUNCTION xt_xmap_iterator_get_num_transfer_pos_ext(iter) RESULT(num)
412  TYPE(xt_xmap_iter), INTENT(in) :: iter
413  INTEGER :: num
414  num = int(xt_xmap_iterator_get_num_transfer_pos_ext_c(iter%cptr))
416 
417  SUBROUTINE xt_xmap_iterator_delete(iter)
418  TYPE(xt_xmap_iter), INTENT(inout) :: iter
419  INTERFACE
420  SUBROUTINE xt_xmap_iterator_delete_c(iter) &
421  bind(c, name='xt_xmap_iterator_delete')
422  IMPORT :: c_ptr
423  TYPE(c_ptr), VALUE, INTENT(in) :: iter
424  END SUBROUTINE xt_xmap_iterator_delete_c
425  END INTERFACE
426  CALL xt_xmap_iterator_delete_c(iter%cptr)
427  iter%cptr = c_null_ptr
428  END SUBROUTINE xt_xmap_iterator_delete
429 END MODULE xt_xmap_abstract
430 !
431 ! Local Variables:
432 ! f90-continuation-indent: 5
433 ! coding: utf-8
434 ! indent-tabs-mode: nil
435 ! show-trailing-whitespace: t
436 ! require-trailing-newline: t
437 ! End:
438 !
void xt_xmap_get_source_ranks(Xt_xmap xmap, int *ranks)
Definition: xt_xmap.c:75
Xt_xmap_iter xt_xmap_get_out_iterator(Xt_xmap xmap)
Definition: xt_xmap.c:95
int xt_xmap_get_num_sources(Xt_xmap xmap)
Definition: xt_xmap.c:65
Xt_xmap xt_xmap_dist_dir_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
type(xt_xmap) function, public xt_xmap_c2f(xmap)
Definition: xt_xmap_f.f90:140
describes range of positions starting with start up to start + size - 1 i.e. [start,start+size) if size is positive and down to start + size + 1 i.e. (start+size,start] if size is negative
Definition: xt_core_f.f90:91
const struct Xt_pos_ext * xt_xmap_iterator_get_transfer_pos_ext(Xt_xmap_iter iter)
Definition: xt_xmap.c:121
integer, parameter, public xt_mpi_fint_kind
Definition: xt_core_f.f90:66
int xt_xmap_iterator_get_num_transfer_pos(Xt_xmap_iter iter)
Definition: xt_xmap.c:115
int xt_xmap_iterator_get_num_transfer_pos_ext(Xt_xmap_iter iter)
Definition: xt_xmap.c:125
void xt_xmap_iterator_delete(Xt_xmap_iter iter)
Definition: xt_xmap.c:129
Xt_xmap xt_xmap_copy(Xt_xmap xmap)
Definition: xt_xmap.c:80
Xt_xmap xt_xmap_all2all_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
void xt_xmap_delete(Xt_xmap xmap)
Definition: xt_xmap.c:85
Xt_xmap xt_xmap_dist_dir_intercomm_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm inter_comm, MPI_Comm intra_comm)
int xt_xmap_iterator_get_rank(Xt_xmap_iter iter)
Definition: xt_xmap.c:105
Xt_xmap xt_xmap_dist_dir_intercomm_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint inter_comm_f, MPI_Fint intra_comm_f)
Definition: yaxt_f2c.c:199
int xt_xmap_get_num_destinations(Xt_xmap xmap)
Definition: xt_xmap.c:60
Xt_xmap_iter xt_xmap_get_in_iterator(Xt_xmap xmap)
Definition: xt_xmap.c:90
void xt_xmap_get_destination_ranks(Xt_xmap xmap, int *ranks)
Definition: xt_xmap.c:70
int const * xt_xmap_iterator_get_transfer_pos(Xt_xmap_iter iter)
Definition: xt_xmap.c:110
Xt_xmap xt_xmap_dist_dir_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f)
Definition: yaxt_f2c.c:191
int xt_xmap_iterator_next(Xt_xmap_iter iter)
Definition: xt_xmap.c:100