Skip to content

Commit 05be1d6

Browse files
committed
Prevent temporary arrays + lower casing every names.
1 parent f102167 commit 05be1d6

File tree

1 file changed

+37
-34
lines changed

1 file changed

+37
-34
lines changed

src/stdlib_specialmatrices_tridiagonal.fypp

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
1515

1616
#:for k1, t1, s1 in (KINDS_TYPES)
1717
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
1919
!! `dl`, `dv` and `du`.
2020
${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.
2424

2525
! Internal variables.
2626
integer(ilp) :: n
@@ -37,13 +37,13 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
3737
end function
3838

3939
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.
4141
${t1}$, intent(in) :: dl, dv, du
42-
!! Tridiagonal matrix elements.
42+
!! tridiagonal matrix elements.
4343
integer(ilp), intent(in) :: n
4444
!! Matrix dimension.
45-
type(Tridiagonal_${s1}$_type) :: A
46-
!! Corresponding Tridiagonal matrix.
45+
type(tridiagonal_${s1}$_type) :: A
46+
!! Corresponding tridiagonal matrix.
4747

4848
! Internal variables.
4949
integer(ilp) :: i
@@ -67,7 +67,7 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
6767
#:for k1, t1, s1 in (KINDS_TYPES)
6868
#:for rank in RANKS
6969
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
7171
${t1}$, intent(in), contiguous, target :: x${ranksuffix(rank)}$
7272
${t1}$, intent(inout), contiguous, target :: y${ranksuffix(rank)}$
7373
real(${k1}$), intent(in), optional :: alpha
@@ -110,9 +110,9 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
110110

111111
#:for k1, t1, s1 in (KINDS_TYPES)
112112
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.
116116
${t1}$, allocatable :: B(:, :)
117117
!! Corresponding dense matrix.
118118

@@ -138,56 +138,59 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
138138

139139
#:for k1, t1, s1 in (KINDS_TYPES)
140140
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
142142
!! 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)
145145
end function
146146
#:endfor
147147

148148
#:for k1, t1, s1 in (KINDS_TYPES)
149149
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
151151
!! Input matrix.
152-
type(Tridiagonal_${s1}$_type) :: B
153-
B%n = A%n
152+
type(tridiagonal_${s1}$_type) :: B
154153
#: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))
156155
#:else
157-
B%dv = A%dv ; B%du = A%dl ; B%dl = A%du
156+
B = tridiagonal(A%du, A%dv, A%dl)
158157
#:endif
159158
end function
160159
#:endfor
161160

162161
#:for k1, t1, s1 in (KINDS_TYPES)
163162
pure module function scalar_multiplication_tridiagonal_${s1}$(alpha, A) result(B)
164163
${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
168168
end function
169169

170170
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
172172
${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
175176
end function
176177
#:endfor
177178

178179
#:for k1, t1, s1 in (KINDS_TYPES)
179180
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
184186
end function
185187

186188
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
191194
end function
192195
#:endfor
193196

0 commit comments

Comments
 (0)