MODFLOW 6  version 6.7.0.dev3
USGS Modular Hydrologic Model
GridSorting.f90 File Reference

Go to the source code of this file.

Modules

module  gridsorting
 

Functions/Subroutines

subroutine, public gridsorting::quicksortgrid (array, arraySize, idxToGlobal, z_only)
 
subroutine init ()
 
logical(lgp) function lessthan (n, m)
 
real(dp) function, dimension(3) get_global_xyz (gc, use_only_z)
 Utility function to convert global cell. More...
 
subroutine swap (a, b)
 
subroutine rshift (left, right)
 

Function/Subroutine Documentation

◆ get_global_xyz()

real(dp) function, dimension(3) quicksortgrid::get_global_xyz ( type(globalcelltype)  gc,
logical(lgp)  use_only_z 
)
private
Parameters
gcthe global cell id
use_only_zonly z coordinate is needed or available, skip transform
Returns
return xyz

Definition at line 55 of file GridSorting.f90.

56  type(GlobalCellType) :: gc !< the global cell id
57  logical(LGP) :: use_only_z !< only z coordinate is needed or available, skip transform
58  real(DP), dimension(3) :: global_xyz !< return xyz
59  ! local
60  real(DP) :: x, y, z
61  real(DP) :: xc, yc, xo, yo, angrot
62 
63  z = dhalf * (gc%v_model%dis_top%get(gc%index) + &
64  gc%v_model%dis_bot%get(gc%index))
65 
66  x = dzero
67  y = dzero
68  if (.not. use_only_z) then
69  xc = gc%v_model%dis_xc%get(gc%index)
70  yc = gc%v_model%dis_yc%get(gc%index)
71  xo = gc%v_model%dis_xorigin%get()
72  yo = gc%v_model%dis_yorigin%get()
73  angrot = gc%v_model%dis_angrot%get()
74  call dis_transform_xy(xc, yc, xo, yo, angrot, x, y)
75  end if
76 
77  global_xyz = [x, y, z]
78 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ init()

subroutine quicksortgrid::init
private

Definition at line 24 of file GridSorting.f90.

Here is the caller graph for this function:

◆ lessthan()

logical(lgp) function quicksortgrid::lessthan ( integer(i4b), intent(in)  n,
integer(i4b), intent(in)  m 
)
private

Definition at line 29 of file GridSorting.f90.

30  integer(I4B), intent(in) :: n
31  integer(I4B), intent(in) :: m
32  logical(LGP) :: isLess
33  ! local
34  real(DP), dimension(3) :: xyz_n, xyz_m
35 
36  ! get coordinates as 3-vectors
37  xyz_n = get_global_xyz(idxtoglobal(array(n)), z_only)
38  xyz_m = get_global_xyz(idxtoglobal(array(m)), z_only)
39 
40  ! compare
41  if (.not. is_close(xyz_n(3), xyz_m(3), 10 * epsilon(xyz_n(3)))) then
42  isless = xyz_n(3) > xyz_m(3)
43  else if (.not. is_close(xyz_n(2), xyz_m(2), 10 * epsilon(xyz_n(2)))) then
44  isless = xyz_n(2) > xyz_m(2)
45  else if (.not. is_close(xyz_n(1), xyz_m(1), 10 * epsilon(xyz_n(1)))) then
46  isless = xyz_n(1) < xyz_m(1)
47  else
48  isless = .false.
49  end if
50 
real(dp) function, dimension(3) get_global_xyz(gc, use_only_z)
Utility function to convert global cell.
Definition: GridSorting.f90:56
Here is the call graph for this function:

◆ rshift()

subroutine quicksortgrid::rshift ( integer, intent(in)  left,
integer, intent(in)  right 
)
private

Definition at line 93 of file GridSorting.f90.

94  integer, intent(in) :: left, right
95  integer :: hold
96 
97  hold = array(right)
98  array(left + 1:right) = array(left:right - 1)
99  array(left) = hold
100 

◆ swap()

subroutine quicksortgrid::swap ( integer, intent(in)  a,
integer, intent(in)  b 
)
private

Definition at line 82 of file GridSorting.f90.

83  integer, intent(in) :: a, b
84  integer :: hold
85 
86  hold = array(a)
87  array(a) = array(b)
88  array(b) = hold
89