OutWit.Controller.CalculiX
1.0.3
dotnet add package OutWit.Controller.CalculiX --version 1.0.3
NuGet\Install-Package OutWit.Controller.CalculiX -Version 1.0.3
<PackageReference Include="OutWit.Controller.CalculiX" Version="1.0.3" />
<PackageVersion Include="OutWit.Controller.CalculiX" Version="1.0.3" />
<PackageReference Include="OutWit.Controller.CalculiX" />
paket add OutWit.Controller.CalculiX --version 1.0.3
#r "nuget: OutWit.Controller.CalculiX, 1.0.3"
#:package OutWit.Controller.CalculiX@1.0.3
#addin nuget:?package=OutWit.Controller.CalculiX&version=1.0.3
#tool nuget:?package=OutWit.Controller.CalculiX&version=1.0.3
OutWit.Controller.CalculiX
Runs complete CalculiX (ccx) decks on WitCloud
compute nodes. One solve = one whole deck on one node — no decomposition, no
model conversion; deck support is whatever the pinned ccx solves. The win is
throughput across many independent solves, which is exactly what the
companion OutWit.Controller.Sweep orchestrates into parameter studies.
Activity
| Activity | Side | Purpose |
|---|---|---|
Ccx.Solve(CcxTask) → CcxResult |
node | Download the variant deck, run the bundled ccx (<ccx> <jobname> in a scratch directory, OMP_NUM_THREADS from the task), upload .frd/.dat as blobs, extract the requested responses on the node, return artifact ids + exit code + measured solve time + the response row. A nonzero solver exit is data in the result, not a task failure. |
The task rides as one envelope (CcxTaskData): deck blob id, explicit
node/element counts (work estimation never opens the blob), thread policy and
the extraction request. Results return in completion order — consumers map by
VariantIndex, never positionally.
Bundled solver
The module carries pinned ccx 2.22 builds for win-x64, linux-x64 and
osx-arm64 as controller data assets, produced and mirrored by
OmnibusCloud/CalculiX. Nodes need
no preinstalled software - the macOS kit carries the GCC runtime
(libgfortran/libgomp/libquadmath/libgcc_s) beside ccx, referenced through
@loader_path; ccx-v2.22-1 had linked them by absolute Homebrew paths and
every variant on the first Apple Silicon node died with "dyld: Library not
loaded" (exit 134) - ccx-v2.22-3, controller 0.1.8. The Windows kit is built
on MSYS2 winpthreads 13.0.0.r488: the 14.x runtime turns every uncontended
mutex into a kernel wait, and libgfortran takes one per Fortran I/O statement,
so ccx-v2.22-3 ran the reference cube 1.8x slower than upstream's own Windows
build and Windows workers were rated below Linux ones by the same factor -
ccx-v2.22-4, controller 1.0.1, results byte-identical. CalculiX is GPL-2.0:
the asset kit ships the license text and the written source offer, and the
corresponding source is publicly mirrored in that repository's releases.
Node benchmark: Ccx.Solve is ranked by the reference deck (a 20³-node static
cube embedded in the module) in unit ccx-static@ref20-v2. The first solve is
an untimed warm-up - it is the first start of the freshly installed kit, and
its cold page cache and antivirus scan once rated a Ryzen 9 5950X at 1.36 s
against the 0.75 s it takes from then on; the rate is 1 / the median of three
to five timed solves (1.5 s target), so one stall does not move it and a busy
machine is still rated as busy. ref20-v1 (controller 1.0.1 and earlier)
timed one cold solve. The Custom bag carries the run times (runs_s,
median_s, warmup_s) and the solved maximum displacement (checksum).
ccx is started without a console window (CreateNoWindow). The worker client
is a windowed application with no console of its own, so before controller
1.0.3 every ccx.exe it launched got a fresh console, which cost about 0.45 s
per start on Windows 11: the reference cube took 1.13-1.23 s from the client
against 0.69-0.76 s with the flag, and every sweep variant on a Windows node
paid it.
Determinism note: ccx with OpenMP is not bitwise-reproducible across thread counts, and the three platform builds add last-digit variation — results are stable to engineering tolerance, and the controller's tests assert tolerance, not bits.
Dependencies
Variables (module dependency). The shared data types live in
OutWit.Controller.CalculiX.Model, consumed by this controller, by the Sweep
orchestration controller, and by client applications reading sweep manifests.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- OutWit.Controller.CalculiX.Model (>= 1.0.0)
- OutWit.Engine.Assets.MSBuild (>= 1.0.1)
- OutWit.Engine.Data (>= 1.1.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.