45 INTEGER(KIND=JPIM),
PARAMETER ::
nthrds = 64
74 #if defined(VPP) || defined(NECSX) 85 INTEGER(KIND=JPIM) ::
nomp = -1
95 &int4_keysort_1d, int4_keysort_2d, &
96 &int8_keysort_1d, int8_keysort_2d, &
97 &real8_keysort_1d, real8_keysort_2d, &
98 &real4_keysort_1d, real4_keysort_2d
116 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: INEW
117 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(OUT) :: IOLD
118 INTEGER(KIND=JPIM) :: ITMP, IMYPROC, INPES
119 INTEGER(KIND=JPIM) :: ITID
120 CHARACTER(LEN=20) CLENV
121 LOGICAL,
SAVE :: LLFIRST = .true.
122 LOGICAL LLOMP, LLHOOK_OK
123 REAL(KIND=JPRB) :: ZHOOK_HANDLE
125 llhook_ok =
lhook .AND. (
PRESENT(inew) .OR.
PRESENT(iold))
126 IF (llhook_ok)
CALL dr_hook(
'ECSORT_MIX:INT_SORTING_METHOD',0,zhook_handle)
131 IF (
PRESENT(inew))
THEN 133 ELSE IF (.NOT.llomp)
THEN 141 CALL get_environment_variable(
'EC_SORTING_INFO',clenv)
142 IF (clenv /=
' ')
THEN 144 READ(clenv,
'(i20)',end=89,err=89) itmp
151 ELSE IF (itmp >= 1 .AND. itmp <= inpes)
THEN 156 imyproc = mpl_myrank()
160 CALL get_environment_variable(
'EC_SORTING_METHOD',clenv)
161 IF (clenv /=
' ')
THEN 162 IF (imyproc ==
nsinfo)
WRITE(0,
'(a)')
'<EC_SORTING_METHOD='//
trim(clenv)
165 CASE (
'RADIX',
'RADIXSORT')
167 CASE (
'HEAP',
'HEAPSORT')
169 CASE (
'QUICK',
'QUICKSORT',
'QSORT')
171 CASE (
'COUNT',
'COUNTINGSORT',
'COUNTSORT')
173 CASE (
'GNOME',
'GNOMESORT')
175 CASE (
'DEFAULT',
'DEF')
178 READ(clenv,
'(i20)',end=99,err=99) itmp
193 CALL get_environment_variable(
'EC_SORTING_NOMP',clenv)
194 IF (clenv /=
' ')
THEN 195 IF (imyproc ==
nsinfo)
WRITE(0,
'(a)')
'<EC_SORTING_NOMP='//
trim(clenv)
196 READ(clenv,
'(i20)',end=199,err=199) itmp
204 IF (imyproc ==
nsinfo)
THEN 205 WRITE(clenv,
'(i20)')
nomp 206 WRITE(0,
'(a)')
'>EC_SORTING_NOMP='//
trim(adjustl(clenv))
220 IF (llhook_ok)
CALL dr_hook(
'ECSORT_MIX:INT_SORTING_METHOD',1,zhook_handle)
225 CHARACTER(LEN=*),
INTENT(IN) :: CDNEW
226 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(OUT) :: IOLD
227 CHARACTER(LEN=LEN(CDNEW)) CLNEW
228 REAL(KIND=JPRB) :: ZHOOK_HANDLE
229 IF (
lhook)
CALL dr_hook(
'ECSORT_MIX:STR_SORTING_METHOD',0,zhook_handle)
233 CASE (
'RADIX',
'RADIXSORT')
235 CASE (
'HEAP',
'HEAPSORT')
237 CASE (
'QUICK',
'QUICKSORT',
'QSORT')
239 CASE (
'COUNT',
'COUNTINGSORT',
'COUNTSORT')
241 CASE (
'GNOME',
'GNOMESORT')
243 CASE (
'DEFAULT',
'DEF')
248 IF (
lhook)
CALL dr_hook(
'ECSORT_MIX:STR_SORTING_METHOD',1,zhook_handle)
253 INTEGER(KIND=JPIM),
INTENT(OUT):: INDEX(:)
254 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: INDEX_ADJ
255 INTEGER(KIND=JPIM) :: I, N
256 REAL(KIND=JPRB) :: ZHOOK_HANDLE
257 IF (
lhook)
CALL dr_hook(
'ECSORT_MIX:INIT_INDEX',0,zhook_handle)
259 IF (
PRESENT(index_adj))
THEN 261 index(i) = i + index_adj
268 IF (
lhook)
CALL dr_hook(
'ECSORT_MIX:INIT_INDEX',1,zhook_handle)
273 INTEGER(KIND=JPIM),
INTENT(INOUT):: INDEX(:)
274 INTEGER(KIND=JPIM),
INTENT(IN) :: INDEX_ADJ
275 INTEGER(KIND=JPIM) :: I, N
276 REAL(KIND=JPRB) :: ZHOOK_HANDLE
277 IF (
lhook)
CALL dr_hook(
'ECSORT_MIX:ADJUST_INDEX',0,zhook_handle)
278 IF (index_adj /= 0)
THEN 281 index(i) = index(i) + index_adj
284 IF (
lhook)
CALL dr_hook(
'ECSORT_MIX:ADJUST_INDEX',1,zhook_handle)
288 SUBROUTINE get_rank(INDEX, RANK, INDEX_ADJ)
289 INTEGER(KIND=JPIM),
INTENT(IN) :: INDEX(:)
290 INTEGER(KIND=JPIM),
INTENT(OUT):: RANK(:)
291 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: INDEX_ADJ
292 INTEGER(KIND=JPIM) :: I, N
293 REAL(KIND=JPRB) :: ZHOOK_HANDLE
294 IF (
lhook)
CALL dr_hook(
'ECSORT_MIX:GET_RANK',0,zhook_handle)
295 n = min(
SIZE(index),
SIZE(rank))
296 IF (
PRESENT(index_adj))
THEN 298 rank(index(i)+index_adj) = i
305 IF (
lhook)
CALL dr_hook(
'ECSORT_MIX:GET_RANK',1,zhook_handle)
313 #define INT_VERSION 4 314 #define REAL_VERSION 0 315 #include "ecsort_shared.h" 320 #define INT_VERSION 8 321 #define REAL_VERSION 0 322 #include "ecsort_shared.h" 327 #define INT_VERSION 0 328 #define REAL_VERSION 4 329 #include "ecsort_shared.h" 334 #define INT_VERSION 0 335 #define REAL_VERSION 8 336 #include "ecsort_shared.h" integer(kind=jpim), parameter quicksort_method
static const char * trim(const char *name, int *n)
subroutine str_sorting_method(CDNEW, IOLD)
integer(kind=jpim), parameter gnomesort_method
integer(kind=jpim), parameter nthrds
integer(kind=jpim), parameter sizeof_int4
subroutine, public init_index(INDEX, INDEX_ADJ)
integer(kind=jpim), parameter min_method
integer(kind=jpim), parameter sizeof_int8
character(len=12), dimension(min_method:max_method), parameter method_name
subroutine, public adjust_index(INDEX, INDEX_ADJ)
logical function, public oml_in_parallel()
integer(kind=jpim), parameter heapsort_method
integer(kind=jpim), parameter sizeof_real8
integer(kind=jpim), parameter max_method
integer(kind=jpim), parameter sizeof_real4
subroutine, public get_rank(INDEX, RANK, INDEX_ADJ)
integer(kind=jpim) function, public oml_my_thread()
integer(kind=jpim), parameter radixsort_method
integer(kind=jpim) nsinfo
subroutine, public toupper(CDS)
integer(kind=jpim) function, public oml_max_threads()
integer(kind=jpim), dimension(nthrds) current_method
quick &counting sorts only inumt inumt nomp
integer(kind=jpim) default_method
subroutine int_sorting_method(INEW, IOLD)
integer(kind=jpim), parameter countingsort_method