Skip to main content

Model

Struct Model 

Source
pub struct Model<B, const D: usize> { /* private fields */ }

Implementations§

Source§

impl<B, const D: usize> Model<B, D>

Source

pub fn blocks(&self) -> &B

Trait Implementations§

Source§

impl<B: Debug, const D: usize> Debug for Model<B, D>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<B, const D: usize> ElasticElements<D> for Model<B, D>
where B: ElasticElements<D>,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<B, const D: usize> ElasticHyperviscousElements<D> for Model<B, D>

Source§

fn viscous_dissipation( &self, nodal_coordinates: &NodalCoordinates<D>, nodal_velocities: &NodalVelocities<D>, ) -> Result<Quantity<Power>, ElementModelError>

Source§

fn dissipation_potential( &self, nodal_coordinates: &NodalCoordinates<D>, nodal_velocities: &NodalVelocities<D>, ) -> Result<Quantity<Power>, ElementModelError>

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§

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. Read more
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. Read more
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. Read more
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_stiffnesses_into( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, nodal_stiffnesses: &mut NodalStiffnessesSolid<D>, ) -> Result<(), ElementModelError>

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>

Source§

impl<B, S, const D: usize> ElasticViscoplasticElements<S, D> for Model<B, D>

Source§

fn initial_state(&self) -> S

Source§

fn nodal_forces_into( &self, nodal_coordinates: &NodalCoordinates<D>, state_variables: &S, nodal_forces: &mut NodalForcesSolid<D>, ) -> Result<(), ElementModelError>

Source§

fn nodal_stiffnesses_into( &self, nodal_coordinates: &NodalCoordinates<D>, state_variables: &S, nodal_stiffnesses: &mut NodalStiffnessesSolid<D>, ) -> Result<(), ElementModelError>

Source§

fn state_variables_evolution( &self, nodal_coordinates: &NodalCoordinates<D>, state_variables: &S, ) -> Result<Derivative<S>, ElementModelError>

Source§

fn nodal_forces( &self, nodal_coordinates: &NodalCoordinates<D>, state_variables: &S, ) -> Result<NodalForcesSolid<D>, ElementModelError>

Source§

fn nodal_stiffnesses( &self, nodal_coordinates: &NodalCoordinates<D>, state_variables: &S, ) -> Result<NodalStiffnessesSolid<D>, ElementModelError>

Source§

impl<B, const D: usize> ElementModel<D> for Model<B, D>
where B: Debug,

Source§

impl<B, const D: usize> Elements for Model<B, D>
where B: Elements,

Source§

fn node_neighbors(&self, neighbors: &mut [Vec<usize>])

Source§

impl<B, const D: usize> FirstOrderMinimize<Quantity<Energy>, TensorVector<TensorRank1<D, Current, Force>>, TensorVector<TensorRank1<D, Current, Length>>> for Model<B, D>

Source§

impl<B, const D: usize> FirstOrderMinimize<Quantity<PowerTemperature>, TensorVector<Quantity<Power>>, TensorVector<Quantity<Temperature>>> for Model<B, D>

Source§

impl<B, const D: usize> FirstOrderRoot<D> for Model<B, D>

Source§

impl<B, const D: usize> FirstOrderRoot<TensorVector<Quantity<Power>>, TensorVector<QuantitySparseVec<PowerPerTemperature>>, TensorVector<Quantity<Temperature>>> for Model<B, D>

Source§

impl<B, const D: usize> FirstOrderRoot<TensorVector<TensorRank1<D, Current, Force>>, TensorVector<TensorRank2SparseVec<D, Current, Current, ForcePerLength>>, TensorVector<TensorRank1<D, Current, Length>>> for Model<B, D>
where B: ElasticElements<D>,

Source§

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

Source§

impl<B, const D: usize> From<(B, TensorVector<TensorRank1<D, Reference, Length>>)> for Model<B, D>

Source§

fn from((blocks, coordinates): (B, NodalReferenceCoordinates<D>)) -> Self

