@@ -7,6 +7,7 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
7
7
use stdlib_linalg_lapack, only: lagtm
8
8
9
9
character(len=*), parameter :: this = "tridiagonal matrices"
10
+
10
11
contains
11
12
12
13
!--------------------------------
@@ -144,7 +145,7 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
144
145
#:for k1, t1, s1 in (KINDS_TYPES)
145
146
pure module function initialize_symtridiagonal_pure_${s1}$(dv, ev) result(A)
146
147
!! Construct a `symtridiagonal` matrix from the rank-1 arrays
147
- !! `dl`, ` dv` and `du `.
148
+ !! `dv` and `ev `.
148
149
${t1}$, intent(in) :: dv(:), ev(:)
149
150
!! symtridiagonal matrix elements.
150
151
type(symtridiagonal_${s1}$_type) :: A
@@ -198,7 +199,7 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
198
199
199
200
module function initialize_symtridiagonal_impure_${s1}$(dv, ev, err) result(A)
200
201
!! Construct a `symtridiagonal` matrix from the rank-1 arrays
201
- !! `dl`, `dv` and `du `.
202
+ !! `dl` and `ev `.
202
203
${t1}$, intent(in) :: dv(:), ev(:)
203
204
!! symtridiagonal matrix elements.
204
205
type(linalg_state_type), intent(out) :: err
@@ -259,12 +260,12 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
259
260
260
261
#:for k1, t1, s1 in (C_KINDS_TYPES)
261
262
pure module function initialize_hermtridiagonal_pure_${s1}$(dv, ev) result(A)
262
- !! Construct a `symtridiagonal ` matrix from the rank-1 arrays
263
- !! `dl`, `dv` and `du `.
263
+ !! Construct a `hermtridiagonal ` matrix from the rank-1 arrays
264
+ !! `dl` and `ev `.
264
265
${t1}$, intent(in) :: dv(:), ev(:)
265
- !! symtridiagonal matrix elements.
266
+ !! hermtridiagonal matrix elements.
266
267
type(hermtridiagonal_${s1}$_type) :: A
267
- !! Corresponding symtridiagonal matrix.
268
+ !! Corresponding hermtridiagonal matrix.
268
269
269
270
! Internal variables.
270
271
integer(ilp) :: n
@@ -284,17 +285,17 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
284
285
! Description of the matrix.
285
286
A%n = n
286
287
! Matrix elements.
287
- A%dl = conjg(ev) ; A%dv = dv ; A%du = ev
288
+ A%dl = conjg(ev) ; A%dv = dv%re ; A%du = ev
288
289
end function
289
290
290
291
pure module function initialize_constant_hermtridiagonal_pure_${s1}$(dv, ev, n) result(A)
291
- !! Construct a `symtridiagonal ` matrix with constant elements.
292
+ !! Construct a `hermtridiagonal ` matrix with constant elements.
292
293
${t1}$, intent(in) :: dv, ev
293
- !! symtridiagonal matrix elements.
294
+ !! hermtridiagonal matrix elements.
294
295
integer(ilp), intent(in) :: n
295
296
!! Matrix dimension.
296
297
type(hermtridiagonal_${s1}$_type) :: A
297
- !! Corresponding symtridiagonal matrix.
298
+ !! Corresponding hermtridiagonal matrix.
298
299
299
300
! Internal variables.
300
301
integer(ilp) :: i
@@ -308,19 +309,19 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
308
309
endif
309
310
! Matrix elements.
310
311
A%dl = [(conjg(ev), i = 1, n-1)]
311
- A%dv = [(dv, i = 1, n-1)]
312
+ A%dv = [(dv%re , i = 1, n-1)]
312
313
A%du = [(ev, i = 1, n-1)]
313
314
end function
314
315
315
316
module function initialize_hermtridiagonal_impure_${s1}$(dv, ev, err) result(A)
316
- !! Construct a `symtridiagonal ` matrix from the rank-1 arrays
317
+ !! Construct a `hermtridiagonal ` matrix from the rank-1 arrays
317
318
!! `dl`, `dv` and `du`.
318
319
${t1}$, intent(in) :: dv(:), ev(:)
319
320
!! symtridiagonal matrix elements.
320
321
type(linalg_state_type), intent(out) :: err
321
322
!! Error handling.
322
323
type(hermtridiagonal_${s1}$_type) :: A
323
- !! Corresponding symtridiagonal matrix.
324
+ !! Corresponding hermtridiagonal matrix.
324
325
325
326
! Internal variables.
326
327
integer(ilp) :: n
@@ -340,19 +341,19 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
340
341
! Description of the matrix.
341
342
A%n = n
342
343
! Matrix elements.
343
- A%dl = conjg(ev) ; A%dv = dv ; A%du = ev
344
+ A%dl = conjg(ev) ; A%dv = dv%re ; A%du = ev
344
345
end function
345
346
346
347
module function initialize_constant_hermtridiagonal_impure_${s1}$(dv, ev, n, err) result(A)
347
- !! Construct a `symtridiagonal ` matrix with constant elements.
348
+ !! Construct a `hermtridiagonal ` matrix with constant elements.
348
349
${t1}$, intent(in) :: dv, ev
349
350
!! symtridiagonal matrix elements.
350
351
integer(ilp), intent(in) :: n
351
352
!! Matrix dimension.
352
353
type(linalg_state_type), intent(out) :: err
353
354
!! Error handling
354
355
type(hermtridiagonal_${s1}$_type) :: A
355
- !! Corresponding symtridiagonal matrix.
356
+ !! Corresponding hermtridiagonal matrix.
356
357
357
358
! Internal variables.
358
359
integer(ilp) :: i
@@ -366,7 +367,7 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
366
367
endif
367
368
! Matrix elements.
368
369
A%dl = [(conjg(ev), i = 1, n)]
369
- A%dv = [(dv, i = 1, n-1)]
370
+ A%dv = [(dv%re , i = 1, n-1)]
370
371
A%du = [(ev, i = 1, n)]
371
372
end function
372
373
#:endfor
@@ -459,7 +460,6 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
459
460
#:for k1, t1, s1 in (KINDS_TYPES)
460
461
pure module function transpose_tridiagonal_${s1}$(A) result(B)
461
462
type(tridiagonal_${s1}$_type), intent(in) :: A
462
- !! Input matrix.
463
463
type(tridiagonal_${s1}$_type) :: B
464
464
B = tridiagonal(A%du, A%dv, A%dl)
465
465
end function
@@ -484,7 +484,6 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
484
484
#:for k1, t1, s1 in (KINDS_TYPES)
485
485
pure module function hermitian_tridiagonal_${s1}$(A) result(B)
486
486
type(tridiagonal_${s1}$_type), intent(in) :: A
487
- !! Input matrix.
488
487
type(tridiagonal_${s1}$_type) :: B
489
488
#:if t1.startswith("complex")
490
489
B = tridiagonal(conjg(A%du), conjg(A%dv), conjg(A%dl))
@@ -568,15 +567,15 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
568
567
type(hermtridiagonal_${s1}$_type), intent(in) :: A
569
568
type(hermtridiagonal_${s1}$_type) :: B
570
569
B = hermtridiagonal(A%dv, A%du)
571
- B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = alpha*B%du
570
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = conjg(B%dl)
572
571
end function
573
572
574
573
pure module function real_scalar_multiplication_bis_hermtridiagonal_${s1}$(A, alpha) result(B)
575
574
type(hermtridiagonal_${s1}$_type), intent(in) :: A
576
575
real(${k1}$), intent(in) :: alpha
577
576
type(hermtridiagonal_${s1}$_type) :: B
578
577
B = hermtridiagonal(A%dv, A%du)
579
- B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = alpha*B%du
578
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = conjg(B%dl)
580
579
end function
581
580
#:endif
582
581
#:endfor
0 commit comments