#[derive(Clone, Debug, PartialEq)]
pub struct EquilibriumState {
pub xyz: Vec<f64>,
pub lengths: Vec<f64>,
pub forces: Vec<f64>,
pub residuals: Vec<f64>,
pub loads: Vec<f64>,
pub vectors: Vec<f64>,
}
impl EquilibriumState {
pub fn num_nodes(&self) -> usize {
self.xyz.len() / 3
}
pub fn max_free_residual_norm(&self, is_support: &[bool]) -> f64 {
let mut max_r: f64 = 0.0;
for i in 0..self.num_nodes() {
if is_support[i] {
continue;
}
let rx = self.residuals[3 * i];
let ry = self.residuals[3 * i + 1];
let rz = self.residuals[3 * i + 2];
max_r = max_r.max((rx * rx + ry * ry + rz * rz).sqrt());
}
max_r
}
}