Skip to content

Commit bd6f3fe

Browse files
committed
Use lapack_sys in tridiagonal.rs
1 parent e15c93c commit bd6f3fe

File tree

1 file changed

+36
-26
lines changed

1 file changed

+36
-26
lines changed

lax/src/tridiagonal.rs

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,17 @@ macro_rules! impl_tridiagonal {
157157
// We have to calc one-norm before LU factorization
158158
let a_opnorm_one = a.opnorm_one();
159159
let mut info = 0;
160-
unsafe { $gttrf(n, &mut a.dl, &mut a.d, &mut a.du, &mut du2, &mut ipiv, &mut info,) };
160+
unsafe {
161+
$gttrf(
162+
&n,
163+
AsPtr::as_mut_ptr(&mut a.dl),
164+
AsPtr::as_mut_ptr(&mut a.d),
165+
AsPtr::as_mut_ptr(&mut a.du),
166+
AsPtr::as_mut_ptr(&mut du2),
167+
ipiv.as_mut_ptr(),
168+
&mut info,
169+
)
170+
};
161171
info.as_lapack_result()?;
162172
Ok(LUFactorizedTridiagonal {
163173
a,
@@ -170,25 +180,25 @@ macro_rules! impl_tridiagonal {
170180
fn rcond_tridiagonal(lu: &LUFactorizedTridiagonal<Self>) -> Result<Self::Real> {
171181
let (n, _) = lu.a.l.size();
172182
let ipiv = &lu.ipiv;
173-
let mut work = unsafe { vec_uninit( 2 * n as usize) };
183+
let mut work: Vec<Self> = unsafe { vec_uninit( 2 * n as usize) };
174184
$(
175185
let mut $iwork = unsafe { vec_uninit( n as usize) };
176186
)*
177187
let mut rcond = Self::Real::zero();
178188
let mut info = 0;
179189
unsafe {
180190
$gtcon(
181-
NormType::One as u8,
182-
n,
183-
&lu.a.dl,
184-
&lu.a.d,
185-
&lu.a.du,
186-
&lu.du2,
187-
ipiv,
188-
lu.a_opnorm_one,
191+
NormType::One.as_ptr(),
192+
&n,
193+
AsPtr::as_ptr(&lu.a.dl),
194+
AsPtr::as_ptr(&lu.a.d),
195+
AsPtr::as_ptr(&lu.a.du),
196+
AsPtr::as_ptr(&lu.du2),
197+
ipiv.as_ptr(),
198+
&lu.a_opnorm_one,
189199
&mut rcond,
190-
&mut work,
191-
$(&mut $iwork,)*
200+
AsPtr::as_mut_ptr(&mut work),
201+
$($iwork.as_mut_ptr(),)*
192202
&mut info,
193203
);
194204
}
@@ -217,16 +227,16 @@ macro_rules! impl_tridiagonal {
217227
let mut info = 0;
218228
unsafe {
219229
$gttrs(
220-
t as u8,
221-
n,
222-
nrhs,
223-
&lu.a.dl,
224-
&lu.a.d,
225-
&lu.a.du,
226-
&lu.du2,
227-
ipiv,
228-
b_t.as_mut().map(|v| v.as_mut_slice()).unwrap_or(b),
229-
ldb,
230+
t.as_ptr(),
231+
&n,
232+
&nrhs,
233+
AsPtr::as_ptr(&lu.a.dl),
234+
AsPtr::as_ptr(&lu.a.d),
235+
AsPtr::as_ptr(&lu.a.du),
236+
AsPtr::as_ptr(&lu.du2),
237+
ipiv.as_ptr(),
238+
AsPtr::as_mut_ptr(b_t.as_mut().map(|v| v.as_mut_slice()).unwrap_or(b)),
239+
&ldb,
230240
&mut info,
231241
);
232242
}
@@ -240,7 +250,7 @@ macro_rules! impl_tridiagonal {
240250
};
241251
} // impl_tridiagonal!
242252

243-
impl_tridiagonal!(@real, f64, lapack::dgttrf, lapack::dgtcon, lapack::dgttrs);
244-
impl_tridiagonal!(@real, f32, lapack::sgttrf, lapack::sgtcon, lapack::sgttrs);
245-
impl_tridiagonal!(@complex, c64, lapack::zgttrf, lapack::zgtcon, lapack::zgttrs);
246-
impl_tridiagonal!(@complex, c32, lapack::cgttrf, lapack::cgtcon, lapack::cgttrs);
253+
impl_tridiagonal!(@real, f64, lapack_sys::dgttrf_, lapack_sys::dgtcon_, lapack_sys::dgttrs_);
254+
impl_tridiagonal!(@real, f32, lapack_sys::sgttrf_, lapack_sys::sgtcon_, lapack_sys::sgttrs_);
255+
impl_tridiagonal!(@complex, c64, lapack_sys::zgttrf_, lapack_sys::zgtcon_, lapack_sys::zgttrs_);
256+
impl_tridiagonal!(@complex, c32, lapack_sys::cgttrf_, lapack_sys::cgtcon_, lapack_sys::cgttrs_);

0 commit comments

Comments
 (0)