Esempio n. 1
0
 def test_size_tp(self):
     flowInWf = mc.FlowState("R123", 0.34307814292524513, mc.PQ_INPUTS,
                             1000000., 0.4)
     flowOutWf = mc.FlowState("R123", 0.34307814292524513, mc.PQ_INPUTS,
                              1000000., 0.5)
     flowInSf = mc.FlowState("Air", 0.09, mc.PT_INPUTS, 111600.,
                             868.7758979999346)
     flowOutSf = mc.FlowState("Air", 0.09, mc.PT_INPUTS, 111600.,
                              825.2114243937383)
     self.hxUnit.update({
         'flowInWf': flowInWf,
         'flowInSf': flowInSf,
         'flowOutWf': flowOutWf,
         'flowOutSf': flowOutSf
     })
     self.hxUnit._methodHeatWf = "yanLin_tpEvap"
     self.hxUnit._methodFrictionWf = "yanLin_tpEvap"
     #
     self.hxUnit.update({'sizeAttr': 'L', 'sizeBounds': [0.001, 0.5]})
     self.hxUnit.sizeUnits()
     self.assertAlmostEqual(
         abs(self.hxUnit.L - 0.003778819723856917) / 0.003778819723856917,
         0, 4)
     #
     self.assertAlmostEqual(
         abs(self.hxUnit._dpFWf() - 722.9638885277705) / 722.9638885277705,
         0, 2)
Esempio n. 2
0
 def test_size_liq(self):
     flowInWf = mc.FlowState("R123", "HEOS", None, 0.34307814292524513,
                             CP.PT_INPUTS, 1000000., 300.57890653991495)
     flowOutWf = mc.FlowState("R123", "HEOS", None, 0.34307814292524513,
                              CP.PT_INPUTS, 1000000., 305.79345550292123)
     flowInSf = mc.FlowState("Air", "HEOS", None, 0.09, CP.PT_INPUTS,
                             111600., 330.77794902610714)
     flowOutSf = mc.FlowState("Air", "HEOS", None, 0.09, CP.PT_INPUTS,
                              111600., 310.57890653991586)
     self.hxUnit.update(flowInWf=flowInWf,
                        flowInSf=flowInSf,
                        flowOutWf=flowOutWf,
                        flowOutSf=flowOutSf)
     #
     self.hxUnit.size("L", [0.005, 0.5])
     self.assertAlmostEqual(
         abs(self.hxUnit.L - 0.0636564105282744) / 0.0636564105282744, 0, 4)
     self.hxUnit.size("W", [50e-3, 500e-3])
     self.assertAlmostEqual(self.hxUnit.W, 95e-3, 7)
     self.hxUnit.size("geomPlateWf__b", [0.1e-3, 10e-3])
     self.assertAlmostEqual(
         abs(self.hxUnit.geomPlateWf.b - 1.096e-3) / 1.096e-3, 0, 2)
     #
     self.assertAlmostEqual(
         abs(self.hxUnit.dpFWf - 7200.2135758720115) / 7200.2135758720115,
         0, 2)
Esempio n. 3
0
 def test_phaseWf_tpEvap_with_x_0(self):
     flowInWf = mc.FlowState("R123", "HEOS", None, None, CP.PQ_INPUTS,
                             1000000., 0)
     flowOutWf = mc.FlowState("R123", "HEOS", None, None, CP.PQ_INPUTS,
                              1000000., 0.3)
     self.hxUnit.update(flowInWf=flowInWf, flowOutWf=flowOutWf)
     self.assertEqual(self.hxUnit.phaseWf, "tpEvap")
Esempio n. 4
0
 def test_size_vap(self):
     flowInWf = mc.FlowState("R123", 0.34307814292524513, mc.PT_INPUTS,
                             1000000., 409.2350351214396)
     flowOutWf = mc.FlowState("R123", 0.34307814292524513, mc.PT_INPUTS,
                              1000000., 414.3019814953263)
     flowInSf = mc.FlowState("Air", 0.09, mc.PT_INPUTS, 111600., 1170.)
     flowOutSf = mc.FlowState("Air", 0.09, mc.PT_INPUTS, 111600.,
                              1155.3292007981324)
     self.hxUnit.update({
         'flowInWf': flowInWf,
         'flowInSf': flowInSf,
         'flowOutWf': flowOutWf,
         'flowOutSf': flowOutSf
     })
     self.hxUnit._methodHeatWf = "chisholmWannairachchi_sp"
     self.hxUnit._methodFrictionWf = "chisholmWannairachchi_sp"
     #
     self.hxUnit.update({'sizeAttr': 'L', 'sizeBounds': [0.0001, 0.5]})
     self.hxUnit.sizeUnits()
     self.assertAlmostEqual(
         abs(self.hxUnit.L - 0.0009979724829425561) / 0.0009979724829425561,
         0, 4)
     #
     self.assertAlmostEqual(
         abs(self.hxUnit._dpFWf() - 1363.6424738901792) /
         1363.6424738901792, 0, 2)
