Source code for armi.physics.neutronics.latticePhysics.tests.test_latticeWriter

# Copyright 2021 TerraPower, LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Test the Lattice Physics Writer."""
from collections import defaultdict
import unittest

from armi.physics.neutronics.const import CONF_CROSS_SECTION
from armi.physics.neutronics.fissionProductModel.fissionProductModelSettings import (
    CONF_FP_MODEL,
)
from armi.physics.neutronics.latticePhysics.latticePhysicsWriter import (
    LatticePhysicsWriter,
)
from armi.physics.neutronics.settings import (
    CONF_XS_BLOCK_REPRESENTATION,
    CONF_DISABLE_BLOCK_TYPE_EXCLUSION_IN_XS_GENERATION,
)
from armi.reactor.tests.test_reactors import loadTestReactor
from armi.tests import TEST_ROOT


[docs]class FakeLatticePhysicsWriter(LatticePhysicsWriter): """LatticePhysicsWriter is abstract, so it must be subclassed to be tested.""" def __init__(self, block, r, eci): self.testOut = "" super(FakeLatticePhysicsWriter, self).__init__(block, r, eci, "", False)
[docs] def write(self): pass
def _writeNuclide( self, fileObj, nuclide, density, nucTemperatureInC, category, xsIdSpecified=None ): pass def _writeComment(self, fileObj, msg): self.testOut += "\n" + str(msg) def _writeGroupStructure(self, fileObj): pass
[docs]class TestLatticePhysicsWriter(unittest.TestCase): """Test Lattice Physics Writer.""" def setUp(self): self.o, self.r = loadTestReactor(TEST_ROOT) self.cs = self.o.cs self.cs[CONF_CROSS_SECTION].setDefaults( self.cs[CONF_XS_BLOCK_REPRESENTATION], self.cs[CONF_DISABLE_BLOCK_TYPE_EXCLUSION_IN_XS_GENERATION], ) self.block = self.r.core.getFirstBlock() self.w = FakeLatticePhysicsWriter(self.block, self.r, self.o)
[docs] def test_latticePhysicsWriter(self): """Super basic test of the LatticePhysicsWriter.""" self.assertEqual(self.w.xsId, "AA") self.assertFalse(self.w.modelFissionProducts) self.assertEqual(self.w.driverXsID, "") self.assertAlmostEqual(self.w.minimumNuclideDensity, 1e-15, delta=1e-16) self.assertEqual(self.w.testOut, "") self.assertEqual( str(self.w), "<FakeLatticePhysicsWriter - XS ID AA (Neutron XS)>" ) self.w._writeTitle(None) self.assertIn("ARMI generated case for caseTitle armiRun", self.w.testOut) nucs = self.w._getAllNuclidesByTemperatureInC(None) self.assertEqual(len(nucs.keys()), 1) self.assertAlmostEqual(list(nucs.keys())[0], 450.0, delta=0.1)
[docs] def test_writeTitle(self): self.w._writeTitle("test_writeTitle") self.assertIn("ARMI generated case for caseTitle", self.w.testOut)
[docs] def test_isSourceDriven(self): self.assertFalse(self.w._isSourceDriven) self.w.driverXsID = True self.assertTrue(self.w._isSourceDriven)
[docs] def test_isGammaXSGenerationEnabled(self): self.assertFalse(self.w._isGammaXSGenerationEnabled)
[docs] def test_getAllNuclidesByTemperatureInCNone(self): nucsByTemp = self.w._getAllNuclidesByTemperatureInC(None) keys0 = list(nucsByTemp.keys()) self.assertEqual(len(keys0), 1) self.assertEqual(keys0[0], 450.0) keys1 = nucsByTemp[keys0[0]] self.assertGreater(len(keys1), 1) names = [k.name for k in keys1] self.assertIn("AM241", names) self.assertIn("U238", names)
[docs] def test_getAllNuclidesByTemperatureInC(self): self.w.explicitFissionProducts = False c = self.r.core[0][0] nucsByTemp = self.w._getAllNuclidesByTemperatureInC(c) keys0 = list(nucsByTemp.keys()) self.assertEqual(len(keys0), 1) self.assertEqual(keys0[0], 450.0) keys1 = nucsByTemp[keys0[0]] self.assertGreater(len(keys1), 1) names = [k.name for k in keys1] self.assertIn("AM241", names) self.assertIn("U238", names)
[docs] def test_getAllNuclidesByTemperatureInCExplicitFissionProducts(self): self.w.explicitFissionProducts = True c = self.r.core[0][0] nucsByTemp = self.w._getAllNuclidesByTemperatureInC(c) keys0 = list(nucsByTemp.keys()) self.assertEqual(len(keys0), 1) self.assertEqual(keys0[0], 450.0) keys1 = nucsByTemp[keys0[0]] self.assertGreater(len(keys1), 1) names = [k.name for k in keys1] self.assertIn("AM241", names) self.assertIn("U238", names)
[docs] def test_getAvgNuclideTemperatureInC(self): temp = self.w._getAvgNuclideTemperatureInC("U238") self.assertAlmostEqual(temp, 450, delta=0.001) temp = self.w._getAvgNuclideTemperatureInC("U235") self.assertAlmostEqual(temp, 450, delta=0.001)
[docs] def test_getFuelTemperature(self): temp = self.w._getFuelTemperature() self.assertAlmostEqual(temp, 450, delta=0.001)
[docs] def test_getDetailedFissionProducts(self): dfpDen = defaultdict(int) dfpDen["U238"] = 1.2 dfpDen["U235"] = 2.3 dfpDen["AM241"] = 3.4 prods = self.w._getDetailedFissionProducts(dfpDen) self.assertEqual(len(prods), 3) self.assertIn("U238", prods) self.assertIn("U235", prods) self.assertIn("AM241", prods)
[docs] def test_getDetailedFissionProductsPass(self): self.cs[CONF_FP_MODEL] = "noFissionProducts" prods = self.w._getDetailedFissionProducts({}) self.assertEqual(len(prods), 0)
[docs] def test_getDetailedFPDensities(self): self.w.modelFissionProducts = False dens = self.w._getDetailedFPDensities() self.assertEqual(len(dens), 0) self.w.modelFissionProducts = True with self.assertRaises(AttributeError): dens = self.w._getDetailedFPDensities()
[docs] def test_isCriticalBucklingSearchActive(self): isActive = self.w._isCriticalBucklingSearchActive self.assertTrue(isActive)
[docs] def test_getDriverBlock(self): b = self.w._getDriverBlock() self.assertIsNone(b)