Converts to this type from the input type.
Source§

impl<B, const D: usize> HyperelasticElements<D> for Model<B, D>

Source§

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

Source§

fn helmholtz_free_energy( &self, nodal_coordinates: &NodalCoordinates<D>, internal_variables: &InternalVariablesField<G, V>, ) -> Result<Quantity<Energy>, ElementModelError>

Source§

impl<B, S, const D: usize> HyperelasticViscoplasticElements<S, D> for Model<B, D>

Source§

fn helmholtz_free_energy( &self, nodal_coordinates: &NodalCoordinates<D>, state_variables: &S, ) -> Result<Quantity<Energy>, ElementModelError>

Source§

impl<B, const D: usize> HyperviscoelasticElements<D> for Model<B, D>

Source§

impl<B, Y> RootRkmkDae<3, Y> for Model<B, 3>

Source§

type History = <B as ElasticViscoplasticDaeElements<Y, 3>>::History

The model’s plastic-state history type.
Source§

fn root_rkmk_dae<Tab: ButcherTableau>( &self, solver: impl FirstOrderRootFinding<NodalForcesSolid<3>, NodalStiffnessesSolid<3>, NodalCoordinates<3>>, time: &[Quantity<Time>], bcs: ElasticViscoplasticBCs, ) -> Result<(Times, NodalCoordinatesHistory<3>, Self::History), IntegrationError>

Solve under an applied load, resolving nodal equilibrium at every RK stage of every load-step window while every Gauss point’s plastic state advances on its group.
Source§

fn root_rkmk_dae_adaptive<Tab: EmbeddedTableau>( &self, solver: impl FirstOrderRootFinding<NodalForcesSolid<3>, NodalStiffnessesSolid<3>, NodalCoordinates<3>>, time: &[Quantity<Time>], bcs: ElasticViscoplasticBCs, abs_tol: Scalar, rel_tol: Scalar, ) -> Result<(Times, NodalCoordinatesHistory<3>, Self::History), IntegrationError>

As Self::root_rkmk_dae, but the whole span is stepped under embedded (Tab::D) error control rather than on the supplied load grid. Read more
Source§

impl<B, Y> RootRkmkDaeMinimize<3, Y> for Model<B, 3>

Source§

type History = <B as ElasticViscoplasticDaeElements<Y, 3>>::History

The model’s plastic-state history type.
Source§

fn root_rkmk_dae_minimize<Tab: ButcherTableau>( &self, solver: impl SecondOrderOptimization<Quantity<Energy>, NodalForcesSolid<3>, NodalStiffnessesSolid<3>, NodalCoordinates<3>>, time: &[Quantity<Time>], bcs: ElasticViscoplasticBCs, ) -> Result<(Times, NodalCoordinatesHistory<3>, Self::History), IntegrationError>

Solve under an applied load, resolving nodal equilibrium by potential minimization at every RK stage of every load-step window while every Gauss point’s plastic state advances on its group.
Source§

fn root_rkmk_dae_adaptive_minimize<Tab: EmbeddedTableau>( &self, solver: impl SecondOrderOptimization<Quantity<Energy>, NodalForcesSolid<3>, NodalStiffnessesSolid<3>, NodalCoordinates<3>>, time: &[Quantity<Time>], bcs: ElasticViscoplasticBCs, abs_tol: Scalar, rel_tol: Scalar, ) -> Result<(Times, NodalCoordinatesHistory<3>, Self::History), IntegrationError>

As Self::root_rkmk_dae_minimize, but the whole span is stepped under embedded (Tab::D) error control rather than on the supplied load grid. Read more
Source§

impl<B, const D: usize> SecondOrderMinimize<D> for Model<B, D>

Source§

impl<B, const D: usize> SecondOrderMinimize<Quantity<Energy>, TensorVector<TensorRank1<D, Current, Force>>, TensorRank2SparseVec2DSymmetric<D, Current, Current, ForcePerLength>, TensorVector<TensorRank1<D, Current, Length>>> for Model<B, D>

