A macOS-compatible Python tool that builds a flyable JSBSim/FlightGear aircraft
from either a user-supplied aerodynamic polar (USER_TABLE) or an automated
OpenFOAM sweep (AUTO_CFD). Control surfaces are analytical; no deflected STL
files are needed.
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[test]'
rc-trainer generate examples/user_table.yamlOutputs are written below output/: a dense polar, propulsion speed sweep,
plots, engineering report, JSBSim XML, and a FlightGear aircraft directory with
a macOS launcher.
To inspect configuration without generating files:
rc-trainer validate examples/user_table.yamlUSER_TABLE requires no Docker. AUTO_CFD uses
opencfd/openfoam-default, probes its OpenFOAM environment, creates a reusable
case, runs the AoA sweep by changing freestream direction (not geometry), and
accepts only converged points unless configured otherwise.
With STL geometry in place, run the complete workflow with:
rc-trainer generate examples/auto_cfd.yaml --output output/my-cfd-aircraft --run-cfdUse --resume-cfd to reuse completed AoA rows in an existing
cfd/aoa_results.csv; new rows are written as each AoA finishes. Incomplete
or failed AoA points are rerun. Set cfd.include_questionable: true to use
non-converged points while retaining their status in the CSV.
The supplied example uses eight MPI processes and a locally refined nominal
mesh of approximately 185k cells. Each point writes
an individual output/cfd/log.alpha_*.txt log and the mesh writes
output/cfd/case/log.mesh.txt plus mesh_stats.json. Select preview,
coarse, nominal, or fine with cfd.mesh_level.
See docs/CONFIGURATION.md for inputs and physical assumptions.
The complete mode examples are USER_TABLE and AUTO_CFD. The AUTO_CFD example uses the supplied component STL files and derives wing reference quantities automatically.