Esempio n. 5
0
    def test_ClrBasic_ConstP_solve_Q(self):
        flowOut = mc.FlowState("He", -1, mc.PT_INPUTS, 6.7e6, 424)
        flowIn = mc.FlowState("He", -1, mc.PT_INPUTS, 6.7e6, 1190)

        clr = mc.ClrBasic(mc.CONSTANT_P, -1, 1.0, flowIn, flowOut)
        clr.update({'m': 1.0, 'sizeAttr': 'QCool'})
        clr.size()
        self.assertAlmostEqual(clr.Q() / 1e6, -3.975, 3)
Esempio n. 6
0
    def test_ClrBasic_ConstP_solve_Q_assert_error(self):
        flowOut = mc.FlowState("He", -1, mc.PT_INPUTS, 6.7e6, 424)
        flowIn = mc.FlowState("He", -1, mc.PT_INPUTS, 6.8e6, 1190)

        clr = mc.ClrBasic(mc.CONSTANT_P, -1, 1.0, flowIn, flowOut)
        clr.update({'m': 1.0, 'sizeAttr': 'QCool'})
        with self.assertRaises(AssertionError):
            clr.size()
Esempio n. 7
0
    def test_ExpBasic_size_pRatio(self):
        flowIn = mc.FlowState("water", -1, mc.PT_INPUTS, 2.e6, mc.degC2K(350))
        flowOut = mc.FlowState("water", -1, mc.PQ_INPUTS, 50000., 1)

        exp = mc.ExpBasic(-1, 0.686, flowIn, flowOut)
        exp.update({'m': 1.})
        exp.size()  # defaults to sizeAttr=pRatio,sizeBounds=[1,50]
        self.assertAlmostEqual(exp.pRatio, 40.0, 5)
Esempio n. 8
0
    def test_ClrBasic_ConstP_solve_m(self):
        flowOut = mc.FlowState("He", -1, mc.PT_INPUTS, 6.7e6, 424)
        flowIn = mc.FlowState("He", -1, mc.PT_INPUTS, 6.7e6, 1190)

        clr = mc.ClrBasic(mc.CONSTANT_P, 3.975e6, 1.0, flowIn, flowOut)
        clr.update({'sizeAttr': 'm', 'sizeBounds': [0.8, 1.1]})
        clr.size()
        self.assertAlmostEqual(clr.m, 1.000, 3)
Esempio n. 9
0
    def test_HtrBasic_ConstP_size_Q(self):
        flowIn = mc.FlowState("He", -1, mc.PT_INPUTS, 6.7e6, 424)
        flowOut = mc.FlowState("He", -1, mc.PT_INPUTS, 6.7e6, 1190)

        htr = mc.HtrBasic(mc.CONSTANT_P, -1, 1.0, flowIn, flowOut)
        htr.update({'m': 1.0, 'sizeAttr': 'QHeat'})
        htr.size()
        self.assertAlmostEqual(htr.Q() / 1e6, 3.975, 3)
Esempio n. 10
0
    def test_ExpBasic_size_pRatio(self):
        flowIn = mc.FlowState("water", "HEOS", None, None, CP.PT_INPUTS, 2.e6,
                              mc.degC2K(350))
        flowOut = mc.FlowState("water", "HEOS", None, None, CP.PQ_INPUTS,
                               50000., 1)

        exp = mc.ExpBasic(None, 0.686, flowIn, flowOut, m=1.0)
        exp.size()  # defaults to sizeAttr=pRatio,sizeBracket=[1,50]
        self.assertAlmostEqual(exp.pRatio, 40.0, 5)
Esempio n. 11
0
    def test_ExpBasic_size_effIsentropic(self):
        flowIn = mc.FlowState("water", "HEOS", None, None, CP.PT_INPUTS, 2.e6,
                              mc.degC2K(350))
        flowOut = mc.FlowState("water", "HEOS", None, None, CP.PQ_INPUTS,
                               50000., 1)

        exp = mc.ExpBasic(40, 1.0, flowIn, flowOut, m=1.0)
        exp.size("effIsentropic", [0.5, 0.8])
        self.assertAlmostEqual(exp.effIsentropic, 0.686, 3)
Esempio n. 12
0
 def test_FlowState_phase(self):
     flow = mc.FlowState("air", 1.0, mc.PT_INPUTS, 101325., 293.15)
     #self.assertEqual(flow.phase(), mc.PHASE_VAPOUR)
     self.assertEqual(flow.phase(), mc.PHASE_SUPERCRITICAL_GAS)
     flow = mc.FlowState("water", 1.0, mc.PT_INPUTS, 101325., 293.15)
     self.assertEqual(flow.phase(), mc.PHASE_LIQUID)
     flow = mc.FlowState("R245fa", 1.0, mc.PQ_INPUTS, 5.e5, 0.4)
     self.assertEqual(flow.phase(), mc.PHASE_TWOPHASE)
     flow = mc.FlowState("R245fa", 1.0, mc.PQ_INPUTS, 5.e5, 0)
     self.assertEqual(flow.phase(), mc.PHASE_SATURATED_LIQUID)
     flow = mc.FlowState("R245fa", 1.0, mc.PQ_INPUTS, 5.e5, 1)
     self.assertEqual(flow.phase(), mc.PHASE_SATURATED_VAPOUR)
