1. Introduction

Luma is a browser-based finite-element program for the analysis and design of
reinforced-concrete slab systems: suspended flat plates and beams-on-columns,
ground-bearing mats on Winkler soil, pile-supported rafts, slab steps, walls
and edge beams. The model is built as a semantic floor model (slabs,
openings, supports, soil and loads) rather than as raw nodes and elements; the
program generates the mesh, assembles a shell/beam finite-element model, solves
it on the Go server, and renders the results in 3D in the browser.

This chapter covers what the program does, its architecture in enough detail to
use it correctly, the units/sign conventions used throughout the manual, the
user interface, the solver limits, and the shortcuts.


1.1 What the program does

Capability Detail
Analysis Linear-elastic static FEA of slabs, plates, walls, beams and columns
Nonlinear cracking Iterative cracked-stiffness analysis with fixed E/Ec ratio or AS 3600 ρ-dependent I_ef
Time-dependent deflections Creep and shrinkage deflection vs time - AS 3600 (φcc + kcs) or ACI 318 (λΔ)
Staged construction Multi-stage loading with different ages per stage and a per-stage deflection history
Design codes EN 1992-1-1 (EC2), AS 3600-2018, ACI 318-19, CSA A23.3
Design output Required steel maps (B1/B2/T1/T2), strip design and sizing, punching utilisation, crack width, steel stress, deflection checks, bar marking plans
Supports Columns (stiff stubs), point supports, piles (axial/lateral springs, layered shaft springs), walls/line supports, soil zones (distributed vertical springs)
Loads Point loads (forces and moments), line loads (UDL), area pressures, wall top line loads, self weight; load cases and factored combinations, envelopes
Results Deflection, moment, stress, strain, bearing, steel, punching, reactions, column/beam/pile/wall diagrams, time-history curves, compare view
Files JSON project files, verification benchmark downloads, punching report (print/PDF)

Three model modes

Every floor model is in exactly one mode, chosen automatically by what you
draw (FloorModel.mode):

Mode Created when Supports the model
suspended (default) columns/walls provided Columns, point supports, walls, beams
slab_on_ground a soil zone is drawn Distributed Winkler springs Kz = k × tributary area
pile_supported a pile is placed Pile head springs and optional layered shaft springs

Deleting the last pile returns the model to slab_on_ground (if soil zones
exist) or suspended. Soil and pile modes are not combined - a mat-on-piles
model is modelled as pile_supported, optionally with a soil zone for bearing
display; the piles are the actual support.

Analysis chain

semantic floor model  →  mesh generation (Go)  →  FE assembly & solve (Go)  →  results (browser)
   slabs, loads,           MITC4 quads /            dense or sparse CG,          contours, diagrams,
   supports, soils         CST+BCIZ triangles        cracked/long-term loops     tables, reports

The mesh and solve run on the server (/api/projects/:id/analysis-model then
/api/projects/:id/solve); the browser keeps the semantic model, renders
results and performs the reinforcement design arithmetic (flexure, shear,
cracking, punching).


1.2 Model size and solver limits

The solver is sized for typical floor-by-floor design work, not for very large
global models. Limits are enforced with clear messages:

Quantity Limit Where enforced
Mesh nodes (build limit) 5,000 mesh generator, before assembly
Nodes (solve request) 5,000 solver request validation
Elements 10,000 solver request validation
Supports 5,000 solver request validation
Springs 5,000 solver request validation
Loads (all types combined) 50,000 solver request validation
Element node references 32 solver request validation
Concurrent solves per user 1 server (429 concurrent_solve)
Concurrent solves overall 2 server (503 solver_busy)
Solve rate 60/min, burst 15 server (429 rate_limited)
Write budget per solve 30 min server

A mesh is rejected during generation if a single slab projects more than 5,000
nodes, or if the total exceeds it:

slab "S1": mesh size 0.25 projects 6120 nodes, above the 5000-node build limit - use a larger mesh size

Practical guidance:

  • 0.5–1.0 m mesh is usual for a flat plate; use 0.25–0.5 m near punching
    columns only if you accept the node budget.
  • An 8 × 8 m bay at 1.0 m gives ~81 nodes and 64 quads; a 30 × 30 m floor at
    1.0 m gives ~961 nodes and 900 quads. The limit is reached at roughly a
    60 × 80 m floor at 1.0 m mesh - split very large floor plans into separate
    projects or coarsen away from the region of interest.
  • Dense direct solution is used up to ~2,900 free DOF. Larger models switch to
    a sparse preconditioned CG/BiCGSTAB solver automatically; both are reported
    as luma_fem in the results summary (hover the row for the exact method).

1.3 Axes, signs and units

Axes

Model axes: X/Y plan, Z up; Fz vertical

  • X and Y are the plan axes. X runs to the right, Y runs "up the page" in
    plan.
  • Z is vertical and positive upwards. Slab elevations, pile head/tip
    elevations, wall heights and deflections all use Z.
  • The vertical axis is fixed to Z; models with vertical_axis set otherwise
    are rejected (semantic slab generation currently requires Z as the vertical axis).
  • The viewport uses Z as vertical (world Y internally) - the grid lies in the
    plan plane.

