pub struct FiberSection { /* private fields */ }Expand description
A fiber-discretized cross-section: given the section’s axial strain
eps0 (at the centroid) and curvature kappa, each fiber’s strain is
eps0 - y*kappa. Work-conjugate to [eps0, kappa] is [N, M]
(N = sum(stress*area), M = -sum(stress*area*y)) — derived directly
from virtual work, not assumed: d(stress power) = integral(stress * d(strain)) dA = integral(stress*(d(eps0) - y*d(kappa))) dA = d(eps0)*N + d(kappa)*M with M as defined above.
Each DispBeamColumn integration point owns its own FiberSection
(independent material history — see Element’s commit/trial split),
even when every point starts from an identical fiber layout (the
prismatic-member assumption this element makes: same cross-section
everywhere along the length — a tapered/non-prismatic member is a
natural extension, not built until needed).
Implementations§
Source§impl FiberSection
impl FiberSection
pub fn new(fibers: Vec<Fiber>) -> Self
Sourcepub fn trial(&self, eps0: f64, kappa: f64) -> (f64, f64, [[f64; 2]; 2])
pub fn trial(&self, eps0: f64, kappa: f64) -> (f64, f64, [[f64; 2]; 2])
Trial evaluation at (eps0, kappa) — read-only, safe every Newton
iteration; see Material’s doc comment for why this must not
mutate any fiber’s material.
Sourcepub fn commit(&mut self, eps0: f64, kappa: f64)
pub fn commit(&mut self, eps0: f64, kappa: f64)
Commit every fiber’s material at (eps0, kappa) — called once per
converged step, by DispBeamColumn::commit.
pub fn total_area(&self) -> f64
Sourcepub fn fiber_responses(&self, eps0: f64, kappa: f64) -> Vec<(f64, f64)>
pub fn fiber_responses(&self, eps0: f64, kappa: f64) -> Vec<(f64, f64)>
Every fiber’s (strain, stress) at (eps0, kappa), in the same
order fibers were originally passed to new — the same evaluation
trial sums into (N, M), broken out per fiber instead of
aggregated. Read-only, safe every Newton iteration (trial’s own
doc comment); calling it at a section’s current committed
(eps0, kappa) reproduces that fiber’s committed stress exactly,
the same “recompute, don’t cache” pattern ZeroLength::local_force
relies on.
Trait Implementations§
Source§impl Clone for FiberSection
impl Clone for FiberSection
Source§fn clone(&self) -> FiberSection
fn clone(&self) -> FiberSection
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for FiberSection
impl RefUnwindSafe for FiberSection
impl Send for FiberSection
impl Sync for FiberSection
impl Unpin for FiberSection
impl UnsafeUnpin for FiberSection
impl UnwindSafe for FiberSection
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, U> Imply<T> for U
§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>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
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
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.