Line data Source code
1 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3 : !!!! !!!!
4 : !!!! ParaMonte: Parallel Monte Carlo and Machine Learning Library. !!!!
5 : !!!! !!!!
6 : !!!! Copyright (C) 2012-present, The Computational Data Science Lab !!!!
7 : !!!! !!!!
8 : !!!! This file is part of the ParaMonte library. !!!!
9 : !!!! !!!!
10 : !!!! LICENSE !!!!
11 : !!!! !!!!
12 : !!!! https://github.com/cdslaborg/paramonte/blob/main/LICENSE.md !!!!
13 : !!!! !!!!
14 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
15 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16 :
17 : !> \brief
18 : !> This module contains procedures and generic interfaces for obtaining the **Ordinal Ranking** of the elements of arrays of various types.
19 : !>
20 : !> \details
21 : !> Depending on the applications, the rank of the elements of an array can be defined in different ways:
22 : !>
23 : !> <ol>
24 : !>
25 : !> <li> <b>Ordinal ranking (`1234`) ranking:</b> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal) or [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
26 : !> This kind of ranking of values is widely known as ordinal (`1234`) ranking.<br>
27 : !> In ordinal ranking, all items receive distinct ordinal numbers, including items that compare equal.<br>
28 : !> The assignment of distinct ordinal numbers to items that compare equal can be done at random, or arbitrarily,
29 : !> but it is generally preferable to use a system that is arbitrary but consistent,
30 : !> as this gives stable results if the ranking is done multiple times.<br>
31 : !> In computer data processing, ordinal ranking is also referred to as <b>row numbering</b>.
32 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the <b>ordinal ranking</b> `1234`.<br>
33 : !>
34 : !> <li> <b>Standard competition (`1224`) ranking:</b> [getRankStandard](@ref pm_arrayRank::getRankStandard) or [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
35 : !> This kind of ranking of values is widely known as Standard Competition (`1224`) ranking.<br>
36 : !> In Standard Competition ranking, items that compare equal receive the same ranking number,
37 : !> and then a gap is left in the ranking numbers. The number of ranking numbers that are left out
38 : !> in this gap is one less than the number of items that compared equal.<br>
39 : !> Equivalently, the ranking number of each item is `1` plus the number of items ranked above it.<br>
40 : !> This ranking strategy is frequently adopted for competitions, as it means that if two (or more) competitors
41 : !> tie for a position in the ranking, and the position of all those ranked below them is unaffected
42 : !> (i.e., a competitor only comes second if exactly one person scores better than them,
43 : !> third if exactly two people score better than them, fourth if exactly three people score better than them, etc.).<br>
44 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number `1` (*first*),
45 : !> *B* gets ranking number `2` (*joint second*), *C* also gets ranking number `2` (*joint second*) and *D* gets ranking number `4` (*fourth*).<br>
46 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the Standard Competition ranking `1224`.<br>
47 : !>
48 : !> <li> <b>Modified competition (`1334`) ranking:</b> [getRankModified](@ref pm_arrayRank::getRankModified) or [setRankModified](@ref pm_arrayRank::setRankModified)<br>
49 : !> This kind of ranking of values is widely known as Modified Competition (`1334`) ranking.<br>
50 : !> Sometimes, competition ranking is done by leaving the gaps in the ranking numbers before the sets of equal-ranking items
51 : !> (rather than after them as in Standard Competition ranking).<br>
52 : !> The number of ranking numbers that are left out in this gap
53 : !> remains one less than the number of items that compared equal.<br>
54 : !> Equivalently, the ranking number of each item is equal to the number of items ranked equal to it or above it.<br>
55 : !> This ranking ensures that a competitor only comes second if they score higher than all but one of their opponents,
56 : !> third if they score higher than all but two of their opponents, etc.<br>
57 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked head of *D*, then *A* gets ranking
58 : !> number `1` (*first*), *B* gets ranking number `3` (*joint third*), *C* also gets ranking number `3` (*joint third*)
59 : !> and *D* gets ranking number `4` (*fourth*). In this case, nobody would get ranking number `2` (*second*) (left as a gap).<br>
60 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the Modified Competition ranking `1334`.<br>
61 : !>
62 : !> <li> <b>Dense (`1223`) ranking:</b> [getRankDense](@ref pm_arrayRank::getRankDense) or [setRankDense](@ref pm_arrayRank::setRankDense)<br>
63 : !> This kind of ranking of values is widely known as dense (`1223`) ranking.<br>
64 : !> In Dense ranking, items that compare equally receive the same ranking number, and the next items receive the immediately following ranking number.<br>
65 : !> Equivalently, the ranking number of each item is `1` plus the number of items ranked above it that are distinct with respect to the ranking order.<br>
66 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number 1 (*first*), *B* gets
67 : !> ranking number `2` (*joint second*), *C* also gets ranking number `2` (*joint second*) and *D* gets ranking number `3` (*Third*).<br>
68 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the Dense ranking `1223`.<br>
69 : !> Dense ranking effective factorizes the array into classes of unique values.<br>
70 : !> Therefore, the Dense rank of each element of the array is simply its class <b>level</b>.
71 : !>
72 : !> <li> <b>Fractional (`1 2.5 2.5 4`) ranking:</b> [getRankFractional](@ref pm_arrayRank::getRankFractional) or [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
73 : !> This kind of ranking of values is widely known as fractional (`1 2.5 2.5 4`) ranking.<br>
74 : !> In Fractional ranking, items that compare equal receive the same ranking number, which is the mean of what they would have under ordinal rankings;<br>
75 : !> Equivalently, the ranking number of 1 plus the number of items ranked above it plus half the number of items equal to it.<br>
76 : !> This strategy has the property that the sum of the ranking numbers is the same as under ordinal ranking.<br>
77 : !> For this reason, it is used in computing Borda counts and ranking statistics (e.g., Spearman Correlation).<br>
78 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number `1` (*first*),
79 : !> *B* and *C* each get ranking number `2.5` (average of *joint second/third*) and *D* gets ranking number `4` (*fourth*).<br>
80 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the Fractional ranking `1223`.<br>
81 : !> <b>Example:</b><br>
82 : !> Suppose the data set is `1.0, 1.0, 2.0, 3.0, 3.0, 4.0, 5.0, 5.0, 5.0`.<br>
83 : !> The ordinal ranks are `1, 2, 3, 4, 5, 6, 7, 8, 9`.<br>
84 : !> For `v = 1.0`, the Fractional rank is the average of the ordinal ranks: `(1 + 2) / 2 = 1.5`.<br>
85 : !> In a similar manner, for `v = 5.0`, the Fractional rank is `(7 + 8 + 9) / 3 = 8.0`.<br>
86 : !> Thus the Fractional ranks are: `1.5, 1.5, 3.0, 4.5, 4.5, 6.0, 8.0, 8.0, 8.0`<br>
87 : !>
88 : !> </ol>
89 : !>
90 : !> \warning
91 : !> The support for ranking of string containers is disabled when the library is built with
92 : !> the GNU Fortran compiler because of the lack of support for Parameterized Derived Types (PDTs) in gfortran.
93 : !>
94 : !> \note
95 : !> Obtaining the **ordinal ranking** of an array is very similar to obtaining the sorted indices of the array.<br>
96 : !> For more information see this [article](https://en.wikipedia.org/wiki/Ranking).<br>
97 : !>
98 : !> \todo
99 : !> \plow
100 : !> The relevant benchmarks comparing the functional and subroutine interfaces should be added here.<br>
101 : !>
102 : !> \todo
103 : !> \pvhigh
104 : !> Support for ranking of arrays of PDTs must be enabled again as soon as gfortran supports PDTs.<br>
105 : !>
106 : !> \todo
107 : !> \phigh
108 : !> An optional argument `sorted` must be added to all interfaces within this module to
109 : !> allow fast computation of the rankings of previously sorted arrays without redundant resorting.<br>
110 : !>
111 : !> \test
112 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)<br>
113 : !>
114 : !> \todo
115 : !> \pmed
116 : !> The generic interfaces of this module must be extended to support rankings of matrices along a specified dimension.<br>
117 : !> Such a pattern occurs, for example, in computing the [Spearman rank correlation matrix](@ref pm_sampleCor).<br>
118 : !>
119 : !> \todo
120 : !> \pmed
121 : !> The current implementation of the generic ranking interfaces of this module are separated from each other.<br>
122 : !> However, it may be preferrable to merge all generic interfaces into single interface bindings `getRank()` and `setRank()`.<br>
123 : !> Consequently, an extra argument of class [rank_type](@ref pm_arrayRank::rank_type) must be added to all procedure interfaces to make them distinguishable.<br>
124 : !> For now, the procedures for different ranking methods were are under separate generic interface names, because of the complexity in the merging of the
125 : !> fractional ranking procedures (which output `real` ranks of default kind \RK) with the rest (which output `integer` ranks of default kind \IK).<br>
126 : !>
127 : !> \finmain
128 : !>
129 : !> \author
130 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
131 :
132 : ! \copydetails pm_arrayRank
133 :
134 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
135 :
136 : module pm_arrayRank
137 :
138 : use pm_kind, only: SK, IK, LK
139 :
140 : implicit none
141 :
142 : character(*,SK), parameter :: MODULE_NAME = "@pm_arrayRank"
143 :
144 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
145 :
146 : !> \brief
147 : !> This is an `abstract` derived type for constructing concrete derived types to
148 : !> distinguish various procedure signatures that require different forms of array ranking (dense, fractional, modified, ordinal, standard, ...).<br>
149 : !>
150 : !> \details
151 : !> This `abstract` derived type is not meant to be directly accessed by the end users.<br>
152 : !> Instead, the end users must use `parameter` objects instantiated from the concrete subclasses of this parent `abstract` derived type.<br>
153 : !>
154 : !> \see
155 : !> [dense](@ref pm_arrayRank::dense)<br>
156 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
157 : !> [modified](@ref pm_arrayRank::modified)<br>
158 : !> [standard](@ref pm_arrayRank::standard)<br>
159 : !> [fractional](@ref pm_arrayRank::fractional)<br>
160 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
161 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
162 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
163 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
164 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
165 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
166 : !>
167 : !> \finmain{rank_type}
168 : !>
169 : !> \author
170 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
171 : type, abstract :: rank_type
172 : end type
173 :
174 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
175 :
176 : !> \brief
177 : !> This is a concrete derived type whose instances are exclusively used
178 : !> to request dense ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
179 : !>
180 : !> \details
181 : !> Objects instantiated from this derived type are exclusively used to differentiate
182 : !> the procedures within the various generic interfaces of the ParaMonte library.<br>
183 : !> As such, this concrete derived type does not contain any attributes.<br>
184 : !>
185 : !> \note
186 : !> This concrete derived type is not meant to be directly accessed by the end users.<br>
187 : !> Instead, the end users should use the specific object parameter instance of this derived type
188 : !> (e.g., [dense](@ref pm_arrayRank::dense)) as directed by the documentation of the specific procedure they intend to use.<br>
189 : !>
190 : !> \see
191 : !> [dense](@ref pm_arrayRank::dense)<br>
192 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
193 : !> [modified](@ref pm_arrayRank::modified)<br>
194 : !> [standard](@ref pm_arrayRank::standard)<br>
195 : !> [fractional](@ref pm_arrayRank::fractional)<br>
196 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
197 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
198 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
199 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
200 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
201 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
202 : !>
203 : !> \finmain{dense_type}
204 : !>
205 : !> \author
206 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
207 : type, extends(rank_type) :: dense_type
208 : end type
209 :
210 : !> \brief
211 : !> This is a scalar `parameter` object of type [dense_type](@ref pm_arrayRank::dense_type) that is exclusively used
212 : !> to request the dense ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
213 : !>
214 : !> \details
215 : !> For example usage, see the documentation of the target procedure requiring this object.<br>
216 : !>
217 : !> \see
218 : !> [dense](@ref pm_arrayRank::dense)<br>
219 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
220 : !> [modified](@ref pm_arrayRank::modified)<br>
221 : !> [standard](@ref pm_arrayRank::standard)<br>
222 : !> [fractional](@ref pm_arrayRank::fractional)<br>
223 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
224 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
225 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
226 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
227 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
228 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
229 : !>
230 : !> \finmain{dense}
231 : !>
232 : !> \author
233 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
234 : type(dense_type), parameter :: dense = dense_type()
235 :
236 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
237 :
238 : !> \brief
239 : !> This is a concrete derived type whose instances are exclusively used
240 : !> to request the ordinal ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
241 : !>
242 : !> \details
243 : !> Objects instantiated from this derived type are exclusively used to differentiate
244 : !> the procedures within the various generic interfaces of the ParaMonte library.<br>
245 : !> As such, this concrete derived type does not contain any attributes.<br>
246 : !>
247 : !> \note
248 : !> This concrete derived type is not meant to be directly accessed by the end users.<br>
249 : !> Instead, the end users should use the specific object parameter instance of this derived type
250 : !> (e.g., [ordinal](@ref pm_arrayRank::ordinal)) as directed by the documentation of the specific procedure they intend to use.<br>
251 : !>
252 : !> \see
253 : !> [dense](@ref pm_arrayRank::dense)<br>
254 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
255 : !> [modified](@ref pm_arrayRank::modified)<br>
256 : !> [standard](@ref pm_arrayRank::standard)<br>
257 : !> [fractional](@ref pm_arrayRank::fractional)<br>
258 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
259 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
260 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
261 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
262 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
263 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
264 : !>
265 : !> \finmain{ordinal_type}
266 : !>
267 : !> \author
268 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
269 : type, extends(rank_type) :: ordinal_type
270 : end type
271 :
272 : !> \brief
273 : !> This is a scalar `parameter` object of type [ordinal_type](@ref pm_arrayRank::ordinal_type) that is exclusively used
274 : !> to request the ordinal ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
275 : !>
276 : !> \details
277 : !> For example usage, see the documentation of the target procedure requiring this object.<br>
278 : !>
279 : !> \see
280 : !> [dense](@ref pm_arrayRank::dense)<br>
281 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
282 : !> [modified](@ref pm_arrayRank::modified)<br>
283 : !> [standard](@ref pm_arrayRank::standard)<br>
284 : !> [fractional](@ref pm_arrayRank::fractional)<br>
285 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
286 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
287 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
288 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
289 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
290 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
291 : !>
292 : !> \finmain{ordinal}
293 : !>
294 : !> \author
295 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
296 : type(ordinal_type), parameter :: ordinal = ordinal_type()
297 :
298 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
299 :
300 : !> \brief
301 : !> This is a concrete derived type whose instances are exclusively used
302 : !> to request the modified ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
303 : !>
304 : !> \details
305 : !> Objects instantiated from this derived type are exclusively used to differentiate
306 : !> the procedures within the various generic interfaces of the ParaMonte library.<br>
307 : !> As such, this concrete derived type does not contain any attributes.<br>
308 : !>
309 : !> \note
310 : !> This concrete derived type is not meant to be directly accessed by the end users.<br>
311 : !> Instead, the end users should use the specific object parameter instance of this derived type
312 : !> (e.g., [modified](@ref pm_arrayRank::modified)) as directed by the documentation of the specific procedure they intend to use.<br>
313 : !>
314 : !> \see
315 : !> [dense](@ref pm_arrayRank::dense)<br>
316 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
317 : !> [modified](@ref pm_arrayRank::modified)<br>
318 : !> [standard](@ref pm_arrayRank::standard)<br>
319 : !> [fractional](@ref pm_arrayRank::fractional)<br>
320 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
321 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
322 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
323 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
324 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
325 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
326 : !>
327 : !> \finmain{modified_type}
328 : !>
329 : !> \author
330 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
331 : type, extends(rank_type) :: modified_type
332 : end type
333 :
334 : !> \brief
335 : !> This is a scalar `parameter` object of type [modified_type](@ref pm_arrayRank::modified_type) that is exclusively used
336 : !> to request the modified ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
337 : !>
338 : !> \details
339 : !> For example usage, see the documentation of the target procedure requiring this object.<br>
340 : !>
341 : !> \see
342 : !> [dense](@ref pm_arrayRank::dense)<br>
343 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
344 : !> [modified](@ref pm_arrayRank::modified)<br>
345 : !> [standard](@ref pm_arrayRank::standard)<br>
346 : !> [fractional](@ref pm_arrayRank::fractional)<br>
347 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
348 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
349 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
350 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
351 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
352 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
353 : !>
354 : !> \finmain{modified}
355 : !>
356 : !> \author
357 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
358 : type(modified_type), parameter :: modified = modified_type()
359 :
360 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
361 :
362 : !> \brief
363 : !> This is a concrete derived type whose instances are exclusively used
364 : !> to request the standard ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
365 : !>
366 : !> \details
367 : !> Objects instantiated from this derived type are exclusively used to differentiate
368 : !> the procedures within the various generic interfaces of the ParaMonte library.<br>
369 : !> As such, this concrete derived type does not contain any attributes.<br>
370 : !>
371 : !> \note
372 : !> This concrete derived type is not meant to be directly accessed by the end users.<br>
373 : !> Instead, the end users should use the specific object parameter instance of this derived type
374 : !> (e.g., [standard](@ref pm_arrayRank::standard)) as directed by the documentation of the specific procedure they intend to use.<br>
375 : !>
376 : !> \see
377 : !> [dense](@ref pm_arrayRank::dense)<br>
378 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
379 : !> [modified](@ref pm_arrayRank::modified)<br>
380 : !> [standard](@ref pm_arrayRank::standard)<br>
381 : !> [fractional](@ref pm_arrayRank::fractional)<br>
382 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
383 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
384 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
385 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
386 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
387 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
388 : !>
389 : !> \finmain{standard_type}
390 : !>
391 : !> \author
392 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
393 : type, extends(rank_type) :: standard_type
394 : end type
395 :
396 : !> \brief
397 : !> This is a scalar `parameter` object of type [standard_type](@ref pm_arrayRank::standard_type) that is exclusively used
398 : !> to request the standard ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
399 : !>
400 : !> \details
401 : !> For example usage, see the documentation of the target procedure requiring this object.<br>
402 : !>
403 : !> \see
404 : !> [dense](@ref pm_arrayRank::dense)<br>
405 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
406 : !> [modified](@ref pm_arrayRank::modified)<br>
407 : !> [standard](@ref pm_arrayRank::standard)<br>
408 : !> [fractional](@ref pm_arrayRank::fractional)<br>
409 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
410 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
411 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
412 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
413 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
414 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
415 : !>
416 : !> \finmain{standard}
417 : !>
418 : !> \author
419 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
420 : type(standard_type), parameter :: standard = standard_type()
421 :
422 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
423 :
424 : !> \brief
425 : !> This is a concrete derived type whose instances are exclusively used
426 : !> to request the fractional ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
427 : !>
428 : !> \details
429 : !> Objects instantiated from this derived type are exclusively used to differentiate
430 : !> the procedures within the various generic interfaces of the ParaMonte library.<br>
431 : !> As such, this concrete derived type does not contain any attributes.<br>
432 : !>
433 : !> \note
434 : !> This concrete derived type is not meant to be directly accessed by the end users.<br>
435 : !> Instead, the end users should use the specific object parameter instance of this derived type
436 : !> (e.g., [fractional](@ref pm_arrayRank::fractional)) as directed by the documentation of the specific procedure they intend to use.<br>
437 : !>
438 : !> \see
439 : !> [dense](@ref pm_arrayRank::dense)<br>
440 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
441 : !> [modified](@ref pm_arrayRank::modified)<br>
442 : !> [standard](@ref pm_arrayRank::standard)<br>
443 : !> [fractional](@ref pm_arrayRank::fractional)<br>
444 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
445 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
446 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
447 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
448 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
449 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
450 : !>
451 : !> \finmain{fractional_type}
452 : !>
453 : !> \author
454 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
455 : type, extends(rank_type) :: fractional_type
456 : end type
457 :
458 : !> \brief
459 : !> This is a scalar `parameter` object of type [fractional_type](@ref pm_arrayRank::fractional_type) that is exclusively used
460 : !> to request the fractional ranking of a given array within an interface of a procedure of the ParaMonte library.<br>
461 : !>
462 : !> \details
463 : !> For example usage, see the documentation of the target procedure requiring this object.<br>
464 : !>
465 : !> \see
466 : !> [dense](@ref pm_arrayRank::dense)<br>
467 : !> [ordinal](@ref pm_arrayRank::ordinal)<br>
468 : !> [modified](@ref pm_arrayRank::modified)<br>
469 : !> [standard](@ref pm_arrayRank::standard)<br>
470 : !> [fractional](@ref pm_arrayRank::fractional)<br>
471 : !> [dense_type](@ref pm_arrayRank::dense_type)<br>
472 : !> [ordinal_type](@ref pm_arrayRank::ordinal_type)<br>
473 : !> [modified_type](@ref pm_arrayRank::modified_type)<br>
474 : !> [standard_type](@ref pm_arrayRank::standard_type)<br>
475 : !> [fractional_type](@ref pm_arrayRank::fractional_type)<br>
476 : !> [rank_type](@ref pm_arrayRank::rank_type)<br>
477 : !>
478 : !> \finmain{fractional}
479 : !>
480 : !> \author
481 : !> \AmirShahmoradi, September 1, 2017, 12:00 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
482 : type(fractional_type), parameter :: fractional = fractional_type()
483 :
484 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
485 :
486 : !> \brief
487 : !> Generate and return the **Dense rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
488 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
489 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
490 : !>
491 : !> \details
492 : !> This kind of ranking of values is widely known as <b>dense (`1223`) ranking</b>.<br>
493 : !> In Dense ranking, items that compare equally receive the same ranking number, and the next items receive the immediately following ranking number.<br>
494 : !> Equivalently, the ranking number of each item is `1` plus the number of items ranked above it that are distinct with respect to the ranking order.<br>
495 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number 1 (*first*), *B* gets
496 : !> ranking number `2` (*joint second*), *C* also gets ranking number `2` (*joint second*) and *D* gets ranking number `3` (*Third*).<br>
497 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **Dense ranking** `1223`.<br>
498 : !> Dense ranking effective factorizes the array into classes of unique values.<br>
499 : !> Therefore, the Dense rank of each element of the array is simply its class **level**.<br>
500 : !>
501 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
502 : !> <ol>
503 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
504 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
505 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
506 : !> <li> type `integer` of kind \IKALL or,<br>
507 : !> <li> type `logical` of kind \LKALL or,<br>
508 : !> <li> type `complex` of kind \CKALL or,<br>
509 : !> <li> type `real` of kind \RKALL,<br>
510 : !> </ol>
511 : !> or,
512 : !> <ol>
513 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
514 : !> </ol>
515 : !> whose elements rankings will be computed and returned.
516 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type and kind as the input `array`.<br>
517 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
518 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
519 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
520 : !> If `array` is a Fortran string (i.e., a scalar `character`),
521 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
522 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
523 : !> \code{.F90}
524 : !> function isSorted(a,b) result (sorted)
525 : !> use pm_kind, only: SK, IK, LK, CK, RK
526 : !> TYPE(KIND) , intent(in) :: a, b
527 : !> logical(LK) :: sorted
528 : !> end function
529 : !> \endcode
530 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
531 : !> \code{.F90}
532 : !> use pm_container, only: StrCon
533 : !> use pm_kind, only: SK, IK, LK, CK, RK
534 : !> character(*, SK), intent(in) :: a, b
535 : !> integer(IK) , intent(in) :: a, b
536 : !> logical(LK) , intent(in) :: a, b
537 : !> complex(CK) , intent(in) :: a, b
538 : !> real(RK) , intent(in) :: a, b
539 : !> type(StrCon) , intent(in) :: a, b
540 : !> \endcode
541 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
542 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
543 : !> \code{.F90}
544 : !> function isSorted(a,b) result (sorted)
545 : !> character(1,SKC), intent(in) :: a, b
546 : !> logical(LK) :: sorted
547 : !> end function
548 : !> \endcode
549 : !> where `SKC` represents the kind of the input string argument `array`.<br>
550 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
551 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
552 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
553 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
554 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
555 : !>
556 : !> \return
557 : !> `rank(1:size(array)` : The output `contiguous` array of rank `1` of type `integer` of default kind \IK containing the ranks of the corresponding elements of `array`.<br>
558 : !> The size of `rank` matches that of `array` (or its length type parameter if `array` is a scalar string).<br>
559 : !> **Read `rank(i)` as the Dense rank of the `i`th element of `array`.**
560 : !>
561 : !> \interface{getRankDense}
562 : !> \code{.F90}
563 : !>
564 : !> use pm_arrayRank, only: getRankDense
565 : !>
566 : !> rank(1:size(array)) = getRankDense(array)
567 : !> rank(1:size(array)) = getRankDense(array, isSorted)
568 : !>
569 : !> \endcode
570 : !>
571 : !> \warning
572 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
573 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
574 : !> identify ties within the Standard ranking of the input `array`.
575 : !>
576 : !> \warnpure
577 : !>
578 : !> \warning
579 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
580 : !>
581 : !> \see
582 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
583 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
584 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
585 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
586 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
587 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
588 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
589 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
590 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
591 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
592 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
593 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
594 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
595 : !>
596 : !> \example{getRankDense}
597 : !> \include{lineno} example/pm_arrayRank/getRankDense/main.F90
598 : !> \compilef{getRankDense}
599 : !> \output{getRankDense}
600 : !> \include{lineno} example/pm_arrayRank/getRankDense/main.out.F90
601 : !>
602 : !> \test
603 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
604 : !>
605 : !> \bug
606 : !> \status \unresolved
607 : !> \source \ifort{2021.5}
608 : !> \desc
609 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
610 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
611 : !> \remedy
612 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
613 : !>
614 : !> \todo
615 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
616 : !>
617 : !> \todo
618 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
619 : !>
620 : !> \finmain{getRankDense}
621 : !>
622 : !> \author
623 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
624 : interface getRankDense
625 :
626 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
627 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
628 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
629 :
630 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
631 :
632 : #if SK5_ENABLED
633 : module function getRankDenseDefCom_D0_SK5(array) result(rank)
634 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
635 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D0_SK5
636 : #endif
637 : use pm_kind, only: TKR => IK, SKC => SK5
638 : character(*,SKC) , intent(in) :: array
639 : integer(TKR) :: rank(len(array, IK))
640 : end function
641 : #endif
642 :
643 : #if SK4_ENABLED
644 : module function getRankDenseDefCom_D0_SK4(array) result(rank)
645 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
646 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D0_SK4
647 : #endif
648 : use pm_kind, only: TKR => IK, SKC => SK4
649 : character(*,SKC) , intent(in) :: array
650 : integer(TKR) :: rank(len(array, IK))
651 : end function
652 : #endif
653 :
654 : #if SK3_ENABLED
655 : module function getRankDenseDefCom_D0_SK3(array) result(rank)
656 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
657 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D0_SK3
658 : #endif
659 : use pm_kind, only: TKR => IK, SKC => SK3
660 : character(*,SKC) , intent(in) :: array
661 : integer(TKR) :: rank(len(array, IK))
662 : end function
663 : #endif
664 :
665 : #if SK2_ENABLED
666 : module function getRankDenseDefCom_D0_SK2(array) result(rank)
667 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
668 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D0_SK2
669 : #endif
670 : use pm_kind, only: TKR => IK, SKC => SK2
671 : character(*,SKC) , intent(in) :: array
672 : integer(TKR) :: rank(len(array, IK))
673 : end function
674 : #endif
675 :
676 : #if SK1_ENABLED
677 : module function getRankDenseDefCom_D0_SK1(array) result(rank)
678 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
679 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D0_SK1
680 : #endif
681 : use pm_kind, only: TKR => IK, SKC => SK1
682 : character(*,SKC) , intent(in) :: array
683 : integer(TKR) :: rank(len(array, IK))
684 : end function
685 : #endif
686 :
687 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
688 :
689 : #if SK5_ENABLED
690 : module function getRankDenseDefCom_D1_SK5(array) result(rank)
691 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
692 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_SK5
693 : #endif
694 : use pm_kind, only: TKR => IK, SKC => SK5
695 : character(*,SKC) , intent(in) , contiguous :: array(:)
696 : integer(TKR) :: rank(size(array, kind = IK))
697 : end function
698 : #endif
699 :
700 : #if SK4_ENABLED
701 : module function getRankDenseDefCom_D1_SK4(array) result(rank)
702 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
703 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_SK4
704 : #endif
705 : use pm_kind, only: TKR => IK, SKC => SK4
706 : character(*,SKC) , intent(in) , contiguous :: array(:)
707 : integer(TKR) :: rank(size(array, kind = IK))
708 : end function
709 : #endif
710 :
711 : #if SK3_ENABLED
712 : module function getRankDenseDefCom_D1_SK3(array) result(rank)
713 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
714 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_SK3
715 : #endif
716 : use pm_kind, only: TKR => IK, SKC => SK3
717 : character(*,SKC) , intent(in) , contiguous :: array(:)
718 : integer(TKR) :: rank(size(array, kind = IK))
719 : end function
720 : #endif
721 :
722 : #if SK2_ENABLED
723 : module function getRankDenseDefCom_D1_SK2(array) result(rank)
724 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
725 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_SK2
726 : #endif
727 : use pm_kind, only: TKR => IK, SKC => SK2
728 : character(*,SKC) , intent(in) , contiguous :: array(:)
729 : integer(TKR) :: rank(size(array, kind = IK))
730 : end function
731 : #endif
732 :
733 : #if SK1_ENABLED
734 : module function getRankDenseDefCom_D1_SK1(array) result(rank)
735 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
736 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_SK1
737 : #endif
738 : use pm_kind, only: TKR => IK, SKC => SK1
739 : character(*,SKC) , intent(in) , contiguous :: array(:)
740 : integer(TKR) :: rank(size(array, kind = IK))
741 : end function
742 : #endif
743 :
744 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
745 :
746 : #if IK5_ENABLED
747 : module function getRankDenseDefCom_D1_IK5(array) result(rank)
748 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
749 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_IK5
750 : #endif
751 : use pm_kind, only: TKR => IK, IKC => IK5
752 : integer(IKC) , intent(in) , contiguous :: array(:)
753 : integer(TKR) :: rank(size(array, kind = IK))
754 : end function
755 : #endif
756 :
757 : #if IK4_ENABLED
758 : module function getRankDenseDefCom_D1_IK4(array) result(rank)
759 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
760 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_IK4
761 : #endif
762 : use pm_kind, only: TKR => IK, IKC => IK4
763 : integer(IKC) , intent(in) , contiguous :: array(:)
764 : integer(TKR) :: rank(size(array, kind = IK))
765 : end function
766 : #endif
767 :
768 : #if IK3_ENABLED
769 : module function getRankDenseDefCom_D1_IK3(array) result(rank)
770 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
771 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_IK3
772 : #endif
773 : use pm_kind, only: TKR => IK, IKC => IK3
774 : integer(IKC) , intent(in) , contiguous :: array(:)
775 : integer(TKR) :: rank(size(array, kind = IK))
776 : end function
777 : #endif
778 :
779 : #if IK2_ENABLED
780 : module function getRankDenseDefCom_D1_IK2(array) result(rank)
781 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
782 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_IK2
783 : #endif
784 : use pm_kind, only: TKR => IK, IKC => IK2
785 : integer(IKC) , intent(in) , contiguous :: array(:)
786 : integer(TKR) :: rank(size(array, kind = IK))
787 : end function
788 : #endif
789 :
790 : #if IK1_ENABLED
791 : module function getRankDenseDefCom_D1_IK1(array) result(rank)
792 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
793 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_IK1
794 : #endif
795 : use pm_kind, only: TKR => IK, IKC => IK1
796 : integer(IKC) , intent(in) , contiguous :: array(:)
797 : integer(TKR) :: rank(size(array, kind = IK))
798 : end function
799 : #endif
800 :
801 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
802 :
803 : #if LK5_ENABLED
804 : module function getRankDenseDefCom_D1_LK5(array) result(rank)
805 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
806 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_LK5
807 : #endif
808 : use pm_kind, only: TKR => IK, LKC => LK5
809 : logical(LKC) , intent(in) , contiguous :: array(:)
810 : integer(TKR) :: rank(size(array, kind = IK))
811 : end function
812 : #endif
813 :
814 : #if LK4_ENABLED
815 : module function getRankDenseDefCom_D1_LK4(array) result(rank)
816 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
817 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_LK4
818 : #endif
819 : use pm_kind, only: TKR => IK, LKC => LK4
820 : logical(LKC) , intent(in) , contiguous :: array(:)
821 : integer(TKR) :: rank(size(array, kind = IK))
822 : end function
823 : #endif
824 :
825 : #if LK3_ENABLED
826 : module function getRankDenseDefCom_D1_LK3(array) result(rank)
827 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
828 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_LK3
829 : #endif
830 : use pm_kind, only: TKR => IK, LKC => LK3
831 : logical(LKC) , intent(in) , contiguous :: array(:)
832 : integer(TKR) :: rank(size(array, kind = IK))
833 : end function
834 : #endif
835 :
836 : #if LK2_ENABLED
837 : module function getRankDenseDefCom_D1_LK2(array) result(rank)
838 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
839 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_LK2
840 : #endif
841 : use pm_kind, only: TKR => IK, LKC => LK2
842 : logical(LKC) , intent(in) , contiguous :: array(:)
843 : integer(TKR) :: rank(size(array, kind = IK))
844 : end function
845 : #endif
846 :
847 : #if LK1_ENABLED
848 : module function getRankDenseDefCom_D1_LK1(array) result(rank)
849 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
850 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_LK1
851 : #endif
852 : use pm_kind, only: TKR => IK, LKC => LK1
853 : logical(LKC) , intent(in) , contiguous :: array(:)
854 : integer(TKR) :: rank(size(array, kind = IK))
855 : end function
856 : #endif
857 :
858 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
859 :
860 : #if CK5_ENABLED
861 : module function getRankDenseDefCom_D1_CK5(array) result(rank)
862 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
863 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_CK5
864 : #endif
865 : use pm_kind, only: TKR => IK, CKC => CK5
866 : complex(CKC) , intent(in) , contiguous :: array(:)
867 : integer(TKR) :: rank(size(array, kind = IK))
868 : end function
869 : #endif
870 :
871 : #if CK4_ENABLED
872 : module function getRankDenseDefCom_D1_CK4(array) result(rank)
873 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
874 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_CK4
875 : #endif
876 : use pm_kind, only: TKR => IK, CKC => CK4
877 : complex(CKC) , intent(in) , contiguous :: array(:)
878 : integer(TKR) :: rank(size(array, kind = IK))
879 : end function
880 : #endif
881 :
882 : #if CK3_ENABLED
883 : module function getRankDenseDefCom_D1_CK3(array) result(rank)
884 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
885 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_CK3
886 : #endif
887 : use pm_kind, only: TKR => IK, CKC => CK3
888 : complex(CKC) , intent(in) , contiguous :: array(:)
889 : integer(TKR) :: rank(size(array, kind = IK))
890 : end function
891 : #endif
892 :
893 : #if CK2_ENABLED
894 : module function getRankDenseDefCom_D1_CK2(array) result(rank)
895 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
896 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_CK2
897 : #endif
898 : use pm_kind, only: TKR => IK, CKC => CK2
899 : complex(CKC) , intent(in) , contiguous :: array(:)
900 : integer(TKR) :: rank(size(array, kind = IK))
901 : end function
902 : #endif
903 :
904 : #if CK1_ENABLED
905 : module function getRankDenseDefCom_D1_CK1(array) result(rank)
906 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
907 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_CK1
908 : #endif
909 : use pm_kind, only: TKR => IK, CKC => CK1
910 : complex(CKC) , intent(in) , contiguous :: array(:)
911 : integer(TKR) :: rank(size(array, kind = IK))
912 : end function
913 : #endif
914 :
915 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
916 :
917 : #if RK5_ENABLED
918 : module function getRankDenseDefCom_D1_RK5(array) result(rank)
919 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
920 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_RK5
921 : #endif
922 : use pm_kind, only: TKR => IK, RKC => RK5
923 : real(RKC) , intent(in) , contiguous :: array(:)
924 : integer(TKR) :: rank(size(array, kind = IK))
925 : end function
926 : #endif
927 :
928 : #if RK4_ENABLED
929 : module function getRankDenseDefCom_D1_RK4(array) result(rank)
930 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
931 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_RK4
932 : #endif
933 : use pm_kind, only: TKR => IK, RKC => RK4
934 : real(RKC) , intent(in) , contiguous :: array(:)
935 : integer(TKR) :: rank(size(array, kind = IK))
936 : end function
937 : #endif
938 :
939 : #if RK3_ENABLED
940 : module function getRankDenseDefCom_D1_RK3(array) result(rank)
941 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
942 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_RK3
943 : #endif
944 : use pm_kind, only: TKR => IK, RKC => RK3
945 : real(RKC) , intent(in) , contiguous :: array(:)
946 : integer(TKR) :: rank(size(array, kind = IK))
947 : end function
948 : #endif
949 :
950 : #if RK2_ENABLED
951 : module function getRankDenseDefCom_D1_RK2(array) result(rank)
952 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
953 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_RK2
954 : #endif
955 : use pm_kind, only: TKR => IK, RKC => RK2
956 : real(RKC) , intent(in) , contiguous :: array(:)
957 : integer(TKR) :: rank(size(array, kind = IK))
958 : end function
959 : #endif
960 :
961 : #if RK1_ENABLED
962 : module function getRankDenseDefCom_D1_RK1(array) result(rank)
963 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
964 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_RK1
965 : #endif
966 : use pm_kind, only: TKR => IK, RKC => RK1
967 : real(RKC) , intent(in) , contiguous :: array(:)
968 : integer(TKR) :: rank(size(array, kind = IK))
969 : end function
970 : #endif
971 :
972 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
973 :
974 : #if SK5_ENABLED
975 : module function getRankDenseDefCom_D1_PSSK5(array) result(rank)
976 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
977 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_PSSK5
978 : #endif
979 : use pm_kind, only: TKR => IK, SKC => SK5
980 : use pm_container, only: css_pdt
981 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
982 : integer(TKR) :: rank(size(array, kind = IK))
983 : end function
984 : #endif
985 :
986 : #if SK4_ENABLED
987 : module function getRankDenseDefCom_D1_PSSK4(array) result(rank)
988 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
989 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_PSSK4
990 : #endif
991 : use pm_kind, only: TKR => IK, SKC => SK4
992 : use pm_container, only: css_pdt
993 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
994 : integer(TKR) :: rank(size(array, kind = IK))
995 : end function
996 : #endif
997 :
998 : #if SK3_ENABLED
999 : module function getRankDenseDefCom_D1_PSSK3(array) result(rank)
1000 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1001 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_PSSK3
1002 : #endif
1003 : use pm_kind, only: TKR => IK, SKC => SK3
1004 : use pm_container, only: css_pdt
1005 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
1006 : integer(TKR) :: rank(size(array, kind = IK))
1007 : end function
1008 : #endif
1009 :
1010 : #if SK2_ENABLED
1011 : module function getRankDenseDefCom_D1_PSSK2(array) result(rank)
1012 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1013 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_PSSK2
1014 : #endif
1015 : use pm_kind, only: TKR => IK, SKC => SK2
1016 : use pm_container, only: css_pdt
1017 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
1018 : integer(TKR) :: rank(size(array, kind = IK))
1019 : end function
1020 : #endif
1021 :
1022 : #if SK1_ENABLED
1023 : module function getRankDenseDefCom_D1_PSSK1(array) result(rank)
1024 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1025 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_PSSK1
1026 : #endif
1027 : use pm_kind, only: TKR => IK, SKC => SK1
1028 : use pm_container, only: css_pdt
1029 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
1030 : integer(TKR) :: rank(size(array, kind = IK))
1031 : end function
1032 : #endif
1033 :
1034 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1035 :
1036 : module function getRankDenseDefCom_D1_BSSK(array) result(rank)
1037 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1038 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseDefCom_D1_BSSK
1039 : #endif
1040 : use pm_kind, only: TKR => IK, SKC => SK
1041 : use pm_container, only: css_type
1042 : type(css_type) , intent(in) , contiguous :: array(:)
1043 : integer(TKR) :: rank(size(array, kind = IK))
1044 : end function
1045 :
1046 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1047 :
1048 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1049 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1050 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1051 :
1052 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1053 :
1054 : #if SK5_ENABLED
1055 : module function getRankDenseCusCom_D0_SK5(array, isSorted) result(rank)
1056 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1057 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D0_SK5
1058 : #endif
1059 : use pm_kind, only: TKR => IK, SKC => SK5
1060 : character(*,SKC) , intent(in) :: array
1061 : procedure(logical(LK)) :: isSorted
1062 : integer(TKR) :: rank(len(array, IK))
1063 : end function
1064 : #endif
1065 :
1066 : #if SK4_ENABLED
1067 : module function getRankDenseCusCom_D0_SK4(array, isSorted) result(rank)
1068 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1069 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D0_SK4
1070 : #endif
1071 : use pm_kind, only: TKR => IK, SKC => SK4
1072 : character(*,SKC) , intent(in) :: array
1073 : procedure(logical(LK)) :: isSorted
1074 : integer(TKR) :: rank(len(array, IK))
1075 : end function
1076 : #endif
1077 :
1078 : #if SK3_ENABLED
1079 : module function getRankDenseCusCom_D0_SK3(array, isSorted) result(rank)
1080 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1081 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D0_SK3
1082 : #endif
1083 : use pm_kind, only: TKR => IK, SKC => SK3
1084 : character(*,SKC) , intent(in) :: array
1085 : procedure(logical(LK)) :: isSorted
1086 : integer(TKR) :: rank(len(array, IK))
1087 : end function
1088 : #endif
1089 :
1090 : #if SK2_ENABLED
1091 : module function getRankDenseCusCom_D0_SK2(array, isSorted) result(rank)
1092 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1093 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D0_SK2
1094 : #endif
1095 : use pm_kind, only: TKR => IK, SKC => SK2
1096 : character(*,SKC) , intent(in) :: array
1097 : procedure(logical(LK)) :: isSorted
1098 : integer(TKR) :: rank(len(array, IK))
1099 : end function
1100 : #endif
1101 :
1102 : #if SK1_ENABLED
1103 : module function getRankDenseCusCom_D0_SK1(array, isSorted) result(rank)
1104 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1105 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D0_SK1
1106 : #endif
1107 : use pm_kind, only: TKR => IK, SKC => SK1
1108 : character(*,SKC) , intent(in) :: array
1109 : procedure(logical(LK)) :: isSorted
1110 : integer(TKR) :: rank(len(array, IK))
1111 : end function
1112 : #endif
1113 :
1114 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1115 :
1116 : #if SK5_ENABLED
1117 : module function getRankDenseCusCom_D1_SK5(array, isSorted) result(rank)
1118 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1119 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_SK5
1120 : #endif
1121 : use pm_kind, only: TKR => IK, SKC => SK5
1122 : character(*,SKC) , intent(in) , contiguous :: array(:)
1123 : procedure(logical(LK)) :: isSorted
1124 : integer(TKR) :: rank(size(array, kind = IK))
1125 : end function
1126 : #endif
1127 :
1128 : #if SK4_ENABLED
1129 : module function getRankDenseCusCom_D1_SK4(array, isSorted) result(rank)
1130 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1131 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_SK4
1132 : #endif
1133 : use pm_kind, only: TKR => IK, SKC => SK4
1134 : character(*,SKC) , intent(in) , contiguous :: array(:)
1135 : procedure(logical(LK)) :: isSorted
1136 : integer(TKR) :: rank(size(array, kind = IK))
1137 : end function
1138 : #endif
1139 :
1140 : #if SK3_ENABLED
1141 : module function getRankDenseCusCom_D1_SK3(array, isSorted) result(rank)
1142 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1143 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_SK3
1144 : #endif
1145 : use pm_kind, only: TKR => IK, SKC => SK3
1146 : character(*,SKC) , intent(in) , contiguous :: array(:)
1147 : procedure(logical(LK)) :: isSorted
1148 : integer(TKR) :: rank(size(array, kind = IK))
1149 : end function
1150 : #endif
1151 :
1152 : #if SK2_ENABLED
1153 : module function getRankDenseCusCom_D1_SK2(array, isSorted) result(rank)
1154 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1155 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_SK2
1156 : #endif
1157 : use pm_kind, only: TKR => IK, SKC => SK2
1158 : character(*,SKC) , intent(in) , contiguous :: array(:)
1159 : procedure(logical(LK)) :: isSorted
1160 : integer(TKR) :: rank(size(array, kind = IK))
1161 : end function
1162 : #endif
1163 :
1164 : #if SK1_ENABLED
1165 : module function getRankDenseCusCom_D1_SK1(array, isSorted) result(rank)
1166 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1167 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_SK1
1168 : #endif
1169 : use pm_kind, only: TKR => IK, SKC => SK1
1170 : character(*,SKC) , intent(in) , contiguous :: array(:)
1171 : procedure(logical(LK)) :: isSorted
1172 : integer(TKR) :: rank(size(array, kind = IK))
1173 : end function
1174 : #endif
1175 :
1176 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1177 :
1178 : #if IK5_ENABLED
1179 : module function getRankDenseCusCom_D1_IK5(array, isSorted) result(rank)
1180 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1181 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_IK5
1182 : #endif
1183 : use pm_kind, only: TKR => IK, IKC => IK5
1184 : integer(IKC) , intent(in) , contiguous :: array(:)
1185 : procedure(logical(LK)) :: isSorted
1186 : integer(TKR) :: rank(size(array, kind = IK))
1187 : end function
1188 : #endif
1189 :
1190 : #if IK4_ENABLED
1191 : module function getRankDenseCusCom_D1_IK4(array, isSorted) result(rank)
1192 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1193 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_IK4
1194 : #endif
1195 : use pm_kind, only: TKR => IK, IKC => IK4
1196 : integer(IKC) , intent(in) , contiguous :: array(:)
1197 : procedure(logical(LK)) :: isSorted
1198 : integer(TKR) :: rank(size(array, kind = IK))
1199 : end function
1200 : #endif
1201 :
1202 : #if IK3_ENABLED
1203 : module function getRankDenseCusCom_D1_IK3(array, isSorted) result(rank)
1204 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1205 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_IK3
1206 : #endif
1207 : use pm_kind, only: TKR => IK, IKC => IK3
1208 : integer(IKC) , intent(in) , contiguous :: array(:)
1209 : procedure(logical(LK)) :: isSorted
1210 : integer(TKR) :: rank(size(array, kind = IK))
1211 : end function
1212 : #endif
1213 :
1214 : #if IK2_ENABLED
1215 : module function getRankDenseCusCom_D1_IK2(array, isSorted) result(rank)
1216 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1217 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_IK2
1218 : #endif
1219 : use pm_kind, only: TKR => IK, IKC => IK2
1220 : integer(IKC) , intent(in) , contiguous :: array(:)
1221 : procedure(logical(LK)) :: isSorted
1222 : integer(TKR) :: rank(size(array, kind = IK))
1223 : end function
1224 : #endif
1225 :
1226 : #if IK1_ENABLED
1227 : module function getRankDenseCusCom_D1_IK1(array, isSorted) result(rank)
1228 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1229 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_IK1
1230 : #endif
1231 : use pm_kind, only: TKR => IK, IKC => IK1
1232 : integer(IKC) , intent(in) , contiguous :: array(:)
1233 : procedure(logical(LK)) :: isSorted
1234 : integer(TKR) :: rank(size(array, kind = IK))
1235 : end function
1236 : #endif
1237 :
1238 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1239 :
1240 : #if LK5_ENABLED
1241 : module function getRankDenseCusCom_D1_LK5(array, isSorted) result(rank)
1242 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1243 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_LK5
1244 : #endif
1245 : use pm_kind, only: TKR => IK, LKC => LK5
1246 : logical(LKC) , intent(in) , contiguous :: array(:)
1247 : procedure(logical(LK)) :: isSorted
1248 : integer(TKR) :: rank(size(array, kind = IK))
1249 : end function
1250 : #endif
1251 :
1252 : #if LK4_ENABLED
1253 : module function getRankDenseCusCom_D1_LK4(array, isSorted) result(rank)
1254 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1255 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_LK4
1256 : #endif
1257 : use pm_kind, only: TKR => IK, LKC => LK4
1258 : logical(LKC) , intent(in) , contiguous :: array(:)
1259 : procedure(logical(LK)) :: isSorted
1260 : integer(TKR) :: rank(size(array, kind = IK))
1261 : end function
1262 : #endif
1263 :
1264 : #if LK3_ENABLED
1265 : module function getRankDenseCusCom_D1_LK3(array, isSorted) result(rank)
1266 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1267 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_LK3
1268 : #endif
1269 : use pm_kind, only: TKR => IK, LKC => LK3
1270 : logical(LKC) , intent(in) , contiguous :: array(:)
1271 : procedure(logical(LK)) :: isSorted
1272 : integer(TKR) :: rank(size(array, kind = IK))
1273 : end function
1274 : #endif
1275 :
1276 : #if LK2_ENABLED
1277 : module function getRankDenseCusCom_D1_LK2(array, isSorted) result(rank)
1278 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1279 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_LK2
1280 : #endif
1281 : use pm_kind, only: TKR => IK, LKC => LK2
1282 : logical(LKC) , intent(in) , contiguous :: array(:)
1283 : procedure(logical(LK)) :: isSorted
1284 : integer(TKR) :: rank(size(array, kind = IK))
1285 : end function
1286 : #endif
1287 :
1288 : #if LK1_ENABLED
1289 : module function getRankDenseCusCom_D1_LK1(array, isSorted) result(rank)
1290 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1291 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_LK1
1292 : #endif
1293 : use pm_kind, only: TKR => IK, LKC => LK1
1294 : logical(LKC) , intent(in) , contiguous :: array(:)
1295 : procedure(logical(LK)) :: isSorted
1296 : integer(TKR) :: rank(size(array, kind = IK))
1297 : end function
1298 : #endif
1299 :
1300 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1301 :
1302 : #if CK5_ENABLED
1303 : module function getRankDenseCusCom_D1_CK5(array, isSorted) result(rank)
1304 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1305 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_CK5
1306 : #endif
1307 : use pm_kind, only: TKR => IK, CKC => CK5
1308 : complex(CKC) , intent(in) , contiguous :: array(:)
1309 : procedure(logical(LK)) :: isSorted
1310 : integer(TKR) :: rank(size(array, kind = IK))
1311 : end function
1312 : #endif
1313 :
1314 : #if CK4_ENABLED
1315 : module function getRankDenseCusCom_D1_CK4(array, isSorted) result(rank)
1316 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1317 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_CK4
1318 : #endif
1319 : use pm_kind, only: TKR => IK, CKC => CK4
1320 : complex(CKC) , intent(in) , contiguous :: array(:)
1321 : procedure(logical(LK)) :: isSorted
1322 : integer(TKR) :: rank(size(array, kind = IK))
1323 : end function
1324 : #endif
1325 :
1326 : #if CK3_ENABLED
1327 : module function getRankDenseCusCom_D1_CK3(array, isSorted) result(rank)
1328 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1329 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_CK3
1330 : #endif
1331 : use pm_kind, only: TKR => IK, CKC => CK3
1332 : complex(CKC) , intent(in) , contiguous :: array(:)
1333 : procedure(logical(LK)) :: isSorted
1334 : integer(TKR) :: rank(size(array, kind = IK))
1335 : end function
1336 : #endif
1337 :
1338 : #if CK2_ENABLED
1339 : module function getRankDenseCusCom_D1_CK2(array, isSorted) result(rank)
1340 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1341 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_CK2
1342 : #endif
1343 : use pm_kind, only: TKR => IK, CKC => CK2
1344 : complex(CKC) , intent(in) , contiguous :: array(:)
1345 : procedure(logical(LK)) :: isSorted
1346 : integer(TKR) :: rank(size(array, kind = IK))
1347 : end function
1348 : #endif
1349 :
1350 : #if CK1_ENABLED
1351 : module function getRankDenseCusCom_D1_CK1(array, isSorted) result(rank)
1352 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1353 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_CK1
1354 : #endif
1355 : use pm_kind, only: TKR => IK, CKC => CK1
1356 : complex(CKC) , intent(in) , contiguous :: array(:)
1357 : procedure(logical(LK)) :: isSorted
1358 : integer(TKR) :: rank(size(array, kind = IK))
1359 : end function
1360 : #endif
1361 :
1362 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1363 :
1364 : #if RK5_ENABLED
1365 : module function getRankDenseCusCom_D1_RK5(array, isSorted) result(rank)
1366 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1367 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_RK5
1368 : #endif
1369 : use pm_kind, only: TKR => IK, RKC => RK5
1370 : real(RKC) , intent(in) , contiguous :: array(:)
1371 : procedure(logical(LK)) :: isSorted
1372 : integer(TKR) :: rank(size(array, kind = IK))
1373 : end function
1374 : #endif
1375 :
1376 : #if RK4_ENABLED
1377 : module function getRankDenseCusCom_D1_RK4(array, isSorted) result(rank)
1378 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1379 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_RK4
1380 : #endif
1381 : use pm_kind, only: TKR => IK, RKC => RK4
1382 : real(RKC) , intent(in) , contiguous :: array(:)
1383 : procedure(logical(LK)) :: isSorted
1384 : integer(TKR) :: rank(size(array, kind = IK))
1385 : end function
1386 : #endif
1387 :
1388 : #if RK3_ENABLED
1389 : module function getRankDenseCusCom_D1_RK3(array, isSorted) result(rank)
1390 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1391 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_RK3
1392 : #endif
1393 : use pm_kind, only: TKR => IK, RKC => RK3
1394 : real(RKC) , intent(in) , contiguous :: array(:)
1395 : procedure(logical(LK)) :: isSorted
1396 : integer(TKR) :: rank(size(array, kind = IK))
1397 : end function
1398 : #endif
1399 :
1400 : #if RK2_ENABLED
1401 : module function getRankDenseCusCom_D1_RK2(array, isSorted) result(rank)
1402 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1403 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_RK2
1404 : #endif
1405 : use pm_kind, only: TKR => IK, RKC => RK2
1406 : real(RKC) , intent(in) , contiguous :: array(:)
1407 : procedure(logical(LK)) :: isSorted
1408 : integer(TKR) :: rank(size(array, kind = IK))
1409 : end function
1410 : #endif
1411 :
1412 : #if RK1_ENABLED
1413 : module function getRankDenseCusCom_D1_RK1(array, isSorted) result(rank)
1414 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1415 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_RK1
1416 : #endif
1417 : use pm_kind, only: TKR => IK, RKC => RK1
1418 : real(RKC) , intent(in) , contiguous :: array(:)
1419 : procedure(logical(LK)) :: isSorted
1420 : integer(TKR) :: rank(size(array, kind = IK))
1421 : end function
1422 : #endif
1423 :
1424 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1425 :
1426 : #if SK5_ENABLED
1427 : module function getRankDenseCusCom_D1_PSSK5(array, isSorted) result(rank)
1428 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1429 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_PSSK5
1430 : #endif
1431 : use pm_kind, only: TKR => IK, SKC => SK5
1432 : use pm_container, only: css_pdt
1433 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
1434 : procedure(logical(LK)) :: isSorted
1435 : integer(TKR) :: rank(size(array, kind = IK))
1436 : end function
1437 : #endif
1438 :
1439 : #if SK4_ENABLED
1440 : module function getRankDenseCusCom_D1_PSSK4(array, isSorted) result(rank)
1441 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1442 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_PSSK4
1443 : #endif
1444 : use pm_kind, only: TKR => IK, SKC => SK4
1445 : use pm_container, only: css_pdt
1446 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
1447 : procedure(logical(LK)) :: isSorted
1448 : integer(TKR) :: rank(size(array, kind = IK))
1449 : end function
1450 : #endif
1451 :
1452 : #if SK3_ENABLED
1453 : module function getRankDenseCusCom_D1_PSSK3(array, isSorted) result(rank)
1454 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1455 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_PSSK3
1456 : #endif
1457 : use pm_kind, only: TKR => IK, SKC => SK3
1458 : use pm_container, only: css_pdt
1459 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
1460 : procedure(logical(LK)) :: isSorted
1461 : integer(TKR) :: rank(size(array, kind = IK))
1462 : end function
1463 : #endif
1464 :
1465 : #if SK2_ENABLED
1466 : module function getRankDenseCusCom_D1_PSSK2(array, isSorted) result(rank)
1467 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1468 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_PSSK2
1469 : #endif
1470 : use pm_kind, only: TKR => IK, SKC => SK2
1471 : use pm_container, only: css_pdt
1472 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
1473 : procedure(logical(LK)) :: isSorted
1474 : integer(TKR) :: rank(size(array, kind = IK))
1475 : end function
1476 : #endif
1477 :
1478 : #if SK1_ENABLED
1479 : module function getRankDenseCusCom_D1_PSSK1(array, isSorted) result(rank)
1480 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1481 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_PSSK1
1482 : #endif
1483 : use pm_kind, only: TKR => IK, SKC => SK1
1484 : use pm_container, only: css_pdt
1485 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
1486 : integer(TKR) :: rank(size(array, kind = IK))
1487 : procedure(logical(LK)) :: isSorted
1488 : end function
1489 : #endif
1490 :
1491 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1492 :
1493 : module function getRankDenseCusCom_D1_BSSK(array, isSorted) result(rank)
1494 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1495 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankDenseCusCom_D1_BSSK
1496 : #endif
1497 : use pm_kind, only: TKR => IK, SKC => SK
1498 : use pm_container, only: css_type
1499 : type(css_type) , intent(in) , contiguous :: array(:)
1500 : procedure(logical(LK)) :: isSorted
1501 : integer(TKR) :: rank(size(array, kind = IK))
1502 : end function
1503 :
1504 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1505 :
1506 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1507 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1508 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1509 :
1510 : end interface
1511 :
1512 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1513 :
1514 : !> \brief
1515 : !> Return the **Dense rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
1516 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
1517 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
1518 : !>
1519 : !> \details
1520 : !> This kind of ranking of values is widely known as <b>dense (`1223`) ranking</b>.<br>
1521 : !> In Dense ranking, items that compare equally receive the same ranking number, and the next items receive the immediately following ranking number.<br>
1522 : !> Equivalently, the ranking number of each item is `1` plus the number of items ranked above it that are distinct with respect to the ranking order.<br>
1523 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number 1 (*first*), *B* gets
1524 : !> ranking number `2` (*joint second*), *C* also gets ranking number `2` (*joint second*) and *D* gets ranking number `3` (*Third*).<br>
1525 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **Dense ranking** `1223`.<br>
1526 : !> Dense ranking effective factorizes the array into classes of unique values. Therefore, the Dense rank of each element of the array
1527 : !> is simply its class **level**.
1528 : !>
1529 : !> \param[out] rank : The output `contiguous` array of rank `1` of type `integer` of default kind \IK
1530 : !> containing the ranks of the corresponding elements of `array`.<br>
1531 : !> The size of `rank` must match that of `array` (or its length type parameter if `array` is a scalar string).<br>
1532 : !> **Read `rank(i)` as the Dense rank of the `i`th element of `array`.**
1533 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
1534 : !> <ol>
1535 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
1536 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
1537 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
1538 : !> <li> type `integer` of kind \IKALL or,<br>
1539 : !> <li> type `logical` of kind \LKALL or,<br>
1540 : !> <li> type `complex` of kind \CKALL or,<br>
1541 : !> <li> type `real` of kind \RKALL,<br>
1542 : !> </ol>
1543 : !> or,
1544 : !> <ol>
1545 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
1546 : !> </ol>
1547 : !> whose elements rankings will be computed and returned.
1548 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type
1549 : !> and kind as the input `array`.<br>
1550 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
1551 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
1552 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
1553 : !> If `array` is a Fortran string (i.e., a scalar `character`),
1554 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
1555 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
1556 : !> \code{.F90}
1557 : !> function isSorted(a,b) result (sorted)
1558 : !> use pm_kind, only: SK, IK, LK, CK, RK
1559 : !> TYPE(KIND) , intent(in) :: a, b
1560 : !> logical(LK) :: sorted
1561 : !> end function
1562 : !> \endcode
1563 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
1564 : !> \code{.F90}
1565 : !> use pm_container, only: StrCon
1566 : !> use pm_kind, only: SK, IK, LK, CK, RK
1567 : !> character(*, SK), intent(in) :: a, b
1568 : !> integer(IK) , intent(in) :: a, b
1569 : !> logical(LK) , intent(in) :: a, b
1570 : !> complex(CK) , intent(in) :: a, b
1571 : !> real(RK) , intent(in) :: a, b
1572 : !> type(StrCon) , intent(in) :: a, b
1573 : !> \endcode
1574 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
1575 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
1576 : !> \code{.F90}
1577 : !> function isSorted(a,b) result (sorted)
1578 : !> character(1,SKC), intent(in) :: a, b
1579 : !> logical(LK) :: sorted
1580 : !> end function
1581 : !> \endcode
1582 : !> where `SKC` represents the kind of the input string argument `array`.<br>
1583 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
1584 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
1585 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
1586 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
1587 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
1588 : !>
1589 : !> \interface{setRankDense}
1590 : !> \code{.F90}
1591 : !>
1592 : !> use pm_arrayRank, only: setRankDense
1593 : !>
1594 : !> call setRankDense(rank, array)
1595 : !> call setRankDense(rank, array, isSorted)
1596 : !>
1597 : !> \endcode
1598 : !>
1599 : !> \warning
1600 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
1601 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
1602 : !> identify ties within the Dense ranking of the input `array`.
1603 : !>
1604 : !> \warnpure
1605 : !>
1606 : !> \warning
1607 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
1608 : !>
1609 : !> \see
1610 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
1611 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
1612 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
1613 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
1614 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
1615 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
1616 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
1617 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
1618 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
1619 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
1620 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
1621 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
1622 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
1623 : !>
1624 : !> \example{setRankDense}
1625 : !> \include{lineno} example/pm_arrayRank/setRankDense/main.F90
1626 : !> \compilef{setRankDense}
1627 : !> \output{setRankDense}
1628 : !> \include{lineno} example/pm_arrayRank/setRankDense/main.out.F90
1629 : !>
1630 : !> \test
1631 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
1632 : !>
1633 : !> \bug
1634 : !> \status \unresolved
1635 : !> \source \ifort{2021.5}
1636 : !> \desc
1637 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
1638 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
1639 : !> \remedy
1640 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
1641 : !>
1642 : !> \todo
1643 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
1644 : !>
1645 : !> \todo
1646 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
1647 : !>
1648 : !> \finmain{setRankDense}
1649 : !>
1650 : !> \author
1651 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
1652 : interface setRankDense
1653 :
1654 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1655 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1656 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1657 :
1658 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1659 :
1660 : #if SK5_ENABLED
1661 : PURE module subroutine setRankDenseDefCom_D0_SK5(rank, array)
1662 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1663 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D0_SK5
1664 : #endif
1665 : use pm_kind, only: TKR => IK, SKC => SK5
1666 : character(*,SKC) , intent(in) :: array
1667 : integer(TKR) , intent(out) , contiguous :: rank(:)
1668 : end subroutine
1669 : #endif
1670 :
1671 : #if SK4_ENABLED
1672 : PURE module subroutine setRankDenseDefCom_D0_SK4(rank, array)
1673 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1674 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D0_SK4
1675 : #endif
1676 : use pm_kind, only: TKR => IK, SKC => SK4
1677 : character(*,SKC) , intent(in) :: array
1678 : integer(TKR) , intent(out) , contiguous :: rank(:)
1679 : end subroutine
1680 : #endif
1681 :
1682 : #if SK3_ENABLED
1683 : PURE module subroutine setRankDenseDefCom_D0_SK3(rank, array)
1684 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1685 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D0_SK3
1686 : #endif
1687 : use pm_kind, only: TKR => IK, SKC => SK3
1688 : character(*,SKC) , intent(in) :: array
1689 : integer(TKR) , intent(out) , contiguous :: rank(:)
1690 : end subroutine
1691 : #endif
1692 :
1693 : #if SK2_ENABLED
1694 : PURE module subroutine setRankDenseDefCom_D0_SK2(rank, array)
1695 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1696 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D0_SK2
1697 : #endif
1698 : use pm_kind, only: TKR => IK, SKC => SK2
1699 : character(*,SKC) , intent(in) :: array
1700 : integer(TKR) , intent(out) , contiguous :: rank(:)
1701 : end subroutine
1702 : #endif
1703 :
1704 : #if SK1_ENABLED
1705 : PURE module subroutine setRankDenseDefCom_D0_SK1(rank, array)
1706 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1707 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D0_SK1
1708 : #endif
1709 : use pm_kind, only: TKR => IK, SKC => SK1
1710 : character(*,SKC) , intent(in) :: array
1711 : integer(TKR) , intent(out) , contiguous :: rank(:)
1712 : end subroutine
1713 : #endif
1714 :
1715 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1716 :
1717 : #if SK5_ENABLED
1718 : PURE module subroutine setRankDenseDefCom_D1_SK5(rank, array)
1719 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1720 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_SK5
1721 : #endif
1722 : use pm_kind, only: TKR => IK, SKC => SK5
1723 : character(*,SKC) , intent(in) , contiguous :: array(:)
1724 : integer(TKR) , intent(out) , contiguous :: rank(:)
1725 : end subroutine
1726 : #endif
1727 :
1728 : #if SK4_ENABLED
1729 : PURE module subroutine setRankDenseDefCom_D1_SK4(rank, array)
1730 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1731 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_SK4
1732 : #endif
1733 : use pm_kind, only: TKR => IK, SKC => SK4
1734 : character(*,SKC) , intent(in) , contiguous :: array(:)
1735 : integer(TKR) , intent(out) , contiguous :: rank(:)
1736 : end subroutine
1737 : #endif
1738 :
1739 : #if SK3_ENABLED
1740 : PURE module subroutine setRankDenseDefCom_D1_SK3(rank, array)
1741 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1742 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_SK3
1743 : #endif
1744 : use pm_kind, only: TKR => IK, SKC => SK3
1745 : character(*,SKC) , intent(in) , contiguous :: array(:)
1746 : integer(TKR) , intent(out) , contiguous :: rank(:)
1747 : end subroutine
1748 : #endif
1749 :
1750 : #if SK2_ENABLED
1751 : PURE module subroutine setRankDenseDefCom_D1_SK2(rank, array)
1752 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1753 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_SK2
1754 : #endif
1755 : use pm_kind, only: TKR => IK, SKC => SK2
1756 : character(*,SKC) , intent(in) , contiguous :: array(:)
1757 : integer(TKR) , intent(out) , contiguous :: rank(:)
1758 : end subroutine
1759 : #endif
1760 :
1761 : #if SK1_ENABLED
1762 : PURE module subroutine setRankDenseDefCom_D1_SK1(rank, array)
1763 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1764 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_SK1
1765 : #endif
1766 : use pm_kind, only: TKR => IK, SKC => SK1
1767 : character(*,SKC) , intent(in) , contiguous :: array(:)
1768 : integer(TKR) , intent(out) , contiguous :: rank(:)
1769 : end subroutine
1770 : #endif
1771 :
1772 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1773 :
1774 : #if IK5_ENABLED
1775 : PURE module subroutine setRankDenseDefCom_D1_IK5(rank, array)
1776 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1777 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_IK5
1778 : #endif
1779 : use pm_kind, only: TKR => IK, IKC => IK5
1780 : integer(IKC) , intent(in) , contiguous :: array(:)
1781 : integer(TKR) , intent(out) , contiguous :: rank(:)
1782 : end subroutine
1783 : #endif
1784 :
1785 : #if IK4_ENABLED
1786 : PURE module subroutine setRankDenseDefCom_D1_IK4(rank, array)
1787 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1788 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_IK4
1789 : #endif
1790 : use pm_kind, only: TKR => IK, IKC => IK4
1791 : integer(IKC) , intent(in) , contiguous :: array(:)
1792 : integer(TKR) , intent(out) , contiguous :: rank(:)
1793 : end subroutine
1794 : #endif
1795 :
1796 : #if IK3_ENABLED
1797 : PURE module subroutine setRankDenseDefCom_D1_IK3(rank, array)
1798 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1799 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_IK3
1800 : #endif
1801 : use pm_kind, only: TKR => IK, IKC => IK3
1802 : integer(IKC) , intent(in) , contiguous :: array(:)
1803 : integer(TKR) , intent(out) , contiguous :: rank(:)
1804 : end subroutine
1805 : #endif
1806 :
1807 : #if IK2_ENABLED
1808 : PURE module subroutine setRankDenseDefCom_D1_IK2(rank, array)
1809 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1810 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_IK2
1811 : #endif
1812 : use pm_kind, only: TKR => IK, IKC => IK2
1813 : integer(IKC) , intent(in) , contiguous :: array(:)
1814 : integer(TKR) , intent(out) , contiguous :: rank(:)
1815 : end subroutine
1816 : #endif
1817 :
1818 : #if IK1_ENABLED
1819 : PURE module subroutine setRankDenseDefCom_D1_IK1(rank, array)
1820 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1821 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_IK1
1822 : #endif
1823 : use pm_kind, only: TKR => IK, IKC => IK1
1824 : integer(IKC) , intent(in) , contiguous :: array(:)
1825 : integer(TKR) , intent(out) , contiguous :: rank(:)
1826 : end subroutine
1827 : #endif
1828 :
1829 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1830 :
1831 : #if LK5_ENABLED
1832 : PURE module subroutine setRankDenseDefCom_D1_LK5(rank, array)
1833 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1834 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_LK5
1835 : #endif
1836 : use pm_kind, only: TKR => IK, LKC => LK5
1837 : logical(LKC) , intent(in) , contiguous :: array(:)
1838 : integer(TKR) , intent(out) , contiguous :: rank(:)
1839 : end subroutine
1840 : #endif
1841 :
1842 : #if LK4_ENABLED
1843 : PURE module subroutine setRankDenseDefCom_D1_LK4(rank, array)
1844 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1845 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_LK4
1846 : #endif
1847 : use pm_kind, only: TKR => IK, LKC => LK4
1848 : logical(LKC) , intent(in) , contiguous :: array(:)
1849 : integer(TKR) , intent(out) , contiguous :: rank(:)
1850 : end subroutine
1851 : #endif
1852 :
1853 : #if LK3_ENABLED
1854 : PURE module subroutine setRankDenseDefCom_D1_LK3(rank, array)
1855 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1856 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_LK3
1857 : #endif
1858 : use pm_kind, only: TKR => IK, LKC => LK3
1859 : logical(LKC) , intent(in) , contiguous :: array(:)
1860 : integer(TKR) , intent(out) , contiguous :: rank(:)
1861 : end subroutine
1862 : #endif
1863 :
1864 : #if LK2_ENABLED
1865 : PURE module subroutine setRankDenseDefCom_D1_LK2(rank, array)
1866 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1867 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_LK2
1868 : #endif
1869 : use pm_kind, only: TKR => IK, LKC => LK2
1870 : logical(LKC) , intent(in) , contiguous :: array(:)
1871 : integer(TKR) , intent(out) , contiguous :: rank(:)
1872 : end subroutine
1873 : #endif
1874 :
1875 : #if LK1_ENABLED
1876 : PURE module subroutine setRankDenseDefCom_D1_LK1(rank, array)
1877 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1878 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_LK1
1879 : #endif
1880 : use pm_kind, only: TKR => IK, LKC => LK1
1881 : logical(LKC) , intent(in) , contiguous :: array(:)
1882 : integer(TKR) , intent(out) , contiguous :: rank(:)
1883 : end subroutine
1884 : #endif
1885 :
1886 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1887 :
1888 : #if CK5_ENABLED
1889 : PURE module subroutine setRankDenseDefCom_D1_CK5(rank, array)
1890 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1891 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_CK5
1892 : #endif
1893 : use pm_kind, only: TKR => IK, CKC => CK5
1894 : complex(CKC) , intent(in) , contiguous :: array(:)
1895 : integer(TKR) , intent(out) , contiguous :: rank(:)
1896 : end subroutine
1897 : #endif
1898 :
1899 : #if CK4_ENABLED
1900 : PURE module subroutine setRankDenseDefCom_D1_CK4(rank, array)
1901 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1902 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_CK4
1903 : #endif
1904 : use pm_kind, only: TKR => IK, CKC => CK4
1905 : complex(CKC) , intent(in) , contiguous :: array(:)
1906 : integer(TKR) , intent(out) , contiguous :: rank(:)
1907 : end subroutine
1908 : #endif
1909 :
1910 : #if CK3_ENABLED
1911 : PURE module subroutine setRankDenseDefCom_D1_CK3(rank, array)
1912 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1913 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_CK3
1914 : #endif
1915 : use pm_kind, only: TKR => IK, CKC => CK3
1916 : complex(CKC) , intent(in) , contiguous :: array(:)
1917 : integer(TKR) , intent(out) , contiguous :: rank(:)
1918 : end subroutine
1919 : #endif
1920 :
1921 : #if CK2_ENABLED
1922 : PURE module subroutine setRankDenseDefCom_D1_CK2(rank, array)
1923 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1924 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_CK2
1925 : #endif
1926 : use pm_kind, only: TKR => IK, CKC => CK2
1927 : complex(CKC) , intent(in) , contiguous :: array(:)
1928 : integer(TKR) , intent(out) , contiguous :: rank(:)
1929 : end subroutine
1930 : #endif
1931 :
1932 : #if CK1_ENABLED
1933 : PURE module subroutine setRankDenseDefCom_D1_CK1(rank, array)
1934 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1935 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_CK1
1936 : #endif
1937 : use pm_kind, only: TKR => IK, CKC => CK1
1938 : complex(CKC) , intent(in) , contiguous :: array(:)
1939 : integer(TKR) , intent(out) , contiguous :: rank(:)
1940 : end subroutine
1941 : #endif
1942 :
1943 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1944 :
1945 : #if RK5_ENABLED
1946 : PURE module subroutine setRankDenseDefCom_D1_RK5(rank, array)
1947 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1948 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_RK5
1949 : #endif
1950 : use pm_kind, only: TKR => IK, RKC => RK5
1951 : real(RKC) , intent(in) , contiguous :: array(:)
1952 : integer(TKR) , intent(out) , contiguous :: rank(:)
1953 : end subroutine
1954 : #endif
1955 :
1956 : #if RK4_ENABLED
1957 : PURE module subroutine setRankDenseDefCom_D1_RK4(rank, array)
1958 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1959 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_RK4
1960 : #endif
1961 : use pm_kind, only: TKR => IK, RKC => RK4
1962 : real(RKC) , intent(in) , contiguous :: array(:)
1963 : integer(TKR) , intent(out) , contiguous :: rank(:)
1964 : end subroutine
1965 : #endif
1966 :
1967 : #if RK3_ENABLED
1968 : PURE module subroutine setRankDenseDefCom_D1_RK3(rank, array)
1969 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1970 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_RK3
1971 : #endif
1972 : use pm_kind, only: TKR => IK, RKC => RK3
1973 : real(RKC) , intent(in) , contiguous :: array(:)
1974 : integer(TKR) , intent(out) , contiguous :: rank(:)
1975 : end subroutine
1976 : #endif
1977 :
1978 : #if RK2_ENABLED
1979 : PURE module subroutine setRankDenseDefCom_D1_RK2(rank, array)
1980 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1981 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_RK2
1982 : #endif
1983 : use pm_kind, only: TKR => IK, RKC => RK2
1984 : real(RKC) , intent(in) , contiguous :: array(:)
1985 : integer(TKR) , intent(out) , contiguous :: rank(:)
1986 : end subroutine
1987 : #endif
1988 :
1989 : #if RK1_ENABLED
1990 : PURE module subroutine setRankDenseDefCom_D1_RK1(rank, array)
1991 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1992 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_RK1
1993 : #endif
1994 : use pm_kind, only: TKR => IK, RKC => RK1
1995 : real(RKC) , intent(in) , contiguous :: array(:)
1996 : integer(TKR) , intent(out) , contiguous :: rank(:)
1997 : end subroutine
1998 : #endif
1999 :
2000 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2001 :
2002 : #if SK5_ENABLED
2003 : PURE module subroutine setRankDenseDefCom_D1_PSSK5(rank, array)
2004 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2005 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_PSSK5
2006 : #endif
2007 : use pm_kind, only: TKR => IK, SKC => SK5
2008 : use pm_container, only: css_pdt
2009 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2010 : integer(TKR) , intent(out) , contiguous :: rank(:)
2011 : end subroutine
2012 : #endif
2013 :
2014 : #if SK4_ENABLED
2015 : PURE module subroutine setRankDenseDefCom_D1_PSSK4(rank, array)
2016 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2017 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_PSSK4
2018 : #endif
2019 : use pm_kind, only: TKR => IK, SKC => SK4
2020 : use pm_container, only: css_pdt
2021 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2022 : integer(TKR) , intent(out) , contiguous :: rank(:)
2023 : end subroutine
2024 : #endif
2025 :
2026 : #if SK3_ENABLED
2027 : PURE module subroutine setRankDenseDefCom_D1_PSSK3(rank, array)
2028 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2029 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_PSSK3
2030 : #endif
2031 : use pm_kind, only: TKR => IK, SKC => SK3
2032 : use pm_container, only: css_pdt
2033 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2034 : integer(TKR) , intent(out) , contiguous :: rank(:)
2035 : end subroutine
2036 : #endif
2037 :
2038 : #if SK2_ENABLED
2039 : PURE module subroutine setRankDenseDefCom_D1_PSSK2(rank, array)
2040 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2041 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_PSSK2
2042 : #endif
2043 : use pm_kind, only: TKR => IK, SKC => SK2
2044 : use pm_container, only: css_pdt
2045 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2046 : integer(TKR) , intent(out) , contiguous :: rank(:)
2047 : end subroutine
2048 : #endif
2049 :
2050 : #if SK1_ENABLED
2051 : PURE module subroutine setRankDenseDefCom_D1_PSSK1(rank, array)
2052 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2053 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_PSSK1
2054 : #endif
2055 : use pm_kind, only: TKR => IK, SKC => SK1
2056 : use pm_container, only: css_pdt
2057 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2058 : integer(TKR) , intent(out) , contiguous :: rank(:)
2059 : end subroutine
2060 : #endif
2061 :
2062 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2063 :
2064 : PURE module subroutine setRankDenseDefCom_D1_BSSK(rank, array)
2065 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2066 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseDefCom_D1_BSSK
2067 : #endif
2068 : use pm_kind, only: TKR => IK, SKC => SK
2069 : use pm_container, only: css_type
2070 : type(css_type) , intent(in) , contiguous :: array(:)
2071 : integer(TKR) , intent(out) , contiguous :: rank(:)
2072 : end subroutine
2073 :
2074 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2075 :
2076 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2077 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2078 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2079 :
2080 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2081 :
2082 : #if SK5_ENABLED
2083 : module subroutine setRankDenseCusCom_D0_SK5(rank, array, isSorted)
2084 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2085 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D0_SK5
2086 : #endif
2087 : use pm_kind, only: TKR => IK, SKC => SK5
2088 : character(*,SKC) , intent(in) :: array
2089 : integer(TKR) , intent(out) , contiguous :: rank(:)
2090 : procedure(logical(LK)) :: isSorted
2091 : end subroutine
2092 : #endif
2093 :
2094 : #if SK4_ENABLED
2095 : module subroutine setRankDenseCusCom_D0_SK4(rank, array, isSorted)
2096 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2097 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D0_SK4
2098 : #endif
2099 : use pm_kind, only: TKR => IK, SKC => SK4
2100 : character(*,SKC) , intent(in) :: array
2101 : integer(TKR) , intent(out) , contiguous :: rank(:)
2102 : procedure(logical(LK)) :: isSorted
2103 : end subroutine
2104 : #endif
2105 :
2106 : #if SK3_ENABLED
2107 : module subroutine setRankDenseCusCom_D0_SK3(rank, array, isSorted)
2108 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2109 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D0_SK3
2110 : #endif
2111 : use pm_kind, only: TKR => IK, SKC => SK3
2112 : character(*,SKC) , intent(in) :: array
2113 : integer(TKR) , intent(out) , contiguous :: rank(:)
2114 : procedure(logical(LK)) :: isSorted
2115 : end subroutine
2116 : #endif
2117 :
2118 : #if SK2_ENABLED
2119 : module subroutine setRankDenseCusCom_D0_SK2(rank, array, isSorted)
2120 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2121 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D0_SK2
2122 : #endif
2123 : use pm_kind, only: TKR => IK, SKC => SK2
2124 : character(*,SKC) , intent(in) :: array
2125 : integer(TKR) , intent(out) , contiguous :: rank(:)
2126 : procedure(logical(LK)) :: isSorted
2127 : end subroutine
2128 : #endif
2129 :
2130 : #if SK1_ENABLED
2131 : module subroutine setRankDenseCusCom_D0_SK1(rank, array, isSorted)
2132 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2133 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D0_SK1
2134 : #endif
2135 : use pm_kind, only: TKR => IK, SKC => SK1
2136 : character(*,SKC) , intent(in) :: array
2137 : integer(TKR) , intent(out) , contiguous :: rank(:)
2138 : procedure(logical(LK)) :: isSorted
2139 : end subroutine
2140 : #endif
2141 :
2142 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2143 :
2144 : #if SK5_ENABLED
2145 : module subroutine setRankDenseCusCom_D1_SK5(rank, array, isSorted)
2146 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2147 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_SK5
2148 : #endif
2149 : use pm_kind, only: TKR => IK, SKC => SK5
2150 : character(*,SKC) , intent(in) , contiguous :: array(:)
2151 : integer(TKR) , intent(out) , contiguous :: rank(:)
2152 : procedure(logical(LK)) :: isSorted
2153 : end subroutine
2154 : #endif
2155 :
2156 : #if SK4_ENABLED
2157 : module subroutine setRankDenseCusCom_D1_SK4(rank, array, isSorted)
2158 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2159 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_SK4
2160 : #endif
2161 : use pm_kind, only: TKR => IK, SKC => SK4
2162 : character(*,SKC) , intent(in) , contiguous :: array(:)
2163 : integer(TKR) , intent(out) , contiguous :: rank(:)
2164 : procedure(logical(LK)) :: isSorted
2165 : end subroutine
2166 : #endif
2167 :
2168 : #if SK3_ENABLED
2169 : module subroutine setRankDenseCusCom_D1_SK3(rank, array, isSorted)
2170 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2171 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_SK3
2172 : #endif
2173 : use pm_kind, only: TKR => IK, SKC => SK3
2174 : character(*,SKC) , intent(in) , contiguous :: array(:)
2175 : integer(TKR) , intent(out) , contiguous :: rank(:)
2176 : procedure(logical(LK)) :: isSorted
2177 : end subroutine
2178 : #endif
2179 :
2180 : #if SK2_ENABLED
2181 : module subroutine setRankDenseCusCom_D1_SK2(rank, array, isSorted)
2182 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2183 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_SK2
2184 : #endif
2185 : use pm_kind, only: TKR => IK, SKC => SK2
2186 : character(*,SKC) , intent(in) , contiguous :: array(:)
2187 : integer(TKR) , intent(out) , contiguous :: rank(:)
2188 : procedure(logical(LK)) :: isSorted
2189 : end subroutine
2190 : #endif
2191 :
2192 : #if SK1_ENABLED
2193 : module subroutine setRankDenseCusCom_D1_SK1(rank, array, isSorted)
2194 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2195 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_SK1
2196 : #endif
2197 : use pm_kind, only: TKR => IK, SKC => SK1
2198 : character(*,SKC) , intent(in) , contiguous :: array(:)
2199 : integer(TKR) , intent(out) , contiguous :: rank(:)
2200 : procedure(logical(LK)) :: isSorted
2201 : end subroutine
2202 : #endif
2203 :
2204 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2205 :
2206 : #if IK5_ENABLED
2207 : module subroutine setRankDenseCusCom_D1_IK5(rank, array, isSorted)
2208 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2209 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_IK5
2210 : #endif
2211 : use pm_kind, only: TKR => IK, IKC => IK5
2212 : integer(IKC) , intent(in) , contiguous :: array(:)
2213 : integer(TKR) , intent(out) , contiguous :: rank(:)
2214 : procedure(logical(LK)) :: isSorted
2215 : end subroutine
2216 : #endif
2217 :
2218 : #if IK4_ENABLED
2219 : module subroutine setRankDenseCusCom_D1_IK4(rank, array, isSorted)
2220 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2221 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_IK4
2222 : #endif
2223 : use pm_kind, only: TKR => IK, IKC => IK4
2224 : integer(IKC) , intent(in) , contiguous :: array(:)
2225 : integer(TKR) , intent(out) , contiguous :: rank(:)
2226 : procedure(logical(LK)) :: isSorted
2227 : end subroutine
2228 : #endif
2229 :
2230 : #if IK3_ENABLED
2231 : module subroutine setRankDenseCusCom_D1_IK3(rank, array, isSorted)
2232 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2233 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_IK3
2234 : #endif
2235 : use pm_kind, only: TKR => IK, IKC => IK3
2236 : integer(IKC) , intent(in) , contiguous :: array(:)
2237 : integer(TKR) , intent(out) , contiguous :: rank(:)
2238 : procedure(logical(LK)) :: isSorted
2239 : end subroutine
2240 : #endif
2241 :
2242 : #if IK2_ENABLED
2243 : module subroutine setRankDenseCusCom_D1_IK2(rank, array, isSorted)
2244 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2245 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_IK2
2246 : #endif
2247 : use pm_kind, only: TKR => IK, IKC => IK2
2248 : integer(IKC) , intent(in) , contiguous :: array(:)
2249 : integer(TKR) , intent(out) , contiguous :: rank(:)
2250 : procedure(logical(LK)) :: isSorted
2251 : end subroutine
2252 : #endif
2253 :
2254 : #if IK1_ENABLED
2255 : module subroutine setRankDenseCusCom_D1_IK1(rank, array, isSorted)
2256 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2257 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_IK1
2258 : #endif
2259 : use pm_kind, only: TKR => IK, IKC => IK1
2260 : integer(IKC) , intent(in) , contiguous :: array(:)
2261 : integer(TKR) , intent(out) , contiguous :: rank(:)
2262 : procedure(logical(LK)) :: isSorted
2263 : end subroutine
2264 : #endif
2265 :
2266 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2267 :
2268 : #if LK5_ENABLED
2269 : module subroutine setRankDenseCusCom_D1_LK5(rank, array, isSorted)
2270 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2271 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_LK5
2272 : #endif
2273 : use pm_kind, only: TKR => IK, LKC => LK5
2274 : logical(LKC) , intent(in) , contiguous :: array(:)
2275 : integer(TKR) , intent(out) , contiguous :: rank(:)
2276 : procedure(logical(LK)) :: isSorted
2277 : end subroutine
2278 : #endif
2279 :
2280 : #if LK4_ENABLED
2281 : module subroutine setRankDenseCusCom_D1_LK4(rank, array, isSorted)
2282 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2283 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_LK4
2284 : #endif
2285 : use pm_kind, only: TKR => IK, LKC => LK4
2286 : logical(LKC) , intent(in) , contiguous :: array(:)
2287 : integer(TKR) , intent(out) , contiguous :: rank(:)
2288 : procedure(logical(LK)) :: isSorted
2289 : end subroutine
2290 : #endif
2291 :
2292 : #if LK3_ENABLED
2293 : module subroutine setRankDenseCusCom_D1_LK3(rank, array, isSorted)
2294 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2295 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_LK3
2296 : #endif
2297 : use pm_kind, only: TKR => IK, LKC => LK3
2298 : logical(LKC) , intent(in) , contiguous :: array(:)
2299 : integer(TKR) , intent(out) , contiguous :: rank(:)
2300 : procedure(logical(LK)) :: isSorted
2301 : end subroutine
2302 : #endif
2303 :
2304 : #if LK2_ENABLED
2305 : module subroutine setRankDenseCusCom_D1_LK2(rank, array, isSorted)
2306 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2307 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_LK2
2308 : #endif
2309 : use pm_kind, only: TKR => IK, LKC => LK2
2310 : logical(LKC) , intent(in) , contiguous :: array(:)
2311 : integer(TKR) , intent(out) , contiguous :: rank(:)
2312 : procedure(logical(LK)) :: isSorted
2313 : end subroutine
2314 : #endif
2315 :
2316 : #if LK1_ENABLED
2317 : module subroutine setRankDenseCusCom_D1_LK1(rank, array, isSorted)
2318 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2319 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_LK1
2320 : #endif
2321 : use pm_kind, only: TKR => IK, LKC => LK1
2322 : logical(LKC) , intent(in) , contiguous :: array(:)
2323 : integer(TKR) , intent(out) , contiguous :: rank(:)
2324 : procedure(logical(LK)) :: isSorted
2325 : end subroutine
2326 : #endif
2327 :
2328 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2329 :
2330 : #if CK5_ENABLED
2331 : module subroutine setRankDenseCusCom_D1_CK5(rank, array, isSorted)
2332 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2333 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_CK5
2334 : #endif
2335 : use pm_kind, only: TKR => IK, CKC => CK5
2336 : complex(CKC) , intent(in) , contiguous :: array(:)
2337 : integer(TKR) , intent(out) , contiguous :: rank(:)
2338 : procedure(logical(LK)) :: isSorted
2339 : end subroutine
2340 : #endif
2341 :
2342 : #if CK4_ENABLED
2343 : module subroutine setRankDenseCusCom_D1_CK4(rank, array, isSorted)
2344 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2345 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_CK4
2346 : #endif
2347 : use pm_kind, only: TKR => IK, CKC => CK4
2348 : complex(CKC) , intent(in) , contiguous :: array(:)
2349 : integer(TKR) , intent(out) , contiguous :: rank(:)
2350 : procedure(logical(LK)) :: isSorted
2351 : end subroutine
2352 : #endif
2353 :
2354 : #if CK3_ENABLED
2355 : module subroutine setRankDenseCusCom_D1_CK3(rank, array, isSorted)
2356 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2357 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_CK3
2358 : #endif
2359 : use pm_kind, only: TKR => IK, CKC => CK3
2360 : complex(CKC) , intent(in) , contiguous :: array(:)
2361 : integer(TKR) , intent(out) , contiguous :: rank(:)
2362 : procedure(logical(LK)) :: isSorted
2363 : end subroutine
2364 : #endif
2365 :
2366 : #if CK2_ENABLED
2367 : module subroutine setRankDenseCusCom_D1_CK2(rank, array, isSorted)
2368 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2369 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_CK2
2370 : #endif
2371 : use pm_kind, only: TKR => IK, CKC => CK2
2372 : complex(CKC) , intent(in) , contiguous :: array(:)
2373 : integer(TKR) , intent(out) , contiguous :: rank(:)
2374 : procedure(logical(LK)) :: isSorted
2375 : end subroutine
2376 : #endif
2377 :
2378 : #if CK1_ENABLED
2379 : module subroutine setRankDenseCusCom_D1_CK1(rank, array, isSorted)
2380 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2381 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_CK1
2382 : #endif
2383 : use pm_kind, only: TKR => IK, CKC => CK1
2384 : complex(CKC) , intent(in) , contiguous :: array(:)
2385 : integer(TKR) , intent(out) , contiguous :: rank(:)
2386 : procedure(logical(LK)) :: isSorted
2387 : end subroutine
2388 : #endif
2389 :
2390 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2391 :
2392 : #if RK5_ENABLED
2393 : module subroutine setRankDenseCusCom_D1_RK5(rank, array, isSorted)
2394 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2395 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_RK5
2396 : #endif
2397 : use pm_kind, only: TKR => IK, RKC => RK5
2398 : real(RKC) , intent(in) , contiguous :: array(:)
2399 : integer(TKR) , intent(out) , contiguous :: rank(:)
2400 : procedure(logical(LK)) :: isSorted
2401 : end subroutine
2402 : #endif
2403 :
2404 : #if RK4_ENABLED
2405 : module subroutine setRankDenseCusCom_D1_RK4(rank, array, isSorted)
2406 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2407 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_RK4
2408 : #endif
2409 : use pm_kind, only: TKR => IK, RKC => RK4
2410 : real(RKC) , intent(in) , contiguous :: array(:)
2411 : integer(TKR) , intent(out) , contiguous :: rank(:)
2412 : procedure(logical(LK)) :: isSorted
2413 : end subroutine
2414 : #endif
2415 :
2416 : #if RK3_ENABLED
2417 : module subroutine setRankDenseCusCom_D1_RK3(rank, array, isSorted)
2418 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2419 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_RK3
2420 : #endif
2421 : use pm_kind, only: TKR => IK, RKC => RK3
2422 : real(RKC) , intent(in) , contiguous :: array(:)
2423 : integer(TKR) , intent(out) , contiguous :: rank(:)
2424 : procedure(logical(LK)) :: isSorted
2425 : end subroutine
2426 : #endif
2427 :
2428 : #if RK2_ENABLED
2429 : module subroutine setRankDenseCusCom_D1_RK2(rank, array, isSorted)
2430 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2431 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_RK2
2432 : #endif
2433 : use pm_kind, only: TKR => IK, RKC => RK2
2434 : real(RKC) , intent(in) , contiguous :: array(:)
2435 : integer(TKR) , intent(out) , contiguous :: rank(:)
2436 : procedure(logical(LK)) :: isSorted
2437 : end subroutine
2438 : #endif
2439 :
2440 : #if RK1_ENABLED
2441 : module subroutine setRankDenseCusCom_D1_RK1(rank, array, isSorted)
2442 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2443 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_RK1
2444 : #endif
2445 : use pm_kind, only: TKR => IK, RKC => RK1
2446 : real(RKC) , intent(in) , contiguous :: array(:)
2447 : integer(TKR) , intent(out) , contiguous :: rank(:)
2448 : procedure(logical(LK)) :: isSorted
2449 : end subroutine
2450 : #endif
2451 :
2452 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2453 :
2454 : #if SK5_ENABLED
2455 : module subroutine setRankDenseCusCom_D1_PSSK5(rank, array, isSorted)
2456 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2457 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_PSSK5
2458 : #endif
2459 : use pm_kind, only: TKR => IK, SKC => SK5
2460 : use pm_container, only: css_pdt
2461 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2462 : integer(TKR) , intent(out) , contiguous :: rank(:)
2463 : procedure(logical(LK)) :: isSorted
2464 : end subroutine
2465 : #endif
2466 :
2467 : #if SK4_ENABLED
2468 : module subroutine setRankDenseCusCom_D1_PSSK4(rank, array, isSorted)
2469 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2470 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_PSSK4
2471 : #endif
2472 : use pm_kind, only: TKR => IK, SKC => SK4
2473 : use pm_container, only: css_pdt
2474 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2475 : integer(TKR) , intent(out) , contiguous :: rank(:)
2476 : procedure(logical(LK)) :: isSorted
2477 : end subroutine
2478 : #endif
2479 :
2480 : #if SK3_ENABLED
2481 : module subroutine setRankDenseCusCom_D1_PSSK3(rank, array, isSorted)
2482 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2483 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_PSSK3
2484 : #endif
2485 : use pm_kind, only: TKR => IK, SKC => SK3
2486 : use pm_container, only: css_pdt
2487 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2488 : integer(TKR) , intent(out) , contiguous :: rank(:)
2489 : procedure(logical(LK)) :: isSorted
2490 : end subroutine
2491 : #endif
2492 :
2493 : #if SK2_ENABLED
2494 : module subroutine setRankDenseCusCom_D1_PSSK2(rank, array, isSorted)
2495 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2496 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_PSSK2
2497 : #endif
2498 : use pm_kind, only: TKR => IK, SKC => SK2
2499 : use pm_container, only: css_pdt
2500 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2501 : integer(TKR) , intent(out) , contiguous :: rank(:)
2502 : procedure(logical(LK)) :: isSorted
2503 : end subroutine
2504 : #endif
2505 :
2506 : #if SK1_ENABLED
2507 : module subroutine setRankDenseCusCom_D1_PSSK1(rank, array, isSorted)
2508 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2509 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_PSSK1
2510 : #endif
2511 : use pm_kind, only: TKR => IK, SKC => SK1
2512 : use pm_container, only: css_pdt
2513 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
2514 : integer(TKR) , intent(out) , contiguous :: rank(:)
2515 : procedure(logical(LK)) :: isSorted
2516 : end subroutine
2517 : #endif
2518 :
2519 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2520 :
2521 : module subroutine setRankDenseCusCom_D1_BSSK(rank, array, isSorted)
2522 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2523 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankDenseCusCom_D1_BSSK
2524 : #endif
2525 : use pm_kind, only: TKR => IK, SKC => SK
2526 : use pm_container, only: css_type
2527 : type(css_type) , intent(in) , contiguous :: array(:)
2528 : integer(TKR) , intent(out) , contiguous :: rank(:)
2529 : procedure(logical(LK)) :: isSorted
2530 : end subroutine
2531 :
2532 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2533 :
2534 : end interface
2535 :
2536 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2537 :
2538 : !> \brief
2539 : !> Generate and return the **Fractional rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
2540 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
2541 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
2542 : !>
2543 : !> \details
2544 : !> This kind of ranking of values is widely known as <b>fractional (`1 2.5 2.5 4`) ranking</b>.<br>
2545 : !> In Fractional ranking, items that compare equal receive the same ranking number, which is the mean of what they would have under ordinal
2546 : !> rankings; equivalently, the ranking number of 1 plus the number of items ranked above it plus half the number of items equal to it.<br>
2547 : !> This strategy has the property that the sum of the ranking numbers is the same as under ordinal ranking.<br>
2548 : !> For this reason, it is used in computing Borda counts and ranking statistics (e.g., Spearman Correlation).<br>
2549 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number `1` (*first*),
2550 : !> *B* and *C* each get ranking number `2.5` (average of *joint second/third*) and *D* gets ranking number `4` (*fourth*).<br>
2551 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **Fractional ranking** `1223`.<br>
2552 : !> **Example:**<br>
2553 : !> Suppose the data set is `1.0, 1.0, 2.0, 3.0, 3.0, 4.0, 5.0, 5.0, 5.0`.<br>
2554 : !> The ordinal ranks are `1, 2, 3, 4, 5, 6, 7, 8, 9`.<br>
2555 : !> For `v = 1.0`, the Fractional rank is the average of the ordinal ranks: `(1 + 2) / 2 = 1.5`.<br>
2556 : !> In a similar manner, for `v = 5.0`, the Fractional rank is `(7 + 8 + 9) / 3 = 8.0`.<br>
2557 : !> Thus the Fractional ranks are: `1.5, 1.5, 3.0, 4.5, 4.5, 6.0, 8.0, 8.0, 8.0`
2558 : !>
2559 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
2560 : !> <ol>
2561 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
2562 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
2563 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
2564 : !> <li> type `integer` of kind \IKALL or,<br>
2565 : !> <li> type `logical` of kind \LKALL or,<br>
2566 : !> <li> type `complex` of kind \CKALL or,<br>
2567 : !> <li> type `real` of kind \RKALL,<br>
2568 : !> </ol>
2569 : !> or,
2570 : !> <ol>
2571 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
2572 : !> </ol>
2573 : !> whose elements rankings will be computed and returned.
2574 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type and kind as the input `array`.<br>
2575 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
2576 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
2577 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
2578 : !> If `array` is a Fortran string (i.e., a scalar `character`),
2579 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
2580 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
2581 : !> \code{.F90}
2582 : !> function isSorted(a,b) result (sorted)
2583 : !> use pm_kind, only: SK, IK, LK, CK, RK
2584 : !> TYPE(KIND) , intent(in) :: a, b
2585 : !> logical(LK) :: sorted
2586 : !> end function
2587 : !> \endcode
2588 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
2589 : !> \code{.F90}
2590 : !> use pm_container, only: StrCon
2591 : !> use pm_kind, only: SK, IK, LK, CK, RK
2592 : !> character(*, SK), intent(in) :: a, b
2593 : !> integer(IK) , intent(in) :: a, b
2594 : !> logical(LK) , intent(in) :: a, b
2595 : !> complex(CK) , intent(in) :: a, b
2596 : !> real(RK) , intent(in) :: a, b
2597 : !> type(StrCon) , intent(in) :: a, b
2598 : !> \endcode
2599 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
2600 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
2601 : !> \code{.F90}
2602 : !> function isSorted(a,b) result (sorted)
2603 : !> character(1,SKC), intent(in) :: a, b
2604 : !> logical(LK) :: sorted
2605 : !> end function
2606 : !> \endcode
2607 : !> where `SKC` represents the kind of the input string argument `array`.<br>
2608 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
2609 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
2610 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
2611 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
2612 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
2613 : !>
2614 : !> \return
2615 : !> `rank(1:size(array)` : The output `contiguous` array of rank `1` of type `real` of default kind \RK containing the ranks of the corresponding elements of `array`.<br>
2616 : !> The size of `rank` must match that of `array` (or its length type parameter if `array` is a scalar string).<br>
2617 : !> **Read `rank(i)` as the Fractional rank of the `i`th element of `array`.**
2618 : !>
2619 : !> \interface{getRankFractional}
2620 : !> \code{.F90}
2621 : !>
2622 : !> use pm_arrayRank, only: getRankFractional
2623 : !>
2624 : !> rank(1:size(array)) = getRankFractional(array)
2625 : !> rank(1:size(array)) = getRankFractional(array, isSorted)
2626 : !>
2627 : !> \endcode
2628 : !>
2629 : !> \warning
2630 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
2631 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
2632 : !> identify ties within the Standard ranking of the input `array`.
2633 : !>
2634 : !> \warnpure
2635 : !>
2636 : !> \warning
2637 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
2638 : !>
2639 : !> \see
2640 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
2641 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
2642 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
2643 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
2644 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
2645 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
2646 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
2647 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
2648 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
2649 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
2650 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
2651 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
2652 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
2653 : !>
2654 : !> \example{getRankFractional}
2655 : !> \include{lineno} example/pm_arrayRank/getRankFractional/main.F90
2656 : !> \compilef{getRankFractional}
2657 : !> \output{getRankFractional}
2658 : !> \include{lineno} example/pm_arrayRank/getRankFractional/main.out.F90
2659 : !>
2660 : !> \test
2661 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
2662 : !>
2663 : !> \bug
2664 : !> \status \unresolved
2665 : !> \source \ifort{2021.5}
2666 : !> \desc
2667 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
2668 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
2669 : !> \remedy
2670 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
2671 : !>
2672 : !> \todo
2673 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
2674 : !>
2675 : !> \todo
2676 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
2677 : !>
2678 : !> \finmain{getRankFractional}
2679 : !>
2680 : !> \author
2681 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
2682 : interface getRankFractional
2683 :
2684 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2685 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2686 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2687 :
2688 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2689 :
2690 : #if SK5_ENABLED
2691 : module function getRankFractionalDefCom_D0_SK5(array) result(rank)
2692 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2693 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D0_SK5
2694 : #endif
2695 : use pm_kind, only: TKR => RK, SKC => SK5
2696 : character(*,SKC) , intent(in) :: array
2697 : real(TKR) :: rank(len(array, IK))
2698 : end function
2699 : #endif
2700 :
2701 : #if SK4_ENABLED
2702 : module function getRankFractionalDefCom_D0_SK4(array) result(rank)
2703 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2704 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D0_SK4
2705 : #endif
2706 : use pm_kind, only: TKR => RK, SKC => SK4
2707 : character(*,SKC) , intent(in) :: array
2708 : real(TKR) :: rank(len(array, IK))
2709 : end function
2710 : #endif
2711 :
2712 : #if SK3_ENABLED
2713 : module function getRankFractionalDefCom_D0_SK3(array) result(rank)
2714 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2715 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D0_SK3
2716 : #endif
2717 : use pm_kind, only: TKR => RK, SKC => SK3
2718 : character(*,SKC) , intent(in) :: array
2719 : real(TKR) :: rank(len(array, IK))
2720 : end function
2721 : #endif
2722 :
2723 : #if SK2_ENABLED
2724 : module function getRankFractionalDefCom_D0_SK2(array) result(rank)
2725 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2726 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D0_SK2
2727 : #endif
2728 : use pm_kind, only: TKR => RK, SKC => SK2
2729 : character(*,SKC) , intent(in) :: array
2730 : real(TKR) :: rank(len(array, IK))
2731 : end function
2732 : #endif
2733 :
2734 : #if SK1_ENABLED
2735 : module function getRankFractionalDefCom_D0_SK1(array) result(rank)
2736 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2737 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D0_SK1
2738 : #endif
2739 : use pm_kind, only: TKR => RK, SKC => SK1
2740 : character(*,SKC) , intent(in) :: array
2741 : real(TKR) :: rank(len(array, IK))
2742 : end function
2743 : #endif
2744 :
2745 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2746 :
2747 : #if SK5_ENABLED
2748 : module function getRankFractionalDefCom_D1_SK5(array) result(rank)
2749 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2750 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_SK5
2751 : #endif
2752 : use pm_kind, only: TKR => RK, SKC => SK5
2753 : character(*,SKC) , intent(in) , contiguous :: array(:)
2754 : real(TKR) :: rank(size(array, kind = IK))
2755 : end function
2756 : #endif
2757 :
2758 : #if SK4_ENABLED
2759 : module function getRankFractionalDefCom_D1_SK4(array) result(rank)
2760 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2761 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_SK4
2762 : #endif
2763 : use pm_kind, only: TKR => RK, SKC => SK4
2764 : character(*,SKC) , intent(in) , contiguous :: array(:)
2765 : real(TKR) :: rank(size(array, kind = IK))
2766 : end function
2767 : #endif
2768 :
2769 : #if SK3_ENABLED
2770 : module function getRankFractionalDefCom_D1_SK3(array) result(rank)
2771 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2772 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_SK3
2773 : #endif
2774 : use pm_kind, only: TKR => RK, SKC => SK3
2775 : character(*,SKC) , intent(in) , contiguous :: array(:)
2776 : real(TKR) :: rank(size(array, kind = IK))
2777 : end function
2778 : #endif
2779 :
2780 : #if SK2_ENABLED
2781 : module function getRankFractionalDefCom_D1_SK2(array) result(rank)
2782 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2783 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_SK2
2784 : #endif
2785 : use pm_kind, only: TKR => RK, SKC => SK2
2786 : character(*,SKC) , intent(in) , contiguous :: array(:)
2787 : real(TKR) :: rank(size(array, kind = IK))
2788 : end function
2789 : #endif
2790 :
2791 : #if SK1_ENABLED
2792 : module function getRankFractionalDefCom_D1_SK1(array) result(rank)
2793 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2794 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_SK1
2795 : #endif
2796 : use pm_kind, only: TKR => RK, SKC => SK1
2797 : character(*,SKC) , intent(in) , contiguous :: array(:)
2798 : real(TKR) :: rank(size(array, kind = IK))
2799 : end function
2800 : #endif
2801 :
2802 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2803 :
2804 : #if IK5_ENABLED
2805 : module function getRankFractionalDefCom_D1_IK5(array) result(rank)
2806 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2807 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_IK5
2808 : #endif
2809 : use pm_kind, only: TKR => RK, IKC => IK5
2810 : integer(IKC) , intent(in) , contiguous :: array(:)
2811 : real(TKR) :: rank(size(array, kind = IK))
2812 : end function
2813 : #endif
2814 :
2815 : #if IK4_ENABLED
2816 : module function getRankFractionalDefCom_D1_IK4(array) result(rank)
2817 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2818 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_IK4
2819 : #endif
2820 : use pm_kind, only: TKR => RK, IKC => IK4
2821 : integer(IKC) , intent(in) , contiguous :: array(:)
2822 : real(TKR) :: rank(size(array, kind = IK))
2823 : end function
2824 : #endif
2825 :
2826 : #if IK3_ENABLED
2827 : module function getRankFractionalDefCom_D1_IK3(array) result(rank)
2828 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2829 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_IK3
2830 : #endif
2831 : use pm_kind, only: TKR => RK, IKC => IK3
2832 : integer(IKC) , intent(in) , contiguous :: array(:)
2833 : real(TKR) :: rank(size(array, kind = IK))
2834 : end function
2835 : #endif
2836 :
2837 : #if IK2_ENABLED
2838 : module function getRankFractionalDefCom_D1_IK2(array) result(rank)
2839 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2840 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_IK2
2841 : #endif
2842 : use pm_kind, only: TKR => RK, IKC => IK2
2843 : integer(IKC) , intent(in) , contiguous :: array(:)
2844 : real(TKR) :: rank(size(array, kind = IK))
2845 : end function
2846 : #endif
2847 :
2848 : #if IK1_ENABLED
2849 : module function getRankFractionalDefCom_D1_IK1(array) result(rank)
2850 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2851 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_IK1
2852 : #endif
2853 : use pm_kind, only: TKR => RK, IKC => IK1
2854 : integer(IKC) , intent(in) , contiguous :: array(:)
2855 : real(TKR) :: rank(size(array, kind = IK))
2856 : end function
2857 : #endif
2858 :
2859 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2860 :
2861 : #if LK5_ENABLED
2862 : module function getRankFractionalDefCom_D1_LK5(array) result(rank)
2863 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2864 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_LK5
2865 : #endif
2866 : use pm_kind, only: TKR => RK, LKC => LK5
2867 : logical(LKC) , intent(in) , contiguous :: array(:)
2868 : real(TKR) :: rank(size(array, kind = IK))
2869 : end function
2870 : #endif
2871 :
2872 : #if LK4_ENABLED
2873 : module function getRankFractionalDefCom_D1_LK4(array) result(rank)
2874 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2875 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_LK4
2876 : #endif
2877 : use pm_kind, only: TKR => RK, LKC => LK4
2878 : logical(LKC) , intent(in) , contiguous :: array(:)
2879 : real(TKR) :: rank(size(array, kind = IK))
2880 : end function
2881 : #endif
2882 :
2883 : #if LK3_ENABLED
2884 : module function getRankFractionalDefCom_D1_LK3(array) result(rank)
2885 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2886 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_LK3
2887 : #endif
2888 : use pm_kind, only: TKR => RK, LKC => LK3
2889 : logical(LKC) , intent(in) , contiguous :: array(:)
2890 : real(TKR) :: rank(size(array, kind = IK))
2891 : end function
2892 : #endif
2893 :
2894 : #if LK2_ENABLED
2895 : module function getRankFractionalDefCom_D1_LK2(array) result(rank)
2896 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2897 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_LK2
2898 : #endif
2899 : use pm_kind, only: TKR => RK, LKC => LK2
2900 : logical(LKC) , intent(in) , contiguous :: array(:)
2901 : real(TKR) :: rank(size(array, kind = IK))
2902 : end function
2903 : #endif
2904 :
2905 : #if LK1_ENABLED
2906 : module function getRankFractionalDefCom_D1_LK1(array) result(rank)
2907 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2908 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_LK1
2909 : #endif
2910 : use pm_kind, only: TKR => RK, LKC => LK1
2911 : logical(LKC) , intent(in) , contiguous :: array(:)
2912 : real(TKR) :: rank(size(array, kind = IK))
2913 : end function
2914 : #endif
2915 :
2916 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2917 :
2918 : #if CK5_ENABLED
2919 : module function getRankFractionalDefCom_D1_CK5(array) result(rank)
2920 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2921 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_CK5
2922 : #endif
2923 : use pm_kind, only: TKR => RK, CKC => CK5
2924 : complex(CKC) , intent(in) , contiguous :: array(:)
2925 : real(TKR) :: rank(size(array, kind = IK))
2926 : end function
2927 : #endif
2928 :
2929 : #if CK4_ENABLED
2930 : module function getRankFractionalDefCom_D1_CK4(array) result(rank)
2931 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2932 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_CK4
2933 : #endif
2934 : use pm_kind, only: TKR => RK, CKC => CK4
2935 : complex(CKC) , intent(in) , contiguous :: array(:)
2936 : real(TKR) :: rank(size(array, kind = IK))
2937 : end function
2938 : #endif
2939 :
2940 : #if CK3_ENABLED
2941 : module function getRankFractionalDefCom_D1_CK3(array) result(rank)
2942 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2943 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_CK3
2944 : #endif
2945 : use pm_kind, only: TKR => RK, CKC => CK3
2946 : complex(CKC) , intent(in) , contiguous :: array(:)
2947 : real(TKR) :: rank(size(array, kind = IK))
2948 : end function
2949 : #endif
2950 :
2951 : #if CK2_ENABLED
2952 : module function getRankFractionalDefCom_D1_CK2(array) result(rank)
2953 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2954 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_CK2
2955 : #endif
2956 : use pm_kind, only: TKR => RK, CKC => CK2
2957 : complex(CKC) , intent(in) , contiguous :: array(:)
2958 : real(TKR) :: rank(size(array, kind = IK))
2959 : end function
2960 : #endif
2961 :
2962 : #if CK1_ENABLED
2963 : module function getRankFractionalDefCom_D1_CK1(array) result(rank)
2964 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2965 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_CK1
2966 : #endif
2967 : use pm_kind, only: TKR => RK, CKC => CK1
2968 : complex(CKC) , intent(in) , contiguous :: array(:)
2969 : real(TKR) :: rank(size(array, kind = IK))
2970 : end function
2971 : #endif
2972 :
2973 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2974 :
2975 : #if RK5_ENABLED
2976 : module function getRankFractionalDefCom_D1_RK5(array) result(rank)
2977 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2978 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_RK5
2979 : #endif
2980 : use pm_kind, only: TKR => RK, RKC => RK5
2981 : real(RKC) , intent(in) , contiguous :: array(:)
2982 : real(TKR) :: rank(size(array, kind = IK))
2983 : end function
2984 : #endif
2985 :
2986 : #if RK4_ENABLED
2987 : module function getRankFractionalDefCom_D1_RK4(array) result(rank)
2988 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
2989 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_RK4
2990 : #endif
2991 : use pm_kind, only: TKR => RK, RKC => RK4
2992 : real(RKC) , intent(in) , contiguous :: array(:)
2993 : real(TKR) :: rank(size(array, kind = IK))
2994 : end function
2995 : #endif
2996 :
2997 : #if RK3_ENABLED
2998 : module function getRankFractionalDefCom_D1_RK3(array) result(rank)
2999 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3000 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_RK3
3001 : #endif
3002 : use pm_kind, only: TKR => RK, RKC => RK3
3003 : real(RKC) , intent(in) , contiguous :: array(:)
3004 : real(TKR) :: rank(size(array, kind = IK))
3005 : end function
3006 : #endif
3007 :
3008 : #if RK2_ENABLED
3009 : module function getRankFractionalDefCom_D1_RK2(array) result(rank)
3010 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3011 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_RK2
3012 : #endif
3013 : use pm_kind, only: TKR => RK, RKC => RK2
3014 : real(RKC) , intent(in) , contiguous :: array(:)
3015 : real(TKR) :: rank(size(array, kind = IK))
3016 : end function
3017 : #endif
3018 :
3019 : #if RK1_ENABLED
3020 : module function getRankFractionalDefCom_D1_RK1(array) result(rank)
3021 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3022 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_RK1
3023 : #endif
3024 : use pm_kind, only: TKR => RK, RKC => RK1
3025 : real(RKC) , intent(in) , contiguous :: array(:)
3026 : real(TKR) :: rank(size(array, kind = IK))
3027 : end function
3028 : #endif
3029 :
3030 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3031 :
3032 : #if SK5_ENABLED
3033 : module function getRankFractionalDefCom_D1_PSSK5(array) result(rank)
3034 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3035 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_PSSK5
3036 : #endif
3037 : use pm_kind, only: TKR => RK, SKC => SK5
3038 : use pm_container, only: css_pdt
3039 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3040 : real(TKR) :: rank(size(array, kind = IK))
3041 : end function
3042 : #endif
3043 :
3044 : #if SK4_ENABLED
3045 : module function getRankFractionalDefCom_D1_PSSK4(array) result(rank)
3046 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3047 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_PSSK4
3048 : #endif
3049 : use pm_kind, only: TKR => RK, SKC => SK4
3050 : use pm_container, only: css_pdt
3051 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3052 : real(TKR) :: rank(size(array, kind = IK))
3053 : end function
3054 : #endif
3055 :
3056 : #if SK3_ENABLED
3057 : module function getRankFractionalDefCom_D1_PSSK3(array) result(rank)
3058 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3059 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_PSSK3
3060 : #endif
3061 : use pm_kind, only: TKR => RK, SKC => SK3
3062 : use pm_container, only: css_pdt
3063 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3064 : real(TKR) :: rank(size(array, kind = IK))
3065 : end function
3066 : #endif
3067 :
3068 : #if SK2_ENABLED
3069 : module function getRankFractionalDefCom_D1_PSSK2(array) result(rank)
3070 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3071 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_PSSK2
3072 : #endif
3073 : use pm_kind, only: TKR => RK, SKC => SK2
3074 : use pm_container, only: css_pdt
3075 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3076 : real(TKR) :: rank(size(array, kind = IK))
3077 : end function
3078 : #endif
3079 :
3080 : #if SK1_ENABLED
3081 : module function getRankFractionalDefCom_D1_PSSK1(array) result(rank)
3082 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3083 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_PSSK1
3084 : #endif
3085 : use pm_kind, only: TKR => RK, SKC => SK1
3086 : use pm_container, only: css_pdt
3087 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3088 : real(TKR) :: rank(size(array, kind = IK))
3089 : end function
3090 : #endif
3091 :
3092 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3093 :
3094 : module function getRankFractionalDefCom_D1_BSSK(array) result(rank)
3095 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3096 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalDefCom_D1_BSSK
3097 : #endif
3098 : use pm_kind, only: TKR => RK, SKC => SK
3099 : use pm_container, only: css_type
3100 : type(css_type) , intent(in) , contiguous :: array(:)
3101 : real(TKR) :: rank(size(array, kind = IK))
3102 : end function
3103 :
3104 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3105 :
3106 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3107 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3108 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3109 :
3110 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3111 :
3112 : #if SK5_ENABLED
3113 : module function getRankFractionalCusCom_D0_SK5(array, isSorted) result(rank)
3114 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3115 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D0_SK5
3116 : #endif
3117 : use pm_kind, only: TKR => RK, SKC => SK5
3118 : character(*,SKC) , intent(in) :: array
3119 : procedure(logical(LK)) :: isSorted
3120 : real(TKR) :: rank(len(array, IK))
3121 : end function
3122 : #endif
3123 :
3124 : #if SK4_ENABLED
3125 : module function getRankFractionalCusCom_D0_SK4(array, isSorted) result(rank)
3126 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3127 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D0_SK4
3128 : #endif
3129 : use pm_kind, only: TKR => RK, SKC => SK4
3130 : character(*,SKC) , intent(in) :: array
3131 : procedure(logical(LK)) :: isSorted
3132 : real(TKR) :: rank(len(array, IK))
3133 : end function
3134 : #endif
3135 :
3136 : #if SK3_ENABLED
3137 : module function getRankFractionalCusCom_D0_SK3(array, isSorted) result(rank)
3138 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3139 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D0_SK3
3140 : #endif
3141 : use pm_kind, only: TKR => RK, SKC => SK3
3142 : character(*,SKC) , intent(in) :: array
3143 : procedure(logical(LK)) :: isSorted
3144 : real(TKR) :: rank(len(array, IK))
3145 : end function
3146 : #endif
3147 :
3148 : #if SK2_ENABLED
3149 : module function getRankFractionalCusCom_D0_SK2(array, isSorted) result(rank)
3150 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3151 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D0_SK2
3152 : #endif
3153 : use pm_kind, only: TKR => RK, SKC => SK2
3154 : character(*,SKC) , intent(in) :: array
3155 : procedure(logical(LK)) :: isSorted
3156 : real(TKR) :: rank(len(array, IK))
3157 : end function
3158 : #endif
3159 :
3160 : #if SK1_ENABLED
3161 : module function getRankFractionalCusCom_D0_SK1(array, isSorted) result(rank)
3162 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3163 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D0_SK1
3164 : #endif
3165 : use pm_kind, only: TKR => RK, SKC => SK1
3166 : character(*,SKC) , intent(in) :: array
3167 : procedure(logical(LK)) :: isSorted
3168 : real(TKR) :: rank(len(array, IK))
3169 : end function
3170 : #endif
3171 :
3172 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3173 :
3174 : #if SK5_ENABLED
3175 : module function getRankFractionalCusCom_D1_SK5(array, isSorted) result(rank)
3176 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3177 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_SK5
3178 : #endif
3179 : use pm_kind, only: TKR => RK, SKC => SK5
3180 : character(*,SKC) , intent(in) , contiguous :: array(:)
3181 : procedure(logical(LK)) :: isSorted
3182 : real(TKR) :: rank(size(array, kind = IK))
3183 : end function
3184 : #endif
3185 :
3186 : #if SK4_ENABLED
3187 : module function getRankFractionalCusCom_D1_SK4(array, isSorted) result(rank)
3188 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3189 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_SK4
3190 : #endif
3191 : use pm_kind, only: TKR => RK, SKC => SK4
3192 : character(*,SKC) , intent(in) , contiguous :: array(:)
3193 : procedure(logical(LK)) :: isSorted
3194 : real(TKR) :: rank(size(array, kind = IK))
3195 : end function
3196 : #endif
3197 :
3198 : #if SK3_ENABLED
3199 : module function getRankFractionalCusCom_D1_SK3(array, isSorted) result(rank)
3200 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3201 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_SK3
3202 : #endif
3203 : use pm_kind, only: TKR => RK, SKC => SK3
3204 : character(*,SKC) , intent(in) , contiguous :: array(:)
3205 : procedure(logical(LK)) :: isSorted
3206 : real(TKR) :: rank(size(array, kind = IK))
3207 : end function
3208 : #endif
3209 :
3210 : #if SK2_ENABLED
3211 : module function getRankFractionalCusCom_D1_SK2(array, isSorted) result(rank)
3212 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3213 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_SK2
3214 : #endif
3215 : use pm_kind, only: TKR => RK, SKC => SK2
3216 : character(*,SKC) , intent(in) , contiguous :: array(:)
3217 : procedure(logical(LK)) :: isSorted
3218 : real(TKR) :: rank(size(array, kind = IK))
3219 : end function
3220 : #endif
3221 :
3222 : #if SK1_ENABLED
3223 : module function getRankFractionalCusCom_D1_SK1(array, isSorted) result(rank)
3224 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3225 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_SK1
3226 : #endif
3227 : use pm_kind, only: TKR => RK, SKC => SK1
3228 : character(*,SKC) , intent(in) , contiguous :: array(:)
3229 : procedure(logical(LK)) :: isSorted
3230 : real(TKR) :: rank(size(array, kind = IK))
3231 : end function
3232 : #endif
3233 :
3234 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3235 :
3236 : #if IK5_ENABLED
3237 : module function getRankFractionalCusCom_D1_IK5(array, isSorted) result(rank)
3238 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3239 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_IK5
3240 : #endif
3241 : use pm_kind, only: TKR => RK, IKC => IK5
3242 : integer(IKC) , intent(in) , contiguous :: array(:)
3243 : procedure(logical(LK)) :: isSorted
3244 : real(TKR) :: rank(size(array, kind = IK))
3245 : end function
3246 : #endif
3247 :
3248 : #if IK4_ENABLED
3249 : module function getRankFractionalCusCom_D1_IK4(array, isSorted) result(rank)
3250 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3251 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_IK4
3252 : #endif
3253 : use pm_kind, only: TKR => RK, IKC => IK4
3254 : integer(IKC) , intent(in) , contiguous :: array(:)
3255 : procedure(logical(LK)) :: isSorted
3256 : real(TKR) :: rank(size(array, kind = IK))
3257 : end function
3258 : #endif
3259 :
3260 : #if IK3_ENABLED
3261 : module function getRankFractionalCusCom_D1_IK3(array, isSorted) result(rank)
3262 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3263 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_IK3
3264 : #endif
3265 : use pm_kind, only: TKR => RK, IKC => IK3
3266 : integer(IKC) , intent(in) , contiguous :: array(:)
3267 : procedure(logical(LK)) :: isSorted
3268 : real(TKR) :: rank(size(array, kind = IK))
3269 : end function
3270 : #endif
3271 :
3272 : #if IK2_ENABLED
3273 : module function getRankFractionalCusCom_D1_IK2(array, isSorted) result(rank)
3274 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3275 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_IK2
3276 : #endif
3277 : use pm_kind, only: TKR => RK, IKC => IK2
3278 : integer(IKC) , intent(in) , contiguous :: array(:)
3279 : procedure(logical(LK)) :: isSorted
3280 : real(TKR) :: rank(size(array, kind = IK))
3281 : end function
3282 : #endif
3283 :
3284 : #if IK1_ENABLED
3285 : module function getRankFractionalCusCom_D1_IK1(array, isSorted) result(rank)
3286 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3287 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_IK1
3288 : #endif
3289 : use pm_kind, only: TKR => RK, IKC => IK1
3290 : integer(IKC) , intent(in) , contiguous :: array(:)
3291 : procedure(logical(LK)) :: isSorted
3292 : real(TKR) :: rank(size(array, kind = IK))
3293 : end function
3294 : #endif
3295 :
3296 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3297 :
3298 : #if LK5_ENABLED
3299 : module function getRankFractionalCusCom_D1_LK5(array, isSorted) result(rank)
3300 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3301 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_LK5
3302 : #endif
3303 : use pm_kind, only: TKR => RK, LKC => LK5
3304 : logical(LKC) , intent(in) , contiguous :: array(:)
3305 : procedure(logical(LK)) :: isSorted
3306 : real(TKR) :: rank(size(array, kind = IK))
3307 : end function
3308 : #endif
3309 :
3310 : #if LK4_ENABLED
3311 : module function getRankFractionalCusCom_D1_LK4(array, isSorted) result(rank)
3312 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3313 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_LK4
3314 : #endif
3315 : use pm_kind, only: TKR => RK, LKC => LK4
3316 : logical(LKC) , intent(in) , contiguous :: array(:)
3317 : procedure(logical(LK)) :: isSorted
3318 : real(TKR) :: rank(size(array, kind = IK))
3319 : end function
3320 : #endif
3321 :
3322 : #if LK3_ENABLED
3323 : module function getRankFractionalCusCom_D1_LK3(array, isSorted) result(rank)
3324 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3325 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_LK3
3326 : #endif
3327 : use pm_kind, only: TKR => RK, LKC => LK3
3328 : logical(LKC) , intent(in) , contiguous :: array(:)
3329 : procedure(logical(LK)) :: isSorted
3330 : real(TKR) :: rank(size(array, kind = IK))
3331 : end function
3332 : #endif
3333 :
3334 : #if LK2_ENABLED
3335 : module function getRankFractionalCusCom_D1_LK2(array, isSorted) result(rank)
3336 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3337 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_LK2
3338 : #endif
3339 : use pm_kind, only: TKR => RK, LKC => LK2
3340 : logical(LKC) , intent(in) , contiguous :: array(:)
3341 : procedure(logical(LK)) :: isSorted
3342 : real(TKR) :: rank(size(array, kind = IK))
3343 : end function
3344 : #endif
3345 :
3346 : #if LK1_ENABLED
3347 : module function getRankFractionalCusCom_D1_LK1(array, isSorted) result(rank)
3348 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3349 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_LK1
3350 : #endif
3351 : use pm_kind, only: TKR => RK, LKC => LK1
3352 : logical(LKC) , intent(in) , contiguous :: array(:)
3353 : procedure(logical(LK)) :: isSorted
3354 : real(TKR) :: rank(size(array, kind = IK))
3355 : end function
3356 : #endif
3357 :
3358 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3359 :
3360 : #if CK5_ENABLED
3361 : module function getRankFractionalCusCom_D1_CK5(array, isSorted) result(rank)
3362 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3363 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_CK5
3364 : #endif
3365 : use pm_kind, only: TKR => RK, CKC => CK5
3366 : complex(CKC) , intent(in) , contiguous :: array(:)
3367 : procedure(logical(LK)) :: isSorted
3368 : real(TKR) :: rank(size(array, kind = IK))
3369 : end function
3370 : #endif
3371 :
3372 : #if CK4_ENABLED
3373 : module function getRankFractionalCusCom_D1_CK4(array, isSorted) result(rank)
3374 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3375 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_CK4
3376 : #endif
3377 : use pm_kind, only: TKR => RK, CKC => CK4
3378 : complex(CKC) , intent(in) , contiguous :: array(:)
3379 : procedure(logical(LK)) :: isSorted
3380 : real(TKR) :: rank(size(array, kind = IK))
3381 : end function
3382 : #endif
3383 :
3384 : #if CK3_ENABLED
3385 : module function getRankFractionalCusCom_D1_CK3(array, isSorted) result(rank)
3386 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3387 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_CK3
3388 : #endif
3389 : use pm_kind, only: TKR => RK, CKC => CK3
3390 : complex(CKC) , intent(in) , contiguous :: array(:)
3391 : procedure(logical(LK)) :: isSorted
3392 : real(TKR) :: rank(size(array, kind = IK))
3393 : end function
3394 : #endif
3395 :
3396 : #if CK2_ENABLED
3397 : module function getRankFractionalCusCom_D1_CK2(array, isSorted) result(rank)
3398 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3399 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_CK2
3400 : #endif
3401 : use pm_kind, only: TKR => RK, CKC => CK2
3402 : complex(CKC) , intent(in) , contiguous :: array(:)
3403 : procedure(logical(LK)) :: isSorted
3404 : real(TKR) :: rank(size(array, kind = IK))
3405 : end function
3406 : #endif
3407 :
3408 : #if CK1_ENABLED
3409 : module function getRankFractionalCusCom_D1_CK1(array, isSorted) result(rank)
3410 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3411 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_CK1
3412 : #endif
3413 : use pm_kind, only: TKR => RK, CKC => CK1
3414 : complex(CKC) , intent(in) , contiguous :: array(:)
3415 : procedure(logical(LK)) :: isSorted
3416 : real(TKR) :: rank(size(array, kind = IK))
3417 : end function
3418 : #endif
3419 :
3420 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3421 :
3422 : #if RK5_ENABLED
3423 : module function getRankFractionalCusCom_D1_RK5(array, isSorted) result(rank)
3424 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3425 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_RK5
3426 : #endif
3427 : use pm_kind, only: TKR => RK, RKC => RK5
3428 : real(RKC) , intent(in) , contiguous :: array(:)
3429 : procedure(logical(LK)) :: isSorted
3430 : real(TKR) :: rank(size(array, kind = IK))
3431 : end function
3432 : #endif
3433 :
3434 : #if RK4_ENABLED
3435 : module function getRankFractionalCusCom_D1_RK4(array, isSorted) result(rank)
3436 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3437 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_RK4
3438 : #endif
3439 : use pm_kind, only: TKR => RK, RKC => RK4
3440 : real(RKC) , intent(in) , contiguous :: array(:)
3441 : procedure(logical(LK)) :: isSorted
3442 : real(TKR) :: rank(size(array, kind = IK))
3443 : end function
3444 : #endif
3445 :
3446 : #if RK3_ENABLED
3447 : module function getRankFractionalCusCom_D1_RK3(array, isSorted) result(rank)
3448 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3449 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_RK3
3450 : #endif
3451 : use pm_kind, only: TKR => RK, RKC => RK3
3452 : real(RKC) , intent(in) , contiguous :: array(:)
3453 : procedure(logical(LK)) :: isSorted
3454 : real(TKR) :: rank(size(array, kind = IK))
3455 : end function
3456 : #endif
3457 :
3458 : #if RK2_ENABLED
3459 : module function getRankFractionalCusCom_D1_RK2(array, isSorted) result(rank)
3460 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3461 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_RK2
3462 : #endif
3463 : use pm_kind, only: TKR => RK, RKC => RK2
3464 : real(RKC) , intent(in) , contiguous :: array(:)
3465 : procedure(logical(LK)) :: isSorted
3466 : real(TKR) :: rank(size(array, kind = IK))
3467 : end function
3468 : #endif
3469 :
3470 : #if RK1_ENABLED
3471 : module function getRankFractionalCusCom_D1_RK1(array, isSorted) result(rank)
3472 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3473 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_RK1
3474 : #endif
3475 : use pm_kind, only: TKR => RK, RKC => RK1
3476 : real(RKC) , intent(in) , contiguous :: array(:)
3477 : procedure(logical(LK)) :: isSorted
3478 : real(TKR) :: rank(size(array, kind = IK))
3479 : end function
3480 : #endif
3481 :
3482 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3483 :
3484 : #if SK5_ENABLED
3485 : module function getRankFractionalCusCom_D1_PSSK5(array, isSorted) result(rank)
3486 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3487 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_PSSK5
3488 : #endif
3489 : use pm_kind, only: TKR => RK, SKC => SK5
3490 : use pm_container, only: css_pdt
3491 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3492 : procedure(logical(LK)) :: isSorted
3493 : real(TKR) :: rank(size(array, kind = IK))
3494 : end function
3495 : #endif
3496 :
3497 : #if SK4_ENABLED
3498 : module function getRankFractionalCusCom_D1_PSSK4(array, isSorted) result(rank)
3499 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3500 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_PSSK4
3501 : #endif
3502 : use pm_kind, only: TKR => RK, SKC => SK4
3503 : use pm_container, only: css_pdt
3504 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3505 : procedure(logical(LK)) :: isSorted
3506 : real(TKR) :: rank(size(array, kind = IK))
3507 : end function
3508 : #endif
3509 :
3510 : #if SK3_ENABLED
3511 : module function getRankFractionalCusCom_D1_PSSK3(array, isSorted) result(rank)
3512 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3513 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_PSSK3
3514 : #endif
3515 : use pm_kind, only: TKR => RK, SKC => SK3
3516 : use pm_container, only: css_pdt
3517 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3518 : procedure(logical(LK)) :: isSorted
3519 : real(TKR) :: rank(size(array, kind = IK))
3520 : end function
3521 : #endif
3522 :
3523 : #if SK2_ENABLED
3524 : module function getRankFractionalCusCom_D1_PSSK2(array, isSorted) result(rank)
3525 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3526 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_PSSK2
3527 : #endif
3528 : use pm_kind, only: TKR => RK, SKC => SK2
3529 : use pm_container, only: css_pdt
3530 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3531 : procedure(logical(LK)) :: isSorted
3532 : real(TKR) :: rank(size(array, kind = IK))
3533 : end function
3534 : #endif
3535 :
3536 : #if SK1_ENABLED
3537 : module function getRankFractionalCusCom_D1_PSSK1(array, isSorted) result(rank)
3538 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3539 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_PSSK1
3540 : #endif
3541 : use pm_kind, only: TKR => RK, SKC => SK1
3542 : use pm_container, only: css_pdt
3543 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
3544 : real(TKR) :: rank(size(array, kind = IK))
3545 : procedure(logical(LK)) :: isSorted
3546 : end function
3547 : #endif
3548 :
3549 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3550 :
3551 : module function getRankFractionalCusCom_D1_BSSK(array, isSorted) result(rank)
3552 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3553 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankFractionalCusCom_D1_BSSK
3554 : #endif
3555 : use pm_kind, only: TKR => RK, SKC => SK
3556 : use pm_container, only: css_type
3557 : type(css_type) , intent(in) , contiguous :: array(:)
3558 : procedure(logical(LK)) :: isSorted
3559 : real(TKR) :: rank(size(array, kind = IK))
3560 : end function
3561 :
3562 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3563 :
3564 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3565 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3566 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3567 :
3568 : end interface
3569 :
3570 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3571 :
3572 : !> \brief
3573 : !> Return the **Fractional rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
3574 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
3575 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
3576 : !>
3577 : !> \details
3578 : !> This kind of ranking of values is widely known as <b>fractional (`1 2.5 2.5 4`) ranking</b>.<br>
3579 : !> In Fractional ranking, items that compare equal receive the same ranking number, which is the mean of what they would have under ordinal
3580 : !> rankings; equivalently, the ranking number of 1 plus the number of items ranked above it plus half the number of items equal to it.<br>
3581 : !> This strategy has the property that the sum of the ranking numbers is the same as under ordinal ranking.<br>
3582 : !> For this reason, it is used in computing Borda counts and ranking statistics (e.g., Spearman Correlation).<br>
3583 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number `1` (*first*),
3584 : !> *B* and *C* each get ranking number `2.5` (average of *joint second/third*) and *D* gets ranking number `4` (*fourth*).<br>
3585 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **Fractional ranking** `1223`.<br>
3586 : !> **Example:**<br>
3587 : !> Suppose the data set is `1.0, 1.0, 2.0, 3.0, 3.0, 4.0, 5.0, 5.0, 5.0`.<br>
3588 : !> The ordinal ranks are `1, 2, 3, 4, 5, 6, 7, 8, 9`.<br>
3589 : !> For `v = 1.0`, the Fractional rank is the average of the ordinal ranks: `(1 + 2) / 2 = 1.5`.<br>
3590 : !> In a similar manner, for `v = 5.0`, the Fractional rank is `(7 + 8 + 9) / 3 = 8.0`.<br>
3591 : !> Thus the Fractional ranks are: `1.5, 1.5, 3.0, 4.5, 4.5, 6.0, 8.0, 8.0, 8.0`
3592 : !>
3593 : !> \param[out] rank : The output `contiguous` array of rank `1` of type `real` of default kind \RK
3594 : !> containing the ranks of the corresponding elements of `array`.<br>
3595 : !> The size of `rank` must match that of `array` (or its length type parameter if `array` is a scalar string).<br>
3596 : !> **Read `rank(i)` as the Fractional rank of the `i`th element of `array`.**
3597 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
3598 : !> <ol>
3599 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
3600 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
3601 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
3602 : !> <li> type `integer` of kind \IKALL or,<br>
3603 : !> <li> type `logical` of kind \LKALL or,<br>
3604 : !> <li> type `complex` of kind \CKALL or,<br>
3605 : !> <li> type `real` of kind \RKALL,<br>
3606 : !> </ol>
3607 : !> or,
3608 : !> <ol>
3609 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
3610 : !> </ol>
3611 : !> whose elements rankings will be computed and returned.
3612 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type
3613 : !> and kind as the input `array`.<br>
3614 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
3615 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
3616 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
3617 : !> If `array` is a Fortran string (i.e., a scalar `character`),
3618 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
3619 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
3620 : !> \code{.F90}
3621 : !> function isSorted(a,b) result (sorted)
3622 : !> use pm_kind, only: SK, IK, LK, CK, RK
3623 : !> TYPE(KIND) , intent(in) :: a, b
3624 : !> logical(LK) :: sorted
3625 : !> end function
3626 : !> \endcode
3627 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
3628 : !> \code{.F90}
3629 : !> use pm_container, only: StrCon
3630 : !> use pm_kind, only: SK, IK, LK, CK, RK
3631 : !> character(*, SK), intent(in) :: a, b
3632 : !> integer(IK) , intent(in) :: a, b
3633 : !> logical(LK) , intent(in) :: a, b
3634 : !> complex(CK) , intent(in) :: a, b
3635 : !> real(RK) , intent(in) :: a, b
3636 : !> type(StrCon) , intent(in) :: a, b
3637 : !> \endcode
3638 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
3639 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
3640 : !> \code{.F90}
3641 : !> function isSorted(a,b) result (sorted)
3642 : !> character(1,SKC), intent(in) :: a, b
3643 : !> logical(LK) :: sorted
3644 : !> end function
3645 : !> \endcode
3646 : !> where `SKC` represents the kind of the input string argument `array`.<br>
3647 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
3648 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
3649 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired. In such cases,
3650 : !> user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
3651 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
3652 : !>
3653 : !> \interface{setRankFractional}
3654 : !> \code{.F90}
3655 : !>
3656 : !> use pm_arrayRank, only: setRankFractional
3657 : !>
3658 : !> call setRankFractional(rank, array)
3659 : !> call setRankFractional(rank, array, isSorted)
3660 : !>
3661 : !> \endcode
3662 : !>
3663 : !> \warning
3664 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
3665 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
3666 : !> identify ties within the Fractional ranking of the input `array`.
3667 : !>
3668 : !> \warnpure
3669 : !>
3670 : !> \warning
3671 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
3672 : !>
3673 : !> \see
3674 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
3675 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
3676 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
3677 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
3678 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
3679 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
3680 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
3681 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
3682 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
3683 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
3684 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
3685 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
3686 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
3687 : !>
3688 : !> \example{setRankFractional}
3689 : !> \include{lineno} example/pm_arrayRank/setRankFractional/main.F90
3690 : !> \compilef{setRankFractional}
3691 : !> \output{setRankFractional}
3692 : !> \include{lineno} example/pm_arrayRank/setRankFractional/main.out.F90
3693 : !>
3694 : !> \test
3695 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
3696 : !>
3697 : !> \bug
3698 : !> \status \unresolved
3699 : !> \source \ifort{2021.5}
3700 : !> \desc
3701 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
3702 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
3703 : !> \remedy
3704 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
3705 : !>
3706 : !> \todo
3707 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
3708 : !>
3709 : !> \todo
3710 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
3711 : !>
3712 : !> \finmain{setRankFractional}
3713 : !>
3714 : !> \author
3715 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
3716 : interface setRankFractional
3717 :
3718 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3719 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3720 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3721 :
3722 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3723 :
3724 : #if SK5_ENABLED
3725 : PURE module subroutine setRankFractionalDefCom_D0_SK5(rank, array)
3726 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3727 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D0_SK5
3728 : #endif
3729 : use pm_kind, only: TKR => RK, SKC => SK5
3730 : character(*,SKC) , intent(in) :: array
3731 : real(TKR) , intent(out) , contiguous :: rank(:)
3732 : end subroutine
3733 : #endif
3734 :
3735 : #if SK4_ENABLED
3736 : PURE module subroutine setRankFractionalDefCom_D0_SK4(rank, array)
3737 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3738 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D0_SK4
3739 : #endif
3740 : use pm_kind, only: TKR => RK, SKC => SK4
3741 : character(*,SKC) , intent(in) :: array
3742 : real(TKR) , intent(out) , contiguous :: rank(:)
3743 : end subroutine
3744 : #endif
3745 :
3746 : #if SK3_ENABLED
3747 : PURE module subroutine setRankFractionalDefCom_D0_SK3(rank, array)
3748 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3749 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D0_SK3
3750 : #endif
3751 : use pm_kind, only: TKR => RK, SKC => SK3
3752 : character(*,SKC) , intent(in) :: array
3753 : real(TKR) , intent(out) , contiguous :: rank(:)
3754 : end subroutine
3755 : #endif
3756 :
3757 : #if SK2_ENABLED
3758 : PURE module subroutine setRankFractionalDefCom_D0_SK2(rank, array)
3759 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3760 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D0_SK2
3761 : #endif
3762 : use pm_kind, only: TKR => RK, SKC => SK2
3763 : character(*,SKC) , intent(in) :: array
3764 : real(TKR) , intent(out) , contiguous :: rank(:)
3765 : end subroutine
3766 : #endif
3767 :
3768 : #if SK1_ENABLED
3769 : PURE module subroutine setRankFractionalDefCom_D0_SK1(rank, array)
3770 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3771 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D0_SK1
3772 : #endif
3773 : use pm_kind, only: TKR => RK, SKC => SK1
3774 : character(*,SKC) , intent(in) :: array
3775 : real(TKR) , intent(out) , contiguous :: rank(:)
3776 : end subroutine
3777 : #endif
3778 :
3779 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3780 :
3781 : #if SK5_ENABLED
3782 : PURE module subroutine setRankFractionalDefCom_D1_SK5(rank, array)
3783 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3784 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_SK5
3785 : #endif
3786 : use pm_kind, only: TKR => RK, SKC => SK5
3787 : character(*,SKC) , intent(in) , contiguous :: array(:)
3788 : real(TKR) , intent(out) , contiguous :: rank(:)
3789 : end subroutine
3790 : #endif
3791 :
3792 : #if SK4_ENABLED
3793 : PURE module subroutine setRankFractionalDefCom_D1_SK4(rank, array)
3794 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3795 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_SK4
3796 : #endif
3797 : use pm_kind, only: TKR => RK, SKC => SK4
3798 : character(*,SKC) , intent(in) , contiguous :: array(:)
3799 : real(TKR) , intent(out) , contiguous :: rank(:)
3800 : end subroutine
3801 : #endif
3802 :
3803 : #if SK3_ENABLED
3804 : PURE module subroutine setRankFractionalDefCom_D1_SK3(rank, array)
3805 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3806 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_SK3
3807 : #endif
3808 : use pm_kind, only: TKR => RK, SKC => SK3
3809 : character(*,SKC) , intent(in) , contiguous :: array(:)
3810 : real(TKR) , intent(out) , contiguous :: rank(:)
3811 : end subroutine
3812 : #endif
3813 :
3814 : #if SK2_ENABLED
3815 : PURE module subroutine setRankFractionalDefCom_D1_SK2(rank, array)
3816 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3817 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_SK2
3818 : #endif
3819 : use pm_kind, only: TKR => RK, SKC => SK2
3820 : character(*,SKC) , intent(in) , contiguous :: array(:)
3821 : real(TKR) , intent(out) , contiguous :: rank(:)
3822 : end subroutine
3823 : #endif
3824 :
3825 : #if SK1_ENABLED
3826 : PURE module subroutine setRankFractionalDefCom_D1_SK1(rank, array)
3827 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3828 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_SK1
3829 : #endif
3830 : use pm_kind, only: TKR => RK, SKC => SK1
3831 : character(*,SKC) , intent(in) , contiguous :: array(:)
3832 : real(TKR) , intent(out) , contiguous :: rank(:)
3833 : end subroutine
3834 : #endif
3835 :
3836 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3837 :
3838 : #if IK5_ENABLED
3839 : PURE module subroutine setRankFractionalDefCom_D1_IK5(rank, array)
3840 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3841 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_IK5
3842 : #endif
3843 : use pm_kind, only: TKR => RK, IKC => IK5
3844 : integer(IKC) , intent(in) , contiguous :: array(:)
3845 : real(TKR) , intent(out) , contiguous :: rank(:)
3846 : end subroutine
3847 : #endif
3848 :
3849 : #if IK4_ENABLED
3850 : PURE module subroutine setRankFractionalDefCom_D1_IK4(rank, array)
3851 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3852 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_IK4
3853 : #endif
3854 : use pm_kind, only: TKR => RK, IKC => IK4
3855 : integer(IKC) , intent(in) , contiguous :: array(:)
3856 : real(TKR) , intent(out) , contiguous :: rank(:)
3857 : end subroutine
3858 : #endif
3859 :
3860 : #if IK3_ENABLED
3861 : PURE module subroutine setRankFractionalDefCom_D1_IK3(rank, array)
3862 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3863 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_IK3
3864 : #endif
3865 : use pm_kind, only: TKR => RK, IKC => IK3
3866 : integer(IKC) , intent(in) , contiguous :: array(:)
3867 : real(TKR) , intent(out) , contiguous :: rank(:)
3868 : end subroutine
3869 : #endif
3870 :
3871 : #if IK2_ENABLED
3872 : PURE module subroutine setRankFractionalDefCom_D1_IK2(rank, array)
3873 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3874 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_IK2
3875 : #endif
3876 : use pm_kind, only: TKR => RK, IKC => IK2
3877 : integer(IKC) , intent(in) , contiguous :: array(:)
3878 : real(TKR) , intent(out) , contiguous :: rank(:)
3879 : end subroutine
3880 : #endif
3881 :
3882 : #if IK1_ENABLED
3883 : PURE module subroutine setRankFractionalDefCom_D1_IK1(rank, array)
3884 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3885 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_IK1
3886 : #endif
3887 : use pm_kind, only: TKR => RK, IKC => IK1
3888 : integer(IKC) , intent(in) , contiguous :: array(:)
3889 : real(TKR) , intent(out) , contiguous :: rank(:)
3890 : end subroutine
3891 : #endif
3892 :
3893 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3894 :
3895 : #if LK5_ENABLED
3896 : PURE module subroutine setRankFractionalDefCom_D1_LK5(rank, array)
3897 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3898 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_LK5
3899 : #endif
3900 : use pm_kind, only: TKR => RK, LKC => LK5
3901 : logical(LKC) , intent(in) , contiguous :: array(:)
3902 : real(TKR) , intent(out) , contiguous :: rank(:)
3903 : end subroutine
3904 : #endif
3905 :
3906 : #if LK4_ENABLED
3907 : PURE module subroutine setRankFractionalDefCom_D1_LK4(rank, array)
3908 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3909 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_LK4
3910 : #endif
3911 : use pm_kind, only: TKR => RK, LKC => LK4
3912 : logical(LKC) , intent(in) , contiguous :: array(:)
3913 : real(TKR) , intent(out) , contiguous :: rank(:)
3914 : end subroutine
3915 : #endif
3916 :
3917 : #if LK3_ENABLED
3918 : PURE module subroutine setRankFractionalDefCom_D1_LK3(rank, array)
3919 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3920 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_LK3
3921 : #endif
3922 : use pm_kind, only: TKR => RK, LKC => LK3
3923 : logical(LKC) , intent(in) , contiguous :: array(:)
3924 : real(TKR) , intent(out) , contiguous :: rank(:)
3925 : end subroutine
3926 : #endif
3927 :
3928 : #if LK2_ENABLED
3929 : PURE module subroutine setRankFractionalDefCom_D1_LK2(rank, array)
3930 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3931 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_LK2
3932 : #endif
3933 : use pm_kind, only: TKR => RK, LKC => LK2
3934 : logical(LKC) , intent(in) , contiguous :: array(:)
3935 : real(TKR) , intent(out) , contiguous :: rank(:)
3936 : end subroutine
3937 : #endif
3938 :
3939 : #if LK1_ENABLED
3940 : PURE module subroutine setRankFractionalDefCom_D1_LK1(rank, array)
3941 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3942 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_LK1
3943 : #endif
3944 : use pm_kind, only: TKR => RK, LKC => LK1
3945 : logical(LKC) , intent(in) , contiguous :: array(:)
3946 : real(TKR) , intent(out) , contiguous :: rank(:)
3947 : end subroutine
3948 : #endif
3949 :
3950 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3951 :
3952 : #if CK5_ENABLED
3953 : PURE module subroutine setRankFractionalDefCom_D1_CK5(rank, array)
3954 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3955 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_CK5
3956 : #endif
3957 : use pm_kind, only: TKR => RK, CKC => CK5
3958 : complex(CKC) , intent(in) , contiguous :: array(:)
3959 : real(TKR) , intent(out) , contiguous :: rank(:)
3960 : end subroutine
3961 : #endif
3962 :
3963 : #if CK4_ENABLED
3964 : PURE module subroutine setRankFractionalDefCom_D1_CK4(rank, array)
3965 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3966 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_CK4
3967 : #endif
3968 : use pm_kind, only: TKR => RK, CKC => CK4
3969 : complex(CKC) , intent(in) , contiguous :: array(:)
3970 : real(TKR) , intent(out) , contiguous :: rank(:)
3971 : end subroutine
3972 : #endif
3973 :
3974 : #if CK3_ENABLED
3975 : PURE module subroutine setRankFractionalDefCom_D1_CK3(rank, array)
3976 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3977 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_CK3
3978 : #endif
3979 : use pm_kind, only: TKR => RK, CKC => CK3
3980 : complex(CKC) , intent(in) , contiguous :: array(:)
3981 : real(TKR) , intent(out) , contiguous :: rank(:)
3982 : end subroutine
3983 : #endif
3984 :
3985 : #if CK2_ENABLED
3986 : PURE module subroutine setRankFractionalDefCom_D1_CK2(rank, array)
3987 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3988 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_CK2
3989 : #endif
3990 : use pm_kind, only: TKR => RK, CKC => CK2
3991 : complex(CKC) , intent(in) , contiguous :: array(:)
3992 : real(TKR) , intent(out) , contiguous :: rank(:)
3993 : end subroutine
3994 : #endif
3995 :
3996 : #if CK1_ENABLED
3997 : PURE module subroutine setRankFractionalDefCom_D1_CK1(rank, array)
3998 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
3999 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_CK1
4000 : #endif
4001 : use pm_kind, only: TKR => RK, CKC => CK1
4002 : complex(CKC) , intent(in) , contiguous :: array(:)
4003 : real(TKR) , intent(out) , contiguous :: rank(:)
4004 : end subroutine
4005 : #endif
4006 :
4007 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4008 :
4009 : #if RK5_ENABLED
4010 : PURE module subroutine setRankFractionalDefCom_D1_RK5(rank, array)
4011 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4012 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_RK5
4013 : #endif
4014 : use pm_kind, only: TKR => RK, RKC => RK5
4015 : real(RKC) , intent(in) , contiguous :: array(:)
4016 : real(TKR) , intent(out) , contiguous :: rank(:)
4017 : end subroutine
4018 : #endif
4019 :
4020 : #if RK4_ENABLED
4021 : PURE module subroutine setRankFractionalDefCom_D1_RK4(rank, array)
4022 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4023 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_RK4
4024 : #endif
4025 : use pm_kind, only: TKR => RK, RKC => RK4
4026 : real(RKC) , intent(in) , contiguous :: array(:)
4027 : real(TKR) , intent(out) , contiguous :: rank(:)
4028 : end subroutine
4029 : #endif
4030 :
4031 : #if RK3_ENABLED
4032 : PURE module subroutine setRankFractionalDefCom_D1_RK3(rank, array)
4033 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4034 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_RK3
4035 : #endif
4036 : use pm_kind, only: TKR => RK, RKC => RK3
4037 : real(RKC) , intent(in) , contiguous :: array(:)
4038 : real(TKR) , intent(out) , contiguous :: rank(:)
4039 : end subroutine
4040 : #endif
4041 :
4042 : #if RK2_ENABLED
4043 : PURE module subroutine setRankFractionalDefCom_D1_RK2(rank, array)
4044 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4045 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_RK2
4046 : #endif
4047 : use pm_kind, only: TKR => RK, RKC => RK2
4048 : real(RKC) , intent(in) , contiguous :: array(:)
4049 : real(TKR) , intent(out) , contiguous :: rank(:)
4050 : end subroutine
4051 : #endif
4052 :
4053 : #if RK1_ENABLED
4054 : PURE module subroutine setRankFractionalDefCom_D1_RK1(rank, array)
4055 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4056 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_RK1
4057 : #endif
4058 : use pm_kind, only: TKR => RK, RKC => RK1
4059 : real(RKC) , intent(in) , contiguous :: array(:)
4060 : real(TKR) , intent(out) , contiguous :: rank(:)
4061 : end subroutine
4062 : #endif
4063 :
4064 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4065 :
4066 : #if SK5_ENABLED
4067 : PURE module subroutine setRankFractionalDefCom_D1_PSSK5(rank, array)
4068 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4069 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_PSSK5
4070 : #endif
4071 : use pm_kind, only: TKR => RK, SKC => SK5
4072 : use pm_container, only: css_pdt
4073 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4074 : real(TKR) , intent(out) , contiguous :: rank(:)
4075 : end subroutine
4076 : #endif
4077 :
4078 : #if SK4_ENABLED
4079 : PURE module subroutine setRankFractionalDefCom_D1_PSSK4(rank, array)
4080 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4081 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_PSSK4
4082 : #endif
4083 : use pm_kind, only: TKR => RK, SKC => SK4
4084 : use pm_container, only: css_pdt
4085 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4086 : real(TKR) , intent(out) , contiguous :: rank(:)
4087 : end subroutine
4088 : #endif
4089 :
4090 : #if SK3_ENABLED
4091 : PURE module subroutine setRankFractionalDefCom_D1_PSSK3(rank, array)
4092 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4093 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_PSSK3
4094 : #endif
4095 : use pm_kind, only: TKR => RK, SKC => SK3
4096 : use pm_container, only: css_pdt
4097 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4098 : real(TKR) , intent(out) , contiguous :: rank(:)
4099 : end subroutine
4100 : #endif
4101 :
4102 : #if SK2_ENABLED
4103 : PURE module subroutine setRankFractionalDefCom_D1_PSSK2(rank, array)
4104 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4105 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_PSSK2
4106 : #endif
4107 : use pm_kind, only: TKR => RK, SKC => SK2
4108 : use pm_container, only: css_pdt
4109 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4110 : real(TKR) , intent(out) , contiguous :: rank(:)
4111 : end subroutine
4112 : #endif
4113 :
4114 : #if SK1_ENABLED
4115 : PURE module subroutine setRankFractionalDefCom_D1_PSSK1(rank, array)
4116 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4117 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_PSSK1
4118 : #endif
4119 : use pm_kind, only: TKR => RK, SKC => SK1
4120 : use pm_container, only: css_pdt
4121 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4122 : real(TKR) , intent(out) , contiguous :: rank(:)
4123 : end subroutine
4124 : #endif
4125 :
4126 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4127 :
4128 : PURE module subroutine setRankFractionalDefCom_D1_BSSK(rank, array)
4129 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4130 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalDefCom_D1_BSSK
4131 : #endif
4132 : use pm_kind, only: TKR => RK, SKC => SK
4133 : use pm_container, only: css_type
4134 : type(css_type) , intent(in) , contiguous :: array(:)
4135 : real(TKR) , intent(out) , contiguous :: rank(:)
4136 : end subroutine
4137 :
4138 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4139 :
4140 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4141 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4142 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4143 :
4144 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4145 :
4146 : #if SK5_ENABLED
4147 : module subroutine setRankFractionalCusCom_D0_SK5(rank, array, isSorted)
4148 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4149 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D0_SK5
4150 : #endif
4151 : use pm_kind, only: TKR => RK, SKC => SK5
4152 : character(*,SKC) , intent(in) :: array
4153 : real(TKR) , intent(out) , contiguous :: rank(:)
4154 : procedure(logical(LK)) :: isSorted
4155 : end subroutine
4156 : #endif
4157 :
4158 : #if SK4_ENABLED
4159 : module subroutine setRankFractionalCusCom_D0_SK4(rank, array, isSorted)
4160 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4161 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D0_SK4
4162 : #endif
4163 : use pm_kind, only: TKR => RK, SKC => SK4
4164 : character(*,SKC) , intent(in) :: array
4165 : real(TKR) , intent(out) , contiguous :: rank(:)
4166 : procedure(logical(LK)) :: isSorted
4167 : end subroutine
4168 : #endif
4169 :
4170 : #if SK3_ENABLED
4171 : module subroutine setRankFractionalCusCom_D0_SK3(rank, array, isSorted)
4172 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4173 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D0_SK3
4174 : #endif
4175 : use pm_kind, only: TKR => RK, SKC => SK3
4176 : character(*,SKC) , intent(in) :: array
4177 : real(TKR) , intent(out) , contiguous :: rank(:)
4178 : procedure(logical(LK)) :: isSorted
4179 : end subroutine
4180 : #endif
4181 :
4182 : #if SK2_ENABLED
4183 : module subroutine setRankFractionalCusCom_D0_SK2(rank, array, isSorted)
4184 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4185 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D0_SK2
4186 : #endif
4187 : use pm_kind, only: TKR => RK, SKC => SK2
4188 : character(*,SKC) , intent(in) :: array
4189 : real(TKR) , intent(out) , contiguous :: rank(:)
4190 : procedure(logical(LK)) :: isSorted
4191 : end subroutine
4192 : #endif
4193 :
4194 : #if SK1_ENABLED
4195 : module subroutine setRankFractionalCusCom_D0_SK1(rank, array, isSorted)
4196 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4197 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D0_SK1
4198 : #endif
4199 : use pm_kind, only: TKR => RK, SKC => SK1
4200 : character(*,SKC) , intent(in) :: array
4201 : real(TKR) , intent(out) , contiguous :: rank(:)
4202 : procedure(logical(LK)) :: isSorted
4203 : end subroutine
4204 : #endif
4205 :
4206 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4207 :
4208 : #if SK5_ENABLED
4209 : module subroutine setRankFractionalCusCom_D1_SK5(rank, array, isSorted)
4210 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4211 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_SK5
4212 : #endif
4213 : use pm_kind, only: TKR => RK, SKC => SK5
4214 : character(*,SKC) , intent(in) , contiguous :: array(:)
4215 : real(TKR) , intent(out) , contiguous :: rank(:)
4216 : procedure(logical(LK)) :: isSorted
4217 : end subroutine
4218 : #endif
4219 :
4220 : #if SK4_ENABLED
4221 : module subroutine setRankFractionalCusCom_D1_SK4(rank, array, isSorted)
4222 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4223 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_SK4
4224 : #endif
4225 : use pm_kind, only: TKR => RK, SKC => SK4
4226 : character(*,SKC) , intent(in) , contiguous :: array(:)
4227 : real(TKR) , intent(out) , contiguous :: rank(:)
4228 : procedure(logical(LK)) :: isSorted
4229 : end subroutine
4230 : #endif
4231 :
4232 : #if SK3_ENABLED
4233 : module subroutine setRankFractionalCusCom_D1_SK3(rank, array, isSorted)
4234 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4235 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_SK3
4236 : #endif
4237 : use pm_kind, only: TKR => RK, SKC => SK3
4238 : character(*,SKC) , intent(in) , contiguous :: array(:)
4239 : real(TKR) , intent(out) , contiguous :: rank(:)
4240 : procedure(logical(LK)) :: isSorted
4241 : end subroutine
4242 : #endif
4243 :
4244 : #if SK2_ENABLED
4245 : module subroutine setRankFractionalCusCom_D1_SK2(rank, array, isSorted)
4246 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4247 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_SK2
4248 : #endif
4249 : use pm_kind, only: TKR => RK, SKC => SK2
4250 : character(*,SKC) , intent(in) , contiguous :: array(:)
4251 : real(TKR) , intent(out) , contiguous :: rank(:)
4252 : procedure(logical(LK)) :: isSorted
4253 : end subroutine
4254 : #endif
4255 :
4256 : #if SK1_ENABLED
4257 : module subroutine setRankFractionalCusCom_D1_SK1(rank, array, isSorted)
4258 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4259 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_SK1
4260 : #endif
4261 : use pm_kind, only: TKR => RK, SKC => SK1
4262 : character(*,SKC) , intent(in) , contiguous :: array(:)
4263 : real(TKR) , intent(out) , contiguous :: rank(:)
4264 : procedure(logical(LK)) :: isSorted
4265 : end subroutine
4266 : #endif
4267 :
4268 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4269 :
4270 : #if IK5_ENABLED
4271 : module subroutine setRankFractionalCusCom_D1_IK5(rank, array, isSorted)
4272 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4273 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_IK5
4274 : #endif
4275 : use pm_kind, only: TKR => RK, IKC => IK5
4276 : integer(IKC) , intent(in) , contiguous :: array(:)
4277 : real(TKR) , intent(out) , contiguous :: rank(:)
4278 : procedure(logical(LK)) :: isSorted
4279 : end subroutine
4280 : #endif
4281 :
4282 : #if IK4_ENABLED
4283 : module subroutine setRankFractionalCusCom_D1_IK4(rank, array, isSorted)
4284 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4285 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_IK4
4286 : #endif
4287 : use pm_kind, only: TKR => RK, IKC => IK4
4288 : integer(IKC) , intent(in) , contiguous :: array(:)
4289 : real(TKR) , intent(out) , contiguous :: rank(:)
4290 : procedure(logical(LK)) :: isSorted
4291 : end subroutine
4292 : #endif
4293 :
4294 : #if IK3_ENABLED
4295 : module subroutine setRankFractionalCusCom_D1_IK3(rank, array, isSorted)
4296 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4297 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_IK3
4298 : #endif
4299 : use pm_kind, only: TKR => RK, IKC => IK3
4300 : integer(IKC) , intent(in) , contiguous :: array(:)
4301 : real(TKR) , intent(out) , contiguous :: rank(:)
4302 : procedure(logical(LK)) :: isSorted
4303 : end subroutine
4304 : #endif
4305 :
4306 : #if IK2_ENABLED
4307 : module subroutine setRankFractionalCusCom_D1_IK2(rank, array, isSorted)
4308 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4309 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_IK2
4310 : #endif
4311 : use pm_kind, only: TKR => RK, IKC => IK2
4312 : integer(IKC) , intent(in) , contiguous :: array(:)
4313 : real(TKR) , intent(out) , contiguous :: rank(:)
4314 : procedure(logical(LK)) :: isSorted
4315 : end subroutine
4316 : #endif
4317 :
4318 : #if IK1_ENABLED
4319 : module subroutine setRankFractionalCusCom_D1_IK1(rank, array, isSorted)
4320 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4321 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_IK1
4322 : #endif
4323 : use pm_kind, only: TKR => RK, IKC => IK1
4324 : integer(IKC) , intent(in) , contiguous :: array(:)
4325 : real(TKR) , intent(out) , contiguous :: rank(:)
4326 : procedure(logical(LK)) :: isSorted
4327 : end subroutine
4328 : #endif
4329 :
4330 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4331 :
4332 : #if LK5_ENABLED
4333 : module subroutine setRankFractionalCusCom_D1_LK5(rank, array, isSorted)
4334 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4335 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_LK5
4336 : #endif
4337 : use pm_kind, only: TKR => RK, LKC => LK5
4338 : logical(LKC) , intent(in) , contiguous :: array(:)
4339 : real(TKR) , intent(out) , contiguous :: rank(:)
4340 : procedure(logical(LK)) :: isSorted
4341 : end subroutine
4342 : #endif
4343 :
4344 : #if LK4_ENABLED
4345 : module subroutine setRankFractionalCusCom_D1_LK4(rank, array, isSorted)
4346 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4347 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_LK4
4348 : #endif
4349 : use pm_kind, only: TKR => RK, LKC => LK4
4350 : logical(LKC) , intent(in) , contiguous :: array(:)
4351 : real(TKR) , intent(out) , contiguous :: rank(:)
4352 : procedure(logical(LK)) :: isSorted
4353 : end subroutine
4354 : #endif
4355 :
4356 : #if LK3_ENABLED
4357 : module subroutine setRankFractionalCusCom_D1_LK3(rank, array, isSorted)
4358 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4359 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_LK3
4360 : #endif
4361 : use pm_kind, only: TKR => RK, LKC => LK3
4362 : logical(LKC) , intent(in) , contiguous :: array(:)
4363 : real(TKR) , intent(out) , contiguous :: rank(:)
4364 : procedure(logical(LK)) :: isSorted
4365 : end subroutine
4366 : #endif
4367 :
4368 : #if LK2_ENABLED
4369 : module subroutine setRankFractionalCusCom_D1_LK2(rank, array, isSorted)
4370 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4371 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_LK2
4372 : #endif
4373 : use pm_kind, only: TKR => RK, LKC => LK2
4374 : logical(LKC) , intent(in) , contiguous :: array(:)
4375 : real(TKR) , intent(out) , contiguous :: rank(:)
4376 : procedure(logical(LK)) :: isSorted
4377 : end subroutine
4378 : #endif
4379 :
4380 : #if LK1_ENABLED
4381 : module subroutine setRankFractionalCusCom_D1_LK1(rank, array, isSorted)
4382 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4383 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_LK1
4384 : #endif
4385 : use pm_kind, only: TKR => RK, LKC => LK1
4386 : logical(LKC) , intent(in) , contiguous :: array(:)
4387 : real(TKR) , intent(out) , contiguous :: rank(:)
4388 : procedure(logical(LK)) :: isSorted
4389 : end subroutine
4390 : #endif
4391 :
4392 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4393 :
4394 : #if CK5_ENABLED
4395 : module subroutine setRankFractionalCusCom_D1_CK5(rank, array, isSorted)
4396 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4397 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_CK5
4398 : #endif
4399 : use pm_kind, only: TKR => RK, CKC => CK5
4400 : complex(CKC) , intent(in) , contiguous :: array(:)
4401 : real(TKR) , intent(out) , contiguous :: rank(:)
4402 : procedure(logical(LK)) :: isSorted
4403 : end subroutine
4404 : #endif
4405 :
4406 : #if CK4_ENABLED
4407 : module subroutine setRankFractionalCusCom_D1_CK4(rank, array, isSorted)
4408 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4409 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_CK4
4410 : #endif
4411 : use pm_kind, only: TKR => RK, CKC => CK4
4412 : complex(CKC) , intent(in) , contiguous :: array(:)
4413 : real(TKR) , intent(out) , contiguous :: rank(:)
4414 : procedure(logical(LK)) :: isSorted
4415 : end subroutine
4416 : #endif
4417 :
4418 : #if CK3_ENABLED
4419 : module subroutine setRankFractionalCusCom_D1_CK3(rank, array, isSorted)
4420 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4421 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_CK3
4422 : #endif
4423 : use pm_kind, only: TKR => RK, CKC => CK3
4424 : complex(CKC) , intent(in) , contiguous :: array(:)
4425 : real(TKR) , intent(out) , contiguous :: rank(:)
4426 : procedure(logical(LK)) :: isSorted
4427 : end subroutine
4428 : #endif
4429 :
4430 : #if CK2_ENABLED
4431 : module subroutine setRankFractionalCusCom_D1_CK2(rank, array, isSorted)
4432 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4433 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_CK2
4434 : #endif
4435 : use pm_kind, only: TKR => RK, CKC => CK2
4436 : complex(CKC) , intent(in) , contiguous :: array(:)
4437 : real(TKR) , intent(out) , contiguous :: rank(:)
4438 : procedure(logical(LK)) :: isSorted
4439 : end subroutine
4440 : #endif
4441 :
4442 : #if CK1_ENABLED
4443 : module subroutine setRankFractionalCusCom_D1_CK1(rank, array, isSorted)
4444 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4445 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_CK1
4446 : #endif
4447 : use pm_kind, only: TKR => RK, CKC => CK1
4448 : complex(CKC) , intent(in) , contiguous :: array(:)
4449 : real(TKR) , intent(out) , contiguous :: rank(:)
4450 : procedure(logical(LK)) :: isSorted
4451 : end subroutine
4452 : #endif
4453 :
4454 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4455 :
4456 : #if RK5_ENABLED
4457 : module subroutine setRankFractionalCusCom_D1_RK5(rank, array, isSorted)
4458 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4459 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_RK5
4460 : #endif
4461 : use pm_kind, only: TKR => RK, RKC => RK5
4462 : real(RKC) , intent(in) , contiguous :: array(:)
4463 : real(TKR) , intent(out) , contiguous :: rank(:)
4464 : procedure(logical(LK)) :: isSorted
4465 : end subroutine
4466 : #endif
4467 :
4468 : #if RK4_ENABLED
4469 : module subroutine setRankFractionalCusCom_D1_RK4(rank, array, isSorted)
4470 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4471 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_RK4
4472 : #endif
4473 : use pm_kind, only: TKR => RK, RKC => RK4
4474 : real(RKC) , intent(in) , contiguous :: array(:)
4475 : real(TKR) , intent(out) , contiguous :: rank(:)
4476 : procedure(logical(LK)) :: isSorted
4477 : end subroutine
4478 : #endif
4479 :
4480 : #if RK3_ENABLED
4481 : module subroutine setRankFractionalCusCom_D1_RK3(rank, array, isSorted)
4482 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4483 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_RK3
4484 : #endif
4485 : use pm_kind, only: TKR => RK, RKC => RK3
4486 : real(RKC) , intent(in) , contiguous :: array(:)
4487 : real(TKR) , intent(out) , contiguous :: rank(:)
4488 : procedure(logical(LK)) :: isSorted
4489 : end subroutine
4490 : #endif
4491 :
4492 : #if RK2_ENABLED
4493 : module subroutine setRankFractionalCusCom_D1_RK2(rank, array, isSorted)
4494 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4495 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_RK2
4496 : #endif
4497 : use pm_kind, only: TKR => RK, RKC => RK2
4498 : real(RKC) , intent(in) , contiguous :: array(:)
4499 : real(TKR) , intent(out) , contiguous :: rank(:)
4500 : procedure(logical(LK)) :: isSorted
4501 : end subroutine
4502 : #endif
4503 :
4504 : #if RK1_ENABLED
4505 : module subroutine setRankFractionalCusCom_D1_RK1(rank, array, isSorted)
4506 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4507 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_RK1
4508 : #endif
4509 : use pm_kind, only: TKR => RK, RKC => RK1
4510 : real(RKC) , intent(in) , contiguous :: array(:)
4511 : real(TKR) , intent(out) , contiguous :: rank(:)
4512 : procedure(logical(LK)) :: isSorted
4513 : end subroutine
4514 : #endif
4515 :
4516 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4517 :
4518 : #if SK5_ENABLED
4519 : module subroutine setRankFractionalCusCom_D1_PSSK5(rank, array, isSorted)
4520 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4521 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_PSSK5
4522 : #endif
4523 : use pm_kind, only: TKR => RK, SKC => SK5
4524 : use pm_container, only: css_pdt
4525 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4526 : real(TKR) , intent(out) , contiguous :: rank(:)
4527 : procedure(logical(LK)) :: isSorted
4528 : end subroutine
4529 : #endif
4530 :
4531 : #if SK4_ENABLED
4532 : module subroutine setRankFractionalCusCom_D1_PSSK4(rank, array, isSorted)
4533 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4534 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_PSSK4
4535 : #endif
4536 : use pm_kind, only: TKR => RK, SKC => SK4
4537 : use pm_container, only: css_pdt
4538 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4539 : real(TKR) , intent(out) , contiguous :: rank(:)
4540 : procedure(logical(LK)) :: isSorted
4541 : end subroutine
4542 : #endif
4543 :
4544 : #if SK3_ENABLED
4545 : module subroutine setRankFractionalCusCom_D1_PSSK3(rank, array, isSorted)
4546 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4547 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_PSSK3
4548 : #endif
4549 : use pm_kind, only: TKR => RK, SKC => SK3
4550 : use pm_container, only: css_pdt
4551 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4552 : real(TKR) , intent(out) , contiguous :: rank(:)
4553 : procedure(logical(LK)) :: isSorted
4554 : end subroutine
4555 : #endif
4556 :
4557 : #if SK2_ENABLED
4558 : module subroutine setRankFractionalCusCom_D1_PSSK2(rank, array, isSorted)
4559 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4560 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_PSSK2
4561 : #endif
4562 : use pm_kind, only: TKR => RK, SKC => SK2
4563 : use pm_container, only: css_pdt
4564 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4565 : real(TKR) , intent(out) , contiguous :: rank(:)
4566 : procedure(logical(LK)) :: isSorted
4567 : end subroutine
4568 : #endif
4569 :
4570 : #if SK1_ENABLED
4571 : module subroutine setRankFractionalCusCom_D1_PSSK1(rank, array, isSorted)
4572 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4573 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_PSSK1
4574 : #endif
4575 : use pm_kind, only: TKR => RK, SKC => SK1
4576 : use pm_container, only: css_pdt
4577 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
4578 : real(TKR) , intent(out) , contiguous :: rank(:)
4579 : procedure(logical(LK)) :: isSorted
4580 : end subroutine
4581 : #endif
4582 :
4583 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4584 :
4585 : module subroutine setRankFractionalCusCom_D1_BSSK(rank, array, isSorted)
4586 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4587 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankFractionalCusCom_D1_BSSK
4588 : #endif
4589 : use pm_kind, only: TKR => RK, SKC => SK
4590 : use pm_container, only: css_type
4591 : type(css_type) , intent(in) , contiguous :: array(:)
4592 : real(TKR) , intent(out) , contiguous :: rank(:)
4593 : procedure(logical(LK)) :: isSorted
4594 : end subroutine
4595 :
4596 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4597 :
4598 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4599 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4600 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4601 :
4602 : end interface
4603 :
4604 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4605 :
4606 : !> \brief
4607 : !> Generate and return the **Modified rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
4608 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
4609 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
4610 : !>
4611 : !> \details
4612 : !> This kind of ranking of values is widely known as <b>Modified Competition (`1334`) ranking</b>.<br>
4613 : !> Sometimes, competition ranking is done by leaving the gaps in the ranking numbers before the sets
4614 : !> of equal-ranking items (rather than after them as in Standard Competition ranking).<br>
4615 : !> The number of ranking numbers that are left out in this gap remains one less than the number of items that compared equal.<br>
4616 : !> Equivalently, the ranking number of each item is equal to the number of items ranked equal to it or above it.<br>
4617 : !> This ranking ensures that a competitor only comes second if they score higher than all but one of their opponents,
4618 : !> third if they score higher than all but two of their opponents, etc.<br>
4619 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked head of *D*, then *A* gets ranking
4620 : !> number `1` (*first*), *B* gets ranking number `3` (*joint third*), *C* also gets ranking number `3` (*joint third*)
4621 : !> and *D* gets ranking number `4` (*fourth*).<br>
4622 : !> In this case, nobody would get ranking number `2` (*second*) (left as a gap).<br>
4623 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **Modified Competition ranking** `1334`.<br>
4624 : !>
4625 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
4626 : !> <ol>
4627 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
4628 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
4629 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
4630 : !> <li> type `integer` of kind \IKALL or,<br>
4631 : !> <li> type `logical` of kind \LKALL or,<br>
4632 : !> <li> type `complex` of kind \CKALL or,<br>
4633 : !> <li> type `real` of kind \RKALL,<br>
4634 : !> </ol>
4635 : !> or,
4636 : !> <ol>
4637 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
4638 : !> </ol>
4639 : !> whose elements rankings will be computed and returned.
4640 : !> \param[out] rank : The output `contiguous` array of rank `1` of type `integer` of default kind \IK
4641 : !> containing the ranks of the corresponding elements of `array`.<br>
4642 : !> The size of `rank` must match that of `array` (or its length type parameter if `array` is a scalar string).<br>
4643 : !> **Read `rank(i)` as the Modified rank of the `i`th element of `array`.**
4644 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type
4645 : !> and kind as the input `array`.<br>
4646 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
4647 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
4648 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
4649 : !> If `array` is a Fortran string (i.e., a scalar `character`),
4650 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
4651 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
4652 : !> \code{.F90}
4653 : !> function isSorted(a,b) result (sorted)
4654 : !> use pm_kind, only: SK, IK, LK, CK, RK
4655 : !> TYPE(KIND) , intent(in) :: a, b
4656 : !> logical(LK) :: sorted
4657 : !> end function
4658 : !> \endcode
4659 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
4660 : !> \code{.F90}
4661 : !> use pm_container, only: StrCon
4662 : !> use pm_kind, only: SK, IK, LK, CK, RK
4663 : !> character(*, SK), intent(in) :: a, b
4664 : !> integer(IK) , intent(in) :: a, b
4665 : !> logical(LK) , intent(in) :: a, b
4666 : !> complex(CK) , intent(in) :: a, b
4667 : !> real(RK) , intent(in) :: a, b
4668 : !> type(StrCon) , intent(in) :: a, b
4669 : !> \endcode
4670 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
4671 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
4672 : !> \code{.F90}
4673 : !> function isSorted(a,b) result (sorted)
4674 : !> character(1,SKC), intent(in) :: a, b
4675 : !> logical(LK) :: sorted
4676 : !> end function
4677 : !> \endcode
4678 : !> where `SKC` represents the kind of the input string argument `array`.<br>
4679 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
4680 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
4681 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
4682 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
4683 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
4684 : !>
4685 : !> \return
4686 : !> `rank(1:size(array)` : The output `contiguous` array of rank `1` of type `integer` of default kind \IK containing the ranks of the corresponding elements of `array`.<br>
4687 : !> The size of `rank` matches that of `array` (or its length type parameter if `array` is a scalar string).<br>
4688 : !> **Read `rank(i)` as the Modified rank of the `i`th element of `array`.**
4689 : !>
4690 : !> \interface{getRankModified}
4691 : !> \code{.F90}
4692 : !>
4693 : !> use pm_arrayRank, only: getRankModified
4694 : !>
4695 : !> rank(1:size(array)) = getRankModified(array)
4696 : !> rank(1:size(array)) = getRankModified(array, isSorted)
4697 : !>
4698 : !> \endcode
4699 : !>
4700 : !> \warning
4701 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
4702 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
4703 : !> identify ties within the Modified ranking of the input `array`.
4704 : !>
4705 : !> \warnpure
4706 : !>
4707 : !> \warning
4708 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
4709 : !>
4710 : !> \see
4711 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
4712 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
4713 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
4714 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
4715 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
4716 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
4717 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
4718 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
4719 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
4720 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
4721 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
4722 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
4723 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
4724 : !>
4725 : !> \example{getRankModified}
4726 : !> \include{lineno} example/pm_arrayRank/getRankModified/main.F90
4727 : !> \compilef{getRankModified}
4728 : !> \output{getRankModified}
4729 : !> \include{lineno} example/pm_arrayRank/getRankModified/main.out.F90
4730 : !>
4731 : !> \test
4732 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
4733 : !>
4734 : !> \bug
4735 : !> \status \unresolved
4736 : !> \source \ifort{2021.5}
4737 : !> \desc
4738 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
4739 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
4740 : !> \remedy
4741 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
4742 : !>
4743 : !> \todo
4744 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
4745 : !>
4746 : !> \todo
4747 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
4748 : !>
4749 : !> \finmain{getRankModified}
4750 : !>
4751 : !> \author
4752 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
4753 : interface getRankModified
4754 :
4755 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4756 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4757 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4758 :
4759 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4760 :
4761 : #if SK5_ENABLED
4762 : module function getRankModifiedDefCom_D0_SK5(array) result(rank)
4763 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4764 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D0_SK5
4765 : #endif
4766 : use pm_kind, only: TKR => IK, SKC => SK5
4767 : character(*,SKC) , intent(in) :: array
4768 : integer(TKR) :: rank(len(array, IK))
4769 : end function
4770 : #endif
4771 :
4772 : #if SK4_ENABLED
4773 : module function getRankModifiedDefCom_D0_SK4(array) result(rank)
4774 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4775 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D0_SK4
4776 : #endif
4777 : use pm_kind, only: TKR => IK, SKC => SK4
4778 : character(*,SKC) , intent(in) :: array
4779 : integer(TKR) :: rank(len(array, IK))
4780 : end function
4781 : #endif
4782 :
4783 : #if SK3_ENABLED
4784 : module function getRankModifiedDefCom_D0_SK3(array) result(rank)
4785 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4786 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D0_SK3
4787 : #endif
4788 : use pm_kind, only: TKR => IK, SKC => SK3
4789 : character(*,SKC) , intent(in) :: array
4790 : integer(TKR) :: rank(len(array, IK))
4791 : end function
4792 : #endif
4793 :
4794 : #if SK2_ENABLED
4795 : module function getRankModifiedDefCom_D0_SK2(array) result(rank)
4796 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4797 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D0_SK2
4798 : #endif
4799 : use pm_kind, only: TKR => IK, SKC => SK2
4800 : character(*,SKC) , intent(in) :: array
4801 : integer(TKR) :: rank(len(array, IK))
4802 : end function
4803 : #endif
4804 :
4805 : #if SK1_ENABLED
4806 : module function getRankModifiedDefCom_D0_SK1(array) result(rank)
4807 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4808 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D0_SK1
4809 : #endif
4810 : use pm_kind, only: TKR => IK, SKC => SK1
4811 : character(*,SKC) , intent(in) :: array
4812 : integer(TKR) :: rank(len(array, IK))
4813 : end function
4814 : #endif
4815 :
4816 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4817 :
4818 : #if SK5_ENABLED
4819 : module function getRankModifiedDefCom_D1_SK5(array) result(rank)
4820 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4821 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_SK5
4822 : #endif
4823 : use pm_kind, only: TKR => IK, SKC => SK5
4824 : character(*,SKC) , intent(in) , contiguous :: array(:)
4825 : integer(TKR) :: rank(size(array, kind = IK))
4826 : end function
4827 : #endif
4828 :
4829 : #if SK4_ENABLED
4830 : module function getRankModifiedDefCom_D1_SK4(array) result(rank)
4831 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4832 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_SK4
4833 : #endif
4834 : use pm_kind, only: TKR => IK, SKC => SK4
4835 : character(*,SKC) , intent(in) , contiguous :: array(:)
4836 : integer(TKR) :: rank(size(array, kind = IK))
4837 : end function
4838 : #endif
4839 :
4840 : #if SK3_ENABLED
4841 : module function getRankModifiedDefCom_D1_SK3(array) result(rank)
4842 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4843 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_SK3
4844 : #endif
4845 : use pm_kind, only: TKR => IK, SKC => SK3
4846 : character(*,SKC) , intent(in) , contiguous :: array(:)
4847 : integer(TKR) :: rank(size(array, kind = IK))
4848 : end function
4849 : #endif
4850 :
4851 : #if SK2_ENABLED
4852 : module function getRankModifiedDefCom_D1_SK2(array) result(rank)
4853 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4854 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_SK2
4855 : #endif
4856 : use pm_kind, only: TKR => IK, SKC => SK2
4857 : character(*,SKC) , intent(in) , contiguous :: array(:)
4858 : integer(TKR) :: rank(size(array, kind = IK))
4859 : end function
4860 : #endif
4861 :
4862 : #if SK1_ENABLED
4863 : module function getRankModifiedDefCom_D1_SK1(array) result(rank)
4864 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4865 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_SK1
4866 : #endif
4867 : use pm_kind, only: TKR => IK, SKC => SK1
4868 : character(*,SKC) , intent(in) , contiguous :: array(:)
4869 : integer(TKR) :: rank(size(array, kind = IK))
4870 : end function
4871 : #endif
4872 :
4873 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4874 :
4875 : #if IK5_ENABLED
4876 : module function getRankModifiedDefCom_D1_IK5(array) result(rank)
4877 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4878 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_IK5
4879 : #endif
4880 : use pm_kind, only: TKR => IK, IKC => IK5
4881 : integer(IKC) , intent(in) , contiguous :: array(:)
4882 : integer(TKR) :: rank(size(array, kind = IK))
4883 : end function
4884 : #endif
4885 :
4886 : #if IK4_ENABLED
4887 : module function getRankModifiedDefCom_D1_IK4(array) result(rank)
4888 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4889 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_IK4
4890 : #endif
4891 : use pm_kind, only: TKR => IK, IKC => IK4
4892 : integer(IKC) , intent(in) , contiguous :: array(:)
4893 : integer(TKR) :: rank(size(array, kind = IK))
4894 : end function
4895 : #endif
4896 :
4897 : #if IK3_ENABLED
4898 : module function getRankModifiedDefCom_D1_IK3(array) result(rank)
4899 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4900 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_IK3
4901 : #endif
4902 : use pm_kind, only: TKR => IK, IKC => IK3
4903 : integer(IKC) , intent(in) , contiguous :: array(:)
4904 : integer(TKR) :: rank(size(array, kind = IK))
4905 : end function
4906 : #endif
4907 :
4908 : #if IK2_ENABLED
4909 : module function getRankModifiedDefCom_D1_IK2(array) result(rank)
4910 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4911 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_IK2
4912 : #endif
4913 : use pm_kind, only: TKR => IK, IKC => IK2
4914 : integer(IKC) , intent(in) , contiguous :: array(:)
4915 : integer(TKR) :: rank(size(array, kind = IK))
4916 : end function
4917 : #endif
4918 :
4919 : #if IK1_ENABLED
4920 : module function getRankModifiedDefCom_D1_IK1(array) result(rank)
4921 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4922 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_IK1
4923 : #endif
4924 : use pm_kind, only: TKR => IK, IKC => IK1
4925 : integer(IKC) , intent(in) , contiguous :: array(:)
4926 : integer(TKR) :: rank(size(array, kind = IK))
4927 : end function
4928 : #endif
4929 :
4930 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4931 :
4932 : #if LK5_ENABLED
4933 : module function getRankModifiedDefCom_D1_LK5(array) result(rank)
4934 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4935 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_LK5
4936 : #endif
4937 : use pm_kind, only: TKR => IK, LKC => LK5
4938 : logical(LKC) , intent(in) , contiguous :: array(:)
4939 : integer(TKR) :: rank(size(array, kind = IK))
4940 : end function
4941 : #endif
4942 :
4943 : #if LK4_ENABLED
4944 : module function getRankModifiedDefCom_D1_LK4(array) result(rank)
4945 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4946 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_LK4
4947 : #endif
4948 : use pm_kind, only: TKR => IK, LKC => LK4
4949 : logical(LKC) , intent(in) , contiguous :: array(:)
4950 : integer(TKR) :: rank(size(array, kind = IK))
4951 : end function
4952 : #endif
4953 :
4954 : #if LK3_ENABLED
4955 : module function getRankModifiedDefCom_D1_LK3(array) result(rank)
4956 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4957 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_LK3
4958 : #endif
4959 : use pm_kind, only: TKR => IK, LKC => LK3
4960 : logical(LKC) , intent(in) , contiguous :: array(:)
4961 : integer(TKR) :: rank(size(array, kind = IK))
4962 : end function
4963 : #endif
4964 :
4965 : #if LK2_ENABLED
4966 : module function getRankModifiedDefCom_D1_LK2(array) result(rank)
4967 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4968 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_LK2
4969 : #endif
4970 : use pm_kind, only: TKR => IK, LKC => LK2
4971 : logical(LKC) , intent(in) , contiguous :: array(:)
4972 : integer(TKR) :: rank(size(array, kind = IK))
4973 : end function
4974 : #endif
4975 :
4976 : #if LK1_ENABLED
4977 : module function getRankModifiedDefCom_D1_LK1(array) result(rank)
4978 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4979 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_LK1
4980 : #endif
4981 : use pm_kind, only: TKR => IK, LKC => LK1
4982 : logical(LKC) , intent(in) , contiguous :: array(:)
4983 : integer(TKR) :: rank(size(array, kind = IK))
4984 : end function
4985 : #endif
4986 :
4987 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4988 :
4989 : #if CK5_ENABLED
4990 : module function getRankModifiedDefCom_D1_CK5(array) result(rank)
4991 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
4992 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_CK5
4993 : #endif
4994 : use pm_kind, only: TKR => IK, CKC => CK5
4995 : complex(CKC) , intent(in) , contiguous :: array(:)
4996 : integer(TKR) :: rank(size(array, kind = IK))
4997 : end function
4998 : #endif
4999 :
5000 : #if CK4_ENABLED
5001 : module function getRankModifiedDefCom_D1_CK4(array) result(rank)
5002 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5003 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_CK4
5004 : #endif
5005 : use pm_kind, only: TKR => IK, CKC => CK4
5006 : complex(CKC) , intent(in) , contiguous :: array(:)
5007 : integer(TKR) :: rank(size(array, kind = IK))
5008 : end function
5009 : #endif
5010 :
5011 : #if CK3_ENABLED
5012 : module function getRankModifiedDefCom_D1_CK3(array) result(rank)
5013 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5014 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_CK3
5015 : #endif
5016 : use pm_kind, only: TKR => IK, CKC => CK3
5017 : complex(CKC) , intent(in) , contiguous :: array(:)
5018 : integer(TKR) :: rank(size(array, kind = IK))
5019 : end function
5020 : #endif
5021 :
5022 : #if CK2_ENABLED
5023 : module function getRankModifiedDefCom_D1_CK2(array) result(rank)
5024 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5025 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_CK2
5026 : #endif
5027 : use pm_kind, only: TKR => IK, CKC => CK2
5028 : complex(CKC) , intent(in) , contiguous :: array(:)
5029 : integer(TKR) :: rank(size(array, kind = IK))
5030 : end function
5031 : #endif
5032 :
5033 : #if CK1_ENABLED
5034 : module function getRankModifiedDefCom_D1_CK1(array) result(rank)
5035 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5036 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_CK1
5037 : #endif
5038 : use pm_kind, only: TKR => IK, CKC => CK1
5039 : complex(CKC) , intent(in) , contiguous :: array(:)
5040 : integer(TKR) :: rank(size(array, kind = IK))
5041 : end function
5042 : #endif
5043 :
5044 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5045 :
5046 : #if RK5_ENABLED
5047 : module function getRankModifiedDefCom_D1_RK5(array) result(rank)
5048 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5049 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_RK5
5050 : #endif
5051 : use pm_kind, only: TKR => IK, RKC => RK5
5052 : real(RKC) , intent(in) , contiguous :: array(:)
5053 : integer(TKR) :: rank(size(array, kind = IK))
5054 : end function
5055 : #endif
5056 :
5057 : #if RK4_ENABLED
5058 : module function getRankModifiedDefCom_D1_RK4(array) result(rank)
5059 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5060 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_RK4
5061 : #endif
5062 : use pm_kind, only: TKR => IK, RKC => RK4
5063 : real(RKC) , intent(in) , contiguous :: array(:)
5064 : integer(TKR) :: rank(size(array, kind = IK))
5065 : end function
5066 : #endif
5067 :
5068 : #if RK3_ENABLED
5069 : module function getRankModifiedDefCom_D1_RK3(array) result(rank)
5070 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5071 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_RK3
5072 : #endif
5073 : use pm_kind, only: TKR => IK, RKC => RK3
5074 : real(RKC) , intent(in) , contiguous :: array(:)
5075 : integer(TKR) :: rank(size(array, kind = IK))
5076 : end function
5077 : #endif
5078 :
5079 : #if RK2_ENABLED
5080 : module function getRankModifiedDefCom_D1_RK2(array) result(rank)
5081 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5082 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_RK2
5083 : #endif
5084 : use pm_kind, only: TKR => IK, RKC => RK2
5085 : real(RKC) , intent(in) , contiguous :: array(:)
5086 : integer(TKR) :: rank(size(array, kind = IK))
5087 : end function
5088 : #endif
5089 :
5090 : #if RK1_ENABLED
5091 : module function getRankModifiedDefCom_D1_RK1(array) result(rank)
5092 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5093 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_RK1
5094 : #endif
5095 : use pm_kind, only: TKR => IK, RKC => RK1
5096 : real(RKC) , intent(in) , contiguous :: array(:)
5097 : integer(TKR) :: rank(size(array, kind = IK))
5098 : end function
5099 : #endif
5100 :
5101 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5102 :
5103 : #if SK5_ENABLED
5104 : module function getRankModifiedDefCom_D1_PSSK5(array) result(rank)
5105 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5106 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_PSSK5
5107 : #endif
5108 : use pm_kind, only: TKR => IK, SKC => SK5
5109 : use pm_container, only: css_pdt
5110 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5111 : integer(TKR) :: rank(size(array, kind = IK))
5112 : end function
5113 : #endif
5114 :
5115 : #if SK4_ENABLED
5116 : module function getRankModifiedDefCom_D1_PSSK4(array) result(rank)
5117 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5118 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_PSSK4
5119 : #endif
5120 : use pm_kind, only: TKR => IK, SKC => SK4
5121 : use pm_container, only: css_pdt
5122 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5123 : integer(TKR) :: rank(size(array, kind = IK))
5124 : end function
5125 : #endif
5126 :
5127 : #if SK3_ENABLED
5128 : module function getRankModifiedDefCom_D1_PSSK3(array) result(rank)
5129 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5130 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_PSSK3
5131 : #endif
5132 : use pm_kind, only: TKR => IK, SKC => SK3
5133 : use pm_container, only: css_pdt
5134 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5135 : integer(TKR) :: rank(size(array, kind = IK))
5136 : end function
5137 : #endif
5138 :
5139 : #if SK2_ENABLED
5140 : module function getRankModifiedDefCom_D1_PSSK2(array) result(rank)
5141 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5142 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_PSSK2
5143 : #endif
5144 : use pm_kind, only: TKR => IK, SKC => SK2
5145 : use pm_container, only: css_pdt
5146 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5147 : integer(TKR) :: rank(size(array, kind = IK))
5148 : end function
5149 : #endif
5150 :
5151 : #if SK1_ENABLED
5152 : module function getRankModifiedDefCom_D1_PSSK1(array) result(rank)
5153 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5154 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_PSSK1
5155 : #endif
5156 : use pm_kind, only: TKR => IK, SKC => SK1
5157 : use pm_container, only: css_pdt
5158 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5159 : integer(TKR) :: rank(size(array, kind = IK))
5160 : end function
5161 : #endif
5162 :
5163 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5164 :
5165 : module function getRankModifiedDefCom_D1_BSSK(array) result(rank)
5166 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5167 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedDefCom_D1_BSSK
5168 : #endif
5169 : use pm_kind, only: TKR => IK, SKC => SK
5170 : use pm_container, only: css_type
5171 : type(css_type) , intent(in) , contiguous :: array(:)
5172 : integer(TKR) :: rank(size(array, kind = IK))
5173 : end function
5174 :
5175 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5176 :
5177 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5178 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5179 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5180 :
5181 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5182 :
5183 : #if SK5_ENABLED
5184 : module function getRankModifiedCusCom_D0_SK5(array, isSorted) result(rank)
5185 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5186 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D0_SK5
5187 : #endif
5188 : use pm_kind, only: TKR => IK, SKC => SK5
5189 : character(*,SKC) , intent(in) :: array
5190 : procedure(logical(LK)) :: isSorted
5191 : integer(TKR) :: rank(len(array, IK))
5192 : end function
5193 : #endif
5194 :
5195 : #if SK4_ENABLED
5196 : module function getRankModifiedCusCom_D0_SK4(array, isSorted) result(rank)
5197 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5198 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D0_SK4
5199 : #endif
5200 : use pm_kind, only: TKR => IK, SKC => SK4
5201 : character(*,SKC) , intent(in) :: array
5202 : procedure(logical(LK)) :: isSorted
5203 : integer(TKR) :: rank(len(array, IK))
5204 : end function
5205 : #endif
5206 :
5207 : #if SK3_ENABLED
5208 : module function getRankModifiedCusCom_D0_SK3(array, isSorted) result(rank)
5209 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5210 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D0_SK3
5211 : #endif
5212 : use pm_kind, only: TKR => IK, SKC => SK3
5213 : character(*,SKC) , intent(in) :: array
5214 : procedure(logical(LK)) :: isSorted
5215 : integer(TKR) :: rank(len(array, IK))
5216 : end function
5217 : #endif
5218 :
5219 : #if SK2_ENABLED
5220 : module function getRankModifiedCusCom_D0_SK2(array, isSorted) result(rank)
5221 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5222 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D0_SK2
5223 : #endif
5224 : use pm_kind, only: TKR => IK, SKC => SK2
5225 : character(*,SKC) , intent(in) :: array
5226 : procedure(logical(LK)) :: isSorted
5227 : integer(TKR) :: rank(len(array, IK))
5228 : end function
5229 : #endif
5230 :
5231 : #if SK1_ENABLED
5232 : module function getRankModifiedCusCom_D0_SK1(array, isSorted) result(rank)
5233 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5234 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D0_SK1
5235 : #endif
5236 : use pm_kind, only: TKR => IK, SKC => SK1
5237 : character(*,SKC) , intent(in) :: array
5238 : procedure(logical(LK)) :: isSorted
5239 : integer(TKR) :: rank(len(array, IK))
5240 : end function
5241 : #endif
5242 :
5243 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5244 :
5245 : #if SK5_ENABLED
5246 : module function getRankModifiedCusCom_D1_SK5(array, isSorted) result(rank)
5247 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5248 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_SK5
5249 : #endif
5250 : use pm_kind, only: TKR => IK, SKC => SK5
5251 : character(*,SKC) , intent(in) , contiguous :: array(:)
5252 : procedure(logical(LK)) :: isSorted
5253 : integer(TKR) :: rank(size(array, kind = IK))
5254 : end function
5255 : #endif
5256 :
5257 : #if SK4_ENABLED
5258 : module function getRankModifiedCusCom_D1_SK4(array, isSorted) result(rank)
5259 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5260 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_SK4
5261 : #endif
5262 : use pm_kind, only: TKR => IK, SKC => SK4
5263 : character(*,SKC) , intent(in) , contiguous :: array(:)
5264 : procedure(logical(LK)) :: isSorted
5265 : integer(TKR) :: rank(size(array, kind = IK))
5266 : end function
5267 : #endif
5268 :
5269 : #if SK3_ENABLED
5270 : module function getRankModifiedCusCom_D1_SK3(array, isSorted) result(rank)
5271 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5272 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_SK3
5273 : #endif
5274 : use pm_kind, only: TKR => IK, SKC => SK3
5275 : character(*,SKC) , intent(in) , contiguous :: array(:)
5276 : procedure(logical(LK)) :: isSorted
5277 : integer(TKR) :: rank(size(array, kind = IK))
5278 : end function
5279 : #endif
5280 :
5281 : #if SK2_ENABLED
5282 : module function getRankModifiedCusCom_D1_SK2(array, isSorted) result(rank)
5283 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5284 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_SK2
5285 : #endif
5286 : use pm_kind, only: TKR => IK, SKC => SK2
5287 : character(*,SKC) , intent(in) , contiguous :: array(:)
5288 : procedure(logical(LK)) :: isSorted
5289 : integer(TKR) :: rank(size(array, kind = IK))
5290 : end function
5291 : #endif
5292 :
5293 : #if SK1_ENABLED
5294 : module function getRankModifiedCusCom_D1_SK1(array, isSorted) result(rank)
5295 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5296 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_SK1
5297 : #endif
5298 : use pm_kind, only: TKR => IK, SKC => SK1
5299 : character(*,SKC) , intent(in) , contiguous :: array(:)
5300 : procedure(logical(LK)) :: isSorted
5301 : integer(TKR) :: rank(size(array, kind = IK))
5302 : end function
5303 : #endif
5304 :
5305 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5306 :
5307 : #if IK5_ENABLED
5308 : module function getRankModifiedCusCom_D1_IK5(array, isSorted) result(rank)
5309 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5310 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_IK5
5311 : #endif
5312 : use pm_kind, only: TKR => IK, IKC => IK5
5313 : integer(IKC) , intent(in) , contiguous :: array(:)
5314 : procedure(logical(LK)) :: isSorted
5315 : integer(TKR) :: rank(size(array, kind = IK))
5316 : end function
5317 : #endif
5318 :
5319 : #if IK4_ENABLED
5320 : module function getRankModifiedCusCom_D1_IK4(array, isSorted) result(rank)
5321 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5322 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_IK4
5323 : #endif
5324 : use pm_kind, only: TKR => IK, IKC => IK4
5325 : integer(IKC) , intent(in) , contiguous :: array(:)
5326 : procedure(logical(LK)) :: isSorted
5327 : integer(TKR) :: rank(size(array, kind = IK))
5328 : end function
5329 : #endif
5330 :
5331 : #if IK3_ENABLED
5332 : module function getRankModifiedCusCom_D1_IK3(array, isSorted) result(rank)
5333 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5334 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_IK3
5335 : #endif
5336 : use pm_kind, only: TKR => IK, IKC => IK3
5337 : integer(IKC) , intent(in) , contiguous :: array(:)
5338 : procedure(logical(LK)) :: isSorted
5339 : integer(TKR) :: rank(size(array, kind = IK))
5340 : end function
5341 : #endif
5342 :
5343 : #if IK2_ENABLED
5344 : module function getRankModifiedCusCom_D1_IK2(array, isSorted) result(rank)
5345 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5346 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_IK2
5347 : #endif
5348 : use pm_kind, only: TKR => IK, IKC => IK2
5349 : integer(IKC) , intent(in) , contiguous :: array(:)
5350 : procedure(logical(LK)) :: isSorted
5351 : integer(TKR) :: rank(size(array, kind = IK))
5352 : end function
5353 : #endif
5354 :
5355 : #if IK1_ENABLED
5356 : module function getRankModifiedCusCom_D1_IK1(array, isSorted) result(rank)
5357 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5358 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_IK1
5359 : #endif
5360 : use pm_kind, only: TKR => IK, IKC => IK1
5361 : integer(IKC) , intent(in) , contiguous :: array(:)
5362 : procedure(logical(LK)) :: isSorted
5363 : integer(TKR) :: rank(size(array, kind = IK))
5364 : end function
5365 : #endif
5366 :
5367 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5368 :
5369 : #if LK5_ENABLED
5370 : module function getRankModifiedCusCom_D1_LK5(array, isSorted) result(rank)
5371 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5372 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_LK5
5373 : #endif
5374 : use pm_kind, only: TKR => IK, LKC => LK5
5375 : logical(LKC) , intent(in) , contiguous :: array(:)
5376 : procedure(logical(LK)) :: isSorted
5377 : integer(TKR) :: rank(size(array, kind = IK))
5378 : end function
5379 : #endif
5380 :
5381 : #if LK4_ENABLED
5382 : module function getRankModifiedCusCom_D1_LK4(array, isSorted) result(rank)
5383 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5384 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_LK4
5385 : #endif
5386 : use pm_kind, only: TKR => IK, LKC => LK4
5387 : logical(LKC) , intent(in) , contiguous :: array(:)
5388 : procedure(logical(LK)) :: isSorted
5389 : integer(TKR) :: rank(size(array, kind = IK))
5390 : end function
5391 : #endif
5392 :
5393 : #if LK3_ENABLED
5394 : module function getRankModifiedCusCom_D1_LK3(array, isSorted) result(rank)
5395 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5396 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_LK3
5397 : #endif
5398 : use pm_kind, only: TKR => IK, LKC => LK3
5399 : logical(LKC) , intent(in) , contiguous :: array(:)
5400 : procedure(logical(LK)) :: isSorted
5401 : integer(TKR) :: rank(size(array, kind = IK))
5402 : end function
5403 : #endif
5404 :
5405 : #if LK2_ENABLED
5406 : module function getRankModifiedCusCom_D1_LK2(array, isSorted) result(rank)
5407 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5408 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_LK2
5409 : #endif
5410 : use pm_kind, only: TKR => IK, LKC => LK2
5411 : logical(LKC) , intent(in) , contiguous :: array(:)
5412 : procedure(logical(LK)) :: isSorted
5413 : integer(TKR) :: rank(size(array, kind = IK))
5414 : end function
5415 : #endif
5416 :
5417 : #if LK1_ENABLED
5418 : module function getRankModifiedCusCom_D1_LK1(array, isSorted) result(rank)
5419 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5420 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_LK1
5421 : #endif
5422 : use pm_kind, only: TKR => IK, LKC => LK1
5423 : logical(LKC) , intent(in) , contiguous :: array(:)
5424 : procedure(logical(LK)) :: isSorted
5425 : integer(TKR) :: rank(size(array, kind = IK))
5426 : end function
5427 : #endif
5428 :
5429 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5430 :
5431 : #if CK5_ENABLED
5432 : module function getRankModifiedCusCom_D1_CK5(array, isSorted) result(rank)
5433 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5434 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_CK5
5435 : #endif
5436 : use pm_kind, only: TKR => IK, CKC => CK5
5437 : complex(CKC) , intent(in) , contiguous :: array(:)
5438 : procedure(logical(LK)) :: isSorted
5439 : integer(TKR) :: rank(size(array, kind = IK))
5440 : end function
5441 : #endif
5442 :
5443 : #if CK4_ENABLED
5444 : module function getRankModifiedCusCom_D1_CK4(array, isSorted) result(rank)
5445 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5446 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_CK4
5447 : #endif
5448 : use pm_kind, only: TKR => IK, CKC => CK4
5449 : complex(CKC) , intent(in) , contiguous :: array(:)
5450 : procedure(logical(LK)) :: isSorted
5451 : integer(TKR) :: rank(size(array, kind = IK))
5452 : end function
5453 : #endif
5454 :
5455 : #if CK3_ENABLED
5456 : module function getRankModifiedCusCom_D1_CK3(array, isSorted) result(rank)
5457 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5458 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_CK3
5459 : #endif
5460 : use pm_kind, only: TKR => IK, CKC => CK3
5461 : complex(CKC) , intent(in) , contiguous :: array(:)
5462 : procedure(logical(LK)) :: isSorted
5463 : integer(TKR) :: rank(size(array, kind = IK))
5464 : end function
5465 : #endif
5466 :
5467 : #if CK2_ENABLED
5468 : module function getRankModifiedCusCom_D1_CK2(array, isSorted) result(rank)
5469 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5470 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_CK2
5471 : #endif
5472 : use pm_kind, only: TKR => IK, CKC => CK2
5473 : complex(CKC) , intent(in) , contiguous :: array(:)
5474 : procedure(logical(LK)) :: isSorted
5475 : integer(TKR) :: rank(size(array, kind = IK))
5476 : end function
5477 : #endif
5478 :
5479 : #if CK1_ENABLED
5480 : module function getRankModifiedCusCom_D1_CK1(array, isSorted) result(rank)
5481 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5482 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_CK1
5483 : #endif
5484 : use pm_kind, only: TKR => IK, CKC => CK1
5485 : complex(CKC) , intent(in) , contiguous :: array(:)
5486 : procedure(logical(LK)) :: isSorted
5487 : integer(TKR) :: rank(size(array, kind = IK))
5488 : end function
5489 : #endif
5490 :
5491 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5492 :
5493 : #if RK5_ENABLED
5494 : module function getRankModifiedCusCom_D1_RK5(array, isSorted) result(rank)
5495 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5496 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_RK5
5497 : #endif
5498 : use pm_kind, only: TKR => IK, RKC => RK5
5499 : real(RKC) , intent(in) , contiguous :: array(:)
5500 : procedure(logical(LK)) :: isSorted
5501 : integer(TKR) :: rank(size(array, kind = IK))
5502 : end function
5503 : #endif
5504 :
5505 : #if RK4_ENABLED
5506 : module function getRankModifiedCusCom_D1_RK4(array, isSorted) result(rank)
5507 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5508 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_RK4
5509 : #endif
5510 : use pm_kind, only: TKR => IK, RKC => RK4
5511 : real(RKC) , intent(in) , contiguous :: array(:)
5512 : procedure(logical(LK)) :: isSorted
5513 : integer(TKR) :: rank(size(array, kind = IK))
5514 : end function
5515 : #endif
5516 :
5517 : #if RK3_ENABLED
5518 : module function getRankModifiedCusCom_D1_RK3(array, isSorted) result(rank)
5519 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5520 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_RK3
5521 : #endif
5522 : use pm_kind, only: TKR => IK, RKC => RK3
5523 : real(RKC) , intent(in) , contiguous :: array(:)
5524 : procedure(logical(LK)) :: isSorted
5525 : integer(TKR) :: rank(size(array, kind = IK))
5526 : end function
5527 : #endif
5528 :
5529 : #if RK2_ENABLED
5530 : module function getRankModifiedCusCom_D1_RK2(array, isSorted) result(rank)
5531 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5532 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_RK2
5533 : #endif
5534 : use pm_kind, only: TKR => IK, RKC => RK2
5535 : real(RKC) , intent(in) , contiguous :: array(:)
5536 : procedure(logical(LK)) :: isSorted
5537 : integer(TKR) :: rank(size(array, kind = IK))
5538 : end function
5539 : #endif
5540 :
5541 : #if RK1_ENABLED
5542 : module function getRankModifiedCusCom_D1_RK1(array, isSorted) result(rank)
5543 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5544 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_RK1
5545 : #endif
5546 : use pm_kind, only: TKR => IK, RKC => RK1
5547 : real(RKC) , intent(in) , contiguous :: array(:)
5548 : procedure(logical(LK)) :: isSorted
5549 : integer(TKR) :: rank(size(array, kind = IK))
5550 : end function
5551 : #endif
5552 :
5553 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5554 :
5555 : #if SK5_ENABLED
5556 : module function getRankModifiedCusCom_D1_PSSK5(array, isSorted) result(rank)
5557 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5558 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_PSSK5
5559 : #endif
5560 : use pm_kind, only: TKR => IK, SKC => SK5
5561 : use pm_container, only: css_pdt
5562 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5563 : procedure(logical(LK)) :: isSorted
5564 : integer(TKR) :: rank(size(array, kind = IK))
5565 : end function
5566 : #endif
5567 :
5568 : #if SK4_ENABLED
5569 : module function getRankModifiedCusCom_D1_PSSK4(array, isSorted) result(rank)
5570 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5571 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_PSSK4
5572 : #endif
5573 : use pm_kind, only: TKR => IK, SKC => SK4
5574 : use pm_container, only: css_pdt
5575 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5576 : procedure(logical(LK)) :: isSorted
5577 : integer(TKR) :: rank(size(array, kind = IK))
5578 : end function
5579 : #endif
5580 :
5581 : #if SK3_ENABLED
5582 : module function getRankModifiedCusCom_D1_PSSK3(array, isSorted) result(rank)
5583 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5584 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_PSSK3
5585 : #endif
5586 : use pm_kind, only: TKR => IK, SKC => SK3
5587 : use pm_container, only: css_pdt
5588 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5589 : procedure(logical(LK)) :: isSorted
5590 : integer(TKR) :: rank(size(array, kind = IK))
5591 : end function
5592 : #endif
5593 :
5594 : #if SK2_ENABLED
5595 : module function getRankModifiedCusCom_D1_PSSK2(array, isSorted) result(rank)
5596 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5597 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_PSSK2
5598 : #endif
5599 : use pm_kind, only: TKR => IK, SKC => SK2
5600 : use pm_container, only: css_pdt
5601 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5602 : procedure(logical(LK)) :: isSorted
5603 : integer(TKR) :: rank(size(array, kind = IK))
5604 : end function
5605 : #endif
5606 :
5607 : #if SK1_ENABLED
5608 : module function getRankModifiedCusCom_D1_PSSK1(array, isSorted) result(rank)
5609 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5610 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_PSSK1
5611 : #endif
5612 : use pm_kind, only: TKR => IK, SKC => SK1
5613 : use pm_container, only: css_pdt
5614 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
5615 : integer(TKR) :: rank(size(array, kind = IK))
5616 : procedure(logical(LK)) :: isSorted
5617 : end function
5618 : #endif
5619 :
5620 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5621 :
5622 : module function getRankModifiedCusCom_D1_BSSK(array, isSorted) result(rank)
5623 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5624 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankModifiedCusCom_D1_BSSK
5625 : #endif
5626 : use pm_kind, only: TKR => IK, SKC => SK
5627 : use pm_container, only: css_type
5628 : type(css_type) , intent(in) , contiguous :: array(:)
5629 : procedure(logical(LK)) :: isSorted
5630 : integer(TKR) :: rank(size(array, kind = IK))
5631 : end function
5632 :
5633 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5634 :
5635 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5636 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5637 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5638 :
5639 : end interface
5640 :
5641 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5642 :
5643 : !> \brief
5644 : !> Return the **Modified rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
5645 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
5646 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
5647 : !>
5648 : !> \details
5649 : !> This kind of ranking of values is widely known as <b>Modified Competition (`1334`) ranking</b>.<br>
5650 : !> Sometimes, competition ranking is done by leaving the gaps in the ranking numbers before the sets of equal-ranking items
5651 : !> (rather than after them as in Standard Competition ranking).<br>
5652 : !> The number of ranking numbers that are left out in this gap remains one less than the number of items that compared equal.<br>
5653 : !> Equivalently, the ranking number of each item is equal to the number of items ranked equal to it or above it.<br>
5654 : !> This ranking ensures that a competitor only comes second if they score
5655 : !> higher than all but one of their opponents, third if they score higher than all but two of their opponents, etc.<br>
5656 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked head of *D*, then *A* gets ranking
5657 : !> number `1` (*first*), *B* gets ranking number `3` (*joint third*), *C* also gets ranking number `3` (*joint third*)
5658 : !> and *D* gets ranking number `4` (*fourth*). In this case, nobody would get ranking number `2` (*second*) (left as a gap).<br>
5659 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **Modified Competition ranking** `1334`.<br>
5660 : !>
5661 : !> \param[out] rank : The output `contiguous` array of rank `1` of type `integer` of default kind \IK
5662 : !> containing the ranks of the corresponding elements of `array`.<br>
5663 : !> The size of `rank` must match that of `array` (or its length type parameter if `array` is a scalar string).<br>
5664 : !> **Read `rank(i)` as the Modified rank of the `i`th element of `array`.**
5665 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
5666 : !> <ol>
5667 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
5668 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
5669 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
5670 : !> <li> type `integer` of kind \IKALL or,<br>
5671 : !> <li> type `logical` of kind \LKALL or,<br>
5672 : !> <li> type `complex` of kind \CKALL or,<br>
5673 : !> <li> type `real` of kind \RKALL,<br>
5674 : !> </ol>
5675 : !> or,
5676 : !> <ol>
5677 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
5678 : !> </ol>
5679 : !> whose elements rankings will be computed and returned.
5680 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type
5681 : !> and kind as the input `array`.<br>
5682 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
5683 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
5684 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
5685 : !> If `array` is a Fortran string (i.e., a scalar `character`),
5686 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
5687 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
5688 : !> \code{.F90}
5689 : !> function isSorted(a,b) result (sorted)
5690 : !> use pm_kind, only: SK, IK, LK, CK, RK
5691 : !> TYPE(KIND) , intent(in) :: a, b
5692 : !> logical(LK) :: sorted
5693 : !> end function
5694 : !> \endcode
5695 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
5696 : !> \code{.F90}
5697 : !> use pm_container, only: StrCon
5698 : !> use pm_kind, only: SK, IK, LK, CK, RK
5699 : !> character(*, SK), intent(in) :: a, b
5700 : !> integer(IK) , intent(in) :: a, b
5701 : !> logical(LK) , intent(in) :: a, b
5702 : !> complex(CK) , intent(in) :: a, b
5703 : !> real(RK) , intent(in) :: a, b
5704 : !> type(StrCon) , intent(in) :: a, b
5705 : !> \endcode
5706 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
5707 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
5708 : !> \code{.F90}
5709 : !> function isSorted(a,b) result (sorted)
5710 : !> character(1,SKC), intent(in) :: a, b
5711 : !> logical(LK) :: sorted
5712 : !> end function
5713 : !> \endcode
5714 : !> where `SKC` represents the kind of the input string argument `array`.<br>
5715 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
5716 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
5717 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
5718 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
5719 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
5720 : !>
5721 : !> \interface{setRankModified}
5722 : !> \code{.F90}
5723 : !>
5724 : !> use pm_arrayRank, only: setRankModified
5725 : !>
5726 : !> call setRankModified(rank, array)
5727 : !> call setRankModified(rank, array, isSorted)
5728 : !>
5729 : !> \endcode
5730 : !>
5731 : !> \warning
5732 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
5733 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
5734 : !> identify ties within the Modified ranking of the input `array`.
5735 : !>
5736 : !> \warnpure
5737 : !>
5738 : !> \warning
5739 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
5740 : !>
5741 : !> \see
5742 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
5743 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
5744 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
5745 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
5746 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
5747 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
5748 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
5749 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
5750 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
5751 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
5752 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
5753 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
5754 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
5755 : !>
5756 : !> \example{setRankModified}
5757 : !> \include{lineno} example/pm_arrayRank/setRankModified/main.F90
5758 : !> \compilef{setRankModified}
5759 : !> \output{setRankModified}
5760 : !> \include{lineno} example/pm_arrayRank/setRankModified/main.out.F90
5761 : !>
5762 : !> \test
5763 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
5764 : !>
5765 : !> \bug
5766 : !> \status \unresolved
5767 : !> \source \ifort{2021.5}
5768 : !> \desc
5769 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
5770 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
5771 : !> \remedy
5772 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
5773 : !>
5774 : !> \todo
5775 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
5776 : !>
5777 : !> \todo
5778 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
5779 : !>
5780 : !> \finmain{setRankModified}
5781 : !>
5782 : !> \author
5783 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
5784 : interface setRankModified
5785 :
5786 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5787 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5788 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5789 :
5790 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5791 :
5792 : #if SK5_ENABLED
5793 : PURE module subroutine setRankModifiedDefCom_D0_SK5(rank, array)
5794 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5795 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D0_SK5
5796 : #endif
5797 : use pm_kind, only: TKR => IK, SKC => SK5
5798 : character(*,SKC) , intent(in) :: array
5799 : integer(TKR) , intent(out) , contiguous :: rank(:)
5800 : end subroutine
5801 : #endif
5802 :
5803 : #if SK4_ENABLED
5804 : PURE module subroutine setRankModifiedDefCom_D0_SK4(rank, array)
5805 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5806 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D0_SK4
5807 : #endif
5808 : use pm_kind, only: TKR => IK, SKC => SK4
5809 : character(*,SKC) , intent(in) :: array
5810 : integer(TKR) , intent(out) , contiguous :: rank(:)
5811 : end subroutine
5812 : #endif
5813 :
5814 : #if SK3_ENABLED
5815 : PURE module subroutine setRankModifiedDefCom_D0_SK3(rank, array)
5816 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5817 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D0_SK3
5818 : #endif
5819 : use pm_kind, only: TKR => IK, SKC => SK3
5820 : character(*,SKC) , intent(in) :: array
5821 : integer(TKR) , intent(out) , contiguous :: rank(:)
5822 : end subroutine
5823 : #endif
5824 :
5825 : #if SK2_ENABLED
5826 : PURE module subroutine setRankModifiedDefCom_D0_SK2(rank, array)
5827 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5828 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D0_SK2
5829 : #endif
5830 : use pm_kind, only: TKR => IK, SKC => SK2
5831 : character(*,SKC) , intent(in) :: array
5832 : integer(TKR) , intent(out) , contiguous :: rank(:)
5833 : end subroutine
5834 : #endif
5835 :
5836 : #if SK1_ENABLED
5837 : PURE module subroutine setRankModifiedDefCom_D0_SK1(rank, array)
5838 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5839 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D0_SK1
5840 : #endif
5841 : use pm_kind, only: TKR => IK, SKC => SK1
5842 : character(*,SKC) , intent(in) :: array
5843 : integer(TKR) , intent(out) , contiguous :: rank(:)
5844 : end subroutine
5845 : #endif
5846 :
5847 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5848 :
5849 : #if SK5_ENABLED
5850 : PURE module subroutine setRankModifiedDefCom_D1_SK5(rank, array)
5851 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5852 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_SK5
5853 : #endif
5854 : use pm_kind, only: TKR => IK, SKC => SK5
5855 : character(*,SKC) , intent(in) , contiguous :: array(:)
5856 : integer(TKR) , intent(out) , contiguous :: rank(:)
5857 : end subroutine
5858 : #endif
5859 :
5860 : #if SK4_ENABLED
5861 : PURE module subroutine setRankModifiedDefCom_D1_SK4(rank, array)
5862 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5863 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_SK4
5864 : #endif
5865 : use pm_kind, only: TKR => IK, SKC => SK4
5866 : character(*,SKC) , intent(in) , contiguous :: array(:)
5867 : integer(TKR) , intent(out) , contiguous :: rank(:)
5868 : end subroutine
5869 : #endif
5870 :
5871 : #if SK3_ENABLED
5872 : PURE module subroutine setRankModifiedDefCom_D1_SK3(rank, array)
5873 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5874 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_SK3
5875 : #endif
5876 : use pm_kind, only: TKR => IK, SKC => SK3
5877 : character(*,SKC) , intent(in) , contiguous :: array(:)
5878 : integer(TKR) , intent(out) , contiguous :: rank(:)
5879 : end subroutine
5880 : #endif
5881 :
5882 : #if SK2_ENABLED
5883 : PURE module subroutine setRankModifiedDefCom_D1_SK2(rank, array)
5884 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5885 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_SK2
5886 : #endif
5887 : use pm_kind, only: TKR => IK, SKC => SK2
5888 : character(*,SKC) , intent(in) , contiguous :: array(:)
5889 : integer(TKR) , intent(out) , contiguous :: rank(:)
5890 : end subroutine
5891 : #endif
5892 :
5893 : #if SK1_ENABLED
5894 : PURE module subroutine setRankModifiedDefCom_D1_SK1(rank, array)
5895 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5896 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_SK1
5897 : #endif
5898 : use pm_kind, only: TKR => IK, SKC => SK1
5899 : character(*,SKC) , intent(in) , contiguous :: array(:)
5900 : integer(TKR) , intent(out) , contiguous :: rank(:)
5901 : end subroutine
5902 : #endif
5903 :
5904 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5905 :
5906 : #if IK5_ENABLED
5907 : PURE module subroutine setRankModifiedDefCom_D1_IK5(rank, array)
5908 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5909 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_IK5
5910 : #endif
5911 : use pm_kind, only: TKR => IK, IKC => IK5
5912 : integer(IKC) , intent(in) , contiguous :: array(:)
5913 : integer(TKR) , intent(out) , contiguous :: rank(:)
5914 : end subroutine
5915 : #endif
5916 :
5917 : #if IK4_ENABLED
5918 : PURE module subroutine setRankModifiedDefCom_D1_IK4(rank, array)
5919 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5920 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_IK4
5921 : #endif
5922 : use pm_kind, only: TKR => IK, IKC => IK4
5923 : integer(IKC) , intent(in) , contiguous :: array(:)
5924 : integer(TKR) , intent(out) , contiguous :: rank(:)
5925 : end subroutine
5926 : #endif
5927 :
5928 : #if IK3_ENABLED
5929 : PURE module subroutine setRankModifiedDefCom_D1_IK3(rank, array)
5930 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5931 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_IK3
5932 : #endif
5933 : use pm_kind, only: TKR => IK, IKC => IK3
5934 : integer(IKC) , intent(in) , contiguous :: array(:)
5935 : integer(TKR) , intent(out) , contiguous :: rank(:)
5936 : end subroutine
5937 : #endif
5938 :
5939 : #if IK2_ENABLED
5940 : PURE module subroutine setRankModifiedDefCom_D1_IK2(rank, array)
5941 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5942 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_IK2
5943 : #endif
5944 : use pm_kind, only: TKR => IK, IKC => IK2
5945 : integer(IKC) , intent(in) , contiguous :: array(:)
5946 : integer(TKR) , intent(out) , contiguous :: rank(:)
5947 : end subroutine
5948 : #endif
5949 :
5950 : #if IK1_ENABLED
5951 : PURE module subroutine setRankModifiedDefCom_D1_IK1(rank, array)
5952 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5953 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_IK1
5954 : #endif
5955 : use pm_kind, only: TKR => IK, IKC => IK1
5956 : integer(IKC) , intent(in) , contiguous :: array(:)
5957 : integer(TKR) , intent(out) , contiguous :: rank(:)
5958 : end subroutine
5959 : #endif
5960 :
5961 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5962 :
5963 : #if LK5_ENABLED
5964 : PURE module subroutine setRankModifiedDefCom_D1_LK5(rank, array)
5965 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5966 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_LK5
5967 : #endif
5968 : use pm_kind, only: TKR => IK, LKC => LK5
5969 : logical(LKC) , intent(in) , contiguous :: array(:)
5970 : integer(TKR) , intent(out) , contiguous :: rank(:)
5971 : end subroutine
5972 : #endif
5973 :
5974 : #if LK4_ENABLED
5975 : PURE module subroutine setRankModifiedDefCom_D1_LK4(rank, array)
5976 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5977 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_LK4
5978 : #endif
5979 : use pm_kind, only: TKR => IK, LKC => LK4
5980 : logical(LKC) , intent(in) , contiguous :: array(:)
5981 : integer(TKR) , intent(out) , contiguous :: rank(:)
5982 : end subroutine
5983 : #endif
5984 :
5985 : #if LK3_ENABLED
5986 : PURE module subroutine setRankModifiedDefCom_D1_LK3(rank, array)
5987 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5988 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_LK3
5989 : #endif
5990 : use pm_kind, only: TKR => IK, LKC => LK3
5991 : logical(LKC) , intent(in) , contiguous :: array(:)
5992 : integer(TKR) , intent(out) , contiguous :: rank(:)
5993 : end subroutine
5994 : #endif
5995 :
5996 : #if LK2_ENABLED
5997 : PURE module subroutine setRankModifiedDefCom_D1_LK2(rank, array)
5998 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
5999 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_LK2
6000 : #endif
6001 : use pm_kind, only: TKR => IK, LKC => LK2
6002 : logical(LKC) , intent(in) , contiguous :: array(:)
6003 : integer(TKR) , intent(out) , contiguous :: rank(:)
6004 : end subroutine
6005 : #endif
6006 :
6007 : #if LK1_ENABLED
6008 : PURE module subroutine setRankModifiedDefCom_D1_LK1(rank, array)
6009 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6010 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_LK1
6011 : #endif
6012 : use pm_kind, only: TKR => IK, LKC => LK1
6013 : logical(LKC) , intent(in) , contiguous :: array(:)
6014 : integer(TKR) , intent(out) , contiguous :: rank(:)
6015 : end subroutine
6016 : #endif
6017 :
6018 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6019 :
6020 : #if CK5_ENABLED
6021 : PURE module subroutine setRankModifiedDefCom_D1_CK5(rank, array)
6022 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6023 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_CK5
6024 : #endif
6025 : use pm_kind, only: TKR => IK, CKC => CK5
6026 : complex(CKC) , intent(in) , contiguous :: array(:)
6027 : integer(TKR) , intent(out) , contiguous :: rank(:)
6028 : end subroutine
6029 : #endif
6030 :
6031 : #if CK4_ENABLED
6032 : PURE module subroutine setRankModifiedDefCom_D1_CK4(rank, array)
6033 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6034 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_CK4
6035 : #endif
6036 : use pm_kind, only: TKR => IK, CKC => CK4
6037 : complex(CKC) , intent(in) , contiguous :: array(:)
6038 : integer(TKR) , intent(out) , contiguous :: rank(:)
6039 : end subroutine
6040 : #endif
6041 :
6042 : #if CK3_ENABLED
6043 : PURE module subroutine setRankModifiedDefCom_D1_CK3(rank, array)
6044 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6045 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_CK3
6046 : #endif
6047 : use pm_kind, only: TKR => IK, CKC => CK3
6048 : complex(CKC) , intent(in) , contiguous :: array(:)
6049 : integer(TKR) , intent(out) , contiguous :: rank(:)
6050 : end subroutine
6051 : #endif
6052 :
6053 : #if CK2_ENABLED
6054 : PURE module subroutine setRankModifiedDefCom_D1_CK2(rank, array)
6055 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6056 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_CK2
6057 : #endif
6058 : use pm_kind, only: TKR => IK, CKC => CK2
6059 : complex(CKC) , intent(in) , contiguous :: array(:)
6060 : integer(TKR) , intent(out) , contiguous :: rank(:)
6061 : end subroutine
6062 : #endif
6063 :
6064 : #if CK1_ENABLED
6065 : PURE module subroutine setRankModifiedDefCom_D1_CK1(rank, array)
6066 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6067 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_CK1
6068 : #endif
6069 : use pm_kind, only: TKR => IK, CKC => CK1
6070 : complex(CKC) , intent(in) , contiguous :: array(:)
6071 : integer(TKR) , intent(out) , contiguous :: rank(:)
6072 : end subroutine
6073 : #endif
6074 :
6075 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6076 :
6077 : #if RK5_ENABLED
6078 : PURE module subroutine setRankModifiedDefCom_D1_RK5(rank, array)
6079 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6080 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_RK5
6081 : #endif
6082 : use pm_kind, only: TKR => IK, RKC => RK5
6083 : real(RKC) , intent(in) , contiguous :: array(:)
6084 : integer(TKR) , intent(out) , contiguous :: rank(:)
6085 : end subroutine
6086 : #endif
6087 :
6088 : #if RK4_ENABLED
6089 : PURE module subroutine setRankModifiedDefCom_D1_RK4(rank, array)
6090 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6091 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_RK4
6092 : #endif
6093 : use pm_kind, only: TKR => IK, RKC => RK4
6094 : real(RKC) , intent(in) , contiguous :: array(:)
6095 : integer(TKR) , intent(out) , contiguous :: rank(:)
6096 : end subroutine
6097 : #endif
6098 :
6099 : #if RK3_ENABLED
6100 : PURE module subroutine setRankModifiedDefCom_D1_RK3(rank, array)
6101 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6102 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_RK3
6103 : #endif
6104 : use pm_kind, only: TKR => IK, RKC => RK3
6105 : real(RKC) , intent(in) , contiguous :: array(:)
6106 : integer(TKR) , intent(out) , contiguous :: rank(:)
6107 : end subroutine
6108 : #endif
6109 :
6110 : #if RK2_ENABLED
6111 : PURE module subroutine setRankModifiedDefCom_D1_RK2(rank, array)
6112 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6113 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_RK2
6114 : #endif
6115 : use pm_kind, only: TKR => IK, RKC => RK2
6116 : real(RKC) , intent(in) , contiguous :: array(:)
6117 : integer(TKR) , intent(out) , contiguous :: rank(:)
6118 : end subroutine
6119 : #endif
6120 :
6121 : #if RK1_ENABLED
6122 : PURE module subroutine setRankModifiedDefCom_D1_RK1(rank, array)
6123 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6124 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_RK1
6125 : #endif
6126 : use pm_kind, only: TKR => IK, RKC => RK1
6127 : real(RKC) , intent(in) , contiguous :: array(:)
6128 : integer(TKR) , intent(out) , contiguous :: rank(:)
6129 : end subroutine
6130 : #endif
6131 :
6132 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6133 :
6134 : #if SK5_ENABLED
6135 : PURE module subroutine setRankModifiedDefCom_D1_PSSK5(rank, array)
6136 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6137 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_PSSK5
6138 : #endif
6139 : use pm_kind, only: TKR => IK, SKC => SK5
6140 : use pm_container, only: css_pdt
6141 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6142 : integer(TKR) , intent(out) , contiguous :: rank(:)
6143 : end subroutine
6144 : #endif
6145 :
6146 : #if SK4_ENABLED
6147 : PURE module subroutine setRankModifiedDefCom_D1_PSSK4(rank, array)
6148 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6149 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_PSSK4
6150 : #endif
6151 : use pm_kind, only: TKR => IK, SKC => SK4
6152 : use pm_container, only: css_pdt
6153 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6154 : integer(TKR) , intent(out) , contiguous :: rank(:)
6155 : end subroutine
6156 : #endif
6157 :
6158 : #if SK3_ENABLED
6159 : PURE module subroutine setRankModifiedDefCom_D1_PSSK3(rank, array)
6160 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6161 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_PSSK3
6162 : #endif
6163 : use pm_kind, only: TKR => IK, SKC => SK3
6164 : use pm_container, only: css_pdt
6165 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6166 : integer(TKR) , intent(out) , contiguous :: rank(:)
6167 : end subroutine
6168 : #endif
6169 :
6170 : #if SK2_ENABLED
6171 : PURE module subroutine setRankModifiedDefCom_D1_PSSK2(rank, array)
6172 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6173 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_PSSK2
6174 : #endif
6175 : use pm_kind, only: TKR => IK, SKC => SK2
6176 : use pm_container, only: css_pdt
6177 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6178 : integer(TKR) , intent(out) , contiguous :: rank(:)
6179 : end subroutine
6180 : #endif
6181 :
6182 : #if SK1_ENABLED
6183 : PURE module subroutine setRankModifiedDefCom_D1_PSSK1(rank, array)
6184 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6185 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_PSSK1
6186 : #endif
6187 : use pm_kind, only: TKR => IK, SKC => SK1
6188 : use pm_container, only: css_pdt
6189 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6190 : integer(TKR) , intent(out) , contiguous :: rank(:)
6191 : end subroutine
6192 : #endif
6193 :
6194 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6195 :
6196 : PURE module subroutine setRankModifiedDefCom_D1_BSSK(rank, array)
6197 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6198 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedDefCom_D1_BSSK
6199 : #endif
6200 : use pm_kind, only: TKR => IK, SKC => SK
6201 : use pm_container, only: css_type
6202 : type(css_type) , intent(in) , contiguous :: array(:)
6203 : integer(TKR) , intent(out) , contiguous :: rank(:)
6204 : end subroutine
6205 :
6206 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6207 :
6208 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6209 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6210 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6211 :
6212 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6213 :
6214 : #if SK5_ENABLED
6215 : module subroutine setRankModifiedCusCom_D0_SK5(rank, array, isSorted)
6216 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6217 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D0_SK5
6218 : #endif
6219 : use pm_kind, only: TKR => IK, SKC => SK5
6220 : character(*,SKC) , intent(in) :: array
6221 : integer(TKR) , intent(out) , contiguous :: rank(:)
6222 : procedure(logical(LK)) :: isSorted
6223 : end subroutine
6224 : #endif
6225 :
6226 : #if SK4_ENABLED
6227 : module subroutine setRankModifiedCusCom_D0_SK4(rank, array, isSorted)
6228 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6229 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D0_SK4
6230 : #endif
6231 : use pm_kind, only: TKR => IK, SKC => SK4
6232 : character(*,SKC) , intent(in) :: array
6233 : integer(TKR) , intent(out) , contiguous :: rank(:)
6234 : procedure(logical(LK)) :: isSorted
6235 : end subroutine
6236 : #endif
6237 :
6238 : #if SK3_ENABLED
6239 : module subroutine setRankModifiedCusCom_D0_SK3(rank, array, isSorted)
6240 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6241 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D0_SK3
6242 : #endif
6243 : use pm_kind, only: TKR => IK, SKC => SK3
6244 : character(*,SKC) , intent(in) :: array
6245 : integer(TKR) , intent(out) , contiguous :: rank(:)
6246 : procedure(logical(LK)) :: isSorted
6247 : end subroutine
6248 : #endif
6249 :
6250 : #if SK2_ENABLED
6251 : module subroutine setRankModifiedCusCom_D0_SK2(rank, array, isSorted)
6252 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6253 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D0_SK2
6254 : #endif
6255 : use pm_kind, only: TKR => IK, SKC => SK2
6256 : character(*,SKC) , intent(in) :: array
6257 : integer(TKR) , intent(out) , contiguous :: rank(:)
6258 : procedure(logical(LK)) :: isSorted
6259 : end subroutine
6260 : #endif
6261 :
6262 : #if SK1_ENABLED
6263 : module subroutine setRankModifiedCusCom_D0_SK1(rank, array, isSorted)
6264 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6265 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D0_SK1
6266 : #endif
6267 : use pm_kind, only: TKR => IK, SKC => SK1
6268 : character(*,SKC) , intent(in) :: array
6269 : integer(TKR) , intent(out) , contiguous :: rank(:)
6270 : procedure(logical(LK)) :: isSorted
6271 : end subroutine
6272 : #endif
6273 :
6274 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6275 :
6276 : #if SK5_ENABLED
6277 : module subroutine setRankModifiedCusCom_D1_SK5(rank, array, isSorted)
6278 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6279 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_SK5
6280 : #endif
6281 : use pm_kind, only: TKR => IK, SKC => SK5
6282 : character(*,SKC) , intent(in) , contiguous :: array(:)
6283 : integer(TKR) , intent(out) , contiguous :: rank(:)
6284 : procedure(logical(LK)) :: isSorted
6285 : end subroutine
6286 : #endif
6287 :
6288 : #if SK4_ENABLED
6289 : module subroutine setRankModifiedCusCom_D1_SK4(rank, array, isSorted)
6290 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6291 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_SK4
6292 : #endif
6293 : use pm_kind, only: TKR => IK, SKC => SK4
6294 : character(*,SKC) , intent(in) , contiguous :: array(:)
6295 : integer(TKR) , intent(out) , contiguous :: rank(:)
6296 : procedure(logical(LK)) :: isSorted
6297 : end subroutine
6298 : #endif
6299 :
6300 : #if SK3_ENABLED
6301 : module subroutine setRankModifiedCusCom_D1_SK3(rank, array, isSorted)
6302 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6303 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_SK3
6304 : #endif
6305 : use pm_kind, only: TKR => IK, SKC => SK3
6306 : character(*,SKC) , intent(in) , contiguous :: array(:)
6307 : integer(TKR) , intent(out) , contiguous :: rank(:)
6308 : procedure(logical(LK)) :: isSorted
6309 : end subroutine
6310 : #endif
6311 :
6312 : #if SK2_ENABLED
6313 : module subroutine setRankModifiedCusCom_D1_SK2(rank, array, isSorted)
6314 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6315 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_SK2
6316 : #endif
6317 : use pm_kind, only: TKR => IK, SKC => SK2
6318 : character(*,SKC) , intent(in) , contiguous :: array(:)
6319 : integer(TKR) , intent(out) , contiguous :: rank(:)
6320 : procedure(logical(LK)) :: isSorted
6321 : end subroutine
6322 : #endif
6323 :
6324 : #if SK1_ENABLED
6325 : module subroutine setRankModifiedCusCom_D1_SK1(rank, array, isSorted)
6326 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6327 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_SK1
6328 : #endif
6329 : use pm_kind, only: TKR => IK, SKC => SK1
6330 : character(*,SKC) , intent(in) , contiguous :: array(:)
6331 : integer(TKR) , intent(out) , contiguous :: rank(:)
6332 : procedure(logical(LK)) :: isSorted
6333 : end subroutine
6334 : #endif
6335 :
6336 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6337 :
6338 : #if IK5_ENABLED
6339 : module subroutine setRankModifiedCusCom_D1_IK5(rank, array, isSorted)
6340 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6341 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_IK5
6342 : #endif
6343 : use pm_kind, only: TKR => IK, IKC => IK5
6344 : integer(IKC) , intent(in) , contiguous :: array(:)
6345 : integer(TKR) , intent(out) , contiguous :: rank(:)
6346 : procedure(logical(LK)) :: isSorted
6347 : end subroutine
6348 : #endif
6349 :
6350 : #if IK4_ENABLED
6351 : module subroutine setRankModifiedCusCom_D1_IK4(rank, array, isSorted)
6352 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6353 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_IK4
6354 : #endif
6355 : use pm_kind, only: TKR => IK, IKC => IK4
6356 : integer(IKC) , intent(in) , contiguous :: array(:)
6357 : integer(TKR) , intent(out) , contiguous :: rank(:)
6358 : procedure(logical(LK)) :: isSorted
6359 : end subroutine
6360 : #endif
6361 :
6362 : #if IK3_ENABLED
6363 : module subroutine setRankModifiedCusCom_D1_IK3(rank, array, isSorted)
6364 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6365 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_IK3
6366 : #endif
6367 : use pm_kind, only: TKR => IK, IKC => IK3
6368 : integer(IKC) , intent(in) , contiguous :: array(:)
6369 : integer(TKR) , intent(out) , contiguous :: rank(:)
6370 : procedure(logical(LK)) :: isSorted
6371 : end subroutine
6372 : #endif
6373 :
6374 : #if IK2_ENABLED
6375 : module subroutine setRankModifiedCusCom_D1_IK2(rank, array, isSorted)
6376 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6377 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_IK2
6378 : #endif
6379 : use pm_kind, only: TKR => IK, IKC => IK2
6380 : integer(IKC) , intent(in) , contiguous :: array(:)
6381 : integer(TKR) , intent(out) , contiguous :: rank(:)
6382 : procedure(logical(LK)) :: isSorted
6383 : end subroutine
6384 : #endif
6385 :
6386 : #if IK1_ENABLED
6387 : module subroutine setRankModifiedCusCom_D1_IK1(rank, array, isSorted)
6388 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6389 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_IK1
6390 : #endif
6391 : use pm_kind, only: TKR => IK, IKC => IK1
6392 : integer(IKC) , intent(in) , contiguous :: array(:)
6393 : integer(TKR) , intent(out) , contiguous :: rank(:)
6394 : procedure(logical(LK)) :: isSorted
6395 : end subroutine
6396 : #endif
6397 :
6398 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6399 :
6400 : #if LK5_ENABLED
6401 : module subroutine setRankModifiedCusCom_D1_LK5(rank, array, isSorted)
6402 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6403 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_LK5
6404 : #endif
6405 : use pm_kind, only: TKR => IK, LKC => LK5
6406 : logical(LKC) , intent(in) , contiguous :: array(:)
6407 : integer(TKR) , intent(out) , contiguous :: rank(:)
6408 : procedure(logical(LK)) :: isSorted
6409 : end subroutine
6410 : #endif
6411 :
6412 : #if LK4_ENABLED
6413 : module subroutine setRankModifiedCusCom_D1_LK4(rank, array, isSorted)
6414 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6415 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_LK4
6416 : #endif
6417 : use pm_kind, only: TKR => IK, LKC => LK4
6418 : logical(LKC) , intent(in) , contiguous :: array(:)
6419 : integer(TKR) , intent(out) , contiguous :: rank(:)
6420 : procedure(logical(LK)) :: isSorted
6421 : end subroutine
6422 : #endif
6423 :
6424 : #if LK3_ENABLED
6425 : module subroutine setRankModifiedCusCom_D1_LK3(rank, array, isSorted)
6426 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6427 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_LK3
6428 : #endif
6429 : use pm_kind, only: TKR => IK, LKC => LK3
6430 : logical(LKC) , intent(in) , contiguous :: array(:)
6431 : integer(TKR) , intent(out) , contiguous :: rank(:)
6432 : procedure(logical(LK)) :: isSorted
6433 : end subroutine
6434 : #endif
6435 :
6436 : #if LK2_ENABLED
6437 : module subroutine setRankModifiedCusCom_D1_LK2(rank, array, isSorted)
6438 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6439 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_LK2
6440 : #endif
6441 : use pm_kind, only: TKR => IK, LKC => LK2
6442 : logical(LKC) , intent(in) , contiguous :: array(:)
6443 : integer(TKR) , intent(out) , contiguous :: rank(:)
6444 : procedure(logical(LK)) :: isSorted
6445 : end subroutine
6446 : #endif
6447 :
6448 : #if LK1_ENABLED
6449 : module subroutine setRankModifiedCusCom_D1_LK1(rank, array, isSorted)
6450 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6451 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_LK1
6452 : #endif
6453 : use pm_kind, only: TKR => IK, LKC => LK1
6454 : logical(LKC) , intent(in) , contiguous :: array(:)
6455 : integer(TKR) , intent(out) , contiguous :: rank(:)
6456 : procedure(logical(LK)) :: isSorted
6457 : end subroutine
6458 : #endif
6459 :
6460 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6461 :
6462 : #if CK5_ENABLED
6463 : module subroutine setRankModifiedCusCom_D1_CK5(rank, array, isSorted)
6464 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6465 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_CK5
6466 : #endif
6467 : use pm_kind, only: TKR => IK, CKC => CK5
6468 : complex(CKC) , intent(in) , contiguous :: array(:)
6469 : integer(TKR) , intent(out) , contiguous :: rank(:)
6470 : procedure(logical(LK)) :: isSorted
6471 : end subroutine
6472 : #endif
6473 :
6474 : #if CK4_ENABLED
6475 : module subroutine setRankModifiedCusCom_D1_CK4(rank, array, isSorted)
6476 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6477 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_CK4
6478 : #endif
6479 : use pm_kind, only: TKR => IK, CKC => CK4
6480 : complex(CKC) , intent(in) , contiguous :: array(:)
6481 : integer(TKR) , intent(out) , contiguous :: rank(:)
6482 : procedure(logical(LK)) :: isSorted
6483 : end subroutine
6484 : #endif
6485 :
6486 : #if CK3_ENABLED
6487 : module subroutine setRankModifiedCusCom_D1_CK3(rank, array, isSorted)
6488 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6489 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_CK3
6490 : #endif
6491 : use pm_kind, only: TKR => IK, CKC => CK3
6492 : complex(CKC) , intent(in) , contiguous :: array(:)
6493 : integer(TKR) , intent(out) , contiguous :: rank(:)
6494 : procedure(logical(LK)) :: isSorted
6495 : end subroutine
6496 : #endif
6497 :
6498 : #if CK2_ENABLED
6499 : module subroutine setRankModifiedCusCom_D1_CK2(rank, array, isSorted)
6500 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6501 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_CK2
6502 : #endif
6503 : use pm_kind, only: TKR => IK, CKC => CK2
6504 : complex(CKC) , intent(in) , contiguous :: array(:)
6505 : integer(TKR) , intent(out) , contiguous :: rank(:)
6506 : procedure(logical(LK)) :: isSorted
6507 : end subroutine
6508 : #endif
6509 :
6510 : #if CK1_ENABLED
6511 : module subroutine setRankModifiedCusCom_D1_CK1(rank, array, isSorted)
6512 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6513 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_CK1
6514 : #endif
6515 : use pm_kind, only: TKR => IK, CKC => CK1
6516 : complex(CKC) , intent(in) , contiguous :: array(:)
6517 : integer(TKR) , intent(out) , contiguous :: rank(:)
6518 : procedure(logical(LK)) :: isSorted
6519 : end subroutine
6520 : #endif
6521 :
6522 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6523 :
6524 : #if RK5_ENABLED
6525 : module subroutine setRankModifiedCusCom_D1_RK5(rank, array, isSorted)
6526 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6527 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_RK5
6528 : #endif
6529 : use pm_kind, only: TKR => IK, RKC => RK5
6530 : real(RKC) , intent(in) , contiguous :: array(:)
6531 : integer(TKR) , intent(out) , contiguous :: rank(:)
6532 : procedure(logical(LK)) :: isSorted
6533 : end subroutine
6534 : #endif
6535 :
6536 : #if RK4_ENABLED
6537 : module subroutine setRankModifiedCusCom_D1_RK4(rank, array, isSorted)
6538 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6539 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_RK4
6540 : #endif
6541 : use pm_kind, only: TKR => IK, RKC => RK4
6542 : real(RKC) , intent(in) , contiguous :: array(:)
6543 : integer(TKR) , intent(out) , contiguous :: rank(:)
6544 : procedure(logical(LK)) :: isSorted
6545 : end subroutine
6546 : #endif
6547 :
6548 : #if RK3_ENABLED
6549 : module subroutine setRankModifiedCusCom_D1_RK3(rank, array, isSorted)
6550 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6551 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_RK3
6552 : #endif
6553 : use pm_kind, only: TKR => IK, RKC => RK3
6554 : real(RKC) , intent(in) , contiguous :: array(:)
6555 : integer(TKR) , intent(out) , contiguous :: rank(:)
6556 : procedure(logical(LK)) :: isSorted
6557 : end subroutine
6558 : #endif
6559 :
6560 : #if RK2_ENABLED
6561 : module subroutine setRankModifiedCusCom_D1_RK2(rank, array, isSorted)
6562 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6563 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_RK2
6564 : #endif
6565 : use pm_kind, only: TKR => IK, RKC => RK2
6566 : real(RKC) , intent(in) , contiguous :: array(:)
6567 : integer(TKR) , intent(out) , contiguous :: rank(:)
6568 : procedure(logical(LK)) :: isSorted
6569 : end subroutine
6570 : #endif
6571 :
6572 : #if RK1_ENABLED
6573 : module subroutine setRankModifiedCusCom_D1_RK1(rank, array, isSorted)
6574 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6575 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_RK1
6576 : #endif
6577 : use pm_kind, only: TKR => IK, RKC => RK1
6578 : real(RKC) , intent(in) , contiguous :: array(:)
6579 : integer(TKR) , intent(out) , contiguous :: rank(:)
6580 : procedure(logical(LK)) :: isSorted
6581 : end subroutine
6582 : #endif
6583 :
6584 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6585 :
6586 : #if SK5_ENABLED
6587 : module subroutine setRankModifiedCusCom_D1_PSSK5(rank, array, isSorted)
6588 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6589 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_PSSK5
6590 : #endif
6591 : use pm_kind, only: TKR => IK, SKC => SK5
6592 : use pm_container, only: css_pdt
6593 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6594 : integer(TKR) , intent(out) , contiguous :: rank(:)
6595 : procedure(logical(LK)) :: isSorted
6596 : end subroutine
6597 : #endif
6598 :
6599 : #if SK4_ENABLED
6600 : module subroutine setRankModifiedCusCom_D1_PSSK4(rank, array, isSorted)
6601 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6602 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_PSSK4
6603 : #endif
6604 : use pm_kind, only: TKR => IK, SKC => SK4
6605 : use pm_container, only: css_pdt
6606 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6607 : integer(TKR) , intent(out) , contiguous :: rank(:)
6608 : procedure(logical(LK)) :: isSorted
6609 : end subroutine
6610 : #endif
6611 :
6612 : #if SK3_ENABLED
6613 : module subroutine setRankModifiedCusCom_D1_PSSK3(rank, array, isSorted)
6614 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6615 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_PSSK3
6616 : #endif
6617 : use pm_kind, only: TKR => IK, SKC => SK3
6618 : use pm_container, only: css_pdt
6619 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6620 : integer(TKR) , intent(out) , contiguous :: rank(:)
6621 : procedure(logical(LK)) :: isSorted
6622 : end subroutine
6623 : #endif
6624 :
6625 : #if SK2_ENABLED
6626 : module subroutine setRankModifiedCusCom_D1_PSSK2(rank, array, isSorted)
6627 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6628 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_PSSK2
6629 : #endif
6630 : use pm_kind, only: TKR => IK, SKC => SK2
6631 : use pm_container, only: css_pdt
6632 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6633 : integer(TKR) , intent(out) , contiguous :: rank(:)
6634 : procedure(logical(LK)) :: isSorted
6635 : end subroutine
6636 : #endif
6637 :
6638 : #if SK1_ENABLED
6639 : module subroutine setRankModifiedCusCom_D1_PSSK1(rank, array, isSorted)
6640 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6641 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_PSSK1
6642 : #endif
6643 : use pm_kind, only: TKR => IK, SKC => SK1
6644 : use pm_container, only: css_pdt
6645 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
6646 : integer(TKR) , intent(out) , contiguous :: rank(:)
6647 : procedure(logical(LK)) :: isSorted
6648 : end subroutine
6649 : #endif
6650 :
6651 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6652 :
6653 : module subroutine setRankModifiedCusCom_D1_BSSK(rank, array, isSorted)
6654 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6655 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankModifiedCusCom_D1_BSSK
6656 : #endif
6657 : use pm_kind, only: TKR => IK, SKC => SK
6658 : use pm_container, only: css_type
6659 : type(css_type) , intent(in) , contiguous :: array(:)
6660 : integer(TKR) , intent(out) , contiguous :: rank(:)
6661 : procedure(logical(LK)) :: isSorted
6662 : end subroutine
6663 :
6664 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6665 :
6666 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6667 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6668 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6669 :
6670 : end interface
6671 :
6672 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6673 :
6674 : !> \brief
6675 : !> Generate and return the **ordinal rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
6676 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
6677 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
6678 : !>
6679 : !> \details
6680 : !> This kind of ranking of values is widely known as <b>ordinal (`1234`) ranking</b>.<br>
6681 : !> In ordinal ranking, all items receive distinct ordinal numbers, including items that compare equal.<br>
6682 : !> The assignment of distinct ordinal numbers to items that compare equal can be done at random, or arbitrarily,
6683 : !> but it is generally preferable to use a system that is arbitrary but consistent,
6684 : !> as this gives stable results if the ranking is done multiple times.<br>
6685 : !> In computer data processing, ordinal ranking is also referred to as **row numbering**.
6686 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **ordinal ranking** `1234`.<br>
6687 : !>
6688 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
6689 : !> <ol>
6690 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
6691 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
6692 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
6693 : !> <li> type `integer` of kind \IKALL or,<br>
6694 : !> <li> type `logical` of kind \LKALL or,<br>
6695 : !> <li> type `complex` of kind \CKALL or,<br>
6696 : !> <li> type `real` of kind \RKALL,<br>
6697 : !> </ol>
6698 : !> or,
6699 : !> <ol>
6700 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
6701 : !> </ol>
6702 : !> whose elements rankings will be computed and returned.
6703 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type and kind as the input `array`.<br>
6704 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
6705 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
6706 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
6707 : !> If `array` is a Fortran string (i.e., a scalar `character`),
6708 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
6709 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
6710 : !> \code{.F90}
6711 : !> function isSorted(a,b) result (sorted)
6712 : !> use pm_kind, only: SK, IK, LK, CK, RK
6713 : !> TYPE(KIND) , intent(in) :: a, b
6714 : !> logical(LK) :: sorted
6715 : !> end function
6716 : !> \endcode
6717 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
6718 : !> \code{.F90}
6719 : !> use pm_container, only: StrCon
6720 : !> use pm_kind, only: SK, IK, LK, CK, RK
6721 : !> character(*, SK), intent(in) :: a, b
6722 : !> integer(IK) , intent(in) :: a, b
6723 : !> logical(LK) , intent(in) :: a, b
6724 : !> complex(CK) , intent(in) :: a, b
6725 : !> real(RK) , intent(in) :: a, b
6726 : !> type(StrCon) , intent(in) :: a, b
6727 : !> \endcode
6728 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
6729 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
6730 : !> \code{.F90}
6731 : !> function isSorted(a,b) result (sorted)
6732 : !> character(1,SKC), intent(in) :: a, b
6733 : !> logical(LK) :: sorted
6734 : !> end function
6735 : !> \endcode
6736 : !> where `SKC` represents the kind of the input string argument `array`.<br>
6737 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
6738 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
6739 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
6740 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
6741 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
6742 : !>
6743 : !> \return
6744 : !> `rank(1:size(array)` : The output `contiguous` array of rank `1` of type `integer` of default kind \IK containing the ranks of the corresponding elements of `array`.<br>
6745 : !> The size of `rank` matches that of `array` (or its length type parameter if `array` is a scalar string).<br>
6746 : !> **Read `rank(i)` as the ordinal rank of the `i`th element of `array`.**
6747 : !>
6748 : !> \interface{getRankOrdinal}
6749 : !> \code{.F90}
6750 : !>
6751 : !> use pm_arrayRank, only: getRankOrdinal
6752 : !>
6753 : !> rank(1:size(array)) = getRankOrdinal(array)
6754 : !> rank(1:size(array)) = getRankOrdinal(array, isSorted)
6755 : !>
6756 : !> \endcode
6757 : !>
6758 : !> \warning
6759 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
6760 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
6761 : !> identify ties within the Standard ranking of the input `array`.
6762 : !>
6763 : !> \warnpure
6764 : !>
6765 : !> \warning
6766 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
6767 : !>
6768 : !> \see
6769 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
6770 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
6771 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
6772 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
6773 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
6774 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
6775 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
6776 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
6777 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
6778 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
6779 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
6780 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
6781 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
6782 : !>
6783 : !> \example{getRankOrdinal}
6784 : !> \include{lineno} example/pm_arrayRank/getRankOrdinal/main.F90
6785 : !> \compilef{getRankOrdinal}
6786 : !> \output{getRankOrdinal}
6787 : !> \include{lineno} example/pm_arrayRank/getRankOrdinal/main.out.F90
6788 : !>
6789 : !> \test
6790 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
6791 : !>
6792 : !> \bug
6793 : !> \status \unresolved
6794 : !> \source \ifort{2021.5}
6795 : !> \desc
6796 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
6797 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
6798 : !> \remedy
6799 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
6800 : !>
6801 : !> \todo
6802 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
6803 : !>
6804 : !> \todo
6805 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
6806 : !>
6807 : !> \finmain{getRankOrdinal}
6808 : !>
6809 : !> \author
6810 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
6811 : interface getRankOrdinal
6812 :
6813 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6814 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6815 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6816 :
6817 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6818 :
6819 : #if SK5_ENABLED
6820 : module function getRankOrdinalDefCom_D0_SK5(array) result(rank)
6821 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6822 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D0_SK5
6823 : #endif
6824 : use pm_kind, only: TKR => IK, SKC => SK5
6825 : character(*,SKC) , intent(in) :: array
6826 : integer(TKR) :: rank(len(array, IK))
6827 : end function
6828 : #endif
6829 :
6830 : #if SK4_ENABLED
6831 : module function getRankOrdinalDefCom_D0_SK4(array) result(rank)
6832 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6833 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D0_SK4
6834 : #endif
6835 : use pm_kind, only: TKR => IK, SKC => SK4
6836 : character(*,SKC) , intent(in) :: array
6837 : integer(TKR) :: rank(len(array, IK))
6838 : end function
6839 : #endif
6840 :
6841 : #if SK3_ENABLED
6842 : module function getRankOrdinalDefCom_D0_SK3(array) result(rank)
6843 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6844 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D0_SK3
6845 : #endif
6846 : use pm_kind, only: TKR => IK, SKC => SK3
6847 : character(*,SKC) , intent(in) :: array
6848 : integer(TKR) :: rank(len(array, IK))
6849 : end function
6850 : #endif
6851 :
6852 : #if SK2_ENABLED
6853 : module function getRankOrdinalDefCom_D0_SK2(array) result(rank)
6854 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6855 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D0_SK2
6856 : #endif
6857 : use pm_kind, only: TKR => IK, SKC => SK2
6858 : character(*,SKC) , intent(in) :: array
6859 : integer(TKR) :: rank(len(array, IK))
6860 : end function
6861 : #endif
6862 :
6863 : #if SK1_ENABLED
6864 : module function getRankOrdinalDefCom_D0_SK1(array) result(rank)
6865 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6866 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D0_SK1
6867 : #endif
6868 : use pm_kind, only: TKR => IK, SKC => SK1
6869 : character(*,SKC) , intent(in) :: array
6870 : integer(TKR) :: rank(len(array, IK))
6871 : end function
6872 : #endif
6873 :
6874 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6875 :
6876 : #if SK5_ENABLED
6877 : module function getRankOrdinalDefCom_D1_SK5(array) result(rank)
6878 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6879 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_SK5
6880 : #endif
6881 : use pm_kind, only: TKR => IK, SKC => SK5
6882 : character(*,SKC) , intent(in) , contiguous :: array(:)
6883 : integer(TKR) :: rank(size(array, kind = IK))
6884 : end function
6885 : #endif
6886 :
6887 : #if SK4_ENABLED
6888 : module function getRankOrdinalDefCom_D1_SK4(array) result(rank)
6889 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6890 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_SK4
6891 : #endif
6892 : use pm_kind, only: TKR => IK, SKC => SK4
6893 : character(*,SKC) , intent(in) , contiguous :: array(:)
6894 : integer(TKR) :: rank(size(array, kind = IK))
6895 : end function
6896 : #endif
6897 :
6898 : #if SK3_ENABLED
6899 : module function getRankOrdinalDefCom_D1_SK3(array) result(rank)
6900 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6901 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_SK3
6902 : #endif
6903 : use pm_kind, only: TKR => IK, SKC => SK3
6904 : character(*,SKC) , intent(in) , contiguous :: array(:)
6905 : integer(TKR) :: rank(size(array, kind = IK))
6906 : end function
6907 : #endif
6908 :
6909 : #if SK2_ENABLED
6910 : module function getRankOrdinalDefCom_D1_SK2(array) result(rank)
6911 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6912 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_SK2
6913 : #endif
6914 : use pm_kind, only: TKR => IK, SKC => SK2
6915 : character(*,SKC) , intent(in) , contiguous :: array(:)
6916 : integer(TKR) :: rank(size(array, kind = IK))
6917 : end function
6918 : #endif
6919 :
6920 : #if SK1_ENABLED
6921 : module function getRankOrdinalDefCom_D1_SK1(array) result(rank)
6922 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6923 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_SK1
6924 : #endif
6925 : use pm_kind, only: TKR => IK, SKC => SK1
6926 : character(*,SKC) , intent(in) , contiguous :: array(:)
6927 : integer(TKR) :: rank(size(array, kind = IK))
6928 : end function
6929 : #endif
6930 :
6931 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6932 :
6933 : #if IK5_ENABLED
6934 : module function getRankOrdinalDefCom_D1_IK5(array) result(rank)
6935 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6936 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_IK5
6937 : #endif
6938 : use pm_kind, only: TKR => IK, IKC => IK5
6939 : integer(IKC) , intent(in) , contiguous :: array(:)
6940 : integer(TKR) :: rank(size(array, kind = IK))
6941 : end function
6942 : #endif
6943 :
6944 : #if IK4_ENABLED
6945 : module function getRankOrdinalDefCom_D1_IK4(array) result(rank)
6946 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6947 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_IK4
6948 : #endif
6949 : use pm_kind, only: TKR => IK, IKC => IK4
6950 : integer(IKC) , intent(in) , contiguous :: array(:)
6951 : integer(TKR) :: rank(size(array, kind = IK))
6952 : end function
6953 : #endif
6954 :
6955 : #if IK3_ENABLED
6956 : module function getRankOrdinalDefCom_D1_IK3(array) result(rank)
6957 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6958 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_IK3
6959 : #endif
6960 : use pm_kind, only: TKR => IK, IKC => IK3
6961 : integer(IKC) , intent(in) , contiguous :: array(:)
6962 : integer(TKR) :: rank(size(array, kind = IK))
6963 : end function
6964 : #endif
6965 :
6966 : #if IK2_ENABLED
6967 : module function getRankOrdinalDefCom_D1_IK2(array) result(rank)
6968 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6969 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_IK2
6970 : #endif
6971 : use pm_kind, only: TKR => IK, IKC => IK2
6972 : integer(IKC) , intent(in) , contiguous :: array(:)
6973 : integer(TKR) :: rank(size(array, kind = IK))
6974 : end function
6975 : #endif
6976 :
6977 : #if IK1_ENABLED
6978 : module function getRankOrdinalDefCom_D1_IK1(array) result(rank)
6979 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6980 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_IK1
6981 : #endif
6982 : use pm_kind, only: TKR => IK, IKC => IK1
6983 : integer(IKC) , intent(in) , contiguous :: array(:)
6984 : integer(TKR) :: rank(size(array, kind = IK))
6985 : end function
6986 : #endif
6987 :
6988 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6989 :
6990 : #if LK5_ENABLED
6991 : module function getRankOrdinalDefCom_D1_LK5(array) result(rank)
6992 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
6993 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_LK5
6994 : #endif
6995 : use pm_kind, only: TKR => IK, LKC => LK5
6996 : logical(LKC) , intent(in) , contiguous :: array(:)
6997 : integer(TKR) :: rank(size(array, kind = IK))
6998 : end function
6999 : #endif
7000 :
7001 : #if LK4_ENABLED
7002 : module function getRankOrdinalDefCom_D1_LK4(array) result(rank)
7003 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7004 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_LK4
7005 : #endif
7006 : use pm_kind, only: TKR => IK, LKC => LK4
7007 : logical(LKC) , intent(in) , contiguous :: array(:)
7008 : integer(TKR) :: rank(size(array, kind = IK))
7009 : end function
7010 : #endif
7011 :
7012 : #if LK3_ENABLED
7013 : module function getRankOrdinalDefCom_D1_LK3(array) result(rank)
7014 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7015 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_LK3
7016 : #endif
7017 : use pm_kind, only: TKR => IK, LKC => LK3
7018 : logical(LKC) , intent(in) , contiguous :: array(:)
7019 : integer(TKR) :: rank(size(array, kind = IK))
7020 : end function
7021 : #endif
7022 :
7023 : #if LK2_ENABLED
7024 : module function getRankOrdinalDefCom_D1_LK2(array) result(rank)
7025 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7026 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_LK2
7027 : #endif
7028 : use pm_kind, only: TKR => IK, LKC => LK2
7029 : logical(LKC) , intent(in) , contiguous :: array(:)
7030 : integer(TKR) :: rank(size(array, kind = IK))
7031 : end function
7032 : #endif
7033 :
7034 : #if LK1_ENABLED
7035 : module function getRankOrdinalDefCom_D1_LK1(array) result(rank)
7036 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7037 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_LK1
7038 : #endif
7039 : use pm_kind, only: TKR => IK, LKC => LK1
7040 : logical(LKC) , intent(in) , contiguous :: array(:)
7041 : integer(TKR) :: rank(size(array, kind = IK))
7042 : end function
7043 : #endif
7044 :
7045 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7046 :
7047 : #if CK5_ENABLED
7048 : module function getRankOrdinalDefCom_D1_CK5(array) result(rank)
7049 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7050 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_CK5
7051 : #endif
7052 : use pm_kind, only: TKR => IK, CKC => CK5
7053 : complex(CKC) , intent(in) , contiguous :: array(:)
7054 : integer(TKR) :: rank(size(array, kind = IK))
7055 : end function
7056 : #endif
7057 :
7058 : #if CK4_ENABLED
7059 : module function getRankOrdinalDefCom_D1_CK4(array) result(rank)
7060 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7061 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_CK4
7062 : #endif
7063 : use pm_kind, only: TKR => IK, CKC => CK4
7064 : complex(CKC) , intent(in) , contiguous :: array(:)
7065 : integer(TKR) :: rank(size(array, kind = IK))
7066 : end function
7067 : #endif
7068 :
7069 : #if CK3_ENABLED
7070 : module function getRankOrdinalDefCom_D1_CK3(array) result(rank)
7071 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7072 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_CK3
7073 : #endif
7074 : use pm_kind, only: TKR => IK, CKC => CK3
7075 : complex(CKC) , intent(in) , contiguous :: array(:)
7076 : integer(TKR) :: rank(size(array, kind = IK))
7077 : end function
7078 : #endif
7079 :
7080 : #if CK2_ENABLED
7081 : module function getRankOrdinalDefCom_D1_CK2(array) result(rank)
7082 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7083 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_CK2
7084 : #endif
7085 : use pm_kind, only: TKR => IK, CKC => CK2
7086 : complex(CKC) , intent(in) , contiguous :: array(:)
7087 : integer(TKR) :: rank(size(array, kind = IK))
7088 : end function
7089 : #endif
7090 :
7091 : #if CK1_ENABLED
7092 : module function getRankOrdinalDefCom_D1_CK1(array) result(rank)
7093 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7094 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_CK1
7095 : #endif
7096 : use pm_kind, only: TKR => IK, CKC => CK1
7097 : complex(CKC) , intent(in) , contiguous :: array(:)
7098 : integer(TKR) :: rank(size(array, kind = IK))
7099 : end function
7100 : #endif
7101 :
7102 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7103 :
7104 : #if RK5_ENABLED
7105 : module function getRankOrdinalDefCom_D1_RK5(array) result(rank)
7106 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7107 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_RK5
7108 : #endif
7109 : use pm_kind, only: TKR => IK, RKC => RK5
7110 : real(RKC) , intent(in) , contiguous :: array(:)
7111 : integer(TKR) :: rank(size(array, kind = IK))
7112 : end function
7113 : #endif
7114 :
7115 : #if RK4_ENABLED
7116 : module function getRankOrdinalDefCom_D1_RK4(array) result(rank)
7117 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7118 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_RK4
7119 : #endif
7120 : use pm_kind, only: TKR => IK, RKC => RK4
7121 : real(RKC) , intent(in) , contiguous :: array(:)
7122 : integer(TKR) :: rank(size(array, kind = IK))
7123 : end function
7124 : #endif
7125 :
7126 : #if RK3_ENABLED
7127 : module function getRankOrdinalDefCom_D1_RK3(array) result(rank)
7128 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7129 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_RK3
7130 : #endif
7131 : use pm_kind, only: TKR => IK, RKC => RK3
7132 : real(RKC) , intent(in) , contiguous :: array(:)
7133 : integer(TKR) :: rank(size(array, kind = IK))
7134 : end function
7135 : #endif
7136 :
7137 : #if RK2_ENABLED
7138 : module function getRankOrdinalDefCom_D1_RK2(array) result(rank)
7139 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7140 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_RK2
7141 : #endif
7142 : use pm_kind, only: TKR => IK, RKC => RK2
7143 : real(RKC) , intent(in) , contiguous :: array(:)
7144 : integer(TKR) :: rank(size(array, kind = IK))
7145 : end function
7146 : #endif
7147 :
7148 : #if RK1_ENABLED
7149 : module function getRankOrdinalDefCom_D1_RK1(array) result(rank)
7150 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7151 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_RK1
7152 : #endif
7153 : use pm_kind, only: TKR => IK, RKC => RK1
7154 : real(RKC) , intent(in) , contiguous :: array(:)
7155 : integer(TKR) :: rank(size(array, kind = IK))
7156 : end function
7157 : #endif
7158 :
7159 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7160 :
7161 : #if SK5_ENABLED
7162 : module function getRankOrdinalDefCom_D1_PSSK5(array) result(rank)
7163 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7164 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_PSSK5
7165 : #endif
7166 : use pm_kind, only: TKR => IK, SKC => SK5
7167 : use pm_container, only: css_pdt
7168 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7169 : integer(TKR) :: rank(size(array, kind = IK))
7170 : end function
7171 : #endif
7172 :
7173 : #if SK4_ENABLED
7174 : module function getRankOrdinalDefCom_D1_PSSK4(array) result(rank)
7175 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7176 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_PSSK4
7177 : #endif
7178 : use pm_kind, only: TKR => IK, SKC => SK4
7179 : use pm_container, only: css_pdt
7180 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7181 : integer(TKR) :: rank(size(array, kind = IK))
7182 : end function
7183 : #endif
7184 :
7185 : #if SK3_ENABLED
7186 : module function getRankOrdinalDefCom_D1_PSSK3(array) result(rank)
7187 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7188 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_PSSK3
7189 : #endif
7190 : use pm_kind, only: TKR => IK, SKC => SK3
7191 : use pm_container, only: css_pdt
7192 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7193 : integer(TKR) :: rank(size(array, kind = IK))
7194 : end function
7195 : #endif
7196 :
7197 : #if SK2_ENABLED
7198 : module function getRankOrdinalDefCom_D1_PSSK2(array) result(rank)
7199 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7200 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_PSSK2
7201 : #endif
7202 : use pm_kind, only: TKR => IK, SKC => SK2
7203 : use pm_container, only: css_pdt
7204 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7205 : integer(TKR) :: rank(size(array, kind = IK))
7206 : end function
7207 : #endif
7208 :
7209 : #if SK1_ENABLED
7210 : module function getRankOrdinalDefCom_D1_PSSK1(array) result(rank)
7211 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7212 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_PSSK1
7213 : #endif
7214 : use pm_kind, only: TKR => IK, SKC => SK1
7215 : use pm_container, only: css_pdt
7216 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7217 : integer(TKR) :: rank(size(array, kind = IK))
7218 : end function
7219 : #endif
7220 :
7221 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7222 :
7223 : module function getRankOrdinalDefCom_D1_BSSK(array) result(rank)
7224 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7225 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalDefCom_D1_BSSK
7226 : #endif
7227 : use pm_kind, only: TKR => IK, SKC => SK
7228 : use pm_container, only: css_type
7229 : type(css_type) , intent(in) , contiguous :: array(:)
7230 : integer(TKR) :: rank(size(array, kind = IK))
7231 : end function
7232 :
7233 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7234 :
7235 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7236 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7237 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7238 :
7239 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7240 :
7241 : #if SK5_ENABLED
7242 : module function getRankOrdinalCusCom_D0_SK5(array, isSorted) result(rank)
7243 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7244 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D0_SK5
7245 : #endif
7246 : use pm_kind, only: TKR => IK, SKC => SK5
7247 : character(*,SKC) , intent(in) :: array
7248 : procedure(logical(LK)) :: isSorted
7249 : integer(TKR) :: rank(len(array, IK))
7250 : end function
7251 : #endif
7252 :
7253 : #if SK4_ENABLED
7254 : module function getRankOrdinalCusCom_D0_SK4(array, isSorted) result(rank)
7255 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7256 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D0_SK4
7257 : #endif
7258 : use pm_kind, only: TKR => IK, SKC => SK4
7259 : character(*,SKC) , intent(in) :: array
7260 : procedure(logical(LK)) :: isSorted
7261 : integer(TKR) :: rank(len(array, IK))
7262 : end function
7263 : #endif
7264 :
7265 : #if SK3_ENABLED
7266 : module function getRankOrdinalCusCom_D0_SK3(array, isSorted) result(rank)
7267 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7268 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D0_SK3
7269 : #endif
7270 : use pm_kind, only: TKR => IK, SKC => SK3
7271 : character(*,SKC) , intent(in) :: array
7272 : procedure(logical(LK)) :: isSorted
7273 : integer(TKR) :: rank(len(array, IK))
7274 : end function
7275 : #endif
7276 :
7277 : #if SK2_ENABLED
7278 : module function getRankOrdinalCusCom_D0_SK2(array, isSorted) result(rank)
7279 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7280 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D0_SK2
7281 : #endif
7282 : use pm_kind, only: TKR => IK, SKC => SK2
7283 : character(*,SKC) , intent(in) :: array
7284 : procedure(logical(LK)) :: isSorted
7285 : integer(TKR) :: rank(len(array, IK))
7286 : end function
7287 : #endif
7288 :
7289 : #if SK1_ENABLED
7290 : module function getRankOrdinalCusCom_D0_SK1(array, isSorted) result(rank)
7291 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7292 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D0_SK1
7293 : #endif
7294 : use pm_kind, only: TKR => IK, SKC => SK1
7295 : character(*,SKC) , intent(in) :: array
7296 : procedure(logical(LK)) :: isSorted
7297 : integer(TKR) :: rank(len(array, IK))
7298 : end function
7299 : #endif
7300 :
7301 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7302 :
7303 : #if SK5_ENABLED
7304 : module function getRankOrdinalCusCom_D1_SK5(array, isSorted) result(rank)
7305 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7306 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_SK5
7307 : #endif
7308 : use pm_kind, only: TKR => IK, SKC => SK5
7309 : character(*,SKC) , intent(in) , contiguous :: array(:)
7310 : procedure(logical(LK)) :: isSorted
7311 : integer(TKR) :: rank(size(array, kind = IK))
7312 : end function
7313 : #endif
7314 :
7315 : #if SK4_ENABLED
7316 : module function getRankOrdinalCusCom_D1_SK4(array, isSorted) result(rank)
7317 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7318 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_SK4
7319 : #endif
7320 : use pm_kind, only: TKR => IK, SKC => SK4
7321 : character(*,SKC) , intent(in) , contiguous :: array(:)
7322 : procedure(logical(LK)) :: isSorted
7323 : integer(TKR) :: rank(size(array, kind = IK))
7324 : end function
7325 : #endif
7326 :
7327 : #if SK3_ENABLED
7328 : module function getRankOrdinalCusCom_D1_SK3(array, isSorted) result(rank)
7329 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7330 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_SK3
7331 : #endif
7332 : use pm_kind, only: TKR => IK, SKC => SK3
7333 : character(*,SKC) , intent(in) , contiguous :: array(:)
7334 : procedure(logical(LK)) :: isSorted
7335 : integer(TKR) :: rank(size(array, kind = IK))
7336 : end function
7337 : #endif
7338 :
7339 : #if SK2_ENABLED
7340 : module function getRankOrdinalCusCom_D1_SK2(array, isSorted) result(rank)
7341 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7342 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_SK2
7343 : #endif
7344 : use pm_kind, only: TKR => IK, SKC => SK2
7345 : character(*,SKC) , intent(in) , contiguous :: array(:)
7346 : procedure(logical(LK)) :: isSorted
7347 : integer(TKR) :: rank(size(array, kind = IK))
7348 : end function
7349 : #endif
7350 :
7351 : #if SK1_ENABLED
7352 : module function getRankOrdinalCusCom_D1_SK1(array, isSorted) result(rank)
7353 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7354 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_SK1
7355 : #endif
7356 : use pm_kind, only: TKR => IK, SKC => SK1
7357 : character(*,SKC) , intent(in) , contiguous :: array(:)
7358 : procedure(logical(LK)) :: isSorted
7359 : integer(TKR) :: rank(size(array, kind = IK))
7360 : end function
7361 : #endif
7362 :
7363 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7364 :
7365 : #if IK5_ENABLED
7366 : module function getRankOrdinalCusCom_D1_IK5(array, isSorted) result(rank)
7367 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7368 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_IK5
7369 : #endif
7370 : use pm_kind, only: TKR => IK, IKC => IK5
7371 : integer(IKC) , intent(in) , contiguous :: array(:)
7372 : procedure(logical(LK)) :: isSorted
7373 : integer(TKR) :: rank(size(array, kind = IK))
7374 : end function
7375 : #endif
7376 :
7377 : #if IK4_ENABLED
7378 : module function getRankOrdinalCusCom_D1_IK4(array, isSorted) result(rank)
7379 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7380 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_IK4
7381 : #endif
7382 : use pm_kind, only: TKR => IK, IKC => IK4
7383 : integer(IKC) , intent(in) , contiguous :: array(:)
7384 : procedure(logical(LK)) :: isSorted
7385 : integer(TKR) :: rank(size(array, kind = IK))
7386 : end function
7387 : #endif
7388 :
7389 : #if IK3_ENABLED
7390 : module function getRankOrdinalCusCom_D1_IK3(array, isSorted) result(rank)
7391 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7392 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_IK3
7393 : #endif
7394 : use pm_kind, only: TKR => IK, IKC => IK3
7395 : integer(IKC) , intent(in) , contiguous :: array(:)
7396 : procedure(logical(LK)) :: isSorted
7397 : integer(TKR) :: rank(size(array, kind = IK))
7398 : end function
7399 : #endif
7400 :
7401 : #if IK2_ENABLED
7402 : module function getRankOrdinalCusCom_D1_IK2(array, isSorted) result(rank)
7403 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7404 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_IK2
7405 : #endif
7406 : use pm_kind, only: TKR => IK, IKC => IK2
7407 : integer(IKC) , intent(in) , contiguous :: array(:)
7408 : procedure(logical(LK)) :: isSorted
7409 : integer(TKR) :: rank(size(array, kind = IK))
7410 : end function
7411 : #endif
7412 :
7413 : #if IK1_ENABLED
7414 : module function getRankOrdinalCusCom_D1_IK1(array, isSorted) result(rank)
7415 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7416 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_IK1
7417 : #endif
7418 : use pm_kind, only: TKR => IK, IKC => IK1
7419 : integer(IKC) , intent(in) , contiguous :: array(:)
7420 : procedure(logical(LK)) :: isSorted
7421 : integer(TKR) :: rank(size(array, kind = IK))
7422 : end function
7423 : #endif
7424 :
7425 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7426 :
7427 : #if LK5_ENABLED
7428 : module function getRankOrdinalCusCom_D1_LK5(array, isSorted) result(rank)
7429 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7430 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_LK5
7431 : #endif
7432 : use pm_kind, only: TKR => IK, LKC => LK5
7433 : logical(LKC) , intent(in) , contiguous :: array(:)
7434 : procedure(logical(LK)) :: isSorted
7435 : integer(TKR) :: rank(size(array, kind = IK))
7436 : end function
7437 : #endif
7438 :
7439 : #if LK4_ENABLED
7440 : module function getRankOrdinalCusCom_D1_LK4(array, isSorted) result(rank)
7441 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7442 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_LK4
7443 : #endif
7444 : use pm_kind, only: TKR => IK, LKC => LK4
7445 : logical(LKC) , intent(in) , contiguous :: array(:)
7446 : procedure(logical(LK)) :: isSorted
7447 : integer(TKR) :: rank(size(array, kind = IK))
7448 : end function
7449 : #endif
7450 :
7451 : #if LK3_ENABLED
7452 : module function getRankOrdinalCusCom_D1_LK3(array, isSorted) result(rank)
7453 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7454 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_LK3
7455 : #endif
7456 : use pm_kind, only: TKR => IK, LKC => LK3
7457 : logical(LKC) , intent(in) , contiguous :: array(:)
7458 : procedure(logical(LK)) :: isSorted
7459 : integer(TKR) :: rank(size(array, kind = IK))
7460 : end function
7461 : #endif
7462 :
7463 : #if LK2_ENABLED
7464 : module function getRankOrdinalCusCom_D1_LK2(array, isSorted) result(rank)
7465 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7466 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_LK2
7467 : #endif
7468 : use pm_kind, only: TKR => IK, LKC => LK2
7469 : logical(LKC) , intent(in) , contiguous :: array(:)
7470 : procedure(logical(LK)) :: isSorted
7471 : integer(TKR) :: rank(size(array, kind = IK))
7472 : end function
7473 : #endif
7474 :
7475 : #if LK1_ENABLED
7476 : module function getRankOrdinalCusCom_D1_LK1(array, isSorted) result(rank)
7477 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7478 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_LK1
7479 : #endif
7480 : use pm_kind, only: TKR => IK, LKC => LK1
7481 : logical(LKC) , intent(in) , contiguous :: array(:)
7482 : procedure(logical(LK)) :: isSorted
7483 : integer(TKR) :: rank(size(array, kind = IK))
7484 : end function
7485 : #endif
7486 :
7487 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7488 :
7489 : #if CK5_ENABLED
7490 : module function getRankOrdinalCusCom_D1_CK5(array, isSorted) result(rank)
7491 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7492 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_CK5
7493 : #endif
7494 : use pm_kind, only: TKR => IK, CKC => CK5
7495 : complex(CKC) , intent(in) , contiguous :: array(:)
7496 : procedure(logical(LK)) :: isSorted
7497 : integer(TKR) :: rank(size(array, kind = IK))
7498 : end function
7499 : #endif
7500 :
7501 : #if CK4_ENABLED
7502 : module function getRankOrdinalCusCom_D1_CK4(array, isSorted) result(rank)
7503 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7504 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_CK4
7505 : #endif
7506 : use pm_kind, only: TKR => IK, CKC => CK4
7507 : complex(CKC) , intent(in) , contiguous :: array(:)
7508 : procedure(logical(LK)) :: isSorted
7509 : integer(TKR) :: rank(size(array, kind = IK))
7510 : end function
7511 : #endif
7512 :
7513 : #if CK3_ENABLED
7514 : module function getRankOrdinalCusCom_D1_CK3(array, isSorted) result(rank)
7515 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7516 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_CK3
7517 : #endif
7518 : use pm_kind, only: TKR => IK, CKC => CK3
7519 : complex(CKC) , intent(in) , contiguous :: array(:)
7520 : procedure(logical(LK)) :: isSorted
7521 : integer(TKR) :: rank(size(array, kind = IK))
7522 : end function
7523 : #endif
7524 :
7525 : #if CK2_ENABLED
7526 : module function getRankOrdinalCusCom_D1_CK2(array, isSorted) result(rank)
7527 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7528 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_CK2
7529 : #endif
7530 : use pm_kind, only: TKR => IK, CKC => CK2
7531 : complex(CKC) , intent(in) , contiguous :: array(:)
7532 : procedure(logical(LK)) :: isSorted
7533 : integer(TKR) :: rank(size(array, kind = IK))
7534 : end function
7535 : #endif
7536 :
7537 : #if CK1_ENABLED
7538 : module function getRankOrdinalCusCom_D1_CK1(array, isSorted) result(rank)
7539 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7540 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_CK1
7541 : #endif
7542 : use pm_kind, only: TKR => IK, CKC => CK1
7543 : complex(CKC) , intent(in) , contiguous :: array(:)
7544 : procedure(logical(LK)) :: isSorted
7545 : integer(TKR) :: rank(size(array, kind = IK))
7546 : end function
7547 : #endif
7548 :
7549 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7550 :
7551 : #if RK5_ENABLED
7552 : module function getRankOrdinalCusCom_D1_RK5(array, isSorted) result(rank)
7553 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7554 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_RK5
7555 : #endif
7556 : use pm_kind, only: TKR => IK, RKC => RK5
7557 : real(RKC) , intent(in) , contiguous :: array(:)
7558 : procedure(logical(LK)) :: isSorted
7559 : integer(TKR) :: rank(size(array, kind = IK))
7560 : end function
7561 : #endif
7562 :
7563 : #if RK4_ENABLED
7564 : module function getRankOrdinalCusCom_D1_RK4(array, isSorted) result(rank)
7565 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7566 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_RK4
7567 : #endif
7568 : use pm_kind, only: TKR => IK, RKC => RK4
7569 : real(RKC) , intent(in) , contiguous :: array(:)
7570 : procedure(logical(LK)) :: isSorted
7571 : integer(TKR) :: rank(size(array, kind = IK))
7572 : end function
7573 : #endif
7574 :
7575 : #if RK3_ENABLED
7576 : module function getRankOrdinalCusCom_D1_RK3(array, isSorted) result(rank)
7577 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7578 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_RK3
7579 : #endif
7580 : use pm_kind, only: TKR => IK, RKC => RK3
7581 : real(RKC) , intent(in) , contiguous :: array(:)
7582 : procedure(logical(LK)) :: isSorted
7583 : integer(TKR) :: rank(size(array, kind = IK))
7584 : end function
7585 : #endif
7586 :
7587 : #if RK2_ENABLED
7588 : module function getRankOrdinalCusCom_D1_RK2(array, isSorted) result(rank)
7589 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7590 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_RK2
7591 : #endif
7592 : use pm_kind, only: TKR => IK, RKC => RK2
7593 : real(RKC) , intent(in) , contiguous :: array(:)
7594 : procedure(logical(LK)) :: isSorted
7595 : integer(TKR) :: rank(size(array, kind = IK))
7596 : end function
7597 : #endif
7598 :
7599 : #if RK1_ENABLED
7600 : module function getRankOrdinalCusCom_D1_RK1(array, isSorted) result(rank)
7601 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7602 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_RK1
7603 : #endif
7604 : use pm_kind, only: TKR => IK, RKC => RK1
7605 : real(RKC) , intent(in) , contiguous :: array(:)
7606 : procedure(logical(LK)) :: isSorted
7607 : integer(TKR) :: rank(size(array, kind = IK))
7608 : end function
7609 : #endif
7610 :
7611 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7612 :
7613 : #if SK5_ENABLED
7614 : module function getRankOrdinalCusCom_D1_PSSK5(array, isSorted) result(rank)
7615 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7616 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_PSSK5
7617 : #endif
7618 : use pm_kind, only: TKR => IK, SKC => SK5
7619 : use pm_container, only: css_pdt
7620 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7621 : procedure(logical(LK)) :: isSorted
7622 : integer(TKR) :: rank(size(array, kind = IK))
7623 : end function
7624 : #endif
7625 :
7626 : #if SK4_ENABLED
7627 : module function getRankOrdinalCusCom_D1_PSSK4(array, isSorted) result(rank)
7628 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7629 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_PSSK4
7630 : #endif
7631 : use pm_kind, only: TKR => IK, SKC => SK4
7632 : use pm_container, only: css_pdt
7633 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7634 : procedure(logical(LK)) :: isSorted
7635 : integer(TKR) :: rank(size(array, kind = IK))
7636 : end function
7637 : #endif
7638 :
7639 : #if SK3_ENABLED
7640 : module function getRankOrdinalCusCom_D1_PSSK3(array, isSorted) result(rank)
7641 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7642 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_PSSK3
7643 : #endif
7644 : use pm_kind, only: TKR => IK, SKC => SK3
7645 : use pm_container, only: css_pdt
7646 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7647 : procedure(logical(LK)) :: isSorted
7648 : integer(TKR) :: rank(size(array, kind = IK))
7649 : end function
7650 : #endif
7651 :
7652 : #if SK2_ENABLED
7653 : module function getRankOrdinalCusCom_D1_PSSK2(array, isSorted) result(rank)
7654 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7655 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_PSSK2
7656 : #endif
7657 : use pm_kind, only: TKR => IK, SKC => SK2
7658 : use pm_container, only: css_pdt
7659 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7660 : procedure(logical(LK)) :: isSorted
7661 : integer(TKR) :: rank(size(array, kind = IK))
7662 : end function
7663 : #endif
7664 :
7665 : #if SK1_ENABLED
7666 : module function getRankOrdinalCusCom_D1_PSSK1(array, isSorted) result(rank)
7667 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7668 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_PSSK1
7669 : #endif
7670 : use pm_kind, only: TKR => IK, SKC => SK1
7671 : use pm_container, only: css_pdt
7672 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
7673 : integer(TKR) :: rank(size(array, kind = IK))
7674 : procedure(logical(LK)) :: isSorted
7675 : end function
7676 : #endif
7677 :
7678 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7679 :
7680 : module function getRankOrdinalCusCom_D1_BSSK(array, isSorted) result(rank)
7681 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7682 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankOrdinalCusCom_D1_BSSK
7683 : #endif
7684 : use pm_kind, only: TKR => IK, SKC => SK
7685 : use pm_container, only: css_type
7686 : type(css_type) , intent(in) , contiguous :: array(:)
7687 : procedure(logical(LK)) :: isSorted
7688 : integer(TKR) :: rank(size(array, kind = IK))
7689 : end function
7690 :
7691 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7692 :
7693 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7694 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7695 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7696 :
7697 : end interface
7698 :
7699 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7700 :
7701 : !> \brief
7702 : !> Return the **ordinal rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
7703 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
7704 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
7705 : !>
7706 : !> \details
7707 : !> This kind of ranking of values is widely known as <b>ordinal (`1234`) ranking</b>.<br>
7708 : !> In ordinal ranking, all items receive distinct ordinal numbers, including items that compare equal.<br>
7709 : !> The assignment of distinct ordinal numbers to items that compare equal can be done at random, or arbitrarily,
7710 : !> but it is generally preferable to use a system that is arbitrary but consistent,
7711 : !> as this gives stable results if the ranking is done multiple times.<br>
7712 : !> In computer data processing, ordinal ranking is also referred to as **row numbering**.
7713 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **ordinal ranking** `1234`.<br>
7714 : !>
7715 : !> \param[out] rank : The output `contiguous` array of rank `1` of type `integer` of default kind \IK
7716 : !> containing the ranks of the corresponding elements of `array`.<br>
7717 : !> The size of `rank` must match that of `array` (or its length type parameter if `array` is a scalar string).<br>
7718 : !> **Read `rank(i)` as the ordinal rank of the `i`th element of `array`.**
7719 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
7720 : !> <ol>
7721 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
7722 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
7723 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
7724 : !> <li> type `integer` of kind \IKALL or,<br>
7725 : !> <li> type `logical` of kind \LKALL or,<br>
7726 : !> <li> type `complex` of kind \CKALL or,<br>
7727 : !> <li> type `real` of kind \RKALL,<br>
7728 : !> </ol>
7729 : !> or,
7730 : !> <ol>
7731 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
7732 : !> </ol>
7733 : !> whose elements rankings will be computed and returned.
7734 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type and kind as the input `array`.<br>
7735 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
7736 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
7737 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
7738 : !> If `array` is a Fortran string (i.e., a scalar `character`),
7739 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
7740 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
7741 : !> \code{.F90}
7742 : !> function isSorted(a,b) result (sorted)
7743 : !> use pm_kind, only: SK, IK, LK, CK, RK
7744 : !> TYPE(KIND) , intent(in) :: a, b
7745 : !> logical(LK) :: sorted
7746 : !> end function
7747 : !> \endcode
7748 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
7749 : !> \code{.F90}
7750 : !> use pm_container, only: StrCon
7751 : !> use pm_kind, only: SK, IK, LK, CK, RK
7752 : !> character(*, SK), intent(in) :: a, b
7753 : !> integer(IK) , intent(in) :: a, b
7754 : !> logical(LK) , intent(in) :: a, b
7755 : !> complex(CK) , intent(in) :: a, b
7756 : !> real(RK) , intent(in) :: a, b
7757 : !> type(StrCon) , intent(in) :: a, b
7758 : !> \endcode
7759 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
7760 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
7761 : !> \code{.F90}
7762 : !> function isSorted(a,b) result (sorted)
7763 : !> character(1,SKC), intent(in) :: a, b
7764 : !> logical(LK) :: sorted
7765 : !> end function
7766 : !> \endcode
7767 : !> where `SKC` represents the kind of the input string argument `array`.<br>
7768 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
7769 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
7770 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
7771 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
7772 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
7773 : !>
7774 : !> \interface{setRankOrdinal}
7775 : !> \code{.F90}
7776 : !>
7777 : !> use pm_arrayRank, only: setRankOrdinal
7778 : !>
7779 : !> call setRankOrdinal(rank, array)
7780 : !> call setRankOrdinal(rank, array, isSorted)
7781 : !>
7782 : !> \endcode
7783 : !>
7784 : !> \warning
7785 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
7786 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
7787 : !> identify ties within the Standard ranking of the input `array`.
7788 : !>
7789 : !> \warnpure
7790 : !>
7791 : !> \warning
7792 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
7793 : !>
7794 : !> \see
7795 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
7796 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
7797 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
7798 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
7799 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
7800 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
7801 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
7802 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
7803 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
7804 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
7805 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
7806 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
7807 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
7808 : !>
7809 : !> \example{setRankOrdinal}
7810 : !> \include{lineno} example/pm_arrayRank/setRankOrdinal/main.F90
7811 : !> \compilef{setRankOrdinal}
7812 : !> \output{setRankOrdinal}
7813 : !> \include{lineno} example/pm_arrayRank/setRankOrdinal/main.out.F90
7814 : !>
7815 : !> \test
7816 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
7817 : !>
7818 : !> \bug
7819 : !> \status \unresolved
7820 : !> \source \ifort{2021.5}
7821 : !> \desc
7822 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
7823 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
7824 : !> \remedy
7825 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
7826 : !>
7827 : !> \todo
7828 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
7829 : !>
7830 : !> \todo
7831 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
7832 : !>
7833 : !> \finmain{setRankOrdinal}
7834 : !>
7835 : !> \author
7836 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
7837 : interface setRankOrdinal
7838 :
7839 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7840 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7841 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7842 :
7843 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7844 :
7845 : #if SK5_ENABLED
7846 : PURE module subroutine setRankOrdinalDefCom_D0_SK5(rank, array)
7847 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7848 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D0_SK5
7849 : #endif
7850 : use pm_kind, only: TKR => IK, SKC => SK5
7851 : character(*,SKC) , intent(in) :: array
7852 : integer(TKR) , intent(out) , contiguous :: rank(:)
7853 : end subroutine
7854 : #endif
7855 :
7856 : #if SK4_ENABLED
7857 : PURE module subroutine setRankOrdinalDefCom_D0_SK4(rank, array)
7858 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7859 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D0_SK4
7860 : #endif
7861 : use pm_kind, only: TKR => IK, SKC => SK4
7862 : character(*,SKC) , intent(in) :: array
7863 : integer(TKR) , intent(out) , contiguous :: rank(:)
7864 : end subroutine
7865 : #endif
7866 :
7867 : #if SK3_ENABLED
7868 : PURE module subroutine setRankOrdinalDefCom_D0_SK3(rank, array)
7869 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7870 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D0_SK3
7871 : #endif
7872 : use pm_kind, only: TKR => IK, SKC => SK3
7873 : character(*,SKC) , intent(in) :: array
7874 : integer(TKR) , intent(out) , contiguous :: rank(:)
7875 : end subroutine
7876 : #endif
7877 :
7878 : #if SK2_ENABLED
7879 : PURE module subroutine setRankOrdinalDefCom_D0_SK2(rank, array)
7880 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7881 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D0_SK2
7882 : #endif
7883 : use pm_kind, only: TKR => IK, SKC => SK2
7884 : character(*,SKC) , intent(in) :: array
7885 : integer(TKR) , intent(out) , contiguous :: rank(:)
7886 : end subroutine
7887 : #endif
7888 :
7889 : #if SK1_ENABLED
7890 : PURE module subroutine setRankOrdinalDefCom_D0_SK1(rank, array)
7891 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7892 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D0_SK1
7893 : #endif
7894 : use pm_kind, only: TKR => IK, SKC => SK1
7895 : character(*,SKC) , intent(in) :: array
7896 : integer(TKR) , intent(out) , contiguous :: rank(:)
7897 : end subroutine
7898 : #endif
7899 :
7900 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7901 :
7902 : #if SK5_ENABLED
7903 : PURE module subroutine setRankOrdinalDefCom_D1_SK5(rank, array)
7904 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7905 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_SK5
7906 : #endif
7907 : use pm_kind, only: TKR => IK, SKC => SK5
7908 : character(*,SKC) , intent(in) , contiguous :: array(:)
7909 : integer(TKR) , intent(out) , contiguous :: rank(:)
7910 : end subroutine
7911 : #endif
7912 :
7913 : #if SK4_ENABLED
7914 : PURE module subroutine setRankOrdinalDefCom_D1_SK4(rank, array)
7915 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7916 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_SK4
7917 : #endif
7918 : use pm_kind, only: TKR => IK, SKC => SK4
7919 : character(*,SKC) , intent(in) , contiguous :: array(:)
7920 : integer(TKR) , intent(out) , contiguous :: rank(:)
7921 : end subroutine
7922 : #endif
7923 :
7924 : #if SK3_ENABLED
7925 : PURE module subroutine setRankOrdinalDefCom_D1_SK3(rank, array)
7926 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7927 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_SK3
7928 : #endif
7929 : use pm_kind, only: TKR => IK, SKC => SK3
7930 : character(*,SKC) , intent(in) , contiguous :: array(:)
7931 : integer(TKR) , intent(out) , contiguous :: rank(:)
7932 : end subroutine
7933 : #endif
7934 :
7935 : #if SK2_ENABLED
7936 : PURE module subroutine setRankOrdinalDefCom_D1_SK2(rank, array)
7937 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7938 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_SK2
7939 : #endif
7940 : use pm_kind, only: TKR => IK, SKC => SK2
7941 : character(*,SKC) , intent(in) , contiguous :: array(:)
7942 : integer(TKR) , intent(out) , contiguous :: rank(:)
7943 : end subroutine
7944 : #endif
7945 :
7946 : #if SK1_ENABLED
7947 : PURE module subroutine setRankOrdinalDefCom_D1_SK1(rank, array)
7948 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7949 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_SK1
7950 : #endif
7951 : use pm_kind, only: TKR => IK, SKC => SK1
7952 : character(*,SKC) , intent(in) , contiguous :: array(:)
7953 : integer(TKR) , intent(out) , contiguous :: rank(:)
7954 : end subroutine
7955 : #endif
7956 :
7957 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7958 :
7959 : #if IK5_ENABLED
7960 : PURE module subroutine setRankOrdinalDefCom_D1_IK5(rank, array)
7961 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7962 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_IK5
7963 : #endif
7964 : use pm_kind, only: TKR => IK, IKC => IK5
7965 : integer(IKC) , intent(in) , contiguous :: array(:)
7966 : integer(TKR) , intent(out) , contiguous :: rank(:)
7967 : end subroutine
7968 : #endif
7969 :
7970 : #if IK4_ENABLED
7971 : PURE module subroutine setRankOrdinalDefCom_D1_IK4(rank, array)
7972 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7973 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_IK4
7974 : #endif
7975 : use pm_kind, only: TKR => IK, IKC => IK4
7976 : integer(IKC) , intent(in) , contiguous :: array(:)
7977 : integer(TKR) , intent(out) , contiguous :: rank(:)
7978 : end subroutine
7979 : #endif
7980 :
7981 : #if IK3_ENABLED
7982 : PURE module subroutine setRankOrdinalDefCom_D1_IK3(rank, array)
7983 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7984 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_IK3
7985 : #endif
7986 : use pm_kind, only: TKR => IK, IKC => IK3
7987 : integer(IKC) , intent(in) , contiguous :: array(:)
7988 : integer(TKR) , intent(out) , contiguous :: rank(:)
7989 : end subroutine
7990 : #endif
7991 :
7992 : #if IK2_ENABLED
7993 : PURE module subroutine setRankOrdinalDefCom_D1_IK2(rank, array)
7994 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
7995 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_IK2
7996 : #endif
7997 : use pm_kind, only: TKR => IK, IKC => IK2
7998 : integer(IKC) , intent(in) , contiguous :: array(:)
7999 : integer(TKR) , intent(out) , contiguous :: rank(:)
8000 : end subroutine
8001 : #endif
8002 :
8003 : #if IK1_ENABLED
8004 : PURE module subroutine setRankOrdinalDefCom_D1_IK1(rank, array)
8005 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8006 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_IK1
8007 : #endif
8008 : use pm_kind, only: TKR => IK, IKC => IK1
8009 : integer(IKC) , intent(in) , contiguous :: array(:)
8010 : integer(TKR) , intent(out) , contiguous :: rank(:)
8011 : end subroutine
8012 : #endif
8013 :
8014 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8015 :
8016 : #if LK5_ENABLED
8017 : PURE module subroutine setRankOrdinalDefCom_D1_LK5(rank, array)
8018 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8019 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_LK5
8020 : #endif
8021 : use pm_kind, only: TKR => IK, LKC => LK5
8022 : logical(LKC) , intent(in) , contiguous :: array(:)
8023 : integer(TKR) , intent(out) , contiguous :: rank(:)
8024 : end subroutine
8025 : #endif
8026 :
8027 : #if LK4_ENABLED
8028 : PURE module subroutine setRankOrdinalDefCom_D1_LK4(rank, array)
8029 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8030 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_LK4
8031 : #endif
8032 : use pm_kind, only: TKR => IK, LKC => LK4
8033 : logical(LKC) , intent(in) , contiguous :: array(:)
8034 : integer(TKR) , intent(out) , contiguous :: rank(:)
8035 : end subroutine
8036 : #endif
8037 :
8038 : #if LK3_ENABLED
8039 : PURE module subroutine setRankOrdinalDefCom_D1_LK3(rank, array)
8040 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8041 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_LK3
8042 : #endif
8043 : use pm_kind, only: TKR => IK, LKC => LK3
8044 : logical(LKC) , intent(in) , contiguous :: array(:)
8045 : integer(TKR) , intent(out) , contiguous :: rank(:)
8046 : end subroutine
8047 : #endif
8048 :
8049 : #if LK2_ENABLED
8050 : PURE module subroutine setRankOrdinalDefCom_D1_LK2(rank, array)
8051 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8052 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_LK2
8053 : #endif
8054 : use pm_kind, only: TKR => IK, LKC => LK2
8055 : logical(LKC) , intent(in) , contiguous :: array(:)
8056 : integer(TKR) , intent(out) , contiguous :: rank(:)
8057 : end subroutine
8058 : #endif
8059 :
8060 : #if LK1_ENABLED
8061 : PURE module subroutine setRankOrdinalDefCom_D1_LK1(rank, array)
8062 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8063 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_LK1
8064 : #endif
8065 : use pm_kind, only: TKR => IK, LKC => LK1
8066 : logical(LKC) , intent(in) , contiguous :: array(:)
8067 : integer(TKR) , intent(out) , contiguous :: rank(:)
8068 : end subroutine
8069 : #endif
8070 :
8071 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8072 :
8073 : #if CK5_ENABLED
8074 : PURE module subroutine setRankOrdinalDefCom_D1_CK5(rank, array)
8075 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8076 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_CK5
8077 : #endif
8078 : use pm_kind, only: TKR => IK, CKC => CK5
8079 : complex(CKC) , intent(in) , contiguous :: array(:)
8080 : integer(TKR) , intent(out) , contiguous :: rank(:)
8081 : end subroutine
8082 : #endif
8083 :
8084 : #if CK4_ENABLED
8085 : PURE module subroutine setRankOrdinalDefCom_D1_CK4(rank, array)
8086 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8087 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_CK4
8088 : #endif
8089 : use pm_kind, only: TKR => IK, CKC => CK4
8090 : complex(CKC) , intent(in) , contiguous :: array(:)
8091 : integer(TKR) , intent(out) , contiguous :: rank(:)
8092 : end subroutine
8093 : #endif
8094 :
8095 : #if CK3_ENABLED
8096 : PURE module subroutine setRankOrdinalDefCom_D1_CK3(rank, array)
8097 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8098 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_CK3
8099 : #endif
8100 : use pm_kind, only: TKR => IK, CKC => CK3
8101 : complex(CKC) , intent(in) , contiguous :: array(:)
8102 : integer(TKR) , intent(out) , contiguous :: rank(:)
8103 : end subroutine
8104 : #endif
8105 :
8106 : #if CK2_ENABLED
8107 : PURE module subroutine setRankOrdinalDefCom_D1_CK2(rank, array)
8108 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8109 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_CK2
8110 : #endif
8111 : use pm_kind, only: TKR => IK, CKC => CK2
8112 : complex(CKC) , intent(in) , contiguous :: array(:)
8113 : integer(TKR) , intent(out) , contiguous :: rank(:)
8114 : end subroutine
8115 : #endif
8116 :
8117 : #if CK1_ENABLED
8118 : PURE module subroutine setRankOrdinalDefCom_D1_CK1(rank, array)
8119 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8120 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_CK1
8121 : #endif
8122 : use pm_kind, only: TKR => IK, CKC => CK1
8123 : complex(CKC) , intent(in) , contiguous :: array(:)
8124 : integer(TKR) , intent(out) , contiguous :: rank(:)
8125 : end subroutine
8126 : #endif
8127 :
8128 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8129 :
8130 : #if RK5_ENABLED
8131 : PURE module subroutine setRankOrdinalDefCom_D1_RK5(rank, array)
8132 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8133 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_RK5
8134 : #endif
8135 : use pm_kind, only: TKR => IK, RKC => RK5
8136 : real(RKC) , intent(in) , contiguous :: array(:)
8137 : integer(TKR) , intent(out) , contiguous :: rank(:)
8138 : end subroutine
8139 : #endif
8140 :
8141 : #if RK4_ENABLED
8142 : PURE module subroutine setRankOrdinalDefCom_D1_RK4(rank, array)
8143 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8144 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_RK4
8145 : #endif
8146 : use pm_kind, only: TKR => IK, RKC => RK4
8147 : real(RKC) , intent(in) , contiguous :: array(:)
8148 : integer(TKR) , intent(out) , contiguous :: rank(:)
8149 : end subroutine
8150 : #endif
8151 :
8152 : #if RK3_ENABLED
8153 : PURE module subroutine setRankOrdinalDefCom_D1_RK3(rank, array)
8154 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8155 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_RK3
8156 : #endif
8157 : use pm_kind, only: TKR => IK, RKC => RK3
8158 : real(RKC) , intent(in) , contiguous :: array(:)
8159 : integer(TKR) , intent(out) , contiguous :: rank(:)
8160 : end subroutine
8161 : #endif
8162 :
8163 : #if RK2_ENABLED
8164 : PURE module subroutine setRankOrdinalDefCom_D1_RK2(rank, array)
8165 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8166 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_RK2
8167 : #endif
8168 : use pm_kind, only: TKR => IK, RKC => RK2
8169 : real(RKC) , intent(in) , contiguous :: array(:)
8170 : integer(TKR) , intent(out) , contiguous :: rank(:)
8171 : end subroutine
8172 : #endif
8173 :
8174 : #if RK1_ENABLED
8175 : PURE module subroutine setRankOrdinalDefCom_D1_RK1(rank, array)
8176 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8177 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_RK1
8178 : #endif
8179 : use pm_kind, only: TKR => IK, RKC => RK1
8180 : real(RKC) , intent(in) , contiguous :: array(:)
8181 : integer(TKR) , intent(out) , contiguous :: rank(:)
8182 : end subroutine
8183 : #endif
8184 :
8185 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8186 :
8187 : #if SK5_ENABLED
8188 : PURE module subroutine setRankOrdinalDefCom_D1_PSSK5(rank, array)
8189 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8190 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_PSSK5
8191 : #endif
8192 : use pm_kind, only: TKR => IK, SKC => SK5
8193 : use pm_container, only: css_pdt
8194 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8195 : integer(TKR) , intent(out) , contiguous :: rank(:)
8196 : end subroutine
8197 : #endif
8198 :
8199 : #if SK4_ENABLED
8200 : PURE module subroutine setRankOrdinalDefCom_D1_PSSK4(rank, array)
8201 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8202 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_PSSK4
8203 : #endif
8204 : use pm_kind, only: TKR => IK, SKC => SK4
8205 : use pm_container, only: css_pdt
8206 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8207 : integer(TKR) , intent(out) , contiguous :: rank(:)
8208 : end subroutine
8209 : #endif
8210 :
8211 : #if SK3_ENABLED
8212 : PURE module subroutine setRankOrdinalDefCom_D1_PSSK3(rank, array)
8213 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8214 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_PSSK3
8215 : #endif
8216 : use pm_kind, only: TKR => IK, SKC => SK3
8217 : use pm_container, only: css_pdt
8218 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8219 : integer(TKR) , intent(out) , contiguous :: rank(:)
8220 : end subroutine
8221 : #endif
8222 :
8223 : #if SK2_ENABLED
8224 : PURE module subroutine setRankOrdinalDefCom_D1_PSSK2(rank, array)
8225 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8226 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_PSSK2
8227 : #endif
8228 : use pm_kind, only: TKR => IK, SKC => SK2
8229 : use pm_container, only: css_pdt
8230 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8231 : integer(TKR) , intent(out) , contiguous :: rank(:)
8232 : end subroutine
8233 : #endif
8234 :
8235 : #if SK1_ENABLED
8236 : PURE module subroutine setRankOrdinalDefCom_D1_PSSK1(rank, array)
8237 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8238 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_PSSK1
8239 : #endif
8240 : use pm_kind, only: TKR => IK, SKC => SK1
8241 : use pm_container, only: css_pdt
8242 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8243 : integer(TKR) , intent(out) , contiguous :: rank(:)
8244 : end subroutine
8245 : #endif
8246 :
8247 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8248 :
8249 : PURE module subroutine setRankOrdinalDefCom_D1_BSSK(rank, array)
8250 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8251 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalDefCom_D1_BSSK
8252 : #endif
8253 : use pm_kind, only: TKR => IK, SKC => SK
8254 : use pm_container, only: css_type
8255 : type(css_type) , intent(in) , contiguous :: array(:)
8256 : integer(TKR) , intent(out) , contiguous :: rank(:)
8257 : end subroutine
8258 :
8259 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8260 :
8261 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8262 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8263 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8264 :
8265 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8266 :
8267 : #if SK5_ENABLED
8268 : module subroutine setRankOrdinalCusCom_D0_SK5(rank, array, isSorted)
8269 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8270 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D0_SK5
8271 : #endif
8272 : use pm_kind, only: TKR => IK, SKC => SK5
8273 : character(*,SKC) , intent(in) :: array
8274 : integer(TKR) , intent(out) , contiguous :: rank(:)
8275 : procedure(logical(LK)) :: isSorted
8276 : end subroutine
8277 : #endif
8278 :
8279 : #if SK4_ENABLED
8280 : module subroutine setRankOrdinalCusCom_D0_SK4(rank, array, isSorted)
8281 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8282 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D0_SK4
8283 : #endif
8284 : use pm_kind, only: TKR => IK, SKC => SK4
8285 : character(*,SKC) , intent(in) :: array
8286 : integer(TKR) , intent(out) , contiguous :: rank(:)
8287 : procedure(logical(LK)) :: isSorted
8288 : end subroutine
8289 : #endif
8290 :
8291 : #if SK3_ENABLED
8292 : module subroutine setRankOrdinalCusCom_D0_SK3(rank, array, isSorted)
8293 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8294 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D0_SK3
8295 : #endif
8296 : use pm_kind, only: TKR => IK, SKC => SK3
8297 : character(*,SKC) , intent(in) :: array
8298 : integer(TKR) , intent(out) , contiguous :: rank(:)
8299 : procedure(logical(LK)) :: isSorted
8300 : end subroutine
8301 : #endif
8302 :
8303 : #if SK2_ENABLED
8304 : module subroutine setRankOrdinalCusCom_D0_SK2(rank, array, isSorted)
8305 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8306 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D0_SK2
8307 : #endif
8308 : use pm_kind, only: TKR => IK, SKC => SK2
8309 : character(*,SKC) , intent(in) :: array
8310 : integer(TKR) , intent(out) , contiguous :: rank(:)
8311 : procedure(logical(LK)) :: isSorted
8312 : end subroutine
8313 : #endif
8314 :
8315 : #if SK1_ENABLED
8316 : module subroutine setRankOrdinalCusCom_D0_SK1(rank, array, isSorted)
8317 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8318 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D0_SK1
8319 : #endif
8320 : use pm_kind, only: TKR => IK, SKC => SK1
8321 : character(*,SKC) , intent(in) :: array
8322 : integer(TKR) , intent(out) , contiguous :: rank(:)
8323 : procedure(logical(LK)) :: isSorted
8324 : end subroutine
8325 : #endif
8326 :
8327 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8328 :
8329 : #if SK5_ENABLED
8330 : module subroutine setRankOrdinalCusCom_D1_SK5(rank, array, isSorted)
8331 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8332 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_SK5
8333 : #endif
8334 : use pm_kind, only: TKR => IK, SKC => SK5
8335 : character(*,SKC) , intent(in) , contiguous :: array(:)
8336 : integer(TKR) , intent(out) , contiguous :: rank(:)
8337 : procedure(logical(LK)) :: isSorted
8338 : end subroutine
8339 : #endif
8340 :
8341 : #if SK4_ENABLED
8342 : module subroutine setRankOrdinalCusCom_D1_SK4(rank, array, isSorted)
8343 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8344 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_SK4
8345 : #endif
8346 : use pm_kind, only: TKR => IK, SKC => SK4
8347 : character(*,SKC) , intent(in) , contiguous :: array(:)
8348 : integer(TKR) , intent(out) , contiguous :: rank(:)
8349 : procedure(logical(LK)) :: isSorted
8350 : end subroutine
8351 : #endif
8352 :
8353 : #if SK3_ENABLED
8354 : module subroutine setRankOrdinalCusCom_D1_SK3(rank, array, isSorted)
8355 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8356 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_SK3
8357 : #endif
8358 : use pm_kind, only: TKR => IK, SKC => SK3
8359 : character(*,SKC) , intent(in) , contiguous :: array(:)
8360 : integer(TKR) , intent(out) , contiguous :: rank(:)
8361 : procedure(logical(LK)) :: isSorted
8362 : end subroutine
8363 : #endif
8364 :
8365 : #if SK2_ENABLED
8366 : module subroutine setRankOrdinalCusCom_D1_SK2(rank, array, isSorted)
8367 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8368 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_SK2
8369 : #endif
8370 : use pm_kind, only: TKR => IK, SKC => SK2
8371 : character(*,SKC) , intent(in) , contiguous :: array(:)
8372 : integer(TKR) , intent(out) , contiguous :: rank(:)
8373 : procedure(logical(LK)) :: isSorted
8374 : end subroutine
8375 : #endif
8376 :
8377 : #if SK1_ENABLED
8378 : module subroutine setRankOrdinalCusCom_D1_SK1(rank, array, isSorted)
8379 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8380 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_SK1
8381 : #endif
8382 : use pm_kind, only: TKR => IK, SKC => SK1
8383 : character(*,SKC) , intent(in) , contiguous :: array(:)
8384 : integer(TKR) , intent(out) , contiguous :: rank(:)
8385 : procedure(logical(LK)) :: isSorted
8386 : end subroutine
8387 : #endif
8388 :
8389 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8390 :
8391 : #if IK5_ENABLED
8392 : module subroutine setRankOrdinalCusCom_D1_IK5(rank, array, isSorted)
8393 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8394 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_IK5
8395 : #endif
8396 : use pm_kind, only: TKR => IK, IKC => IK5
8397 : integer(IKC) , intent(in) , contiguous :: array(:)
8398 : integer(TKR) , intent(out) , contiguous :: rank(:)
8399 : procedure(logical(LK)) :: isSorted
8400 : end subroutine
8401 : #endif
8402 :
8403 : #if IK4_ENABLED
8404 : module subroutine setRankOrdinalCusCom_D1_IK4(rank, array, isSorted)
8405 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8406 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_IK4
8407 : #endif
8408 : use pm_kind, only: TKR => IK, IKC => IK4
8409 : integer(IKC) , intent(in) , contiguous :: array(:)
8410 : integer(TKR) , intent(out) , contiguous :: rank(:)
8411 : procedure(logical(LK)) :: isSorted
8412 : end subroutine
8413 : #endif
8414 :
8415 : #if IK3_ENABLED
8416 : module subroutine setRankOrdinalCusCom_D1_IK3(rank, array, isSorted)
8417 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8418 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_IK3
8419 : #endif
8420 : use pm_kind, only: TKR => IK, IKC => IK3
8421 : integer(IKC) , intent(in) , contiguous :: array(:)
8422 : integer(TKR) , intent(out) , contiguous :: rank(:)
8423 : procedure(logical(LK)) :: isSorted
8424 : end subroutine
8425 : #endif
8426 :
8427 : #if IK2_ENABLED
8428 : module subroutine setRankOrdinalCusCom_D1_IK2(rank, array, isSorted)
8429 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8430 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_IK2
8431 : #endif
8432 : use pm_kind, only: TKR => IK, IKC => IK2
8433 : integer(IKC) , intent(in) , contiguous :: array(:)
8434 : integer(TKR) , intent(out) , contiguous :: rank(:)
8435 : procedure(logical(LK)) :: isSorted
8436 : end subroutine
8437 : #endif
8438 :
8439 : #if IK1_ENABLED
8440 : module subroutine setRankOrdinalCusCom_D1_IK1(rank, array, isSorted)
8441 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8442 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_IK1
8443 : #endif
8444 : use pm_kind, only: TKR => IK, IKC => IK1
8445 : integer(IKC) , intent(in) , contiguous :: array(:)
8446 : integer(TKR) , intent(out) , contiguous :: rank(:)
8447 : procedure(logical(LK)) :: isSorted
8448 : end subroutine
8449 : #endif
8450 :
8451 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8452 :
8453 : #if LK5_ENABLED
8454 : module subroutine setRankOrdinalCusCom_D1_LK5(rank, array, isSorted)
8455 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8456 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_LK5
8457 : #endif
8458 : use pm_kind, only: TKR => IK, LKC => LK5
8459 : logical(LKC) , intent(in) , contiguous :: array(:)
8460 : integer(TKR) , intent(out) , contiguous :: rank(:)
8461 : procedure(logical(LK)) :: isSorted
8462 : end subroutine
8463 : #endif
8464 :
8465 : #if LK4_ENABLED
8466 : module subroutine setRankOrdinalCusCom_D1_LK4(rank, array, isSorted)
8467 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8468 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_LK4
8469 : #endif
8470 : use pm_kind, only: TKR => IK, LKC => LK4
8471 : logical(LKC) , intent(in) , contiguous :: array(:)
8472 : integer(TKR) , intent(out) , contiguous :: rank(:)
8473 : procedure(logical(LK)) :: isSorted
8474 : end subroutine
8475 : #endif
8476 :
8477 : #if LK3_ENABLED
8478 : module subroutine setRankOrdinalCusCom_D1_LK3(rank, array, isSorted)
8479 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8480 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_LK3
8481 : #endif
8482 : use pm_kind, only: TKR => IK, LKC => LK3
8483 : logical(LKC) , intent(in) , contiguous :: array(:)
8484 : integer(TKR) , intent(out) , contiguous :: rank(:)
8485 : procedure(logical(LK)) :: isSorted
8486 : end subroutine
8487 : #endif
8488 :
8489 : #if LK2_ENABLED
8490 : module subroutine setRankOrdinalCusCom_D1_LK2(rank, array, isSorted)
8491 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8492 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_LK2
8493 : #endif
8494 : use pm_kind, only: TKR => IK, LKC => LK2
8495 : logical(LKC) , intent(in) , contiguous :: array(:)
8496 : integer(TKR) , intent(out) , contiguous :: rank(:)
8497 : procedure(logical(LK)) :: isSorted
8498 : end subroutine
8499 : #endif
8500 :
8501 : #if LK1_ENABLED
8502 : module subroutine setRankOrdinalCusCom_D1_LK1(rank, array, isSorted)
8503 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8504 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_LK1
8505 : #endif
8506 : use pm_kind, only: TKR => IK, LKC => LK1
8507 : logical(LKC) , intent(in) , contiguous :: array(:)
8508 : integer(TKR) , intent(out) , contiguous :: rank(:)
8509 : procedure(logical(LK)) :: isSorted
8510 : end subroutine
8511 : #endif
8512 :
8513 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8514 :
8515 : #if CK5_ENABLED
8516 : module subroutine setRankOrdinalCusCom_D1_CK5(rank, array, isSorted)
8517 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8518 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_CK5
8519 : #endif
8520 : use pm_kind, only: TKR => IK, CKC => CK5
8521 : complex(CKC) , intent(in) , contiguous :: array(:)
8522 : integer(TKR) , intent(out) , contiguous :: rank(:)
8523 : procedure(logical(LK)) :: isSorted
8524 : end subroutine
8525 : #endif
8526 :
8527 : #if CK4_ENABLED
8528 : module subroutine setRankOrdinalCusCom_D1_CK4(rank, array, isSorted)
8529 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8530 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_CK4
8531 : #endif
8532 : use pm_kind, only: TKR => IK, CKC => CK4
8533 : complex(CKC) , intent(in) , contiguous :: array(:)
8534 : integer(TKR) , intent(out) , contiguous :: rank(:)
8535 : procedure(logical(LK)) :: isSorted
8536 : end subroutine
8537 : #endif
8538 :
8539 : #if CK3_ENABLED
8540 : module subroutine setRankOrdinalCusCom_D1_CK3(rank, array, isSorted)
8541 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8542 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_CK3
8543 : #endif
8544 : use pm_kind, only: TKR => IK, CKC => CK3
8545 : complex(CKC) , intent(in) , contiguous :: array(:)
8546 : integer(TKR) , intent(out) , contiguous :: rank(:)
8547 : procedure(logical(LK)) :: isSorted
8548 : end subroutine
8549 : #endif
8550 :
8551 : #if CK2_ENABLED
8552 : module subroutine setRankOrdinalCusCom_D1_CK2(rank, array, isSorted)
8553 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8554 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_CK2
8555 : #endif
8556 : use pm_kind, only: TKR => IK, CKC => CK2
8557 : complex(CKC) , intent(in) , contiguous :: array(:)
8558 : integer(TKR) , intent(out) , contiguous :: rank(:)
8559 : procedure(logical(LK)) :: isSorted
8560 : end subroutine
8561 : #endif
8562 :
8563 : #if CK1_ENABLED
8564 : module subroutine setRankOrdinalCusCom_D1_CK1(rank, array, isSorted)
8565 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8566 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_CK1
8567 : #endif
8568 : use pm_kind, only: TKR => IK, CKC => CK1
8569 : complex(CKC) , intent(in) , contiguous :: array(:)
8570 : integer(TKR) , intent(out) , contiguous :: rank(:)
8571 : procedure(logical(LK)) :: isSorted
8572 : end subroutine
8573 : #endif
8574 :
8575 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8576 :
8577 : #if RK5_ENABLED
8578 : module subroutine setRankOrdinalCusCom_D1_RK5(rank, array, isSorted)
8579 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8580 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_RK5
8581 : #endif
8582 : use pm_kind, only: TKR => IK, RKC => RK5
8583 : real(RKC) , intent(in) , contiguous :: array(:)
8584 : integer(TKR) , intent(out) , contiguous :: rank(:)
8585 : procedure(logical(LK)) :: isSorted
8586 : end subroutine
8587 : #endif
8588 :
8589 : #if RK4_ENABLED
8590 : module subroutine setRankOrdinalCusCom_D1_RK4(rank, array, isSorted)
8591 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8592 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_RK4
8593 : #endif
8594 : use pm_kind, only: TKR => IK, RKC => RK4
8595 : real(RKC) , intent(in) , contiguous :: array(:)
8596 : integer(TKR) , intent(out) , contiguous :: rank(:)
8597 : procedure(logical(LK)) :: isSorted
8598 : end subroutine
8599 : #endif
8600 :
8601 : #if RK3_ENABLED
8602 : module subroutine setRankOrdinalCusCom_D1_RK3(rank, array, isSorted)
8603 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8604 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_RK3
8605 : #endif
8606 : use pm_kind, only: TKR => IK, RKC => RK3
8607 : real(RKC) , intent(in) , contiguous :: array(:)
8608 : integer(TKR) , intent(out) , contiguous :: rank(:)
8609 : procedure(logical(LK)) :: isSorted
8610 : end subroutine
8611 : #endif
8612 :
8613 : #if RK2_ENABLED
8614 : module subroutine setRankOrdinalCusCom_D1_RK2(rank, array, isSorted)
8615 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8616 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_RK2
8617 : #endif
8618 : use pm_kind, only: TKR => IK, RKC => RK2
8619 : real(RKC) , intent(in) , contiguous :: array(:)
8620 : integer(TKR) , intent(out) , contiguous :: rank(:)
8621 : procedure(logical(LK)) :: isSorted
8622 : end subroutine
8623 : #endif
8624 :
8625 : #if RK1_ENABLED
8626 : module subroutine setRankOrdinalCusCom_D1_RK1(rank, array, isSorted)
8627 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8628 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_RK1
8629 : #endif
8630 : use pm_kind, only: TKR => IK, RKC => RK1
8631 : real(RKC) , intent(in) , contiguous :: array(:)
8632 : integer(TKR) , intent(out) , contiguous :: rank(:)
8633 : procedure(logical(LK)) :: isSorted
8634 : end subroutine
8635 : #endif
8636 :
8637 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8638 :
8639 : #if SK5_ENABLED
8640 : module subroutine setRankOrdinalCusCom_D1_PSSK5(rank, array, isSorted)
8641 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8642 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_PSSK5
8643 : #endif
8644 : use pm_kind, only: TKR => IK, SKC => SK5
8645 : use pm_container, only: css_pdt
8646 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8647 : integer(TKR) , intent(out) , contiguous :: rank(:)
8648 : procedure(logical(LK)) :: isSorted
8649 : end subroutine
8650 : #endif
8651 :
8652 : #if SK4_ENABLED
8653 : module subroutine setRankOrdinalCusCom_D1_PSSK4(rank, array, isSorted)
8654 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8655 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_PSSK4
8656 : #endif
8657 : use pm_kind, only: TKR => IK, SKC => SK4
8658 : use pm_container, only: css_pdt
8659 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8660 : integer(TKR) , intent(out) , contiguous :: rank(:)
8661 : procedure(logical(LK)) :: isSorted
8662 : end subroutine
8663 : #endif
8664 :
8665 : #if SK3_ENABLED
8666 : module subroutine setRankOrdinalCusCom_D1_PSSK3(rank, array, isSorted)
8667 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8668 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_PSSK3
8669 : #endif
8670 : use pm_kind, only: TKR => IK, SKC => SK3
8671 : use pm_container, only: css_pdt
8672 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8673 : integer(TKR) , intent(out) , contiguous :: rank(:)
8674 : procedure(logical(LK)) :: isSorted
8675 : end subroutine
8676 : #endif
8677 :
8678 : #if SK2_ENABLED
8679 : module subroutine setRankOrdinalCusCom_D1_PSSK2(rank, array, isSorted)
8680 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8681 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_PSSK2
8682 : #endif
8683 : use pm_kind, only: TKR => IK, SKC => SK2
8684 : use pm_container, only: css_pdt
8685 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8686 : integer(TKR) , intent(out) , contiguous :: rank(:)
8687 : procedure(logical(LK)) :: isSorted
8688 : end subroutine
8689 : #endif
8690 :
8691 : #if SK1_ENABLED
8692 : module subroutine setRankOrdinalCusCom_D1_PSSK1(rank, array, isSorted)
8693 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8694 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_PSSK1
8695 : #endif
8696 : use pm_kind, only: TKR => IK, SKC => SK1
8697 : use pm_container, only: css_pdt
8698 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
8699 : integer(TKR) , intent(out) , contiguous :: rank(:)
8700 : procedure(logical(LK)) :: isSorted
8701 : end subroutine
8702 : #endif
8703 :
8704 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8705 :
8706 : module subroutine setRankOrdinalCusCom_D1_BSSK(rank, array, isSorted)
8707 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8708 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankOrdinalCusCom_D1_BSSK
8709 : #endif
8710 : use pm_kind, only: TKR => IK, SKC => SK
8711 : use pm_container, only: css_type
8712 : type(css_type) , intent(in) , contiguous :: array(:)
8713 : integer(TKR) , intent(out) , contiguous :: rank(:)
8714 : procedure(logical(LK)) :: isSorted
8715 : end subroutine
8716 :
8717 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8718 :
8719 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8720 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8721 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8722 :
8723 : end interface
8724 :
8725 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8726 :
8727 : !> \brief
8728 : !> Generate and return the **Standard rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
8729 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
8730 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
8731 : !>
8732 : !> \details
8733 : !> This kind of ranking of values is widely known as <b>Standard Competition (`1224`) ranking</b>.<br>
8734 : !> In Standard Competition ranking, items that compare equal receive the same ranking number,
8735 : !> and then a gap is left in the ranking numbers. The number of ranking numbers that are left out
8736 : !> in this gap is one less than the number of items that compared equal.<br>
8737 : !> Equivalently, the ranking number of each item is `1` plus the number of items ranked above it.<br>
8738 : !> This ranking strategy is frequently adopted for competitions, as it means that if two (or more) competitors
8739 : !> tie for a position in the ranking, and the position of all those ranked below them is unaffected
8740 : !> (i.e., a competitor only comes second if exactly one person scores better than them,
8741 : !> third if exactly two people score better than them, fourth if exactly three people score better than them, etc.).<br>
8742 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number `1` (*first*),
8743 : !> *B* gets ranking number `2` (*joint second*), *C* also gets ranking number `2` (*joint second*) and *D* gets ranking number `4` (*fourth*).
8744 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **Standard Competition ranking** `1224`.<br>
8745 : !>
8746 : !> \param[out] rank : The output `contiguous` array of rank `1` of type `integer` of default kind \IK
8747 : !> containing the ranks of the corresponding elements of `array`.<br>
8748 : !> The size of `rank` must match that of `array` (or its length type parameter if `array` is a scalar string).<br>
8749 : !> **Read `rank(i)` as the Standard rank of the `i`th element of `array`.**
8750 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
8751 : !> <ol>
8752 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
8753 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
8754 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
8755 : !> <li> type `integer` of kind \IKALL or,<br>
8756 : !> <li> type `logical` of kind \LKALL or,<br>
8757 : !> <li> type `complex` of kind \CKALL or,<br>
8758 : !> <li> type `real` of kind \RKALL,<br>
8759 : !> </ol>
8760 : !> or,
8761 : !> <ol>
8762 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
8763 : !> </ol>
8764 : !> whose elements rankings will be computed and returned.
8765 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type
8766 : !> and kind as the input `array`.<br>
8767 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
8768 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
8769 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
8770 : !> If `array` is a Fortran string (i.e., a scalar `character`),
8771 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
8772 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
8773 : !> \code{.F90}
8774 : !> function isSorted(a,b) result (sorted)
8775 : !> use pm_kind, only: SK, IK, LK, CK, RK
8776 : !> TYPE(KIND) , intent(in) :: a, b
8777 : !> logical(LK) :: sorted
8778 : !> end function
8779 : !> \endcode
8780 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
8781 : !> \code{.F90}
8782 : !> use pm_container, only: StrCon
8783 : !> use pm_kind, only: SK, IK, LK, CK, RK
8784 : !> character(*, SK), intent(in) :: a, b
8785 : !> integer(IK) , intent(in) :: a, b
8786 : !> logical(LK) , intent(in) :: a, b
8787 : !> complex(CK) , intent(in) :: a, b
8788 : !> real(RK) , intent(in) :: a, b
8789 : !> type(StrCon) , intent(in) :: a, b
8790 : !> \endcode
8791 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
8792 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
8793 : !> \code{.F90}
8794 : !> function isSorted(a,b) result (sorted)
8795 : !> character(1,SKC), intent(in) :: a, b
8796 : !> logical(LK) :: sorted
8797 : !> end function
8798 : !> \endcode
8799 : !> where `SKC` represents the kind of the input string argument `array`.<br>
8800 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
8801 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
8802 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
8803 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
8804 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
8805 : !>
8806 : !> \return
8807 : !> `rank(1:size(array)` : The output `contiguous` array of rank `1` of type `integer` of default kind \IK containing the ranks of the corresponding elements of `array`.<br>
8808 : !> The size of `rank` matches that of `array` (or its length type parameter if `array` is a scalar string).<br>
8809 : !> **Read `rank(i)` as the Standard rank of the `i`th element of `array`.**
8810 : !>
8811 : !> \interface{getRankStandard}
8812 : !> \code{.F90}
8813 : !>
8814 : !> use pm_arrayRank, only: getRankStandard
8815 : !>
8816 : !> rank(1:size(array)) = getRankStandard(array)
8817 : !> rank(1:size(array)) = getRankStandard(array, isSorted)
8818 : !>
8819 : !> \endcode
8820 : !>
8821 : !> \warning
8822 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
8823 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
8824 : !> identify ties within the Standard ranking of the input `array`.
8825 : !>
8826 : !> \warnpure
8827 : !>
8828 : !> \warning
8829 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
8830 : !>
8831 : !> \see
8832 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
8833 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
8834 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
8835 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
8836 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
8837 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
8838 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
8839 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
8840 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
8841 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
8842 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
8843 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
8844 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
8845 : !>
8846 : !> \example{getRankStandard}
8847 : !> \include{lineno} example/pm_arrayRank/getRankStandard/main.F90
8848 : !> \compilef{getRankStandard}
8849 : !> \output{getRankStandard}
8850 : !> \include{lineno} example/pm_arrayRank/getRankStandard/main.out.F90
8851 : !>
8852 : !> \test
8853 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
8854 : !>
8855 : !> \bug
8856 : !> \status \unresolved
8857 : !> \source \ifort{2021.5}
8858 : !> \desc
8859 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
8860 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
8861 : !> \remedy
8862 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
8863 : !>
8864 : !> \todo
8865 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
8866 : !>
8867 : !> \todo
8868 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
8869 : !>
8870 : !> \finmain{getRankStandard}
8871 : !>
8872 : !> \author
8873 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
8874 : interface getRankStandard
8875 :
8876 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8877 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8878 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8879 :
8880 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8881 :
8882 : #if SK5_ENABLED
8883 : module function getRankStandardDefCom_D0_SK5(array) result(rank)
8884 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8885 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D0_SK5
8886 : #endif
8887 : use pm_kind, only: TKR => IK, SKC => SK5
8888 : character(*,SKC) , intent(in) :: array
8889 : integer(TKR) :: rank(len(array, IK))
8890 : end function
8891 : #endif
8892 :
8893 : #if SK4_ENABLED
8894 : module function getRankStandardDefCom_D0_SK4(array) result(rank)
8895 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8896 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D0_SK4
8897 : #endif
8898 : use pm_kind, only: TKR => IK, SKC => SK4
8899 : character(*,SKC) , intent(in) :: array
8900 : integer(TKR) :: rank(len(array, IK))
8901 : end function
8902 : #endif
8903 :
8904 : #if SK3_ENABLED
8905 : module function getRankStandardDefCom_D0_SK3(array) result(rank)
8906 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8907 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D0_SK3
8908 : #endif
8909 : use pm_kind, only: TKR => IK, SKC => SK3
8910 : character(*,SKC) , intent(in) :: array
8911 : integer(TKR) :: rank(len(array, IK))
8912 : end function
8913 : #endif
8914 :
8915 : #if SK2_ENABLED
8916 : module function getRankStandardDefCom_D0_SK2(array) result(rank)
8917 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8918 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D0_SK2
8919 : #endif
8920 : use pm_kind, only: TKR => IK, SKC => SK2
8921 : character(*,SKC) , intent(in) :: array
8922 : integer(TKR) :: rank(len(array, IK))
8923 : end function
8924 : #endif
8925 :
8926 : #if SK1_ENABLED
8927 : module function getRankStandardDefCom_D0_SK1(array) result(rank)
8928 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8929 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D0_SK1
8930 : #endif
8931 : use pm_kind, only: TKR => IK, SKC => SK1
8932 : character(*,SKC) , intent(in) :: array
8933 : integer(TKR) :: rank(len(array, IK))
8934 : end function
8935 : #endif
8936 :
8937 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8938 :
8939 : #if SK5_ENABLED
8940 : module function getRankStandardDefCom_D1_SK5(array) result(rank)
8941 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8942 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_SK5
8943 : #endif
8944 : use pm_kind, only: TKR => IK, SKC => SK5
8945 : character(*,SKC) , intent(in) , contiguous :: array(:)
8946 : integer(TKR) :: rank(size(array, kind = IK))
8947 : end function
8948 : #endif
8949 :
8950 : #if SK4_ENABLED
8951 : module function getRankStandardDefCom_D1_SK4(array) result(rank)
8952 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8953 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_SK4
8954 : #endif
8955 : use pm_kind, only: TKR => IK, SKC => SK4
8956 : character(*,SKC) , intent(in) , contiguous :: array(:)
8957 : integer(TKR) :: rank(size(array, kind = IK))
8958 : end function
8959 : #endif
8960 :
8961 : #if SK3_ENABLED
8962 : module function getRankStandardDefCom_D1_SK3(array) result(rank)
8963 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8964 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_SK3
8965 : #endif
8966 : use pm_kind, only: TKR => IK, SKC => SK3
8967 : character(*,SKC) , intent(in) , contiguous :: array(:)
8968 : integer(TKR) :: rank(size(array, kind = IK))
8969 : end function
8970 : #endif
8971 :
8972 : #if SK2_ENABLED
8973 : module function getRankStandardDefCom_D1_SK2(array) result(rank)
8974 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8975 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_SK2
8976 : #endif
8977 : use pm_kind, only: TKR => IK, SKC => SK2
8978 : character(*,SKC) , intent(in) , contiguous :: array(:)
8979 : integer(TKR) :: rank(size(array, kind = IK))
8980 : end function
8981 : #endif
8982 :
8983 : #if SK1_ENABLED
8984 : module function getRankStandardDefCom_D1_SK1(array) result(rank)
8985 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8986 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_SK1
8987 : #endif
8988 : use pm_kind, only: TKR => IK, SKC => SK1
8989 : character(*,SKC) , intent(in) , contiguous :: array(:)
8990 : integer(TKR) :: rank(size(array, kind = IK))
8991 : end function
8992 : #endif
8993 :
8994 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8995 :
8996 : #if IK5_ENABLED
8997 : module function getRankStandardDefCom_D1_IK5(array) result(rank)
8998 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
8999 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_IK5
9000 : #endif
9001 : use pm_kind, only: TKR => IK, IKC => IK5
9002 : integer(IKC) , intent(in) , contiguous :: array(:)
9003 : integer(TKR) :: rank(size(array, kind = IK))
9004 : end function
9005 : #endif
9006 :
9007 : #if IK4_ENABLED
9008 : module function getRankStandardDefCom_D1_IK4(array) result(rank)
9009 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9010 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_IK4
9011 : #endif
9012 : use pm_kind, only: TKR => IK, IKC => IK4
9013 : integer(IKC) , intent(in) , contiguous :: array(:)
9014 : integer(TKR) :: rank(size(array, kind = IK))
9015 : end function
9016 : #endif
9017 :
9018 : #if IK3_ENABLED
9019 : module function getRankStandardDefCom_D1_IK3(array) result(rank)
9020 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9021 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_IK3
9022 : #endif
9023 : use pm_kind, only: TKR => IK, IKC => IK3
9024 : integer(IKC) , intent(in) , contiguous :: array(:)
9025 : integer(TKR) :: rank(size(array, kind = IK))
9026 : end function
9027 : #endif
9028 :
9029 : #if IK2_ENABLED
9030 : module function getRankStandardDefCom_D1_IK2(array) result(rank)
9031 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9032 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_IK2
9033 : #endif
9034 : use pm_kind, only: TKR => IK, IKC => IK2
9035 : integer(IKC) , intent(in) , contiguous :: array(:)
9036 : integer(TKR) :: rank(size(array, kind = IK))
9037 : end function
9038 : #endif
9039 :
9040 : #if IK1_ENABLED
9041 : module function getRankStandardDefCom_D1_IK1(array) result(rank)
9042 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9043 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_IK1
9044 : #endif
9045 : use pm_kind, only: TKR => IK, IKC => IK1
9046 : integer(IKC) , intent(in) , contiguous :: array(:)
9047 : integer(TKR) :: rank(size(array, kind = IK))
9048 : end function
9049 : #endif
9050 :
9051 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9052 :
9053 : #if LK5_ENABLED
9054 : module function getRankStandardDefCom_D1_LK5(array) result(rank)
9055 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9056 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_LK5
9057 : #endif
9058 : use pm_kind, only: TKR => IK, LKC => LK5
9059 : logical(LKC) , intent(in) , contiguous :: array(:)
9060 : integer(TKR) :: rank(size(array, kind = IK))
9061 : end function
9062 : #endif
9063 :
9064 : #if LK4_ENABLED
9065 : module function getRankStandardDefCom_D1_LK4(array) result(rank)
9066 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9067 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_LK4
9068 : #endif
9069 : use pm_kind, only: TKR => IK, LKC => LK4
9070 : logical(LKC) , intent(in) , contiguous :: array(:)
9071 : integer(TKR) :: rank(size(array, kind = IK))
9072 : end function
9073 : #endif
9074 :
9075 : #if LK3_ENABLED
9076 : module function getRankStandardDefCom_D1_LK3(array) result(rank)
9077 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9078 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_LK3
9079 : #endif
9080 : use pm_kind, only: TKR => IK, LKC => LK3
9081 : logical(LKC) , intent(in) , contiguous :: array(:)
9082 : integer(TKR) :: rank(size(array, kind = IK))
9083 : end function
9084 : #endif
9085 :
9086 : #if LK2_ENABLED
9087 : module function getRankStandardDefCom_D1_LK2(array) result(rank)
9088 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9089 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_LK2
9090 : #endif
9091 : use pm_kind, only: TKR => IK, LKC => LK2
9092 : logical(LKC) , intent(in) , contiguous :: array(:)
9093 : integer(TKR) :: rank(size(array, kind = IK))
9094 : end function
9095 : #endif
9096 :
9097 : #if LK1_ENABLED
9098 : module function getRankStandardDefCom_D1_LK1(array) result(rank)
9099 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9100 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_LK1
9101 : #endif
9102 : use pm_kind, only: TKR => IK, LKC => LK1
9103 : logical(LKC) , intent(in) , contiguous :: array(:)
9104 : integer(TKR) :: rank(size(array, kind = IK))
9105 : end function
9106 : #endif
9107 :
9108 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9109 :
9110 : #if CK5_ENABLED
9111 : module function getRankStandardDefCom_D1_CK5(array) result(rank)
9112 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9113 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_CK5
9114 : #endif
9115 : use pm_kind, only: TKR => IK, CKC => CK5
9116 : complex(CKC) , intent(in) , contiguous :: array(:)
9117 : integer(TKR) :: rank(size(array, kind = IK))
9118 : end function
9119 : #endif
9120 :
9121 : #if CK4_ENABLED
9122 : module function getRankStandardDefCom_D1_CK4(array) result(rank)
9123 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9124 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_CK4
9125 : #endif
9126 : use pm_kind, only: TKR => IK, CKC => CK4
9127 : complex(CKC) , intent(in) , contiguous :: array(:)
9128 : integer(TKR) :: rank(size(array, kind = IK))
9129 : end function
9130 : #endif
9131 :
9132 : #if CK3_ENABLED
9133 : module function getRankStandardDefCom_D1_CK3(array) result(rank)
9134 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9135 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_CK3
9136 : #endif
9137 : use pm_kind, only: TKR => IK, CKC => CK3
9138 : complex(CKC) , intent(in) , contiguous :: array(:)
9139 : integer(TKR) :: rank(size(array, kind = IK))
9140 : end function
9141 : #endif
9142 :
9143 : #if CK2_ENABLED
9144 : module function getRankStandardDefCom_D1_CK2(array) result(rank)
9145 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9146 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_CK2
9147 : #endif
9148 : use pm_kind, only: TKR => IK, CKC => CK2
9149 : complex(CKC) , intent(in) , contiguous :: array(:)
9150 : integer(TKR) :: rank(size(array, kind = IK))
9151 : end function
9152 : #endif
9153 :
9154 : #if CK1_ENABLED
9155 : module function getRankStandardDefCom_D1_CK1(array) result(rank)
9156 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9157 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_CK1
9158 : #endif
9159 : use pm_kind, only: TKR => IK, CKC => CK1
9160 : complex(CKC) , intent(in) , contiguous :: array(:)
9161 : integer(TKR) :: rank(size(array, kind = IK))
9162 : end function
9163 : #endif
9164 :
9165 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9166 :
9167 : #if RK5_ENABLED
9168 : module function getRankStandardDefCom_D1_RK5(array) result(rank)
9169 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9170 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_RK5
9171 : #endif
9172 : use pm_kind, only: TKR => IK, RKC => RK5
9173 : real(RKC) , intent(in) , contiguous :: array(:)
9174 : integer(TKR) :: rank(size(array, kind = IK))
9175 : end function
9176 : #endif
9177 :
9178 : #if RK4_ENABLED
9179 : module function getRankStandardDefCom_D1_RK4(array) result(rank)
9180 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9181 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_RK4
9182 : #endif
9183 : use pm_kind, only: TKR => IK, RKC => RK4
9184 : real(RKC) , intent(in) , contiguous :: array(:)
9185 : integer(TKR) :: rank(size(array, kind = IK))
9186 : end function
9187 : #endif
9188 :
9189 : #if RK3_ENABLED
9190 : module function getRankStandardDefCom_D1_RK3(array) result(rank)
9191 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9192 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_RK3
9193 : #endif
9194 : use pm_kind, only: TKR => IK, RKC => RK3
9195 : real(RKC) , intent(in) , contiguous :: array(:)
9196 : integer(TKR) :: rank(size(array, kind = IK))
9197 : end function
9198 : #endif
9199 :
9200 : #if RK2_ENABLED
9201 : module function getRankStandardDefCom_D1_RK2(array) result(rank)
9202 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9203 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_RK2
9204 : #endif
9205 : use pm_kind, only: TKR => IK, RKC => RK2
9206 : real(RKC) , intent(in) , contiguous :: array(:)
9207 : integer(TKR) :: rank(size(array, kind = IK))
9208 : end function
9209 : #endif
9210 :
9211 : #if RK1_ENABLED
9212 : module function getRankStandardDefCom_D1_RK1(array) result(rank)
9213 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9214 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_RK1
9215 : #endif
9216 : use pm_kind, only: TKR => IK, RKC => RK1
9217 : real(RKC) , intent(in) , contiguous :: array(:)
9218 : integer(TKR) :: rank(size(array, kind = IK))
9219 : end function
9220 : #endif
9221 :
9222 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9223 :
9224 : #if SK5_ENABLED
9225 : module function getRankStandardDefCom_D1_PSSK5(array) result(rank)
9226 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9227 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_PSSK5
9228 : #endif
9229 : use pm_kind, only: TKR => IK, SKC => SK5
9230 : use pm_container, only: css_pdt
9231 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9232 : integer(TKR) :: rank(size(array, kind = IK))
9233 : end function
9234 : #endif
9235 :
9236 : #if SK4_ENABLED
9237 : module function getRankStandardDefCom_D1_PSSK4(array) result(rank)
9238 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9239 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_PSSK4
9240 : #endif
9241 : use pm_kind, only: TKR => IK, SKC => SK4
9242 : use pm_container, only: css_pdt
9243 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9244 : integer(TKR) :: rank(size(array, kind = IK))
9245 : end function
9246 : #endif
9247 :
9248 : #if SK3_ENABLED
9249 : module function getRankStandardDefCom_D1_PSSK3(array) result(rank)
9250 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9251 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_PSSK3
9252 : #endif
9253 : use pm_kind, only: TKR => IK, SKC => SK3
9254 : use pm_container, only: css_pdt
9255 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9256 : integer(TKR) :: rank(size(array, kind = IK))
9257 : end function
9258 : #endif
9259 :
9260 : #if SK2_ENABLED
9261 : module function getRankStandardDefCom_D1_PSSK2(array) result(rank)
9262 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9263 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_PSSK2
9264 : #endif
9265 : use pm_kind, only: TKR => IK, SKC => SK2
9266 : use pm_container, only: css_pdt
9267 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9268 : integer(TKR) :: rank(size(array, kind = IK))
9269 : end function
9270 : #endif
9271 :
9272 : #if SK1_ENABLED
9273 : module function getRankStandardDefCom_D1_PSSK1(array) result(rank)
9274 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9275 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_PSSK1
9276 : #endif
9277 : use pm_kind, only: TKR => IK, SKC => SK1
9278 : use pm_container, only: css_pdt
9279 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9280 : integer(TKR) :: rank(size(array, kind = IK))
9281 : end function
9282 : #endif
9283 :
9284 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9285 :
9286 : module function getRankStandardDefCom_D1_BSSK(array) result(rank)
9287 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9288 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardDefCom_D1_BSSK
9289 : #endif
9290 : use pm_kind, only: TKR => IK, SKC => SK
9291 : use pm_container, only: css_type
9292 : type(css_type) , intent(in) , contiguous :: array(:)
9293 : integer(TKR) :: rank(size(array, kind = IK))
9294 : end function
9295 :
9296 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9297 :
9298 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9299 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9300 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9301 :
9302 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9303 :
9304 : #if SK5_ENABLED
9305 : module function getRankStandardCusCom_D0_SK5(array, isSorted) result(rank)
9306 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9307 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D0_SK5
9308 : #endif
9309 : use pm_kind, only: TKR => IK, SKC => SK5
9310 : character(*,SKC) , intent(in) :: array
9311 : procedure(logical(LK)) :: isSorted
9312 : integer(TKR) :: rank(len(array, IK))
9313 : end function
9314 : #endif
9315 :
9316 : #if SK4_ENABLED
9317 : module function getRankStandardCusCom_D0_SK4(array, isSorted) result(rank)
9318 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9319 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D0_SK4
9320 : #endif
9321 : use pm_kind, only: TKR => IK, SKC => SK4
9322 : character(*,SKC) , intent(in) :: array
9323 : procedure(logical(LK)) :: isSorted
9324 : integer(TKR) :: rank(len(array, IK))
9325 : end function
9326 : #endif
9327 :
9328 : #if SK3_ENABLED
9329 : module function getRankStandardCusCom_D0_SK3(array, isSorted) result(rank)
9330 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9331 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D0_SK3
9332 : #endif
9333 : use pm_kind, only: TKR => IK, SKC => SK3
9334 : character(*,SKC) , intent(in) :: array
9335 : procedure(logical(LK)) :: isSorted
9336 : integer(TKR) :: rank(len(array, IK))
9337 : end function
9338 : #endif
9339 :
9340 : #if SK2_ENABLED
9341 : module function getRankStandardCusCom_D0_SK2(array, isSorted) result(rank)
9342 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9343 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D0_SK2
9344 : #endif
9345 : use pm_kind, only: TKR => IK, SKC => SK2
9346 : character(*,SKC) , intent(in) :: array
9347 : procedure(logical(LK)) :: isSorted
9348 : integer(TKR) :: rank(len(array, IK))
9349 : end function
9350 : #endif
9351 :
9352 : #if SK1_ENABLED
9353 : module function getRankStandardCusCom_D0_SK1(array, isSorted) result(rank)
9354 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9355 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D0_SK1
9356 : #endif
9357 : use pm_kind, only: TKR => IK, SKC => SK1
9358 : character(*,SKC) , intent(in) :: array
9359 : procedure(logical(LK)) :: isSorted
9360 : integer(TKR) :: rank(len(array, IK))
9361 : end function
9362 : #endif
9363 :
9364 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9365 :
9366 : #if SK5_ENABLED
9367 : module function getRankStandardCusCom_D1_SK5(array, isSorted) result(rank)
9368 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9369 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_SK5
9370 : #endif
9371 : use pm_kind, only: TKR => IK, SKC => SK5
9372 : character(*,SKC) , intent(in) , contiguous :: array(:)
9373 : procedure(logical(LK)) :: isSorted
9374 : integer(TKR) :: rank(size(array, kind = IK))
9375 : end function
9376 : #endif
9377 :
9378 : #if SK4_ENABLED
9379 : module function getRankStandardCusCom_D1_SK4(array, isSorted) result(rank)
9380 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9381 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_SK4
9382 : #endif
9383 : use pm_kind, only: TKR => IK, SKC => SK4
9384 : character(*,SKC) , intent(in) , contiguous :: array(:)
9385 : procedure(logical(LK)) :: isSorted
9386 : integer(TKR) :: rank(size(array, kind = IK))
9387 : end function
9388 : #endif
9389 :
9390 : #if SK3_ENABLED
9391 : module function getRankStandardCusCom_D1_SK3(array, isSorted) result(rank)
9392 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9393 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_SK3
9394 : #endif
9395 : use pm_kind, only: TKR => IK, SKC => SK3
9396 : character(*,SKC) , intent(in) , contiguous :: array(:)
9397 : procedure(logical(LK)) :: isSorted
9398 : integer(TKR) :: rank(size(array, kind = IK))
9399 : end function
9400 : #endif
9401 :
9402 : #if SK2_ENABLED
9403 : module function getRankStandardCusCom_D1_SK2(array, isSorted) result(rank)
9404 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9405 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_SK2
9406 : #endif
9407 : use pm_kind, only: TKR => IK, SKC => SK2
9408 : character(*,SKC) , intent(in) , contiguous :: array(:)
9409 : procedure(logical(LK)) :: isSorted
9410 : integer(TKR) :: rank(size(array, kind = IK))
9411 : end function
9412 : #endif
9413 :
9414 : #if SK1_ENABLED
9415 : module function getRankStandardCusCom_D1_SK1(array, isSorted) result(rank)
9416 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9417 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_SK1
9418 : #endif
9419 : use pm_kind, only: TKR => IK, SKC => SK1
9420 : character(*,SKC) , intent(in) , contiguous :: array(:)
9421 : procedure(logical(LK)) :: isSorted
9422 : integer(TKR) :: rank(size(array, kind = IK))
9423 : end function
9424 : #endif
9425 :
9426 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9427 :
9428 : #if IK5_ENABLED
9429 : module function getRankStandardCusCom_D1_IK5(array, isSorted) result(rank)
9430 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9431 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_IK5
9432 : #endif
9433 : use pm_kind, only: TKR => IK, IKC => IK5
9434 : integer(IKC) , intent(in) , contiguous :: array(:)
9435 : procedure(logical(LK)) :: isSorted
9436 : integer(TKR) :: rank(size(array, kind = IK))
9437 : end function
9438 : #endif
9439 :
9440 : #if IK4_ENABLED
9441 : module function getRankStandardCusCom_D1_IK4(array, isSorted) result(rank)
9442 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9443 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_IK4
9444 : #endif
9445 : use pm_kind, only: TKR => IK, IKC => IK4
9446 : integer(IKC) , intent(in) , contiguous :: array(:)
9447 : procedure(logical(LK)) :: isSorted
9448 : integer(TKR) :: rank(size(array, kind = IK))
9449 : end function
9450 : #endif
9451 :
9452 : #if IK3_ENABLED
9453 : module function getRankStandardCusCom_D1_IK3(array, isSorted) result(rank)
9454 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9455 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_IK3
9456 : #endif
9457 : use pm_kind, only: TKR => IK, IKC => IK3
9458 : integer(IKC) , intent(in) , contiguous :: array(:)
9459 : procedure(logical(LK)) :: isSorted
9460 : integer(TKR) :: rank(size(array, kind = IK))
9461 : end function
9462 : #endif
9463 :
9464 : #if IK2_ENABLED
9465 : module function getRankStandardCusCom_D1_IK2(array, isSorted) result(rank)
9466 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9467 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_IK2
9468 : #endif
9469 : use pm_kind, only: TKR => IK, IKC => IK2
9470 : integer(IKC) , intent(in) , contiguous :: array(:)
9471 : procedure(logical(LK)) :: isSorted
9472 : integer(TKR) :: rank(size(array, kind = IK))
9473 : end function
9474 : #endif
9475 :
9476 : #if IK1_ENABLED
9477 : module function getRankStandardCusCom_D1_IK1(array, isSorted) result(rank)
9478 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9479 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_IK1
9480 : #endif
9481 : use pm_kind, only: TKR => IK, IKC => IK1
9482 : integer(IKC) , intent(in) , contiguous :: array(:)
9483 : procedure(logical(LK)) :: isSorted
9484 : integer(TKR) :: rank(size(array, kind = IK))
9485 : end function
9486 : #endif
9487 :
9488 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9489 :
9490 : #if LK5_ENABLED
9491 : module function getRankStandardCusCom_D1_LK5(array, isSorted) result(rank)
9492 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9493 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_LK5
9494 : #endif
9495 : use pm_kind, only: TKR => IK, LKC => LK5
9496 : logical(LKC) , intent(in) , contiguous :: array(:)
9497 : procedure(logical(LK)) :: isSorted
9498 : integer(TKR) :: rank(size(array, kind = IK))
9499 : end function
9500 : #endif
9501 :
9502 : #if LK4_ENABLED
9503 : module function getRankStandardCusCom_D1_LK4(array, isSorted) result(rank)
9504 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9505 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_LK4
9506 : #endif
9507 : use pm_kind, only: TKR => IK, LKC => LK4
9508 : logical(LKC) , intent(in) , contiguous :: array(:)
9509 : procedure(logical(LK)) :: isSorted
9510 : integer(TKR) :: rank(size(array, kind = IK))
9511 : end function
9512 : #endif
9513 :
9514 : #if LK3_ENABLED
9515 : module function getRankStandardCusCom_D1_LK3(array, isSorted) result(rank)
9516 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9517 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_LK3
9518 : #endif
9519 : use pm_kind, only: TKR => IK, LKC => LK3
9520 : logical(LKC) , intent(in) , contiguous :: array(:)
9521 : procedure(logical(LK)) :: isSorted
9522 : integer(TKR) :: rank(size(array, kind = IK))
9523 : end function
9524 : #endif
9525 :
9526 : #if LK2_ENABLED
9527 : module function getRankStandardCusCom_D1_LK2(array, isSorted) result(rank)
9528 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9529 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_LK2
9530 : #endif
9531 : use pm_kind, only: TKR => IK, LKC => LK2
9532 : logical(LKC) , intent(in) , contiguous :: array(:)
9533 : procedure(logical(LK)) :: isSorted
9534 : integer(TKR) :: rank(size(array, kind = IK))
9535 : end function
9536 : #endif
9537 :
9538 : #if LK1_ENABLED
9539 : module function getRankStandardCusCom_D1_LK1(array, isSorted) result(rank)
9540 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9541 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_LK1
9542 : #endif
9543 : use pm_kind, only: TKR => IK, LKC => LK1
9544 : logical(LKC) , intent(in) , contiguous :: array(:)
9545 : procedure(logical(LK)) :: isSorted
9546 : integer(TKR) :: rank(size(array, kind = IK))
9547 : end function
9548 : #endif
9549 :
9550 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9551 :
9552 : #if CK5_ENABLED
9553 : module function getRankStandardCusCom_D1_CK5(array, isSorted) result(rank)
9554 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9555 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_CK5
9556 : #endif
9557 : use pm_kind, only: TKR => IK, CKC => CK5
9558 : complex(CKC) , intent(in) , contiguous :: array(:)
9559 : procedure(logical(LK)) :: isSorted
9560 : integer(TKR) :: rank(size(array, kind = IK))
9561 : end function
9562 : #endif
9563 :
9564 : #if CK4_ENABLED
9565 : module function getRankStandardCusCom_D1_CK4(array, isSorted) result(rank)
9566 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9567 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_CK4
9568 : #endif
9569 : use pm_kind, only: TKR => IK, CKC => CK4
9570 : complex(CKC) , intent(in) , contiguous :: array(:)
9571 : procedure(logical(LK)) :: isSorted
9572 : integer(TKR) :: rank(size(array, kind = IK))
9573 : end function
9574 : #endif
9575 :
9576 : #if CK3_ENABLED
9577 : module function getRankStandardCusCom_D1_CK3(array, isSorted) result(rank)
9578 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9579 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_CK3
9580 : #endif
9581 : use pm_kind, only: TKR => IK, CKC => CK3
9582 : complex(CKC) , intent(in) , contiguous :: array(:)
9583 : procedure(logical(LK)) :: isSorted
9584 : integer(TKR) :: rank(size(array, kind = IK))
9585 : end function
9586 : #endif
9587 :
9588 : #if CK2_ENABLED
9589 : module function getRankStandardCusCom_D1_CK2(array, isSorted) result(rank)
9590 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9591 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_CK2
9592 : #endif
9593 : use pm_kind, only: TKR => IK, CKC => CK2
9594 : complex(CKC) , intent(in) , contiguous :: array(:)
9595 : procedure(logical(LK)) :: isSorted
9596 : integer(TKR) :: rank(size(array, kind = IK))
9597 : end function
9598 : #endif
9599 :
9600 : #if CK1_ENABLED
9601 : module function getRankStandardCusCom_D1_CK1(array, isSorted) result(rank)
9602 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9603 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_CK1
9604 : #endif
9605 : use pm_kind, only: TKR => IK, CKC => CK1
9606 : complex(CKC) , intent(in) , contiguous :: array(:)
9607 : procedure(logical(LK)) :: isSorted
9608 : integer(TKR) :: rank(size(array, kind = IK))
9609 : end function
9610 : #endif
9611 :
9612 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9613 :
9614 : #if RK5_ENABLED
9615 : module function getRankStandardCusCom_D1_RK5(array, isSorted) result(rank)
9616 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9617 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_RK5
9618 : #endif
9619 : use pm_kind, only: TKR => IK, RKC => RK5
9620 : real(RKC) , intent(in) , contiguous :: array(:)
9621 : procedure(logical(LK)) :: isSorted
9622 : integer(TKR) :: rank(size(array, kind = IK))
9623 : end function
9624 : #endif
9625 :
9626 : #if RK4_ENABLED
9627 : module function getRankStandardCusCom_D1_RK4(array, isSorted) result(rank)
9628 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9629 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_RK4
9630 : #endif
9631 : use pm_kind, only: TKR => IK, RKC => RK4
9632 : real(RKC) , intent(in) , contiguous :: array(:)
9633 : procedure(logical(LK)) :: isSorted
9634 : integer(TKR) :: rank(size(array, kind = IK))
9635 : end function
9636 : #endif
9637 :
9638 : #if RK3_ENABLED
9639 : module function getRankStandardCusCom_D1_RK3(array, isSorted) result(rank)
9640 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9641 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_RK3
9642 : #endif
9643 : use pm_kind, only: TKR => IK, RKC => RK3
9644 : real(RKC) , intent(in) , contiguous :: array(:)
9645 : procedure(logical(LK)) :: isSorted
9646 : integer(TKR) :: rank(size(array, kind = IK))
9647 : end function
9648 : #endif
9649 :
9650 : #if RK2_ENABLED
9651 : module function getRankStandardCusCom_D1_RK2(array, isSorted) result(rank)
9652 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9653 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_RK2
9654 : #endif
9655 : use pm_kind, only: TKR => IK, RKC => RK2
9656 : real(RKC) , intent(in) , contiguous :: array(:)
9657 : procedure(logical(LK)) :: isSorted
9658 : integer(TKR) :: rank(size(array, kind = IK))
9659 : end function
9660 : #endif
9661 :
9662 : #if RK1_ENABLED
9663 : module function getRankStandardCusCom_D1_RK1(array, isSorted) result(rank)
9664 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9665 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_RK1
9666 : #endif
9667 : use pm_kind, only: TKR => IK, RKC => RK1
9668 : real(RKC) , intent(in) , contiguous :: array(:)
9669 : procedure(logical(LK)) :: isSorted
9670 : integer(TKR) :: rank(size(array, kind = IK))
9671 : end function
9672 : #endif
9673 :
9674 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9675 :
9676 : #if SK5_ENABLED
9677 : module function getRankStandardCusCom_D1_PSSK5(array, isSorted) result(rank)
9678 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9679 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_PSSK5
9680 : #endif
9681 : use pm_kind, only: TKR => IK, SKC => SK5
9682 : use pm_container, only: css_pdt
9683 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9684 : procedure(logical(LK)) :: isSorted
9685 : integer(TKR) :: rank(size(array, kind = IK))
9686 : end function
9687 : #endif
9688 :
9689 : #if SK4_ENABLED
9690 : module function getRankStandardCusCom_D1_PSSK4(array, isSorted) result(rank)
9691 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9692 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_PSSK4
9693 : #endif
9694 : use pm_kind, only: TKR => IK, SKC => SK4
9695 : use pm_container, only: css_pdt
9696 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9697 : procedure(logical(LK)) :: isSorted
9698 : integer(TKR) :: rank(size(array, kind = IK))
9699 : end function
9700 : #endif
9701 :
9702 : #if SK3_ENABLED
9703 : module function getRankStandardCusCom_D1_PSSK3(array, isSorted) result(rank)
9704 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9705 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_PSSK3
9706 : #endif
9707 : use pm_kind, only: TKR => IK, SKC => SK3
9708 : use pm_container, only: css_pdt
9709 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9710 : procedure(logical(LK)) :: isSorted
9711 : integer(TKR) :: rank(size(array, kind = IK))
9712 : end function
9713 : #endif
9714 :
9715 : #if SK2_ENABLED
9716 : module function getRankStandardCusCom_D1_PSSK2(array, isSorted) result(rank)
9717 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9718 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_PSSK2
9719 : #endif
9720 : use pm_kind, only: TKR => IK, SKC => SK2
9721 : use pm_container, only: css_pdt
9722 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9723 : procedure(logical(LK)) :: isSorted
9724 : integer(TKR) :: rank(size(array, kind = IK))
9725 : end function
9726 : #endif
9727 :
9728 : #if SK1_ENABLED
9729 : module function getRankStandardCusCom_D1_PSSK1(array, isSorted) result(rank)
9730 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9731 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_PSSK1
9732 : #endif
9733 : use pm_kind, only: TKR => IK, SKC => SK1
9734 : use pm_container, only: css_pdt
9735 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
9736 : integer(TKR) :: rank(size(array, kind = IK))
9737 : procedure(logical(LK)) :: isSorted
9738 : end function
9739 : #endif
9740 :
9741 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9742 :
9743 : module function getRankStandardCusCom_D1_BSSK(array, isSorted) result(rank)
9744 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9745 : !DEC$ ATTRIBUTES DLLEXPORT :: getRankStandardCusCom_D1_BSSK
9746 : #endif
9747 : use pm_kind, only: TKR => IK, SKC => SK
9748 : use pm_container, only: css_type
9749 : type(css_type) , intent(in) , contiguous :: array(:)
9750 : procedure(logical(LK)) :: isSorted
9751 : integer(TKR) :: rank(size(array, kind = IK))
9752 : end function
9753 :
9754 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9755 :
9756 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9757 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9758 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9759 :
9760 : end interface
9761 :
9762 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9763 :
9764 : !> \brief
9765 : !> Return the **Standard rank** of the input scalar string or `contiguous` `array` of rank `1` in **ascending order**
9766 : !> or in the order specified by the input procedure `isSorted()` using the Quicksort algorithm such that `array(rank)`
9767 : !> will be in ascending order (or in the requested order as specified by `isSorted()`.
9768 : !>
9769 : !> \details
9770 : !> This kind of ranking of values is widely known as <b>Standard Competition (`1224`) ranking</b>.<br>
9771 : !> In Standard Competition ranking, items that compare equal receive the same ranking number,
9772 : !> and then a gap is left in the ranking numbers. The number of ranking numbers that are left out
9773 : !> in this gap is one less than the number of items that compared equal.<br>
9774 : !> Equivalently, the ranking number of each item is `1` plus the number of items ranked above it.<br>
9775 : !> This ranking strategy is frequently adopted for competitions, as it means that if two (or more) competitors
9776 : !> tie for a position in the ranking, and the position of all those ranked below them is unaffected
9777 : !> (i.e., a competitor only comes second if exactly one person scores better than them,
9778 : !> third if exactly two people score better than them, fourth if exactly three people score better than them, etc.).<br>
9779 : !> Thus if *A* ranks ahead of *B* and *C* (which compare equal) which are both ranked ahead of *D*, then *A* gets ranking number `1` (*first*),
9780 : !> *B* gets ranking number `2` (*joint second*), *C* also gets ranking number `2` (*joint second*) and *D* gets ranking number `4` (*fourth*).
9781 : !> That is, if `A < B == C < D`, then the sequence `ABCD` has the **Standard Competition ranking** `1224`.<br>
9782 : !>
9783 : !> \param[in] array : The input `contiguous` array of rank `1` of either<br>
9784 : !> <ol>
9785 : !> <li> type [css_pdt](@ref pm_container::css_pdt) (parameterized container of string of kind \SKALL) or,<br>
9786 : !> <li> type [css_type](@ref pm_container::css_type) (container of string of default kind \SK) or,<br>
9787 : !> <li> type `character` of kind \SKALL of arbitrary length type parameter or,
9788 : !> <li> type `integer` of kind \IKALL or,<br>
9789 : !> <li> type `logical` of kind \LKALL or,<br>
9790 : !> <li> type `complex` of kind \CKALL or,<br>
9791 : !> <li> type `real` of kind \RKALL,<br>
9792 : !> </ol>
9793 : !> or,
9794 : !> <ol>
9795 : !> <li> a **scalar** of type `character` of kind \SKALL of arbitrary length type parameter,<br>
9796 : !> </ol>
9797 : !> whose elements rankings will be computed and returned.
9798 : !> \param[out] rank : The output `contiguous` array of rank `1` of type `integer` of default kind \IK
9799 : !> containing the ranks of the corresponding elements of `array`.<br>
9800 : !> The size of `rank` must match that of `array` (or its length type parameter if `array` is a scalar string).<br>
9801 : !> **Read `rank(i)` as the Standard rank of the `i`th element of `array`.**
9802 : !> \param isSorted : The `external` user-specified function that takes two input **scalar** arguments of the same type
9803 : !> and kind as the input `array`.<br>
9804 : !> It returns a scalar `logical` of default kind \LK that is `.true.` if the first
9805 : !> input scalar argument is sorted with respect to the second input argument according to the user-defined sorting condition
9806 : !> within `isSorted()`, otherwise, it is `.false.`.<br>
9807 : !> If `array` is a Fortran string (i.e., a scalar `character`),
9808 : !> then both input arguments to `isSorted()` are single `character(1,SKC)` where `SKC` is the kind of `array`.<br>
9809 : !> The following illustrates the generic interface of `isSorted()` when the rank of the input `array` is `1`,
9810 : !> \code{.F90}
9811 : !> function isSorted(a,b) result (sorted)
9812 : !> use pm_kind, only: SK, IK, LK, CK, RK
9813 : !> TYPE(KIND) , intent(in) :: a, b
9814 : !> logical(LK) :: sorted
9815 : !> end function
9816 : !> \endcode
9817 : !> where `TYPE(KIND)` represents the type and kind of the input argument `array`, which can be one of the following,
9818 : !> \code{.F90}
9819 : !> use pm_container, only: StrCon
9820 : !> use pm_kind, only: SK, IK, LK, CK, RK
9821 : !> character(*, SK), intent(in) :: a, b
9822 : !> integer(IK) , intent(in) :: a, b
9823 : !> logical(LK) , intent(in) :: a, b
9824 : !> complex(CK) , intent(in) :: a, b
9825 : !> real(RK) , intent(in) :: a, b
9826 : !> type(StrCon) , intent(in) :: a, b
9827 : !> \endcode
9828 : !> where the kinds `SK`, `IK`, `LK`, `CK`, `RK`, can refer to any kind type parameter that is supported by the processor.<br>
9829 : !> The following illustrates the generic interface of `isSorted()` when the input `array` is a scalar string,
9830 : !> \code{.F90}
9831 : !> function isSorted(a,b) result (sorted)
9832 : !> character(1,SKC), intent(in) :: a, b
9833 : !> logical(LK) :: sorted
9834 : !> end function
9835 : !> \endcode
9836 : !> where `SKC` represents the kind of the input string argument `array`.<br>
9837 : !> This user-defined equivalence check is extremely useful where a user-defined sorting criterion other than simple ascending order
9838 : !> is needed, for example, when the case-sensitivity of an input string or array of strings is irrelevant or when sorting of
9839 : !> the absolute values matters excluding the signs of the numbers, or when descending order is desired.<br>
9840 : !> In such cases, user can define a custom sorting condition within the user-defined external function `isSorted` to achieve the goal.<br>
9841 : !> (**optional**, the default sorting condition is ascending order, that is `a < b`.)
9842 : !>
9843 : !> \interface{setRankStandard}
9844 : !> \code{.F90}
9845 : !>
9846 : !> use pm_arrayRank, only: setRankStandard
9847 : !>
9848 : !> call setRankStandard(rank, array)
9849 : !> call setRankStandard(rank, array, isSorted)
9850 : !>
9851 : !> \endcode
9852 : !>
9853 : !> \warning
9854 : !> Note that the definition of `isSorted()`, if present, must be such that `isSorted() .and. .not. isSorted()`
9855 : !> is equivalent to an equality check for two elements of the input `array`. This equality check is used to
9856 : !> identify ties within the Standard ranking of the input `array`.
9857 : !>
9858 : !> \warnpure
9859 : !>
9860 : !> \warning
9861 : !> The procedures under this generic interface are always `impure` when the input argument `isSorted` is present.
9862 : !>
9863 : !> \see
9864 : !> [setSelected](@ref pm_arraySelect::setSelected)<br>
9865 : !> [getRankDense](@ref pm_arrayRank::getRankDense)<br>
9866 : !> [setRankDense](@ref pm_arrayRank::setRankDense)<br>
9867 : !> [getRankOrdinal](@ref pm_arrayRank::getRankOrdinal)<br>
9868 : !> [setRankOrdinal](@ref pm_arrayRank::setRankOrdinal)<br>
9869 : !> [getRankFractional](@ref pm_arrayRank::getRankFractional)<br>
9870 : !> [setRankFractional](@ref pm_arrayRank::setRankFractional)<br>
9871 : !> [getRankStandard](@ref pm_arrayRank::getRankStandard)<br>
9872 : !> [setRankStandard](@ref pm_arrayRank::setRankStandard)<br>
9873 : !> [getRankModified](@ref pm_arrayRank::getRankModified)<br>
9874 : !> [setRankModified](@ref pm_arrayRank::setRankModified)<br>
9875 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
9876 : !> [setSorted](@ref pm_arraySort::setSorted)<br>
9877 : !>
9878 : !> \example{setRankStandard}
9879 : !> \include{lineno} example/pm_arrayRank/setRankStandard/main.F90
9880 : !> \compilef{setRankStandard}
9881 : !> \output{setRankStandard}
9882 : !> \include{lineno} example/pm_arrayRank/setRankStandard/main.out.F90
9883 : !>
9884 : !> \test
9885 : !> [test_pm_arrayRank](@ref test_pm_arrayRank)
9886 : !>
9887 : !> \bug
9888 : !> \status \unresolved
9889 : !> \source \ifort{2021.5}
9890 : !> \desc
9891 : !> See [pm_arraySplit](@ref pm_arraySplit) for the description of a relevant bug in PDT
9892 : !> name aliasing when compiled with Intel ifort 2021.5 that also applies to this module.
9893 : !> \remedy
9894 : !> See [pm_arraySplit](@ref pm_arraySplit) for the remedy.<br>
9895 : !>
9896 : !> \todo
9897 : !> \plow The current bypass for the PDT name aliasing bug can be reverted back to PDT name aliasing once the ifort bug is resolved.
9898 : !>
9899 : !> \todo
9900 : !> \plow A test should be implemented for arrays of size that can be represented *only* by an \IKD integer.
9901 : !>
9902 : !> \finmain{setRankStandard}
9903 : !>
9904 : !> \author
9905 : !> \AmirShahmoradi, April 21, 2017, 1:54 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin
9906 : interface setRankStandard
9907 :
9908 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9909 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9910 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9911 :
9912 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9913 :
9914 : #if SK5_ENABLED
9915 : PURE module subroutine setRankStandardDefCom_D0_SK5(rank, array)
9916 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9917 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D0_SK5
9918 : #endif
9919 : use pm_kind, only: TKR => IK, SKC => SK5
9920 : character(*,SKC) , intent(in) :: array
9921 : integer(TKR) , intent(out) , contiguous :: rank(:)
9922 : end subroutine
9923 : #endif
9924 :
9925 : #if SK4_ENABLED
9926 : PURE module subroutine setRankStandardDefCom_D0_SK4(rank, array)
9927 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9928 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D0_SK4
9929 : #endif
9930 : use pm_kind, only: TKR => IK, SKC => SK4
9931 : character(*,SKC) , intent(in) :: array
9932 : integer(TKR) , intent(out) , contiguous :: rank(:)
9933 : end subroutine
9934 : #endif
9935 :
9936 : #if SK3_ENABLED
9937 : PURE module subroutine setRankStandardDefCom_D0_SK3(rank, array)
9938 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9939 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D0_SK3
9940 : #endif
9941 : use pm_kind, only: TKR => IK, SKC => SK3
9942 : character(*,SKC) , intent(in) :: array
9943 : integer(TKR) , intent(out) , contiguous :: rank(:)
9944 : end subroutine
9945 : #endif
9946 :
9947 : #if SK2_ENABLED
9948 : PURE module subroutine setRankStandardDefCom_D0_SK2(rank, array)
9949 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9950 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D0_SK2
9951 : #endif
9952 : use pm_kind, only: TKR => IK, SKC => SK2
9953 : character(*,SKC) , intent(in) :: array
9954 : integer(TKR) , intent(out) , contiguous :: rank(:)
9955 : end subroutine
9956 : #endif
9957 :
9958 : #if SK1_ENABLED
9959 : PURE module subroutine setRankStandardDefCom_D0_SK1(rank, array)
9960 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9961 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D0_SK1
9962 : #endif
9963 : use pm_kind, only: TKR => IK, SKC => SK1
9964 : character(*,SKC) , intent(in) :: array
9965 : integer(TKR) , intent(out) , contiguous :: rank(:)
9966 : end subroutine
9967 : #endif
9968 :
9969 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9970 :
9971 : #if SK5_ENABLED
9972 : PURE module subroutine setRankStandardDefCom_D1_SK5(rank, array)
9973 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9974 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_SK5
9975 : #endif
9976 : use pm_kind, only: TKR => IK, SKC => SK5
9977 : character(*,SKC) , intent(in) , contiguous :: array(:)
9978 : integer(TKR) , intent(out) , contiguous :: rank(:)
9979 : end subroutine
9980 : #endif
9981 :
9982 : #if SK4_ENABLED
9983 : PURE module subroutine setRankStandardDefCom_D1_SK4(rank, array)
9984 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9985 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_SK4
9986 : #endif
9987 : use pm_kind, only: TKR => IK, SKC => SK4
9988 : character(*,SKC) , intent(in) , contiguous :: array(:)
9989 : integer(TKR) , intent(out) , contiguous :: rank(:)
9990 : end subroutine
9991 : #endif
9992 :
9993 : #if SK3_ENABLED
9994 : PURE module subroutine setRankStandardDefCom_D1_SK3(rank, array)
9995 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
9996 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_SK3
9997 : #endif
9998 : use pm_kind, only: TKR => IK, SKC => SK3
9999 : character(*,SKC) , intent(in) , contiguous :: array(:)
10000 : integer(TKR) , intent(out) , contiguous :: rank(:)
10001 : end subroutine
10002 : #endif
10003 :
10004 : #if SK2_ENABLED
10005 : PURE module subroutine setRankStandardDefCom_D1_SK2(rank, array)
10006 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10007 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_SK2
10008 : #endif
10009 : use pm_kind, only: TKR => IK, SKC => SK2
10010 : character(*,SKC) , intent(in) , contiguous :: array(:)
10011 : integer(TKR) , intent(out) , contiguous :: rank(:)
10012 : end subroutine
10013 : #endif
10014 :
10015 : #if SK1_ENABLED
10016 : PURE module subroutine setRankStandardDefCom_D1_SK1(rank, array)
10017 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10018 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_SK1
10019 : #endif
10020 : use pm_kind, only: TKR => IK, SKC => SK1
10021 : character(*,SKC) , intent(in) , contiguous :: array(:)
10022 : integer(TKR) , intent(out) , contiguous :: rank(:)
10023 : end subroutine
10024 : #endif
10025 :
10026 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10027 :
10028 : #if IK5_ENABLED
10029 : PURE module subroutine setRankStandardDefCom_D1_IK5(rank, array)
10030 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10031 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_IK5
10032 : #endif
10033 : use pm_kind, only: TKR => IK, IKC => IK5
10034 : integer(IKC) , intent(in) , contiguous :: array(:)
10035 : integer(TKR) , intent(out) , contiguous :: rank(:)
10036 : end subroutine
10037 : #endif
10038 :
10039 : #if IK4_ENABLED
10040 : PURE module subroutine setRankStandardDefCom_D1_IK4(rank, array)
10041 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10042 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_IK4
10043 : #endif
10044 : use pm_kind, only: TKR => IK, IKC => IK4
10045 : integer(IKC) , intent(in) , contiguous :: array(:)
10046 : integer(TKR) , intent(out) , contiguous :: rank(:)
10047 : end subroutine
10048 : #endif
10049 :
10050 : #if IK3_ENABLED
10051 : PURE module subroutine setRankStandardDefCom_D1_IK3(rank, array)
10052 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10053 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_IK3
10054 : #endif
10055 : use pm_kind, only: TKR => IK, IKC => IK3
10056 : integer(IKC) , intent(in) , contiguous :: array(:)
10057 : integer(TKR) , intent(out) , contiguous :: rank(:)
10058 : end subroutine
10059 : #endif
10060 :
10061 : #if IK2_ENABLED
10062 : PURE module subroutine setRankStandardDefCom_D1_IK2(rank, array)
10063 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10064 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_IK2
10065 : #endif
10066 : use pm_kind, only: TKR => IK, IKC => IK2
10067 : integer(IKC) , intent(in) , contiguous :: array(:)
10068 : integer(TKR) , intent(out) , contiguous :: rank(:)
10069 : end subroutine
10070 : #endif
10071 :
10072 : #if IK1_ENABLED
10073 : PURE module subroutine setRankStandardDefCom_D1_IK1(rank, array)
10074 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10075 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_IK1
10076 : #endif
10077 : use pm_kind, only: TKR => IK, IKC => IK1
10078 : integer(IKC) , intent(in) , contiguous :: array(:)
10079 : integer(TKR) , intent(out) , contiguous :: rank(:)
10080 : end subroutine
10081 : #endif
10082 :
10083 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10084 :
10085 : #if LK5_ENABLED
10086 : PURE module subroutine setRankStandardDefCom_D1_LK5(rank, array)
10087 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10088 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_LK5
10089 : #endif
10090 : use pm_kind, only: TKR => IK, LKC => LK5
10091 : logical(LKC) , intent(in) , contiguous :: array(:)
10092 : integer(TKR) , intent(out) , contiguous :: rank(:)
10093 : end subroutine
10094 : #endif
10095 :
10096 : #if LK4_ENABLED
10097 : PURE module subroutine setRankStandardDefCom_D1_LK4(rank, array)
10098 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10099 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_LK4
10100 : #endif
10101 : use pm_kind, only: TKR => IK, LKC => LK4
10102 : logical(LKC) , intent(in) , contiguous :: array(:)
10103 : integer(TKR) , intent(out) , contiguous :: rank(:)
10104 : end subroutine
10105 : #endif
10106 :
10107 : #if LK3_ENABLED
10108 : PURE module subroutine setRankStandardDefCom_D1_LK3(rank, array)
10109 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10110 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_LK3
10111 : #endif
10112 : use pm_kind, only: TKR => IK, LKC => LK3
10113 : logical(LKC) , intent(in) , contiguous :: array(:)
10114 : integer(TKR) , intent(out) , contiguous :: rank(:)
10115 : end subroutine
10116 : #endif
10117 :
10118 : #if LK2_ENABLED
10119 : PURE module subroutine setRankStandardDefCom_D1_LK2(rank, array)
10120 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10121 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_LK2
10122 : #endif
10123 : use pm_kind, only: TKR => IK, LKC => LK2
10124 : logical(LKC) , intent(in) , contiguous :: array(:)
10125 : integer(TKR) , intent(out) , contiguous :: rank(:)
10126 : end subroutine
10127 : #endif
10128 :
10129 : #if LK1_ENABLED
10130 : PURE module subroutine setRankStandardDefCom_D1_LK1(rank, array)
10131 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10132 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_LK1
10133 : #endif
10134 : use pm_kind, only: TKR => IK, LKC => LK1
10135 : logical(LKC) , intent(in) , contiguous :: array(:)
10136 : integer(TKR) , intent(out) , contiguous :: rank(:)
10137 : end subroutine
10138 : #endif
10139 :
10140 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10141 :
10142 : #if CK5_ENABLED
10143 : PURE module subroutine setRankStandardDefCom_D1_CK5(rank, array)
10144 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10145 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_CK5
10146 : #endif
10147 : use pm_kind, only: TKR => IK, CKC => CK5
10148 : complex(CKC) , intent(in) , contiguous :: array(:)
10149 : integer(TKR) , intent(out) , contiguous :: rank(:)
10150 : end subroutine
10151 : #endif
10152 :
10153 : #if CK4_ENABLED
10154 : PURE module subroutine setRankStandardDefCom_D1_CK4(rank, array)
10155 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10156 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_CK4
10157 : #endif
10158 : use pm_kind, only: TKR => IK, CKC => CK4
10159 : complex(CKC) , intent(in) , contiguous :: array(:)
10160 : integer(TKR) , intent(out) , contiguous :: rank(:)
10161 : end subroutine
10162 : #endif
10163 :
10164 : #if CK3_ENABLED
10165 : PURE module subroutine setRankStandardDefCom_D1_CK3(rank, array)
10166 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10167 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_CK3
10168 : #endif
10169 : use pm_kind, only: TKR => IK, CKC => CK3
10170 : complex(CKC) , intent(in) , contiguous :: array(:)
10171 : integer(TKR) , intent(out) , contiguous :: rank(:)
10172 : end subroutine
10173 : #endif
10174 :
10175 : #if CK2_ENABLED
10176 : PURE module subroutine setRankStandardDefCom_D1_CK2(rank, array)
10177 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10178 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_CK2
10179 : #endif
10180 : use pm_kind, only: TKR => IK, CKC => CK2
10181 : complex(CKC) , intent(in) , contiguous :: array(:)
10182 : integer(TKR) , intent(out) , contiguous :: rank(:)
10183 : end subroutine
10184 : #endif
10185 :
10186 : #if CK1_ENABLED
10187 : PURE module subroutine setRankStandardDefCom_D1_CK1(rank, array)
10188 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10189 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_CK1
10190 : #endif
10191 : use pm_kind, only: TKR => IK, CKC => CK1
10192 : complex(CKC) , intent(in) , contiguous :: array(:)
10193 : integer(TKR) , intent(out) , contiguous :: rank(:)
10194 : end subroutine
10195 : #endif
10196 :
10197 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10198 :
10199 : #if RK5_ENABLED
10200 : PURE module subroutine setRankStandardDefCom_D1_RK5(rank, array)
10201 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10202 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_RK5
10203 : #endif
10204 : use pm_kind, only: TKR => IK, RKC => RK5
10205 : real(RKC) , intent(in) , contiguous :: array(:)
10206 : integer(TKR) , intent(out) , contiguous :: rank(:)
10207 : end subroutine
10208 : #endif
10209 :
10210 : #if RK4_ENABLED
10211 : PURE module subroutine setRankStandardDefCom_D1_RK4(rank, array)
10212 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10213 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_RK4
10214 : #endif
10215 : use pm_kind, only: TKR => IK, RKC => RK4
10216 : real(RKC) , intent(in) , contiguous :: array(:)
10217 : integer(TKR) , intent(out) , contiguous :: rank(:)
10218 : end subroutine
10219 : #endif
10220 :
10221 : #if RK3_ENABLED
10222 : PURE module subroutine setRankStandardDefCom_D1_RK3(rank, array)
10223 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10224 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_RK3
10225 : #endif
10226 : use pm_kind, only: TKR => IK, RKC => RK3
10227 : real(RKC) , intent(in) , contiguous :: array(:)
10228 : integer(TKR) , intent(out) , contiguous :: rank(:)
10229 : end subroutine
10230 : #endif
10231 :
10232 : #if RK2_ENABLED
10233 : PURE module subroutine setRankStandardDefCom_D1_RK2(rank, array)
10234 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10235 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_RK2
10236 : #endif
10237 : use pm_kind, only: TKR => IK, RKC => RK2
10238 : real(RKC) , intent(in) , contiguous :: array(:)
10239 : integer(TKR) , intent(out) , contiguous :: rank(:)
10240 : end subroutine
10241 : #endif
10242 :
10243 : #if RK1_ENABLED
10244 : PURE module subroutine setRankStandardDefCom_D1_RK1(rank, array)
10245 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10246 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_RK1
10247 : #endif
10248 : use pm_kind, only: TKR => IK, RKC => RK1
10249 : real(RKC) , intent(in) , contiguous :: array(:)
10250 : integer(TKR) , intent(out) , contiguous :: rank(:)
10251 : end subroutine
10252 : #endif
10253 :
10254 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10255 :
10256 : #if SK5_ENABLED
10257 : PURE module subroutine setRankStandardDefCom_D1_PSSK5(rank, array)
10258 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10259 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_PSSK5
10260 : #endif
10261 : use pm_kind, only: TKR => IK, SKC => SK5
10262 : use pm_container, only: css_pdt
10263 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10264 : integer(TKR) , intent(out) , contiguous :: rank(:)
10265 : end subroutine
10266 : #endif
10267 :
10268 : #if SK4_ENABLED
10269 : PURE module subroutine setRankStandardDefCom_D1_PSSK4(rank, array)
10270 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10271 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_PSSK4
10272 : #endif
10273 : use pm_kind, only: TKR => IK, SKC => SK4
10274 : use pm_container, only: css_pdt
10275 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10276 : integer(TKR) , intent(out) , contiguous :: rank(:)
10277 : end subroutine
10278 : #endif
10279 :
10280 : #if SK3_ENABLED
10281 : PURE module subroutine setRankStandardDefCom_D1_PSSK3(rank, array)
10282 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10283 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_PSSK3
10284 : #endif
10285 : use pm_kind, only: TKR => IK, SKC => SK3
10286 : use pm_container, only: css_pdt
10287 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10288 : integer(TKR) , intent(out) , contiguous :: rank(:)
10289 : end subroutine
10290 : #endif
10291 :
10292 : #if SK2_ENABLED
10293 : PURE module subroutine setRankStandardDefCom_D1_PSSK2(rank, array)
10294 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10295 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_PSSK2
10296 : #endif
10297 : use pm_kind, only: TKR => IK, SKC => SK2
10298 : use pm_container, only: css_pdt
10299 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10300 : integer(TKR) , intent(out) , contiguous :: rank(:)
10301 : end subroutine
10302 : #endif
10303 :
10304 : #if SK1_ENABLED
10305 : PURE module subroutine setRankStandardDefCom_D1_PSSK1(rank, array)
10306 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10307 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_PSSK1
10308 : #endif
10309 : use pm_kind, only: TKR => IK, SKC => SK1
10310 : use pm_container, only: css_pdt
10311 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10312 : integer(TKR) , intent(out) , contiguous :: rank(:)
10313 : end subroutine
10314 : #endif
10315 :
10316 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10317 :
10318 : PURE module subroutine setRankStandardDefCom_D1_BSSK(rank, array)
10319 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10320 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardDefCom_D1_BSSK
10321 : #endif
10322 : use pm_kind, only: TKR => IK, SKC => SK
10323 : use pm_container, only: css_type
10324 : type(css_type) , intent(in) , contiguous :: array(:)
10325 : integer(TKR) , intent(out) , contiguous :: rank(:)
10326 : end subroutine
10327 :
10328 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10329 :
10330 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10331 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10332 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10333 :
10334 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10335 :
10336 : #if SK5_ENABLED
10337 : module subroutine setRankStandardCusCom_D0_SK5(rank, array, isSorted)
10338 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10339 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D0_SK5
10340 : #endif
10341 : use pm_kind, only: TKR => IK, SKC => SK5
10342 : character(*,SKC) , intent(in) :: array
10343 : integer(TKR) , intent(out) , contiguous :: rank(:)
10344 : procedure(logical(LK)) :: isSorted
10345 : end subroutine
10346 : #endif
10347 :
10348 : #if SK4_ENABLED
10349 : module subroutine setRankStandardCusCom_D0_SK4(rank, array, isSorted)
10350 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10351 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D0_SK4
10352 : #endif
10353 : use pm_kind, only: TKR => IK, SKC => SK4
10354 : character(*,SKC) , intent(in) :: array
10355 : integer(TKR) , intent(out) , contiguous :: rank(:)
10356 : procedure(logical(LK)) :: isSorted
10357 : end subroutine
10358 : #endif
10359 :
10360 : #if SK3_ENABLED
10361 : module subroutine setRankStandardCusCom_D0_SK3(rank, array, isSorted)
10362 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10363 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D0_SK3
10364 : #endif
10365 : use pm_kind, only: TKR => IK, SKC => SK3
10366 : character(*,SKC) , intent(in) :: array
10367 : integer(TKR) , intent(out) , contiguous :: rank(:)
10368 : procedure(logical(LK)) :: isSorted
10369 : end subroutine
10370 : #endif
10371 :
10372 : #if SK2_ENABLED
10373 : module subroutine setRankStandardCusCom_D0_SK2(rank, array, isSorted)
10374 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10375 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D0_SK2
10376 : #endif
10377 : use pm_kind, only: TKR => IK, SKC => SK2
10378 : character(*,SKC) , intent(in) :: array
10379 : integer(TKR) , intent(out) , contiguous :: rank(:)
10380 : procedure(logical(LK)) :: isSorted
10381 : end subroutine
10382 : #endif
10383 :
10384 : #if SK1_ENABLED
10385 : module subroutine setRankStandardCusCom_D0_SK1(rank, array, isSorted)
10386 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10387 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D0_SK1
10388 : #endif
10389 : use pm_kind, only: TKR => IK, SKC => SK1
10390 : character(*,SKC) , intent(in) :: array
10391 : integer(TKR) , intent(out) , contiguous :: rank(:)
10392 : procedure(logical(LK)) :: isSorted
10393 : end subroutine
10394 : #endif
10395 :
10396 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10397 :
10398 : #if SK5_ENABLED
10399 : module subroutine setRankStandardCusCom_D1_SK5(rank, array, isSorted)
10400 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10401 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_SK5
10402 : #endif
10403 : use pm_kind, only: TKR => IK, SKC => SK5
10404 : character(*,SKC) , intent(in) , contiguous :: array(:)
10405 : integer(TKR) , intent(out) , contiguous :: rank(:)
10406 : procedure(logical(LK)) :: isSorted
10407 : end subroutine
10408 : #endif
10409 :
10410 : #if SK4_ENABLED
10411 : module subroutine setRankStandardCusCom_D1_SK4(rank, array, isSorted)
10412 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10413 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_SK4
10414 : #endif
10415 : use pm_kind, only: TKR => IK, SKC => SK4
10416 : character(*,SKC) , intent(in) , contiguous :: array(:)
10417 : integer(TKR) , intent(out) , contiguous :: rank(:)
10418 : procedure(logical(LK)) :: isSorted
10419 : end subroutine
10420 : #endif
10421 :
10422 : #if SK3_ENABLED
10423 : module subroutine setRankStandardCusCom_D1_SK3(rank, array, isSorted)
10424 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10425 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_SK3
10426 : #endif
10427 : use pm_kind, only: TKR => IK, SKC => SK3
10428 : character(*,SKC) , intent(in) , contiguous :: array(:)
10429 : integer(TKR) , intent(out) , contiguous :: rank(:)
10430 : procedure(logical(LK)) :: isSorted
10431 : end subroutine
10432 : #endif
10433 :
10434 : #if SK2_ENABLED
10435 : module subroutine setRankStandardCusCom_D1_SK2(rank, array, isSorted)
10436 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10437 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_SK2
10438 : #endif
10439 : use pm_kind, only: TKR => IK, SKC => SK2
10440 : character(*,SKC) , intent(in) , contiguous :: array(:)
10441 : integer(TKR) , intent(out) , contiguous :: rank(:)
10442 : procedure(logical(LK)) :: isSorted
10443 : end subroutine
10444 : #endif
10445 :
10446 : #if SK1_ENABLED
10447 : module subroutine setRankStandardCusCom_D1_SK1(rank, array, isSorted)
10448 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10449 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_SK1
10450 : #endif
10451 : use pm_kind, only: TKR => IK, SKC => SK1
10452 : character(*,SKC) , intent(in) , contiguous :: array(:)
10453 : integer(TKR) , intent(out) , contiguous :: rank(:)
10454 : procedure(logical(LK)) :: isSorted
10455 : end subroutine
10456 : #endif
10457 :
10458 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10459 :
10460 : #if IK5_ENABLED
10461 : module subroutine setRankStandardCusCom_D1_IK5(rank, array, isSorted)
10462 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10463 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_IK5
10464 : #endif
10465 : use pm_kind, only: TKR => IK, IKC => IK5
10466 : integer(IKC) , intent(in) , contiguous :: array(:)
10467 : integer(TKR) , intent(out) , contiguous :: rank(:)
10468 : procedure(logical(LK)) :: isSorted
10469 : end subroutine
10470 : #endif
10471 :
10472 : #if IK4_ENABLED
10473 : module subroutine setRankStandardCusCom_D1_IK4(rank, array, isSorted)
10474 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10475 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_IK4
10476 : #endif
10477 : use pm_kind, only: TKR => IK, IKC => IK4
10478 : integer(IKC) , intent(in) , contiguous :: array(:)
10479 : integer(TKR) , intent(out) , contiguous :: rank(:)
10480 : procedure(logical(LK)) :: isSorted
10481 : end subroutine
10482 : #endif
10483 :
10484 : #if IK3_ENABLED
10485 : module subroutine setRankStandardCusCom_D1_IK3(rank, array, isSorted)
10486 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10487 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_IK3
10488 : #endif
10489 : use pm_kind, only: TKR => IK, IKC => IK3
10490 : integer(IKC) , intent(in) , contiguous :: array(:)
10491 : integer(TKR) , intent(out) , contiguous :: rank(:)
10492 : procedure(logical(LK)) :: isSorted
10493 : end subroutine
10494 : #endif
10495 :
10496 : #if IK2_ENABLED
10497 : module subroutine setRankStandardCusCom_D1_IK2(rank, array, isSorted)
10498 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10499 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_IK2
10500 : #endif
10501 : use pm_kind, only: TKR => IK, IKC => IK2
10502 : integer(IKC) , intent(in) , contiguous :: array(:)
10503 : integer(TKR) , intent(out) , contiguous :: rank(:)
10504 : procedure(logical(LK)) :: isSorted
10505 : end subroutine
10506 : #endif
10507 :
10508 : #if IK1_ENABLED
10509 : module subroutine setRankStandardCusCom_D1_IK1(rank, array, isSorted)
10510 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10511 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_IK1
10512 : #endif
10513 : use pm_kind, only: TKR => IK, IKC => IK1
10514 : integer(IKC) , intent(in) , contiguous :: array(:)
10515 : integer(TKR) , intent(out) , contiguous :: rank(:)
10516 : procedure(logical(LK)) :: isSorted
10517 : end subroutine
10518 : #endif
10519 :
10520 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10521 :
10522 : #if LK5_ENABLED
10523 : module subroutine setRankStandardCusCom_D1_LK5(rank, array, isSorted)
10524 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10525 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_LK5
10526 : #endif
10527 : use pm_kind, only: TKR => IK, LKC => LK5
10528 : logical(LKC) , intent(in) , contiguous :: array(:)
10529 : integer(TKR) , intent(out) , contiguous :: rank(:)
10530 : procedure(logical(LK)) :: isSorted
10531 : end subroutine
10532 : #endif
10533 :
10534 : #if LK4_ENABLED
10535 : module subroutine setRankStandardCusCom_D1_LK4(rank, array, isSorted)
10536 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10537 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_LK4
10538 : #endif
10539 : use pm_kind, only: TKR => IK, LKC => LK4
10540 : logical(LKC) , intent(in) , contiguous :: array(:)
10541 : integer(TKR) , intent(out) , contiguous :: rank(:)
10542 : procedure(logical(LK)) :: isSorted
10543 : end subroutine
10544 : #endif
10545 :
10546 : #if LK3_ENABLED
10547 : module subroutine setRankStandardCusCom_D1_LK3(rank, array, isSorted)
10548 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10549 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_LK3
10550 : #endif
10551 : use pm_kind, only: TKR => IK, LKC => LK3
10552 : logical(LKC) , intent(in) , contiguous :: array(:)
10553 : integer(TKR) , intent(out) , contiguous :: rank(:)
10554 : procedure(logical(LK)) :: isSorted
10555 : end subroutine
10556 : #endif
10557 :
10558 : #if LK2_ENABLED
10559 : module subroutine setRankStandardCusCom_D1_LK2(rank, array, isSorted)
10560 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10561 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_LK2
10562 : #endif
10563 : use pm_kind, only: TKR => IK, LKC => LK2
10564 : logical(LKC) , intent(in) , contiguous :: array(:)
10565 : integer(TKR) , intent(out) , contiguous :: rank(:)
10566 : procedure(logical(LK)) :: isSorted
10567 : end subroutine
10568 : #endif
10569 :
10570 : #if LK1_ENABLED
10571 : module subroutine setRankStandardCusCom_D1_LK1(rank, array, isSorted)
10572 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10573 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_LK1
10574 : #endif
10575 : use pm_kind, only: TKR => IK, LKC => LK1
10576 : logical(LKC) , intent(in) , contiguous :: array(:)
10577 : integer(TKR) , intent(out) , contiguous :: rank(:)
10578 : procedure(logical(LK)) :: isSorted
10579 : end subroutine
10580 : #endif
10581 :
10582 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10583 :
10584 : #if CK5_ENABLED
10585 : module subroutine setRankStandardCusCom_D1_CK5(rank, array, isSorted)
10586 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10587 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_CK5
10588 : #endif
10589 : use pm_kind, only: TKR => IK, CKC => CK5
10590 : complex(CKC) , intent(in) , contiguous :: array(:)
10591 : integer(TKR) , intent(out) , contiguous :: rank(:)
10592 : procedure(logical(LK)) :: isSorted
10593 : end subroutine
10594 : #endif
10595 :
10596 : #if CK4_ENABLED
10597 : module subroutine setRankStandardCusCom_D1_CK4(rank, array, isSorted)
10598 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10599 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_CK4
10600 : #endif
10601 : use pm_kind, only: TKR => IK, CKC => CK4
10602 : complex(CKC) , intent(in) , contiguous :: array(:)
10603 : integer(TKR) , intent(out) , contiguous :: rank(:)
10604 : procedure(logical(LK)) :: isSorted
10605 : end subroutine
10606 : #endif
10607 :
10608 : #if CK3_ENABLED
10609 : module subroutine setRankStandardCusCom_D1_CK3(rank, array, isSorted)
10610 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10611 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_CK3
10612 : #endif
10613 : use pm_kind, only: TKR => IK, CKC => CK3
10614 : complex(CKC) , intent(in) , contiguous :: array(:)
10615 : integer(TKR) , intent(out) , contiguous :: rank(:)
10616 : procedure(logical(LK)) :: isSorted
10617 : end subroutine
10618 : #endif
10619 :
10620 : #if CK2_ENABLED
10621 : module subroutine setRankStandardCusCom_D1_CK2(rank, array, isSorted)
10622 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10623 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_CK2
10624 : #endif
10625 : use pm_kind, only: TKR => IK, CKC => CK2
10626 : complex(CKC) , intent(in) , contiguous :: array(:)
10627 : integer(TKR) , intent(out) , contiguous :: rank(:)
10628 : procedure(logical(LK)) :: isSorted
10629 : end subroutine
10630 : #endif
10631 :
10632 : #if CK1_ENABLED
10633 : module subroutine setRankStandardCusCom_D1_CK1(rank, array, isSorted)
10634 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10635 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_CK1
10636 : #endif
10637 : use pm_kind, only: TKR => IK, CKC => CK1
10638 : complex(CKC) , intent(in) , contiguous :: array(:)
10639 : integer(TKR) , intent(out) , contiguous :: rank(:)
10640 : procedure(logical(LK)) :: isSorted
10641 : end subroutine
10642 : #endif
10643 :
10644 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10645 :
10646 : #if RK5_ENABLED
10647 : module subroutine setRankStandardCusCom_D1_RK5(rank, array, isSorted)
10648 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10649 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_RK5
10650 : #endif
10651 : use pm_kind, only: TKR => IK, RKC => RK5
10652 : real(RKC) , intent(in) , contiguous :: array(:)
10653 : integer(TKR) , intent(out) , contiguous :: rank(:)
10654 : procedure(logical(LK)) :: isSorted
10655 : end subroutine
10656 : #endif
10657 :
10658 : #if RK4_ENABLED
10659 : module subroutine setRankStandardCusCom_D1_RK4(rank, array, isSorted)
10660 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10661 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_RK4
10662 : #endif
10663 : use pm_kind, only: TKR => IK, RKC => RK4
10664 : real(RKC) , intent(in) , contiguous :: array(:)
10665 : integer(TKR) , intent(out) , contiguous :: rank(:)
10666 : procedure(logical(LK)) :: isSorted
10667 : end subroutine
10668 : #endif
10669 :
10670 : #if RK3_ENABLED
10671 : module subroutine setRankStandardCusCom_D1_RK3(rank, array, isSorted)
10672 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10673 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_RK3
10674 : #endif
10675 : use pm_kind, only: TKR => IK, RKC => RK3
10676 : real(RKC) , intent(in) , contiguous :: array(:)
10677 : integer(TKR) , intent(out) , contiguous :: rank(:)
10678 : procedure(logical(LK)) :: isSorted
10679 : end subroutine
10680 : #endif
10681 :
10682 : #if RK2_ENABLED
10683 : module subroutine setRankStandardCusCom_D1_RK2(rank, array, isSorted)
10684 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10685 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_RK2
10686 : #endif
10687 : use pm_kind, only: TKR => IK, RKC => RK2
10688 : real(RKC) , intent(in) , contiguous :: array(:)
10689 : integer(TKR) , intent(out) , contiguous :: rank(:)
10690 : procedure(logical(LK)) :: isSorted
10691 : end subroutine
10692 : #endif
10693 :
10694 : #if RK1_ENABLED
10695 : module subroutine setRankStandardCusCom_D1_RK1(rank, array, isSorted)
10696 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10697 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_RK1
10698 : #endif
10699 : use pm_kind, only: TKR => IK, RKC => RK1
10700 : real(RKC) , intent(in) , contiguous :: array(:)
10701 : integer(TKR) , intent(out) , contiguous :: rank(:)
10702 : procedure(logical(LK)) :: isSorted
10703 : end subroutine
10704 : #endif
10705 :
10706 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10707 :
10708 : #if SK5_ENABLED
10709 : module subroutine setRankStandardCusCom_D1_PSSK5(rank, array, isSorted)
10710 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10711 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_PSSK5
10712 : #endif
10713 : use pm_kind, only: TKR => IK, SKC => SK5
10714 : use pm_container, only: css_pdt
10715 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10716 : integer(TKR) , intent(out) , contiguous :: rank(:)
10717 : procedure(logical(LK)) :: isSorted
10718 : end subroutine
10719 : #endif
10720 :
10721 : #if SK4_ENABLED
10722 : module subroutine setRankStandardCusCom_D1_PSSK4(rank, array, isSorted)
10723 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10724 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_PSSK4
10725 : #endif
10726 : use pm_kind, only: TKR => IK, SKC => SK4
10727 : use pm_container, only: css_pdt
10728 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10729 : integer(TKR) , intent(out) , contiguous :: rank(:)
10730 : procedure(logical(LK)) :: isSorted
10731 : end subroutine
10732 : #endif
10733 :
10734 : #if SK3_ENABLED
10735 : module subroutine setRankStandardCusCom_D1_PSSK3(rank, array, isSorted)
10736 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10737 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_PSSK3
10738 : #endif
10739 : use pm_kind, only: TKR => IK, SKC => SK3
10740 : use pm_container, only: css_pdt
10741 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10742 : integer(TKR) , intent(out) , contiguous :: rank(:)
10743 : procedure(logical(LK)) :: isSorted
10744 : end subroutine
10745 : #endif
10746 :
10747 : #if SK2_ENABLED
10748 : module subroutine setRankStandardCusCom_D1_PSSK2(rank, array, isSorted)
10749 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10750 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_PSSK2
10751 : #endif
10752 : use pm_kind, only: TKR => IK, SKC => SK2
10753 : use pm_container, only: css_pdt
10754 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10755 : integer(TKR) , intent(out) , contiguous :: rank(:)
10756 : procedure(logical(LK)) :: isSorted
10757 : end subroutine
10758 : #endif
10759 :
10760 : #if SK1_ENABLED
10761 : module subroutine setRankStandardCusCom_D1_PSSK1(rank, array, isSorted)
10762 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10763 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_PSSK1
10764 : #endif
10765 : use pm_kind, only: TKR => IK, SKC => SK1
10766 : use pm_container, only: css_pdt
10767 : type(css_pdt(SKC)) , intent(in) , contiguous :: array(:)
10768 : integer(TKR) , intent(out) , contiguous :: rank(:)
10769 : procedure(logical(LK)) :: isSorted
10770 : end subroutine
10771 : #endif
10772 :
10773 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10774 :
10775 : module subroutine setRankStandardCusCom_D1_BSSK(rank, array, isSorted)
10776 : #if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
10777 : !DEC$ ATTRIBUTES DLLEXPORT :: setRankStandardCusCom_D1_BSSK
10778 : #endif
10779 : use pm_kind, only: TKR => IK, SKC => SK
10780 : use pm_container, only: css_type
10781 : type(css_type) , intent(in) , contiguous :: array(:)
10782 : integer(TKR) , intent(out) , contiguous :: rank(:)
10783 : procedure(logical(LK)) :: isSorted
10784 : end subroutine
10785 :
10786 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10787 :
10788 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10789 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10790 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10791 :
10792 : end interface
10793 :
10794 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10795 :
10796 0 : end module pm_arrayRank
|