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")
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)
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)
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()
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")
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. })
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"],