Esempio n. 13
0
    def test_ExpBasic_size_efficiencyIsentropic(self):
        flowIn = mc.FlowState("water", -1, mc.PT_INPUTS, 2.e6, mc.degC2K(350))
        flowOut = mc.FlowState("water", -1, mc.PQ_INPUTS, 50000., 1)

        exp = mc.ExpBasic(40, 1.0, flowIn, flowOut)
        exp.update({
            'm': 1.,
            'sizeAttr': "efficiencyIsentropic",
            'sizeBounds': [0.5, 0.8]
        })
        exp.size()
        self.assertAlmostEqual(exp.efficiencyIsentropic, 0.686, 3)
Esempio n. 14
0
 def test_ExpBasic_run(self):
     flowIn = mc.FlowState("water", "HEOS", None, 10., CP.PT_INPUTS, 3.e6,
                           mc.degC2K(500))
     exp = mc.ExpBasic(6, 0.8, flowIn)
     exp.run()
     self.assertAlmostEqual(exp.flowOut.T, 563.74, 2)
     self.assertAlmostEqual(exp.P_out / 1000, 4121.11, 2)
Esempio n. 15
0
class TestCompBasic(unittest.TestCase):
    flowIn = mc.FlowState("air", 9.5, mc.PT_INPUTS, 110000., 300)
    comp = mc.CompBasic(5, 1.0, flowIn)

    def test_CompBasic_run(self):
        self.comp.update({'pRatio': 5, 'efficiencyIsentropic': 1.})
        self.comp.run()
        self.assertAlmostEqual(self.comp.flowOut.T(), 473.80, 2)
        self.assertAlmostEqual(self.comp.PIn() / 1000, 1671.12, 2)

    def test_CompBasic_size_efficiencyIsentropic(self):
        flowOut = mc.FlowState("air", -1, mc.PT_INPUTS, 550000., 520)
        self.comp.update({
            'flowOut': flowOut,
            'm': 9.5,
            'sizeAttr': 'efficiencyIsentropic',
            'sizeBounds': [0.5, 0.9]
        })
        self.comp.size()
        self.assertAlmostEqual(self.comp.efficiencyIsentropic, 0.787, 3)

    def test_CompBasic_size_pRatio(self):
        flowOut = mc.FlowState("air", -1, mc.PT_INPUTS, 550000., 473.80)
        self.comp.update({
            'flowOut': flowOut,
            'm': 9.5,
            'pRatio': -1,
            'sizeAttr': 'pRatio',
            'sizeBounds': [4, 8]
        })
        self.comp.size()
        self.assertAlmostEqual(self.comp.pRatio, 5., 5)
Esempio n. 16
0
 def test_CompBasic_size_efficiencyIsentropic(self):
     flowOut = mc.FlowState("air", -1, mc.PT_INPUTS, 550000., 520)
     self.comp.update({
         'flowOut': flowOut,
         'm': 9.5,
         'sizeAttr': 'efficiencyIsentropic',
         'sizeBounds': [0.5, 0.9]
     })
     self.comp.size()
     self.assertAlmostEqual(self.comp.efficiencyIsentropic, 0.787, 3)
Esempio n. 17
0
    def test_run1(self):
        flowInWf = mc.FlowState("R245fa", 2, mc.PT_INPUTS, 2e5, 300.)
        flowInSf = mc.FlowState("water", 5., mc.PT_INPUTS, 1e5, 600.)

        hLowerBound = flowInWf.h() * 1.01
        hUpperBound = flowInWf.copyUpdateState(mc.PT_INPUTS, 2e5, 350.).h()

        self.hx.update({
            'L': 0.269,
            'NPlate': 5,
            'geomWf.b': 1.096e-3,
            'W': 95e-3,
            'flowInWf': flowInWf,
            'flowInSf': flowInSf,
            'sizeUnitsBounds': [1e-5, 1.],
            'runBounds': [hLowerBound, hUpperBound]
        })
        self.hx.run()
        #self.hx.summary(flowKeys='all')
        self.assertAlmostEqual(self.hx.flowOutWf.T(), 318.22, 2)
Esempio n. 18
0
 def test_CompBasic_size_pRatio(self):
     flowOut = mc.FlowState("air", -1, mc.PT_INPUTS, 550000., 473.80)
     self.comp.update({
         'flowOut': flowOut,
         'm': 9.5,
         'pRatio': -1,
         'sizeAttr': 'pRatio',
         'sizeBounds': [4, 8]
     })
     self.comp.size()
     self.assertAlmostEqual(self.comp.pRatio, 5., 5)
