49 USE iso_c_binding
, ONLY: c_int, c_ptr, c_null_ptr, &
50 c_associated, c_f_pointer
77 TYPE(c_ptr) :: cptr = c_null_ptr
84 TYPE(c_ptr) :: cptr = c_null_ptr
90 FUNCTION xt_xmap_f2c(xmap) bind(c, name='xt_xmap_f2c')
RESULT(p)
93 TYPE(
xt_xmap),
INTENT(in) :: xmap
97 SUBROUTINE xt_xmap_delete_c(xmap) bind(C, name='xt_xmap_delete')
100 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
101 END SUBROUTINE xt_xmap_delete_c
106 MODULE PROCEDURE xt_xmap_delete_1
107 MODULE PROCEDURE xt_xmap_delete_a1d
111 MODULE PROCEDURE xt_xmap_is_null
112 MODULE PROCEDURE xt_xmap_iterator_is_null
113 END INTERFACE xt_is_null
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
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
132 FUNCTION xt_xmap_is_null(xmap)
RESULT(p)
133 TYPE(
xt_xmap),
INTENT(in) :: xmap
135 p = .NOT. c_associated(xmap%cptr)
136 END FUNCTION xt_xmap_is_null
140 TYPE(c_ptr),
INTENT(in) :: xmap
149 FUNCTION xt_xmap_copy_c(xmap) bind(C, name='xt_xmap_copy')
RESULT(res_ptr)
152 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
153 TYPE(c_ptr) :: res_ptr
154 END FUNCTION xt_xmap_copy_c
156 xmap_copy%cptr = xt_xmap_copy_c(xmap%cptr)
158 SUBROUTINE xt_xmap_delete_1(xmap)
159 TYPE(
xt_xmap),
INTENT(inout) :: xmap
161 xmap%cptr = c_null_ptr
162 END SUBROUTINE xt_xmap_delete_1
164 SUBROUTINE xt_xmap_delete_a1d(xmaps)
165 TYPE(
xt_xmap),
INTENT(inout) :: xmaps(:)
170 xmaps(i)%cptr = c_null_ptr
172 END SUBROUTINE xt_xmap_delete_a1d
176 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist
177 TYPE(xt_idxlist),
INTENT(in) :: dst_idxlist
178 INTEGER,
VALUE,
INTENT(in) :: comm
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
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
192 xmap =
xt_xmap_c2f(xt_xmap_all2all_new_f(src_idxlist, dst_idxlist, comm))
197 TYPE(xt_idxlist),
INTENT(in) :: src_idxlist
198 TYPE(xt_idxlist),
INTENT(in) :: dst_idxlist
199 INTEGER,
VALUE,
INTENT(in) :: 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
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
217 inter_comm, intra_comm)
RESULT(xmap)
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
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
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
237 dst_idxlist, inter_comm, intra_comm))
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
248 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
249 INTEGER(c_int) :: num
250 END FUNCTION xt_xmap_get_num_destinations_c
252 num = int(xt_xmap_get_num_destinations_c(xmap%cptr))
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
263 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
264 INTEGER(c_int) :: num
265 END FUNCTION xt_xmap_get_num_sources_c
267 num = int(xt_xmap_get_num_sources_c(xmap%cptr))
272 INTEGER(c_int),
INTENT(out) :: ranks(*)
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
278 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
279 INTEGER(c_int),
INTENT(out) :: ranks(*)
280 END SUBROUTINE xt_xmap_get_destination_ranks_c
282 CALL xt_xmap_get_destination_ranks_c(xmap%cptr, ranks)
287 INTEGER(c_int),
INTENT(out) :: ranks(*)
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
293 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
294 INTEGER(c_int),
INTENT(out) :: ranks(*)
295 END SUBROUTINE xt_xmap_get_source_ranks_c
297 CALL xt_xmap_get_source_ranks_c(xmap%cptr, ranks)
304 FUNCTION xt_xmap_get_out_iterator_c(xmap)
RESULT(cptr) &
305 bind(c, name=
'xt_xmap_get_out_iterator')
307 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
309 END FUNCTION xt_xmap_get_out_iterator_c
311 iter%cptr = xt_xmap_get_out_iterator_c(xmap%cptr)
318 FUNCTION xt_xmap_get_in_iterator_c(xmap)
RESULT(cptr) &
319 bind(c, name=
'xt_xmap_get_in_iterator')
321 TYPE(c_ptr),
VALUE,
INTENT(in) :: xmap
323 END FUNCTION xt_xmap_get_in_iterator_c
325 iter%cptr = xt_xmap_get_in_iterator_c(xmap%cptr)
328 FUNCTION xt_xmap_iterator_is_null(iter)
RESULT(p)
331 p = .NOT. c_associated(iter%cptr)
332 END FUNCTION xt_xmap_iterator_is_null
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
345 avail = xt_xmap_iterator_next_c(iter%cptr) /= 0
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
359 rank = int(xt_xmap_iterator_get_rank_c(iter%cptr))
365 INTEGER(c_int),
POINTER :: transfer_pos(:)
368 FUNCTION xt_xmap_iterator_get_transfer_pos_c(iter)
RESULT(transfer_pos) &
369 bind(c, name=
'xt_xmap_iterator_get_transfer_pos')
371 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
372 TYPE(c_ptr) :: transfer_pos
373 END FUNCTION xt_xmap_iterator_get_transfer_pos_c
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)
386 num = int(xt_xmap_iterator_get_num_transfer_pos_c(iter%cptr))
392 TYPE(
xt_pos_ext),
POINTER :: transfer_pos_ext(:)
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')
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
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)
414 num = int(xt_xmap_iterator_get_num_transfer_pos_ext_c(iter%cptr))
420 SUBROUTINE xt_xmap_iterator_delete_c(iter) &
421 bind(c, name=
'xt_xmap_iterator_delete')
423 TYPE(c_ptr),
VALUE,
INTENT(in) :: iter
424 END SUBROUTINE xt_xmap_iterator_delete_c
426 CALL xt_xmap_iterator_delete_c(iter%cptr)
427 iter%cptr = c_null_ptr
void xt_xmap_get_source_ranks(Xt_xmap xmap, int *ranks)
Xt_xmap_iter xt_xmap_get_out_iterator(Xt_xmap xmap)
int xt_xmap_get_num_sources(Xt_xmap xmap)
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)
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
const struct Xt_pos_ext * xt_xmap_iterator_get_transfer_pos_ext(Xt_xmap_iter iter)
integer, parameter, public xt_mpi_fint_kind
int xt_xmap_iterator_get_num_transfer_pos(Xt_xmap_iter iter)
int xt_xmap_iterator_get_num_transfer_pos_ext(Xt_xmap_iter iter)
void xt_xmap_iterator_delete(Xt_xmap_iter iter)
Xt_xmap xt_xmap_copy(Xt_xmap xmap)
Xt_xmap xt_xmap_all2all_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
void xt_xmap_delete(Xt_xmap xmap)
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)
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)
int xt_xmap_get_num_destinations(Xt_xmap xmap)
Xt_xmap_iter xt_xmap_get_in_iterator(Xt_xmap xmap)
void xt_xmap_get_destination_ranks(Xt_xmap xmap, int *ranks)
int const * xt_xmap_iterator_get_transfer_pos(Xt_xmap_iter iter)
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)
int xt_xmap_iterator_next(Xt_xmap_iter iter)