48#include "fc_feature_defs.inc"
50 use,
INTRINSIC :: iso_c_binding, only: c_int, c_size_t
51 USE xt_core,
ONLY: xt_abort, xt_int_kind
57 IMPORT :: c_int, c_size_t
58 INTEGER(c_size_t),
VALUE,
INTENT(in) :: n
59 INTEGER(c_int),
INTENT(inout) :: a(n)
61 MODULE PROCEDURE xt_sort_int_a
62 END INTERFACE xt_sort_int
65 INTERFACE xt_sort_xt_int
67 IMPORT :: xt_int_kind, c_size_t
68 INTEGER(c_size_t),
VALUE,
INTENT(in) :: n
69 INTEGER(xt_int_kind),
INTENT(inout) :: a(n)
71 MODULE PROCEDURE xt_sort_xt_int_a
72 END INTERFACE xt_sort_xt_int
73 PUBLIC :: xt_sort_xt_int
75 INTERFACE xt_sort_index
77 bind(c, name=
'xt_sort_index_f2c')
78 IMPORT :: c_int, xt_int_kind
79 INTEGER(c_int),
VALUE,
INTENT(in) :: n, reset_positions
80 INTEGER(xt_int_kind),
INTENT(inout) :: a(n)
81 INTEGER(c_int),
INTENT(inout) :: positions(n)
83 MODULE PROCEDURE xt_sort_index_a_a_l
84 END INTERFACE xt_sort_index
85 PUBLIC :: xt_sort_index
87 INTERFACE xt_sort_permutation
88#if XT_FC_XT_INT_FC_NUMERIC_KIND != XT_FC_C_INT_FC_NUMERIC_KIND
90 bind(c, name=
'xt_sort_xt_int_permutation_f2c')
91 IMPORT :: c_int, c_size_t, xt_int_kind
92 INTEGER(c_size_t),
VALUE,
INTENT(in) :: n
93 INTEGER(xt_int_kind),
INTENT(inout) :: a(n)
94 INTEGER(c_int),
INTENT(inout) :: permutation(n)
96 MODULE PROCEDURE xt_sort_xt_int_permutation
99 bind(c, name=
'xt_sort_int_permutation_f2c')
100 IMPORT :: c_int, c_size_t
101 INTEGER(c_size_t),
VALUE,
INTENT(in) :: n
102 INTEGER(c_int),
INTENT(inout) :: a(n), permutation(n)
104 MODULE PROCEDURE xt_sort_int_permutation
105 END INTERFACE xt_sort_permutation
106 PUBLIC :: xt_sort_permutation
108 INTERFACE xt_sort_xt_int_permutation
110 bind(c, name=
'xt_sort_xt_int_permutation_f2c')
111 IMPORT :: c_int, c_size_t, xt_int_kind
112 INTEGER(c_size_t),
VALUE,
INTENT(in) :: n
113 INTEGER(xt_int_kind),
INTENT(inout) :: a(n)
114 INTEGER(c_int),
INTENT(inout) :: permutation(n)
116 MODULE PROCEDURE xt_sort_xt_int_permutation
117 END INTERFACE xt_sort_xt_int_permutation
118 PUBLIC :: xt_sort_xt_int_permutation
120 TYPE,
BIND(c),
PUBLIC :: xt_idxpos
121 INTEGER(xt_int_kind) :: idx
122 INTEGER(c_int) :: pos
125 INTERFACE xt_sort_idxpos
128 INTEGER(c_size_t),
VALUE,
INTENT(in) :: n
131 MODULE PROCEDURE xt_sort_idxpos_a
132 END INTERFACE xt_sort_idxpos
133 PUBLIC :: xt_sort_idxpos
135 INTERFACE xt_assign_id_map
137 bind(c, name=
'xt_assign_id_map_int')
138 IMPORT :: c_int, c_size_t
139 INTEGER(c_size_t),
VALUE,
INTENT(in) :: n
140 INTEGER(c_int),
INTENT(out) :: a(n)
141 INTEGER(c_int),
VALUE,
INTENT(in) :: ofs
143 MODULE PROCEDURE xt_assign_id_map_a
144 MODULE PROCEDURE xt_assign_id_map_ai
145 END INTERFACE xt_assign_id_map
146 PUBLIC :: xt_assign_id_map
148 CHARACTER(len=*),
PARAMETER :: filename =
'xt_sort_f.f90'
150 SUBROUTINE xt_sort_int_a(a)
151 INTEGER(c_int),
INTENT(inout) :: a(:)
155 END SUBROUTINE xt_sort_int_a
157 SUBROUTINE xt_sort_xt_int_a(a)
158 INTEGER(xt_int_kind),
INTENT(inout) :: a(:)
162 END SUBROUTINE xt_sort_xt_int_a
164 SUBROUTINE xt_sort_index_a_a_l(a, positions, reset_positions)
165 INTEGER(xt_int_kind),
INTENT(inout) :: a(:)
166 INTEGER(c_int),
INTENT(inout) :: positions(:)
167 LOGICAL,
INTENT(in) :: reset_positions
168 INTEGER(c_int) :: a_size, reset_positions_c
169 a_size = int(
SIZE(a), c_int)
170 reset_positions_c = merge(1_c_int, 0_c_int, reset_positions)
171 IF (a_size >
SIZE(positions)) &
172 CALL xt_abort(
"positions array too small", filename, __line__)
175 END SUBROUTINE xt_sort_index_a_a_l
177 SUBROUTINE xt_sort_idxpos_a(a)
182 END SUBROUTINE xt_sort_idxpos_a
184 SUBROUTINE xt_sort_xt_int_permutation(a, permutation)
185 INTEGER(c_int),
INTENT(inout) :: a(:), permutation(:)
186 INTEGER(c_size_t) :: a_size
187#ifdef HAVE_SIZE_KIND_ARGUMENT
188 a_size =
SIZE(a, kind=c_size_t)
190 a_size = int(
SIZE(a), kind=c_size_t)
193 END SUBROUTINE xt_sort_xt_int_permutation
195 SUBROUTINE xt_sort_int_permutation(a, permutation)
196 INTEGER(c_int),
INTENT(inout) :: a(:), permutation(:)
197 INTEGER(c_size_t) :: a_size
198#ifdef HAVE_SIZE_KIND_ARGUMENT
199 a_size =
SIZE(a, kind=c_size_t)
201 a_size = int(
SIZE(a), kind=c_size_t)
204 END SUBROUTINE xt_sort_int_permutation
206 SUBROUTINE xt_assign_id_map_a(a)
207 INTEGER(c_int),
INTENT(out) :: a(:)
208 INTEGER(c_size_t) :: n
209 INTEGER(c_int) :: ofs
210#ifdef HAVE_SIZE_KIND_ARGUMENT
211 n =
SIZE(a, kind=c_size_t)
213 n = int(
SIZE(a), kind=c_size_t)
219 END SUBROUTINE xt_assign_id_map_a
221 SUBROUTINE xt_assign_id_map_ai(a, ofs)
222 INTEGER(c_int),
INTENT(out) :: a(:)
223 INTEGER(c_int),
INTENT(in) :: ofs
224 INTEGER(c_size_t) :: n
225#ifdef HAVE_SIZE_KIND_ARGUMENT
226 n =
SIZE(a, kind=c_size_t)
228 n = int(
SIZE(a), kind=c_size_t)
233 END SUBROUTINE xt_assign_id_map_ai
void xt_assign_id_map_int(size_t n, int *restrict a, int ofs)
void xt_sort_xt_int_permutation_f2c(Xt_int *a, size_t n, int *permutation)
void xt_sort_int_f2c(int *a, size_t n)
void xt_sort_xt_int_f2c(Xt_int *a, size_t n)
void xt_sort_int_permutation_f2c(int *a, size_t n, int *permutation)
void xt_sort_idxpos_f2c(idxpos_type *a, size_t n)
void xt_sort_index_f2c(Xt_int *restrict a, int n, int *restrict idx, int reset_index)