Esempio n. 19
0
    def test_run2(self):
        flowInWf = mc.FlowState("water", 0.1, mc.PT_INPUTS, 1.1e5, 700.)
        flowInSf = mc.FlowState("water", 0.1, mc.PT_INPUTS, 1e5, 500.)

        hLowerBound = flowInWf.h() * 0.99
        hUpperBound = flowInWf.copyUpdateState(mc.PT_INPUTS, 1.1e5, 600.).h()

        self.hx.update({
            'L': 0.1,
            'NPlate': 3,
            'geomWf.b': 1.096e-3,
            'W': 95e-3,
            'flowInWf': flowInWf,
            'flowInSf': flowInSf,
            'sizeUnitsBounds': [1e-5, 5.],
            'runBounds': [hLowerBound, hUpperBound]
        })
        self.hx.run()
        #self.hx.summary(flowKeys='all')
        self.assertAlmostEqual(self.hx.flowOutWf.T(), 643.66, 2)
Esempio n. 20
0
 def test_size_tp(self):
     flowInWf = mc.FlowState("R123", "HEOS", None, 0.34307814292524513,
                             CP.PQ_INPUTS, 1000000., 0.4)
     flowOutWf = mc.FlowState("R123", "HEOS", None, 0.34307814292524513,
                              CP.PQ_INPUTS, 1000000., 0.5)
     flowInSf = mc.FlowState("Air", "HEOS", None, 0.09, CP.PT_INPUTS,
                             111600., 868.7758979999346)
     flowOutSf = mc.FlowState("Air", "HEOS", None, 0.09, CP.PT_INPUTS,
                              111600., 825.2114243937383)
     self.hxUnit.update(flowInWf=flowInWf,
                        flowInSf=flowInSf,
                        flowOutWf=flowOutWf,
                        flowOutSf=flowOutSf)
     #
     self.hxUnit.size("L", [0.001, 0.5])
     self.assertAlmostEqual(
         abs(self.hxUnit.L - 0.003778819723856917) / 0.003778819723856917,
         0, 4)
     #
     self.assertAlmostEqual(
         abs(self.hxUnit.dpFWf - 722.9638885277705) / 722.9638885277705, 0,
         2)
Esempio n. 21
0
 def test_size_vap(self):
     flowInWf = mc.FlowState("R123", "HEOS", None, 0.34307814292524513,
                             CP.PT_INPUTS, 1000000., 409.2350351214396)
     flowOutWf = mc.FlowState("R123", "HEOS", None, 0.34307814292524513,
                              CP.PT_INPUTS, 1000000., 414.3019814953263)
     flowInSf = mc.FlowState("Air", "HEOS", None, 0.09, CP.PT_INPUTS,
                             111600., 1170.)
     flowOutSf = mc.FlowState("Air", "HEOS", None, 0.09, CP.PT_INPUTS,
                              111600., 1155.3292007981324)
     self.hxUnit.update(flowInWf=flowInWf,
                        flowInSf=flowInSf,
                        flowOutWf=flowOutWf,
                        flowOutSf=flowOutSf)
     #
     self.hxUnit.size("L", [0.0001, 0.5])
     self.assertAlmostEqual(
         abs(self.hxUnit.L - 0.0009979724829425561) / 0.0009979724829425561,
         0, 4)
     #
     self.assertAlmostEqual(
         abs(self.hxUnit.dpFWf - 1363.6424738901792) / 1363.6424738901792,
         0, 2)
Esempio n. 22
0
    def test_size_liq(self):
        flowInWf = mc.FlowState("R123", 0.34307814292524513, mc.PT_INPUTS,
                                1000000., 300.57890653991495)
        flowOutWf = mc.FlowState("R123", 0.34307814292524513, mc.PT_INPUTS,
                                 1000000., 305.79345550292123)
        flowInSf = mc.FlowState("Air", 0.09, mc.PT_INPUTS, 111600.,
                                330.77794902610714)
        flowOutSf = mc.FlowState("Air", 0.09, mc.PT_INPUTS, 111600.,
                                 310.57890653991586)
        self.hxUnit.update({
            'flowInWf': flowInWf,
            'flowInSf': flowInSf,
            'flowOutWf': flowOutWf,
            'flowOutSf': flowOutSf
        })
        self.hxUnit._methodHeatWf = "chisholmWannairachchi_sp"
        self.hxUnit._methodFrictionWf = "chisholmWannairachchi_sp"

        self.hxUnit.update({'sizeAttr': 'L', 'sizeBounds': [0.005, 0.5]})
        self.hxUnit.sizeUnits()
        self.assertAlmostEqual(
            abs(self.hxUnit.L - 0.0636564105282744) / 0.0636564105282744, 0, 4)
        self.hxUnit.update({'sizeAttr': 'W', 'sizeBounds': [50e-3, 500e-3]})
        self.hxUnit.sizeUnits()
        self.assertAlmostEqual(self.hxUnit.W, 95e-3, 7)
        self.hxUnit.update({
            'sizeAttr': 'geomWf.b',
            'sizeBounds': [0.1e-3, 10e-3]
        })
        self.hxUnit.sizeUnits()
        self.assertAlmostEqual(
            abs(self.hxUnit.geomWf.b - 1.096e-3) / 1.096e-3, 0, 2)
        #
        self.assertAlmostEqual(
            abs(self.hxUnit._dpFWf() - 7200.2135758720115) /
            7200.2135758720115, 0, 2)
