Ejemplo n.º 1
0
    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'))
Ejemplo n.º 2
0
    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'))
Ejemplo n.º 3
0
    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'))
Ejemplo n.º 4
0
    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'))
Ejemplo n.º 5
0
    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))
Ejemplo n.º 6
0
    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'))
Ejemplo n.º 7
0
    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))
Ejemplo n.º 8
0
    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'))
Ejemplo n.º 9
0
    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'))
Ejemplo n.º 10
0
 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')
Ejemplo n.º 11
0
    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')
Ejemplo n.º 12
0
    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'))
Ejemplo n.º 13
0
    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'))
Ejemplo n.º 14
0
    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'))
Ejemplo n.º 15
0
    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'))
Ejemplo n.º 16
0
    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'))
Ejemplo n.º 17
0
    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'))
Ejemplo n.º 18
0
    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'))
Ejemplo n.º 19
0
 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)))