Source§

impl<B, const D: usize> SecondOrderMinimize<Quantity<PowerTemperature>, TensorVector<Quantity<Power>>, TensorVector<QuantitySparseVec<PowerPerTemperature>>, TensorVector<Quantity<Temperature>>> for Model<B, D>

Source§

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

Source§

impl<B, const D: usize> ThermalConductionElements for Model<B, D>

Source§

impl<C1, C2, F1, F2, const G1: usize, const N1: usize, const P1: usize, const G2: usize, const N2: usize, const P2: usize> TryFrom<(Mesh<3>, (C1, C2))> for Model<ElasticViscoplasticAndElastic<Block<C1, F1, G1, 3, N1, P1>, Block<C2, F2, G2, 3, N2, P2>>, 3>
where F1: FiniteElement<G1, 3, N1, P1> + From<ElementNodalReferenceCoordinates<N1>>, F2: FiniteElement<G2, 3, N2, P2> + From<ElementNodalReferenceCoordinates<N2>>, PrimitiveConnectivity<3, N1>: TryFrom<Connectivity, Error = &'static str>, PrimitiveConnectivity<3, N2>: TryFrom<Connectivity, Error = &'static str>,

Source§

type Error = String

The type returned in the event of a conversion error.
Source§

fn try_from( (mesh, (constitutive_model_1, constitutive_model_2)): (Mesh<3>, (C1, C2)), ) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<const D: usize, B, M> TryFrom<(Mesh<D>, M)> for Model<B, D>
where B: FromConnectivities<D, M>,

Source§

type Error = String

The type returned in the event of a conversion error.
Source§

fn try_from( (mesh, constitutive_models): (Mesh<D>, M), ) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<B, const D: usize> ViscoelasticElements<D> for Model<B, D>

Source§

fn nodal_forces_into( &self, nodal_coordinates: &NodalCoordinates<D>, nodal_velocities: &NodalVelocities<D>, nodal_forces: &mut NodalForcesSolid<D>, ) -> Result<(), ElementModelError>

Source§

fn nodal_stiffnesses_into( &self, nodal_coordinates: &NodalCoordinates<D>, nodal_velocities: &NodalVelocities<D>, nodal_stiffnesses: &mut NodalDampingsSolid<D>, ) -> Result<(), ElementModelError>

Source§

fn nodal_forces( &self, nodal_coordinates: &NodalCoordinates<D>, nodal_velocities: &NodalVelocities<D>, ) -> Result<NodalForcesSolid<D>, ElementModelError>

Source§

fn nodal_stiffnesses( &self, nodal_coordinates: &NodalCoordinates<D>, nodal_velocities: &NodalVelocities<D>, ) -> Result<NodalDampingsSolid<D>, ElementModelError>

Source§

impl<B, const D: usize> ZerothOrderRoot<TensorVector<Quantity<Power>>, TensorVector<Quantity<Temperature>>> for Model<B, D>

Source§

impl<B, const D: usize> ZerothOrderRoot<TensorVector<TensorRank1<D, Current, Force>>, TensorVector<TensorRank1<D, Current, Length>>> for Model<B, D>
where B: ElasticElements<D>,

Auto Trait Implementations§

§

impl<B, const D: usize> Freeze for Model<B, D>
where B: Freeze,

§

impl<B, const D: usize> RefUnwindSafe for Model<B, D>
where B: RefUnwindSafe,

§

impl<B, const D: usize> Send for Model<B, D>
where B: Send,

§

impl<B, const D: usize> Sync for Model<B, D>
where B: Sync,

§

impl<B, const D: usize> Unpin for Model<B, D>
where B: Unpin,

§

impl<B, const D: usize> UnsafeUnpin for Model<B, D>
where B: UnsafeUnpin,

§

impl<B, const D: usize> UnwindSafe for Model<B, D>
where B: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Is<T> for T

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.