pub struct GridShell {
pub rows: usize,
pub cols: usize,
pub nodes: Vec<V3>,
pub members: Vec<(usize, usize)>,
pub rest_lengths: Vec<f64>,
pub stiffnesses: Vec<f64>,
pub fixed_nodes: Vec<usize>,
pub nodal_mass: Vec<f64>,
}Expand description
A doubly-curved grid shell structure.
Nodes are arranged in a regular grid (rows × cols) with initial positions on a parametric surface. Members connect neighbouring nodes. Form-finding is performed via dynamic relaxation — nodes are moved iteratively towards equilibrium under prestress and applied loads.
Fields§
§rows: usizeNumber of rows in the grid.
cols: usizeNumber of columns in the grid.
nodes: Vec<V3>Current 3-D positions of all nodes (row-major).
members: Vec<(usize, usize)>Member connectivity: pairs of node indices.
rest_lengths: Vec<f64>Natural (unstressed) length of each member (m).
stiffnesses: Vec<f64>Axial stiffness EA for each member (N).
fixed_nodes: Vec<usize>Pinned (fixed) node indices.
nodal_mass: Vec<f64>Lumped mass at each node (kg) — used in dynamic relaxation.
Implementations§
Source§impl GridShell
impl GridShell
Sourcepub fn parabolic(
rows: usize,
cols: usize,
span_x: f64,
span_y: f64,
sag: f64,
) -> Self
pub fn parabolic( rows: usize, cols: usize, span_x: f64, span_y: f64, sag: f64, ) -> Self
Construct a parabolic grid shell spanning span_x × span_y metres,
with a rise of sag metres at the centre.
rows and cols define the number of grid points in each direction.
The boundary nodes are automatically pinned.
Sourcepub fn dynamic_relaxation(
&mut self,
max_iter: usize,
dt: f64,
damping: f64,
tol: f64,
) -> f64
pub fn dynamic_relaxation( &mut self, max_iter: usize, dt: f64, damping: f64, tol: f64, ) -> f64
Run max_iter steps of dynamic relaxation.
Returns the maximum residual force at any free node after convergence.
A value below tol (N) indicates equilibrium has been achieved.
Sourcepub fn max_member_force(&self) -> f64
pub fn max_member_force(&self) -> f64
Compute maximum member force (N) in the current configuration.
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Total number of nodes.
Sourcepub fn member_count(&self) -> usize
pub fn member_count(&self) -> usize
Total number of members.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for GridShell
impl RefUnwindSafe for GridShell
impl Send for GridShell
impl Sync for GridShell
impl Unpin for GridShell
impl UnsafeUnpin for GridShell
impl UnwindSafe for GridShell
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,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§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).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.