Skip to main content

DispBeamColumn

Struct DispBeamColumn 

Source
pub struct DispBeamColumn {
    pub node_i: NodeId,
    pub node_j: NodeId,
    pub density: f64,
    /* private fields */
}
Expand description

A 2-node, displacement-based, fiber-discretized 2D beam-column: nodal displacements directly give the strain/curvature field along the length (cubic Hermite transverse + linear axial shape functions, same as ElasticBeamColumn’s), each BeamIntegration point’s FiberSection converts that to stress-resultants, and one length-integral gives the element’s resisting force/tangent — a single, direct evaluation, unlike ForceBeamColumn, which needs its own internal equilibrium iteration per element.

Prismatic-member assumption: every integration point starts from the same fiber layout (fibers, replicated points times) but evolves independently thereafter, since each point’s material history depends on that point’s own strain path. A tapered/non-prismatic member (a different section per point) is a natural extension, not built until needed.

Small-displacement by default, with an opt-in GeomTransf::Corotational formulation that integrates fiber response from the three objective basic deformations. PDelta remains unsupported for this element (a fiber section’s force state does not reduce to the scalar axial force used by ElasticBeamColumn’s closed-form correction). Uniform element loads use the same consistent equivalent nodal load as ElasticBeamColumn (form_load_vector), which is independent of the section model and integration rule. Note the field is still the Hermite-interpolated linear curvature: a distributed load’s parabolic moment is only approximated within one element, so nonlinear response under distributed load wants the member subdivided.

Fields§

§node_i: NodeId§node_j: NodeId§density: f64

Mass per unit volume, applied uniformly over the section’s total fiber area. Zero (the default) means massless.

Implementations§

Source§

impl DispBeamColumn

Source

pub fn new( node_i: NodeId, node_j: NodeId, fibers: Vec<Fiber>, integration: BeamIntegration, ) -> Self

Source

pub fn with_density(self, density: f64) -> Self

Source

pub fn with_corotational(self) -> Self

Use finite-rotation, chord-following kinematics for this member.

Source

pub fn fiber_responses( &self, node_i: &Node, node_j: &Node, ) -> Vec<Vec<(f64, f64)>>

Every integration point’s per-fiber (strain, stress), freshly recomputed from node_i/node_j’s current committed displacement — same “recompute, don’t cache” reasoning as local_force (this element has no Newton loop between a target and the committed answer, unlike ForceBeamColumn). Outer Vec is one entry per integration point (BeamIntegration::points() order), inner Vec one entry per fiber (the order originally passed to new).

Trait Implementations§

Source§

impl Clone for DispBeamColumn

Source§

fn clone(&self) -> DispBeamColumn

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DispBeamColumn

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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
§

impl<T> ByRef<T> for T

§

fn by_ref(&self) -> &T

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

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> Same for T

Source§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

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

Checks if self is actually part of its subset T (and can be converted to it).
§

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

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.