Draft. This manual is new and still growing. If something here does not match what you see in the software, the software is right — tell us and we will fix the page.
Geometry

Where it is
Setup tree: Geometry
Controls
Geometry
Domain
- Control: choice (
ComboRow) - Default:
-1 - Bound to:
CaseState.activeGeometry - Shown when:
!root.caseLevel
Import
Import geometry
- Control: action (
ToolButton2)
Units
- Control: choice (
ComboRow) - Default:
m - Bound to:
CaseState.geometryUnits - Options:
m,mm,cm,in,ft
Source units of the imported file. Geometry is rescaled to metres on import, so bounds, areas and cell sizes are always SI.
Heal on import
- Control: on/off (
ToggleRow) - Default:
true - Bound to:
CaseState.geometryHealingEnabled
Passed to the geometry translator: sew faces, remove tiny edges and report diagnostics.
Aerofoil extrusion
Chord
- Control: value (
ValueField) - Unit: m
- Default:
1.0 - Bound to:
CaseState.airfoilChord - Value modes: none (plain entry)
- Shown when:
CaseState.geometryImportFamily === "airfoil"
The profile is normalised to unit chord on read, so this is the size it becomes whatever scaling the file used.
Span
- Control: value (
ValueField) - Unit: m
- Default:
0.2 - Bound to:
CaseState.airfoilSpan - Value modes: none (plain entry)
- Shown when:
CaseState.geometryImportFamily === "airfoil"
Extruded along z, centred on zero. A 2-D case wants this about one cell thick with empty front and back patches.
Angle of attack
- Control: value (
ValueField) - Unit: deg
- Default:
0.0 - Bound to:
CaseState.airfoilAngle - Value modes: none (plain entry)
- Shown when:
CaseState.geometryImportFamily === "airfoil"
Rotated about the quarter chord, which is where the pitching moment is conventionally taken.
Extrude to triSurface
- Control: action (
ToolButton2) - Shown when:
CaseState.geometryImportFamily === "airfoil" - Enabled when:
CaseState.geometrySource !== "" && !GeometryImportBackend.busy
Translate to triSurface
- Control: action (
ToolButton2) - Shown when:
CaseState.geometryUsesCadTranslator() && CaseState.geometryImportFamily !== "airfoil" && CaseState.analysisFamily === "fluids" - Enabled when:
CaseState.geometrySource !== "" && !GeometryImportBackend.busy
Stop translating
- Control: action (
ToolButton2) - Shown when:
GeometryImportBackend.busy
Parts
Split into parts
- Control: action (
ToolButton2) - Shown when:
CaseState.geometryParts.count === 0 - Enabled when:
CaseState.geometryUsesMesh()
Merge back into one patch
- Control: action (
ToolButton2) - Shown when:
CaseState.geometryParts.count > 0
Display
Mode
- Control: choice (
ComboRow) - Default:
Surfaces - Bound to:
CaseState.viewportRenderMode - Options:
Surfaces,Wireframe,SurfacesWithEdges,TranslucentWithEdges
The in-app guidance depends on the case:
- CAD format recognised. Nothing is drawn until the translator has turned it into a surface - use Translate, above.
- Mesh overlays the surface triangulation; wireframe and points switch the actual geometry topology. Fields of the solution are drawn from the post-processing pipeline, not from here.
Section
- Control: choice (
ComboRow) - Default:
None - Bound to:
CaseState.viewportClip - Options:
None,Clip,Slice
Clip cuts the model on a plane and shows what is behind it. Slice keeps only a slab of the width below. Either one applies on top of the display mode, rather than replacing it.
Section position
- Control: value (
ValueField) - Unit: of span
- Default:
0.5 - Bound to:
CaseState.clipPosition - Writes:
viewport/clipPlane/origin - Shown when:
CaseState.viewportClip !== "None"
Slice width
- Control: value (
ValueField) - Unit: m
- Default:
0.08 - Bound to:
CaseState.sliceThickness - Writes:
postProcess/cuttingPlane/thickness - Shown when:
CaseState.viewportClip === "Slice"
Conditional and repeated groups
Per item in CaseState.geometryParts
repeated once for every entry in CaseState.geometryParts
Patch …
- Control: value (
ValueField) - Value modes: none (plain entry)
… triangles, … m². This is the name the solver will call the patch, so it is what a boundary condition and a force control refer to.
Measure force and moment on this part
- Control: action (
ToolButton2)
Lists this panel shows
Read straight from the data behind the panel, not from a hand-written list.
Geometry info
From a fixed list in the application.
| label |
|---|
| Format |
| Backend |
| Solid bodies |
| Faces |
| Edges |
| Vertices |
| Triangles |
| Visible tris |
| Bounds min |
| Bounds max |
| Size |
| Surface area |
| Frontal area |
| Watertight |
Problems reported against this step
The application checks these before a run and reports them in the Problems tab against this step.
| Severity | Message |
|---|---|
| warn | The body is … m along the wave direction and the wave is … m long. The tank is sized by the wave, so the body will need several levels of surface refinement to appear in it at all. A hull exported in the marine convention - length along X, deck up in Z - is what makes the two comparable. |
| warn | The imported surface has open edges. It will still mesh, but the flow can leak inside the body through the holes, which usually shows up as a run that diverges rather than as a meshing failure. Cap the holes, or place the body on a ground plane if it was modelled to sit on one. |
| error | The last geometry operation could not be applied: …. The feature is still listed; the model is as it was before it. |
| error | … is still loading. Meshing now would mesh the empty domain box instead of the body. |
| error | … was imported but no body came of it (…). Meshing would use the empty domain box. Re-import it, or check the file. |
| error | This analysis solves on the surface of a body - the … lives on it - and no geometry has been imported, so there is no surface to mesh. Import a body under Geometry, or load the worked example. |
| warn | No geometry has been imported. The mesh will be the empty domain box - flow from the inlet to the outlet with nothing in the way. Import a body under Geometry, or choose a shape that is its own domain (a tank, a cavity, a duct) from the catalogue. |
… marks a value the application computes at run time, so the source carries no fixed text for it.