postprocessing: property_recorder — buffer graph properties, write CSV / time-series VTK (closes #18) - #48
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements #18. A post-processing material that buffers named graph properties as the analysis runs and writes them out afterwards, so a run's history can be inspected without a live plotting dependency or a hand-rolled loop in every driver.
The branch predates the plasticity split and the UMAT layer;
mainis merged in here. The only collision wastests/CMakeLists.txt(both sides append a test registration) — none of the recorder code touched anything the split moved. 269/269 tests pass, verified locally against the merge result.Shape
It follows the same wiring as the existing live-plot postprocessor —
"material::property"sources, a dummy output so the engine callsupdate()each step, oneadd_inputper source — but accumulates arecord_bufferinstead of pushing to a plot:Rank-2 tensors are flattened to
Dim*Dimcomponent columns<name>_ij. Full storage — symmetric-only reduction is deliberately left as a later option rather than guessed at.Writing is separated from recording:
record_buffer(io/record_buffer.h) holds the data, and anyoutput_writerconsumes it. CSV and time-series VTK are provided; adding a format does not touch the material.Review round already applied
The second commit addresses ten review findings; three are worth calling out because they are the kind that survive a passing test suite:
0,5for0.5, silently producing a CSV that a reader splits into two columns. Formatting is now locale- and flag-independent, pinned byDoubleFormattingIgnoresLocaleAndFlags.Six tests cover the round trip, the rejections, and that the VTK output is well-formed rather than merely non-empty.
Not addressed here
property_recorderis not registered in the factory, so it cannot yet be named from a JSON document. #33 closed for the material and solver classes; this one is deliberately left for a follow-up, since a document-driven recorder wants its output path and format expressed in the deck too, and that is a design question rather than a registration line.