Esempio n. 23
0
class TestCompBasic(unittest.TestCase):
    flowIn = mc.FlowState("air", "HEOS", None, 9.5, CP.PT_INPUTS, 110000., 300)
    comp = mc.CompBasic(5, 1.0, flowIn)

    def test_CompBasic_run(self):
        self.comp.update(pRatio=5, effIsentropic=1.)
        self.comp.run()
        self.assertAlmostEqual(self.comp.flowOut.T, 473.80, 2)
        self.assertAlmostEqual(self.comp.P_in / 1000, 1671.12, 2)

    def test_CompBasic_size_effIsentropic(self):
        flowOut = mc.FlowState("air", "HEOS", None, None, CP.PT_INPUTS,
                               550000., 520)
        self.comp.update(flowOut=flowOut, m=9.5)
        self.comp.size("effIsentropic", [0.5, 0.9])
        self.assertAlmostEqual(self.comp.effIsentropic, 0.787, 3)

    def test_CompBasic_size_pRatio(self):
        flowOut = mc.FlowState("air", "HEOS", None, None, CP.PT_INPUTS,
                               550000., 473.80)
        self.comp.update(flowOut=flowOut, pRatio=None, m=9.5)
        self.comp.size("pRatio", [4, 8])
        self.assertAlmostEqual(self.comp.pRatio, 5., 5)
Esempio n. 24
0
class TestHxPlateCorrChevron(unittest.TestCase):
    hx = mc.HxPlate(
        flowSense="counterflow",
        RfWf=0,
        RfSf=0,
        plate=mc.library.stainlessSteel_316,
        tPlate=0.424e-3,
        geomPlateWf=mc.GeomHxPlateCorrChevron(1.096e-3, 60, 10e-3, 1.117),
        geomPlateSf=mc.GeomHxPlateCorrChevron(1.096e-3, 60, 10e-3, 1.117),
        L=269e-3,
        W=95e-3,
        DPortWf=0.0125,
        DPortSf=0.0125,
        ARatioWf=1,
        ARatioSf=1,
        ARatioPlate=1,
        NPlate=23,
        coeffs_LPlate=[0.056, 1],
        coeffs_WPlate=[0, 1],
        effThermal=1.0,
        config=mc.Config(dpAcc=False, dpPort=False, dpHead=False))
    flowInWf = mc.FlowState("R123", "HEOS", None, 0.34307814292524513,
                            CP.PT_INPUTS, 1000000., 300.57890653991603)
    flowOutWf = mc.FlowState("R123", "HEOS", None, 0.34307814292524513,
                             CP.PT_INPUTS, 1000000., 414.30198149532583)
    flowInSf = mc.FlowState("Air", "HEOS", None, 0.09, CP.PT_INPUTS, 111600.,
                            1170.)
    flowOutSf = mc.FlowState("Air", "HEOS", None, 0.09, CP.PT_INPUTS, 111600.,
                             310.57890653991603)

    def test_0_unitise(self):
        self.hx.update(flowInWf=self.flowInWf,
                       flowInSf=self.flowInSf,
                       flowOutWf=self.flowOutWf,
                       flowOutSf=self.flowOutSf)

        self.hx.unitise()

    def test_1_size_L(self):
        self.hx.update(L=269e-3, NPlate=23, geomPlateWf__b=1.096e-3, W=95e-3)
        self.hx.size("L", [0.005, 0.5])
        self.assertAlmostEqual(abs(self.hx.L - 269e-3) / 269e-3, 0, 2)
        #
        self.assertAlmostEqual(
            abs(self.hx.dpWf - 39607.4552153897) / 39607.4552153897, 0, 2)

    def test_1_size_W(self):
        self.hx.update(L=0.268278920236407,
                       NPlate=23,
                       geomPlateWf__b=1.096e-3,
                       W=95e-3)
        self.hx.size("W", [50e-3, 500e-3])
        self.assertAlmostEqual(abs(self.hx.W - 95e-3) / 95e-3, 0, 4)

    def test_1_size_geomPlateWf_b(self):
        self.hx.update(L=0.268278920236407,
                       NPlate=23,
                       geomPlateWf__b=1.096e-3,
                       W=95e-3)
        self.hx.size("geomPlateWf__b", [0.1e-3, 10e-3])
        self.assertAlmostEqual(abs(self.hx.geomPlateWf.b - 1.096e-3), 0, 4)

    def test_1_size_NPlate(self):
        self.hx.update(L=0.268278920236407,
                       NPlate=23,
                       geomPlateWf__b=1.096e-3,
                       W=95e-3)
        self.hx.size("NPlate", [10, 50])
        self.assertEqual(self.hx.NPlate, 23)

    def test_1_size_L_solution_not_in_bracket_Exception(self):
        self.hx.size("L", [0.5, 5.])
        self.assertRaises(Exception)
