22//! for tridiagonal matrix
33
44use lapacke;
5- use ndarray:: * ;
65use num_traits:: Zero ;
76
87use super :: NormType ;
@@ -11,20 +10,18 @@ use super::{into_result, Pivot, Transpose};
1110use crate :: error:: * ;
1211use crate :: layout:: MatrixLayout ;
1312use crate :: opnorm:: * ;
14- use crate :: tridiagonal:: { LUFactorizedTriDiagonal , TriDiagonal } ;
13+ use crate :: tridiagonal:: { LUFactorizedTridiagonal , Tridiagonal } ;
1514use crate :: types:: * ;
1615
1716/// Wraps `*gttrf`, `*gtcon` and `*gttrs`
18- pub trait TriDiagonal_ : Scalar + Sized {
17+ pub trait Tridiagonal_ : Scalar + Sized {
1918 /// Computes the LU factorization of a tridiagonal `m x n` matrix `a` using
2019 /// partial pivoting with row interchanges.
21- unsafe fn lu_tridiagonal (
22- a : & mut TriDiagonal < Self > ,
23- ) -> Result < ( Array1 < Self > , Self :: Real , Pivot ) > ;
20+ unsafe fn lu_tridiagonal ( a : & mut Tridiagonal < Self > ) -> Result < ( Vec < Self > , Self :: Real , Pivot ) > ;
2421 /// Estimates the the reciprocal of the condition number of the tridiagonal matrix in 1-norm.
25- unsafe fn rcond_tridiagonal ( lu : & LUFactorizedTriDiagonal < Self > ) -> Result < Self :: Real > ;
22+ unsafe fn rcond_tridiagonal ( lu : & LUFactorizedTridiagonal < Self > ) -> Result < Self :: Real > ;
2623 unsafe fn solve_tridiagonal (
27- lu : & LUFactorizedTriDiagonal < Self > ,
24+ lu : & LUFactorizedTridiagonal < Self > ,
2825 bl : MatrixLayout ,
2926 t : Transpose ,
3027 b : & mut [ Self ] ,
@@ -33,37 +30,30 @@ pub trait TriDiagonal_: Scalar + Sized {
3330
3431macro_rules! impl_tridiagonal {
3532 ( $scalar: ty, $gttrf: path, $gtcon: path, $gttrs: path) => {
36- impl TriDiagonal_ for $scalar {
33+ impl Tridiagonal_ for $scalar {
3734 unsafe fn lu_tridiagonal(
38- a: & mut TriDiagonal <Self >,
39- ) -> Result <( Array1 <Self >, Self :: Real , Pivot ) > {
35+ a: & mut Tridiagonal <Self >,
36+ ) -> Result <( Vec <Self >, Self :: Real , Pivot ) > {
4037 let ( n, _) = a. l. size( ) ;
4138 let anom = a. opnorm_one( ) ?;
42- let dl = a. dl. as_slice_mut( ) . unwrap( ) ;
43- let d = a. d. as_slice_mut( ) . unwrap( ) ;
44- let du = a. du. as_slice_mut( ) . unwrap( ) ;
4539 let mut du2 = vec![ Zero :: zero( ) ; ( n - 2 ) as usize ] ;
4640 let mut ipiv = vec![ 0 ; n as usize ] ;
47- let info = $gttrf( n, dl, d, du, & mut du2, & mut ipiv) ;
48- into_result( info, ( arr1 ( & du2) , anom, ipiv) )
41+ let info = $gttrf( n, & mut a . dl, & mut a . d, & mut a . du, & mut du2, & mut ipiv) ;
42+ into_result( info, ( du2, anom, ipiv) )
4943 }
5044
51- unsafe fn rcond_tridiagonal( lu: & LUFactorizedTriDiagonal <Self >) -> Result <Self :: Real > {
45+ unsafe fn rcond_tridiagonal( lu: & LUFactorizedTridiagonal <Self >) -> Result <Self :: Real > {
5246 let ( n, _) = lu. a. l. size( ) ;
53- let dl = lu. a. dl. as_slice( ) . unwrap( ) ;
54- let d = lu. a. d. as_slice( ) . unwrap( ) ;
55- let du = lu. a. du. as_slice( ) . unwrap( ) ;
56- let du2 = lu. du2. as_slice( ) . unwrap( ) ;
5747 let ipiv = & lu. ipiv;
5848 let anorm = lu. anom;
5949 let mut rcond = Self :: Real :: zero( ) ;
6050 let info = $gtcon(
6151 NormType :: One as u8 ,
6252 n,
63- dl,
64- d,
65- du,
66- du2,
53+ & lu . a . dl,
54+ & lu . a . d,
55+ & lu . a . du,
56+ & lu . du2,
6757 ipiv,
6858 anorm,
6959 & mut rcond,
@@ -72,28 +62,24 @@ macro_rules! impl_tridiagonal {
7262 }
7363
7464 unsafe fn solve_tridiagonal(
75- lu: & LUFactorizedTriDiagonal <Self >,
65+ lu: & LUFactorizedTridiagonal <Self >,
7666 bl: MatrixLayout ,
7767 t: Transpose ,
7868 b: & mut [ Self ] ,
7969 ) -> Result <( ) > {
8070 let ( n, _) = lu. a. l. size( ) ;
8171 let ( _, nrhs) = bl. size( ) ;
82- let dl = lu. a. dl. as_slice( ) . unwrap( ) ;
83- let d = lu. a. d. as_slice( ) . unwrap( ) ;
84- let du = lu. a. du. as_slice( ) . unwrap( ) ;
85- let du2 = lu. du2. as_slice( ) . unwrap( ) ;
8672 let ipiv = & lu. ipiv;
8773 let ldb = bl. lda( ) ;
8874 let info = $gttrs(
8975 lu. a. l. lapacke_layout( ) ,
9076 t as u8 ,
9177 n,
9278 nrhs,
93- dl,
94- d,
95- du,
96- du2,
79+ & lu . a . dl,
80+ & lu . a . d,
81+ & lu . a . du,
82+ & lu . du2,
9783 ipiv,
9884 b,
9985 ldb,
0 commit comments