conspire 0.6.0

The Rust interface to conspire.
Documentation
pub mod elastic;
pub mod hyperelastic;

use crate::{
    mechanics::DeformationGradients,
    vem::{
        NodalCoordinates,
        block::{Block, element::solid::SolidVirtualElement},
    },
};

pub use crate::fem::solid::{NodalForcesSolid, NodalStiffnessesSolid};

pub trait SolidVirtualElementBlock<C, F>
where
    F: SolidVirtualElement,
{
    fn deformation_gradients(
        &self,
        nodal_coordinates: &NodalCoordinates,
    ) -> Vec<DeformationGradients>;
}

impl<C, F> SolidVirtualElementBlock<C, F> for Block<C, F>
where
    F: SolidVirtualElement,
{
    fn deformation_gradients(
        &self,
        nodal_coordinates: &NodalCoordinates,
    ) -> Vec<DeformationGradients> {
        self.elements()
            .iter()
            .zip(self.elements_nodes())
            .map(|(element, nodes)| {
                element.deformation_gradients(Self::element_coordinates(nodal_coordinates, nodes))
            })
            .collect()
    }
}