use crate::lu::*;
use crate::lufact::{lsolve, ltsolve, usolve, utsolve};
pub fn dgstrs(
_gp: &GP,
trans: char,
n: i32,
nrhs: i32,
lu: &mut LU,
ia: i32,
ja: i32,
b: &mut [f64],
ib: i32,
jb: i32,
) -> i32 {
if ia != 1 {
return -5;
}
if ja != 1 {
return -6;
}
if ib != 1 {
return -8;
}
if jb != 1 {
return -9;
}
if nrhs != 1 {
return -3;
}
let mut rwork = vec![0.0; n as usize];
if trans.to_ascii_uppercase() == 'N' {
let _info = lsolve(
n,
&lu.lu_nz,
&lu.lu_rowind,
&lu.l_colptr,
&lu.u_colptr,
&lu.row_perm,
&lu.col_perm,
b,
&mut rwork,
);
let _info = usolve(
n,
&lu.lu_nz,
&lu.lu_rowind,
&lu.l_colptr,
&lu.u_colptr,
&lu.row_perm,
&lu.col_perm,
&rwork,
b,
);
} else if trans.to_ascii_uppercase() == 'T' {
let _info = utsolve(
n,
&lu.lu_nz,
&lu.lu_rowind,
&lu.l_colptr,
&lu.u_colptr,
&lu.row_perm,
&lu.col_perm,
b,
&mut rwork,
);
let _info = ltsolve(
n,
&lu.lu_nz,
&lu.lu_rowind,
&lu.l_colptr,
&lu.u_colptr,
&lu.row_perm,
&lu.col_perm,
&rwork,
b,
);
} else {
return -1;
}
let flops = (2 * (lu.u_colptr[n as usize] - 1)) as f64;
println!("FLOPS: {}", flops);
0
}