OutWit.Controller.Sweep 2.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package OutWit.Controller.Sweep --version 2.0.1
                    
NuGet\Install-Package OutWit.Controller.Sweep -Version 2.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OutWit.Controller.Sweep" Version="2.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OutWit.Controller.Sweep" Version="2.0.1" />
                    
Directory.Packages.props
<PackageReference Include="OutWit.Controller.Sweep" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OutWit.Controller.Sweep --version 2.0.1
                    
#r "nuget: OutWit.Controller.Sweep, 2.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OutWit.Controller.Sweep@2.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OutWit.Controller.Sweep&version=2.0.1
                    
Install as a Cake Addin
#tool nuget:?package=OutWit.Controller.Sweep&version=2.0.1
                    
Install as a Cake Tool

OutWit.Controller.Sweep

Host-side orchestration of parameter studies for every solver family the host knows: submit a study - the parameters, the variant table and what the variants run on - and the pool computes it chunk by chunk, with everything harvested so far observable while the sweep runs.

Family The study's input Node activity Script
CalculiX a base deck with baked tokens (a template study), or every variant's own deck (a deck set) Ccx.Solve (OutWit.Controller.CalculiX) SweepCalculiX.wit
OpenFOAM one case whose templated files carry the tokens Foam.Run (OutWit.Controller.OpenFOAM) SweepOpenFOAM.wit

The study travels as SweepOptionsData (OutWit.Controller.Sweep.Model): the parameters, the variant table, the chunk bounds and exactly one family block. Everything else - the plan, the chunking, the state, the manifest, the result index - is one implementation for every family; a family is an ISweepFamily inside this controller (how its block is validated, how a chunk becomes its node activity's tasks, how a result becomes a manifest row, which artifacts a row offers).

Activities (all host-side)

Activity Purpose
Sweep.Plan(opts) → SweepPlan Validates the study (one family block, variants present with one value per parameter and unique indices) and its family block (CalculiX: every token in the base deck, or a deck set covering every variant exactly once; OpenFOAM: the case rules of OutWit.Controller.OpenFOAM.Model and every token placed in a templated file, every templated token declared), naming every finding at once; then computes the progressive chunk schedule.
Sweep.InitState(plan) → SweepState The zero cursor.
Sweep.ChunkCount(plan) → Int Loop bound of the bundled scripts.
Sweep.MakeChunk(plan, state) → <family>TaskCollection The next chunk's tasks, of the family's node activity: CalculiX variant decks materialised by plain token substitution (this side never parses a deck), deck-set decks as uploaded; OpenFOAM tasks as metadata only (the case and each variant's values - substitution happens on the node, so the base files travel once per node). Checks that the script's task collection holds the family's tasks and fails loudly otherwise.
Sweep.Harvest(plan, state, wave) → SweepState Appends the chunk's rows - the sweep's verdict (succeeded, failed, refused) and the node's own result, verbatim - to the manifest blob, and returns the advanced cursor with the counts by outcome and the result index (variant, verdict, label from the parameter values - "XMAX=300, T=250" - and the artifacts by kind: .frd, .dat, a case zip).
Sweep.Finish(plan, state) → Blob Returns the final manifest blob.

Why chunks

A sweep chunk is a product checkpoint, not an algorithmic barrier: after every chunk the manifest holds all harvested variants, so a cancelled sweep keeps everything already computed, and a monitoring client sees per-variant states mid-run. Sizing is progressive - the first chunk small enough for fast feedback (a broken scenario burns a handful of variants, not the night), geometric growth to a cap (near-optimal allocator packing for the bulk; the cap bounds both cancellation loss and a failed node's recompute radius). A chunk is also a wave: the grid places its tasks on at most as many machines as the chunk has tasks, so the plan never opens narrower than the fleet - Sweep.Plan asks the engine how many machines can take a task of the job (local nodes and the handles other clouds offer) and raises the first chunk, and the cap with it, to that width. A client's larger first chunk stays as asked.

A variant that fails - a nonzero exit, a diverged solve - or that its node refuses before running (OpenFOAM: run-time code, a step outside the allow-list) is a row in the manifest with its verdict and reasons; it never fails the task, so one bad variant cannot poison its node batch.

Result document

The state variable is rendered for document clients (the ParaView plugin's cloud-open) as sweep.state@2: the counts by outcome, the manifest blob and the result index with each variant's artifacts by kind, so a client knows whether it downloads a CalculiX result file or an OpenFOAM case zip. The schema and the C++ and Python bindings are generated into OutWit.Controller.Sweep.Model/Documents/.

Module shape

Host-only (IWitControllerHost alone): never delivered to compute nodes, which is what makes the declared dependencies on the host-only Grid and on Special honest - dependency validation runs on nodes too, and a module that carried node activities alongside these declarations would be refused there. The families' node modules (CalculiX, OpenFOAM) are dependencies because their task and result types ride through the scripts; node-side work lives entirely in them.

Deploying Sweep 2.x: the host needs both family modules next to it - CalculiX (>= 1.1.0) and OpenFOAM (>= 1.0.0). The host loader refuses a module whose declared dependencies are missing, so a host without the OpenFOAM module refuses the whole Sweep module, and CalculiX sweeps stop with it, even though they never touch OpenFOAM. Install (or upgrade) the OpenFOAM module on the host before, or together with, Sweep 2.x.

Scripts

Scripts/SweepCalculiX.wit and Scripts/SweepOpenFOAM.wit (shipped via OutWit.Controller.Sweep.Scripts): plan → loop chunks { make → Grid.ForEach → harvest } → finish; the two differ only in the declared task and result collections and the node activity.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.1.0 46 9/27/2026
2.0.5 49 9/27/2026
2.0.4 49 9/26/2026
2.0.3 50 9/26/2026
2.0.2 48 9/26/2026
2.0.1 48 9/25/2026
1.0.1 88 9/22/2026
1.0.0 123 9/16/2026
0.2.2 191 8/26/2026
0.2.1 129 8/21/2026
0.2.0 117 8/21/2026
0.1.3 135 8/13/2026
0.1.2 111 8/13/2026
0.1.1 121 8/4/2026