What WitSweep opens, what you can vary and what comes back. For a first study, start with Getting Started with WitSweep →.
Applies to WitSweep 1.7.
Contents
- Supported inputs
- CalculiX decks: what you can vary
- CalculiX decks: response columns by analysis type
- Nastran decks: the supported subset
- OpenFOAM cases
- Running a sweep and looking at results
- Licenses, limits and updates
- Limitations
1. Supported inputs
| Input | How it opens | What it becomes | License |
|---|---|---|---|
A CalculiX deck (.inp) |
Drop it on Home, browse, the command line, a .witsweep |
One deck: you pick values and WitSweep generates the variants | Base |
Several .inp decks, a folder of decks or a .zip of decks |
Drop, browse, or Open a folder of decks… | A deck set: every deck is one variant, run as it is | Base |
A Nastran deck (.nas, .bdf, .dat) |
Drop, browse, the command line, a .witsweep, the Inventor add-in |
One deck: you pick values in Nastran terms; every variant is converted to CalculiX on your workstation and solved by CalculiX | +Nastran |
An OpenFOAM case: its folder, a .foam / .OpenFOAM stub, or a .zip |
Drop, browse (the stub), Open an OpenFOAM case…, the command line | One case: you pick dictionary values | +OpenFOAM |
An OpenFOAM case set: a folder (or .zip) whose direct subfolders hold two or more cases |
Drop, Open an OpenFOAM case… on that folder, the command line | Every case is one variant, run as it is | +OpenFOAM |
A .witsweep session |
Double-click, drop, browse, the command line | The saved deck or case, its picks and values, back on the Scenario stage | As its content |
How a file is recognised
- A Nastran deck is recognised by its extension only (
.nas,.bdf,.dat, any letter case). Any other single file is read as a CalculiX deck. - An OpenFOAM case is a folder that holds
system/controlDict. A stub stands for the folder it sits in, and its extension must be written.foamor.OpenFOAMexactly. A folder with exactly one case among its direct subfolders opens that case. A folder whose only subfolder is not a case is followed into it, up to two levels (the shape a.zipunpacks to). - A deck set is built from the
.inpfiles of the folder or.zip, subfolders included, whatever the letter case of the extension. A file that another deck of the set includes is part of that deck, not a variant: it is left out, and the Scenario stage says so (<file> left out — a deck of the set includes it). macOS metadata (__MACOSX/,._namefiles) is skipped. Nastran files inside a folder or a.zipare not part of a set. - Cases are recognised before a folder is treated as a set of decks.
- These open alone and are refused in a mixed drop: a
.witsweep, a Nastran deck, an OpenFOAM case, an OpenFOAM case set. - Deck sets and case sets cannot be saved as a
.witsweep.
Command line. witsweep <path> [--source=<host>] opens a deck, a Nastran deck, a case,
a case set, a folder, a .zip or a .witsweep. --source sets the provenance badge
(Nastran · from Inventor). A second launch hands its file to the window that is already
open.
A .witsweep finds its deck. A session looks for its deck or case beside itself first,
at the place it was saved relative to the session, then at the path it was saved with. A
project copied with its deck therefore opens that copy. The restore line says which one
served when it is not the saved one: · the deck found beside the session, · the deck
beside the session, not the one at its saved path, · the deck at its saved path, none
beside the session, · the deck found under the session's folder. For a case it names the
case (· the case found beside the session, and so on). The restore then compares the
sweep's identity: · identity verified, or · ‼ the deck changed since this session was
saved (· ‼ the case changed since this session was saved for a case).
File associations.
| System | What is registered |
|---|---|
| Windows | .witsweep |
| macOS | .witsweep, plus folders and .zip archives dropped on the Dock icon |
| Linux | the .witsweep MIME type |
What is refused when a file opens
| Situation | What WitSweep says |
|---|---|
A folder or .zip with no deck |
'name' contains no .inp decks. |
A .zip past the unpacking limits: 100,000 entries, 4 GB in all, or 100× its own size once it has unpacked 32 MB |
'name.zip' holds N entries — more than the 100,000 WitSweep unpacks — it was not unpacked., 'name.zip' unpacks to N GB — more than the 4 GB WitSweep unpacks — it was not unpacked., 'name.zip' unpacks to N× its size — more than the 100× WitSweep allows — it was not unpacked. Nothing of it is left behind. |
A .zip entry that would land outside its folder |
'name.zip' names a file outside its folder (path) — it was not unpacked. |
| A deck set with the same deck twice | duplicates another deck of the set — one variant cannot run twice |
| A case set with the same case twice | <case> duplicates <case> - one variant cannot run twice. |
| A mixed drop | A .witsweep session restores alone — drop it by itself., A Nastran deck opens alone — deck sets take .inp decks only., An OpenFOAM case opens alone — drop it by itself., An OpenFOAM case set opens alone — drop it by itself. |
| A Nastran deck without the module | this deck is Nastran — the module is not on this licence |
| An OpenFOAM case or case set without the module | this case is OpenFOAM — the module is not on this licence, these cases are OpenFOAM — the module is not on this licence |
A .witsweep whose deck or case is gone |
✗ base deck not found: path, ✗ the case folder was not found: path |
| A session saved by a newer WitSweep | The session was saved by a newer WitSweep (format X; this build reads up to 2). |
Problems inside a model (a *RESTART, READ, a transient heat step without starting
temperatures, an OpenFOAM construct the pool refuses) do not stop it from opening. WitSweep
opens the model and names each problem as a blocker, and Run stays closed until they are gone.
2. CalculiX decks: what you can vary
When a deck opens, WitSweep marks every value it can vary. You click a value, choose Sweep this value, and give it a list, a range or a column of values on the Scenario stage.
Values and combinations
- List: values typed or pasted (
250, 300, 350). Commas, semicolons, tabs and line breaks separate them. - Range: start, end, and a step or a count.
- CSV: a pasted column.
- Paired CSV rows: one row per variant, one value per parameter. Several parameters then move together, and the table is these rows verbatim.
- With several parameters you choose one-at-a-time (the default: each parameter varied around the base values) or full factorial (every combination).
- A table of more than 100,000 variants is refused: The combination yields more than 100000 variants.
Every value is checked the way ccx reads it, when it is entered and again when Run composes the sweep. A value ccx would misread is refused with a sentence:
| Value | What WitSweep says |
|---|---|
A blank inside (150000 180000) |
'150000 180000' has a blank inside — CalculiX drops blanks and reads 150000180000; one value per line |
A comma decimal (0,5) |
'0,5' reads as two values, 0 and 5 — the decimal mark is a point: write 0.5 (two values are 0, 5 with a space) |
| More than 20 characters | '…' is N characters — CalculiX reads the first 20 of a number; write it shorter |
| Not a number | '…' is not a number CalculiX reads — a real like 2.1E5, 1.5D-3 or 250 |
What can be varied
A value is offered only when it is a plain number on a data line of one of these cards.
The label is what the parameter card shows beside the line number. The parameter itself is
named p1, p2, … on the Scenario stage and in the Results header.
| Keyword | Field (on each data line unless noted) | Label | Notes |
|---|---|---|---|
*ELASTIC |
1st and 2nd value | Young's modulus, Poisson's ratio | Isotropic only (no TYPE, or TYPE=ISO). The temperature column is not offered. |
*DENSITY |
1st value | density | Listed, not offered, when no step reads it (below). |
*CONDUCTIVITY |
1st value | conductivity | Isotropic only |
*SPECIFIC HEAT |
1st value | specific heat | Listed, not offered, without a transient heat step. |
*EXPANSION |
1st value | expansion coefficient | Isotropic only. ZERO= on the keyword line is not offered. Listed, not offered, without a *TEMPERATURE load or a coupled temperature-displacement step. |
*PLASTIC |
1st value | yield stress | Each yield stress of the table is its own value; strains and temperatures are not offered. |
*CLOAD |
3rd value (the magnitude) | load value | Listed, not offered, in a *FREQUENCY step. |
*DLOAD, *DSLOAD |
3rd value | load magnitude; gravity magnitude (GRAV); rotational speed squared (CENTRIF) |
Direction components are not offered, nor the lines whose label ends in NU (a user routine supplies the value) or NP, nor NEWTON. A *DLOAD or *DSLOAD in a *FREQUENCY step is listed, not offered. |
*CFLUX |
3rd value | flux value | Listed, not offered, in a *FREQUENCY step. |
*DFLUX |
3rd value | flux magnitude | Listed, not offered, in a *FREQUENCY step. |
*FILM |
3rd and 4th value | sink temperature, film coefficient | Forced convection (F<n>FC): the film coefficient only. A user-routine label (F<n>NU): nothing. Listed, not offered, in a *FREQUENCY step. |
*BOUNDARY |
4th value (the prescribed value) | prescribed value | Lines that only fix degrees of freedom (FIX, 1, 3) have nothing to vary. |
*TEMPERATURE |
2nd value | temperature | |
*INITIAL CONDITIONS |
2nd value | initial temperature | TYPE=TEMPERATURE only |
*SHELL SECTION |
first data line, 1st value | thickness | Not offered when the card says NODAL THICKNESS. |
*BEAM SECTION |
every number of the first data line | dimension | Not offered when the card says NODAL THICKNESS. The direction line is not offered. |
*STATIC, *DYNAMIC, *HEAT TRANSFER |
first data line, values 1–4 | initial time increment, step time, minimum increment, maximum increment | DELTMX (5th value of *HEAT TRANSFER) is not offered. The line of a linear *STATIC step and of a steady *HEAT TRANSFER step is listed, not offered (below). |
*AMPLITUDE |
every second value (the amplitude, not the time) | amplitude value | Each point is its own value; there is no global scale factor. |
A value that cannot change the solve is listed, not offered. It stays marked in the deck, so the deck reads complete, but it cannot be picked: its menu says Not sweepable — it changes nothing in the solve: and the reason. The deck stage's count of sweepable values leaves it out. The reasons, decided from the steps the deck runs:
| Value | Reason shown |
|---|---|
*DENSITY |
no step reads the density: no GRAV or CENTRIF load, no frequency, dynamic or transient heat step |
*SPECIFIC HEAT |
no transient heat step reads the specific heat |
*EXPANSION |
no *TEMPERATURE load and no coupled temperature-displacement step reads the expansion |
The time line of a *STATIC step without NLGEOM, in a deck with no nonlinear material or contact card and no *AMPLITUDE |
the time line of a linear *STATIC step changes nothing: the step solves in one increment |
The time line of a *HEAT TRANSFER, STEADY STATE step, in a deck with no *AMPLITUDE |
the time line of a steady *HEAT TRANSFER step changes nothing: there is no time to march |
A *CLOAD, *DLOAD, *DSLOAD, *CFLUX, *DFLUX or *FILM value in a *FREQUENCY step |
a *CLOAD in a *FREQUENCY step changes nothing: a modal analysis takes no loads (with the card's own name) |
The mass is read by a GRAV, CENTRIF or NEWTON load and by a *FREQUENCY, *DYNAMIC,
*MODAL DYNAMIC, *STEADY STATE DYNAMICS, *COMPLEX FREQUENCY or transient thermal step.
The nonlinear cards are *PLASTIC, *CREEP, *HYPERELASTIC, *HYPERFOAM,
*DEFORMATION PLASTICITY, *CONTACT PAIR, *GAP, *CYCLIC HARDENING and
*RATE DEPENDENT.
What cannot be varied
- The mesh and the geometry (
*NODE,*ELEMENT), set membership (*NSET,*ELSET,*SURFACE), element types, the analysis type, the material model. - Integer identifiers and degree-of-freedom numbers.
- Parameters on a keyword line (
*STEP, INC=…,*EXPANSION, ZERO=…). - The mode count of
*FREQUENCYand*BUCKLE, and anything on cards not in the table above:*RADIATE,*SPRING,*MASS,*SOLID SECTION,*MODAL DYNAMIC,*STEADY STATE DYNAMICS,*VISCOand the others. - Numbers written in the deck with a Fortran exponent (
1.0D5). A value you type may use one. - Values inside
*INCLUDEfiles. The Deck stage says so. The deck itself runs: it travels to the pool with its includes spliced in. The sweep's identity covers the included files, so an edited include is a new study. - One parameter cannot drive several places in the deck. Each picked value is its own parameter. To move several values together, give them paired CSV rows.
To vary geometry or a mesh, prepare the decks and open them as a deck set: every deck is a variant.
What stops a deck from running
Each of these is a blocker on the Deck stage, named with its file and line, and Run stays closed until the deck is fixed. WitSweep never writes into your deck.
| Cause | What WitSweep says |
|---|---|
| A restart read | *RESTART, READ — restart decks are not supported. (*RESTART, WRITE is not a blocker.) |
An *INCLUDE that does not resolve on your workstation |
*INCLUDE, INPUT=… — not found at path., … — the path could not be resolved., … — includes itself or nests too deep., *INCLUDE without INPUT= — there is no file to read. Nesting deeper than 8 levels is refused. The same file included in several places, such as one load file in two steps, is fine. |
A transient thermal step (*HEAT TRANSFER without STEADY STATE, or a transient *COUPLED / *UNCOUPLED TEMPERATURE-DISPLACEMENT) as the deck's first thermal step, with no *INITIAL CONDITIONS, TYPE=TEMPERATURE |
… without STEADY STATE starts from the initial temperatures, and the deck sets none — CalculiX stops here without *INITIAL CONDITIONS, TYPE=TEMPERATURE. A steady thermal step before it sets them, and the deck runs. |
A *TEMPERATURE load without initial temperatures |
*TEMPERATURE without *INITIAL CONDITIONS, TYPE=TEMPERATURE — CalculiX takes a temperature load only over initial temperatures. |
A *TEMPERATURE load in a *BUCKLE step |
*TEMPERATURE in a *BUCKLE step — CalculiX takes no temperature load in linear buckling. |
A *TEMPERATURE load in a thermal step |
*TEMPERATURE in a *HEAT TRANSFER step — the step solves for the temperatures; prescribe them with *BOUNDARY, degree of freedom 11. |
A card that reads a file of its own: *TEMPERATURE, FILE=, *SUBMODEL, INPUT=, *VIEWFACTOR, INPUT= |
… — the file does not travel to the pool: only the deck and its includes do. |
No *STEP at all |
no *STEP — there is nothing for CalculiX to solve. |
Memory. Run refuses a sweep when no pool machine can hold a variant. WitSweep estimates
a variant's memory peak only when every step is *STATIC or *HEAT TRANSFER and every
element is a solid of the C3D4, C3D10, C3D8 or C3D20 family. For any other deck no
estimate is made. A deck set takes the largest estimate of its decks, and has none when
one of its decks has none. A machine fits when the estimate is at most 80% of its RAM. The
Scenario stage says how many fit (fits N of M pool node(s)). When none fits, Run says
✗ est. peak ~… (…) exceeds every pool node (largest …), and for a single deck adds the
largest mesh the pool could take (— largest feasible mesh on this pool: ~N nodes).
Machines that have not reported their memory are not counted, and while none has, nothing
is refused.
3. CalculiX decks: response columns by analysis type
How the columns are made. Every variant is solved by ccx on a pool machine, and the
pool reads that variant's .frd and .dat right after the solve. A column appears only
when the deck asks ccx for the output it is computed from. WitSweep adds no output
requests to your deck. The pool adds some to its own copy only to recover the von Mises of
shells and beams written with OUTPUT=2D (below).
| Quantity | The deck must ask for |
|---|---|
| Displacements | *NODE FILE (or *NODE OUTPUT) with U |
| Stresses | *EL FILE (or *ELEMENT OUTPUT) with S |
| Temperatures | *NODE FILE (or *NODE OUTPUT) with NT |
| Reaction-force sums | *NODE PRINT, NSET=<set> with RF. A TOTALS=YES or TOTALS=ONLY print gives the total as ccx printed it. RF in *NODE FILE is not read. |
| Eigenfrequencies, buckling factors | nothing: ccx prints them in the .dat |
Steps. Every column belongs to a step. A deck with one *STEP keeps the plain names
below. A deck with more than one names the step in every column: max_von_mises[step 1],
eigenfrequency_1[step 2], rf_sum_z@fix[step 1], max_temp@tip[step 3]. Each step's
values come from that step's own last block of each field, so a static step followed by a
frequency step reports the static stress under [step 1] and the mode-shape stress under
[step 2]. The table, its sort and the exports carry the names as they are.
Units. WitSweep never interprets units. Values are shown exactly as the deck's unit system produces them, and eigenfrequencies are in cycles per time unit.
The analysis type is read from the procedure card of each *STEP. The Responses card
on the Scenario stage lists what to expect.
Linear static (*STATIC)
| Column | What it is |
|---|---|
max_disp_magnitude |
Largest displacement magnitude √(Ux²+Uy²+Uz²) over all nodes |
max_disp_x, max_disp_y, max_disp_z |
Largest absolute displacement per axis (the sign is not kept) |
max_von_mises, min_von_mises |
Largest and smallest nodal von Mises stress; on shells and beams written with OUTPUT=2D, recovered from section forces (below) |
rf_sum_x@<set>, rf_sum_y@<set>, rf_sum_z@<set> |
Sum of the reaction forces of a node set printed with *NODE PRINT … RF, in the global frame. The set name is lowercased. Other prints in the .dat (displacements, stresses) are not mixed in. |
Rows ccx printed in a node's local *TRANSFORM frame (the trailing L) are rotated back
to the global frame through the deck's own *TRANSFORM, with a note. When they cannot be
rotated, the set gets no rf_sum columns, and the note says to print with GLOBAL=YES or
TOTALS=YES.
The Responses card lists reaction-force sum · <set> for every set the deck prints with
RF, a TOTALS=ONLY print included. When a deck with a static or coupled step names a node
set on a *BOUNDARY line and prints no reaction forces for it, the card says so: no
reaction-force sum for … — needs *NODE PRINT, NSET=<set> with RF in the deck.
Frequency analysis (*FREQUENCY)
| Column | What it is |
|---|---|
eigenfrequency_1 … eigenfrequency_N |
The eigenfrequencies in cycles per time unit, numbered as ccx numbers the modes of the step. There is one per mode ccx finds, at most as many as the *FREQUENCY line asks for; WitSweep does not cap it. A negative eigenvalue (a rigid-body mode) reads 0, as ccx prints it. The participation factors and effective modal masses ccx prints after them are not read. |
eigenfrequency_nd<n>_<k> |
Cyclic symmetry: mode k of nodal diameter n |
max_disp_*, max_von_mises, min_von_mises |
From the step's last block, which is the highest mode's normalised shape. They describe a mode shape, not a physical response, and carry a note that says so. |
The reaction forces ccx prints per mode are mode shapes and are never summed. A
*COMPLEX FREQUENCY table is read too. A table in a layout the pool does not know gives no
column and a note.
Linear buckling (*BUCKLE)
| Column | What it is |
|---|---|
buckling_factor_1 … buckling_factor_N |
The buckling factors, one per mode the deck requests |
max_disp_*, max_von_mises, min_von_mises |
From the step's last block, a mode shape, as for frequency |
rf_sum_*@<set> |
The base state's reaction, printed before the factors, with a note |
Heat transfer (*HEAT TRANSFER)
| Column | What it is |
|---|---|
max_temp, min_temp |
Largest and smallest nodal temperature of the step's last block |
max_temp_any_step |
Peak temperature over every temperature block of the step. Appears only when the step wrote more than one (a transient). |
Heat flux and reaction flux are not read. There is no column for the minimum over time. The Responses card of a transient step lists the final-state max / min and the peak over time.
Coupled thermo-mechanical (*COUPLED TEMPERATURE-DISPLACEMENT, and *UNCOUPLED TEMPERATURE-DISPLACEMENT)
The linear-static columns and the heat-transfer columns together, each family present when
the deck writes its output: max_disp_magnitude, max_disp_x/y/z, max_von_mises,
min_von_mises, rf_sum_*@<set>, max_temp, min_temp, and max_temp_any_step when
the step wrote several temperature blocks.
Other procedures
*DYNAMIC, *MODAL DYNAMIC, *STEADY STATE DYNAMICS, *VISCO and the rest are not
refused, and their decks run. The Responses card lists no response for them, only the facts
every variant carries. The Results get whatever the pool finds in the step's files,
typically the displacement and stress columns of its last block.
Shells and beams written with OUTPUT=2D
With OUTPUT=2D on its file cards, ccx writes a shell's stress as the mean through the
thickness and a beam's as the mean over the section: the bending stress is gone (an S8R
cantilever read 0.81 against 75). The Nastran converter writes OUTPUT=2D. The pool recovers
the von Mises of such a deck from section forces. It adds the
output the recovery reads to its own copy of the deck and says so in an ⓘ note on the
variant:
- Beams (B31, B32, B32R with a RECT, PIPE or BOX section):
*EL FILE, OUTPUT=2D, SECTION FORCESat the end of step 1. A beam node's von Mises is the largest over the section's corners, mid-sides and centre. - Shells (S4, S6, S8, S8R): a
*SECTION PRINTof every element edge in the*STATICsteps. The edge moments give the bending stress6M/t², and a shell node's von Mises is the largest of the top face, the bottom face and the mid-surface.
Every von Mises column of such a deck then carries an ⓘ note naming the method. Measured by the pool on cantilevers, the analytic root stress in brackets: an S8R plate 75.0 (75), a B32 beam 60.1 (60), and a CQUAD4 strip converted from Nastran, on 20 × 2, 40 × 4, 80 × 8 and 160 × 16 elements, 5850, 5925, 5962.5 and 5981.25 (6000). The edge prints cost solver time: a 9,800-element S4 plate solved in 3.1 s instead of 1.5 s.
Where the recovery cannot run, the von Mises columns and every von Mises probe are left out
with a ⚠ note that gives the reason (below). It does not run for S3 and S4R shells, B31R
beams, CIRC sections, beam nodes that shell, membrane, plane or truss elements share, beams
that meet at more than 5°, against each other's direction or with different sections,
trusses beside beams, composite or NODAL THICKNESS shell sections, a material that is not
linear elastic, a deck with *SECTION PRINT cards of its own, for shells a step that is not
*STATIC, and a deck with more than 20,000 shell edges, among others. The controller's
README lists every case:
https://github.com/OmnibusCloud/Controllers/blob/main/CalculiX/OutWit.Controller.CalculiX/README.md.
On the Responses card such a deck (shell S… or beam B… elements, and OUTPUT=2D on the
first step's file cards) reads max / min von Mises — on shell and beam models from section
forces; a model the pool cannot recover reports the column as not reported, with the
reason. The pool decides which models it recovers. The card does not guess.
Columns that are left out
A column that would carry a wrong number is not reported. The row carries a note on that column saying why:
max_von_mises,min_von_misesand every von Mises probe of a shell or beam deck written withOUTPUT=2Dwhose stress the pool cannot recover (above): not reported: with OUTPUT=2D ccx maps shell and beam stresses onto the mid-surface or the beam axis, where the bending stress is gone (an S8R cantilever read 0.81 against 75 analytic), and the section-force recovery cannot run: …; remove OUTPUT=2D from the file cards to get the expanded-mesh stress.- Every column of a field whose
.frdblock holds a value that is not a number (nan,inf, a solve that blew up). The note names the field and the node. rf_sum_*@<set>when local rows cannot be rotated (above).- Eigenfrequencies of a table in an unknown layout (above).
Probes: your own columns
On the Scenario stage, + Probe adds a column built from three choices: an aggregate, a quantity and a node set.
- Aggregate: max, min, avg.
- Quantity: von Mises, displacement magnitude, temperature.
- Node set: any
*NSETof the deck, or a*NODE, NSET=set.
The column is named {max|min|avg}_{von_mises|disp_magnitude|temp}@<set>, for example
avg_temp@xmax. It is computed over the set's nodes in the step's last block of that
quantity. A shell, beam, truss, membrane or plane-element deck written with the default
OUTPUT=3D has its results on an expanded mesh under new node numbers. A deck node the
.frd does not list then stands for the result nodes at its position, or the nearest ones.
The column carries a note that counts them. A set with no result node at all gets no column
and a note.
| Procedure | Quantities offered |
|---|---|
| Static | von Mises, displacement magnitude |
| Heat transfer | temperature |
| Coupled / uncoupled temperature-displacement | all three |
| Frequency, buckling, others | none (+ Probe is disabled) |
Probes are not available for deck sets. Element sets and single points are not offered. A probe added to a sweep that already ran is computed for its earlier variants too: the Scenario stage says … computed earlier — Run computes the new responses for all of them (or for N of them), and Run solves those variants again.
Notes from the pool
The pool notes how a value was obtained, why a column is missing, or how it changed the deck before the solve. A note marks its cell: ⓘ for information, ⚠ for a warning, ✗ for an error. The solve cell carries every note of its row. A note is read in full on hover, in the Results detail pane, on the Run stage tile and in the exports.
| Note | When |
|---|---|
| ⓘ N of M rows were printed in the local frame of *TRANSFORM, NSET=… and rotated to the global frame | Reaction forces printed in a local frame |
| ⓘ N of M nodes of set … have no result node at their own position (…); the nearest result nodes were taken | A probe on an expanded mesh |
| ⓘ a mode shape (mode N, normalised), not a physical response | max_disp_* and von Mises of a *FREQUENCY or *BUCKLE step |
| ⓘ the reaction forces ccx printed per mode after the eigenvalue solve are mode shapes and are not summed | An eigenvalue step with an RF print |
| ⓘ von Mises from section forces (OUTPUT=2D gives the mid-surface or beam-axis stress): … | The von Mises columns of a shell or beam deck written with OUTPUT=2D |
| ⓘ *EL FILE, OUTPUT=2D, SECTION FORCES was added to step 1, …, N *SECTION PRINT requests, one per shell element edge, were added to the deck … | On the variant: the output the pool added to recover them |
| ⚠ not reported: … | A column left out (above) |
| ⚠ SOLVER=PASTIX is not linked in the bundled ccx of this node: the parameter was removed from *STATIC and the solve used PARDISO | A step card names a solver the pool's ccx does not link: PASTIX anywhere, PARDISO on a macOS machine, TAUCS, SGI. The solve uses the default: PARDISO on Windows and Linux, SPOOLES on macOS. |
| ✗ the node's reason | The node could not read the variant's results |
A variant whose results the node could not read is ✗ results unreadable, with the node's reason, never a success.
Always present
variant(#N), one column per parameter, the responses, andsolve: the solve time with ✓, ✗ exit N with theccxexit code, or ✗ results unreadable (✗ not converted for a Nastran variant that did not convert). CalculiX results carry no warning count.- In the CSV and XLSX exports the
solvecolumn issolve_seconds, and three columns are added:status(done, failed, extraction failed, or not converted for a Nastran variant that did not convert),exit_code, andnotes(each note asKIND column: text, separated by|). The HTML report has astatuscolumn, and anotescolumn when any row carries a note. - In a sweep extended by several builds, a row computed by another WitSweep build than the sweep's job on the stage carries the note computed by WitSweep <version> (with the Nastran converter's version for a Nastran sweep).
4. Nastran decks: the supported subset
WitSweep reads a Nastran bulk-data deck, lets you vary its values in Nastran terms, then converts every variant to a CalculiX deck on your workstation and solves it with CalculiX. The Results header says Nastran deck · solved by CalculiX.
The converter targets the decks Autodesk Inventor Nastran writes. It is strict by design: a deck that would convert into something different from what it says is refused, never converted halfway. Every refusal says why, most of them naming the card.
Solution sequences
SOL |
Accepted spellings | CalculiX procedure |
|---|---|---|
| 101 | 101, STATIC, LINEAR STATIC, SESTATICS, SESTATIC, STATICS |
*STATIC, one *STEP per subcase. With TEMPERATURE(LOAD), TEMPERATURE(BOTH) or a bare TEMPERATURE selected: thermal-expansion statics. |
| 103 | 103, MODAL, NORMAL MODES, SEMODES, MODES |
*FREQUENCY with the EIGRL the subcase's METHOD selects (V1, V2; ND, default 10). CalculiX is asked for ND + 6 modes. The Results show every mode it finds, at most that many, rigid-body modes included: a free model's first six read near zero. |
| 153 | 153, NLSCSH, LINEAR STEADY STATE HEAT TRANSFER |
*HEAT TRANSFER, STEADY STATE; one subcase only |
Refused: 105 (buckling), 106 (nonlinear static), 159 (transient heat), nonlinear steady
heat (the NONLINEAR STEADY STATE HEAT TRANSFER spelling, and a heat deck with
temperature-dependent MATT4 properties), 200 (optimisation), the legacy 66 (NONLIN,
nonlinear statics) and every other sequence, a deck with no SOL, and a case-control
ANALYSIS that names another solution than SOL.
Elements
| Card | Becomes | Limits |
|---|---|---|
CTETRA (4 nodes) |
C3D4 | Converts as an accuracy class (linear tetrahedra are stiff, ≈78%) |
CTETRA (10 nodes) |
C3D10 | All midside nodes present |
CHEXA (8 nodes) |
C3D8I (C3D8 in heat) | |
CHEXA (20 nodes) |
C3D20R | All midside nodes present; not in heat |
CQUAD4, CQUADR |
S4 in statics with a plain PSHELL; S8R (midside nodes generated) in modal analysis, in a mesh with triangles and with PCOMP |
No ZOFFS, no per-node thickness taper. On the S4 path T below 0.06 of the longest edge is refused and 0.06–0.15 is an accuracy class; on the S8R path T below 0.02 of the longest edge is refused. In statics a smoothly curved PSHELL quad mesh is refused (sharp folds convert); on the S8R path a wrap beyond a 90° arc is refused |
CTRIA3, CTRIAR |
S6 (with S8R quads) | Any triangle sends the whole shell mesh to S8R/S6; no composite plies; curved triangle meshes refused |
CQUAD8, CTRIA6 |
S8R, S6 | All midside nodes present; not in heat |
CBAR, CBEAM |
B31 with a rectangular *BEAM SECTION |
No end offsets, pin flags, circular or tube sections; not under GRAV; an accuracy class (≈2%) |
CROD, CONROD |
T3D2 | J and NSM must be 0 |
CELAS2 |
SPRING2 | Not grounded, translational only; not in heat |
CONM2 |
a point mass | Statics and modal only; no offsets, no rotary inertia, no CID frame; on a solid, rigid-link or CELAS2 node |
RBE2 (all six dofs) |
*RIGID BODY, or a kinematic coupling on shell nodes |
Statics and modal only; not on truss or beam nodes. A MOMENT on the master is carried by the body's rotation node |
RBAR (full pair) |
*RIGID BODY |
Statics and modal only; not on shell, truss or beam nodes |
RBE3 (C=123, REFC=123456) |
a distributing coupling | Statics and modal only; not on truss or beam nodes; on solids the reference sits at the centroid |
Refused by name: CPENTA (wedges), CBUSH, CELAS1, CMASS1–4, CONM1, CGAP,
CSHEAR, CCABLE, RBE1, RROD, RSPLINE, RSSCON. Element cards not listed here
(CPYRAM, axisymmetric elements and others) are refused as unknown cards: X is not a card
this reader knows.
In heat transfer (153) only rods (CROD, CONROD) and 8-node CHEXA conduct. Any other
structural element refuses the deck, tetrahedra, 20-node hexahedra and shells included.
Properties
| Card | Used | Notes |
|---|---|---|
PSOLID |
the material: MAT1, or MAT4 in heat transfer |
A material coordinate system (CORDM > 0) is refused |
PSHELL |
MID1, T, NSM |
The bending must be the plain one: MID2 equal to MID1, 12I/T³ = 1, no MID4; MID3 blank or equal to MID1; TS/T the default. Refused: MID1 blank, a membrane (MID2 blank or -1), a separate bending, shear or coupling material, MID1 on MAT2 or MAT8. NSM is added to the density of the property's material, in statics and modal analysis alike |
PCOMP |
plies of MAT1/MAT8, LAM blank or SYM |
Becomes a composite *SHELL SECTION; Z0 outside [-T, 0] is refused; not mixed with PSHELL in one mesh; PCOMP1, PCOMPG are refused |
PBAR |
A, I1, I2 (I12 = 0) |
Only a section within 1% of a rectangle converts (A, I1, I2 must match one); NSM refused. J, K1 and K2 do not reach CalculiX: CalculiX takes the torsion from the rectangle. When the bar can twist, a J that is not positive or more than 2× off the rectangle's own is refused, and one more than 2% off is an accuracy class |
PBEAM |
prismatic constants | As PBAR; no taper, no NSM |
PBEAML |
TYPE=BAR, prismatic, GROUP=MSCBML0 |
NSM = 0; other shapes refused; PBARL refused |
PROD |
A |
|
PHBDY, PCONV |
heat only | Become *FILM |
Materials
| Card | Used | Becomes |
|---|---|---|
MAT1 |
E, NU (G completes them), RHO, A with TREF in thermal statics |
*ELASTIC, *DENSITY, *EXPANSION |
MAT8 |
E1, E2, NU12, G12, G1Z, G2Z, RHO, as a PCOMP ply only |
*ELASTIC, TYPE=ENGINEERING CONSTANTS |
MAT4 |
K, H |
*CONDUCTIVITY, film coefficient; CP and RHO are not written |
Refused: MAT2 (anywhere in the deck), MATT1, MAT12, and MATT4 in heat. MATS1,
CREEP and the tables TABLEM1, TABLEM2, TABLES1, TABLEST, TABLED1, TABLED2,
TABLED4, TABDMP1, TABRND1 are ignored with a note. Other tables and material cards
are refused as unknown.
Loads, constraints, case control
| Item | Handling |
|---|---|
FORCE, MOMENT |
*CLOAD; local coordinate systems resolved |
PLOAD4 |
*DLOAD pressure on shells and on solid faces (uniform only) |
PLOAD2 |
shell pressure |
PLOAD1 |
uniform full-span load on rectangular beams |
GRAV |
gravity per element set (not with beams, composites or point masses; MB refused) |
LOAD |
load combinations, scaled; not in heat |
SPC, SPC1, SPCADD, GRID PS |
*BOUNDARY, with enforced values; GRID PS refuses a heat deck |
TEMP, TEMPD |
thermal statics; initial temperatures in heat |
| Heat loads | QBDY1, QBDY2, QHBDY point, QVOL, CONV (CHBDYP line) |
| Subcases | one *STEP each; a subcase takes nothing from the one before it |
EIGRL |
ND, V1, V2 |
PARAM |
PARAM,WTMASS in the bulk scales every mass the conversion writes; a non-positive one, or a case-control one that differs, is refused. Every other PARAM is ignored with a note |
| Coordinate systems | CORD2R, CORD2C, CORD2S over the basic frame, for positions and loads; GRID CD rectangular or cylindrical |
INCLUDE |
read, up to 8 levels |
Refused: SPCD (enforced motion, and enforced temperatures in heat), PLOAD, EIGR,
MPC, SUPORT1, SUPORT (in statics; ignored in modal analysis), DMI, DMIG,
RESTART, superelements, surface contact, radiation, SUBCOM, SYMCOM, REPCASE,
STATSUB (prestressed modes). TSTEP is ignored, with a note in SOL 101 and 103 and
without one in SOL 153. A static subcase that selects no constraint, a static model whose
constraints leave a rigid-body motion free, and a shell or beam model whose constraints
change between subcases (or that enforces a nonzero SPC over several subcases) are
refused.
Output requests in the case control are not read: the output is always displacements and stresses in statics, displacements (the mode shapes) in modal analysis, and temperatures in heat.
How a Nastran deck is checked
- At open, the whole deck is converted once and the Deck stage shows the outcome: ✓ converts to CalculiX · N accuracy classes · N notes, or ✗ does not convert — N named rejects, with every issue listed under conversion preflight — the converter's findings, verbatim. A deck that does not convert can be read and picked, but Run stays closed.
- A free-field (comma) line longer than one card line is a named error, so the deck does not convert: Line <n> of "<file>": a free-field SPC1 line carries 3 field(s) past the card line's 9 and its continuation marker, which Nastran reads no further: '…', '…', '…' would be dropped - put them on a continuation line (5 on a large-field line).
- Accuracy classes are converted constructs with a measured error band. Their line starts with the expected error, for example ≈78% · Linear tets (CTETRA-4 → C3D4) …. The straight-beam class (≈2% · Straight beams (CBAR/CBEAM → B31) …) ends on mesh the beams finer in the model to tighten it, or, for a project the Inventor add-in converts with subdivided beams, on these beams are split in two, as the Inventor add-in's Subdivide beams asked.
- Notes are ignored cards and fields.
- At Run, every new variant is written, read back and converted on your workstation, the same way as the base. A variant that does not convert is not sent: its Results row reads ✗ not converted (its tile ✗ did not convert), with the converter's reason, and the others run.
- A variant that enters an accuracy class the base deck is not in carries the note this
variant enters an accuracy class the base deck is not in: …. A class is the converter's
code, card and message, not how many members it has: a variant whose shells join a class
the base deck is already in (a second
PSHELLthinned into the gray band) enters nothing. - A study is identified by its converted base deck and its picks, so an edited
INCLUDE, or a converter release that converts the deck differently, is a new study. - A
.witsweepwritten by the Inventor add-in may ask for subdivided beams. The base and every variant then convert with each beam split in two, and the restore line ends · converted with subdivided beams, as Inventor checked it. WitSweep has no switch of its own for this.
What can be varied in a Nastran deck
These fields are listed when they are written in the deck:
| Card | Fields |
|---|---|
MAT1 |
E, G, NU, RHO, A (thermal expansion), TREF |
MAT2 |
G11…G33, RHO, A1–A3, TREF |
MAT4 |
K, CP, RHO, H |
MAT8 |
E1, E2, NU12, G12, G1Z, G2Z, RHO, A1, A2, TREF |
PSHELL |
T (thickness), NSM |
PBAR |
A, I1, I2, J, NSM |
PROD, CONROD |
A, J |
FORCE, MOMENT |
magnitude |
GRAV |
scale |
PLOAD2 |
P |
PLOAD1 |
X1, P1, X2, P2 |
PLOAD4 |
P1–P4 |
SPC, SPCD |
enforced value |
TEMP, TEMPD |
temperature |
EIGRL |
V1, V2 (the frequency bounds) |
LOAD |
scale factors |
Only values written in the deck are listed, as real numbers on comma- or fixed-format
lines: an integer written in a real field (0, 200000) and values on tab-formatted lines
are not. A value inside an INCLUDE file is listed but not offered: its line says
included, not sweepable. A deck with MAT2 or SPCD does not convert at all, so their
values never reach a run. The mode count (EIGRL ND) and TSTEP are not offered.
Every value is checked when the deck opens. For each value of the deck's own file,
WitSweep converts the deck with that value moved by a tenth (from 0 to 1). A value whose move
does nothing or cannot convert is listed, not offered: its menu says Not sweepable — and
the reason, and its line says it too. The check converts the whole deck once per value, which
takes minutes on a big deck, so it runs in the background, one value at a time and the first value of
every card field first. Until it is done the status line reads N sweepable values, K of
them still being checked, and N falls as values are marked. A value you pick before the
check reaches it is checked on the spot. The check reads every moved deck back in memory and
writes nothing, so a deck with INCLUDEs is not checked at open: each of its values is
checked when you pick it, through a scratch copy written beside the deck so that the
includes resolve and deleted right after, and its status line claims no check. The
reasons:
| Reason | For example |
|---|---|
| it changes nothing in the converted deck | MAT1 G beside E and NU; MAT4 CP and RHO; PBAR J; a load no subcase selects |
| it changes nothing in the solve: and the CalculiX reason of section 2 | MAT1 RHO or PSHELL NSM in a static without GRAV, a RHO written as 0.0 included (moved, it adds a *DENSITY card) |
| a changed value is refused: and the converter's reason | PBAR A, I1, I2 (moved alone, the section is no longer a rectangle), PBAR NSM; PLOAD4 P1–P4 written corner by corner, and PLOAD1 X1, X2, P2 (the load must stay uniform); PROD/CONROD J |
The two converted decks are compared card by card: a card only one of them carries counts
as a whole, and the value is listed with the CalculiX reason when every value of the change
is one no step reads. A beam section (PBAR) cannot be swept: its values
are listed with the converter's reason.
A value you type must be a finite number, in plain (2.1e5) or Nastran spelling
(2.1+5, 2.+7, 1.5D7). Otherwise: 'x' is not a number — the value cannot be written
into the deck, or 'x' is not a finite number — nothing can be written into the deck. A
value is written at the field's own width. When the 8-character field (16 on a large-field
line) holds fewer digits than you typed, the row carries a note: … written as <token> =
<value> — the 8-character field holds fewer digits than <typed> (…% off). The parameter
column shows the value you typed, and the note gives the value the deck holds.
Results of a Nastran sweep
- Columns: the CalculiX columns of section 3. A 101 sweep has the displacement columns
and
max_von_mises/min_von_mises. The converter writesOUTPUT=2D, so on a model with shells or beams the pool recovers the von Mises from section forces (section 3), and the Responses card says max / min von Mises — on shell and beam models from section forces; a model the pool cannot recover reports the column as not reported, with the reason. Of what the converter writes, composite (PCOMP) shells, beams on shell nodes, beams that meet at more than 5° or change section, rods beside beams and shell meshes of more than 20,000 edges are not recovered: their von Mises columns are left out with the reason. The converted deck prints no reaction forces, so there are norf_sumcolumns. A 103 sweep has the eigenfrequencies and the last mode shape's columns (on shells without its von Mises: the recovery runs on*STATICsteps only). A 153 sweep hasmax_tempandmin_temp. Probes use the node sets of the converted deck. - Parameter columns are named in the deck's words: the card, its id and the field.
- Viewing a variant: the Open #N in… menu offers PrePoMax (Windows), ParaView, and Inventor Nastran (Windows, +Nastran).
- Inventor round trip: when the sweep was started from the Inventor add-in, WitSweep hands the chosen variant back to Inventor: its values, its responses and its result files. A deck opened directly has nothing to return to: this sweep was not handed off by Inventor — nothing to return to.
- No native Nastran result files (
.f06,.op2) are written.
5. OpenFOAM cases
What the pool runs. OpenFOAM v2606 on Linux x64, macOS arm64 and Windows x64, each
variant whole on one machine with at least 4 GB of RAM and 4 GB of free temporary storage.
A case must be reconstructed (not decomposed only), name its application in
controlDict, and have a mesh in constant/polyMesh or a step that makes one. Nothing
checks the mesh before the run: a case with neither fails at its first step. The full rules
(allowed utilities and function objects, refused constructs such as codeStream, coded
boundary conditions, #include outside the case) are published at
https://github.com/OmnibusCloud/Controllers/blob/main/OpenFOAM/SUPPORTED-INPUTS.md. The
Case stage links to them (what the pool runs and refuses →).
Checked when the case opens. WitSweep applies the pool's rules to the case as it opens and names every finding with its file and line, and Run stays closed until they are gone. Among the findings (the empty-file rule is WitSweep's own, the others the pool's):
| Situation | What WitSweep says |
|---|---|
| A link (a directory junction or a symbolic link) that points outside the case, to a target that does not exist, or round a loop | path: a link (a directory junction or a symbolic link) that points outside the case; a case travels as the files it holds, never what a link points to - copy the files into the case. |
| An empty file | path: the file is empty, and the cloud stores no empty files. |
| A path with a blank | path: a case file path must not contain a space or other whitespace (OpenFOAM strips whitespace from paths). |
| Two paths that differ by letter case alone | path: differs from … by case alone - one file on a Windows or macOS node. |
| A decomposed-only case | processor*/: the case is decomposed only; a reconstructed case is required. |
WitSweep walks the case folder by the pool's own rule, the one every
client of the pool applies to the folder it opens: a link whose target lies inside the case
is the file or folder it points to, under its own path (OpenFOAM's tutorials keep a region's
fvSchemes as ../fvSchemes), and a link that points outside is refused, never entered.
The pool never sees a link. Only the files' bytes travel, and the pool machine checks the
size and SHA-256 of every file against what WitSweep read before the file lands in the case.
A libs entry naming a library the pool's OpenFOAM does not have, and a solver or utility
it does not have, are checked only on the pool machine: such a variant fails there.
What travels to the pool. The case's inputs. These stay home, and the Case stage lists
them under Stays home with the reason: logs (log.*), later time folders,
postProcessing/, processor* folders, dynamicCode/, scripts (Allrun*, Allclean*,
*.sh at the root), reader stubs, backups and version-control files, documents (README*,
.md, .pdf, images, .html). A 0.orig/ travels as 0/ when there is no 0/, and a
0.org/ when there is neither.
A file that changed is refused at Run. Every file that travels is hashed when the case, or the case set, opens, and a file changed or removed since then is refused when you press Run: case: path changed since the case was read - open the case again before you Run, so that the sweep runs the file as it is now. or case: path is gone since the case was read - open the case again before you Run. A file you picked values in is held against the text the picks were made in as well, so an edit never runs beside picks baked from the old text. A file that changes while it uploads is refused the same way.
What can be varied
| Where | Values |
|---|---|
0/ (or 0.orig/) fields |
internalField, and per patch value, inletValue, uniformValue, uniformInletValue, refValue, refGradient, gradient, freestreamValue, p0, massFlowRate, volumetricFlowRate, flowRate, meanValue, intensity, mixingLength. Non-uniform lists, tables and expressions are not offered. |
setFieldsDict |
default and region values, selection geometry |
transportProperties, thermophysicalProperties |
numeric properties (not thermoType) |
turbulenceProperties / momentumTransport |
the simulation type and the RAS/LES model as a choice, and model coefficients (under a *Coeffs dictionary) |
fvOptions / fvConstraints |
numeric values |
MRFProperties / SRFProperties |
numeric values (not origin or axis) |
blockMeshDict |
block cell counts and grading |
snappyHexMeshDict |
castellated-mesh and layer controls (not locations) |
controlDict |
endTime, deltaT, writeInterval, maxCo, maxAlphaCo, maxDeltaT; a forceCoeffs object's magUInf, lRef, Aref, rhoInf and a forces object's rhoInf, when the object is a block of functions (or of a file it #includes), not one an #includeFunc pulls in |
fvSolution |
solver settings, SIMPLE / PIMPLE / PISO / potentialFlow controls, relaxation |
fvSchemes |
ddt schemes and div interpolations as a choice, and their numeric arguments |
A value OpenFOAM computes at run time (#eval, #calc, ${{ }}) is shown but not
offered: OpenFOAM computes it at run time (#eval, #calc or ${{ }}); sweep the values it is
computed from.
A reference speed can follow a swept speed. When the sweep varies U and a force
object normalises by a magUInf the sweep leaves alone, the Scenario stage warns that the
coefficients are right at that speed only. When magUInf equals the swept speed's base
value and the speed is the only non-zero component of U, the warning offers Pair magUInf
with pN, and magUInf then takes pN's value in every variant (✓ magUInf follows pN in
every variant). Picking magUInf (or lRef, Aref, rhoInf) yourself works too: a
response measured from the case's own object follows the value, and its card says magUInf
follows p2 in every variant.
Responses
| Kind | You choose | Needs |
|---|---|---|
| force coefficients | a patch, the centre of rotation, the reference speed, length and area, the lift and drag directions, the pitch axis, and the density rhoInf |
all of them; filled from the case's own force function object when it has one. Otherwise the centre starts at 0 0 0, lift 0 0 1, drag 1 0 0, pitch 0 1 0, and the density at 1 for a solver with a kinematic pressure |
| forces | a patch, the centre of rotation, and the density for an incompressible solver | all of them, filled the same way |
| patch statistic | a patch, a field, areaAverage / areaIntegrate / min / max |
exactly one patch |
| volume statistic | a field, volAverage / volIntegrate / min / max |
at least one field |
| field min/max | a field | at least one field |
| probe | a field and a point x y z |
three numbers |
- The case's own
forceCoeffsandforcesobjects become responses when it opens: blocks offunctions, blocks of a file it#includes, and#includeFuncdictionaries of the case's ownsystem/. Each must carry what OpenFOAM needs to start it: a centre (CofR,originor acoordinateSystem); for coefficientsmagUInf,lRef,ArefandrhoInf, andliftDiranddragDirbeside aCofR; for forcesrhoInfwhenrho rhoInf. An object that lacks one is not offered. Report forces instead turns coefficients into forces on the same patches and keeps the density and the centre as the case wrote them:rho,rhoInf, and aCofR, anoriginor the wholecoordinateSystem. - OpenFOAM stops the solve on a force function object without these values, so the pool refuses such a request before anything runs: Response '…': ForceCoeffs needs rhoInf - OpenFOAM does not start the function object without them.
- Every response is measured during the solve. The pool adds one line,
#includeFunc <response>, to its copy ofsystem/controlDict. Your files are not changed. The Recipe card shows that line before the solve, and the response's card says · measured during the solve. A case's own object that writes at every step is read from the case's own output. - The add form offers the patches of
polyMesh/boundaryorblockMeshDictand the fields of the initial folder, leaving off the fields the turbulence model never reads: … are not offered: … does not read them, and a response on a field the solver does not read comes back empty. For a case meshed at run time it adds a selector ("<surface>.*") perrefinementSurfacesentry ofsnappyHexMeshDictand everypatchInfogroup, and says that the patches listed are the background mesh's. - Columns are named
<response>.<column>, the column as the function object's header names it. A vector or tensor value is a column per component: a patch statistic ofUispatchValue1.areaAverage(U)_x,_y,_z, a symmetric tensor's components are_xx,_xy,_xz,_yy,_yz,_zz. A probe column is<response>.<field>@probe<N>(x y z), N counting from 0, with_x,_y,_zfor a vector. The pool's own field min/max measures magnitudes (fieldMinMax1.max(U)). A probe outside the mesh, or a function object that stopped writing before the run ended, is an empty cell whose note says why (below). - Always shown for every variant, after its responses:
cells,checkMesh,iterations(N · endTimefor a steady variant that ran toendTimewithoutresidualControlstopping it,N time stepsfor a transient case), aresidual <field>column per solved field with its final residual (residual Ux,residual p, …),warnings(the run's warning count),mesh(the time of the steps before the solve), andwall, the run's wall time, or the failed step with its exit code (✗ <step> · exit N). The CSV, XLSX and HTML exports carry them too, the times asmesh_secondsandwall_secondsin the CSV and XLSX. The Scenario stage's line names the same: always: cells · checkMesh · iterations ("endTime" when not converged) · final residuals · warnings · mesh time · wall time · exit code of a failed step. - A case set gets the responses that every case of the set shares.
- An edited response (another
Aref, probe point or patch) is a new study, so its column never mixes two definitions.
The pool's advice before the run. When a sweep would run without doing what was meant, the Scenario stage says so in the pool's own sentences, and follows the ranks and the recipe as they are edited:
- The task asks for N ranks, and no step of the recipe runs in parallel: every step runs serially on one rank, and the other N-1 do nothing. Mark the solve (and the steps that may) parallel, or ask for one thread.
- 0/T: internalField carries {{oc1}}, which the study sweeps, and the recipe's setFields step overwrites it everywhere (system/setFieldsDict defaultFieldValues names T): the swept value has no effect. (or … inside the regions of system/setFieldsDict: the swept value holds outside them only.)
Notes from the pool
The pool's notes reach the table as a CalculiX deck's do (section 3): a
note marks its cell, ⓘ for information, ⚠ for a warning, ✗ for an error, and is read in full
on hover, in the Results detail pane, on the Run stage tile and in the exports (notes):
| Note | When |
|---|---|
| ⓘ Response '…': … follows the case's … (…), which the study sweeps - … in this variant. | A reference value of a re-measured force follows the sweep |
| ⓘ The task asks for N ranks, and no step of the recipe runs in parallel: … | Ranks asked for, while no step of the recipe runs in parallel |
| ⚠ …: internalField carries …, which the study sweeps, and the recipe's setFields step overwrites it everywhere (…): the swept value has no effect., or … inside the regions of system/setFieldsDict: the swept value holds outside them only. | A setFields step over a swept field |
| ⓘ Not run: '…'. The solver measured '…' at every step (the controller's includeFunc), so its last row is the final time's; … | A post step the recipe names for a response |
| ⚠ …: the last row of … is at time …, the run ended at … - not reported. | A function object that stopped writing before the run ended, on each of its columns |
| ⚠ …: probe N (x y z) of … is outside the mesh - not reported. | A probe outside the mesh, on each of its columns |
| ⚠ …: … is -1e+300, a probe outside the mesh - not reported. | The value OpenFOAM writes for a point outside the mesh, in a file that is not a probes file |
| ✗ responses could not be read: … | The node could not read the responses |
A variant whose responses the node could not read is ✗ results unreadable, never a success; its detail line reads #N · every step exited 0, but the node could not read its responses.
Ranks and returned files
- Ranks: 1, 2, 4 or 8 per variant. The default is 4 when the recipe has a parallel
step, 1 otherwise. A machine without MPI runs the parallel steps serially. When a variant
does run in parallel, the pool writes its own decomposition, and a
decomposeParDictthe case carries is not used. - What comes back of each variant: Responses only (the default), Final time + mesh or All written times, plus logs (on by default) and postProcessing (off by default). A pool machine keeps nothing: what is not returned is gone when the variant ends.
6. Running a sweep and looking at results
While a sweep runs
- The Run stage follows the server's plan. The tiles and chunk i of N show the chunk schedule the Sweep controller planned for this run, which opens as wide as the machines that can take the job. A job waiting for machines says so: N / M variants done · waiting for resources, the window title ends · waiting, and its Home card reads Waiting. Tiles number the variants of an extended sweep by their place in the whole sweep.
- A lost connection is retried. A failed poll is tried again after 2 to 30 seconds, and every second failure rebuilds the connection. After ten minutes without an answer the stage stops watching and says so: ✗ the server did not answer for … (N tries) — this window stopped watching; the job keeps running on the server, reopen the sweep from Home to watch it again.
- What was harvested stays. The rows a sweep has harvested never shrink while it runs. A job the engine failed by name keeps its harvested rows and shows the engine's message.
- Leaving a live sweep asks first. A Run, a scheduled Run or a Re-run while a sweep is live asks Are you sure you want to leave the running sweep of …? It keeps running on the server; Home reopens it.
- Accounts. Signing out, or switching accounts, detaches the live sweep: ✗ … — this window stopped watching the sweep; it keeps running on the server, sign in and reopen it from Home to watch it again. Home lists the sweeps of the account that is signed in.
- An offline start keeps the saved sign-in and tries again in the background, and the sweep in flight reattaches once the identity server answers.
- Downloads go straight to file. A download that fails says why: the server no longer
holds this variant's artifacts — they were released after the run, the server refused
the download — sign in again, or the download failed — …; the server may be unreachable,
try again. A variant's files land in
<deck name>-<sweep>/vNN(eight characters of the sweep's identity), the same name on every system. The folder is emptied before a case is unpacked into it. A returned case.zipis unpacked within the limits of section 1.
The Results stage
The Results stage shows one row per variant, sortable (numbers as numbers, text as text), and a scatter of a response against a parameter. A case sweep can also plot against the mesh's cell count, and a set, or a sweep of choices, against the variant number. A full-factorial sweep is drawn as small multiples, one panel per value of the first parameter that is not on the X axis. Export… offers Export CSV, Export XLSX, HTML report, the download of the deck and result files (or of the case), and the cloud render.
Open #N in…
| Target | For | Platforms |
|---|---|---|
| PrePoMax | CalculiX and Nastran variants (the .frd) |
Windows |
| ParaView | CalculiX and Nastran variants (the .frd), OpenFOAM variants (the returned case) |
Windows, Linux, macOS |
| Inventor Nastran | Nastran variants of a sweep started from Inventor | Windows, +Nastran |
A target that cannot open the variant stays in the menu, greyed, with its cause, for example not detected — locate it in Settings → General, not found at its path — locate it in Settings → General, the variant did not solve or the variant has no .frd on the server. A row whose application is not detected opens Settings to locate it.
OpenFOAM variants in ParaView. WitSweep downloads the variant's returned case, unpacks
it and opens its case.foam. With the OmnibusCloud ParaView plugin installed, it goes
through the plugin. Without it, ParaView opens the case.foam and you press Apply
(opened case.foam · press Apply in ParaView to show it). To see fields, choose *Final time
- mesh* or All written times before you run. With the default Responses only the case comes back without its mesh and fields, and the ParaView row says so instead of opening it: the case came back without its mesh and fields — choose Final time + mesh before you run, or the variant returned no case zip — its artifacts were responses only. In an extended sweep each variant follows the artifacts of the job that ran it.
Open all N in ParaView
The last row of the Open menu, Open all N in ParaView, opens every solved variant side
by side. N counts the variants that have something to open: an .frd (CalculiX and
Nastran) or a case returned with its mesh and fields (OpenFOAM). A CalculiX variant whose
.frd could not be downloaded is fetched by the plugin from the cloud. An OpenFOAM case
that could not be downloaded is left out, and the result line says how many were.
| Sweep | Open all N in ParaView |
|---|---|
| CalculiX deck, deck set | Yes |
| Nastran deck | Yes (the CalculiX results) |
| OpenFOAM case, case set | Yes, for variants that returned their case with mesh and fields |
It needs ParaView located in Settings and the OmnibusCloud ParaView plugin installed for that ParaView. On Linux and macOS the plugin must be 1.2.7 or newer. Without it the row is greyed with its cause: the OmnibusCloud ParaView plugin is not installed for this ParaView — it is what reads the hand-offs, or the OmnibusCloud ParaView plugin … does not read hand-offs on Linux and macOS — update it to 1.2.7 or newer. WitSweep writes one hand-off per variant, and the plugin opens them. A ParaView that is not running is started. A running ParaView that does not take the files within 5 seconds is reported, not claimed: ✗ ParaView is running but did not pick up the hand-off within 5 s — is the OmnibusCloud plugin loaded in it? the N file(s) wait in ….
Render on OmnibusCloud
Export… → Render #N on OmnibusCloud (with a variant selected) renders its .frd on the
pool: a still image (the last time step), an orbit, rise, spiral, approach or rock video,
or a time-series video of every time step. It is offered for solved CalculiX and Nastran
variants. An OpenFOAM variant is not rendered from WitSweep: open it in ParaView and render
it from the plugin.
Extending and re-running
- Extend sweep… reopens the sweep's deck or case with its picks, so you can add values, probes or responses. Rows already computed are not computed again. When nothing is new, Run says ✗ nothing new to compute — all N variant(s) of this sweep are already computed. When the deck changed since the sweep was submitted, the restore line says · ‼ the deck changed since this sweep was submitted (· ‼ the case changed … for a case), and Run computes a new study.
- A deck set or a case set is not extended in place: ✗ a deck set is not extended in place — open the old and new decks together as a new set; a changed set is a new study, every deck computes again (and the same for a case set).
- Re-run N failed submits the failed variants alone. On a deck set or a case set it reopens the set first. When the deck changed since the sweep was submitted, it refuses: ✗ the deck changed since this sweep was submitted — re-run needs the original deck (the decks, or the cases, for a set).
- A sweep without a local copy (after Clear in Settings → Storage & logs, on another machine, or when the local store could not be opened) opens from the server: its Home card says not on this machine — opens from the server, and its table and files come back, its deck and picks do not. Such a sweep cannot be extended: ✗ this sweep was rebuilt from the server: its table and files are here, its deck and picks are not — open the deck and pick again to extend it. The local store keeps the newest 200 response tables.
7. Licenses, limits and updates
| Demo | Licensed | |
|---|---|---|
| Term | 30 days, granted on the first start, no key | As on the license, with 14 days of grace after it ends |
| Variants per sweep | 8 | As on the license (unlimited unless it sets a cap) |
| Machines | Your whole pool | Your whole pool |
| Nastran (+Nastran) | Included | Module |
| OpenFOAM (+OpenFOAM) | Included | Module |
- Running needs a sign-in (browser or API key): sign in to Run.
- A sweep over the cap is not cut down: Run is blocked and says demo cap 8 — Run blocked (licence cap N — Run blocked on a license). The cap counts the whole sweep a Run would leave, the rows computed earlier included: demo cap 8 — Run blocked (the sweep would hold N variants).
- An expired license or demo blocks only new computation (Run, Extend sweep…, Re-run N failed, Render on OmnibusCloud): licence restricted — starting new computation is paused. Finished sweeps stay open, with their tables, charts, exports and files, and Nastran decks and OpenFOAM cases still open.
- Without a module its inputs are not offered: no file patterns, no Open an OpenFOAM case… link. Opening such a file anyway names the missing module.
Updates. Settings · General opens on an Updates card: the version installed and the one the OmnibusCloud portal has. WitSweep checks 20 seconds after it starts and then every 24 hours, and Home names a newer build when there is one (· X is available).
| Installed from | Update now |
|---|---|
The Windows installer (.msi) |
Downloads the new installer, closes WitSweep, upgrades it in place and starts it again |
The macOS disk image (.dmg) |
Replaces the app bundle with the one in the new disk image |
The Linux package (.deb) |
Upgrades it with dpkg behind the system's password prompt |
The Linux archive (.zip), or a copy no installer owns |
Offers the download; nothing is replaced |
A package is installed only when its size, its checksum and its signature match what the portal lists. Otherwise nothing is installed and the card says why, for example the download failed its signature check — nothing was installed. The updater checks the signature once more, on its own copy of the package, right before it installs. A package that fails is refused (the package failed its signature check — nothing was installed) and the old build starts again. The feed must be https: the update feed names an http address — only https is trusted; nothing was downloaded. A release published without signatures is offered as a download only: This build is not signed for in-app updates: it comes as a download.
8. Limitations
- Values inside included files cannot be varied, in CalculiX (
*INCLUDE) and in Nastran (INCLUDE) decks alike. The deck itself runs with its includes. - One parameter drives one value. To move several values together, give them paired CSV rows.
- Probes are built on node sets only (not element sets or points) and are not available for deck sets.
- CalculiX results carry no warning count. What the pool says about a variant is in its notes.
- Heat flux and reaction flux are not read from CalculiX results.
- Nastran beam sections cannot be swept: a
PBARvalue is listed with the converter's reason, andPBEAMandPBEAMLvalues are not listed. - No Nastran sweep gets reaction-force sums (section 4, Results).
- Some shell and beam models get no von Mises columns. The pool recovers them from section forces, but not for every model: S3 and S4R shells, composite shells, beams on shell nodes or meeting at an angle, more than 20,000 shell edges and others (section 3).
- A Nastran deck with
INCLUDEs has its values checked one pick at a time, not when it opens, and the check at open takes minutes on a big deck (section 4). - An OpenFOAM library, solver or utility the pool does not have is found on the pool machine, not when the case opens (section 5).