Esempio n. 25
0
 def test_FlowState(self):
     flow = mc.FlowState("air", 1.0, mc.PT_INPUTS, 101325., 293.15)
     self.assertAlmostEqual(flow.rho(), 1.205, 3)
     self.assertAlmostEqual(flow.cp() / 1000, 1.006, 3)
     self.assertAlmostEqual(flow.k(), 0.0257, 3)
Esempio n. 26
0
class TestRankineBasic(unittest.TestCase):
    wf = mc.FlowState("R123")
    pEvap = 10.e5
    superheat = 30.
    TCond = 300.
    subcool = 0
    comp = mc.CompBasic(nan, 0.7, sizeAttr="pRatio")
    sourceIn = mc.FlowState("Air", 0.09, mc.PT_INPUTS, 1.116e5, 1170.)
    evap = mc.library.alfaLaval_AC30EQ()
    evap.update({'sizeAttr': "NPlate", 'plate.T': 573.15})
    exp = mc.ExpBasic(nan, 0.7, sizeAttr="pRatio")
    sinkIn = mc.FlowState("Air", 0.20, mc.PT_INPUTS, 0.88260e5, 281.65)
    sinkAmbient = sinkIn.copy()
    sourceAmbient = sinkIn.copy()
    cond = mc.ClrBasic(mc.CONSTANT_P, nan, 1, sizeAttr="QCool")
    config = mc.Config()
    config.update({
        'dpEvap': False,
        'dpCond': False,
        'dpAcc': False,
        'dpPort': False,
        'dpHead': False
    })
    config.set_method("savostinTikhonov_sp", "GeomHxPlateChevron",
                      mc.TRANSFER_ALL, mc.UNITPHASE_ALL, mc.SECONDARY_FLUID)
    cycle = mc.RankineBasic(wf, evap, exp, cond, comp, pEvap, superheat, nan,
                            subcool, config)
    cycle.setAll_config(config)
    cycle.update({
        'TCond': TCond,
        'sourceIn': sourceIn,
        #'sinkIn': sinkIn,
        'sourceAmbient': sourceAmbient,
        #'sinkAmbient': sinkAmbient
    })
    cycle.pptdEvap = 10.

    def test_0_setup_cycle(self):
        self.assertAlmostEqual(self.cycle.pCond, 97797.60828695059, 5)
        self.assertIs(self.cycle.exp.config, self.config)
        self.assertAlmostEqual(self.cycle.mWf, 0.34307814292524513, 10)

    def test_1_size(self):
        self.cycle.update({"config.dpEvap": False, "evap.L": 0.269})
        self.cycle.size()
        self.assertEqual(self.cycle.evap.NPlate, 23)
        self.assertAlmostEqual(
            abs(self.cycle.evap.L - 0.268278920236407), 0, 2)
        self.assertAlmostEqual(self.cycle.comp.pRatio, 10.22519893, 4)
        self.assertAlmostEqual(self.cycle.exp.pRatio, 10.22519893, 4)
        self.assertAlmostEqual(self.cycle.evap.Q(), 83891.17350428084, 4)

    def test_1_size_dpEvap_True(self):
        self.cycle.update({"config.dpEvap": True, "evap.L": 0.269})
        self.cycle.size()
        self.assertAlmostEqual(
            abs(self.cycle.evap.L - 0.268278920236407), 0, 2)
        self.assertAlmostEqual(
            (self.cycle.comp.pRatio - 10.22519893) / 10.22519893, 0, 4)
        self.assertAlmostEqual(
            self.cycle.exp.pRatio,
            (self.cycle.pEvap - 39607.4552153897) / self.cycle.pCond, 4)
        self.assertAlmostEqual(self.cycle.evap.Q(), 83891.17350428084, 4)

    def test_1_run_from_comp(self):
        self.cycle.update({
            "config.dpEvap": False,
            "evap.NPlate": 23,
            "evap.L": 0.269,
            "pRatioExp": 10.22519893,
            "pRatioComp": 10.22519893,
            "cond.QCool": 73582.4417680011
        })
        self.cycle.clearWf_flows()
        rb0 = self.wf.copyUpdateState(mc.PT_INPUTS, self.pEvap,
                                      self.cycle.TEvap + 20.).h()
        rb1 = self.wf.copyUpdateState(mc.PT_INPUTS, self.pEvap,
                                      self.cycle.TEvap + 32.).h()
        self.evap.update({"runBounds": [rb0, rb1]})
        self.cycle.set_state6(
            self.wf.copyUpdateState(mc.QT_INPUTS, 0, self.TCond))
        self.cycle.run()
        self.assertAlmostEqual(
            abs(self.cycle.state4.T() / 3.6047e+02) - 1, 0, 3)
        self.assertAlmostEqual(
            abs(self.cycle.state4.p() / self.cycle.pCond) - 1, 0, 5)
        self.assertAlmostEqual(
            abs(self.cycle.state3.T() / (self.cycle.TEvap + 30)) - 1, 0, 3)

    '''
    def test_1_run_from_comp_dpEvap_True(self):
        self.cycle.update({
            "config.dpEvap": True,
            "evap.NPlate": 23,
            "evap.L": 0.269,
            "exp.pRatio": 9.820204742676,
            "comp.pRatio": 10.22519893,
            "cond.QCool": 73582.4417680011
        })
        self.cycle.clearWf_flows()
        rb0 = self.wf.copyUpdateState(mc.PT_INPUTS, self.pEvap,
                                self.cycle.TEvap + 20.).h()
        rb1 = self.wf.copyUpdateState(mc.PT_INPUTS, self.pEvap,
                                self.cycle.TEvap + 32.).h()
        self.evap.update({"runBounds": [rb0, rb1]})
        self.cycle.set_state6(self.wf.copyUpdateState(mc.QT_INPUTS, 0, self.TCond))
        self.cycle.run()
        self.assertAlmostEqual(
            abs(self.cycle.state4.T() / 3.6047e+02) - 1, 0, 3)
        self.assertAlmostEqual(
            abs(self.cycle.state4.p() / self.cycle.pCond) - 1, 0, 5)
        self.assertAlmostEqual(abs(self.cycle.state3.T() / (413.67)) - 1, 0, 2)
        self.assertAlmostEqual(
            abs(self.cycle.state3.p() / (9.6039e5)) - 1, 0, 1)
    '''

    def test_1_run_from_exp(self):
        self.cycle.update({
            "config.dpEvap": False,
            "evap.NPlate": 23,
            "evap.L": 0.269,
            "pRatioExp": 10.22519893,
            "pRatioComp": 10.22519893,
            "cond.QCool": 73582.4417680011
        })
        self.cycle.clearWf_flows()
        rb0 = self.wf.copyUpdateState(mc.PT_INPUTS, self.pEvap,
                                      self.cycle.TEvap + 20.).h()
        rb1 = self.wf.copyUpdateState(mc.PT_INPUTS, self.pEvap,
                                      self.cycle.TEvap + 32.).h()
        self.evap.update({"runBounds": [rb0, rb1]})
        self.cycle.set_state3(
            self.wf.copyUpdateState(mc.PT_INPUTS, self.cycle.pEvap,
                                    self.cycle.TEvap + 30))
        self.cycle.run()
        self.assertAlmostEqual(
            abs(self.cycle.state4.T() / 3.6047e+02) - 1, 0, 3)
        self.assertAlmostEqual(
            abs(self.cycle.state4.p() / self.cycle.pCond) - 1, 0, 5)
        self.assertAlmostEqual(
            abs(self.cycle.state3.T() / (self.cycle.TEvap + 30)) - 1, 0, 3)

    def test_cycle_plot(self):
        import os
        self.cycle.sizeSetup(True, True)
        self.cycle.plot(
            title="test_cycle_plot",
            show=False,
            savefig=True,
            savefig_name="test_cycle_plot",
            savefig_format="png",
            savefig_folder=".")
        cwd = os.getcwd()
        os.remove("./test_cycle_plot.png")
