Example #1
0
def makeTestAssembly(numBlocks,
                     assemNum,
                     spatialGrid=grids.HexGrid.fromPitch(1.0),
                     r=None):
    coreGrid = r.core.spatialGrid if r is not None else spatialGrid
    a = HexAssembly("TestAssem", assemNum=assemNum)
    a.spatialGrid = grids.axialUnitGrid(numBlocks)
    a.spatialGrid.armiObject = a
    a.spatialLocator = coreGrid[2, 2, 0]
    return a
Example #2
0
 def test_isTopDummyBlockPresent(self):
     # build test assembly without dummy
     assembly = HexAssembly("testAssemblyType")
     assembly.spatialGrid = grids.axialUnitGrid(numCells=1)
     assembly.spatialGrid.armiObject = assembly
     assembly.add(_buildTestBlock("shield", "FakeMat"))
     assembly.calculateZCoords()
     assembly.reestablishBlockOrder()
     # create instance of expansion changer
     obj = AxialExpansionChanger(detailedAxialExpansion=True)
     with self.assertRaises(RuntimeError) as cm:
         obj.setAssembly(assembly)
         the_exception = cm.exception
         self.assertEqual(the_exception.error_code, 3)
Example #3
0
    def test_NoMovementACLP(self):
        """ensures that above core load pad (ACLP) does not move during fuel-only expansion"""
        # build test assembly with ACLP
        assembly = HexAssembly("testAssemblyType")
        assembly.spatialGrid = grids.axialUnitGrid(numCells=1)
        assembly.spatialGrid.armiObject = assembly
        assembly.add(_buildTestBlock("shield", "FakeMat"))
        assembly.add(_buildTestBlock("fuel", "FakeMat"))
        assembly.add(_buildTestBlock("fuel", "FakeMat"))
        assembly.add(_buildTestBlock("plenum", "FakeMat"))
        assembly.add(_buildTestBlock("aclp",
                                     "FakeMat"))  # "aclp plenum" also works
        assembly.add(_buildTestBlock("plenum", "FakeMat"))
        assembly.add(_buildDummySodium())
        assembly.calculateZCoords()
        assembly.reestablishBlockOrder()

        # get zCoords for aclp
        aclp = assembly.getChildrenWithFlags(Flags.ACLP)[0]
        aclpZTop = aclp.p.ztop
        aclpZBottom = aclp.p.zbottom

        # expand fuel
        # get fuel components
        cList = [c for b in assembly for c in b if c.hasFlags(Flags.FUEL)]
        # 10% growth of fuel components
        pList = zeros(len(cList)) + 0.1
        chngr = AxialExpansionChanger()
        chngr.performPrescribedAxialExpansion(assembly,
                                              cList,
                                              pList,
                                              setFuel=True)

        # do assertion
        self.assertEqual(
            aclpZBottom,
            aclp.p.zbottom,
            msg=
            "ACLP zbottom has changed. It should not with fuel component only expansion!",
        )
        self.assertEqual(
            aclpZTop,
            aclp.p.ztop,
            msg=
            "ACLP ztop has changed. It should not with fuel component only expansion!",
        )
Example #4
0
def buildTestAssemblyWithFakeMaterial(name):
    """Create test assembly consisting of list of fake material

    Parameters
    ----------
    name : string
        determines which fake material to use
    """
    assembly = HexAssembly("testAssemblyType")
    assembly.spatialGrid = grids.axialUnitGrid(numCells=1)
    assembly.spatialGrid.armiObject = assembly
    assembly.add(_buildTestBlock("shield", name))
    assembly.add(_buildTestBlock("fuel", name))
    assembly.add(_buildTestBlock("fuel", name))
    assembly.add(_buildTestBlock("plenum", name))
    assembly.add(_buildDummySodium())
    assembly.calculateZCoords()
    assembly.reestablishBlockOrder()
    return assembly
Example #5
0
def buildTestAssemblies():
    """
    Build some assembly objects that will be used in testing.

    This builds 2 HexBlocks:
        * One with half UZr pins and half UTh pins
        * One with all UThZr pins
    """
    caseSetting = settings.Settings()
    settings.setMasterCs(caseSetting)

    temperature = 273.0
    fuelID = 0.0
    fuelOD = 1.0
    cladOD = 1.1
    # generate a reactor with assemblies
    # generate components with materials
    nPins = 100

    fuelDims = {
        "Tinput": temperature,
        "Thot": temperature,
        "od": fuelOD,
        "id": fuelID,
        "mult": nPins,
    }

    fuelUZr = components.Circle("fuel", "UZr", **fuelDims)
    fuelUTh = components.Circle("fuel UTh", "ThU", **fuelDims)

    fuelDims2nPins = {
        "Tinput": temperature,
        "Thot": temperature,
        "od": fuelOD,
        "id": fuelID,
        "mult": 2 * nPins,
    }

    fuelUThZr = components.Circle("fuel B", "UThZr", **fuelDims2nPins)

    cladDims = {
        "Tinput": temperature,
        "Thot": temperature,
        "od": cladOD,
        "id": fuelOD,
        "mult": 2 * nPins,
    }

    clad = components.Circle("clad", "HT9", **cladDims)

    interDims = {
        "Tinput": temperature,
        "Thot": temperature,
        "op": 16.8,
        "ip": 16.0,
        "mult": 1.0,
    }

    interSodium = components.Hexagon("interCoolant", "Sodium", **interDims)

    block = blocks.HexBlock("fuel")
    block2 = blocks.HexBlock("fuel")
    block.setType("fuel")
    block.setHeight(10.0)
    block.add(fuelUZr)
    block.add(fuelUTh)
    block.add(clad)
    block.add(interSodium)
    block.p.axMesh = 1
    block.p.molesHmBOL = 1.0
    block.p.molesHmNow = 1.0

    block2.setType("fuel")
    block2.setHeight(10.0)
    block2.add(fuelUThZr)
    block2.add(clad)
    block2.add(interSodium)
    block2.p.axMesh = 1
    block2.p.molesHmBOL = 2
    block2.p.molesHmNow = 1.0

    assemblieObjs = []
    for numBlocks, blockTemplate in zip([1, 1, 5, 4],
                                        [block, block2, block, block]):
        assembly = assemblies.HexAssembly("testAssemblyType")
        assembly.spatialGrid = grids.axialUnitGrid(numBlocks)
        assembly.spatialGrid.armiObject = assembly
        for _i in range(numBlocks):
            newBlock = copy.deepcopy(blockTemplate)
            assembly.add(newBlock)
        assembly.calculateZCoords()
        assembly.reestablishBlockOrder()
        assemblieObjs.append(assembly)

    return assemblieObjs