Skip to content

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, height h
    Circular diameter d
    Rectangular hollow b × h, wall thickness t
    Circular hollow diameter d, wall thickness t
    I flange width b, total height h, flange tf, web tw
    T flange width b, total height h, flange tf, web tw

    A 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, Ky and rotational Kt at 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.