2 Integer,
Parameter ::
kdp = selected_real_kind(15)
18 Real (kind=kdp),
Dimension (:),
Intent (In) :: XDONT
19 Integer,
Dimension (:),
Intent (Out) :: IRNGT
21 Real (kind=kdp) :: XVALA, XVALB
23 Integer,
Dimension (SIZE(IRNGT)) :: JWRKT
24 Integer :: LMTNA, LMTNC, IRNG1, IRNG2
25 Integer :: NVAL, IIND, IWRKD, IWRK, IWRKF, JINDA, IINDA, IINDB
27 nval = min(
SIZE(xdont),
SIZE(irngt))
41 If (xdont(iind-1) <= xdont(iind))
Then
42 irngt(iind-1) = iind - 1
46 irngt(iind) = iind - 1
49 If (modulo(nval, 2) /= 0)
Then
66 Do iwrkd = 0, nval - 1, 4
67 If ((iwrkd+4) > nval)
Then
68 If ((iwrkd+2) >= nval)
Exit
72 If (xdont(irngt(iwrkd+2)) <= xdont(irngt(iwrkd+3)))
Exit
76 If (xdont(irngt(iwrkd+1)) <= xdont(irngt(iwrkd+3)))
Then
77 irng2 = irngt(iwrkd+2)
78 irngt(iwrkd+2) = irngt(iwrkd+3)
79 irngt(iwrkd+3) = irng2
84 irng1 = irngt(iwrkd+1)
85 irngt(iwrkd+1) = irngt(iwrkd+3)
86 irngt(iwrkd+3) = irngt(iwrkd+2)
87 irngt(iwrkd+2) = irng1
94 If (xdont(irngt(iwrkd+2)) <= xdont(irngt(iwrkd+3))) cycle
98 If (xdont(irngt(iwrkd+1)) <= xdont(irngt(iwrkd+3)))
Then
99 irng2 = irngt(iwrkd+2)
100 irngt(iwrkd+2) = irngt(iwrkd+3)
101 If (xdont(irng2) <= xdont(irngt(iwrkd+4)))
Then
103 irngt(iwrkd+3) = irng2
106 irngt(iwrkd+3) = irngt(iwrkd+4)
107 irngt(iwrkd+4) = irng2
113 irng1 = irngt(iwrkd+1)
114 irng2 = irngt(iwrkd+2)
115 irngt(iwrkd+1) = irngt(iwrkd+3)
116 If (xdont(irng1) <= xdont(irngt(iwrkd+4)))
Then
117 irngt(iwrkd+2) = irng1
118 If (xdont(irng2) <= xdont(irngt(iwrkd+4)))
Then
120 irngt(iwrkd+3) = irng2
123 irngt(iwrkd+3) = irngt(iwrkd+4)
124 irngt(iwrkd+4) = irng2
128 irngt(iwrkd+2) = irngt(iwrkd+4)
129 irngt(iwrkd+3) = irng1
130 irngt(iwrkd+4) = irng2
145 If (lmtna >= nval)
Exit
154 jinda = iwrkf + lmtna
155 iwrkf = iwrkf + lmtnc
156 If (iwrkf >= nval)
Then
157 If (jinda >= nval)
Exit
173 jwrkt(1:lmtna) = irngt(iwrkd:jinda)
175 xvala = xdont(jwrkt(iinda))
176 xvalb = xdont(irngt(iindb))
183 If (xvala > xvalb)
Then
184 irngt(iwrk) = irngt(iindb)
186 If (iindb > iwrkf)
Then
188 irngt(iwrk+1:iwrkf) = jwrkt(iinda:lmtna)
191 xvalb = xdont(irngt(iindb))
193 irngt(iwrk) = jwrkt(iinda)
195 If (iinda > lmtna) exit
196 xvala = xdont(jwrkt(iinda))
218 Integer,
Dimension (:),
Intent (In) :: XDONT
219 Integer,
Dimension (:),
Intent (Out) :: IRNGT
221 Integer :: XVALA, XVALB
223 Integer,
Dimension (SIZE(IRNGT)) :: JWRKT
224 Integer :: LMTNA, LMTNC, IRNG1, IRNG2
225 Integer :: NVAL, IIND, IWRKD, IWRK, IWRKF, JINDA, IINDA, IINDB
227 nval = min(
SIZE(xdont),
SIZE(irngt))
241 If (xdont(iind-1) <= xdont(iind))
Then
242 irngt(iind-1) = iind - 1
246 irngt(iind) = iind - 1
249 If (modulo(nval, 2) /= 0)
Then
266 Do iwrkd = 0, nval - 1, 4
267 If ((iwrkd+4) > nval)
Then
268 If ((iwrkd+2) >= nval)
Exit
272 If (xdont(irngt(iwrkd+2)) <= xdont(irngt(iwrkd+3)))
Exit
276 If (xdont(irngt(iwrkd+1)) <= xdont(irngt(iwrkd+3)))
Then
277 irng2 = irngt(iwrkd+2)
278 irngt(iwrkd+2) = irngt(iwrkd+3)
279 irngt(iwrkd+3) = irng2
284 irng1 = irngt(iwrkd+1)
285 irngt(iwrkd+1) = irngt(iwrkd+3)
286 irngt(iwrkd+3) = irngt(iwrkd+2)
287 irngt(iwrkd+2) = irng1
294 If (xdont(irngt(iwrkd+2)) <= xdont(irngt(iwrkd+3))) cycle
298 If (xdont(irngt(iwrkd+1)) <= xdont(irngt(iwrkd+3)))
Then
299 irng2 = irngt(iwrkd+2)
300 irngt(iwrkd+2) = irngt(iwrkd+3)
301 If (xdont(irng2) <= xdont(irngt(iwrkd+4)))
Then
303 irngt(iwrkd+3) = irng2
306 irngt(iwrkd+3) = irngt(iwrkd+4)
307 irngt(iwrkd+4) = irng2
313 irng1 = irngt(iwrkd+1)
314 irng2 = irngt(iwrkd+2)
315 irngt(iwrkd+1) = irngt(iwrkd+3)
316 If (xdont(irng1) <= xdont(irngt(iwrkd+4)))
Then
317 irngt(iwrkd+2) = irng1
318 If (xdont(irng2) <= xdont(irngt(iwrkd+4)))
Then
320 irngt(iwrkd+3) = irng2
323 irngt(iwrkd+3) = irngt(iwrkd+4)
324 irngt(iwrkd+4) = irng2
328 irngt(iwrkd+2) = irngt(iwrkd+4)
329 irngt(iwrkd+3) = irng1
330 irngt(iwrkd+4) = irng2
345 If (lmtna >= nval)
Exit
354 jinda = iwrkf + lmtna
355 iwrkf = iwrkf + lmtnc
356 If (iwrkf >= nval)
Then
357 If (jinda >= nval)
Exit
373 jwrkt(1:lmtna) = irngt(iwrkd:jinda)
375 xvala = xdont(jwrkt(iinda))
376 xvalb = xdont(irngt(iindb))
383 If (xvala > xvalb)
Then
384 irngt(iwrk) = irngt(iindb)
386 If (iindb > iwrkf)
Then
388 irngt(iwrk+1:iwrkf) = jwrkt(iinda:lmtna)
391 xvalb = xdont(irngt(iindb))
393 irngt(iwrk) = jwrkt(iinda)
395 If (iinda > lmtna) exit
396 xvala = xdont(jwrkt(iinda))
integer, parameter, private kdp
subroutine, private d_mrgrnk(XDONT, IRNGT)
subroutine, private i_mrgrnk(XDONT, IRNGT)