Skip to main content

ElasticIVFiniteElement

Trait ElasticIVFiniteElement 

Source
pub trait ElasticIVFiniteElement<C, const G: usize, const M: usize, const N: usize, const P: usize, V, E>
where C: ElasticIV<V>, C::Residual: Erase<Erased = E>, Self: SolidFiniteElement<G, M, N, P>, V: Erase<Erased = E> + Jacobian + Solution, <V as Tensor>::Unit: UnitDiv<<V as Tensor>::Unit, Output = Dimensionless>, E: Tensor, for<'a> &'a C::Residual: Div<C::TangentVv, Output = V>, for<'a> &'a V: Mul<Quantity<Dimensionless>, Output = V> + Mul<Scalar, Output = V>, for<'a> &'a Matrix: Mul<&'a V, Output = Vector>,
{ // Required methods fn internal_variables_initial( &self, constitutive_model: &C, ) -> InternalVariables<G, V>; fn internal_variables_root( &self, local_solver: &NewtonRaphson, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, ) -> Result<InternalVariables<G, V>, FiniteElementError>; fn internal_variables_increment( &self, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, nodal_decrement: &ElementNodalCoordinates<N>, step: Scalar, ) -> Result<InternalVariables<G, V>, FiniteElementError>; fn nodal_forces( &self, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, ) -> Result<ElementNodalForcesSolid<N>, FiniteElementError>; fn nodal_forces_eliminated( &self, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, ) -> Result<ElementNodalForcesSolid<N>, FiniteElementError>; fn nodal_stiffnesses( &self, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, ) -> Result<ElementNodalStiffnessesSolid<N>, FiniteElementError>; }

Required Methods§

Source

fn internal_variables_initial( &self, constitutive_model: &C, ) -> InternalVariables<G, V>

The internal variables an element starts from at every integration point.

Source

fn internal_variables_root( &self, local_solver: &NewtonRaphson, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, ) -> Result<InternalVariables<G, V>, FiniteElementError>

Solves the internal variables at every integration point, holding the deformation fixed.

The integration points are independent of one another, the internal variables of one never entering the residual of another.

Source

fn internal_variables_increment( &self, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, nodal_decrement: &ElementNodalCoordinates<N>, step: Scalar, ) -> Result<InternalVariables<G, V>, FiniteElementError>

Steps the internal variables alongside a decrement of the nodal coordinates, rather than solving them where the coordinates now are.

Source

fn nodal_forces( &self, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, ) -> Result<ElementNodalForcesSolid<N>, FiniteElementError>

Source

fn nodal_forces_eliminated( &self, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, ) -> Result<ElementNodalForcesSolid<N>, FiniteElementError>

The nodal forces with the residual of the internal variables eliminated into them, for when they are carried rather than solved.

Source

fn nodal_stiffnesses( &self, constitutive_model: &C, nodal_coordinates: &ElementNodalCoordinates<N>, internal_variables: &InternalVariables<G, V>, ) -> Result<ElementNodalStiffnessesSolid<N>, FiniteElementError>

The tangent stiffnesses with the internal variables condensed out.

\mathcal{C} = \mathcal{K}_{uu} - \mathcal{K}_{uv}\mathcal{K}_{vv}^{-1}\mathcal{K}_{vu}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<C, const G: usize, const N: usize, const O: usize, const P: usize, V, E> ElasticIVFiniteElement<C, G, 3, N, P, V, E> for Element<3, G, N, O>
where C: ElasticIV<V>, C::Residual: Erase<Erased = E>, Self: SolidFiniteElement<G, 3, N, P>, V: Erase<Erased = E> + Jacobian + Solution, <V as Tensor>::Unit: UnitDiv<<V as Tensor>::Unit, Output = Dimensionless>, E: Tensor, for<'a> &'a C::Residual: Div<C::TangentVv, Output = V>, for<'a> &'a V: Mul<Quantity<Dimensionless>, Output = V> + Mul<Scalar, Output = V>, for<'a> &'a Matrix: Mul<&'a V, Output = Vector>,