def testNoTransient(self): reservoir.modelPressureTransient = False reservoir.modelTemperatureDepletion = False results = reservoir.solve(initialState=initialState) self.assertTrue( *testAssert(results.state.P_Pa, 2.0351e7, 'test2_pressure')) self.assertTrue(*testAssert(results.state.T_C, 102.5, 'test2_temp')) self.assertTrue( *testAssert(results.state.h_Jkg, 4.30e5, 'test2_enthalpy')) self.assertTrue(*testAssert(results.psi, 1.0151, 'test2_Psi'))
def testTransientPT(self): reservoir.modelPressureTransient = True reservoir.modelTemperatureDepletion = True results = reservoir.solve(initialState=initialState) self.assertTrue( *testAssert(results.state.P_Pa, 1.9325e7, 'test4_pressure')) self.assertTrue(*testAssert(results.state.T_C, 71.7201, 'test4_temp')) self.assertTrue( *testAssert(results.state.h_Jkg, 3.5732e5, 'test4_enthalpy')) self.assertTrue(*testAssert(results.psi, 0.8457, 'test4_Psi'))
def testTransientPNoT(self): reservoir.modelPressureTransient = False reservoir.modelTemperatureDepletion = True results = reservoir.solve(initialState=initialState) self.assertTrue( *testAssert(results.state.P_Pa, 2.0351e7, 'test3_pressure')) self.assertTrue(*testAssert(results.state.T_C, 71.7201, 'test3_temp')) self.assertTrue( *testAssert(results.state.h_Jkg, 3.5324e5, 'test3_enthalpy')) self.assertTrue(*testAssert(results.psi, 0.8457, 'test3_Psi'))
def testTransientTNoP(self): reservoir.modelPressureTransient = False reservoir.modelTemperatureDepletion = True reservoir.params.m_dot_IP = 200 results = reservoir.solve(initialState=initialState) self.assertTrue( *testAssert(results.state.P_Pa, 1.5702e7, 'test5_pressure')) self.assertTrue(*testAssert(results.state.T_C, 55.8873, 'test5_temp')) self.assertTrue( *testAssert(results.state.h_Jkg, 3.2876e5, 'test5_enthalpy')) self.assertTrue(*testAssert(results.psi, 1.2962, 'test5_Psi'))
def testFluidSystemWaterSolverOptMdot(self): params = SimulationParameters(working_fluid = 'water', orc_fluid = 'R245fa', capacity_factor = 0.9) full_system = FullSystemORC.getDefaultWaterSystem(params) full_system_solver = FullSystemSolver(full_system) output = full_system_solver.solve() self.assertTrue(*testAssert(output.optMdot, 21.9823, 'test_optMdot_solver_optMdot', 1e-3)) self.assertTrue(*testAssert(output.energy_results.W_net, 1.5212e5, 'test_optMdot_solver_w_net', 1e-3)) self.assertTrue(*testAssert(output.capital_cost_model.LCOE_brownfield.LCOE, 5.4633e-4, 'test_optMdot_solver_brownfield', 1e-3))
def testORCCycleTboil(self): initialState = FluidState.getStateFromPT(1.e6, 150., 'water') results = cycle.solve(initialState, T_boil_C=100., dT_pinch=5.) self.assertTrue(*testAssert(results.state.T_C, 68.36, 'test1_temp')) self.assertTrue(*testAssert(results.w_net, 3.8559e4, 'test1_w_net')) self.assertTrue( *testAssert(results.w_turbine, 4.7773e4, 'test1_w_turbine')) self.assertTrue( *testAssert(results.q_preheater, 1.5778e5, 'test1_q_preheater')) self.assertTrue( *testAssert(results.q_boiler, 1.9380e5, 'test1_q_boiler'))
def testFluidSystemCO2SolverOptMdot(self): params = SimulationParameters(working_fluid='co2', capacity_factor=0.9) full_system = FullSystemCPG.getDefaultCPGSystem(params) full_system_solver = FullSystemSolver(full_system) output = full_system_solver.solve() self.assertTrue(*testAssert(output.optMdot, 54.8493, 'test_optMdot_solver_optMdot', 1e-3)) self.assertTrue(*testAssert(output.energy_results.W_net, 4.5411e5, 'test_optMdot_solver_w_net', 1e-3)) self.assertTrue(*testAssert( output.capital_cost_model.LCOE_brownfield.LCOE, 2.3915e-4, 'test_optMdot_solver_LCOE_brownfield', 1e-3))
def testDepletionCurve(self): Psi_1 = 2. p1 = -1.9376 p2 = 1.743 p3 = 0.182 gamma = np.round(depletionCurve(Psi_1, p1, p2, p3), 4) self.assertTrue(*testAssert(gamma, 0.2531, 'testDepletionCurve'))
def testHeatExchanger(self): T_1_in = 50. P_1 = 4.e6 m_dot_1 = 1.5 fluid_1 = 'R245fa' T_2_in = 170. m_dot_2 = 1. fluid_2 = 'Water' P_2 = FluidState.getStateFromTQ(T_2_in, 0, fluid_2).P_Pa + 100e3 dT_pinch = 5. results = heatExchanger(T_1_in, P_1, m_dot_1, fluid_1, T_2_in, P_2, m_dot_2, fluid_2, dT_pinch) self.assertTrue(*testAssert(results.Q_exchanged, 303373.3383, 'testHeatExchanger_Q_exchanged')) self.assertTrue(*testAssert(results.dT_LMTD, 11.48176, 'testHeatExchanger_dT_LMTD')) self.assertTrue(*testAssert(results.T_1_out, 159.2937, 'testHeatExchanger_T_1_out')) self.assertTrue(*testAssert(results.T_2_out, 99.01979, 'testHeatExchanger_T_2_out')) self.assertTrue( *testAssert(results.T_1[3], 71.79053, 'testHeatExchanger_T_1')) self.assertTrue( *testAssert(results.T_2[3], 109.80985, 'testHeatExchanger_T_2')) self.assertTrue( *testAssert(results.Q[3], 45526.17687, 'testHeatExchanger_Q'))
def testParasiticPowerFraction(self): parasiticPowerFraction = CoolingCondensingTower.parasiticPowerFraction( 15., 7., 25., CoolingCondensingTowerMode.Wet) self.assertTrue(*testAssert(parasiticPowerFraction('cooling'), 0.016025303571428565, 'Wet - cooling')) self.assertTrue(*testAssert(parasiticPowerFraction('condensing'), 0.02685987257142855, 'Wet - condensing')) self.assertRaises(Exception, parasiticPowerFraction, 'heating') parasiticPowerFraction = CoolingCondensingTower.parasiticPowerFraction( 15., 7., 25., CoolingCondensingTowerMode.Dry) self.assertTrue(*testAssert(parasiticPowerFraction('cooling'), 0.11328571428571428, 'Dry - cooling')) self.assertTrue(*testAssert(parasiticPowerFraction('condensing'), 0.08842857142857143, 'Dry - condensing')) self.assertRaises(Exception, parasiticPowerFraction, 'heating') self.assertRaises(Exception, CoolingCondensingTower.parasiticPowerFraction, 15., 7., 25., 'Mix')
def testFluidSystemCO2Mdot200(self): params = SimulationParameters(working_fluid='co2', capacity_factor=0.9) params.m_dot_IP = 200 output = FullSystemCPG.getDefaultCPGSystem(params).solve() self.assertTrue(*testAssert(output.fluid_system_solver.pp.dP_surface, 3.468765e+06, 'test_dP_surface')) self.assertTrue( *testAssert(output.fluid_system_solver.production_well.state.T_C, 47.6070, 'test_T_prod_surface_C')) self.assertTrue( *testAssert(output.energy_results.W_net, -1.3875e6, 'test_W_net')) self.assertTrue(*testAssert(output.capital_cost_model.C_brownfield, 5.0443e7, 'test_C_brownfield_N')) self.assertTrue(*testAssert(output.capital_cost_model.C_greenfield, 7.3073e7, 'test_C_greenfield_N')) self.assertTrue( np.isnan(output.capital_cost_model.LCOE_brownfield.LCOE), 'test_LCOE_brownfield')
def testFluidSystemWaterSolverMdot40(self): params = SimulationParameters(working_fluid = 'water', orc_fluid = 'R245fa', capacity_factor = 0.9) params.m_dot_IP = 40 output = FullSystemORC.getDefaultWaterSystem(params).solve() self.assertTrue(*testAssert(output.fluid_system_solver.pump.well.state.P_Pa, 7.9610e6, 'test_subsurface_solver2_pressure')) self.assertTrue(*testAssert(output.fluid_system_solver.pump.well.state.T_C, 100.3125, 'test_subsurface_solver2_temp')) self.assertTrue(*testAssert(output.energy_results.W_net, 1.4286e+05, 'test_subsurface_solver2_w_net')) self.assertTrue(*testAssert(output.capital_cost_model.C_brownfield, 2.3287e7, 'test_solver2_C_brownfield_N')) self.assertTrue(*testAssert(output.capital_cost_model.C_greenfield, 3.6399062e7, 'test_solver2_C_greenfield_N')) self.assertTrue(*testAssert(output.capital_cost_model.LCOE_brownfield.LCOE, 7.8465e-4, 'test_solver2_LCOE_brownfield'))
def testFluidSystemWaterSolverMdot1(self): params = SimulationParameters(working_fluid = 'water', orc_fluid = 'R245fa', capacity_factor = 0.9) params.m_dot_IP = 1 output = FullSystemORC.getDefaultWaterSystem(params).solve() self.assertTrue(*testAssert(output.fluid_system_solver.pump.well.state.P_Pa, 7.84791e5, 'test_subsurface_solver1_pressure')) self.assertTrue(*testAssert(output.fluid_system_solver.pump.well.state.T_C, 81.2595, 'test_subsurface_solver1_temp')) self.assertTrue(*testAssert(output.energy_results.W_net, 5.2775e3, 'test_subsurface_solver1_w_net')) self.assertTrue(*testAssert(output.capital_cost_model.C_brownfield, 9.1965e6, 'test_solver1_C_brownfield_N')) self.assertTrue(*testAssert(output.capital_cost_model.C_greenfield, 2.2308e7, 'test_solver1_C_greenfield_N')) self.assertTrue(*testAssert(output.capital_cost_model.LCOE_brownfield.LCOE, 0.0083879, 'test_solver1_LCOE_brownfield'))
def testFluidSystemCO2Mdot80(self): params = SimulationParameters(working_fluid='co2', capacity_factor=0.9) params.m_dot_IP = 80 output = FullSystemCPG.getDefaultCPGSystem(params).solve() self.assertTrue(*testAssert(output.fluid_system_solver.pp.dP_surface, 5.6501e6, 'test_dP_surface')) self.assertTrue( *testAssert(output.fluid_system_solver.production_well.state.T_C, 59.0540, 'test_T_prod_surface_C')) self.assertTrue( *testAssert(output.energy_results.W_net, 4.9940e+05, 'test_W_net')) self.assertTrue(*testAssert(output.capital_cost_model.C_brownfield, 2.7650e7, 'test_C_brownfield_N')) self.assertTrue(*testAssert(output.capital_cost_model.C_greenfield, 5.0280e7, 'test_C_greenfield_N')) self.assertTrue( *testAssert(output.capital_cost_model.LCOE_brownfield.LCOE, 2.6650e-4, 'test_LCOE_brownfield'))
def testFluidSystemCO2Mdot10(self): params = SimulationParameters(working_fluid='co2', capacity_factor=0.9) params.m_dot_IP = 10 output = FullSystemCPG.getDefaultCPGSystem(params).solve() self.assertTrue(*testAssert(output.fluid_system_solver.pp.dP_surface, 5.9421e6, 'test_dP_surface')) self.assertTrue( *testAssert(output.fluid_system_solver.production_well.state.T_C, 59.2802, 'test_T_prod_surface_C')) self.assertTrue( *testAssert(output.energy_results.W_net, 9.7662e4, 'test_W_net')) self.assertTrue(*testAssert(output.capital_cost_model.C_brownfield, 1.3271e7, 'test_C_brownfield_N')) self.assertTrue(*testAssert(output.capital_cost_model.C_greenfield, 3.5901e7, 'test_C_greenfield_N')) self.assertTrue( *testAssert(output.capital_cost_model.LCOE_brownfield.LCOE, 6.5410e-4, 'test_LCOE_brownfield'))
def testFluidSystemCO2Mdot100(self): params = SimulationParameters(working_fluid='co2', capacity_factor=0.9) params.m_dot_IP = 100 params.depth = 2400. params.permeability = 1e-8 / 100. output = FullSystemCPG.getDefaultCPGSystem(params).solve() self.assertTrue(*testAssert(output.fluid_system_solver.pp.dP_surface, 5.0019e6, 'test_dP_surface')) self.assertTrue( *testAssert(output.fluid_system_solver.production_well.state.T_C, 55.3144, 'test_T_prod_surface_C')) self.assertTrue(*testAssert(output.fluid_system_solver.pp.dP_pump, -1.0756e6, 'test_dP_pump')) self.assertTrue( *testAssert(output.energy_results.W_net, 8.2656e5, 'test_W_net')) self.assertTrue(*testAssert(output.capital_cost_model.C_brownfield, 2.6182e7, 'test_C_brownfield_N')) self.assertTrue(*testAssert(output.capital_cost_model.C_greenfield, 4.8021e7, 'test_C_greenfield_N')) self.assertTrue( *testAssert(output.capital_cost_model.LCOE_brownfield.LCOE, 1.5247e-4, 'test_LCOE_brownfield'))
def testORCCycleSupercritPboil(self): params = SimulationParameters(orc_fluid = 'R245fa') cycle = ORCCycleSupercritPboil(params = params) initialState = FluidState.getStateFromPT(1.e6, 190., 'water') results = cycle.solve(initialState = initialState, P_boil_Pa = 5e6) self.assertTrue(*testAssert(results.dT_range_CT, 6.8948, 'test1_dT_range_CT')) self.assertTrue(*testAssert(results.w_pump, -1.9676e+03, 'test1_w_pump')) self.assertTrue(*testAssert(results.q_boiler, 1.2030e+05, 'test1_q_boiler')) self.assertTrue(*testAssert(results.w_turbine, 2.4353e+04, 'test1_w_turbine')) self.assertTrue(*testAssert(results.q_recuperator, 9.8023e+03, 'test1_q_recuperator')) self.assertTrue(*testAssert(results.q_desuperheater, -3.0484e+03, 'test1_q_desuperheater')) self.assertTrue(*testAssert(results.q_condenser, -9.4878e+04, 'test1_q_condenser')) self.assertTrue(*testAssert(results.w_cooler, -51.2720, 'test1_w_cooler')) self.assertTrue(*testAssert(results.w_condenser, -2.5484e+03, 'test1_w_condenser')) self.assertTrue(*testAssert(results.w_net, 1.9786e+04, 'test1_w_net')) self.assertTrue(*testAssert(results.state.T_C, 73.7974, 'test1_end_T_C')) self.assertTrue(*testAssert(results.dT_LMTD_boiler, 9.6698, 'test1_dT_LMTD_boiler')) self.assertTrue(*testAssert(results.dT_LMTD_recuperator, 7.4340, 'test1_dT_LMTD_recuperator'))
def testHeatExchangerOptMdot(self): T_1_in = 50. P_1 = 4.e6 fluid_1 = 'R245fa' T_2_in = 170. fluid_2 = 'Water' P_2 = FluidState.getStateFromTQ(T_2_in, 0, fluid_2).P_Pa + 100e3 dT_pinch = 5. T_min = 165. maximizeHeatFromStream = '2' results = heatExchangerOptMdot(T_1_in, P_1, fluid_1, T_2_in, P_2, fluid_2, dT_pinch, T_min, maximizeHeatFromStream) self.assertTrue(*testAssert(results.Q_exchanged, 229529.519513, 'testHeatExchangerOptMdot_Q_exchanged')) self.assertTrue(*testAssert(results.dT_LMTD, 12.601838, 'testHeatExchangerOptMdot_dT_LMTD')) self.assertTrue(*testAssert(results.T_1_out, 163.475171347679, 'testHeatExchangerOptMdot_T_1_out')) self.assertTrue(*testAssert(results.T_2_out, 131.20944977165277, 'testHeatExchangerOptMdot_T_2_out')) self.assertTrue(*testAssert(results.T_1[3], 74.66059924618094, 'testHeatExchangerOptMdot_T_1')) self.assertTrue(*testAssert(results.T_2[3], 137.08472742745016, 'testHeatExchangerOptMdot_T_2')) self.assertTrue(*testAssert(results.Q[3], 34450.560624389356, 'testHeatExchangerOptMdot_Q')) self.assertTrue(*testAssert(results.q_exchanged_1, 229529.51951325324, 'testHeatExchangerOptMdot_q_exchanged_1')) self.assertTrue(*testAssert(results.q_exchanged_2, 167077.85548339653, 'testHeatExchangerOptMdot_q_exchanged_2')) self.assertTrue(*testAssert(results.mdot_ratio, 1.3737878, 'testHeatExchangerOptMdot_mdot_ratio')) self.assertTrue(*testAssert(results.m_dot_1, 1, 'testHeatExchangerOptMdot_m_dot_1')) self.assertTrue(*testAssert(results.m_dot_2, 1.3737878, 'testHeatExchangerOptMdot_m_dot_2'))
def assertMessages(self, fluid, pressure, temperature, enthalpy): self.assertTrue(*testAssert(*(*pressure, '%s_Pressure'%fluid))) self.assertTrue(*testAssert(*(*temperature, '%s_Temp'%fluid))) self.assertTrue(*testAssert(*(*enthalpy, '%s_Enthalpy'%fluid)))