Migrating to 0.28.0¶
This release adds capabilities a user reaches from the matrix, the command line and the input files, and refuses a few inputs that were accepted without doing what they said. Recorded run manifests are read without rewriting them. What changes for you is listed below, one section per change.
1. An unsteady row refuses COLD_START (G36)¶
COLD_STARTis a key of a steady sweep over the attitude: it clears the solution before each point, which otherwise starts from the previous point's converged one. Every point of an unsteady or rotor row is its own job and starts from no solution, so the key changed nothing there, and the plan now refuses an unsteady row that states it,trueorfalse, naming the key. RemoveCOLD_STARTfrom such a row. A steady row is unchanged.
2. A warning when a plot group takes the rotor table's name (G42)¶
- A pproc plot group named like the automatic
ROTOR_<ALIAS>group (for exampleROTOR_{family}in the rotor's own frame) now draws a warning at plan and before a run: that rotor's table will not be written, because the run keeps your group and the table reads the automatic one in the global frame. Nothing else changes. To keep both, rename the group,SHAFT_{family}for instance.
3. --force-rerun of one point of a steady job redoes the whole job (G37)¶
- A steady row runs as one warm job. Naming one of its points to
--force-rerun(by point name or run_id) now runs every point of the job again as one job, and a warning lists them; before, it ran the named point alone, cold, and the other points lost their record. Naming the job itself (<campaign>/sim_<id>/sweep) is unchanged. A point added to the row after the job ran and recorded on its own (--resume) runs again inside the job, and its old record is archived with the job's.
4. --force-rerun-all and --sims (G44)¶
- New:
pyfs-matrix run <matrix> --force-rerun-allredoes every recorded point, and--sims 2031 2032narrows it to those simulations. A script that built a list of--force-rerunflags fromruns.jsoncan use this instead. Nothing that existed changes.
5. A run that submits does not post, and a local run's log (G43)¶
pyfs-matrix runthat submits any point to a cluster no longer writes products or the sweep table, also when another point of the same run failed; it ends with a line naming what was submitted and the next command,pyfs-matrix collect --workspace <root>, which collects and then posts. A script that readpost/right after a submitting run reads it aftercollectinstead.- A local run prints a banner, numbers its points (a steady job its range of
points) and ends with a table that counts points, not jobs; an
unsteady point with a step counter prints its progress every 10 steps.
--progress-every Nchanges the cadence and--progress-every 0turns it off. The lines go to stderr, as every progress line always has; stdout and the records are unchanged.
6. An actuator disc from the advance ratio (G20)¶
- A disc row may state
ADVANCE_RATIOinstead ofACTUATOR_RPM; the speed is derived with the disc's own diameter. A row that statesACTUATOR_RPMis unchanged. The refusal of a disc row stating neither now names both keys. - A steady row that sweeps
ADVANCE_RATIOfor its disc runs one job per point, not one warm job, because each point sets its own disc speed.
7. A template of every input file (G47)¶
- New:
inputs/input_template.md, written bypyfs-workspace init,pyfs-matrix planandpyfs-matrix postat the root ofinputs/, beside the folders whose files it shows. One section per kind of input file you write (the matrix, the setup, the pproc, the reference, the named points, the geometry sidecars, the trailing-edge points file, the provenance record, the actuator profile and the probe survey ofprofiles/, the free stream, the HPC profile and the build registry), each with a complete example to copy to the path its title names.inputs/pproc/INPUTS.mdstays where it is, and the template links it. A workspace made before this release gains the page at its nextplanorpost; nothing else in it changes, and a file of your own under that name would be rewritten, asINPUTS.mdis. - Three files the page's examples showed were not read as documented now are:
a reference whose
[rotor]stateshub_radius_mwas refused as an actuator disc with no kind; a pproc stating the top-levelvtk_variableswas refused as an old-shape groups file; and a steady row whose pproc draws a probe rectangle or circle failed to plan, itsNEW_PROBE_POINTlines missing theVOLUMEtype. All three are read, and plan, as written.
8. The custom free stream: the UNSTRUCTURED form, and a warning (G18)¶
- A
FREESTREAMnaming a.dat(the UNSTRUCTURED form) now has a measured run behind it (RPT-077); nothing a row writes changes. - New: the plan warns when the field's grid does not reach the whole body, naming both extents. Beyond its grid the solver does not extend the field. A run is not refused; widen the grid if the whole body should see the field.
- A row whose field carries an incidence reads its body forces Cx, Cy and Cz: its CL and CDi are printed in the axes of the zero angle the row states.
9. An OBJ's surface names are read from its groups (G30)¶
- An
.obja row names no longer needs itsboundarieswritten by hand. When it has no<stem>.boundaries.toml,pyfs-matrix plan(andrun) writes one beside it holding the list, one name peroorggroup that holds a face, in the order of the file, and says so on stderr. Add the[import]units and[trailing_edges]beneath the list, as before; the plan that wrote it blocks the row on the missing unit until you do.pyfs-matrix inventory <file>.objwrites the same file. - A sidecar you already have is kept as it is and never rewritten, and
pyfs-matrix inventoryrefuses an.obj's existing sidecar,--overwriteor not. If itsboundariesdiffer from the file's groups, in a name or in the order, the run still cites your list, and the plan now warns naming both lists: check which one is right before the next run. - An
.objthat mixesoandg, opens one group name twice, writes a face before its first group, or has a group statement naming no group or several words, and has no sidecar, is refused at plan naming the line; write itsboundariesby hand, as before. An.stlis unchanged.
10. The solver's plots on an unsteady row (G26)¶
- An unsteady row now saves
<point>_plot_residuals.txtand<point>_plot_loads.txtby default, once, at the end of the march. A script that counted the files of an unsteady point finds two more;plot_residuals = falseandplot_loads = falseunder[exports]turn them off.plot_residuals = trueon an unsteady row, refused before, is accepted.plot_sections_cp = trueon an unsteady row is still refused.
11. The boundary-layer profile is refused on 26.124 (G24)¶
- A row writing
EXPORT_BL_VELOCITY_PROFILEraw on 26.124 is refused at plan: the command holds an unattended script (RPT-075). Nothing else changes; the VTK surface export carries the boundary-layer thicknesses.
12. Steady probes in a frame are placed where the frame stands¶
- A steady row whose pproc declares probe lines, rectangles or circles in a frame other than the reference (MRP, or a frame the reference declares) now samples them where that frame stands: the points are carried into the reference frame by the frame's origin and axes. Before, they were emitted at the frame's own coordinates, which is right only for a frame at the reference origin. A steady run of such a row samples different points than before; the probe table names the same declared positions. Unsteady rows are unchanged.
- The custom free stream's coverage warning (G18) now says, for a row that moves the body (ROTATE, TRANSLATE, rotor MOTIONS or an import operation), that the coverage was not checked, instead of comparing the body where its file holds it.
13. The Tecplot surface is written from the VTK (G45)¶
- The script no longer asks the solver for the Tecplot: it exports the surface
as VTK and the package writes
<point>.datfrom it, at the same name and in the same folder, per step too. A script or a Tecplot layout that reads the.datfinds it where it was, and reads a different file: - The values are per cell, not per node. The zone is still one FEPolygon
zone of the same nodes and polygons, and every variable but
X,Y,Zis now cell-centred, the value the solver computed on each panel. A layout that contoured nodal values contours cell values; a script that indexed a variable by node must index it by polygon. - The names are the VTK's.
Cpis nowCp_reference, beside a newCp_freestream;CFisskin_friction_coeff.;Mach NumberisMach_Number;BL Thickness,BL streamline length,Transition markerandSeparation markertake underscores. Seven variables are new, among themNormalized_VorticityandBoundary_Index. Singularity_strengthis gone: the VTK does not carry it, so no translation can.- A row under mirror or periodic symmetry now carries the images. The file holds the modelled surface first, node for node as the solver's Tecplot held it, followed by its mirror image or by the copies of the blade for the other blades. A script that summed over every panel of a half model and doubled the result must stop doubling, or keep only the first block.
- The nodes and the velocity components are in the reference frame, as the solver's Tecplot was.
<point>.vtknow sits beside every<point>.datand is listed among the point's outputs, since the.datis written from it and names it.[exports] vtk = truegives that same file, not a second export.- A row whose loads frame the script does not place, or whose pproc's
vtk_variablesnames one or two ofVX,VY,VZwhile its loads frame moves, is refused at plan, naming the frame; name all three components or none. A continuation of a run recorded before 0.28.0 is refused at plan, before anything is archived, unless its pproc setstecplot = false, since that run recorded no placement of its loads frame; set it and run again, and the same stopped run is continued. - A
.data run wrote before 0.28.0 is the solver's own and stays so.
14. [time_averaging] now works (G25)¶
- A pproc carrying
[time_averaging]was refused at plan on every build, because the solver's own averaging command hangs 26.124. It now plans and runs: the row exports its surface at every time step of the window, andpyfs-matrix postwritespost/<matrix>/surfaces/<point>_time_average.dat(and a.vtkbeside it with[exports] vtk = true), the average of those steps, cell by cell, in the reference frame. Remove nothing to use it; keeptecploton under[exports], the default. - The per-step exports are the ones
EXPORT_UNSTEADY_AFTER_ITER: <first step of the window>would give, so a row stating no threshold now leaves one VTK, one Tecplot, one loads table and the sections of every step of its window in its datapoint folder, and their series tables underseries/. A row whose own threshold starts after the window is refused, naming both steps; lower the threshold to the window's first step. - The build must carry the unsteady solver action (26.122 on). A steady row and an additional pproc still refuse the table.
- A run recorded before 0.28.0 is read as it was.
15. The FSI's blade properties from its sections and a material (G41)¶
- Additive; nothing you do changes. New:
pyflightstream.fsi.sections.blade_properties_from_sectionsgenerates the blade's distributions (mass, mass moments, EI, GJ, elastic-axis offsets) from one solid section contour per station and a material ofpyflightstream.fsi.materials, and records where they came from in the new optionalBladeProperties.provenance. Aconfig.jsonyou typed has no provenance and is written, read and hashed exactly as before: itsconfig_sha256does not move, so astate.jsonof an existing run still matches it. A generated configuration carries the provenance, and a release before 0.28.0 refuses to read that field. The worked example isexamples/fsi_solid_blade_properties.py.