pub trait HyperelasticFiniteElementBlock<C, F, const G: usize, const N: usize>where
C: Hyperelastic,
F: HyperelasticFiniteElement<C, G, N>,
Self: ElasticFiniteElementBlock<C, F, G, N>,{
// Required methods
fn helmholtz_free_energy(
&self,
nodal_coordinates: &NodalCoordinatesBlock,
) -> Result<Scalar, ConstitutiveError>;
fn minimize(
&self,
initial_coordinates: NodalCoordinatesBlock,
optimization: NewtonRaphson,
equality_constraint: EqualityConstraint,
) -> Result<NodalCoordinatesBlock, OptimizeError>;
}