@@ -453,86 +453,107 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
453
453
454
454
#:for k1, t1, s1 in (KINDS_TYPES)
455
455
pure module function transpose_tridiagonal_${s1}$(A) result(B)
456
- class (tridiagonal_${s1}$_type), intent(in) :: A
456
+ type (tridiagonal_${s1}$_type), intent(in) :: A
457
457
!! Input matrix.
458
- class(tridiagonal_${s1}$_type), allocatable :: B
458
+ type(tridiagonal_${s1}$_type) :: B
459
+ B = tridiagonal(A%du, A%dv, A%dl)
460
+ end function
459
461
460
- select type(A)
461
- type is(tridiagonal_${s1}$_type)
462
- B = tridiagonal(A%du, A%dv, A%dl)
463
-
464
- type is(symtridiagonal_${s1}$_type)
465
- B = symtridiagonal(A%dv, A%du)
462
+ pure module function transpose_symtridiagonal_${s1}$(A) result(B)
463
+ type(symtridiagonal_${s1}$_type), intent(in) :: A
464
+ type(symtridiagonal_${s1}$_type) :: B
465
+ B = symtridiagonal(A%dv, A%du)
466
+ end function
466
467
467
- #:if t1.startswith('complex')
468
- type is(hermtridiagonal_${s1}$_type)
469
- B = hermtridiagonal(A%dv, A%dl)
470
- #:endif
471
- end select
472
-
468
+ #:if t1.startswith('complex')
469
+ pure module function transpose_hermtridiagonal_${s1}$(A) result(B)
470
+ type(hermtridiagonal_${s1}$_type), intent(in) :: A
471
+ type(hermtridiagonal_${s1}$_type) :: B
472
+ B = hermtridiagonal(A%dv, A%dl)
473
473
end function
474
+ #:endif
474
475
#:endfor
475
476
476
477
#:for k1, t1, s1 in (KINDS_TYPES)
477
478
pure module function hermitian_tridiagonal_${s1}$(A) result(B)
478
- class (tridiagonal_${s1}$_type), intent(in) :: A
479
+ type (tridiagonal_${s1}$_type), intent(in) :: A
479
480
!! Input matrix.
480
- class(tridiagonal_${s1}$_type), allocatable :: B
481
-
482
- select type(A)
483
- type is(tridiagonal_${s1}$_type)
484
- #:if t1.startswith("complex")
485
- B = tridiagonal(conjg(A%du), conjg(A%dv), conjg(A%dl))
486
- #:else
487
- B = tridiagonal(A%du, A%dv, A%dl)
488
- #:endif
489
-
490
- type is(symtridiagonal_${s1}$_type)
491
- #:if t1.startswith("complex")
492
- B = symtridiagonal(conjg(A%dv), conjg(A%du))
493
- #:else
494
- B = symtridiagonal(A%dv, A%du)
495
- #:endif
496
-
481
+ type(tridiagonal_${s1}$_type) :: B
497
482
#:if t1.startswith("complex")
498
- type is(hermtridiagonal_${s1}$_type)
499
- B = hermtridiagonal(A%dv, A%du)
483
+ B = tridiagonal(conjg(A%du), conjg(A%dv), conjg(A%dl))
484
+ #:else
485
+ B = tridiagonal(A%du, A%dv, A%dl)
500
486
#:endif
501
- end select
502
-
503
487
end function
488
+
489
+ pure module function hermitian_symtridiagonal_${s1}$(A) result(B)
490
+ type(symtridiagonal_${s1}$_type), intent(in) :: A
491
+ type(symtridiagonal_${s1}$_type) :: B
492
+ #:if t1.startswith("complex")
493
+ B = symtridiagonal(conjg(A%dv), conjg(A%du))
494
+ #:else
495
+ B = A
496
+ #:endif
497
+ end function
498
+
499
+ #:if t1.startswith("complex")
500
+ pure module function hermitian_hermtridiagonal_${s1}$(A) result(B)
501
+ type(hermtridiagonal_${s1}$_type), intent(in) :: A
502
+ type(hermtridiagonal_${s1}$_type) :: B
503
+ B = A
504
+ end function
505
+ #:endif
504
506
#:endfor
505
507
506
508
#:for k1, t1, s1 in (KINDS_TYPES)
507
509
pure module function scalar_multiplication_tridiagonal_${s1}$(alpha, A) result(B)
508
510
${t1}$, intent(in) :: alpha
509
- class(tridiagonal_${s1}$_type), intent(in) :: A
510
- class(tridiagonal_${s1}$_type), allocatable :: B
511
-
512
- select type(A)
513
- type is(tridiagonal_${s1}$_type)
514
- B = tridiagonal(A%dl, A%dv, A%du)
515
- B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = alpha*B%du
516
-
517
- type is(symtridiagonal_${s1}$_type)
518
- B = symtridiagonal(A%dv, A%du)
519
- B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = B%dl
520
-
521
- #:if t1.startswith("complex")
522
- type is (hermtridiagonal_${s1}$_type)
523
- B = hermtridiagonal(A%dv, A%du)
524
- B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = conjg(B%dl)
525
- #:endif
526
- end select
527
-
511
+ type(tridiagonal_${s1}$_type), intent(in) :: A
512
+ type(tridiagonal_${s1}$_type) :: B
513
+ B = tridiagonal(A%dl, A%dv, A%du)
514
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = alpha*B%du
528
515
end function
529
516
530
517
pure module function scalar_multiplication_bis_tridiagonal_${s1}$(A, alpha) result(B)
531
- class (tridiagonal_${s1}$_type), intent(in) :: A
518
+ type (tridiagonal_${s1}$_type), intent(in) :: A
532
519
${t1}$, intent(in) :: alpha
533
- class (tridiagonal_${s1}$_type), allocatable :: B
520
+ type (tridiagonal_${s1}$_type) :: B
534
521
B = scalar_multiplication_tridiagonal_${s1}$(alpha, A)
535
522
end function
523
+
524
+ pure module function scalar_multiplication_symtridiagonal_${s1}$(alpha, A) result(B)
525
+ ${t1}$, intent(in) :: alpha
526
+ type(symtridiagonal_${s1}$_type), intent(in) :: A
527
+ type(symtridiagonal_${s1}$_type) :: B
528
+ B = symtridiagonal(A%dv, A%du)
529
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = B%dl
530
+ end function
531
+
532
+ pure module function scalar_multiplication_bis_symtridiagonal_${s1}$(A, alpha) result(B)
533
+ type(symtridiagonal_${s1}$_type), intent(in) :: A
534
+ ${t1}$, intent(in) :: alpha
535
+ type(symtridiagonal_${s1}$_type) :: B
536
+ B = symtridiagonal(A%dv, A%du)
537
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = B%dl
538
+ end function
539
+
540
+ #:if t1.startswith("complex")
541
+ pure module function scalar_multiplication_hermtridiagonal_${s1}$(alpha, A) result(B)
542
+ ${t1}$, intent(in) :: alpha
543
+ type(hermtridiagonal_${s1}$_type), intent(in) :: A
544
+ type(hermtridiagonal_${s1}$_type) :: B
545
+ B = hermtridiagonal(A%dv, A%du)
546
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = conjg(B%dl)
547
+ end function
548
+
549
+ pure module function scalar_multiplication_bis_hermtridiagonal_${s1}$(A, alpha) result(B)
550
+ type(hermtridiagonal_${s1}$_type), intent(in) :: A
551
+ ${t1}$, intent(in) :: alpha
552
+ type(hermtridiagonal_${s1}$_type) :: B
553
+ B = hermtridiagonal(A%dv, A%du)
554
+ B%dl = alpha*B%dl; B%dv = alpha*B%dv; B%du = conjg(B%dl)
555
+ end function
556
+ #:endif
536
557
#:endfor
537
558
538
559
#:for k1, t1, s1 in (KINDS_TYPES)
0 commit comments