@@ -15,12 +15,12 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
15
15
16
16
#:for k1, t1, s1 in (KINDS_TYPES)
17
17
pure module function initialize_tridiagonal_${s1}$(dl, dv, du) result(A)
18
- !! Construct a `Tridiagonal ` matrix from the rank-1 arrays
18
+ !! Construct a `tridiagonal ` matrix from the rank-1 arrays
19
19
!! `dl`, `dv` and `du`.
20
20
${t1}$, intent(in) :: dl(:), dv(:), du(:)
21
- !! Tridiagonal matrix elements.
22
- type(Tridiagonal_ ${s1}$_type) :: A
23
- !! Corresponding Tridiagonal matrix.
21
+ !! tridiagonal matrix elements.
22
+ type(tridiagonal_ ${s1}$_type) :: A
23
+ !! Corresponding tridiagonal matrix.
24
24
25
25
! Internal variables.
26
26
integer(ilp) :: n
@@ -37,13 +37,13 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
37
37
end function
38
38
39
39
pure module function initialize_constant_tridiagonal_${s1}$(dl, dv, du, n) result(A)
40
- !! Construct a `Tridiagonal ` matrix with constant elements.
40
+ !! Construct a `tridiagonal ` matrix with constant elements.
41
41
${t1}$, intent(in) :: dl, dv, du
42
- !! Tridiagonal matrix elements.
42
+ !! tridiagonal matrix elements.
43
43
integer(ilp), intent(in) :: n
44
44
!! Matrix dimension.
45
- type(Tridiagonal_ ${s1}$_type) :: A
46
- !! Corresponding Tridiagonal matrix.
45
+ type(tridiagonal_ ${s1}$_type) :: A
46
+ !! Corresponding tridiagonal matrix.
47
47
48
48
! Internal variables.
49
49
integer(ilp) :: i
@@ -67,7 +67,7 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
67
67
#:for k1, t1, s1 in (KINDS_TYPES)
68
68
#:for rank in RANKS
69
69
module subroutine spmv_tridiag_${rank}$d_${s1}$(A, x, y, alpha, beta, op)
70
- type(Tridiagonal_ ${s1}$_type), intent(in) :: A
70
+ type(tridiagonal_ ${s1}$_type), intent(in) :: A
71
71
${t1}$, intent(in), contiguous, target :: x${ranksuffix(rank)}$
72
72
${t1}$, intent(inout), contiguous, target :: y${ranksuffix(rank)}$
73
73
real(${k1}$), intent(in), optional :: alpha
@@ -110,9 +110,9 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
110
110
111
111
#:for k1, t1, s1 in (KINDS_TYPES)
112
112
pure module function tridiagonal_to_dense_${s1}$(A) result(B)
113
- !! Convert a `Tridiagonal ` matrix to its dense representation.
114
- type(Tridiagonal_ ${s1}$_type), intent(in) :: A
115
- !! Input Tridiagonal matrix.
113
+ !! Convert a `tridiagonal ` matrix to its dense representation.
114
+ type(tridiagonal_ ${s1}$_type), intent(in) :: A
115
+ !! Input tridiagonal matrix.
116
116
${t1}$, allocatable :: B(:, :)
117
117
!! Corresponding dense matrix.
118
118
@@ -138,56 +138,59 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
138
138
139
139
#:for k1, t1, s1 in (KINDS_TYPES)
140
140
pure module function transpose_tridiagonal_${s1}$(A) result(B)
141
- type(Tridiagonal_ ${s1}$_type), intent(in) :: A
141
+ type(tridiagonal_ ${s1}$_type), intent(in) :: A
142
142
!! Input matrix.
143
- type(Tridiagonal_ ${s1}$_type) :: B
144
- B%n = A%n ; B%dv = A%dv ; B%du = A%dl ; B%dl = A%du
143
+ type(tridiagonal_ ${s1}$_type) :: B
144
+ B = tridiagonal(A%du, A%dv, A%dl)
145
145
end function
146
146
#:endfor
147
147
148
148
#:for k1, t1, s1 in (KINDS_TYPES)
149
149
pure module function hermitian_tridiagonal_${s1}$(A) result(B)
150
- type(Tridiagonal_ ${s1}$_type), intent(in) :: A
150
+ type(tridiagonal_ ${s1}$_type), intent(in) :: A
151
151
!! Input matrix.
152
- type(Tridiagonal_${s1}$_type) :: B
153
- B%n = A%n
152
+ type(tridiagonal_${s1}$_type) :: B
154
153
#:if t1.startswith("complex")
155
- B%dv = conjg(A%dv) ; B%du = conjg(A%dl) ; B%dl = conjg(A%du )
154
+ B = tridiagonal( conjg(A%du), conjg(A%dv), conjg(A%dl) )
156
155
#:else
157
- B%dv = A%dv ; B%du = A%dl ; B%dl = A%du
156
+ B = tridiagonal(A%du, A%dv, A%dl)
158
157
#:endif
159
158
end function
160
159
#:endfor
161
160
162
161
#:for k1, t1, s1 in (KINDS_TYPES)
163
162
pure module function scalar_multiplication_tridiagonal_${s1}$(alpha, A) result(B)
164
163
${t1}$, intent(in) :: alpha
165
- type(Tridiagonal_${s1}$_type), intent(in) :: A
166
- type(Tridiagonal_${s1}$_type) :: B
167
- B = Tridiagonal(alpha*A%dl, alpha*A%dv, alpha*A%du)
164
+ type(tridiagonal_${s1}$_type), intent(in) :: A
165
+ type(tridiagonal_${s1}$_type) :: B
166
+ B = tridiagonal(A%dl, A%dv, A%du)
167
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = alpha*B%du
168
168
end function
169
169
170
170
pure module function scalar_multiplication_bis_tridiagonal_${s1}$(A, alpha) result(B)
171
- type(Tridiagonal_ ${s1}$_type), intent(in) :: A
171
+ type(tridiagonal_ ${s1}$_type), intent(in) :: A
172
172
${t1}$, intent(in) :: alpha
173
- type(Tridiagonal_${s1}$_type) :: B
174
- B = Tridiagonal(alpha*A%dl, alpha*A%dv, alpha*A%du)
173
+ type(tridiagonal_${s1}$_type) :: B
174
+ B = tridiagonal(A%dl, A%dv, A%du)
175
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = alpha*B%du
175
176
end function
176
177
#:endfor
177
178
178
179
#:for k1, t1, s1 in (KINDS_TYPES)
179
180
pure module function matrix_add_tridiagonal_${s1}$(A, B) result(C)
180
- type(Tridiagonal_${s1}$_type), intent(in) :: A
181
- type(Tridiagonal_${s1}$_type), intent(in) :: B
182
- type(Tridiagonal_${s1}$_type) :: C
183
- C = Tridiagonal(A%dl+B%dl, A%dv+B%dv, A%du+B%du)
181
+ type(tridiagonal_${s1}$_type), intent(in) :: A
182
+ type(tridiagonal_${s1}$_type), intent(in) :: B
183
+ type(tridiagonal_${s1}$_type) :: C
184
+ C = tridiagonal(A%dl, A%dv, A%du)
185
+ C%dl = C%dl + B%dl; C%dv = C%dv + B%dv; C%du = C%du + B%du
184
186
end function
185
187
186
188
pure module function matrix_sub_tridiagonal_${s1}$(A, B) result(C)
187
- type(Tridiagonal_${s1}$_type), intent(in) :: A
188
- type(Tridiagonal_${s1}$_type), intent(in) :: B
189
- type(Tridiagonal_${s1}$_type) :: C
190
- C = Tridiagonal(A%dl-B%dl, A%dv-B%dv, A%du-B%du)
189
+ type(tridiagonal_${s1}$_type), intent(in) :: A
190
+ type(tridiagonal_${s1}$_type), intent(in) :: B
191
+ type(tridiagonal_${s1}$_type) :: C
192
+ C = tridiagonal(A%dl, A%dv, A%du)
193
+ C%dl = C%dl - B%dl; C%dv = C%dv - B%dv; C%du = C%du - B%du
191
194
end function
192
195
#:endfor
193
196
0 commit comments