Modelling the Structure¶
Build a model from the Geometry and Properties tabs, or directly on the canvas. The model must be unlocked to edit (toggle with Ctrl+L); running an analysis locks it.
Materials and sections¶
Define these first, on the Properties tab.
- Material — elastic modulus
E(kN/m²), unit weightγ(kN/m³), and thermal expansionα(1/°C). -
Section — a cross-section linked to a material. A Shape field selects the geometry and which dimensions are needed; the area and second moment of area are derived automatically and shown as read-only labels:
Shape Dimensions used Generic b × h(or a steel-profile override)Rectangular width b, heighthCircular diameter dRectangular hollow b × h, wall thicknesstCircular hollow diameter d, wall thicknesstI flange width b, total heighth, flangetf, webtwT flange width b, total heighth, flangetf, webtwA steel profile picked from the library still fills the area/inertia directly. The separate Type field (Concrete / Steel / Timber / Other) is for material /design classification and is independent of the shape.
Built-in Rigid and Dummy
Every model is seeded with two reserved entries — a material and a section — called Rigid (numerically very stiff, for near-rigid links) and Dummy (zero stiffness, for a member that must be otherwise restrained). They are opened read-only, cannot be renamed or deleted, and are shown at the bottom of the material and section lists.
Nodes¶
A node has an (x, y) position. Add nodes from the Nodes sub-tab, the
Structure menu, or with the Add node tool: enable it and click on the canvas
to place nodes; press Esc to stop.
Double-click a node on the canvas to edit its position, support, or spring.
Elements¶
An element's role follows from what it spans and the model's domain: a line element is a Beam in a plane model and a Grid member in a plate model; an area element — a triangle or a quad — is a Panel in a plane model and a Slab in a plate model. The tabs, menus and section dialogs use these names, so the same primitives read correctly in either domain.
A bar element connects two nodes and references a section. Add elements from the Beams / Grid sub-tab or with the Add element tool: enable it, click the start node, then the end node.
Each element end can carry a moment release (hinge), drawn as a small open circle near the node.
Triangle (surface) elements¶
For membranes, walls and plates in plane stress or plane strain, xdfem2D uses
triangular surface elements. A triangle section carries a thickness, a
material, a plane-stress/plane-strain flag, and a formulation:
| Formulation | DOFs per node | Notes |
|---|---|---|
| CST (constant-strain triangle) | ux, uy | Fast, robust; overly stiff in bending. The node's rotation is left free (auto-restrained) unless a bar also frames in. |
| Allman | ux, uy, θz | Adds an in-plane drilling rotation, so it can transfer moment to a frame member and converges faster in bending. |
| ES-FEM (edge-based smoothed) | ux, uy | Smooths CST over edge domains — softer, more accurate in bending — without adding a DOF. |
Add triangles one by one (three node picks) on the Triangles sub-tab, or let a polygon geometry object mesh itself automatically.
Quadrilateral (surface) elements¶
A quad is the 4-node counterpart of the triangle, for the same walls and slabs. Its main advantage is on a regular, structured mesh (a rectangular slab or wall panel): a triangle split introduces a directional (diagonal) bias in the stress/moment field near supports and point loads — a checkerboard pattern — that a quad avoids. Prefer quads on regular grids; keep triangles for irregular or concave outlines (the quad mesher is structured-only).
A quad section carries the same thickness / material / plane-strain
fields as a triangle section, with its own formulation:
| Formulation | Domain | Notes |
|---|---|---|
| QM6 (incompatible-modes Q4) | plane (wall) | The recommended membrane quad — four internal bubble DOFs, condensed out, fix the bending-lock that plain Q4 suffers. |
| Q4 (bilinear) | plane (wall) | Reference/patch-test element only — locks in bending, not recommended as the default. |
| MITC4 (Mindlin, shear-locking-free) | plate (slab) | The recommended slab quad — the 4-node analogue of MITC3. |
| DKT4 (thin, Kirchhoff) | plate (slab) | Four DKT triangles condensed to a quad; thin-plate analogue of DKT. |
Add quads one by one (four node picks, i → j → k → l counter-clockwise) from Structure ▸ Triangles ▸ Add quad, or let a rectangle/polygon object mesh into quads (below). A triangle and a quad are the same modelling role, so they share one selection, one Manage area elements… manager, one bulk/individual editor, and the same result views — pick the shape per element or per surface.
Panel sections
In the GUI a Panel pairs a triangle section and a quad section under one
name (one material/thickness choice), and the surface's Mesh as:
Triangles / Quads selector decides which is used. Programmatically they are
two sections (tri_sections / quad_sections) that may share a name.
Geometry objects (parametric)¶
Instead of placing every node and element by hand, you can define the structure with parametric geometry objects that the program discretises into concrete nodes and elements at solve time. The editable model is left untouched; the analysis runs on the compiled mesh.
| Object | Becomes | Defined by |
|---|---|---|
| Segment | bar elements | two end points |
| Arc | bar elements (straight chords) | centre + radius + angles, or three points |
| Multisegment | bar elements | a chain of vertices, open or closed |
| Rectangle | triangle or quad mesh | two opposite corners |
| Polygon | triangle or quad mesh | a closed polygon boundary |
Polygons and rectangles are meshed by an automatic Delaunay mesher (the built-in one, or the higher-quality Triangle library if installed) into triangles, or — on a convex quad outline with Mesh as: Quads and a quad section — by the structured mesher into quads (falling back to triangles per cell where a quad would be poorly shaped). When the model is analysed, objects auto-resolve T-junctions and crossings: a node sitting on another object's span, or two objects that cross, are welded so the parts act together.
Create objects from Structure ▸ Objects (segment / arc / multisegment / rectangle / polygon). To turn an object into ordinary elements you can edit individually, use Edit ▸ Curve to bar or Edit ▸ Surface to mesh (which bakes the surface into its triangles and/or quads).
Propagation along an edge
Supports and springs assigned to both corner nodes of a meshed edge propagate to the intermediate nodes the mesher creates along that edge. This is how you fix a whole wall base with two assignments instead of forty.
Supports¶
Supports restrain node degrees of freedom — ux, uy, θz in a plane model,
w, θx, θy in a plate model (see Domains). Each restraint
combination has a canonical name, so the same boundary condition is called
the same thing whether it was drawn or written by script, and the canvas draws an
expressive glyph per family. The name depends on the domain:
| Restraints | Plane name | Plate name |
|---|---|---|
| all three | FIXED |
CLAMPED |
two translations / w only |
PIN |
SIMPLE |
| one only | ROLLER-X / ROLLER-Y |
SYM-X / SYM-Y |
| translation + one rotation | GUIDED-X / GUIDED-Y |
CLAMP-X / CLAMP-Y |
| rotation(s), free to move | BLOCK |
BLOCK |
In the plate domain the glyphs read as slab edges: a simply-supported knife-edge
(SIMPLE), a hatched clamp (CLAMPED), a supported edge with one rotation held
(CLAMP-X/Y), and a dash-dot symmetry line (SYM-X/Y) — the last lets you
model a whole slab from one wedge. The quick-preset buttons in the support dialog
offer the domain's common cases (plane: PIN / ROLLER-X / FIXED; plate: SIMPLE /
CLAMPED / SYM-X).
Assign supports on the Supports sub-tab or via the node editor. The on-canvas
legend names each colour with its canonical family (the -X/-Y variants share
one entry).
Springs¶
- Node springs — translational
Kx,Kyand rotationalKtat a node. - Element springs — a Winkler elastic foundation along an element, per unit length.
A structure may be supported by springs alone (no classic supports), as long as the springs restrain enough degrees of freedom to prevent rigid-body motion.
Unilateral (tension-/compression-only) springs¶
Each translational component of a node or element spring has a behaviour mode:
| Mode | Acts when… | Typical use |
|---|---|---|
| both (default) | always — resists in both directions | ordinary elastic spring |
| compression | the spring is compressed (node moves in the −axis direction) | soil under a footing, gap/contact support |
| tension | the spring is stretched (node moves in the +axis direction) | tie / anchor that only pulls |
Set the mode per component (Kx/Ky for global axes, axial/transverse for an
element spring in local axes) in the spring dialog, the node/element editor, or
the bulk-edit dialog. Rotational stiffness Kt is always bilateral.
Only NonLinear cases honour the mode
Tension-/compression-only behaviour is applied only by a NonLinear analysis case. In Linear (and every other) case the spring acts bilaterally, exactly as before. So model the unilateral effect by running a NonLinear case.
Sign convention: for a node spring the component direction is the global axis (or, for an element spring in local axes, the element's axial / transverse direction). "tension" is active when the displacement projected on that direction is positive; "compression" when it is negative. Element-spring activation is evaluated per end-node, consistent with the lumped foundation model.
Modelling a footing on soil (uplift)
Give the base nodes/elements compression-only springs and remove any rigid vertical supports at those nodes (a rigid support in parallel with a spring fixes the DOF and makes the spring inert). Keep a minimal horizontal restraint to prevent rigid-body motion, then solve with a NonLinear case: the springs that go into tension deactivate and that part of the footing lifts.
Constraints (multi-point)¶
Supports and springs act on one degree of freedom at a time. A constraint
instead couples several DOFs — of different nodes — through a linear equation.
Three kinds are available, all built from the same underlying form
Σ cᵢ·dofᵢ = value:
| Kind | What it does |
|---|---|
| Rigid link | A master node and one or more slave nodes move as one rigid body: each slave follows the master's two translations and rotation (ux_s = ux_m − Δy·θ_m, uy_s = uy_m + Δx·θ_m, θ_s = θ_m). Use it for rigid offsets and eccentric connections. |
| Equal DOF | A set of nodes shares the same value of one or more components (ux, uy, θz) — e.g. tying several nodes to the same horizontal displacement. |
| Equation (advanced) | The raw linear form: a list of (node, component, coefficient) terms and a right-hand-side value. |
Create constraints on the Constraints sub-tab (Geometry), or from
Structure ▸ Constraints ▸ Add constraint (also under Structure ▸ Nodes).
The Add constraint tool lets you click the nodes to tie on the canvas — each
picked node is highlighted — and finishes when you double-click the last node,
which opens the editor pre-filled with those nodes. Press Esc to leave the
mode. The dialog previews the resulting equation(s) before you save, and gives a
default name per kind (Rigid1, Equal1, Constraint1, …).
How constraints are imposed (penalty)
Constraints are enforced by penalty: each equation adds a very stiff term to the stiffness matrix. This is robust and works across all analysis types (Linear, NonLinear, P-Delta, Modal, Spectrum), but it is approximate — results satisfy the constraint to about 1 part in 10⁶, with a tiny residual reaction. An exact master–slave formulation is planned for a future version.
The model check flags common mistakes: a constraint referencing a missing
node, a rigid link whose master is also a slave, two rigid links forming a cycle,
a tied DOF that a support already restrains, and a constraint on θz at a node
with no rotational DOF (CST-only).
See Results ▸ Constraint forces for the force each constraint transmits.
Fields¶
A field is a named spatial expression — a formula in x and y — that can
drive a value which varies across the model instead of a single constant. The
main use is a Winkler foundation modulus that changes along a member: assign a
field as an element spring's stiffness and the value is evaluated at each
generated bar's midpoint. Define fields in Structure ▸ Fields, and preview one
over the model with the Fields view mode.
Editing on the canvas¶
- Click to select; drag a rectangle for a window selection (left-to-right encloses, right-to-left crosses).
- Selection menu / panel: Select all, Invert, Clear, Edit nodes, Edit elements, Delete.
- Cut/Copy/Paste (Ctrl+X / Ctrl+C / Ctrl+V) duplicate a selection with an offset. Undo/Redo (Ctrl+Z / Ctrl+Y) cover all edits.
Transforms and bulk edits¶
The Edit menu applies geometric transforms to the current selection:
| Command | Effect |
|---|---|
| Move | Translate by a vector |
| Array | Replicate along a grid (copies at a spacing, a count in each direction) |
| Rotate | Rotate about a point |
| Scale | Scale about a point |
| Mirror | Reflect across an axis |
Two commands bake parametric objects into ordinary, individually-editable elements: Curve to bar (segment / arc / multisegment → bars) and Area to triangle (rectangle / polygon → triangles); the object is then removed.
To change many entities at once, select them and use Selection → Edit selected nodes / bars / triangles… for a bulk editor, or Divide bars… to subdivide selected members into several elements.
Checking and meshing the model¶
- Structure → Model check (also in the Analysis menu) reports topology issues that are not auto-fixed: isolated nodes, coincident nodes, unconnected T-junctions and crossings, duplicate bars, masses on restrained DOFs, and the constraint checks above.
- Analysis → Generate mesh (F6) compiles the geometry objects into the concrete mesh the solver uses, so you can inspect it before running — it is shown via the Mesh overlay checkbox on the Structure view (Display panel ▸ Model tab), which draws the generated mesh over the geometry objects.
- Analysis → Model info shows a summary of the model's size and contents.