Esempio n. 27
0
def run_example():
    """run example: zarati2017.py"""
    # ************************************************
    # Set up formatting
    # ************************************************
    # cycle.plot parameters
    plots_folder = "plots"
    plots_format = "png"  # change to "jpg" if preferred
    plots_dpi = 600
    if not os.path.exists(plots_folder):
        os.makedirs(plots_folder)
    # custom format for matplotlib
    mpl.rc("lines", lw=2.0)
    mpl.rc("lines", markersize=2)
    colours = ["blue", "red", "green", "black"]
    linestyles = ["-", "--", "-.", ":"]
    markerstyles = ["o", "v", "s", "^"]

    # ************************************************
    # Set up default cycle parameters
    # ************************************************
    #
    comp = mc.CompBasic(None, 0.9, sizeAttr="pRatio")
    #
    exp = mc.ExpBasic(None, 0.85, sizeAttr="pRatio")
    #
    sourceFluid = "Air"
    sourceIn_m = 5.5
    sourceIn_T = 744.  # from Table 9
    sourceIn_p = 0.37e5  # from cp=1085.4
    sourceIn = mc.FlowState(sourceFluid, "HEOS", None, sourceIn_m,
                            CP.PT_INPUTS, sourceIn_p, sourceIn_T)
    evapGeomPlateWf = mc.GeomHxPlateSmooth(b=0.024375)
    evapGeomPlateSf = mc.GeomHxPlateFinOffset(s=0.008,
                                              h=0.03,
                                              t=0.0002,
                                              l=0.02)
    stainlessSteel = mc.SolidMaterial(rho=8010., k=17.)
    evap = mc.HxPlate(flowSense="counterflow",
                      NPlate=17,
                      RfWf=0,
                      RfSf=0,
                      plate=stainlessSteel,
                      tPlate=0.2e-3,
                      geomPlateWf=evapGeomPlateWf,
                      geomPlateSf=evapGeomPlateSf,
                      L=0.2,
                      W=0.44,
                      effThermal=1.0)
    #
    ambient = mc.isa(mc.ft2m(20000))
    sinkFluid = "Air"
    sinkIn_m = None
    sinkIn_T = ambient.T / mc.TTotalRatio(gamma=1.4,
                                          M=0.49)  # from alt=20000ft
    sinkIn_p = ambient.p / mc.pTotalRatio(gamma=1.4,
                                          M=0.49)  # TODO from alt=20000ft
    sinkIn = mc.FlowState(sinkFluid, "HEOS", None, sinkIn_m, CP.PT_INPUTS,
                          sinkIn_p, sinkIn_T)
    sinkDead = sinkIn.copy()
    sourceDead = mc.FlowState(sourceFluid, "HEOS", None, None, CP.PT_INPUTS,
                              sinkIn_p, sinkIn_T)
    cond = mc.ClrBasicConstP(None, 1, sizeAttr="Q")
    #
    config = mc.Config(dpEvap=False,
                       dpCond=False,
                       dpF=True,
                       dpAcc=False,
                       dpPort=False,
                       dpHead=False)
    config.methods.set("shah_1phase_h", ["GeomHxPlateSmooth"], ["heat"],
                       ["wf"], "all-sp")
    cycle = mc.RankineBasic(wf=mc.FlowState("R245fa", "HEOS", None),
                            evap=evap,
                            exp=exp,
                            cond=cond,
                            comp=comp,
                            TEvap=416.18,
                            superheat=1.,
                            pCond=180.e3,
                            subcool=3.,
                            config=config,
                            sourceIn=sourceIn,
                            sinkIn=sinkIn,
                            sourceDead=sourceDead,
                            sinkDead=sinkDead)

    # ************************************************
    # Computations
    # ************************************************
    mWf_vals = np.linspace(1.0, 10.0, 20)
    plot_x = []
    plot_y0 = []
    plot_y1 = []
    plot_y2 = []
    for m in mWf_vals:
        cycle.update(mWf=m)
        cycle.sizeSetup(True, False)
        try:
            cycle.evap.run()
            print("---------")
            print(cycle.evap.L)
            plot_x.append(m)
            plot_y0.append(cycle.evap.flowOutSf.cp)
            plot_y1.append(cycle.evap.flowOutWf.T)
            plot_y2.append(cycle.evap.dpSf / cycle.evap.flowInSf.p)
        except:
            print("No convergence for m={}".format(m))

    plt.figure()
    plt.plot(plot_x, plot_y0)
    plt.savefig("{}/cp_vs_mWf.{}".format(plots_folder, plots_format))
    plt.figure()
    plt.plot(plot_x, plot_y1)
    plt.savefig("{}/T3Wf_vs_mWf.{}".format(plots_folder, plots_format))
    plt.figure()
    plt.plot(plot_x, plot_y2)
    plt.savefig("{}/dpSf/pSf_vs_mWf.{}".format(plots_folder, plots_format))
    """
Esempio n. 28
0
print("Begin quickstart example...")

# ************************************************
# Set MCycle defaults
# ************************************************
print("Set MCycle defaults...")
mc.defaults.PLOT_DIR = ""
mc.defaults.PLOT_DPI = 200
mc.defaults.check()
print("defaults done.")

print("Begin Rankine cycle setup...")
wf = mc.FlowState(
    fluid="R245fa",
    m=1.0,
    inputPair=mc.PT_INPUTS,
    input1=mc.atm2Pa(1),
    input2=298)
print("  - created working fluid")
exp = mc.ExpBasic(pRatio=1, efficiencyIsentropic=0.9, sizeAttr="pRatio")
print("  - created expander")
cond = mc.ClrBasic(constraint=mc.CONSTANT_P, QCool=1, efficiencyThermal=1.0, sizeAttr="Q")
print("  - created condenser")
comp = mc.CompBasic(pRatio=1, efficiencyIsentropic=0.85, sizeAttr="pRatio")
print("  - created compressor")
evap = mc.HtrBasic(constraint=mc.CONSTANT_P, QHeat=1, efficiencyThermal=1.0, sizeAttr="Q")
print("  - created evaporator")
config = mc.Config()
print("  - created configuration object")
cycle = mc.RankineBasic(
    wf=wf, evap=evap, exp=exp, cond=cond, comp=comp, config=config)
Esempio n. 29
0
 def test_CompBasic_size_pRatio(self):
     flowOut = mc.FlowState("air", "HEOS", None, None, CP.PT_INPUTS,
                            550000., 473.80)
     self.comp.update(flowOut=flowOut, pRatio=None, m=9.5)
     self.comp.size("pRatio", [4, 8])
     self.assertAlmostEqual(self.comp.pRatio, 5., 5)
Esempio n. 30
0
 def test_CompBasic_size_effIsentropic(self):
     flowOut = mc.FlowState("air", "HEOS", None, None, CP.PT_INPUTS,
                            550000., 520)
     self.comp.update(flowOut=flowOut, m=9.5)
     self.comp.size("effIsentropic", [0.5, 0.9])
     self.assertAlmostEqual(self.comp.effIsentropic, 0.787, 3)