@@ -453,86 +453,107 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
453453
454454 #:for k1, t1, s1 in (KINDS_TYPES)
455455 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
457457 !! 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
459461
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
466467
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)
473473 end function
474+ #:endif
474475 #:endfor
475476
476477 #:for k1, t1, s1 in (KINDS_TYPES)
477478 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
479480 !! 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
497482 #: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)
500486 #:endif
501- end select
502-
503487 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
504506 #:endfor
505507
506508 #:for k1, t1, s1 in (KINDS_TYPES)
507509 pure module function scalar_multiplication_tridiagonal_${s1}$(alpha, A) result(B)
508510 ${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
528515 end function
529516
530517 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
532519 ${t1}$, intent(in) :: alpha
533- class (tridiagonal_${s1}$_type), allocatable :: B
520+ type (tridiagonal_${s1}$_type) :: B
534521 B = scalar_multiplication_tridiagonal_${s1}$(alpha, A)
535522 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
536557 #:endfor
537558
538559 #:for k1, t1, s1 in (KINDS_TYPES)
0 commit comments