MODFLOW 6  version 6.7.0.dev0
USGS Modular Hydrologic Model
MatrixBase.f90
Go to the documentation of this file.
2  use constantsmodule, only: lenmempath
3  use kindmodule, only: i4b, dp
4  use sparsemodule, only: sparsematrix
6  implicit none
7  private
8 
9  type, public, abstract :: matrixbasetype
10  character(len=LENMEMPATH) :: memory_path
11  contains
12  procedure(init_if), deferred :: init
13  procedure(destroy_if), deferred :: destroy
14  procedure(create_vec_mm_if), deferred :: create_vec_mm
15  procedure(create_vec_if), deferred :: create_vec
16 
17  procedure(get_value_pos_if), deferred :: get_value_pos
18  procedure(get_diag_value_if), deferred :: get_diag_value
19 
20  procedure(set_diag_value_if), deferred :: set_diag_value
21  procedure(set_value_pos_if), deferred :: set_value_pos
22  procedure(add_value_pos_if), deferred :: add_value_pos
23  procedure(add_diag_value_if), deferred :: add_diag_value
24  procedure(zero_entries_if), deferred :: zero_entries
25  procedure(zero_row_offdiag_if), deferred :: zero_row_offdiag
26 
27  procedure(get_first_col_pos_if), deferred :: get_first_col_pos
28  procedure(get_last_col_pos_if), deferred :: get_last_col_pos
29  procedure(get_column_if), deferred :: get_column
30  procedure(get_position_if), deferred :: get_position
31  procedure(get_position_diag_if), deferred :: get_position_diag
32 
33  procedure(get_aij_if), deferred :: get_aij
34  procedure(get_row_offset_if), deferred :: get_row_offset
35 
36  procedure(multiply_if), deferred :: multiply
37 
38  end type matrixbasetype
39 
40  abstract interface
41  subroutine init_if(this, sparse, mem_path)
43  class(matrixbasetype) :: this
44  type(sparsematrix) :: sparse
45  character(len=*) :: mem_path
46  end subroutine
47  subroutine destroy_if(this)
48  import matrixbasetype
49  class(matrixbasetype) :: this
50  end subroutine
51  function create_vec_mm_if(this, n, name, mem_path) result(vec)
52  import matrixbasetype, vectorbasetype, i4b
53  class(matrixbasetype) :: this
54  integer(I4B) :: n
55  character(len=*) :: name
56  character(len=*) :: mem_path
57  class(vectorbasetype), pointer :: vec
58  end function
59  function create_vec_if(this, n) result(vec)
60  import matrixbasetype, vectorbasetype, i4b
61  class(matrixbasetype) :: this
62  integer(I4B) :: n
63  class(vectorbasetype), pointer :: vec
64  end function
65 
66  function get_value_pos_if(this, ipos) result(value)
67  import matrixbasetype, i4b, dp
68  class(matrixbasetype) :: this
69  integer(I4B) :: ipos
70  real(dp) :: value
71  end function
72  function get_diag_value_if(this, irow) result(diag_value)
73  import matrixbasetype, i4b, dp
74  class(matrixbasetype) :: this
75  integer(I4B) :: irow
76  real(dp) :: diag_value
77  end function
78 
79  subroutine set_diag_value_if(this, irow, diag_value)
80  import matrixbasetype, i4b, dp
81  class(matrixbasetype) :: this
82  integer(I4B) :: irow
83  real(DP) :: diag_value
84  end subroutine
85  subroutine set_value_pos_if(this, ipos, value)
86  import matrixbasetype, i4b, dp
87  class(matrixbasetype) :: this
88  integer(I4B) :: ipos
89  real(DP) :: value
90  end subroutine
91  subroutine add_value_pos_if(this, ipos, value)
92  import matrixbasetype, i4b, dp
93  class(matrixbasetype) :: this
94  integer(I4B) :: ipos
95  real(DP) :: value
96  end subroutine
97  subroutine add_diag_value_if(this, irow, value)
98  import matrixbasetype, i4b, dp
99  class(matrixbasetype) :: this
100  integer(I4B) :: irow
101  real(DP) :: value
102  end subroutine
103  subroutine zero_entries_if(this)
104  import matrixbasetype
105  class(matrixbasetype) :: this
106  end subroutine
107  subroutine zero_row_offdiag_if(this, irow)
108  import matrixbasetype, i4b
109  class(matrixbasetype) :: this
110  integer(I4B) :: irow
111  end subroutine
112  function get_first_col_pos_if(this, irow) result(first_col_pos)
113  import matrixbasetype, i4b
114  class(matrixbasetype) :: this
115  integer(I4B) :: irow
116  integer(I4B) :: first_col_pos
117  end function
118  function get_last_col_pos_if(this, irow) result(last_col_pos)
119  import matrixbasetype, i4b
120  class(matrixbasetype) :: this
121  integer(I4B) :: irow
122  integer(I4B) :: last_col_pos
123  end function
124  function get_column_if(this, ipos) result(icol)
125  import matrixbasetype, i4b
126  class(matrixbasetype) :: this
127  integer(I4B) :: ipos
128  integer(I4B) :: icol
129  end function
130  function get_position_if(this, irow, icol) result(ipos)
131  import matrixbasetype, i4b
132  class(matrixbasetype) :: this
133  integer(I4B) :: irow
134  integer(I4B) :: icol
135  integer(I4B) :: ipos
136  end function
137  function get_position_diag_if(this, irow) result(ipos_diag)
138  import matrixbasetype, i4b
139  class(matrixbasetype) :: this
140  integer(I4B) :: irow
141  integer(I4B) :: ipos_diag
142  end function
143  subroutine get_aij_if(this, ia, ja, amat)
144  import matrixbasetype, i4b, dp
145  class(matrixbasetype) :: this
146  integer(I4B), dimension(:), pointer, contiguous :: ia
147  integer(I4B), dimension(:), pointer, contiguous :: ja
148  real(DP), dimension(:), pointer, contiguous :: amat
149  end subroutine
150  function get_row_offset_if(this) result(offset)
151  import matrixbasetype, i4b
152  class(matrixbasetype) :: this
153  integer(I4B) :: offset
154  end function
155  subroutine multiply_if(this, vec_x, vec_y)
157  class(matrixbasetype) :: this
158  class(vectorbasetype), pointer :: vec_x
159  class(vectorbasetype), pointer :: vec_y
160  end subroutine
161  end interface
162 
163 end module matrixbasemodule
subroutine init()
Definition: GridSorting.f90:24
This module contains simulation constants.
Definition: Constants.f90:9
integer(i4b), parameter lenmempath
maximum length of the memory path
Definition: Constants.f90:27
This module defines variable data types.
Definition: kind.f90:8