finite_element_method 0.9.12

A finite element method module.
Documentation
use extended_matrix::FloatTrait;

use crate::fem::FEM;

#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum ElementForceComponent {
    ForceR,
    ForceS,
    ForceT,
    MembraneForceR,
    MembraneForceS,
    MembraneForceRS,
    ShearForceRT,
    ShearForceST,
    MomentR,
    MomentS,
    MomentT,
    BendingMomentR,
    BendingMomentS,
    BendingMomentRS,
}

impl<V> FEM<V>
where
    V: FloatTrait<Output = V>,
{
    pub fn extract_elements_analysis_result(
        &self,
    ) -> Result<Vec<(u32, Vec<(ElementForceComponent, V)>)>, String> {
        let mut elements_analysis_result = Vec::new();

        for (truss_element_number, truss_element) in self.get_truss_elements().iter() {
            let element_analysis_result = truss_element.extract_element_analysis_result(
                self.get_nodes(),
                self.get_displacements_vector(),
            )?;
            elements_analysis_result.push((*truss_element_number, element_analysis_result))
        }

        for (beam_element_number, beam_element) in self.get_beam_elements().iter() {
            let element_analysis_result = beam_element.extract_element_analysis_result(
                self.get_nodes(),
                self.get_displacements_vector(),
            )?;
            elements_analysis_result.push((*beam_element_number, element_analysis_result))
        }

        for (plate_element_number, plate_element) in self.get_plate_elements().iter() {
            let element_analysis_result = plate_element.extract_element_analysis_result(
                self.get_nodes(),
                self.get_displacements_vector(),
                self.get_props().get_rel_tol(),
            )?;
            elements_analysis_result.push((*plate_element_number, element_analysis_result))
        }

        Ok(elements_analysis_result)
    }
}