pub struct MultiSection<V, S: Storage<V>> { /* private fields */ }Expand description
Group multiple field sections with consistent per-point offsets.
Implementations§
Source§impl<V, S> MultiSection<V, S>where
S: Storage<V>,
impl<V, S> MultiSection<V, S>where
S: Storage<V>,
Sourcepub fn new(fields: Vec<FieldSection<V, S>>) -> Result<Self, MeshSieveError>
pub fn new(fields: Vec<FieldSection<V, S>>) -> Result<Self, MeshSieveError>
Construct a multi-section from field sections.
All fields must share the same point set. Per-point total DOFs are the sum of field DOFs, in field order.
Sourcepub fn field_count(&self) -> usize
pub fn field_count(&self) -> usize
Number of fields.
Sourcepub fn fields(&self) -> &[FieldSection<V, S>]
pub fn fields(&self) -> &[FieldSection<V, S>]
Borrow all fields.
Sourcepub fn fields_mut(&mut self) -> &mut [FieldSection<V, S>]
pub fn fields_mut(&mut self) -> &mut [FieldSection<V, S>]
Mutable access to all fields.
Sourcepub fn field(&self, index: usize) -> Option<&FieldSection<V, S>>
pub fn field(&self, index: usize) -> Option<&FieldSection<V, S>>
Borrow a field by index.
Sourcepub fn field_mut(&mut self, index: usize) -> Option<&mut FieldSection<V, S>>
pub fn field_mut(&mut self, index: usize) -> Option<&mut FieldSection<V, S>>
Mutable access to a field by index.
Sourcepub fn field_by_name(&self, name: &str) -> Option<&FieldSection<V, S>>
pub fn field_by_name(&self, name: &str) -> Option<&FieldSection<V, S>>
Borrow a field by name.
Sourcepub fn field_by_name_mut(
&mut self,
name: &str,
) -> Option<&mut FieldSection<V, S>>
pub fn field_by_name_mut( &mut self, name: &str, ) -> Option<&mut FieldSection<V, S>>
Mutable access to a field by name.
Sourcepub fn dof(&self, p: PointId) -> Result<usize, MeshSieveError>
pub fn dof(&self, p: PointId) -> Result<usize, MeshSieveError>
Total DOF count at point p across all fields.
Sourcepub fn offset(&self, p: PointId) -> Result<usize, MeshSieveError>
pub fn offset(&self, p: PointId) -> Result<usize, MeshSieveError>
Offset for point p in the combined layout.
Sourcepub fn field_dof(
&self,
p: PointId,
field: usize,
) -> Result<usize, MeshSieveError>
pub fn field_dof( &self, p: PointId, field: usize, ) -> Result<usize, MeshSieveError>
DOF count for a specific field at point p.
Sourcepub fn field_offset(
&self,
p: PointId,
field: usize,
) -> Result<usize, MeshSieveError>
pub fn field_offset( &self, p: PointId, field: usize, ) -> Result<usize, MeshSieveError>
Field offset for point p in the combined layout.
This mirrors PetscSection field offsets: offset(p) + sum_{i < field} dof_i(p).
Sourcepub fn field_span(
&self,
p: PointId,
field: usize,
) -> Result<(usize, usize), MeshSieveError>
pub fn field_span( &self, p: PointId, field: usize, ) -> Result<(usize, usize), MeshSieveError>
(offset, dof) pair for a field at point p.
Sourcepub fn field_dof_by_name(
&self,
p: PointId,
name: &str,
) -> Result<usize, MeshSieveError>
pub fn field_dof_by_name( &self, p: PointId, name: &str, ) -> Result<usize, MeshSieveError>
DOF count for a field at point p, by field name.
Sourcepub fn field_offset_by_name(
&self,
p: PointId,
name: &str,
) -> Result<usize, MeshSieveError>
pub fn field_offset_by_name( &self, p: PointId, name: &str, ) -> Result<usize, MeshSieveError>
Field offset for point p, by field name.
Sourcepub fn apply_constraints(&mut self) -> Result<(), MeshSieveError>where
V: Clone,
pub fn apply_constraints(&mut self) -> Result<(), MeshSieveError>where
V: Clone,
Apply constraints for all fields.
Source§impl<V, S> MultiSection<V, S>
impl<V, S> MultiSection<V, S>
Sourcepub fn gather_in_order(&self) -> Result<Vec<V>, MeshSieveError>
pub fn gather_in_order(&self) -> Result<Vec<V>, MeshSieveError>
Gather all fields into a flat buffer in combined atlas order.
Sourcepub fn try_scatter_in_order(&mut self, buf: &[V]) -> Result<(), MeshSieveError>
pub fn try_scatter_in_order(&mut self, buf: &[V]) -> Result<(), MeshSieveError>
Scatter values from a flat buffer in combined atlas order.