1665 brought up an interesting discussion between @mgjarrett and I.
setBlockMesh is intended to be used to force/snap the axial mesh of an assembly to some prescribed axial mesh.
The behavior of setBlockMesh is controlled through the parameter conserveMassFlag which either
"auto" -- conserves all of the components below the fuel block(s) as well only the fuel components within fuel blocks.
the intent was to support irradiation-based axial expansion of fuel
but is also odd because why care about what's below the fuel since irradiation-based axial expansion is only relevant for fuel
it feels like this was written for a former modeling paradigm that we've progressed beyond (which isn't a bad thing and won't be the last!)
"True" -- conserves all components
is not used within ARMI or any major downstream applications that I can see
"False" -- conserves nothing
is used in ARMI in a couple spots via default. it probably shouldn't be...
The two use cases that @mgjarrett and I discussed providing coverage for were for axial thermal expansion and irradiation-based expansion.
Axial Thermal Expansion
All solid components should have their masses conserved.
for each assembly, all solid components within each block would be set to the new block height
their number densities would get scaled by old_block_height/new_block_height
Irradiation-Based Axial Expansion
Focus be given to the conservation of mass for the fuel components only.
Only fuel components will have their number densities changed. Results in a change in mass for all non-fuel solid components (e.g., clad and control mass increase if fuel grows)
Proposal
Given the above, I would propose that we refactor setBlockMesh for the above two use cases and control the behavior of which through a new parameter. E.g., something like
...
Parameters
-------------
newMesh
The new mesh to snap the assembly to.
scenarioDriver
Determine if newMesh is driven by thermal expansion or irradiation based expansion
```
1665 brought up an interesting discussion between @mgjarrett and I.
setBlockMesh
is intended to be used to force/snap the axial mesh of an assembly to some prescribed axial mesh.The behavior of
setBlockMesh
is controlled through the parameterconserveMassFlag
which eitherThe two use cases that @mgjarrett and I discussed providing coverage for were for axial thermal expansion and irradiation-based expansion.
Axial Thermal Expansion
All solid components should have their masses conserved.
Irradiation-Based Axial Expansion
Focus be given to the conservation of mass for the fuel components only.
Proposal
Given the above, I would propose that we refactor
setBlockMesh
for the above two use cases and control the behavior of which through a new parameter. E.g., something like