Expand description
Bulk per-(entity-kind) tables of the wire format (docs/input-format.md), one
set for both profiles (header.ndm 2 or 3). Dimension-agnostic entities
(nodes, trusses, zero-lengths, fibers, constraints, loads) have one table;
formulations that differ between 2D and 3D (beam-columns) have one table
each, suffixed 2d/3d, and the table of the other profile must be empty
(DecodeError::TableNotInProfile).
Node/element/pattern references inside these tables are already
resolved to dense 0-based row indices by the (not-yet-written)
pysees compiler — the “duplicate/missing tags and every reference
between entities” validation the compiler is responsible for
happens upstream of decode, so decode only ever sees plain array
indices, never sparse OpenSees-style tags.
Each field is a plain Vec, not yet the transferable Float64Array/
Uint8Array values the wire format ultimately specifies for
postMessage: boundary.rs’s serde-wasm-bindgen decoding today
accepts an ordinary JS array for each of these (or a typed array,
copied element-by-element) rather than transferring one. Once real
transferable-array support lands, each Vec<f64>/Vec<u32> here is
exactly the shape a Float64Array/Uint32Array copies into. Every table
of super::CarapaceInputV1 may be omitted, which is the same as empty.
#[serde(rename_all = "camelCase")] throughout so the JS/TS shape
matches the PySees naming (nodeI, not node_i).
Structs§
- Elastic
Beam Column2d Table - Elastic
Beam Column3d Table - Element
Load Table - Equal
DofTable - Identity multi-point constraints (
core::Domain::equal_dof’s doc comment): rowitiesconstrained[i]’s dofs listed indofsexactly to the same dofs ofretained[i].dofsis sparse per row —(row, dof)pairs, mirroringZeroLengthTable::materials’s own sparse convention — since most ties only ever list one or two dofs, not every dof a node has. - Fiber
Beam Column2d Table - Shared shape for 2D
DispBeamColumnandForceBeamColumn— both are one prismatic fiber section (seeFiberTable) replicated across integration points bycore’s own element constructors. - Fiber
Beam Column3d Table - Shared shape for
DispBeamColumn3andForceBeamColumn3— both are one prismatic biaxial fiber section (seeFiberTable) replicated across integration points bycore’s own element constructors. UnlikeFiberBeamColumn2dTable, there is nocorotationalfield: neither spatial fiber element supports it yet, and no separatetransformfield —g/j/vec_xzare passed directly to the constructor, since these elements only ever useLinear-type geometry. - Fiber
Table - Fibers for every
DispBeamColumn/ForceBeamColumnsection, flattened and offset-indexed: sectionkoccupiessection_offsets[k]..section_offsets[k + 1]iny/z/area/material.section_offsetstherefore hasnum_sections + 1entries.zis empty in a 2D model and parallel toyin a 3D model (biaxial bending) — torsion is deliberately excluded from the fiber loop incore(FiberSection3’s doc comment) and supplied instead as each owning table’s owng/jfields. - Friction
Row - One sparse
frictionrow ofZeroLengthTable: the row’s oneFriction(2D) /Friction3(3D) — see their doc comments for the field meanings.normal_dofmust already have amaterialsentry on the same row, and the shear DOFs must not (checked bycoreviadebug_assert). - Linear
Constraint Table - General linear multi-point constraints (
core::Domain::add_constraint): rowidefinesu[slaveNode[i], slaveDof[i]] = sum coeff * u[node, dof]over the termstermOffsets[i]..termOffsets[i + 1]of the flattened sparsetermNode/termDof/termCoeffarrays.termOffsetshasrows + 1entries (or none at all for an empty table). - Load
Pattern Table - Nodal
Load Table - Node
Table - Node table:
coordsstridendm(x, y[, z]);fixedone bitmask byte per node (bitk= DOFk: ux, uy, rz in 2D; ux, uy, uz, rx, ry, rz in 3D); mass is sparse, addressed via a parallel node-index array since most nodes carry none. - Orient
Row - One sparse
orientrow — OpenSees’-orient x1 x2 x3 [yp1 yp2 yp3]: local x isx; in 3D local z isx × ypand local y completes the frame; in 2Dypis absent,x[2]must be 0 and local y is local x turned 90 degrees counter-clockwise. Every DOF of the row is evaluated along those axes. Rows without an entry use the global axes; at most one entry per row. - Quad
Table - 4-node bilinear quadrilaterals (2D models only).
nodeIdshas stride 4 (counter-clockwise);materialindexesplaneMaterials. - Rigid
Diaphragm Table - Rigid diaphragm: row
ities every node listed against it inconstrainedtoretained[i]— in 2D theuxdof (core::Domain:: rigid_diaphragm’s doc comment); in 3D the two in-plane translational dofs (perpendicular tonormal[i]) plus the lever-arm rotation term (core::Domain3::rigid_diaphragm_about).constrainedis sparse per row —(row, node index)pairs — since a diaphragm’s node count varies.normalis 3D only: omitted or empty means every row’s normal is Y; a 2D model must leave it empty. - Rigid
Link Table - Rigid links (
core::Domain::rigid_link’s doc comment):slavemoves withmasteras a rigid body, small-rotation lever arm taken from the node coordinates. - Shell3
Table - 3-node DKT/Allman shells (3D models only).
nodeIdshas stride 3 (the node order sets the local normal by the right-hand rule);sectionindexesshellSections. - Shell4
Table - 4-node MITC4 shells (3D models only).
nodeIdshas stride 4 (the node order fixes the local normal by the right-hand rule);sectionindexesshellSections. - Triangle
Table - 3-node constant-strain triangles (2D models only).
nodeIdshas stride 3 (counter-clockwise);materialindexesplaneMaterials. - Truss
Table - Same fields in 2D and 3D.
- Zero
Length Section Table - A
ZeroLengthdriven by a coupledFiberSection(axial + moment response,[ux, rz]in 2D; axial + biaxial moment,[ux, ry, rz]in 3D) instead ofZeroLength’s independent per-DOF materials — seecore::ZeroLengthSection’s doc comment. - Zero
Length Table
Enums§
- Axis3
Spec core::Axis3’s wire mirror — core’s own type carries noserdederive (Axis3’s doc comment: it’s a plainrepr(usize)enum for internal indexing, not wire-facing), so this is decode’s own translation, the same reasonTransformSpec/TransformSpec3mirrorGeomTransf/GeomTransf3rather than deriving on thecoretype directly.- Element
Kind - Every element formulation, 2D and 3D. A kind that does not belong to the
model’s
ndmisDecodeError::ElementKindNotInProfile. - Element
Load Spec - Integration
Spec - Plane
Material Spec - A plane (2D continuum) material, referenced by
triangles/quadsrows through theplaneMaterialsarena. Strain is[eps_x, eps_y, gamma_xy]with engineering shear. - Plane
State Spec - Quad4
Formulation Spec - Shell
Section Spec - A shell section, referenced by
shell4srows through theshellSectionsarena. Generalized strain and resultants follow OpenSees’ElasticMembranePlateSectionordering. - Time
Series Spec - Transform
Spec - Transform
Spec3 GeomTransf3’s wire mirror. NoCorotational3— spatial corotational geometry doesn’t exist incoreyet (GeomTransf3’s own doc comment).