2.4. Hands-on at the ARMI Terminal¶
This tutorial will walk you through some exploration with ARMI on the command line with the goal of exposing you to some of the capabilities and organization of information in the ARMI system.
2.4.1. Initializing and Exploring the ARMI Model¶
First we need to get some inputs. We built some from scratch in the, and we pick those up and use them here as well:
You can load these inputs using armi’s init function. This will build an Operator, a Reactor, and an Interface Stack full of various interfaces.
[1]:
# you can only configure an app once
import armi
armi.configure(armi.apps.App())
---------------------------------------------------
| _ ____ __ __ ___ |
| / \ | _ \ | \/ | |_ _| |
| / _ \ | |_) | | |\/| | | | |
| / ___ \ | _ < | | | | | | |
| /_/ \_\ |_| \_\ |_| |_| |___| |
| Advanced Reactor Modeling Interface |
---------------------------------------------------
Version 0.1
[2]:
o=armi.init(fName="../../../armi/tests/tutorials/anl-afci-177.yaml")
=========== Constructing Reactor and Verifying Inputs ===========
[info] Constructing the `core`
=========== Adding Assemblies to <Core: core id:1253860908872> ===========
[info] Expanding CR, FE, MO, NI, SI, ZR elementals to have natural isotopics
[info] Nuclides truncating the burn-chain: LFP38, LFP35, DUMP1, DUMP2, LFP41, LFP40, LFP39
[info] Constructing assembly `inner fuel`
[warn] No component matched Flags.CLAD in <reflector BxxxA at ExCore XS: A BU GP: A>. Returning None
[warn] Some component was missing in <reflector BxxxA at ExCore XS: A BU GP: A> so pin-to-duct gap not calculated
[warn] The gap between wire wrap and clad in block <fuel BxxxB at ExCore XS: A BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxC at ExCore XS: A BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxD at ExCore XS: A BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxE at ExCore XS: A BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxF at ExCore XS: A BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <plenum BxxxG at ExCore XS: A BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[info] Constructing assembly `middle core fuel`
[warn] Some component was missing in <reflector BxxxA at ExCore XS: B BU GP: A> so pin-to-duct gap not calculated
[warn] The gap between wire wrap and clad in block <fuel BxxxB at ExCore XS: B BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxC at ExCore XS: B BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxD at ExCore XS: B BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxE at ExCore XS: B BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxF at ExCore XS: B BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <plenum BxxxG at ExCore XS: B BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[info] Constructing assembly `outer core fuel`
[warn] Some component was missing in <reflector BxxxA at ExCore XS: C BU GP: A> so pin-to-duct gap not calculated
[warn] The gap between wire wrap and clad in block <fuel BxxxB at ExCore XS: C BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxC at ExCore XS: C BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxD at ExCore XS: C BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxE at ExCore XS: C BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <fuel BxxxF at ExCore XS: C BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[warn] The gap between wire wrap and clad in block <plenum BxxxG at ExCore XS: C BU GP: A> was -0.02012500000000006 cm. Expected 0.0.
[info] Constructing assembly `radial reflector`
[warn] Some component was missing in <reflector BxxxA at ExCore XS: A BU GP: A> so pin-to-duct gap not calculated
[info] Constructing assembly `radial shield`
[warn] Temperature 597.0 out of range (25 to 500) for B4C linear expansion percent
[warn] No component matched Flags.WIRE in <radial shield BxxxA at ExCore XS: A BU GP: A>. Returning None
[info] Constructing assembly `control`
[info] Constructing assembly `ultimate shutdown`
=========== Verifying Assembly Configurations ===========
=========== Summarizing Source of Material Data for <Core: core id:1253860908872> ===========
[info] --------------- ----------------- ----------------------------
Material Name Source Location Property Data was Modified
from the Source?
--------------- ----------------- ----------------------------
B4C ARMI False
HT9 ARMI False
Sodium ARMI False
UZr ARMI False
Void ARMI False
--------------- ----------------- ----------------------------
=========== Applying Geometry Modifications ===========
[info] Updating spatial grid pitch data for hex geometry
=========== Initializing Mesh, Assembly Zones, and Nuclide Categories ===========
[info] Nuclide categorization for cross section temperature assignments:
------------------ ---------------------------------------------------
Nuclide Category Nuclides
------------------ ---------------------------------------------------
Fuel ZR91, AM243, U236, ZR92, CM247, ZR94, PU241, LFP38,
DUMP1, U234, CM245, AM242, CM246, ZR96, W184, U235,
NP237, HE4, LFP35, CM244, W183, DUMP2, U238, AM241,
LFP40, ZR90, CM243, CM242, NP238, W182, LFP39,
PU240, PU238, PU236, W186, PU242, LFP41, PU239
Coolant NA23
Structure MO98, C, CR54, MO97, NI58, SI30, NI61,
CR50, FE54, MO100, B10, FE58, CR52, B11,
FE57, MN55, NI62, FE56, NI64, V, MO95,
CR53, MO94, MO92, SI29, NI60, SI28, MO96
------------------ ---------------------------------------------------
[info] Assembly zone definitions:
-------- ------ ------------ ----------------------------------------- ---------- ------
Zone Symmetry Hot
Number Name Assemblies Locations Factor Zone
-------- ------ ------------ ----------------------------------------- ---------- ------
1 ring-1 111 A1001, A2001, A2002, A3001, A3002, A3003, 3 False
A3012, A4001, A4002, A4003, A4004, A4005,
A4018, A5001, A5002, A5003, A5004, A5005,
A5006, A5023, A5024, A6001, A6002, A6003,
A6004, A6005, A6006, A6007, A6008, A6029,
A6030, A7001, A7002, A7003, A7004, A7005,
A7006, A7007, A7008, A7009, A7034, A7035,
A7036, A8001, A8002, A8003, A8004, A8005,
A8006, A8007, A8008, A8009, A8010, A8011,
A8040, A8041, A8042, A9001, A9002, A9003,
A9004, A9005, A9006, A9007, A9008, A9009,
A9010, A9011, A9012, A9045, A9046, A9047,
A9048, B0001, B0002, B0003, B0004, B0005,
B0006, B0007, B0008, B0009, B0010, B0011,
B0012, B0013, B0014, B0051, B0052, B0053,
B0054, B1001, B1002, B1003, B1004, B1005,
B1006, B1007, B1008, B1009, B1010,
B1011, B1012, B1013, B1014, B1015,
B1056, B1057, B1058, B1059, B1060
-------- ------ ------------ ----------------------------------------- ---------- ------
[info] The setting `splitZones` is enabled. Building subzones from core zones:
-------- -------------------------- ---------- ------------ ----------------------------------------- ---------- ------
Zone Original Symmetry Hot
Number Name Name Assemblies Locations Factor Zone
-------- -------------------------- ---------- ------------ ----------------------------------------- ---------- ------
1 ring-1-inner-fuel-7 ring-1 7 A1001, A2001, A2002, A3001, 3 False
A3002, A3003, A3012
2 ring-1-ultimate-shutdown-1 ring-1 1 A4001 3 False
3 ring-1-middle-core-fuel-7 ring-1 22 A4002, A4003, A4005, A4018, A5001, A5002, 3 False
A5003, A5004, A5005, A5006, A5023, A5024,
A6001, A6002, A6003, A6004, A6005,
A6006, A6007, A6008, A6029, A6030
4 ring-1-control-1 ring-1 3 A4004, A7004, A7034 3 False
5 ring-1-outer-core-fuel-7 ring-1 22 A7001, A7002, A7003, A7005, A7006, A7007, 3 False
A7008, A7009, A7035, A7036, A8002, A8003,
A8004, A8005, A8006, A8007, A8009,
A8010, A8011, A8040, A8041, A8042
6 ring-1-radial-reflector-1 ring-1 30 A8001, A8008, A9001, A9002, A9003, A9004, 3 False
A9005, A9006, A9007, A9008, A9009, A9010,
A9011, A9012, A9045, A9046, A9047, A9048,
B0003, B0004, B0005, B0006, B0007, B0008,
B0012, B0013, B0014, B0051, B0052, B0053
7 ring-1-radial-shield-1 ring-1 20 B0001, B0002, B0009, B0010, B0011, 3 False
B0054, B1003, B1004, B1005, B1006,
B1007, B1008, B1009, B1013, B1014,
B1015, B1056, B1057, B1058, B1059
-------- -------------------------- ---------- ------------ ----------------------------------------- ---------- ------
=========== Interface Stack Summary ===========
[info] ------- ------------------------ --------------- ---------- --------- ----------- ------------
Index Type Name Function Enabled EOL order BOL forced
------- ------------------------ --------------- ---------- --------- ----------- ------------
01 Main main Yes Reversed No
02 FissionProductModel fissionProducts Yes Normal No
03 CrossSectionGroupManager xsGroups Yes Normal No
04 FuelHandler fuelHandler Yes Normal No
05 HistoryTracker history Yes Normal No
06 Report report Yes Normal No
07 Database database Yes Normal No
08 MemoryProfiler memoryProfiler Yes Normal No
09 Snapshot snapshot Yes Normal No
------- ------------------------ --------------- ---------- --------- ----------- ------------
=========== Triggering Init Event ===========
=========== 01 - main Init ===========
=========== 02 - fissionProducts Init ===========
=========== 03 - xsGroups Init ===========
=========== 04 - fuelHandler Init ===========
=========== 05 - history Init ===========
=========== 06 - report Init ===========
=========== 07 - database Init ===========
=========== 08 - memoryProfiler Init ===========
=========== 09 - snapshot Init ===========
=========== Completed Init Event ===========
You have now created an operator object, which contains a Reactor object (called o.r) that
represents the beginning-of-life (BOL) state of the nuclear reactor defined in the inputs. The reactor looks
like this:
Figure 1. The primary data containers in ARMI¶
The data hierarchy in an ARMI model often is made up of:
Reactors, often namedreactororrcontain a Core and possibly other equipment. They represent collections of assemblies.Assemblies, often namedassemblyora, are individual pieces that collect into a System.Blocks, often calledblockorbare divisions of the assemblies into sections one on top of the other.ComponentsThe geometrically defined objects (Circles, Hexagons, Helices, Dodecagons) and their dimensionsMaterialsare objects which have material properties like linear expansion coefficients, thermal conductivities, isotopic mass fractions, and densities
Each of these objects house more than the listed objects, they also are responsible for a variety of state information like the reactor’s overall keff, flux, height, temperature, etc. In this section, we will explore these objects, see how to access them, and how to view their contained information.
Exploring it a little, we can list all the assemblies in the reactor with:
[3]:
core = o.r.core
core.getAssemblies()[:25] # only print the first 25
[3]:
[<inner fuel Assembly A0007 at A1001>,
<inner fuel Assembly A0013 at A2001>,
<inner fuel Assembly A0018 at A2002>,
<inner fuel Assembly A0019 at A3001>,
<inner fuel Assembly A0024 at A3002>,
<inner fuel Assembly A0029 at A3003>,
<inner fuel Assembly A0008 at A3012>,
<ultimate shutdown Assembly A0025 at A4001>,
<middle core fuel Assembly A0030 at A4002>,
<middle core fuel Assembly A0036 at A4003>,
<control Assembly A0041 at A4004>,
<middle core fuel Assembly A0035 at A4005>,
<middle core fuel Assembly A0014 at A4018>,
<middle core fuel Assembly A0031 at A5001>,
<middle core fuel Assembly A0037 at A5002>,
<middle core fuel Assembly A0042 at A5003>,
<middle core fuel Assembly A0048 at A5004>,
<middle core fuel Assembly A0054 at A5005>,
<middle core fuel Assembly A0047 at A5006>,
<middle core fuel Assembly A0009 at A5023>,
<middle core fuel Assembly A0020 at A5024>,
<middle core fuel Assembly A0038 at A6001>,
<middle core fuel Assembly A0043 at A6002>,
<middle core fuel Assembly A0049 at A6003>,
<middle core fuel Assembly A0055 at A6004>]
Quiz Question 1
How many assemblies does the model have? (see answers at bottom)
Tip
A reactor is made up of assemblies, which are made up of blocks, and so on. Each composite ARMI
object has a getChildren method that will retrieve a list of its contents. For clarity,
reactors have a getAssemblies() method and assemblies have a getBlocks() method,
but these do exactly the same thing as getChildren() in both cases.
Reactor, assembly, blocks, etc. objects act like lists as well, so you can get the fifth assembly out of a reactor just like you’d get the fifth item out of any other list (don’t forget that python uses zero-based numbering).:
>>> fifthAssem = core[4]
You can drill down the hierarchy for a particular assembly:
[4]:
core = o.r[0]
print(core)
assem = core[1]
print(assem)
block = assem[5]
print(block)
print(f"Block's parent is: {block.parent}")
components = block.getChildren()
print(components)
material = components[0].material
print(material)
<Core: core id:1253860908872>
<inner fuel Assembly A0008 at A3012>
<fuel B0008F at A3012F XS: A BU GP: A>
Block's parent is: <inner fuel Assembly A0008 at A3012>
[<Circle: clad>, <Helix: wire>, <Circle: fuel>, <Circle: bond>, <Hexagon: duct>, <Hexagon: intercoolant>, <DerivedShape: coolant>]
<Material: HT9>
2.4.2. Exploring the state of the reactor¶
State can be explored using a variety of framework methods, as well as looking at state parameters. Let’s first try out some methods to find out how much U-235 is in the model and what the average uranium enrichment is:
[5]:
u235 = core.getMass('U235')
u238 = core.getMass('U238')
print(f"The core contains {u235} grams of U-235")
print(f"The average fissile enrichment is {u235/(u235+u238)}")
The core contains 912822.5942999555 grams of U-235
The average fissile enrichment is 0.16152980132450295
That’s how much U-235 is in the 1/3 core. If we want the total mass (including all nuclides), we can just leave the argument out:
[6]:
core.getMass()/1.e6
[6]:
30.100147310763912
[7]:
core.getMass?
Furthermore, you can get a list of available methods by pressing the tab key. Try core. followed by [Tab]. Try out some options!
Use tab completion to explore other methods of ARMI reactors assemblies and blocks. You can
view a summary of the methods of any object in the API documentation.
For a good example, see the API docs for a block.
Next, lets find out what the number density of U235 is in a particular fuel block. We’ll use the FLAGS system to select a particular type of block (in this case, a fuel block):
[8]:
from armi.reactor.flags import Flags
b = core.getFirstBlock(Flags.FUEL)
print(f"U-235 ndens: {b.getNumberDensity('U235'):.4e} (atoms/bn-cm)")
print(f"Block name: {b.getName()}")
print(f"Block type: {b.getType()}")
U-235 ndens: 1.5935e-03 (atoms/bn-cm)
Block name: B0007B
Block type: fuel
You can find lots of other details about this block with:
[9]:
b.printContents(includeNuclides=False)
[impt] <fuel B0007B at A1001B XS: A BU GP: A>
[impt] <Circle: clad>
[impt] ---------------------------------------------------------------------------------------------
Cladding Dimensions - Of First Fuel Block
Tcold (25.0) Thot (450.0)
---------------------------------------------------------------------------------------------
Inner Diameter (cm) 0.6962 0.6996347645979837
Material HT9
Multiplicity 271 271
Name clad
Outer Diameter (cm) 0.808 0.8119863398379357
Thickness (cm) 0.0559000 0.0561758
[impt] <Helix: wire>
[impt] ---------------------------------------------------------------------------------------------
Wire Dimensions - Of First Fuel Block
Tcold (25.0) Thot (450.0)
---------------------------------------------------------------------------------------------
Axial Pitch (cm) 30.0 30.148007667250084
Helix Diameter (cm) 0.84825 0.8524349167914961
Inner Diameter (cm) 0.0 0.0
Material HT9
Multiplicity 271 271
Name wire
Outer Diameter (cm) 0.0805 0.08089715390712106
[impt] <Circle: fuel>
[impt] ---------------------------------------------------------------------------------------------
Fuel Dimensions - Of First Fuel Block
Tcold (25.0) Thot (500.0)
---------------------------------------------------------------------------------------------
Inner Diameter (cm) 0.0 0.0
Material UZr
Multiplicity 271 271
Name fuel
Outer Diameter (cm) 0.6029 0.6086118601525807
[impt] <Circle: bond>
[impt] ---------------------------------------------------------------------------------------------
Bond Dimensions - Of First Fuel Block
Tcold (447.0) Thot (447.0)
---------------------------------------------------------------------------------------------
Inner Diameter (cm) 0.6029 0.6086118601525807
Material Sodium
Multiplicity 271 271
Name bond
Outer Diameter (cm) 0.6962 0.6996347645979837
Thickness (cm) 0.0466500 0.0455115
[impt] <Hexagon: duct>
[impt] ---------------------------------------------------------------------------------------------
Duct Dimensions - Of First Fuel Block
Tcold (25.0) Thot (450.0)
---------------------------------------------------------------------------------------------
Inner Pitch (cm) 14.922 14.995619013690193
Material HT9
Multiplicity 1.0 1.0
Name duct
Outer Pitch (cm) 15.71 15.787506681749962
Thickness (cm) 0.3940000 0.3959438
[impt] <Hexagon: intercoolant>
[impt] ---------------------------------------------------------------------------------------------
Intercoolant Dimensions - Of First Fuel Block
Tcold (450.0) Thot (450.0)
---------------------------------------------------------------------------------------------
Inner Pitch (cm) 15.71 15.787506681749962
Material Sodium
Multiplicity 1.0 1.0
Name intercoolant
Outer Pitch (cm) 16.142 16.142
Thickness (cm) 0.2160000 0.1772467
[impt] <DerivedShape: coolant>
[impt] ---------------------------------------------------------------------------------------------
Coolant Dimensions - Of First Fuel Block
Tcold (450.0) Thot (450.0)
---------------------------------------------------------------------------------------------
Material Sodium
Name coolant
2.4.3. Modifying the state of the reactor¶
Each object in the Reactor model has a bunch of state parameters contained in it’s special .p attribute, called it’s Parameter Collection). The state parameters are defined both by the ARMI framework and the collection of plugins. For instance, you can look at the core’s keff parameters or each individual block’s power and multi-group flux parameters like this:
[10]:
print(b.p.power)
print(core.p.keff)
print(b.p.mgFlux)
0.0
0.0
None
As you might expect, the values are zero because we have not performed any physics calculations yet. We could run a physics plugin at this point to add physics state, but for this tutorial, we’ll just apply dummy data. Here’s a fake physics kernel that just sets a power distribution based on spatial location of each block (e.g. a spherical distribution):
[11]:
import numpy as np
midplane = core[0].getHeight()/2.0
center = np.array([0,0,midplane])
peakPower = 1e6
mgFluxBase = np.arange(5)
def setFakePower(core):
for a in core:
for b in a:
vol = b.getVolume()
coords = b.spatialLocator.getGlobalCoordinates()
r = np.linalg.norm(abs(coords-center))
fuelFlag = 10 if b.isFuel() else 1.0
b.p.power = peakPower / r**2 * fuelFlag
b.p.pdens = b.p.power/vol
b.p.mgFlux = mgFluxBase*b.p.pdens
setFakePower(core)
[12]:
print(b.p.power)
print(b.p.pdens)
603.6363986253243
0.3949368453772479
[13]:
import matplotlib.pyplot as plt
a = b.parent
z = [b.spatialLocator.getGlobalCoordinates()[2] for b in a]
power = a.getChildParamValues('power')
plt.plot(z,power,'.-')
plt.title("Fake power distribution on reactor")
[13]:
Text(0.5, 1.0, 'Fake power distribution on reactor')
We can take a look at the spatial distribution as well:
[14]:
core.plotFaceMap("power")
2.4.4. Modifying number densities¶
Analysts frequently want to modify number densities. For example, if you needed to compute a coolant density coefficient, you could simply reduce the amount of coolant in the core.
[15]:
sodiumBefore = core.getMass('NA')
print(f"Before: {sodiumBefore/1e6:.2f} MT Sodium")
for b in core.getBlocks(): # loop through all blocks
refDens = b.getNumberDensity('NA23')
b.setNumberDensity('NA23',refDens*0.98) # reduce Na density by 2%
sodiumAfter = core.getMass('NA')
print(f"After: {sodiumAfter/1e6:.2f} MT Sodium")
Before: 2.48 MT Sodium
After: 2.43 MT Sodium
If you analyze the keff with a physics plugin before and after, the change in the core.p.keff param would determine your density coefficient of reactivity.
2.4.5. Saving state to disk¶
During analysis, it’s often useful to save the reactor state to disk in a database. The ARMI database package handles this, and writes it out to an HDF-formatted file. This is typically done automatically at each point in time in a normal simulation, and can also be done manually, like this:
[16]:
dbi = o.getInterface("database")
dbi.initDB()
dbi.database.writeToDB(o.r)
[info] Opening database file at C:\Users\ntouran\AppData\Roaming\armi\0-20191101092852684423\anl-afci-177.h5
[info] Writing to database for statepoint: /c00n00
2.4.6. Fuel management¶
One plugin that comes with the framework is the Fuel Handler. It attaches the Fuel Handler interface, which we can grab now to move fuel around. In a typical ARMI run, the detailed fuel management choices are specified by the user-input custom shuffle logic file. In this particular example, we will simply swap the 10 highest-power fuel assemblies with the 10 lowest-power ones.
[17]:
from armi.physics.fuelCycle import fuelHandlers
fh = fuelHandlers.fuelHandlerFactory(o)
[18]:
moved = []
for n in range(10):
high = fh.findAssembly(param="power", compareTo=1.0e6, blockLevelMax=True, exclusions=moved)
low = fh.findAssembly(param="power", compareTo=0.0, blockLevelMax=True, exclusions=moved)
fh.swapAssemblies(high, low)
moved.extend([high, low])
[19]:
core.plotFaceMap("power")
We can write this new state to DB as well, since we’ve shuffled the fuel
[20]:
o.r.p.timeNode +=1
dbi.database.writeToDB(o.r)
dbi.database.close()
[info] Writing to database for statepoint: /c00n01
C:\users\ntouran\codes\armi\framework\armi\bookkeeping\db\database3.py:653: H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.
self.h5db["inputs/settings"].value,
C:\users\ntouran\codes\armi\framework\armi\bookkeeping\db\database3.py:654: H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.
self.h5db["inputs/geomFile"].value,
C:\users\ntouran\codes\armi\framework\armi\bookkeeping\db\database3.py:655: H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.
self.h5db["inputs/blueprints"].value,
C:\users\ntouran\codes\armi\framework\armi\bookkeeping\db\database3.py:597: H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.
cs.loadFromString(self.h5db["inputs/settings"].value)
C:\users\ntouran\codes\armi\framework\armi\bookkeeping\db\database3.py:603: H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.
bp = blueprints.Blueprints.load(self.h5db["inputs/blueprints"].value)
C:\users\ntouran\codes\armi\framework\armi\bookkeeping\db\database3.py:610: H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.
geom.readGeomFromStream(io.StringIO(self.h5db["inputs/geomFile"].value))
[info] Loading reactor state for time node (0, 0)
=========== Initializing Mesh, Assembly Zones, and Nuclide Categories ===========
[info] Nuclide categorization for cross section temperature assignments:
------------------ ----------------------------------------------------------
Nuclide Category Nuclides
------------------ ----------------------------------------------------------
Fuel ZR91, AM243, U236, CM247, ZR92, ZR94, PU241, LFP38, DUMP1,
U234, CM245, AM242, CM246, ZR96, NP237, U235, LFP35,
CM244, DUMP2, U238, AM241, LFP40, ZR90, CM243, CM242,
NP238, LFP39, PU240, PU238, PU236, PU242, LFP41, PU239
Coolant NA23
Structure MO98, C, CR54, MO97, NI58, SI30, NI61,
CR50, FE54, MO100, B10, FE58, CR52, B11,
FE57, MN55, NI62, FE56, NI64, MO95, V,
CR53, MO94, MO92, SI29, NI60, SI28, MO96
------------------ ----------------------------------------------------------
[info] Loading reactor state for time node (0, 1)
=========== Initializing Mesh, Assembly Zones, and Nuclide Categories ===========
[info] Nuclide categorization for cross section temperature assignments:
------------------ ----------------------------------------------------------
Nuclide Category Nuclides
------------------ ----------------------------------------------------------
Fuel ZR91, AM243, U236, CM247, ZR92, ZR94, PU241, LFP38, DUMP1,
U234, CM245, AM242, CM246, ZR96, NP237, U235, LFP35,
CM244, DUMP2, U238, AM241, LFP40, ZR90, CM243, CM242,
NP238, LFP39, PU240, PU238, PU236, PU242, LFP41, PU239
Coolant NA23
Structure MO98, C, CR54, MO97, NI58, SI30, NI61,
CR50, FE54, MO100, B10, FE58, CR52, B11,
FE57, MN55, NI62, FE56, NI64, MO95, V,
CR53, MO94, MO92, SI29, NI60, SI28, MO96
------------------ ----------------------------------------------------------
[info] The setting `splitZones` is enabled. Building subzones from core zones:
-------- -------------------------- ---------- ------------ ----------------------------------------- ---------- ------
Zone Original Symmetry Hot
Number Name Name Assemblies Locations Factor Zone
-------- -------------------------- ---------- ------------ ----------------------------------------- ---------- ------
1 ring-1-outer-core-fuel-7 ring-1 22 A1001, A2001, A2002, A3001, A3002, A3003, 3 False
A3012, A4002, A4005, A4018, A7001, A7002,
A7003, A7005, A7006, A7007, A7008,
A7009, A7035, A7036, A8005, A8011
2 ring-1-ultimate-shutdown-1 ring-1 1 A4001 3 False
3 ring-1-middle-core-fuel-7 ring-1 22 A4003, A5001, A5002, A5003, A5004, A5005, 3 False
A5006, A5023, A5024, A6001, A6002, A6003,
A6004, A6005, A6006, A6007, A6008,
A6029, A6030, A8004, A8006, A8040
4 ring-1-control-1 ring-1 3 A4004, A7004, A7034 3 False
5 ring-1-radial-reflector-1 ring-1 30 A8001, A8008, A9001, A9002, A9003, A9004, 3 False
A9005, A9006, A9007, A9008, A9009, A9010,
A9011, A9012, A9045, A9046, A9047, A9048,
B0003, B0004, B0005, B0006, B0007, B0008,
B0012, B0013, B0014, B0051, B0052, B0053
6 ring-1-inner-fuel-7 ring-1 7 A8002, A8003, A8007, A8009, 3 False
A8010, A8041, A8042
7 ring-1-radial-shield-1 ring-1 20 B0001, B0002, B0009, B0010, B0011, 3 False
B0054, B1003, B1004, B1005, B1006,
B1007, B1008, B1009, B1013, B1014,
B1015, B1056, B1057, B1058, B1059
-------- -------------------------- ---------- ------------ ----------------------------------------- ---------- ------
That’s just a brief exploration of the data model. Hopefully it helped orient you to the underlying ARMI structure.
[ ]: