111 xt_redist_get_recv_mpi_datatype, xt_redist_get_send_mpi_datatype, &
124 USE iso_c_binding,
ONLY: c_int, c_ptr, c_null_ptr, c_loc
131 xt_set_abort_handler, xt_restore_default_abort_hndl, &
133 xt_sort_int, xt_sort_index,
xt_sort_idxpos, xt_sort_permutation, &
170 xt_redist_get_mpi_comm, &
171 xt_redist_get_recv_mpi_datatype, xt_redist_get_send_mpi_datatype, &
177 OPERATOR(==),
OPERATOR(/=), char, &
196 INTERFACE OPERATOR(==)
197 MODULE PROCEDURE xt_bounds_eq
198 END INTERFACE OPERATOR(==)
200 INTERFACE OPERATOR(/=)
201 MODULE PROCEDURE xt_bounds_ne
202 END INTERFACE OPERATOR(/=)
204 TYPE,
BIND(C),
PUBLIC :: xt_modifier
207 INTEGER(c_int) :: mask
212 bind(c, name=
'xt_idxmod_new') result(res)
215 TYPE(c_ptr),
VALUE,
INTENT(in) :: patch
216 INTEGER(c_int),
VALUE,
INTENT(in) :: modifier_num
217 TYPE(xt_modifier),
INTENT(in) :: modifier(modifier_num)
218 TYPE(c_ptr),
VALUE,
INTENT(in) :: mstate_ptr
224 MODULE PROCEDURE xt_idxmod_new_a1d
225 MODULE PROCEDURE xt_idxmod_new_a1d_a1d
226 MODULE PROCEDURE xt_idxmod_new_a1d_i4
227 MODULE PROCEDURE xt_idxmod_new_a1d_i4_a1d
228 MODULE PROCEDURE xt_idxmod_new_a1d_i4_a2d
230 CHARACTER(len=*),
PARAMETER :: filename =
'yaxt.f90'
235 TYPE(xt_idxlist) :: res
238 FUNCTION xt_idxempty_new_c() &
239 bind(c, name=
'xt_idxempty_new') result(res_ptr)
242 TYPE(c_ptr) :: res_ptr
243 END FUNCTION xt_idxempty_new_c
246 res = xt_idxlist_c2f(xt_idxempty_new_c())
250 ELEMENTAL FUNCTION xt_bounds_eq(a, b)
RESULT(a_equals_b)
251 TYPE(xt_bounds),
INTENT(in) :: a, b
252 LOGICAL :: a_equals_b
253 a_equals_b = a%size == b%size .AND. a%start == b%start
254 END FUNCTION xt_bounds_eq
256 ELEMENTAL FUNCTION xt_bounds_ne(a, b)
RESULT(a_equals_b)
257 TYPE(xt_bounds),
INTENT(in) :: a, b
258 LOGICAL :: a_equals_b
259 a_equals_b = a%size /= b%size .OR. a%start /= b%start
260 END FUNCTION xt_bounds_ne
262 FUNCTION xt_idxmod_new_a1d(patch, modifier)
RESULT(res)
264 TYPE(xt_idxlist),
INTENT(in) :: patch
266 TYPE(xt_idxlist) :: res
268 INTEGER :: num_modifier
269 INTEGER(c_int) :: num_modifier_c
270 num_modifier =
SIZE(modifier)
271 IF (num_modifier > huge(1_c_int)) &
272 CALL xt_abort(
"number of modifiers too high", filename, __line__)
273 num_modifier_c = int(num_modifier, c_int)
275 num_modifier_c, c_null_ptr))
276 END FUNCTION xt_idxmod_new_a1d
278 FUNCTION xt_idxmod_new_a1d_a1d(patch, modifier, mstate)
RESULT(res)
280 TYPE(xt_idxlist),
INTENT(in) :: patch
282 INTEGER(c_int),
TARGET,
INTENT(inout) :: mstate(*)
283 TYPE(xt_idxlist) :: res
285 INTEGER :: num_modifier
286 INTEGER(c_int) :: num_modifier_c
287 num_modifier =
SIZE(modifier)
288 IF (num_modifier > huge(1_c_int)) &
289 CALL xt_abort(
"number of modifiers too high", filename, __line__)
290 num_modifier_c = int(num_modifier, c_int)
292 num_modifier_c, c_loc(mstate)))
293 END FUNCTION xt_idxmod_new_a1d_a1d
295 FUNCTION xt_idxmod_new_a1d_i4(patch, modifier, num_modifier)
RESULT(res)
297 TYPE(xt_idxlist),
INTENT(in) :: patch
299 INTEGER(i4),
INTENT(in) :: num_modifier
300 TYPE(xt_idxlist) :: res
301 INTEGER(c_int) :: num_modifier_c
303 num_modifier_c = int(num_modifier, c_int)
305 num_modifier_c, c_null_ptr))
306 END FUNCTION xt_idxmod_new_a1d_i4
308 FUNCTION xt_idxmod_new_a1d_i4_a1d(patch, modifier, num_modifier, mstate) &
311 TYPE(xt_idxlist),
INTENT(in) :: patch
313 INTEGER(i4),
INTENT(in) :: num_modifier
314 INTEGER(c_int),
TARGET,
INTENT(inout) :: mstate(*)
315 TYPE(xt_idxlist) :: res
316 INTEGER(c_int) :: num_modifier_c
318 num_modifier_c = int(num_modifier, c_int)
320 num_modifier_c, c_loc(mstate)))
321 END FUNCTION xt_idxmod_new_a1d_i4_a1d
323 FUNCTION xt_idxmod_new_a1d_i4_a2d(patch, modifier, num_modifier, mstate) &
326 TYPE(xt_idxlist),
INTENT(in) :: patch
328 INTEGER(i4),
INTENT(in) :: num_modifier
329 INTEGER(c_int),
TARGET,
INTENT(inout) :: mstate(1,*)
330 TYPE(xt_idxlist) :: res
331 INTEGER(c_int) :: num_modifier_c
333 num_modifier_c = int(num_modifier, c_int)
335 num_modifier_c, c_loc(mstate)))
336 END FUNCTION xt_idxmod_new_a1d_i4_a2d
subroutine, public set_abort_handler(f)
set routine f to use as abort function which is called on xt_abort
integer, parameter, public xt_int_kind
integer, parameter, public xt_int_mpidt
integer, parameter, public i4
external, public xt_slice_c_loc
external, public xt_idxlist_unpack_f
external, public xt_idxlist_pack_f
type(xt_idxlist) function, public xt_idxlist_c2f(idxlist)
type(xt_idxlist) function, public xt_idxfsection_new(start, global_size, local_size, local_start)
Fortran style version of xt_idxsection_new. Compared to xt_idxsection_new, here the elements of the v...
type(xt_redist) function, public xt_redist_c2f(redist)
type(xt_request), parameter, public xt_request_null
@, public xt_reorder_none
@, public xt_reorder_send_up
type(xt_xmap) function, public xt_xmap_c2f(xmap)
integer, parameter, public xt_reorder_type_kind
@, public xt_reorder_recv_up
describes range of positions starting with start up to start + size - 1 i.e. [start,...
int xt_exchanger_id_by_name(const char *name)
void xt_config_delete(Xt_config config)
void xt_config_set_exchange_method(Xt_config config, int method)
@ xt_exchanger_irecv_isend
@ xt_exchanger_irecv_send
@ xt_exchanger_irecv_isend_packed
@ xt_exchanger_neigh_alltoall
@ xt_exchanger_mix_isend_irecv
Xt_config xt_config_new(void)
int xt_config_get_exchange_method(Xt_config config)
void xt_initialize(MPI_Comm default_comm)
Xt_idxlist xt_idxempty_new(void)
int xt_idxlist_get_num_indices(Xt_idxlist idxlist)
int xt_idxlist_get_positions_of_indices(Xt_idxlist idxlist, const Xt_int *indices, int num_indices, int *positions, int single_match_only)
Xt_idxlist xt_idxlist_unpack(void *buffer, int buffer_size, int *position, MPI_Comm comm)
int xt_idxlist_get_index_at_position(Xt_idxlist idxlist, int position, Xt_int *index)
void xt_idxlist_get_indices(Xt_idxlist idxlist, Xt_int *indices)
int xt_idxlist_get_position_of_index_off(Xt_idxlist idxlist, Xt_int index, int *position, int offset)
void xt_idxlist_pack(Xt_idxlist idxlist, void *buffer, int buffer_size, int *position, MPI_Comm comm)
size_t xt_idxlist_get_pack_size(Xt_idxlist idxlist, MPI_Comm comm)
int xt_idxlist_get_indices_at_positions(Xt_idxlist idxlist, const int *positions, int num_pos, Xt_int *indices, Xt_int undef_idx)
void xt_idxlist_get_index_stripes(Xt_idxlist idxlist, struct Xt_stripe **stripes, int *num_stripes)
void xt_idxlist_get_bounding_box(Xt_idxlist idxlist, unsigned ndim, const Xt_int global_size[ndim], Xt_int global_start_index, struct Xt_bounds bounds[ndim])
int xt_idxlist_get_pos_exts_of_index_stripes(Xt_idxlist idxlist, int num_stripes, const struct Xt_stripe stripes[num_stripes], int *num_ext, struct Xt_pos_ext **pos_ext, int single_match_only)
Xt_idxlist xt_idxlist_get_intersection(Xt_idxlist idxlist_src, Xt_idxlist idxlist_dst)
Xt_idxlist xt_idxlist_copy(Xt_idxlist idxlist)
const Xt_int * xt_idxlist_get_indices_const(Xt_idxlist idxlist)
int xt_idxlist_get_position_of_index(Xt_idxlist idxlist, Xt_int index, int *position)
void xt_idxlist_delete(Xt_idxlist idxlist)
Xt_idxlist xt_idxlist_collection_new(Xt_idxlist *idxlists, int num_idxlists)
Xt_idxlist xt_idxmod_new(Xt_idxlist patch_idxlist, struct Xt_modifier *modifier, int modifier_num, int *mstate)
generates a new index list based on an index list and a sequence of modifiers
Xt_idxlist xt_idxsection_new(Xt_int start, int num_dimensions, const Xt_int global_size[num_dimensions], const int local_size[num_dimensions], const Xt_int local_start[num_dimensions])
Xt_idxlist xt_idxstripes_from_idxlist_new(Xt_idxlist idxlist_src)
Xt_idxlist xt_idxstripes_new(struct Xt_stripe const *stripes, int num_stripes)
Xt_idxlist xt_idxvec_from_stripes_new(const struct Xt_stripe *stripes, int num_stripes)
Xt_idxlist xt_idxvec_new(const Xt_int *idxlist, int num_indices)
void xt_redist_delete(Xt_redist redist)
int xt_redist_get_num_recv_msg(Xt_redist redist)
int xt_redist_get_num_send_msg(Xt_redist redist)
void xt_redist_a_exchange1(Xt_redist redist, const void *src_data, void *dst_data, Xt_request *request)
Xt_redist xt_redist_copy(Xt_redist redist)
void xt_redist_a_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data, Xt_request *request)
void xt_redist_s_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data)
void xt_redist_s_exchange1(Xt_redist redist, const void *src_data, void *dst_data)
Xt_redist xt_redist_collection_new(Xt_redist *redists, int num_redists, int cache_size, MPI_Comm comm)
Xt_redist xt_redist_collection_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_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_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_request_wait(Xt_request *request)
void xt_request_test(Xt_request *request, int *flag)
Xt_xmap xt_xmap_update_positions(Xt_xmap xmap, const int *src_positions, const int *dst_positions)
int xt_xmap_iterator_next(Xt_xmap_iter iter)
Xt_xmap xt_xmap_reorder(Xt_xmap xmap, enum xt_reorder_type type)
void xt_xmap_delete(Xt_xmap xmap)
Xt_xmap_iter xt_xmap_get_out_iterator(Xt_xmap xmap)
int xt_xmap_iterator_get_num_transfer_pos_ext(Xt_xmap_iter iter)
Xt_xmap xt_xmap_spread(Xt_xmap xmap, int num_repetitions, const int src_displacements[num_repetitions], const int dst_displacements[num_repetitions])
int const * xt_xmap_iterator_get_transfer_pos(Xt_xmap_iter iter)
void xt_xmap_iterator_delete(Xt_xmap_iter iter)
int xt_xmap_get_num_destinations(Xt_xmap xmap)
Xt_xmap xt_xmap_copy(Xt_xmap xmap)
int xt_xmap_iterator_get_rank(Xt_xmap_iter iter)
int xt_xmap_get_max_dst_pos(Xt_xmap xmap)
int xt_xmap_get_num_sources(Xt_xmap xmap)
void xt_xmap_get_source_ranks(Xt_xmap xmap, int *ranks)
const struct Xt_pos_ext * xt_xmap_iterator_get_transfer_pos_ext(Xt_xmap_iter iter)
Xt_xmap_iter xt_xmap_get_in_iterator(Xt_xmap xmap)
void xt_xmap_get_destination_ranks(Xt_xmap xmap, int *ranks)
int xt_xmap_get_max_src_pos(Xt_xmap xmap)
int xt_xmap_iterator_get_num_transfer_pos(Xt_xmap_iter iter)
Xt_xmap xt_xmap_all2all_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_dist_dir_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_dist_dir_intercomm_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm inter_comm, MPI_Comm intra_comm)
Xt_xmap xt_xmap_intersection_ext_new(int num_src_intersections, const struct Xt_com_list src_com[num_src_intersections], int num_dst_intersections, const struct Xt_com_list dst_com[num_dst_intersections], Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_intersection_pos_new(int num_src_msg, const struct Xt_com_pos src_com[num_src_msg], int num_dst_msg, const struct Xt_com_pos dst_com[num_dst_msg], MPI_Comm comm)
Xt_xmap xt_xmap_intersection_new(int num_src_intersections, const struct Xt_com_list src_com[num_src_intersections], int num_dst_intersections, const struct Xt_com_list dst_com[num_dst_intersections], Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_idxlist xt_idxlist_f2c(struct xt_idxlist_f *p)
Xt_xmap xt_xmap_f2c(struct xt_xmap_f *p)