9. Reports & files

This chapter covers everything that leaves the program: project files,
verification model files, the punching report (print/PDF), and the model
export options (JSON, STEP, IFC, NASTRAN - plus the legacy DXF endpoint).


9.1 Project files

Save and autosave

  • Ctrl+S or the Save button writes the project to the server store
    (STORE_DIR, default ./projects, one <id>.gmdl.json per project).
  • Autosave (Settings → General) is on by default with a 2-second quiet
    period after the last edit. Turn it off for manual-save workflows; the
    header title then shows a dot (•) while there are unsaved changes and the
    browser warns before closing with unsaved work.
  • There is no Save As; use Duplicate (creates <name> (copy) and opens
    it) to branch a model.

Export to file

Export to File downloads the current project as
<ProjectName>.geomodel.json, pretty-printed (2-space indent). The payload:

Field Contents
SchemaVersion 1 (older files are upgraded on load; newer versions are rejected)
ID, Name, Units, Folder, Position project metadata
FloorModel every semantic entity: slabs, openings, columns, piles, pile soil layers, soil zones, walls, edge beams, drop panels, vertical plates, design strips, grid lines, measurements, loads, design_params, analysis_options, custom materials
LoadCases, LoadCombinations, ActiveCaseId, ActiveSelectionType, ActiveComboId, LoadCaseData load management state
Nodes, Elements, … legacy frame-model maps (empty for slab models)
NodeShape, NodeSizeScale, DisplayUnits, GridMajorSpacing, GridMinorSpacing, GridMinorColor, BandInContour per-project presentation
BsmProjectSections, BsmActiveId, BsmNextId, ActiveMaterialName section/material state

Analysis results are not stored - opening a file clears results and you
re-run the analysis. The mesh itself is regenerated on demand.

Import from file

Import from File accepts .json/application/json (a .geomodel.json
export, a verification download, or a shared model). The file loads into the
session as an unsaved model (Imported project file); Save gives it a
project name. Errors surface as Could not import file: … - the usual cause is
a truncated or edited file that no longer parses.

Verification JSON files

The benchmark projects ship in web/projects/verification/ as
<key>.geomodel.json and are served at
/static/projects/verification/<key>.geomodel.json; import one with
Import from File. See Chapter 8.


9.2 Calculation reports

Only the punching check produces a calculation report today.

Punching summary (reachable from the UI)

In the Punching view, the Σ button opens Punching shear summary with
columns:

# Column Position V* M* u₁ v* vR Util. Check

V* in force units, M* in moment units, u₁ in length units, v*/vR in stress
units; Util. is colour-coded (< 90 % green, 90–100 % yellow, ≥ 101 % red).
The footer notes: "Per-column punching shear utilisation for the active result
set. Full calculation sheets are not included."

Full punching calculation sheet (scripted)

The full report engine exists and is exposed on the console:

window.openPunchingReport()     // build and show the calculation sheet

It contains, per column:

  • a cover block - project, project number, design code and standard, load
    case/combination, units, prepared/checked/revision/date, basis;
  • the summary table (same columns as above);
  • per-column sections with inputs, a plan + section diagram, numbered steps
    with the code equations, and a verdict PASS/FAIL with utilisation;
  • code references, assumptions and limitations, and a sign-off block.

Standards strings per code: EN 1992-1-1:2004 - §6.4 punching shear (PD 6687 position factors), AS 3600-2018 - §9.3 punching shear (φ = 0.70),
ACI 318-19 - §22.6 two-way shear and §8.4.4.2 moment transfer,
CSA A23.3-14 - §13.3.4 two-way shear and §13.3.5 moment transfer.

Report metadata (project number, engineer, checker, revision) comes from the
fields persisted in localStorage['geomodel_report_meta'].

Print: the sheet paginates into A4 portrait pages (12 mm margins) in a
print area and calls the browser's print dialog.
PDF: punching-shear-report.pdf - A4 210 × 297 mm, 14 mm margins; the
pages are rasterised from the SVG at up to 1.5× scale.

The strip Member Design Calculations sheet (flexure, shear, deflection,
crack, stress, anchorage per layer with clause references) is implemented but
hidden behind an internal flag; its calculations back the strip diagrams and
Size to limits workflow described in
§6.10.


9.3 Charts and plots

The Charts modal (Deflection vs time, Convergence) is on-screen only:
there is no image or CSV export of charts, tables or viewport screenshots.
For reporting, take a screen capture or recreate the numbers from the
underlying tables (summary modals, reactions table, P⌀ summary).


9.4 Store, backup and versions

  • Each project is a single JSON file in the store directory. Back up by
    copying STORE_DIR (or exporting projects individually).
  • The store writes atomically (temp file + rename), so an interrupted save
    does not corrupt the last version.
  • SCHEMA_VERSION is 1; opening a newer file is refused with
    project schema version N is newer than supported version 1. Older files
    load and are stamped to the current version on save.
  • There is no built-in revision history - duplicate the project before major
    changes, or keep exported snapshots (model-2026-09-27.geomodel.json).

9.5 Model exports: IFC, STEP, IGES, NASTRAN, DXF

The project toolbar's Export button opens a modal with one choice per
file format: Project JSON, STEP, IFC, IGES and NASTRAN.
Each maps to the endpoint GET /api/projects/:id/export?format=…; the DXF
endpoint has no button.

