Command line
Every flag the application parses, verified against the source. Anything not on this page is not a flag.
The application is a windowed program and stays one on the command line. Several flags do their work and then exit; none of them run headless, because the report figures and the saved images are frames of the real viewport.
shd-simcfd-app.exe [flags] [geometry file]How arguments are read
Section titled “How arguments are read”Four things decide what a command line actually does.
- Arguments are processed in the order given.
--analysis=Cavitation --bc=inlet:Velocity+inletis not the same as the reverse. --dump-caseexits as soon as it is reached. Put it last, or the flags after it never run.- A value cannot contain a space — the shell splits the argument first. A
+stands in for a space in--bc,--mesh-opand--docvalues. - Unrecognised flags are ignored, silently. There is no usage message.
--report, --save-image, --comparison-report and --measure are deferred
until after every other argument has been applied, so a report of a case whose
analysis or results were set by a later flag still sees them.
The positional argument
Section titled “The positional argument”The first argument that is not a flag and is a readable file is imported as
geometry. It is tested for being a real file rather than merely not starting with
a dash, so a two-word Qt option — -platform offscreen, -style … — cannot
consume the slot with its own value.
This is what makes the application a shell “Open with” target.
Workspace and case
Section titled “Workspace and case”| Flag | Effect |
|---|---|
--workspace=<dir> |
Put the case library somewhere other than the remembered one, for this run only. Read before any QML runs |
--create |
Open the New simulation wizard at the top level |
--create=<a.b.c> |
Open it with that branch chosen. Dot-separated catalogue ids |
--catalogue=<leaf id> |
Create a case the way the wizard does, without opening it |
--example |
Create and open the worked example, exactly as the library’s button does |
--example=<id> |
Open a named worked example |
--simulation=<n> |
Select a study within the open case |
--duplicate-simulation=<name> |
Copy the open study under a new name |
--sweep=<key>:<v1,v2,…> |
One simulation per value, cloned from the open one |
--export-case=<file.zip> |
Write the open case out as one file, then exit |
--import-case=<dir|zip> |
Read a case in, then exit |
--dump-case=<dir> |
Write the generated case to a directory, then exit. Does not mesh or run |
Anything that creates cases should pass --workspace as well, or it writes
them into the real library.
Worked example ids:
--example= |
Case |
|---|---|
submerged-body |
Submerged body drag study — the default when no id is given |
duct |
Duct flow |
lid |
Lid-driven cavity, the Ghia validation case |
cavity |
Buoyant cavity |
An unrecognised id falls back to submerged-body. An example that already exists
in the workspace is opened rather than recreated.
--sweep accepts only values that parse as numbers; anything else in the list is
dropped. A key beginning incidence has its values suffixed “ deg“ in the study
names.
| Flag | Effect |
|---|---|
--analysis=<type> |
Pick an analysis type and apply the same fan-out the Models pane applies |
--solver=<name> |
Pin a solver by hand. The case adopts that solver’s physics family and its own constraints — laminar, steady-or-transient-only, fixed algorithm |
--node=<name> |
Open a setup step, e.g. --node=Refinements. Goes to the workbench |
--view=<mode> |
Open a viewport mode |
--two-d[=x|y|z] |
Mesh two-dimensionally, thin along the given axis. z when not given |
--split-parts |
Split the geometry into one patch per connected body, and save |
--bc=<patch>:<kind> |
Set a boundary condition. The patch is created if the case does not have it |
--mesh-op=<kind>[:k=v,…] |
Add a mesh operation with parameters |
--import-mesh=<file>[:scale] |
Point the case at a mesh from another tool. The scale is to metres, so :0.001 reads a millimetre mesh |
--add-concept=<category> |
Add an advanced concept |
--add-concept=<category>:<kind> |
…with a specific kind, which decides which dictionaries it produces |
--body-motion |
Add a 6-DoF rigid body to the open study |
--region=<i>:<key>=<value> |
Set a field on conjugate region i, e.g. --region=1:zoneMaxX=0.02 |
--end=<n> |
Cut the run short to roughly n steps, steady or transient |
Analysis type names are the ones on the Models pane, listed in
Analysis types and solvers. Boundary condition
kinds are in Boundary condition types — write a
space as +, so --bc=inlet:Velocity+inlet.
Viewport modes: Surface, Mesh, Wireframe, Points, Clip, Slice.
Advanced concept categories: Rotating zones, Body motion, Porous media,
Momentum sources, Heat sources, Stabilisation.
Mesh operation kinds: renumberMesh, transformPoints, mirrorMesh,
refineMesh, extrudeMesh, createPatch, subsetMesh, mergeMeshes,
stitchMesh, polyDualMesh, collapseEdges, combinePatchFaces.
--end is an upper bound on the work, not an exact step count. A steady case
gets endIteration; a transient one gets n × deltaT as its end time, and with
an adjusting time step the step grows as the run settles.
--import-mesh splits on the last colon, and only when it is past position
two, so a Windows drive letter is not mistaken for a separator. The tail must
parse as a positive number or it is treated as part of the path.
--mesh-op values that parse as numbers are passed as numbers; everything else
is passed as a string with + replaced by a space.
Results
Section titled “Results”| Flag | Effect |
|---|---|
--add-result=<kind>[,<kind>…] |
Add result-control items by kind |
--only-results |
Drop the seeded set first, so --add-result gives exactly what was asked for |
--hinge-moments |
Add a force-and-moment control on every part except body |
--results=<case dir> |
Post-process a case directory this application did not produce. Only the results are adopted, not the setup |
--refresh-results |
Re-read every simulation’s coefficients from its run directory |
--measure=<patch>:<field>[,<patch>:<field>…] |
Add boundary measurements and log the area, mean, integral and flux |
Result-control kinds: forceCoeffs, forces, probes, cuttingPlane,
patchData, volumeData, fieldMinMax, yPlus, wallShearStress,
wallHeatFlux, binnedForces, flowRate, fieldAverage, runTimeControl.
--measure waits for the results to become readable — up to 20 seconds — before
it resolves the patch names, because results load on a worker.
Running
Section titled “Running”| Flag | Effect |
|---|---|
--mesh |
Go to the workbench and start meshing |
--run |
Go to the workbench and start the solver |
--pipeline |
Mesh, then solve, then read the results, then print one summary line and exit |
--pipeline=<seconds> |
The same with a budget other than the default 900 seconds |
--pipeline prints a single PIPELINE … line to standard error carrying the
case, analysis type, solver, family, mesh result, cell count, non-orthogonality,
run result, outcome, error and warning counts, time and field counts, and the
monitor count. The outcome is complete, mesh-failed, or timeout-<phase>.
It exits 0 whatever it found. The verdict is in the line, not in the exit code.
Reports and images
Section titled “Reports and images”| Flag | Effect |
|---|---|
--report=<file.pdf> |
Write the study report and exit |
--comparison-report=<file.pdf> |
Write the case-level report — the sweep and every study side by side — and exit |
--save-image=<file.png> |
Grab one frame of the viewport and exit |
--doc=<field>=<value> |
Set a document-control field, e.g. --doc=projectNumber=P-2417 |
All three exit with 1 on failure. --doc replaces + with a space in the value
and silently ignores a field name the report does not have.
These need a real window — the figures are frames of the viewport — so a scripted report run is a normal windowed run that quits when it is done.
Licensing
Section titled “Licensing”| Flag | Effect |
|---|---|
--sign-in |
Start the browser sign-in, as the Licence pane’s button does |
--activate=<key> |
Enter a licence key |
--licence-status |
Print tier, status, error code, error text, sign-in message and activated-machine count, then exit |
--licence-status waits about six seconds before reporting, because the
interesting answer is the server’s and it has not arrived at the moment the
arguments are parsed.
Examples
Section titled “Examples”Dump the dictionaries for one analysis type without meshing or running:
shd-simcfd-app.exe --workspace=D:/scratch --analysis=Cavitation --dump-case=D:/scratch/cavBuild a 2-D case from nothing and run it:
shd-simcfd-app.exe --workspace=D:/scratch --two-d=z ^ --bc=inlet:Velocity+inlet --bc=outlet:Pressure+outlet ^ --end=200 --pipelineSweep incidence on the open case and write the comparison report:
shd-simcfd-app.exe --example --sweep=incidenceAlpha:-4,0,4 ^ --comparison-report=D:/reports/sweep.pdfThe geometry translator
Section titled “The geometry translator”shd-simcfd-translator is a separate executable and takes its own arguments. It
is normally invoked by the application, not by hand.
shd-simcfd-translator --input a.step --output a.stl --units mm --heal| Flag | |
|---|---|
--input <file> |
Required |
--output <file> |
Required |
--units <unit> |
Only consulted for BREP. m, mm, cm, in, ft and their long spellings |
--deflection <n> |
Tessellation tolerance |
--angular <deg> |
Angular tessellation tolerance |
--heal / --no-heal |
Sew faces and remove tiny edges, or do not |
--self-test |
Round-trip known geometry through STEP and IGES and report |
It exits 2 on a bad argument list, an unreadable file, or an extension it does not handle. Unrecognised arguments are an error here, unlike in the application.