pub struct NodeId(/* private fields */);Expand description
Generational index into the planar Domain node store. Stays valid
across removals of other nodes; using a stale key against a different
domain is a logic error the type cannot catch, but a use-after-free
within one domain’s lifetime is.
Trait Implementations§
impl Copy for NodeId
Source§impl ElementOps<PLANAR_NDIM, NDF, NodeId> for Element
impl ElementOps<PLANAR_NDIM, NDF, NodeId> for Element
Source§type Load = ElementLoad
type Load = ElementLoad
An element-load kind this catalog supports.
Add so several loads on
one element in one pattern accumulate.Source§type Id = ElementId
type Id = ElementId
This catalog’s own
Domain element-store key. An associated type
rather than a further generic parameter of Domain, so it is always
determined by E and never an independently unconstrained type
variable (which broke inference at every Domain::new()).Source§fn dof_mask(&self) -> DofMask
fn dof_mask(&self) -> DofMask
The node DOF slots this element stiffens (the same for each node).
Must cover every slot on which
assemble_tangent can produce a
nonzero stiffness or resistance: a slot outside the mask that no
other element, constraint or boundary condition uses is not an
equation at all, so such a contribution would be silently dropped
(debug builds assert against it).Source§fn validate(
&self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
) -> Result<(), &'static str>
fn validate( &self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, ) -> Result<(), &'static str>
Rejects an element whose geometry or parameters make it unusable
(coincident nodes, inverted orientation, …); called by
Domain::validate. The default accepts everything.Source§fn accepts_load(&self, load: &ElementLoad) -> bool
fn accepts_load(&self, load: &ElementLoad) -> bool
Whether this element can carry every kind of load present in
load.
Checked by Domain::validate on each pattern’s load, before anything is
accumulated; the default accepts everything.Source§fn prepare(&mut self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>)
fn prepare(&mut self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>)
Caches geometry-only quantities (shape-function derivatives, areas)
once the model is final; called by
Domain::validate after validate
succeeds. Must be idempotent, and every method must give the same
answer whether or not it has been called (the default does nothing).Source§fn gauss_point_count(&self) -> usize
fn gauss_point_count(&self) -> usize
How many Gauss points
gauss_responses reports (zero for elements that
are not continuum elements); the bound a Gauss-point recorder’s point
is checked against.Source§fn gauss_responses(
&self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
) -> Option<Vec<GaussResponse>>
fn gauss_responses( &self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, ) -> Option<Vec<GaussResponse>>
Every Gauss point’s committed strain and stress;
None for every
element that is not a continuum element.Source§fn assemble_tangent<S: TangentSink<NodeId>>(
&self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
load: Option<&ElementLoad>,
sink: &mut S,
)
fn assemble_tangent<S: TangentSink<NodeId>>( &self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, load: Option<&ElementLoad>, sink: &mut S, )
Tangent and internal resisting force at the current nodal state.
load is the effective element load at the pseudo-time being
assembled (every pattern’s load on this element, scaled by its
factor). Only elements whose internal state depends on the load
itself (ForceBeamColumn) read it; for every other element loads
enter only through assemble_load.Source§fn assemble_load<S: VectorSink<NodeId>>(
&self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
load: Option<&ElementLoad>,
sink: &mut S,
)
fn assemble_load<S: VectorSink<NodeId>>( &self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, load: Option<&ElementLoad>, sink: &mut S, )
The equivalent nodal load vector of
load (zero if load is
None or of a kind this element does not carry).Source§fn assemble_mass<S: VectorSink<NodeId>>(
&self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
sink: &mut S,
)
fn assemble_mass<S: VectorSink<NodeId>>( &self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, sink: &mut S, )
Lumped (diagonal) mass, per element DOF.
Source§fn commit(
&mut self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
load: Option<&ElementLoad>,
)
fn commit( &mut self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, load: Option<&ElementLoad>, )
Commit this element’s state at the converged nodal state.
load is
the effective element load at the committed pseudo-time.Source§fn local_force_width(&self) -> usize
fn local_force_width(&self) -> usize
Length of
local_force/local_load_force; the bound a recorder’s
component index is checked against.Source§fn local_force(
&self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
) -> ElementForce
fn local_force( &self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, ) -> ElementForce
This element’s local nodal force at its current committed state,
in the element’s own axis frame (the original fixed orientation for
Linear/PDelta, the current chord for Corotational). Never
mutates state.Source§fn local_load_force(
&self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
load: Option<&ElementLoad>,
) -> ElementForce
fn local_load_force( &self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, load: Option<&ElementLoad>, ) -> ElementForce
assemble_load’s equivalent nodal load in the same local frame as
local_force; what Domain::element_end_force subtracts so a
loaded member’s end forces include the load’s fixed-end effect.Source§fn fiber_responses(
&self,
nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>,
) -> Option<Vec<Vec<(f64, f64)>>>
fn fiber_responses( &self, nodes: &NodeView<'_, PLANAR_NDIM, NDF, NodeId>, ) -> Option<Vec<Vec<(f64, f64)>>>
Every integration point’s per-fiber
(strain, stress); None for
every element that is not fiber-discretized.Source§fn gauss_component_count(&self) -> usize
fn gauss_component_count(&self) -> usize
Components per Gauss-point strain or stress vector (3 for plane elements, 8 for shells);
the bound a Gauss-point recorder’s
component is checked against.Source§fn shell_responses(
&self,
_nodes: &NodeView<'_, NDIM, NDOF, NId>,
) -> Option<Vec<ShellResponse>>
fn shell_responses( &self, _nodes: &NodeView<'_, NDIM, NDOF, NId>, ) -> Option<Vec<ShellResponse>>
Every Gauss point’s committed generalized strain and resultants;
None for every
element that is not a shell.impl Eq for NodeId
Source§impl Key for NodeId
impl Key for NodeId
Source§fn null() -> Self
fn null() -> Self
Creates a new key that is always invalid and distinct from any non-null
key. A null key can only be created through this method (or default
initialization of keys made with
new_key_type!, which calls this
method). Read moreSource§impl Ord for NodeId
impl Ord for NodeId
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl PartialOrd for NodeId
impl PartialOrd for NodeId
impl StructuralPartialEq for NodeId
Auto Trait Implementations§
impl Freeze for NodeId
impl RefUnwindSafe for NodeId
impl Send for NodeId
impl Sync for NodeId
impl Unpin for NodeId
impl UnsafeUnpin for NodeId
impl UnwindSafe for NodeId
Blanket Implementations§
impl<T> Boilerplate for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, U> Imply<T> for U
impl<T> Scalar for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.