MODFLOW 6 version 6.9.0.dev0
USGS Modular Hydrologic Model
Loading...
Searching...
No Matches
MatrixBase.f90
Go to the documentation of this file.
3 use kindmodule, only: i4b, dp
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)
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)
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
163end module matrixbasemodule
subroutine init()
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
subroutine destroy(this)
Definition Sparse.f90:35