Orientation note: every export uses the viewport's plan orientation. The
app's plan view is Y-down (screen convention) while CAD/BIM viewers draw
plans Y-up, so plan Y is negated on export - imported models appear exactly
as in the app, in both plan and iso views.

IFC (IFC2X3 by default, IFC4 available)

Export → IFC downloads the floor model as IFC2X3
(.ifc) - the schema every viewer and CAD importer handles, including older
Revit and analysis-tool importers. Use ?format=ifc4 for the newer schema
when the target tool expects it:

GET /api/projects/:id/export?format=ifc      (IFC2X3)
GET /api/projects/:id/export?format=ifc4     (IFC4)

The file is a Coordination-View-style model in SI metres: project, site,
building and one storey per slab elevation (Level 0, Level -1.5, …), with
slabs (IfcSlab), walls (IfcWall), columns (IfcColumn), edge beams
(IfcBeam) and slab openings (IfcOpeningElement + void relationships) as
extruded solids, grouped under their storey. Verified against both
IfcOpenShell and web-ifc: every element parses and produces meshes with
vertices; walls/columns/beams omit the PredefinedType attribute that IFC2X3
does not define, and the SI units use the schema-correct derived dimensions.

Scope and limits:

  • Geometry only - no loads, results, reinforcement, piles, soil zones, grids
    or materials. Point supports and line supports are restraints, not geometry,
    and are skipped.
  • Columns use their drawn section (rectangular or circular, default 0.3 m);
    walls use their drawn width (default 0.2 m); beams hang below their host
    slab like the analysis model.
  • Degenerate entities (zero thickness/height/length, polygons under 3 points)
    are skipped silently.
  • Slabs at the same elevation (within 1 mm) share a storey; walls, columns
    and beams join the nearest storey.

If a viewer rejects the file, first confirm you are using a current download -
older exports (before the entity-terminator fix) contained no valid geometry
at all and were silently empty in viewers.

STEP (AP214)

Export → STEP downloads an AP214 faceted-BREP file (.step) in SI metres:
one closed MANIFOLD_SOLID_BREP per slab (with opening voids), wall, column
and edge beam, under a single product. Use it when a CAD tool (SpaceClaim,
SolidWorks, FreeCAD, Revit importers) is happier with STEP than IFC. Every
solid is a closed manifold with consistent face orientation - validated
against OpenCASCADE's STEP reader (zero check findings, all solids valid).

STEP carries no loads or results; for solver cross-checks export the
NASTRAN deck instead, or apply loads in the target tool.

IGES (surfaces)

Export → IGES downloads an IGES 5.3 file (.igs) in metres: every slab,
wall, column and beam face as a trimmed planar surface (Type 144 over Type
108) bounded by lines (Type 110). Faces with openings are triangulated so
each boundary is a single loop. Use it for older CAD importers that prefer
IGES over STEP; validated against OpenCASCADE's IGES reader (all faces valid).
No loads or results - use the NASTRAN deck for those.

NASTRAN (analysis mesh with loads)

Export → NASTRAN exports the generated analysis mesh as a SOL 101 deck:
GRID, CQUAD4/CTRIA3 shells with PSHELL per thickness, CBAR members
with PBAR, SPC restraints, CELAS2 ground springs, and one SUBCASE per
load case with the factored nodal loads as FORCE cards (area pressures ride
as tributary nodal lumps along the element normal - the solver's direction
convention). Units are metre/kN/kPa. This is the recommended path for
cross-checking in Strand7: import the .nas, apply gravity/self-weight there
(it is not in the deck - element densities are in kg/m³ while forces are
kN), and solve. Combinations are not expanded; combine the exported cases in
the target tool.

DXF and legacy NASTRAN

Unsupported formats return unsupported format: X (supported: …) listing the
registered formats. The DXF writer serialises the legacy frame-model maps
(Nodes, Elements), which are empty in slab projects; call it from the
console or with curl:

curl -o model.dxf "http://localhost:PORT/api/projects/<id>/export?format=dxf"

What the DXF writer produces when legacy frame data exists: $ACADVER = AC1009; layers 0 (colour 7), NODES (5), BEAMS (4), PLATES (6);
POINT per node, LINE per CBAR/CBEAM, 3DFACE per CQUAD4/CTRIA3. No text,
blocks or results. Use it only for legacy frame models; slab projects have no
frame maps, so the file is header-only.


9.6 Printing

  • Punching report: print from the report view (A4 portrait, one page per
    .print-page).
  • Charts and tables: use the browser print of the current page, or capture
    the modal.
  • There is no dedicated plotting/print layout for contours; the compare view
    and split view are for on-screen comparison.

9.7 File troubleshooting

Symptom Cause Action
Could not import file: … invalid JSON / wrong file re-export or download the verification JSON again
Project opens with no results results are never stored re-run the analysis
Saved file missing loads presets replaced cases but kept old load records verify loads after preset changes
project schema version N is newer… file made by a newer build open with the newer version
Autosave not saving disabled in Settings → General, or the server store is read-only check the toggle and store permissions
DXF file has no geometry slab projects have no frame model use STEP or IFC instead
Report print blank pop-up blocked / print area not built re-open the report and print again

→ Back to Chapter 1 - Introduction