1 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
2 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../generics.fypp" 1
11 # 57 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../generics.fypp"
12 # 2 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp" 2
13 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp" 1
14 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../subr_list.fypp" 1
23 # 926 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../subr_list.fypp"
24 # 2 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp" 2
33 # 112 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp"
34 # 3 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp" 2
55 # 24 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
58 # 24 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
61 # 27 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
64 # 30 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
66 # 30 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
68 # 32 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
71 # 35 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
73 # 35 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
75 # 37 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
86 # 48 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
96 integer,
intent(in) :: n
97 integer(kind_int),
intent(inout) :: list(n)
98 integer,
intent(out) :: order(n)
99 logical,
intent(in),
optional :: order_list
103 integer(kind_int),
allocatable :: list_tmp(:)
104 logical :: lorder_list
108 if (
present(order_list)) lorder_list = order_list
115 if (lorder_list)
then
123 allocate(list_tmp(n))
139 # 48 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
149 integer,
intent(in) :: n
151 integer,
intent(out) :: order(n)
152 logical,
intent(in),
optional :: order_list
156 real(
kind_real),
allocatable :: list_tmp(:)
157 logical :: lorder_list
161 if (
present(order_list)) lorder_list = order_list
168 if (lorder_list)
then
176 allocate(list_tmp(n))
192 # 101 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
194 # 103 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
204 integer,
intent(in) :: n
205 integer(kind_int),
intent(inout) :: list1(n)
206 integer(kind_int),
intent(inout) :: list2(n)
207 integer,
intent(out) :: order(n)
208 logical,
intent(in),
optional :: order_list
211 integer :: i_s,i_e,ntmp,i
212 integer,
allocatable :: order_tmp(:)
213 integer(kind_int) :: list1_tmp(n),list2_tmp(n)
214 logical :: lorder_list,chain,diff
218 if (
present(order_list)) lorder_list = order_list
235 list2_tmp = list2(order)
244 diff =
inf(list1_tmp(i_s),list1_tmp(i_e))
251 allocate(order_tmp(ntmp))
259 call quick_sort(ntmp,1,ntmp,list2_tmp(i_s:i_e-1),order_tmp)
265 order_tmp = order_tmp+i_s-1
268 order(i_s:i_e-1) = order(order_tmp)
274 deallocate(order_tmp)
285 if (lorder_list)
then
292 # 103 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
302 integer,
intent(in) :: n
303 real(
kind_real),
intent(inout) :: list1(n)
304 real(
kind_real),
intent(inout) :: list2(n)
305 integer,
intent(out) :: order(n)
306 logical,
intent(in),
optional :: order_list
309 integer :: i_s,i_e,ntmp,i
310 integer,
allocatable :: order_tmp(:)
311 real(
kind_real) :: list1_tmp(n),list2_tmp(n)
312 logical :: lorder_list,chain,diff
316 if (
present(order_list)) lorder_list = order_list
333 list2_tmp = list2(order)
342 diff =
inf(list1_tmp(i_s),list1_tmp(i_e))
349 allocate(order_tmp(ntmp))
357 call quick_sort(ntmp,1,ntmp,list2_tmp(i_s:i_e-1),order_tmp)
360 call reorder_eq(ntmp,list2_tmp(i_s:i_e-1),order_tmp)
363 order_tmp = order_tmp+i_s-1
366 order(i_s:i_e-1) = order(order_tmp)
372 deallocate(order_tmp)
383 if (lorder_list)
then
390 # 201 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
392 # 203 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
402 integer,
intent(in) :: n
403 integer,
intent(in) :: left_end
404 integer,
intent(in) :: right_end
405 integer(kind_int),
intent(inout) :: list(n)
406 integer,
intent(inout) :: order(n)
409 integer,
parameter :: max_simple_sort_size = 6
411 integer(kind_int) :: reference,temp
413 if (right_end<left_end+max_simple_sort_size)
then
418 reference = list((left_end+right_end)/2)
425 if (.not.(list(i)<reference))
exit
430 if (.not.(list(j)>reference))
exit
449 if (left_end<j)
call quick_sort(n,left_end,j,list,order)
450 if (i<right_end)
call quick_sort(n,i,right_end,list,order)
454 # 203 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
464 integer,
intent(in) :: n
465 integer,
intent(in) :: left_end
466 integer,
intent(in) :: right_end
468 integer,
intent(inout) :: order(n)
471 integer,
parameter :: max_simple_sort_size = 6
475 if (right_end<left_end+max_simple_sort_size)
then
480 reference = list((left_end+right_end)/2)
487 if (.not.(list(i)<reference))
exit
492 if (.not.(list(j)>reference))
exit
511 if (left_end<j)
call quick_sort(n,left_end,j,list,order)
512 if (i<right_end)
call quick_sort(n,i,right_end,list,order)
516 # 265 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
518 # 267 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
528 integer,
intent(in) :: n
529 integer,
intent(in) :: left_end
530 integer,
intent(in) :: right_end
531 integer(kind_int),
intent(inout) :: list(n)
532 integer,
intent(inout) :: order(n)
536 integer(kind_int) :: temp
544 do i=left_end,right_end-1
546 if (list(i)>list(j))
then
561 # 267 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
571 integer,
intent(in) :: n
572 integer,
intent(in) :: left_end
573 integer,
intent(in) :: right_end
574 real(kind_real),
intent(inout) :: list(n)
575 integer,
intent(inout) :: order(n)
579 real(kind_real) :: temp
587 do i=left_end,right_end-1
589 if (list(i)>list(j))
then
604 # 310 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_qsort.fypp"
615 integer,
intent(in) :: n
617 integer,
intent(out) :: order(n)
620 integer :: i_s,i_e,ntmp,i
621 integer,
allocatable :: order_tmp(:)
622 logical :: chain,diff
631 diff = .not.
eq(list(i_s),list(i_e))
638 allocate(order_tmp(ntmp))
646 call quick_sort(ntmp,1,ntmp,order(i_s:i_e-1),order_tmp)
647 order_tmp = order_tmp+i_s-1
648 list(i_s:i_e-1) = list(order_tmp)
654 deallocate(order_tmp)