nflow_codegenerate(model)
nflow_codegenerate(model, destination)
nflow_codegenerate(model, destination, includeMain)
nflow_codegenerate(model, destination, includeMain, lang)
r = nflow_codegenerate(model, destination, includeMain, lang, options)
| Paramètre | Description |
|---|---|
| model | une chaine : chemin du fichier .nflow. |
| destination | une chaine : repertoire de destination (un sous-repertoire au nom du modele est cree). Defaut : le repertoire du modele. |
| includeMain | un logique : emet aussi un main executable (ecriture CSV) et l'echafaudage de build (CMakeLists.txt pour C, Cargo.toml pour Rust). Defaut : true. |
| lang | une chaine : 'C' (defaut) ou 'rust'. |
| options | une struct scalaire : champs 'build' (logique, compile le code genere via CMake / cargo), 'buildConfig' ('Release' par defaut), 'failOnWarning' (logique, transforme les warnings codegen en erreurs). |
| Paramètre | Description |
|---|---|
| r | une struct : 'dir' (repertoire genere) et 'warnings' (cell des warnings codegen, p. ex. une retrogradation de solveur). |
nflow_codegenerate abaisse un diagramme nflow en C ou Rust autonome sans dependance runtime : une struct ModelState, nflow_init / nflow_step / nflow_terminate, un champ ModelInput par label source externe et un champ ModelOutput par label sink externe (et par fileSink).
Solveurs. Pas fixe ode1 (Euler avant par bloc) et ode4 (un Runge–Kutta 4 global sur l'etat continu empaquete), plus l'adaptatif embarque ode45 (Dormand–Prince 5(4)). Sous ode4 / ode45, les surfaces de zero-crossing (integrateur borne, saturation, zone morte, switch, step) sont localisees par bissection exactement comme le simulateur. Les solveurs runtime-only (dae, ...) sont rejetes. Quand un bloc ne peut pas rejoindre le schema RK4, le modele est retrograde en Euler avec un warning solverDowngrade explicite ; ode1 avertit que les croisements ne sont pas localises.
Couverture. Discret, math, logique, lookup (splines incluses), routage, abaissement bus et complexes, quantification des petits entiers/booleens, voies entieres 64 bits exactes, blocs discrets multi-cadence, ilots acausaux (lineaires, Newton embarque et mecanique plane sans joints), et sous-systemes conditionnels (gates enable, trigger, reset, action). Les constructions non supportees sont rejetees avec un message type nommant le bloc fautif, jamais de code silencieusement faux.
Verification. Le code genere est valide localement par le harnais numerique (nflow_codegen_check_numeric) : compiler, executer, et comparer les trajectoires echantillon par echantillon contre __nflow_simulate__.
% model = 'C:/models/lowpass.nflow';
% nflow_codegenerate(model, tempdir(), true, 'C');
% nflow_codegenerate(model, tempdir(), true, 'rust');
% r = nflow_codegenerate(model, tempdir(), true, 'C', struct('build', true));
| Version | Description |
|---|---|
| 1.0.0 | initial version |