You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
It is possible for the grid defined for a block to have no overlap with the pins defined in that block, and ARMI will not complain. In such a case, the constructed model is very likely wrong. I'll explain...
Below is a working example based on a simplified version of the inputs from the link above.
custom isotopics:
UO2:
input format: number densitiesU235: 8.65e-4U238: 2.225E-2O: 4.622E-2moderator:
input format: number densitiesH: 6.70e-2O: 3.35E-2B: 2.87E-5Zr clad:
input format: number densitiesZR: 4.30E-2blocks:
uo2: &block_uo2grid name: UO2 gridfuel:
shape: Circlematerial: UO2isotopics: UO2Tinput: 25.0Thot: 25.0od: .8190latticeIDs: [U]gap 1: &fuel_gap_1shape: Circlematerial: VoidTinput: 25.0Thot: 25.0id: fuel.odod: zirconium clad.idlatticeIDs: [U]zirconium clad: &clad_Zrshape: Circlematerial: Customisotopics: Zr cladTinput: 25.0Thot: 25.0id: .8360od: .9500latticeIDs: [U]moderator: &moderatorshape: DerivedShapematerial: SaturatedWaterisotopics: moderatorTinput: 450.0Thot: 450.0pitch: &pitch# dummy component for assembly sizingshape: Squarematerial: VoidTinput: 25.0Thot: 25.0widthInner: 21.42widthOuter: 21.42mult: 1.0latticeIDs: [FC] assemblies:
heights: &heights
- 64.26axial mesh points: &mesh
- 3UO2:
flags: fuelspecifier: UO2blocks:
- *block_uo2height: *heightsaxial mesh points: *meshxs types: [A]systems:
core:
grid name: coreorigin:
x: 0.0y: 0.0z: 0.0grids:
core:
symmetry: quarter reflectivegeom: cartesianlattice pitch:
x: 21.42y: 21.42lattice map: | UO2UO2 grid:
symmetry: fullgeom: cartesianlattice pitch:
x: 1.26y: 1.26lattice map: | U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U Unuclide flags:
H: {burn: false, xs: true}O:
burn: falsexs: trueexpandTo: ["O16", "O17"] # O18 is not in many nuclear data sets.B: {burn: false, xs: true}ZR: {burn: false, xs: true}U235: {burn: false, xs: true}U238: {burn: false, xs: true}
This runs with just the standalone framework.
You can see that there is a lattice map called "UO2 grid" which defines the positions of pins in the block. If you pull up the resulting database and query the fuel component for how many of them there are, the amount is consistent with the grid definition:
Okay, now take the same input and replace the grid with this:
UO2 grid:
symmetry: fullgeom: cartesianlattice pitch:
x: 1.26y: 1.26lattice map: | X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
Note that this new grid does not have any locations with a corresponding pin definition from the block.
Okay, now run it and again examine the database:
There is now just 1 fuel component in the block. This is because that is the default mult value, and since we did not specify a mult on that component and it also isn't found in the grid, we get just 1 fuel pin which is floating (radially) in space. That is logically fine, but the problem is that ARMI apparently doesn't care at all that this grid makes no sense at all for this block. The grid says every position should be filled by a pin named "X", but that pin does not exist!
There is a check that if the user enters a non-unity mult for a component, it must show up the same amount of times in the associated grid. So that is good, but the user often doesn't enter the mult attribute if they also specify a grid (as in the case of the example in the docs).
I see that there are some difficulties with trying to fully verify the user input of a grid, based on the way that the grid system functions. But we should at least be catching the issue that I've described in this ticket. Otherwise a simple mistaken latticeID entered in the grid would be the difference between only 1 of those components versus whatever amount is intended by the user.
To do this, we should ensure that all IDs entered in a grid appear at least once in the associated block blueprint.
The text was updated successfully, but these errors were encountered:
Though less often used, ARMI has the ability to define the radial location of pins within a block. An example of this is here: https://terrapower.github.io/armi/tutorials/walkthrough_lwr_inputs.html
It is possible for the grid defined for a block to have no overlap with the pins defined in that block, and ARMI will not complain. In such a case, the constructed model is very likely wrong. I'll explain...
Below is a working example based on a simplified version of the inputs from the link above.
This runs with just the standalone framework.
You can see that there is a lattice map called "UO2 grid" which defines the positions of pins in the block. If you pull up the resulting database and query the
fuel
component for how many of them there are, the amount is consistent with the grid definition:Okay, now take the same input and replace the grid with this:
Note that this new grid does not have any locations with a corresponding pin definition from the block.
Okay, now run it and again examine the database:
There is now just 1 fuel component in the block. This is because that is the default
mult
value, and since we did not specify amult
on that component and it also isn't found in the grid, we get just 1 fuel pin which is floating (radially) in space. That is logically fine, but the problem is that ARMI apparently doesn't care at all that this grid makes no sense at all for this block. The grid says every position should be filled by a pin named "X", but that pin does not exist!There is a check that if the user enters a non-unity
mult
for a component, it must show up the same amount of times in the associated grid. So that is good, but the user often doesn't enter themult
attribute if they also specify a grid (as in the case of the example in the docs).I see that there are some difficulties with trying to fully verify the user input of a grid, based on the way that the grid system functions. But we should at least be catching the issue that I've described in this ticket. Otherwise a simple mistaken
latticeID
entered in the grid would be the difference between only 1 of those components versus whatever amount is intended by the user.To do this, we should ensure that all IDs entered in a grid appear at least once in the associated block blueprint.
The text was updated successfully, but these errors were encountered: