Fix parsing of string-based dimensions in OpenFOAM files (closes #332) #435
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.
Adds support for parsing string-based dimension units like
[ Pa ]in OpenFOAM files, fixing the parsing exception that occurred when loading files containingfvExpressionFieldfunctionObjects.Problem
The parser previously only supported numeric dimension sets like
[1 -1 -2 0 0 0 0]but failed when encountering string-based units:This prevented parsing of OpenFOAM controlDict files containing fvExpressionField functions:
functions { test { type exprField; libs (fieldFunctionObjects); field pTotal; expression "p + 0.5*(rho*magSqr(U))"; dimensions [ Pa ]; // This line caused the parsing to fail } }Solution
Extended the
_DIMENSIONSparser to handle both numeric and string-based dimensions:[1 -1 -2 0 0 0 0]→ ReturnsDimensionSet(unchanged)[ Pa ]→ Returns"Pa"as requested by the user[Pa mm^2 s^-2]→ Returns"Pa mm^2 s^-2"Added a new
StringDimensionSetclass to properly handle string-based dimensions inDimensionedobjects while maintaining backward compatibility.Changes
_DIMENSIONSto accept both numeric and string-based unitsStringDimensionSetclass and updatedDimensionedconstructorStringDimensionSetavailable in theFoamFilenamespaceExamples
The fix maintains full backward compatibility while enabling foamlib to handle the broader range of OpenFOAM files that use string-based dimension specifications.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.