Skip to main content

ElasticIVElements

Trait ElasticIVElements 

Source
pub trait ElasticIVElements<const G: usize, V, const D: usize>
where Self: Elements, V: Tensor,
{ // Required methods fn internal_variables_initial(&self) -> InternalVariablesField<G, V>; fn internal_variables_increment( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_decrement: &NodalCoordinates<D>, step: Scalar, ) -> Result<InternalVariablesField<G, V>, ElementModelError>; fn internal_variables_root( &self, local_solver: &NewtonRaphson, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<InternalVariablesField<G, V>, ElementModelError>; fn nodal_forces_into( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_forces: &mut NodalForcesSolid<D>, ) -> Result<(), ElementModelError>; fn nodal_forces_eliminated_into( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_forces: &mut NodalForcesSolid<D>, ) -> Result<(), ElementModelError>; fn nodal_stiffnesses_into( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_stiffnesses: &mut NodalStiffnessesSolid<D>, ) -> Result<(), ElementModelError>; // Provided methods fn nodal_forces( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<NodalForcesSolid<D>, ElementModelError> { ... } fn nodal_forces_eliminated( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<NodalForcesSolid<D>, ElementModelError> { ... } fn nodal_stiffnesses( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<NodalStiffnessesSolid<D>, ElementModelError> { ... } }

Required Methods§

Source

fn internal_variables_initial(&self) -> InternalVariablesField<G, V>

The internal variables every integration point starts from.

Source

fn internal_variables_increment( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_decrement: &NodalCoordinates<D>, step: Scalar, ) -> Result<InternalVariablesField<G, V>, ElementModelError>

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

This is the second row of the Newton system the solver never assembles, each integration point taking its own share of the increment.

Source

fn internal_variables_root( &self, local_solver: &NewtonRaphson, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<InternalVariablesField<G, V>, ElementModelError>

Solves the internal variables everywhere, holding the deformation fixed.

Every integration point is independent of every other, so this is a gather of local solves rather than a system.

Source

fn nodal_forces_into( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_forces: &mut NodalForcesSolid<D>, ) -> Result<(), ElementModelError>

Source

fn nodal_forces_eliminated_into( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_forces: &mut NodalForcesSolid<D>, ) -> Result<(), ElementModelError>

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

\mathbf{r}_u - \mathcal{K}_{uv}\mathcal{K}_{vv}^{-1}\mathbf{r}_v
Source

fn nodal_stiffnesses_into( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_stiffnesses: &mut NodalStiffnessesSolid<D>, ) -> Result<(), ElementModelError>

Provided Methods§

Source

fn nodal_forces( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<NodalForcesSolid<D>, ElementModelError>

Source

fn nodal_forces_eliminated( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<NodalForcesSolid<D>, ElementModelError>

Source

fn nodal_stiffnesses( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<NodalStiffnessesSolid<D>, ElementModelError>

Dyn Compatibility§

This trait is dyn compatible.

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

Implementors§

Source§

impl<B, const G: usize, V, const D: usize> ElasticIVElements<G, V, D> for Model<B, D>
where B: ElasticIVElements<G, V, D>, V: Tensor,

Source§

impl<C, F, const G: usize, const M: usize, const N: usize, const P: usize, V, E> ElasticIVElements<G, V, 3> for Block<C, F, G, M, N, P>
where C: ElasticIV<V>, C::Residual: Erase<Erased = E>, F: ElasticIVFiniteElement<C, G, M, N, P, V, E>, 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>, V: Erase<Erased = E> + Jacobian + Solution, <V as Tensor>::Unit: UnitDiv<<V as Tensor>::Unit, Output = Dimensionless>,