pub type Mat3 = [[f64; 3]; 3];
pub fn inline_rxr(a: &Mat3, b: &Mat3) -> Mat3 {
let mut w = [[0.0_f64; 3]; 3];
for i in 0..3 {
for j in 0..3 {
let mut s = 0.0_f64;
for k in 0..3 {
s += a[i][k] * b[k][j];
}
w[i][j] = s;
}
}
w
}
pub fn inline_tr(r: &Mat3) -> Mat3 {
let mut rt = [[0.0_f64; 3]; 3];
for i in 0..3 {
for j in 0..3 {
rt[i][j] = r[j][i];
}
}
rt
}
pub fn inline_mxmxm(a: &Mat3, b: &Mat3, c: &Mat3) -> Mat3 {
let mut w = [[0.0_f64; 3]; 3];
for i in 0..3 {
for l in 0..3 {
let mut s = 0.0_f64;
let mut comp = 0.0_f64; for j in 0..3 {
for k in 0..3 {
let term = a[i][j] * b[j][k] * c[k][l];
let y = term - comp;
let t = s + y;
comp = (t - s) - y;
s = t;
}
}
w[i][l] = s;
}
}
w
}