Signs

Quantity Positive direction Notes
Plan coordinates X, Y, Z right / up-page / upwards metres internally
Point load Fz vertical up a downward load is negative; tool default is −10 kN
Point load Fx, Fy along +X / +Y kN
Moments Mx,My,Mz right-hand rule about the axis kN·m
Line load "Vertical (kN/m), + down" down the input is negated when stored
Area load "Pressure q (kPa), + down" down Fz vertical is the opposite: positive up
Wall top line load (kN/m) down stored as a downward line load at the wall top
Self weight always downward applied from density × volume × 9.81/1000
Deflection δ downward plotted positive the viewport plots −uz so the most deflected point is the maximum
Bending moment Mx/My + sagging, − hogging contour ramp is anchored at zero
Mxy twisting moment, signed kN·m/m
Wood–Armer Wx/Wy ` Mx
Soil bearing pressure compression positive abs(fz)/tributary area plus k·abs(uz)
Pile axial positive = compression (tension negative) same convention as column diagrams
Reactions magnitudes shown in the R↓ view; the ground-total row is signed vertical upward positive
Stress σ, σ1, σ2, τxy tension positive MPa

If a result looks mirrored vertically (e.g. moments appear hogging where you
expect sagging), check the load signs first: an area load entered as q = −3
acts upwards.

Units

The internal model is SI: lengths in metres, forces in kN, pressures in kPa,
moments per width in kN·m/m, stresses in MPa, subgrade modulus in kN/m³. The
Settings → Units tab controls display only; every field converts on entry.

Quantity SI default Alternatives
Length (plan) m mm, ft, in
Section size (t, b, h, d) m mm, ft, in
Bar diameter / spacing mm (N-bars) in (# bars)
Reinforcement area mm²/m in²/ft
Force kN N, kip, lb
Moment per width kN·m/m kip·ft/ft, lb·ft/ft
Stress MPa ksi, psi
Area load / bearing kPa psf, ksf
Subgrade modulus kN/m³ pci, kcf
Density kg/m³ pcf
Modulus E GPa ksi, psi
Deflection mm m, in
Small lengths (cover, bar dia) mm in
Line load intensity kN/m kip/ft, lb/ft
EI (pile bending) kN·m² kip·ft²

Two unit systems are preset: SI (Metric) and Imperial Units. Changing
the system switches every kind at once; individual dropdowns then override one
kind at a time. Display units travel with the project file, so a model saved in
kip/ft reopens with imperial displays.


1.4 The workspace

  • Project tab - the project tree: projects, folders, drag-to-reorder,
    right-click menu (Open, Rename, Duplicate, New Folder, Delete). The active
    project shows a dot; each row shows a n nodes · e elements badge.
  • Model tab - the model tree grouped by type: Slabs, Openings, Columns,
    Walls, Beams, Drop panels, Piles, Soil zones, Strips, Vertical plates, Grid
    lines, Measurements, then a Loads parent with Area/Point/Line sub-groups.
    Rows select entities (Ctrl add/toggle, Shift range), × deletes, and a
    selection bar offers Delete/Clear.
  • Dragging the splitter resizes the sidebar; double-click resets it.

Top toolbar

Group Controls
Project New Folder, New Project, Save (Ctrl+S), Duplicate, Delete, Export (JSON / STEP / IFC / IGES / NASTRAN), Import from File
Draw Slab, Opening, Column, Pile, Soil zone, Strip, Wall, Beam, Vertical plate, Drop panel, Grid line, Create grid, Dimensions, Measure, Edit slab shape, Material library
Loads active case colour swatch, Active Load Case selector, Manage Load Cases, Load Combinations, Point load, Line load, Area load
Analysis MESH (generate mesh), CHK (validate model), ▶ Run Analysis
Select Select (S), View/Orbit (V), Isometric, Top/plan
Filter eye chip "All" plus per-type checkboxes (Slab, Col, Strip, Load, Soil, Wall, Open, Drop, Grid)
View Fit (F), Geometry solid/wireframe, Properties pane, Sidebar pane, Results pane, Loads arrows, Mesh, Strips, Pile soil layers, Spring links, Nodes cycle, Theme, Settings
Status bar results-set name, legend, Split on/off, grid snap mode, text scale, units badge, code badge

Results pane (right)

Opens with the ▶ result plots: Result Set selector, then sections
Deflections, Stress & Moments, Strain, Steel Reinf., Support
Reactions
, Beams, Columns, Piles, Walls, Strip Results.
The exact buttons and their meanings are catalogued in
Chapter 5.

Properties pane

Select anything to edit it: every field applies immediately, with Apply/Delete/
Deselect buttons. Multi-selection opens a bulk editor with per-type chips
and "(Mixed)" placeholders. See §2.12.

Modals

All dialogs (tools, settings, load entry, reports) are draggable by their title
bar and clamp below the title bar, so you can park them out of the way.


1.5 Keyboard shortcuts

Key Action
S Select tool
V View / orbit tool
F Fit view
G Cycle grid snap (both → major → off → both, etc.)
A Select all (respects the type filter)
X Clear selection
Delete / Backspace Delete selection
Ctrl+Del Delete selection (same)
Enter Finish the polygon being drawn
Esc Cancel the active tool / clear selection / close panels
Ctrl+S Save project

There is no undo/redo. The Properties pane, bulk editor and load tables are the
way to correct a value; a wrong action (delete, slice) must be redone by
editing the geometry again. Duplicate the project before risky edits if you
need a checkpoint.


1.6 Settings, storage and files

Settings has six tabs - General, Appearance, View, Grid & Snap, Design, Units.
Save as Default stores the current preferences as the app-wide startup
defaults; Restore Defaults clears them. Projects may override settings by
carrying their own: display units, grid spacing/colour, design code and design
parameters, node display and contour style all travel with the project.

Where things live:

Item Location
Server project store STORE_DIR (default ./projects) - one <id>.gmdl.json per project
Project export <ProjectName>.geomodel.json, downloaded from the toolbar
Browser preferences localStorage keys such as geomodel-design-ui-defaults, geomodel-settings-defaults, geomodel_load_data, geomodel_grid_setouts
Verification models web/projects/verification/*.geomodel.json (import them with Import from File)
Docs served from ./docs at /docs, with a built-in fallback copy

Opening a project always clears the analysis results - they are not stored in
the file. Re-run the analysis after opening.


Workflow: draw the model, set loads, mesh and validate, run, review, design, report

  1. New project → name and folder. The design code's standard load cases
    (SW/SDL/LL) and combinations are created automatically.
  2. Settings → Design - set code, f′c, fy, covers, bar, limits. These stamp
    onto the model's design_params when you apply.
  3. Materials - pick grades from the Material Library, or define custom
    grades (project or global scope).
  4. Draw the slab regions at their real elevations.
  5. Place openings, drop panels, steps (vertical plates).
  6. Place supports: columns, point supports, piles, walls, edge beams.
  7. Draw a soil zone for mats.
  8. Define loads: cases, combinations, then point/line/area loads and wall
    top loads; switch on Self Wt where appropriate.
  9. Draw design strips over the column and middle strips, or let the program
    propose centre strips and add them.
  10. MESH → CHK → fix anything the validator and mesh checker report.
  11. Run Analysis for the cases/combinations you need; read the summary.
  12. Inspect results - deflection, moments, bearing, reactions - and sanity
    check equilibrium.
  13. Design: required-steel maps, strip sizing, punching, crack width.
  14. Report: punching summary/report, charts, PDF/print; export the project.

Steps 2–3 and 9 can be revisited at any time; any geometry change marks the
solved results stale until you re-run.


1.8 Conventions in this manual

  • Bold marks a UI control by its exact label.
  • Code font marks a value, field name, key or message text.
  • Field tables give: label, unit, default, valid range, and behaviour.
  • Worked numbers in examples come from the built-in verification library and
    can be reproduced with the models in
    Chapter 8.
  • "Not implemented" boxes state the current limits honestly so you do not
    look for a feature that is not there.

1.9 Current limitations

Know these before relying on the program:

Analysis scope

  • Linear-elastic statics only - no modal, dynamic, buckling or thermal
    analysis.
  • Soil springs act in tension too unless the zone is Compression only, in
    which case the solver iterates uplift gaps automatically. Pile contact stays
    two-way. Keep the resultant within the mat footprint unless gaps are
    modelled (see §7.1).
  • Walls and line supports accept vertical springs only (Kz); no horizontal
    soil pressure.
  • No moment redistribution, no second-order effects.

Modelling

  • Openings must be axis-aligned rectangles fully inside one slab.
  • Column stubs are meshed straight; inclined columns are not supported.
  • Slabs must be flat polygons in plan; each slab has one thickness (steps are
    modelled with vertical plates).
  • There is no undo/redo, copy/paste or mirror for loads or geometry.
  • The floor plan is meshed with quads by default; triangles are available but
    thinner for the same node budget.

UI

  • The Clear All buttons in the slab load dialogs remove that load type for
    the whole model, not just the current case.
  • The After analysis show preference is currently overridden by a hard
    switch to the deflection view after a slab run.
  • The DXF endpoint exports the legacy frame model only (empty for slab
    projects); see §9.5.

1.10 Verifying the program itself

Every formula and solver feature is benchmarked against closed-form solutions.

  • Verification publishes the tables, the error of every
    benchmark, and how to re-run them from the terminal. The 13 benchmark
    models also ship as JSON project files in web/projects/verification/;
    import one with Import from File, run the analysis and compare against
    the published values. (A dedicated verification page is planned.)

If a result disagrees with an independent hand calculation, reproduce the
nearest verification model first; if it matches there, the difference is in the
model rather than the solver.

→ Next: Chapter 2 - Modelling