pub trait ElasticViscoplasticDaeElements<Y, const D: usize>where
Self: Elements,{
type Field: Integrable<Increment: Differentiable<Time>>;
type State: Clone + Differentiable + Tensor;
type History: TensorVec<Item = Self::State>;
// Required methods
fn flatten(state: &Self::State) -> <Self::Field as Integrable>::Point;
fn unflatten(flat: &<Self::Field as Integrable>::Point) -> Self::State;
fn dae_rate(
&self,
t: Quantity<Time>,
nodal_coordinates: &NodalCoordinates<D>,
flat: &<Self::Field as Integrable>::Point,
) -> Result<Derivative<<Self::Field as Integrable>::Increment, Time>, ElementModelError>;
}Expand description
Per-topology machinery behind RootRkmkDae: the whole-mesh
Integrable every Gauss point’s plastic state lives on (a
per-Gauss-point List for one block,
a Product of those for Blocks), how to flatten/unflatten between
it and the block’s native per-element State, and how to
evaluate every Gauss point’s plastic rate at a stage’s nodal coordinates.
Composes recursively over nested Blocks and forwards over
ElasticViscoplasticAndElastic, the same way
ElasticViscoplasticElements does.
Required Associated Types§
Sourcetype Field: Integrable<Increment: Differentiable<Time>>
type Field: Integrable<Increment: Differentiable<Time>>
The whole-mesh field this topology’s plastic state lives on.
Sourcetype State: Clone + Differentiable + Tensor
type State: Clone + Differentiable + Tensor
The per-element grouped state — a per-Gauss-point list for one block,
a TensorTuple of those for Blocks.
Sourcetype History: TensorVec<Item = Self::State>
type History: TensorVec<Item = Self::State>
Time history of Self::State.
Required Methods§
Sourcefn flatten(state: &Self::State) -> <Self::Field as Integrable>::Point
fn flatten(state: &Self::State) -> <Self::Field as Integrable>::Point
Flattens Self::State into Self::Field’s Point.
Sourcefn unflatten(flat: &<Self::Field as Integrable>::Point) -> Self::State
fn unflatten(flat: &<Self::Field as Integrable>::Point) -> Self::State
The inverse of Self::flatten.
Sourcefn dae_rate(
&self,
t: Quantity<Time>,
nodal_coordinates: &NodalCoordinates<D>,
flat: &<Self::Field as Integrable>::Point,
) -> Result<Derivative<<Self::Field as Integrable>::Increment, Time>, ElementModelError>
fn dae_rate( &self, t: Quantity<Time>, nodal_coordinates: &NodalCoordinates<D>, flat: &<Self::Field as Integrable>::Point, ) -> Result<Derivative<<Self::Field as Integrable>::Increment, Time>, ElementModelError>
Evaluates every Gauss point’s plastic rate at nodal_coordinates.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".