48#include "fc_feature_defs.inc"
54 USE xt_core,
ONLY: i4, xt_int_kind, xt_int_mpidt, &
58 xt_set_abort_handler => set_abort_handler, xt_restore_default_abort_hndl
78 USE xt_sort,
ONLY: xt_sort_int, xt_sort_index, xt_sort_idxpos, &
79 xt_sort_permutation, xt_assign_id_map
80 USE xt_idxlist_abstract,
ONLY: &
114 xt_reorder_type_kind, xt_reorder_none, xt_reorder_send_up, &
122#ifdef XT_HAVE_FC_HLF_STRUCT_RETURN
123 USE xt_xmap_dist_dir_bucket_gen2,
ONLY: &
126 xt_dist_dir_bucket_gen_type_send, &
127 xt_dist_dir_bucket_gen_type_recv, &
128 xt_dist_dir_bucket_gen_type_sendrecv
146 xt_redist_get_recv_mpi_datatype, xt_redist_get_send_mpi_datatype, &
156 xt_is_null, xt_request_null
159 USE iso_c_binding,
ONLY: c_int, c_ptr, c_null_ptr, c_loc
166 xt_set_abort_handler, xt_restore_default_abort_hndl, &
194 xt_reorder_type_kind, &
195 xt_reorder_none, xt_reorder_send_up, xt_reorder_recv_up, &
210 xt_redist_get_mpi_comm, &
211 xt_redist_get_recv_mpi_datatype, xt_redist_get_send_mpi_datatype, &
216 OPERATOR(==),
OPERATOR(/=), char, &
220 PUBLIC :: xt_mpi_fint_kind, &
226#ifdef XT_HAVE_FC_HLF_STRUCT_RETURN
229 xt_dist_dir_bucket_gen_type_send, &
230 xt_dist_dir_bucket_gen_type_recv, &
231 xt_dist_dir_bucket_gen_type_sendrecv
234 PUBLIC :: xt_sort_int, xt_sort_index, xt_sort_idxpos, xt_sort_permutation, &
268 INTERFACE OPERATOR(==)
269 MODULE PROCEDURE xt_bounds_eq
270 END INTERFACE OPERATOR(==)
272 INTERFACE OPERATOR(/=)
273 MODULE PROCEDURE xt_bounds_ne
274 END INTERFACE OPERATOR(/=)
276 TYPE,
BIND(C),
PUBLIC :: xt_modifier
279 INTEGER(c_int) :: mask
283 FUNCTION xt_idxmod_new_c(patch, modifier, modifier_num, mstate_ptr) &
284 bind(c, name=
'xt_idxmod_new') result(res)
287 TYPE(c_ptr),
VALUE,
INTENT(in) :: patch
288 INTEGER(c_int),
VALUE,
INTENT(in) :: modifier_num
289 TYPE(
xt_modifier),
INTENT(in) :: modifier(modifier_num)
290 TYPE(c_ptr),
VALUE,
INTENT(in) :: mstate_ptr
292 END FUNCTION xt_idxmod_new_c
296 MODULE PROCEDURE xt_idxmod_new_a1d
297 MODULE PROCEDURE xt_idxmod_new_a1d_a1d
298 MODULE PROCEDURE xt_idxmod_new_a1d_i4
299 MODULE PROCEDURE xt_idxmod_new_a1d_i4_a1d
300 MODULE PROCEDURE xt_idxmod_new_a1d_i4_a2d
302 CHARACTER(len=*),
PARAMETER :: filename =
'yaxt.f90'
310 FUNCTION xt_idxempty_new_c() &
311 bind(c, name=
'xt_idxempty_new') result(res_ptr)
314 TYPE(c_ptr) :: res_ptr
315 END FUNCTION xt_idxempty_new_c
318 res = xt_idxlist_c2f(xt_idxempty_new_c())
322 ELEMENTAL FUNCTION xt_bounds_eq(a, b)
RESULT(a_equals_b)
324 LOGICAL :: a_equals_b
325 a_equals_b = a%size == b%size .AND. a%start == b%start
326 END FUNCTION xt_bounds_eq
328 ELEMENTAL FUNCTION xt_bounds_ne(a, b)
RESULT(a_equals_b)
330 LOGICAL :: a_equals_b
331 a_equals_b = a%size /= b%size .OR. a%start /= b%start
332 END FUNCTION xt_bounds_ne
334 FUNCTION xt_idxmod_new_a1d(patch, modifier)
RESULT(res)
340 INTEGER :: num_modifier
341 INTEGER(c_int) :: num_modifier_c
342 num_modifier =
SIZE(modifier)
343 IF (num_modifier > huge(1_c_int)) &
344 CALL xt_abort(
"number of modifiers too high", filename, __line__)
345 num_modifier_c = int(num_modifier, c_int)
346 res = xt_idxlist_c2f(xt_idxmod_new_c(
xt_idxlist_f2c(patch), modifier, &
347 num_modifier_c, c_null_ptr))
348 END FUNCTION xt_idxmod_new_a1d
350 FUNCTION xt_idxmod_new_a1d_a1d(patch, modifier, mstate)
RESULT(res)
354 INTEGER(c_int),
TARGET,
INTENT(inout) :: mstate(*)
357 INTEGER :: num_modifier
358 INTEGER(c_int) :: num_modifier_c
359 num_modifier =
SIZE(modifier)
360 IF (num_modifier > huge(1_c_int)) &
361 CALL xt_abort(
"number of modifiers too high", filename, __line__)
362 num_modifier_c = int(num_modifier, c_int)
363 res = xt_idxlist_c2f(xt_idxmod_new_c(
xt_idxlist_f2c(patch), modifier, &
364 num_modifier_c, c_loc(mstate)))
365 END FUNCTION xt_idxmod_new_a1d_a1d
367 FUNCTION xt_idxmod_new_a1d_i4(patch, modifier, num_modifier)
RESULT(res)
371 INTEGER(i4),
INTENT(in) :: num_modifier
373 INTEGER(c_int) :: num_modifier_c
375 num_modifier_c = int(num_modifier, c_int)
376 res = xt_idxlist_c2f(xt_idxmod_new_c(
xt_idxlist_f2c(patch), modifier, &
377 num_modifier_c, c_null_ptr))
378 END FUNCTION xt_idxmod_new_a1d_i4
380 FUNCTION xt_idxmod_new_a1d_i4_a1d(patch, modifier, num_modifier, mstate) &
385 INTEGER(i4),
INTENT(in) :: num_modifier
386 INTEGER(c_int),
TARGET,
INTENT(inout) :: mstate(*)
388 INTEGER(c_int) :: num_modifier_c
390 num_modifier_c = int(num_modifier, c_int)
391 res = xt_idxlist_c2f(xt_idxmod_new_c(
xt_idxlist_f2c(patch), modifier, &
392 num_modifier_c, c_loc(mstate)))
393 END FUNCTION xt_idxmod_new_a1d_i4_a1d
395 FUNCTION xt_idxmod_new_a1d_i4_a2d(patch, modifier, num_modifier, mstate) &
400 INTEGER(i4),
INTENT(in) :: num_modifier
401 INTEGER(c_int),
TARGET,
INTENT(inout) :: mstate(1,*)
403 INTEGER(c_int) :: num_modifier_c
405 num_modifier_c = int(num_modifier, c_int)
406 res = xt_idxlist_c2f(xt_idxmod_new_c(
xt_idxlist_f2c(patch), modifier, &
407 num_modifier_c, c_loc(mstate)))
408 END FUNCTION xt_idxmod_new_a1d_i4_a2d
describes range of positions starting with start up to start + size - 1 i.e. [start,...
void xt_config_set_xmap_stripe_align(Xt_config config, int use_stripe_align)
void xt_config_set_idxvec_autoconvert_size(Xt_config config, int cnvsize)
void xt_config_set_redist_mthread_mode(Xt_config config, int mode)
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)
void xt_config_set_sort_algorithm_by_id(Xt_config config, int algo)
int xt_config_get_mem_saving(Xt_config config)
void xt_config_set_mem_saving(Xt_config config, int memconserve)
@ xt_exchanger_irecv_isend
@ xt_exchanger_irecv_send
@ xt_exchanger_irecv_isend_packed
@ xt_exchanger_irecv_isend_ddt_packed
@ xt_exchanger_neigh_alltoall
@ xt_exchanger_mix_isend_irecv
int xt_config_get_sort_algorithm_id(Xt_config config)
Xt_xmdd_bucket_gen xt_config_get_xmdd_bucket_gen(Xt_config config)
int xt_config_get_redist_mthread_mode(Xt_config config)
Xt_config xt_config_new(void)
void xt_config_set_xmdd_bucket_gen(Xt_config config, Xt_xmdd_bucket_gen bucket_gen_iface)
int xt_config_get_xmap_stripe_align(Xt_config config)
int xt_config_get_idxvec_autoconvert_size(Xt_config config)
int xt_config_get_exchange_method(Xt_config config)
void xt_initialize(MPI_Comm default_comm)
Xt_idxlist xt_idxempty_new(void)
Xt_idxlist xt_idxlist_sorted_copy(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)
Xt_int xt_idxlist_get_min_index(Xt_idxlist idxlist)
int xt_idxlist_is_stripe_conversion_profitable(Xt_idxlist idxlist, Xt_config config)
const Xt_int * xt_idxlist_get_indices_const(Xt_idxlist idxlist)
int xt_idxlist_get_index_at_position(Xt_idxlist idxlist, int position, Xt_int *index)
Xt_int xt_idxlist_get_max_index(Xt_idxlist idxlist)
void xt_idxlist_get_indices(Xt_idxlist idxlist, Xt_int *indices)
int xt_idxlist_get_num_index_stripes(Xt_idxlist idxlist)
int xt_idxlist_get_position_of_index_off(Xt_idxlist idxlist, Xt_int index, int *position, int offset)
Xt_idxlist xt_idxlist_sorted_copy_custom(Xt_idxlist idxlist, Xt_config config)
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)
int xt_idxlist_get_sorting(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)
#define xt_idxlist_get_num_indices(idxlist)
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_mpi_comm_mark_exclusive(MPI_Comm comm)
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_s_exchange(Xt_redist redist, int num_arrays, const void *const src_data[], void *const dst_data[])
void xt_redist_a_exchange(Xt_redist redist, int num_arrays, const void *const src_data[], void *const dst_data[], Xt_request *request)
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_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_aext_new(Xt_xmap xmap, int num_src_ext, const struct Xt_aoffset_ext src_extents[], int num_dst_ext, const struct Xt_aoffset_ext dst_extents[], 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])
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)
const struct Xt_pos_ext * xt_xmap_iterator_get_transfer_pos_ext(Xt_xmap_iter iter)
void xt_xmap_get_source_ranks(Xt_xmap xmap, int *ranks)
Xt_xmap xt_xmap_reorder_custom(Xt_xmap xmap, enum xt_reorder_type type, Xt_config config)
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)
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_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm, Xt_config config)
Xt_xmap xt_xmap_dist_dir_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm, Xt_config config)
void xt_xmdd_bucket_gen_define_interface(Xt_xmdd_bucket_gen gen, Xt_xmdd_bucket_gen_init_state init, Xt_xmdd_bucket_gen_destroy_state destroy, Xt_xmdd_bucket_gen_get_intersect_max_num get_intersect_max_num, Xt_xmdd_bucket_gen_next next, size_t gen_state_size, void *init_params)
Xt_xmdd_bucket_gen xt_xmdd_bucket_gen_new(void)
void xt_xmdd_bucket_gen_delete(Xt_xmdd_bucket_gen gen)
Xt_xmap xt_xmap_dist_dir_intercomm_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm inter_comm, MPI_Comm intra_comm, Xt_config config)
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_redist xt_redist_f2c(struct xt_redist_f *p)
Xt_xmdd_bucket_gen xt_xmdd_bucket_gen_f2c(struct xt_xmdd_bucket_gen_f *p)
Xt_idxlist xt_idxlist_f2c(struct xt_idxlist_f *p)
Xt_xmap xt_xmap_f2c(struct xt_xmap_f *p)