Example #1
0
def run_plot():
    """Example of RankineBasic.plot()."""
    print("Begin plotting design cycle ...")
    cycle.update({
        'cond': mc.library.alfaLaval_CBXP27(),
        'pptdEvap': 300,
        'sinkIn': sinkIn,
        'sinkIn.m': 100.
    })
    #cycle.sinkIn.m = 100.
    cycle.sizeSetup(False, False)
    print("Create plots in ./{} folder...".format(mc.DEFAULTS.PLOT_DIR))
    cycle.plot(graph='Ts',
               title='Design conditions plot',
               linestyle='-',
               marker='.',
               satCurve=True,
               newFig=True,
               show=False,
               savefig=True,
               savefig_name='hughes2017_plot_RankineBasic')
    print("  - plot saved in {}/plot_RankineBasic.{}".format(
        mc.DEFAULTS.PLOT_DIR, mc.DEFAULTS.PLOT_FORMAT))
    cycle.sinkIn.m = nan
    cycle.cond = mc.ClrBasic(constraint=mc.CONSTANT_P,
                             -1,
                             0.7,
                             sizeAttr="pRatio")
    print("End plotting design cycle")
Example #2
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)
Example #3
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)
Example #4
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()
Example #5
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")
Example #6
0
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)
cycle.update({
    "pEvap": mc.bar2Pa(10),
    "superheat": 10.,
    "TCond": mc.degC2K(25),
    "subcool": 5.
})
Example #7
0
sourceRefData = mc.RefData(sourceFluid,
                           2,
                           sourceIn_p, {'T': TData},
                           phaseCP=CP.iphase_gas)
sourceIn = mc.FlowStatePoly(sourceRefData, 0.09, CP.PT_INPUTS, sourceIn_p,
                            sourceIn_T)
sourceAmbient = mc.FlowState(sourceFluid, CP.iphase_gas, -1, CP.PT_INPUTS,
                             0.88260e5, 281.65)

evap = mc.library.alfaLaval_AC30EQ(sizeAttr="NPlate")
print("  - created evaporator")
exp = mc.ExpBasic(-1, 0.7, sizeAttr="pRatio")
print("  - created expander")
sinkIn = mc.FlowState("Air", -1, -1, CP.PT_INPUTS, 0.88260e5, 281.65)
sinkAmbient = sinkIn.copy()
cond = mc.ClrBasic(constraint=mc.CONSTANT_P, -1, 1, sizeAttr="Q")
print("  - created condenser")
config = mc.Config()
config.update({
    'dpEvap': False,
    'dpCond': False,
    'dpF': True,
    'dpAcc': False,
    'dpPort': False,
    'dpHead': False
})
config.set_method("chisholmWannairachchi_sp", ["GeomHxPlateCorrugatedChevron"],
                  ["all"], ["all-sp"], ["wf"])
config.set_method("yanLin_tpEvap", ["GeomHxPlateCorrugatedChevron"], ["all"],
                  ["tpEvap"], ["wf"])
config.set_method("savostinTikhonov_sp", ["GeomHxPlateCorrugatedChevron"],