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)
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)
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")
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)
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_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()
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)
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_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)
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)
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)
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)
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)
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)
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)
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_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)
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)
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)
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)
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)
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)
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)
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)
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)
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")
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)) """
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)
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)
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)