diff --git a/src/geophires_x/AGSWellBores.py b/src/geophires_x/AGSWellBores.py index e4375938..df966a4a 100644 --- a/src/geophires_x/AGSWellBores.py +++ b/src/geophires_x/AGSWellBores.py @@ -871,12 +871,12 @@ def CalculateNonverticalPressureDrop(self, model:Model, time_operation: float, t # nonvertical wellbore fluid conditions based on current temperature rhowater = density_water_kg_per_m3( self.NonverticalProducedTemperature.value[year], - pressure=model.reserv.lithostatic_pressure() + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) muwater = viscosity_water_Pa_sec( self.NonverticalProducedTemperature.value[year], - pressure=model.reserv.lithostatic_pressure() + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) vhoriz = self.q_circulation / rhowater / (math.pi / 4. * self.nonverticalwellborediameter.value ** 2) @@ -957,15 +957,15 @@ def Calculate(self, model: Model) -> None: # MIR figure out how to calculate year and extract Tini from reserv Tresoutput array year = math.trunc(self.time_operation.value / self.al) self.NonverticalProducedTemperature.value[year] = inverselaplace( - self, 16, 0, model.reserv.lithostatic_pressure()) + self, 16, 0, model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value)) # update alpha_fluid value based on next temperature of reservoir self.alpha_fluid = self.WaterThermalConductivity.value / density_water_kg_per_m3( self.NonverticalProducedTemperature.value[year], - pressure=model.reserv.lithostatic_pressure() + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) / heat_capacity_water_J_per_kg_per_K( self.NonverticalProducedTemperature.value[year], - pressure=model.reserv.lithostatic_pressure() + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) * 24.0 * 3600.0 self.time_operation.value += self.al @@ -979,7 +979,7 @@ def Calculate(self, model: Model) -> None: self.ProdTempDrop.value = self.tempdropprod.value model.reserv.cpwater.value = heat_capacity_water_J_per_kg_per_K( self.NonverticalProducedTemperature.value[0], - pressure=model.reserv.lithostatic_pressure() + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) if self.rameyoptionprod.value: self.ProdTempDrop.value = RameyCalc(model.reserv.krock.value, @@ -1002,13 +1002,13 @@ def Calculate(self, model: Model) -> None: if self.productionwellpumping.value: self.rhowaterinj = density_water_kg_per_m3( model.reserv.Tsurf.value, - pressure=model.reserv.lithostatic_pressure() + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) * np.linspace(1, 1, len(self.ProducedTemperature.value)) self.rhowaterprod = density_water_kg_per_m3( model.reserv.Trock.value, - pressure=model.reserv.lithostatic_pressure() + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) * np.linspace(1, 1, len(self.ProducedTemperature.value)) self.DPProdWell.value, f3, vprod, self.rhowaterprod = WellPressureDrop(model, @@ -1113,13 +1113,13 @@ def Calculate(self, model: Model) -> None: rho_water = density_water_kg_per_m3( self.Tout[0], - pressure = model.reserv.lithostatic_pressure(), + pressure = model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value), ) model.reserv.cpwater.value = heat_capacity_water_J_per_kg_per_K( self.Tout[0], - pressure=model.reserv.lithostatic_pressure(), + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value), ) # Need this for surface plant output calculation # set pumping power to zero for all times, assuming that the thermosphere wil always diff --git a/src/geophires_x/CylindricalReservoir.py b/src/geophires_x/CylindricalReservoir.py index bc5b1710..6ecf8225 100644 --- a/src/geophires_x/CylindricalReservoir.py +++ b/src/geophires_x/CylindricalReservoir.py @@ -244,20 +244,20 @@ def Calculate(self, model: Model) -> None: ) / 1e15 # 10^15 J self.cpwater.value = heat_capacity_water_J_per_kg_per_K( model.wellbores.Tinj.value * 0.5 + (self.Trock.value * 0.9 + model.wellbores.Tinj.value * 0.1) * 0.5, - pressure=model.reserv.lithostatic_pressure() + pressure=self.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) self.rhowater.value = density_water_kg_per_m3( model.wellbores.Tinj.value * 0.5 + (self.Trock.value * 0.9 + model.wellbores.Tinj.value * 0.1) * 0.5, - pressure=model.reserv.lithostatic_pressure() + pressure=self.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.Trock.value) ) model.logger.info(f'complete {str(__class__)}: {sys._getframe().f_code.co_name}') - def lithostatic_pressure(self) -> PlainQuantity: + #def lithostatic_pressure(self) -> PlainQuantity: """ @override Standard reservoir implementation uses depth but CylindricalReservoir sets depth to total drilled length """ - return quantity(static_pressure_MPa(self.rhorock.quantity().to('kg/m**3').magnitude, - self.InputDepth.quantity().to('m').magnitude), 'MPa') + def lithostatic_pressure(self, rho_rock: float, depth: float) -> PlainQuantity: + return quantity(static_pressure_MPa(rho_rock, depth), 'MPa') diff --git a/src/geophires_x/Outputs.py b/src/geophires_x/Outputs.py index f580112d..d01dc384 100644 --- a/src/geophires_x/Outputs.py +++ b/src/geophires_x/Outputs.py @@ -1005,9 +1005,9 @@ def PrintOutputs(self, model: Model): reservoir_parameters.append(OutputTableItem('Reservoir impedance', '{0:10.2f}'.format(model.wellbores.impedance.value / 1000), model.wellbores.impedance.CurrentUnits.value)) else: - reservoir_parameters.append(OutputTableItem('Reservoir hydrostatic pressure', - '{0:10.2f}'.format(model.wellbores.Phydrostaticcalc.value), - model.wellbores.Phydrostaticcalc.CurrentUnits.value)) + reservoir_parameters.append(OutputTableItem('Average reservoir pressure', + '{0:10.2f}'.format(np.average(model.wellbores.production_reservoir_pressure.value)), + model.wellbores.production_reservoir_pressure.CurrentUnits.value)) reservoir_parameters.append(OutputTableItem('Plant outlet pressure', '{0:10.2f}'.format( model.surfaceplant.plant_outlet_pressure.value), model.surfaceplant.plant_outlet_pressure.CurrentUnits.value)) @@ -1672,7 +1672,7 @@ def PrintOutputs(self, model: Model): if model.wellbores.impedancemodelused.value: f.write(f' Reservoir impedance: {model.wellbores.impedance.value/1000:10.2f} ' + model.wellbores.impedance.CurrentUnits.value + NL) else: - f.write(f' Reservoir hydrostatic pressure: {model.wellbores.Phydrostaticcalc.value:10.2f} ' + model.wellbores.Phydrostaticcalc.CurrentUnits.value + NL) + f.write(f' Average reservoir pressure: {np.average(model.wellbores.production_reservoir_pressure.value):10.2f} ' + model.wellbores.production_reservoir_pressure.CurrentUnits.value + NL) f.write(f' Plant outlet pressure: {model.surfaceplant.plant_outlet_pressure.value:10.2f} ' + model.surfaceplant.plant_outlet_pressure.CurrentUnits.value + NL) if model.wellbores.productionwellpumping.value: f.write(f' Production wellhead pressure: {model.wellbores.Pprodwellhead.value:10.2f} ' + model.wellbores.Pprodwellhead.CurrentUnits.value + NL) diff --git a/src/geophires_x/Reservoir.py b/src/geophires_x/Reservoir.py index 049c15ac..03e4b727 100644 --- a/src/geophires_x/Reservoir.py +++ b/src/geophires_x/Reservoir.py @@ -749,12 +749,14 @@ def Calculate(self, model: Model) -> None: # calculate reservoir water properties self.cpwater.value = heat_capacity_water_J_per_kg_per_K( model.wellbores.Tinj.value * 0.5 + (self.Trock.value * 0.9 + model.wellbores.Tinj.value * 0.1) * 0.5, - pressure=self.lithostatic_pressure() + pressure=self.lithostatic_pressure(self.rhorock.quantity().to('kg/m**3').magnitude, + self.depth.quantity().to('m').magnitude) ) self.rhowater.value = density_water_kg_per_m3( model.wellbores.Tinj.value * 0.5 + (self.Trock.value * 0.9 + model.wellbores.Tinj.value * 0.1) * 0.5, - pressure=self.lithostatic_pressure() + pressure=self.lithostatic_pressure(self.rhorock.quantity().to('kg/m**3').magnitude, + self.depth.quantity().to('m').magnitude) ) # temperature gain in injection wells @@ -766,8 +768,7 @@ def Calculate(self, model: Model) -> None: model.logger.info(f'complete {str(__class__)}: {sys._getframe().f_code.co_name}') - def lithostatic_pressure(self) -> PlainQuantity: - return quantity(static_pressure_MPa(self.rhorock.quantity().to('kg/m**3').magnitude, - self.depth.quantity().to('m').magnitude), 'MPa') + def lithostatic_pressure(self, rho_rock: float, depth: float) -> PlainQuantity: + return quantity(static_pressure_MPa(rho_rock, depth), 'MPa') diff --git a/src/geophires_x/Units.py b/src/geophires_x/Units.py index 780f14d5..b6d60561 100644 --- a/src/geophires_x/Units.py +++ b/src/geophires_x/Units.py @@ -58,6 +58,8 @@ class Units(IntEnum): POWERPERUNITAREA = auto() HEATPERUNITVOLUME = auto() POWERPERUNITVOLUME = auto() + DECAY_RATE=auto() + INFLATION_RATE=auto() class TemperatureUnit(str, Enum): @@ -129,7 +131,7 @@ class EnergyUnit(str, Enum): class PowerUnit(str, Enum): - """Power (electrcity or heat) Units""" + """Power (electricity or heat) Units""" W = "W" KW = "kW" MW = "MW" @@ -338,3 +340,13 @@ class HeatPerUnitVolumeUnit(str,Enum): class PowerPerUnitVolumeUnit(str,Enum): """Population Density Units""" MWPERCUBICKM = "MW/km**3" + + +class Decay_RateUnit(str,Enum): + """Decay rate Units""" + PERCENTPERYEAR = "%/yr" + + +class Inflation_RateUnit(str,Enum): + """Decay rate Units""" + KPASCALPERYEAR = "kPa/yr" diff --git a/src/geophires_x/WellBores.py b/src/geophires_x/WellBores.py index 4529281f..90ae0349 100644 --- a/src/geophires_x/WellBores.py +++ b/src/geophires_x/WellBores.py @@ -11,6 +11,82 @@ from .OptionList import ReservoirModel +def InjectionReservoirPressurePredictor(project_lifetime: int, timesteps_per_year: int, initial_pressure: float, + inflation_rate: float) -> list: + """ + InjectionReservoirPressurePredictor builds the Injection Reservoir Pressure Array for the project lifetime + based on the initial (perhaps hydrostatic) pressure and the inflation rate. There is no limit to how high the + pressure can go. + :param project_lifetime: The lifetime of the project in years + :type project_lifetime: int + :param timesteps_per_year: The number of timesteps per year + :type timesteps_per_year: int + :param initial_pressure: The initial pressure in kPa + :type initial_pressure: float + :param inflation_rate: The inflation rate in %/yr + :type inflation_rate: float + :return: pressure: The pressure array as a function of time. + :rtype: list + """ + + # Initialize the pressure array with the initial hydrostatic pressure + pressure = [initial_pressure] * project_lifetime * timesteps_per_year + + # If the overpressure percentage is 0, + # return the hydrostatic pressure array as a constant value equal to the initial hydrostatic pressure + if inflation_rate == 0: + return pressure + + # Calculate the initial pressure + pressure[0] = initial_pressure + pressure_change_per_timestep = inflation_rate / timesteps_per_year + for timestep in range(1, project_lifetime * timesteps_per_year, 1): + pressure[timestep] = initial_pressure + (pressure_change_per_timestep * timestep) + return pressure + + +def ReservoirPressurePredictor(project_lifetime: int, timesteps_per_year: int, initial_pressure: float, + overpressure_percentage: float, depletion_rate: float) -> list: + """ + ReservoirPressurePredictor builds the Reservoir Pressure Array for the project lifetime based on the initial + (likely hydrostatic) pressure. the overpressure percentage and the depletion rate. Don't let the pressure drop + below the initial pressure. + :param project_lifetime: The lifetime of the project in years + :type project_lifetime: int + :param timesteps_per_year: The number of timesteps per year + :type timesteps_per_year: int + :param initial_pressure: The hydrostatic pressure in kPa + :type initial_pressure: float + :param overpressure_percentage: The overpressure percentage in % + :type overpressure_percentage: float + :param depletion_rate: The depletion rate in %/yr + :type depletion_rate: float + :return: hydrostatic_pressure: The hydrostatic pressure array as a function of time. + :rtype: list + """ + + # Initialize the hydrostatic pressure array with the initial hydrostatic pressure + pressure = [initial_pressure] * project_lifetime * timesteps_per_year + + # If the overpressure percentage is 0, + # return the hydrostatic pressure array as a constant value equal to the initial pressure + if overpressure_percentage == 100.0: + return pressure + + # Calculate the initial overpressure + pressure[0] = initial_pressure * (overpressure_percentage / 100) + delta_pressure = (pressure[0] - initial_pressure) + depletion_timesteps = int((100.0 / depletion_rate) * timesteps_per_year) + pressure_change_per_timestep = delta_pressure / depletion_timesteps + for timestep in range(1, depletion_timesteps, 1): + pressure[timestep] = pressure[0] - (pressure_change_per_timestep * timestep) + if pressure[timestep] < initial_pressure: + # If the pressure drops below the hydrostatic pressure, set it to the hydrostatic pressure and break out + pressure[timestep] = initial_pressure + break + return pressure + + def RameyCalc(krock: float, rhorock: float, cprock: float, welldiam: float, tv, utilfactor: float, flowrate: float, cpwater: float, Trock: float, Tresoutput: float, averagegradient: float, depth: float) -> float: """ @@ -88,7 +164,7 @@ def WellPressureDrop(model: Model, Taverage: float, wellflowrate: float, welldia rhowater = np.array([ density_water_kg_per_m3( t, - pressure=model.reserv.lithostatic_pressure(), + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.depth.value), ) for t in Taverage ]) # replace with correlation based on Tprodaverage @@ -96,7 +172,7 @@ def WellPressureDrop(model: Model, Taverage: float, wellflowrate: float, welldia muwater = np.array([ viscosity_water_Pa_sec( t, - pressure=model.reserv.lithostatic_pressure(), + pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, model.reserv.depth.value), ) for t in Taverage ]) # replace with correlation based on Tprodaverage @@ -152,11 +228,13 @@ def InjectionWellPressureDrop(model: Model, Taverage: float, wellflowrate: float """ # start by calculating wellbore fluid conditions [kPa], noting that most temperature drop happens in # upper section (because surrounding rock temperature is lowest in upper section) - rhowater = (density_water_kg_per_m3(Taverage, pressure=model.reserv.lithostatic_pressure()) + rhowater = (density_water_kg_per_m3(Taverage, pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, + model.reserv.depth.value)) * np.linspace(1, 1, len(model.wellbores.ProducedTemperature.value))) # replace with correlation based on Tinjaverage - muwater = viscosity_water_Pa_sec(Taverage, pressure=model.reserv.lithostatic_pressure()) * np.linspace(1, 1, len(model.wellbores.ProducedTemperature.value)) + muwater = viscosity_water_Pa_sec(Taverage, pressure=model.reserv.lithostatic_pressure(model.reserv.rhorock.value, + model.reserv.depth.value)) * np.linspace(1, 1, len(model.wellbores.ProducedTemperature.value)) v = nprod / ninj * wellflowrate * (1.0 + waterloss) / rhowater / (math.pi / 4. * welldiam ** 2) Rewater = 4. * nprod / ninj * wellflowrate * (1.0 + waterloss) / ( muwater * math.pi * welldiam) # laminar or turbulent flow? @@ -317,19 +395,14 @@ def ProdPressureDropAndPumpingPowerUsingIndexes( Calculate Pressure Drops and Pumping Power needed for the production well using indexes :param model: The container class of the application, giving access to everything else, including the logger :type model: :class:`~geophires_x.Model.Model` - :param usebuiltinhydrostaticpressurecorrelation: whether or not to use the built-in hydrostatic pressure correlation (True or False) [-] - :type usebuiltinhydrostaticpressurecorrelation: bool :param productionwellpumping: whether or not the production well is pumping (True or False) [-] :type productionwellpumping: bool :param usebuiltinppwellheadcorrelation: whether or not to use the built-in wellhead pressure correlation (True or False) [-] :type usebuiltinppwellheadcorrelation: bool :param Trock_degC: rock temperature [C] :type Trock_degC: float - :param Tsurf_degC: surface temperature [C] - :type Tsurf_degC: float :param depth_m: depth of the well [m] :type depth_m: float - :param gradient_C_per_km: geothermal gradient [C/km] :param ppwellhead_kPa: production wellhead pressure [kPa] :type ppwellhead_kPa: float :param PI_kg_per_sec_per_bar: productivity index [kg/s/bar] @@ -355,7 +428,7 @@ def ProdPressureDropAndPumpingPowerUsingIndexes( PumpingPower = PumpingPowerProd = DPProdWell = Pprodwellhead = ([0.0] * len(vprod_m)) # reservoir hydrostatic pressure - Phydrostaticcalc_kPa = model.wellbores.Phydrostaticcalc.quantity().to('kPa').magnitude + Phydrostaticcalc_kPa = model.wellbores.production_reservoir_pressure.quantity().to('kPa').magnitude if productionwellpumping: # Excess pressure covers non-condensable gas pressure and net positive suction head for the pump @@ -431,8 +504,7 @@ def InjPressureDropAndPumpingPowerUsingIndexes( waterloss: float, pumpeff: float, rhowaterinj: float, - Pplantoutlet: float, - PumpingPowerProd) -> tuple: + Pplantoutlet: float) -> tuple: """ Calculate PressureDrops and Pumping Power needed for the injection well using indexes :param depth_m: depth of the well [m] @@ -445,18 +517,12 @@ def InjPressureDropAndPumpingPowerUsingIndexes( :type nprod: int :param ppwellhead: production wellhead pressure [kPa] :type ppwellhead: float - :param gradient_C_per_km: geothermal gradient [C/km] - :type gradient_C_per_km: float - :param Tsurf: surface temperature [C] - :type Tsurf: float :param Trock_degC: rock temperature [C] :type Trock_degC: float - :param usebuiltinppwellheadcorrelation: whether or not to use the built-in wellhead pressure correlation (True or False) [-] + :param usebuiltinppwellheadcorrelation: whether to use the built-in wellhead pressure correlation (True or False) [-] :type usebuiltinppwellheadcorrelation: bool - :param productionwellpumping: whether or not the production well is pumping (True or False) [-] + :param productionwellpumping: whether the production well is pumping (True or False) [-] :type productionwellpumping: bool - :param usebuiltinhydrostaticpressurecorrelation: - :type usebuiltinhydrostaticpressurecorrelation: bool :param model: The container class of the application, giving access to everything else, including the logger :type model: :class:`~geophires_x.Model.Model` :param Pplantoutlet: plant outlet pressure [kPa] @@ -475,17 +541,15 @@ def InjPressureDropAndPumpingPowerUsingIndexes( :type f1: float :param usebuiltinoutletplantcorrelation: whether or not to use the built-in outlet plant pressure correlation (True or False) [-] :type usebuiltinoutletplantcorrelation: bool - :param PumpingPowerProd: pumping power for production wells [MWe] - :type PumpingPowerProd: float :param II: injectivity index [kg/s/bar] :type II: float - :return: tuple of PumpingPower, PumpingPowerInj, DPInjWell, plant_outlet_pressure, Pprodwellhead [kPa] + :return: tuple of PumpingPowerInj, DPInjWell, plant_outlet_pressure, Pprodwellhead [kPa] :rtype: tuple """ PumpingPowerInj = DPInjWell = Pprodwellhead = [0.0] # initialize value in case it doesn't get set. # reservoir hydrostatic pressure - Phydrostaticcalc_kPa = model.wellbores.Phydrostaticcalc.quantity().to('kPa').magnitude + Phydrostaticcalc_kPa = model.wellbores.injection_reservoir_pressure.value if productionwellpumping: # Excess pressure covers non-condensable gas pressure and net positive suction head for the pump @@ -508,9 +572,12 @@ def InjPressureDropAndPumpingPowerUsingIndexes( IIkPa = II / 100.0 # convert II from kg/s/bar to kg/s/kPa # necessary injection wellhead pressure [kPa] - Pinjwellhead = Phydrostaticcalc_kPa + wellflowrate * ( - 1 + waterloss) * nprod / ninj / IIkPa - rhowaterinj * 9.81 * depth_m / 1E3 + f1 * ( - rhowaterinj * vinj ** 2 / 2) * (depth_m / injwelldiam) / 1E3 + Pinjwellhead = [0] * len(Phydrostaticcalc_kPa) + for i in range(len(Phydrostaticcalc_kPa)): + Pinjwellhead[i] = (Phydrostaticcalc_kPa[i] + + wellflowrate * (1 + waterloss) * nprod / ninj / IIkPa - + rhowaterinj[i] * 9.81 * depth_m / 1E3 + f1[i] * + (rhowaterinj[i] * vinj[i] ** 2 / 2) * (depth_m / injwelldiam) / 1E3) # plant outlet pressure [kPa] if usebuiltinoutletplantcorrelation: @@ -518,21 +585,17 @@ def InjPressureDropAndPumpingPowerUsingIndexes( Pplantoutlet = Pprodwellhead - DPSurfaceplant # injection pump pressure [kPa] - DPInjWell = Pinjwellhead - Pplantoutlet + DPInjWell = [0.0] * len(Phydrostaticcalc_kPa) + for i in range(len(DPInjWell)): + DPInjWell[i] = Pinjwellhead[i] - Pplantoutlet + # [MWe] total pumping power for injection wells - PumpingPowerInj = DPInjWell * nprod * wellflowrate * (1 + waterloss) / rhowaterinj / pumpeff / 1E3 + PumpingPowerInj = [0.0] * len(DPInjWell) + for i in range(len(DPInjWell)): + PumpingPowerInj[i] = DPInjWell[i] * nprod * wellflowrate * (1 + waterloss) / rhowaterinj[i] / pumpeff / 1E3 PumpingPowerInj = np.array([0. if x < 0. else x for x in PumpingPowerInj]) - # total pumping power - if productionwellpumping: - PumpingPower = PumpingPowerInj + PumpingPowerProd - else: - PumpingPower = PumpingPowerInj - - # negative pumping power values become zero (b/c we are not generating electricity) - PumpingPower = [0. if x < 0. else x for x in PumpingPower] - - return PumpingPower, PumpingPowerInj, DPInjWell, Pplantoutlet, Pprodwellhead + return PumpingPowerInj, DPInjWell, Pplantoutlet, Pprodwellhead class WellBores: @@ -756,6 +819,65 @@ def __init__(self, model: Model): ErrMessage="assume default is not AGS", ToolTipText="Set to true if the model is for an Advanced Geothermal System (AGS)" ) + self.overpressure_percentage = self.ParameterDict[self.overpressure_percentage.Name] = floatParameter( + "Overpressure Percentage", + DefaultValue=100.0, + UnitType=Units.PERCENT, + PreferredUnits=PercentUnit.PERCENT, + CurrentUnits=PercentUnit.PERCENT, + Required=False, + ErrMessage="assume there is no overpressure", + ToolTipText="enter the amount of pressure over the hydrostatic pressure in the reservoir (100%=hydrostatic)" + ) + self.overpressure_depletion_rate = self.ParameterDict[self.overpressure_depletion_rate.Name] = floatParameter( + "Overpressure Depletion Rate", + DefaultValue=0.0, + UnitType=Units.DECAY_RATE, + PreferredUnits=Decay_RateUnit.PERCENTPERYEAR, + CurrentUnits=Decay_RateUnit.PERCENTPERYEAR, + Required=False, + ErrMessage="assume there is no overpressure", + ToolTipText="enter the amount of pressure over the hydrostatic pressure in the reservoir (100%=hydrostatic)" + ) + self.injection_reservoir_temperature = self.ParameterDict[self.injection_reservoir_temperature.Name] = floatParameter( + "Injection Reservoir Temperature", + DefaultValue=100.0, + UnitType=Units.TEMPERATURE, + PreferredUnits=TemperatureUnit.CELSIUS, + CurrentUnits=TemperatureUnit.CELSIUS, + Required=False, + ErrMessage="assume there is not an injection reservoir, so there is no injection reservoir temperature", + ToolTipText="enter the temperature of the injection reservoir (100 C)" + ) + self.injection_reservoir_depth = self.ParameterDict[self.injection_reservoir_depth.Name] = floatParameter( + "Injection Reservoir Depth", + DefaultValue=1000.0, + UnitType=Units.LENGTH, + PreferredUnits=LengthUnit.METERS, + CurrentUnits=LengthUnit.METERS, + Required=False, + ErrMessage="assume there is not an injection reservoir, so there is no injection reservoir depth", + ToolTipText="enter the depth of the injection reservoir (1000 m)" + ) + self.injection_reservoir_initial_pressure = self.ParameterDict[self.injection_reservoir_initial_pressure.Name] = floatParameter( + "Injection Reservoir Initial Pressure", + DefaultValue=0.0, + UnitType=Units.PRESSURE, + PreferredUnits=PressureUnit.KPASCAL, + CurrentUnits=PressureUnit.KPASCAL, + Required=False, + ErrMessage="assume there is not an injection reservoir, so there is no injection reservoir initial pressure", + ToolTipText="enter the depth of the injection reservoir initial pressure (use lithostatic pressure)" + ) + self.injection_reservoir_inflation_rate = self.ParameterDict[self.injection_reservoir_inflation_rate.Name] = floatParameter( + "Injection Reservoir Inflation Rate", + DefaultValue=1000.0, + UnitType=Units.INFLATION_RATE, + CurrentUnits=Inflation_RateUnit.KPASCALPERYEAR, + Required=False, + ErrMessage="assume there is not an injection reservoir, so there is no injection reservoir inflation rate", + ToolTipText="enter the rate at which the pressure increases per year in the injection reservoir (1000 kPa/yr)" + ) # local variable initiation self.Pinjwellhead = 0.0 @@ -767,8 +889,15 @@ def __init__(self, model: Model): self.MyPath = __file__ # Results - used by other objects or printed in output downstream - self.Phydrostaticcalc = self.OutputParameterDict[self.Phydrostaticcalc.Name] = floatParameter( - Name="Calculated Reservoir Hydrostatic Pressure", + self.production_reservoir_pressure = self.OutputParameterDict[self.production_reservoir_pressure.Name] = OutputParameter( + Name="Calculated Reservoir Pressure", + value=self.Phydrostatic.value, + UnitType=Units.PRESSURE, + PreferredUnits=PressureUnit.KPASCAL, + CurrentUnits=PressureUnit.KPASCAL + ) + self.injection_reservoir_pressure = self.OutputParameterDict[self.injection_reservoir_pressure.Name] = OutputParameter( + Name="Calculated Injection Reservoir Pressure", value=self.Phydrostatic.value, UnitType=Units.PRESSURE, PreferredUnits=PressureUnit.KPASCAL, @@ -948,14 +1077,43 @@ def Calculate(self, model: Model) -> None: # choose to call this method from you class, which can effectively run the calculations of the superclass, # making all thr values available to your methods. but you had better have set all the parameters! - self.Phydrostaticcalc.value = get_hydrostatic_pressure_kPa(model.reserv.Trock.value, model.reserv.Tsurf.value, - model.reserv.depth.quantity().to('m').magnitude, - model.reserv.averagegradient.value, - model.reserv.lithostatic_pressure()) if self.usebuiltinhydrostaticpressurecorrelation else self.Phydrostatic.quantity().to( - self.Phydrostaticcalc.CurrentUnits).magnitude + # calculate the reservoir pressure as a function of time + self.production_reservoir_pressure.value = get_hydrostatic_pressure_kPa(model.reserv.Trock.value, model.reserv.Tsurf.value, + model.reserv.depth.quantity().to('m').magnitude, + model.reserv.averagegradient.value, + model.reserv.lithostatic_pressure(model.reserv.rhorock.value, + model.reserv.depth.value)) if self.usebuiltinhydrostaticpressurecorrelation else self.Phydrostatic.quantity().to( + self.production_reservoir_pressure.CurrentUnits).magnitude + + self.production_reservoir_pressure.value = ReservoirPressurePredictor(model.surfaceplant.plant_lifetime.value, + model.economics.timestepsperyear.value, + self.production_reservoir_pressure.value, + self.overpressure_percentage.value, + self.overpressure_depletion_rate.value) + + if self.overpressure_percentage.Provided: + # calculate the injection reservoir pressure as a function of time if overpressure is provided + self.injection_reservoir_initial_pressure.value = self.injection_reservoir_pressure.value = get_hydrostatic_pressure_kPa(self.injection_reservoir_temperature.value, + model.reserv.Tsurf.value, + self.injection_reservoir_depth.value, + model.reserv.averagegradient.value, + model.reserv.lithostatic_pressure(model.reserv.rhorock.value, + self.injection_reservoir_depth.value)) + +# if not self.injection_reservoir_initial_pressure.Provided: + self.injection_reservoir_pressure.value = InjectionReservoirPressurePredictor(model.surfaceplant.plant_lifetime.value, + model.economics.timestepsperyear.value, + self.injection_reservoir_initial_pressure.value, + self.injection_reservoir_inflation_rate.value) + else: + # assume it is the same as the production reservoir pressure if not + self.injection_reservoir_pressure.value = self.production_reservoir_pressure.value + self.injection_reservoir_temperature.value = model.reserv.Trock.value + self.injection_reservoir_depth.value = model.reserv.depth.value # special case: production and injection well diameters are input as inches and call calculations # assume meters! Check and change if needed, assuming anything > 2 must be talking about inches + # TODO: heuristic calculation if self.injwelldiam.value > 2.0: self.injwelldiam.value = self.injwelldiam.value * 0.0254 self.injwelldiam.CurrentUnits = LengthUnit.METERS @@ -1038,19 +1196,26 @@ def Calculate(self, model: Model) -> None: self.PI.value, self.prodwellflowrate.value, f3, vprod, self.prodwelldiam.value, self.nprod.value, model.surfaceplant.pump_efficiency.value, self.rhowaterprod) - self.PumpingPower.value, self.PumpingPowerInj.value, self.DPInjWell.value, model.surfaceplant.plant_outlet_pressure.value, self.Pprodwellhead.value = \ + self.PumpingPowerInj.value, self.DPInjWell.value, model.surfaceplant.plant_outlet_pressure.value, self.Pprodwellhead.value = \ InjPressureDropAndPumpingPowerUsingIndexes(model, self.productionwellpumping.value, self.usebuiltinppwellheadcorrelation, model.surfaceplant.usebuiltinoutletplantcorrelation.value, - model.reserv.Trock.value, - model.reserv.depth.value, + self.injection_reservoir_temperature.value, + self.injection_reservoir_depth.value, self.ppwellhead.value, self.II.value, self.prodwellflowrate.value, f1, vinj, self.injwelldiam.value, self.nprod.value, self.ninj.value, model.reserv.waterloss.value, model.surfaceplant.pump_efficiency.value, self.rhowaterinj, - model.surfaceplant.plant_outlet_pressure.value, - self.PumpingPowerProd.value) + model.surfaceplant.plant_outlet_pressure.value) + # total pumping power + if self.productionwellpumping.value: + self.PumpingPower.value = self.PumpingPowerInj.value + self.PumpingPowerProd.value + else: + self.PumpingPower.value = self.PumpingPowerInj.value + + # negative pumping power values become zero (b/c we are not generating electricity) + self.PumpingPower.value = [0. if x < 0. else x for x in self.PumpingPower.value] model.logger.info(f'complete {self.__class__.__name__}: {__name__}') diff --git a/src/geophires_x_client/geophires_x_result.py b/src/geophires_x_client/geophires_x_result.py index 315808a4..6e3ba3ed 100644 --- a/src/geophires_x_client/geophires_x_result.py +++ b/src/geophires_x_client/geophires_x_result.py @@ -144,7 +144,7 @@ class GeophiresXResult: 'Fracture area', 'Fracture width', 'Reservoir volume', - 'Reservoir hydrostatic pressure', + 'Average reservoir pressure', 'Plant outlet pressure', 'Production wellhead pressure', 'Productivity Index', diff --git a/src/geophires_x_schema_generator/geophires-request.json b/src/geophires_x_schema_generator/geophires-request.json index 921193a8..166a7198 100644 --- a/src/geophires_x_schema_generator/geophires-request.json +++ b/src/geophires_x_schema_generator/geophires-request.json @@ -340,8 +340,8 @@ "units": "degC", "category": "Well Bores" }, - "Reservoir Hydrostatic Pressure": { - "description": "Reservoir hydrostatic far-field pressure. Default value is calculated with built-in modified Xie-Bloomfield-Shook equation (DOE, 2016).", + "Average reservoir Pressure": { + "description": "Average reservoir far-field pressure. Default value is calculated with built-in modified Xie-Bloomfield-Shook equation (DOE, 2016).", "type": "number", "units": "kPa", "category": "Well Bores" diff --git a/tests/example1_addons.csv b/tests/example1_addons.csv index 3f00b47f..a341e556 100644 --- a/tests/example1_addons.csv +++ b/tests/example1_addons.csv @@ -53,7 +53,7 @@ RESERVOIR PARAMETERS,Bottom-hole temperature,,170.0,degC RESERVOIR PARAMETERS,Well separation: fracture height,,900.0,meter RESERVOIR PARAMETERS,Fracture area,,810000.0,m**2 RESERVOIR PARAMETERS,Reservoir volume,,1000000000,m**3 -RESERVOIR PARAMETERS,Reservoir hydrostatic pressure,,29430.21,kPa +RESERVOIR PARAMETERS,Average reservoir pressure,,29430.21,kPa RESERVOIR PARAMETERS,Plant outlet pressure,,1067.94,kPa RESERVOIR PARAMETERS,Production wellhead pressure,,1136.89,kPa RESERVOIR PARAMETERS,Productivity Index,,5.0,kg/sec/bar diff --git a/tests/examples/FIXME_example1_outputunits.out b/tests/examples/FIXME_example1_outputunits.out index e6e27361..7ce5fd70 100644 --- a/tests/examples/FIXME_example1_outputunits.out +++ b/tests/examples/FIXME_example1_outputunits.out @@ -63,10 +63,10 @@ Simulation Metadata Reservoir Model = Multiple Parallel Fractures Model Bottom-hole temperature: 338.00 degF Fracture model = Square - Well seperation: fracture height: 900.00 meter + Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 29430.00 kPa + Average reservoir pressure: 29430.00 kPa Plant outlet pressure: 1062.72 kPa Production wellhead pressure: 1131.67 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/examples/S-DAC-GT.out b/tests/examples/S-DAC-GT.out index 4798eff2..c47768cd 100644 --- a/tests/examples/S-DAC-GT.out +++ b/tests/examples/S-DAC-GT.out @@ -67,7 +67,7 @@ Calculation Time: 0.433 sec Number of fractures : 12.00 Fracture separation : 80.00 meter Reservoir volume : 176000000 m³ - Reservoir hydrostatic pressure : 29639.68 kPa + Average reservoir pressure : 29639.68 kPa Plant outlet pressure : 100.00 kPa Injectivity Index : 5.00 kg/sec/bar Reservoir density : 2700.00 kg/m³ diff --git a/tests/examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.out b/tests/examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.out index 7079b5ea..cdbf7b20 100644 --- a/tests/examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.out +++ b/tests/examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.out @@ -4,17 +4,17 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.4.16 + GEOPHIRES Version: 3.4.24 GEOPHIRES Build Date: 2024-03-05 - Simulation Date: 2024-03-06 - Simulation Time: 11:00 - Calculation Time: 1.692 sec + Simulation Date: 2024-04-15 + Simulation Time: 17:40 + Calculation Time: 3.005 sec ***SUMMARY OF RESULTS*** End-Use Option: Electricity Average Net Electricity Production: 1.10 MW - Electricity breakeven price: 120.05 cents/kWh + Electricity breakeven price: 120.14 cents/kWh Number of production wells: 1 Number of injection wells: 0 Flowrate per production well: 110.0 kg/sec @@ -28,7 +28,7 @@ Simulation Metadata Accrued financing during construction: 0.00 Project lifetime: 40 yr Capacity factor: 90.0 % - Project NPV: -134.74 MUSD + Project NPV: -134.75 MUSD Project IRR: 0.00 % Project VIR=PI=PIR: -0.06 Project MOIC: -0.89 @@ -104,8 +104,8 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t Minimum Net Electricity Generation: 0.94 MW Initial Net Electricity Generation: 1.66 MW Average Annual Total Electricity Generation: 8.64 GWh - Average Annual Net Electricity Generation: 8.62 GWh - Initial pumping power/net installed power: 0.21 % + Average Annual Net Electricity Generation: 8.61 GWh + Initial pumping power/net installed power: 0.23 % Average Pumping Power: 0.00 MW ************************************************************ @@ -114,46 +114,46 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t YEAR THERMAL GEOFLUID PUMP NET FIRST LAW DRAWDOWN TEMPERATURE POWER POWER EFFICIENCY (degC) (MW) (MW) (%) - 1 1.0000 120.00 0.0034 1.6611 6.2250 - 2 0.9302 111.62 0.0035 1.2897 5.6178 - 3 0.9187 110.24 0.0035 1.2342 5.5235 - 4 0.9121 109.45 0.0035 1.2029 5.4699 - 5 0.9074 108.89 0.0035 1.1813 5.4328 - 6 0.9039 108.46 0.0035 1.1649 5.4044 - 7 0.9010 108.12 0.0035 1.1516 5.3816 - 8 0.8985 107.83 0.0035 1.1406 5.3625 - 9 0.8965 107.58 0.0035 1.1312 5.3461 - 10 0.8946 107.36 0.0035 1.1230 5.3318 - 11 0.8930 107.16 0.0035 1.1157 5.3191 - 12 0.8915 106.98 0.0035 1.1091 5.3077 - 13 0.8902 106.82 0.0035 1.1032 5.2974 - 14 0.8890 106.68 0.0035 1.0978 5.2879 - 15 0.8879 106.54 0.0035 1.0928 5.2793 - 16 0.8868 106.42 0.0035 1.0882 5.2712 - 17 0.8858 106.30 0.0035 1.0839 5.2637 - 18 0.8849 106.19 0.0035 1.0799 5.2567 - 19 0.8841 106.09 0.0035 1.0762 5.2502 - 20 0.8833 105.99 0.0035 1.0727 5.2440 - 21 0.8825 105.90 0.0035 1.0693 5.2381 - 22 0.8818 105.81 0.0035 1.0662 5.2326 - 23 0.8811 105.73 0.0035 1.0632 5.2273 - 24 0.8804 105.65 0.0035 1.0603 5.2223 - 25 0.8798 105.58 0.0035 1.0576 5.2176 - 26 0.8792 105.50 0.0035 1.0550 5.2130 - 27 0.8786 105.43 0.0035 1.0525 5.2086 - 28 0.8781 105.37 0.0035 1.0501 5.2044 - 29 0.8775 105.30 0.0035 1.0478 5.2004 - 30 0.8770 105.24 0.0035 1.0456 5.1965 - 31 0.8765 105.18 0.0035 1.0435 5.1928 - 32 0.8761 105.13 0.0035 1.0415 5.1892 - 33 0.8756 105.07 0.0035 1.0395 5.1857 - 34 0.8751 105.02 0.0035 1.0376 5.1823 - 35 0.8747 104.97 0.0035 1.0357 5.1791 - 36 0.8743 104.91 0.0035 1.0339 5.1759 - 37 0.8739 104.87 0.0035 1.0322 5.1729 - 38 0.8735 104.82 0.0035 1.0305 5.1699 - 39 0.8731 104.77 0.0035 1.0289 5.1670 - 40 0.8727 104.73 0.0035 1.0273 5.1642 + 1 1.0000 120.00 0.0038 1.6608 5.9406 + 2 0.9300 111.61 0.0038 1.2888 5.3599 + 3 0.9186 110.23 0.0038 1.2333 5.2698 + 4 0.9119 109.43 0.0038 1.2020 5.2187 + 5 0.9073 108.87 0.0038 1.1804 5.1832 + 6 0.9037 108.45 0.0038 1.1639 5.1561 + 7 0.9008 108.10 0.0038 1.1507 5.1343 + 8 0.8984 107.81 0.0038 1.1397 5.1160 + 9 0.8963 107.56 0.0038 1.1303 5.1004 + 10 0.8945 107.34 0.0038 1.1220 5.0867 + 11 0.8929 107.14 0.0038 1.1148 5.0746 + 12 0.8914 106.97 0.0038 1.1082 5.0637 + 13 0.8901 106.81 0.0038 1.1023 5.0539 + 14 0.8889 106.66 0.0038 1.0969 5.0448 + 15 0.8877 106.53 0.0038 1.0919 5.0365 + 16 0.8867 106.40 0.0038 1.0873 5.0289 + 17 0.8857 106.29 0.0038 1.0830 5.0217 + 18 0.8848 106.18 0.0038 1.0790 5.0150 + 19 0.8839 106.07 0.0038 1.0753 5.0088 + 20 0.8831 105.98 0.0038 1.0717 5.0028 + 21 0.8824 105.88 0.0038 1.0684 4.9973 + 22 0.8816 105.80 0.0038 1.0653 4.9920 + 23 0.8809 105.71 0.0038 1.0623 4.9870 + 24 0.8803 105.63 0.0038 1.0594 4.9822 + 25 0.8797 105.56 0.0038 1.0567 4.9776 + 26 0.8791 105.49 0.0038 1.0541 4.9733 + 27 0.8785 105.42 0.0038 1.0516 4.9691 + 28 0.8779 105.35 0.0038 1.0492 4.9651 + 29 0.8774 105.29 0.0038 1.0469 4.9612 + 30 0.8769 105.23 0.0038 1.0447 4.9575 + 31 0.8764 105.17 0.0038 1.0426 4.9540 + 32 0.8759 105.11 0.0038 1.0406 4.9505 + 33 0.8755 105.05 0.0038 1.0386 4.9472 + 34 0.8750 105.00 0.0038 1.0367 4.9440 + 35 0.8746 104.95 0.0038 1.0348 4.9409 + 36 0.8742 104.90 0.0038 1.0330 4.9379 + 37 0.8737 104.85 0.0038 1.0313 4.9350 + 38 0.8733 104.80 0.0038 1.0296 4.9321 + 39 0.8730 104.76 0.0038 1.0280 4.9294 + 40 0.8726 104.71 0.0038 1.0264 4.9267 ******************************************************************* @@ -162,46 +162,46 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t YEAR ELECTRICITY HEAT RESERVOIR PERCENTAGE OF PROVIDED EXTRACTED HEAT CONTENT TOTAL HEAT MINED (GWh/year) (GWh/year) (10^15 J) (%) - 1 12.1 200.5 32.78 2.15 - 2 9.5 173.8 32.16 4.02 - 3 9.8 177.5 31.52 5.93 - 4 9.2 170.3 30.91 7.76 - 5 9.4 172.2 30.29 9.61 - 6 9.0 168.1 29.68 11.42 - 7 9.1 169.2 29.07 13.23 - 8 8.9 166.4 28.47 15.02 - 9 8.9 167.2 27.87 16.82 - 10 8.8 165.1 27.28 18.59 - 11 8.8 165.6 26.68 20.37 - 12 8.7 164.0 26.09 22.13 - 13 8.7 164.3 25.50 23.90 - 14 8.6 163.1 24.91 25.65 - 15 8.6 163.2 24.32 27.40 - 16 8.5 162.3 23.74 29.15 - 17 8.5 162.3 23.16 30.89 - 18 8.5 161.7 22.57 32.63 - 19 8.5 161.5 21.99 34.36 - 20 8.4 161.1 21.41 36.10 - 21 8.4 160.8 20.83 37.82 - 22 8.4 160.6 20.26 39.55 - 23 8.4 160.1 19.68 41.27 - 24 8.4 160.1 19.10 42.99 - 25 8.3 159.4 18.53 44.70 - 26 8.3 159.7 17.95 46.42 - 27 8.3 158.8 17.38 48.12 - 28 8.3 159.4 16.81 49.84 - 29 8.2 158.3 16.24 51.54 - 30 8.3 159.1 15.67 53.25 - 31 8.2 157.7 15.10 54.94 - 32 8.3 158.9 14.53 56.65 - 33 8.1 157.0 13.96 58.33 - 34 8.3 158.9 13.39 60.04 - 35 8.1 156.2 12.83 61.72 - 36 8.3 159.1 12.25 63.43 - 37 8.0 155.0 11.70 65.10 - 38 8.4 160.3 11.12 66.82 - 39 7.7 151.2 10.57 68.44 - 40 7.5 134.4 10.09 69.89 + 1 12.1 210.1 32.75 2.26 + 2 9.5 182.1 32.09 4.21 + 3 9.8 185.9 31.43 6.21 + 4 9.2 178.4 30.78 8.13 + 5 9.4 180.4 30.13 10.07 + 6 9.0 176.0 29.50 11.96 + 7 9.1 177.2 28.86 13.86 + 8 8.9 174.2 28.23 15.73 + 9 8.9 175.1 27.60 17.61 + 10 8.8 172.9 26.98 19.47 + 11 8.8 173.4 26.36 21.33 + 12 8.7 171.8 25.74 23.18 + 13 8.7 172.1 25.12 25.03 + 14 8.6 170.8 24.50 26.86 + 15 8.6 171.0 23.89 28.70 + 16 8.5 170.0 23.28 30.53 + 17 8.5 170.0 22.67 32.35 + 18 8.5 169.3 22.06 34.17 + 19 8.5 169.1 21.45 35.99 + 20 8.4 168.7 20.84 37.80 + 21 8.4 168.4 20.23 39.61 + 22 8.4 168.2 19.63 41.42 + 23 8.4 167.7 19.02 43.22 + 24 8.4 167.7 18.42 45.02 + 25 8.3 167.0 17.82 46.82 + 26 8.3 167.3 17.22 48.61 + 27 8.3 166.4 16.62 50.40 + 28 8.3 166.9 16.02 52.20 + 29 8.2 165.7 15.42 53.98 + 30 8.3 166.6 14.82 55.77 + 31 8.2 165.1 14.23 57.54 + 32 8.3 166.4 13.63 59.33 + 33 8.1 164.4 13.04 61.10 + 34 8.3 166.4 12.44 62.88 + 35 8.0 163.6 11.85 64.64 + 36 8.3 166.6 11.25 66.43 + 37 7.9 162.3 10.66 68.18 + 38 8.4 167.9 10.06 69.98 + 39 7.7 158.3 9.49 71.68 + 40 7.5 140.7 8.98 73.19 ******************************** @@ -214,40 +214,40 @@ ________________________________________________________________________________ 1 0.00 -126.72 0.00 | 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 -126.72 -126.72 2 5.50 -0.38 0.66 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.38 -127.10 3 5.50 -0.52 1.19 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.52 -127.62 - 4 5.50 -0.50 1.73 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.50 -128.13 + 4 5.50 -0.51 1.73 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.51 -128.13 5 5.50 -0.54 2.24 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.54 -128.67 6 5.50 -0.53 2.75 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.53 -129.20 7 5.50 -0.55 3.25 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.55 -129.75 - 8 5.50 -0.54 3.75 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.54 -130.29 + 8 5.50 -0.55 3.75 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.55 -130.30 9 5.50 -0.56 4.24 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.56 -130.85 10 5.50 -0.55 4.73 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.55 -131.41 11 5.50 -0.56 5.21 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.56 -131.97 - 12 5.50 -0.56 5.70 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.56 -132.53 - 13 5.50 -0.57 6.18 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.57 -133.10 - 14 5.50 -0.57 6.66 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.57 -133.67 - 15 5.50 -0.57 7.13 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.57 -134.24 - 16 5.50 -0.57 7.60 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.57 -134.81 - 17 5.50 -0.58 8.07 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -135.39 + 12 5.50 -0.56 5.70 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.56 -132.54 + 13 5.50 -0.57 6.17 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.57 -133.11 + 14 5.50 -0.57 6.65 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.57 -133.67 + 15 5.50 -0.57 7.12 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.57 -134.25 + 16 5.50 -0.57 7.60 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.57 -134.82 + 17 5.50 -0.58 8.07 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -135.40 18 5.50 -0.58 8.54 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -135.97 - 19 5.50 -0.58 9.01 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -136.55 - 20 5.50 -0.58 9.48 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -137.13 - 21 5.50 -0.58 9.94 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -137.71 - 22 5.50 -0.58 10.40 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -138.29 - 23 5.50 -0.58 10.87 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -138.88 - 24 5.50 -0.59 11.33 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -139.46 - 25 5.50 -0.59 11.79 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -140.05 - 26 5.50 -0.59 12.24 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -140.64 - 27 5.50 -0.59 12.70 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -141.23 - 28 5.50 -0.59 13.16 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -141.82 - 29 5.50 -0.59 13.61 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -142.41 - 30 5.50 -0.59 14.06 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -143.00 - 31 5.50 -0.59 14.52 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -143.60 - 32 5.50 -0.60 14.97 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.60 -144.19 - 33 5.50 -0.59 15.42 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -144.78 - 34 5.50 -0.60 15.87 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.60 -145.38 - 35 5.50 -0.59 16.32 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -145.98 - 36 5.50 -0.60 16.77 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.60 -146.58 - 37 5.50 -0.59 17.22 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -147.17 - 38 5.50 -0.61 17.66 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.61 -147.78 - 39 5.50 -0.59 18.12 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -148.37 - 40 5.50 -0.63 18.54 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.63 -148.99 + 19 5.50 -0.58 9.00 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -136.55 + 20 5.50 -0.58 9.47 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -137.13 + 21 5.50 -0.58 9.93 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -137.72 + 22 5.50 -0.58 10.40 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -138.30 + 23 5.50 -0.58 10.86 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.58 -138.89 + 24 5.50 -0.59 11.32 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -139.47 + 25 5.50 -0.59 11.78 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -140.06 + 26 5.50 -0.59 12.23 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -140.65 + 27 5.50 -0.59 12.69 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -141.24 + 28 5.50 -0.59 13.14 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -141.83 + 29 5.50 -0.59 13.60 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -142.42 + 30 5.50 -0.60 14.05 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.60 -143.02 + 31 5.50 -0.59 14.51 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -143.61 + 32 5.50 -0.60 14.96 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.60 -144.21 + 33 5.50 -0.59 15.41 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -144.80 + 34 5.50 -0.60 15.86 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.60 -145.40 + 35 5.50 -0.59 16.31 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -145.99 + 36 5.50 -0.60 16.75 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.60 -146.60 + 37 5.50 -0.59 17.21 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -147.19 + 38 5.50 -0.61 17.64 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.61 -147.80 + 39 5.50 -0.59 18.11 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.59 -148.38 + 40 5.50 -0.63 18.53 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 1.05 -0.63 -149.01 diff --git a/tests/examples/example1.out b/tests/examples/example1.out index 3bc186eb..dfc9de8a 100644 --- a/tests/examples/example1.out +++ b/tests/examples/example1.out @@ -67,7 +67,7 @@ Simulation Metadata Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 29430.21 kPa + Average reservoir pressure: 29430.21 kPa Plant outlet pressure: 1067.94 kPa Production wellhead pressure: 1136.89 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/examples/example10_HP.out b/tests/examples/example10_HP.out index afdaa9db..e3c0ae2d 100644 --- a/tests/examples/example10_HP.out +++ b/tests/examples/example10_HP.out @@ -67,7 +67,7 @@ Simulation Metadata Number of fractures: 12.00 Fracture separation: 80.00 meter Reservoir volume: 176000000 m**3 - Reservoir hydrostatic pressure: 20849.48 kPa + Average reservoir pressure: 20849.48 kPa Plant outlet pressure: 416.74 kPa Production wellhead pressure: 485.69 kPa Productivity Index: 10.00 kg/sec/bar diff --git a/tests/examples/example11_AC.out b/tests/examples/example11_AC.out index d167f2a7..5ec798dd 100644 --- a/tests/examples/example11_AC.out +++ b/tests/examples/example11_AC.out @@ -68,7 +68,7 @@ Simulation Metadata Number of fractures: 12.00 Fracture separation: 80.00 meter Reservoir volume: 176000000 m**3 - Reservoir hydrostatic pressure: 20849.48 kPa + Average reservoir pressure: 20849.48 kPa Plant outlet pressure: 416.74 kPa Production wellhead pressure: 485.69 kPa Productivity Index: 10.00 kg/sec/bar diff --git a/tests/examples/example12_DH.out b/tests/examples/example12_DH.out index 2e0b9a1f..228b8753 100644 --- a/tests/examples/example12_DH.out +++ b/tests/examples/example12_DH.out @@ -71,7 +71,7 @@ Simulation Metadata They are only used for calculating remaining heat content. Reservoir volume provided as input Reservoir volume: 125000000 m**3 - Reservoir hydrostatic pressure: 35230.39 kPa + Average reservoir pressure: 35230.39 kPa Plant outlet pressure: 446.32 kPa Production wellhead pressure: 515.27 kPa Productivity Index: 10.00 kg/sec/bar diff --git a/tests/examples/example13.out b/tests/examples/example13.out index efe02129..e6817697 100644 --- a/tests/examples/example13.out +++ b/tests/examples/example13.out @@ -72,7 +72,7 @@ Simulation Metadata They are only used for calculating remaining heat content. Reservoir volume provided as input Reservoir volume: 125000000 m**3 - Reservoir hydrostatic pressure: 39028.92 kPa + Average reservoir pressure: 39028.92 kPa Plant outlet pressure: 2260.87 kPa Production wellhead pressure: 2329.82 kPa Productivity Index: 10.00 kg/sec/bar diff --git a/tests/examples/example1_addons.out b/tests/examples/example1_addons.out index fb91888d..bd769704 100644 --- a/tests/examples/example1_addons.out +++ b/tests/examples/example1_addons.out @@ -68,7 +68,7 @@ Simulation Metadata Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 29430.21 kPa + Average reservoir pressure: 29430.21 kPa Plant outlet pressure: 1067.94 kPa Production wellhead pressure: 1136.89 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/examples/example2.out b/tests/examples/example2.out index c87d6f3d..4d45b115 100644 --- a/tests/examples/example2.out +++ b/tests/examples/example2.out @@ -63,7 +63,7 @@ Simulation Metadata Reservoir Model = 1-D Linear Heat Sweep Model Bottom-hole temperature: 180.00 degC Fracture model = Circular fracture with known diameter - Well seperation: fracture diameter: 300.00 meter + Well separation: fracture diameter: 300.00 meter Fracture area: 70685.83 m**2 Number of fractures calculated with reservoir volume and fracture separation as input Number of fractures: 30.47 diff --git a/tests/examples/example3.out b/tests/examples/example3.out index 6b762615..c092d6c6 100644 --- a/tests/examples/example3.out +++ b/tests/examples/example3.out @@ -70,7 +70,7 @@ Simulation Metadata Number of fractures: 12.00 Fracture separation: 80.00 meter Reservoir volume: 176000000 m**3 - Reservoir hydrostatic pressure: 29742.69 kPa + Average reservoir pressure: 29742.69 kPa Plant outlet pressure: 100.00 kPa Injectivity Index: 5.00 kg/sec/bar Reservoir density: 3000.00 kg/m**3 diff --git a/tests/examples/example4.out b/tests/examples/example4.out index 5a851487..2476f091 100644 --- a/tests/examples/example4.out +++ b/tests/examples/example4.out @@ -68,7 +68,7 @@ Simulation Metadata They are only used for calculating remaining heat content. Reservoir volume provided as input Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 19554.53 kPa + Average reservoir pressure: 19554.53 kPa Plant outlet pressure: 691.43 kPa Production wellhead pressure: 760.38 kPa Productivity Index: 10.00 kg/sec/bar diff --git a/tests/examples/example_ITC.out b/tests/examples/example_ITC.out index 42f514c9..90297325 100644 --- a/tests/examples/example_ITC.out +++ b/tests/examples/example_ITC.out @@ -66,7 +66,7 @@ Simulation Metadata Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 47300.51 kPa + Average reservoir pressure: 47300.51 kPa Plant outlet pressure: 8274.86 kPa Production wellhead pressure: 8343.81 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/examples/example_PTC.out b/tests/examples/example_PTC.out index 89d1770f..ccaa1c2b 100644 --- a/tests/examples/example_PTC.out +++ b/tests/examples/example_PTC.out @@ -66,7 +66,7 @@ Simulation Metadata Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 47300.51 kPa + Average reservoir pressure: 47300.51 kPa Plant outlet pressure: 8274.86 kPa Production wellhead pressure: 8343.81 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/examples/example_SHR-1.out b/tests/examples/example_SHR-1.out index 6218480d..5d361156 100644 --- a/tests/examples/example_SHR-1.out +++ b/tests/examples/example_SHR-1.out @@ -67,7 +67,7 @@ Simulation Metadata Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 68311.02 kPa + Average reservoir pressure: 68311.02 kPa Plant outlet pressure: 100.00 kPa Injectivity Index: 5.00 kg/sec/bar Reservoir density: 2700.00 kg/m**3 diff --git a/tests/examples/example_SHR-2.out b/tests/examples/example_SHR-2.out index 244de670..992a9931 100644 --- a/tests/examples/example_SHR-2.out +++ b/tests/examples/example_SHR-2.out @@ -67,7 +67,7 @@ Simulation Metadata Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 68311.02 kPa + Average reservoir pressure: 68311.02 kPa Plant outlet pressure: 100.00 kPa Injectivity Index: 5.00 kg/sec/bar Reservoir density: 2700.00 kg/m**3 diff --git a/tests/examples/example_multiple_gradients.out b/tests/examples/example_multiple_gradients.out index 0b8ac67c..29505dbb 100644 --- a/tests/examples/example_multiple_gradients.out +++ b/tests/examples/example_multiple_gradients.out @@ -79,7 +79,7 @@ Simulation Metadata Well separation: fracture height: 600.00 meter Fracture area: 360000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 39398.56 kPa + Average reservoir pressure: 39398.56 kPa Plant outlet pressure: 1530.99 kPa Production wellhead pressure: 1599.94 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/examples/example_overpressure.out b/tests/examples/example_overpressure.out new file mode 100644 index 00000000..f1897a41 --- /dev/null +++ b/tests/examples/example_overpressure.out @@ -0,0 +1,242 @@ + ***************** + ***CASE REPORT*** + ***************** + +Simulation Metadata +---------------------- + GEOPHIRES Version: 3.4.24 + GEOPHIRES Build Date: 2024-03-05 + Simulation Date: 2024-04-15 + Simulation Time: 17:18 + Calculation Time: 1.467 sec + + ***SUMMARY OF RESULTS*** + + End-Use Option: Electricity + Average Net Electricity Production: 14.41 MW + Electricity breakeven price: 6.07 cents/kWh + Number of production wells: 2 + Number of injection wells: 2 + Flowrate per production well: 80.0 kg/sec + Well depth (or total length, if not vertical): 3.0 kilometer + Geothermal gradient: 0.0650 degC/m + + + ***ECONOMIC PARAMETERS*** + + Economic Model = Fixed Charge Rate (FCR) + Fixed Charge Rate (FCR): 5.00 + Accrued financing during construction: 0.00 + Project lifetime: 30 yr + Capacity factor: 90.0 % + Project NPV: 68.05 MUSD + Project IRR: 11.94 % + Project VIR=PI=PIR: 1.79 + Project MOIC: 1.77 + Project Payback Period: 10.29 yr + + ***ENGINEERING PARAMETERS*** + + Number of Production Wells: 2 + Number of Injection Wells: 2 + Well depth (or total length, if not vertical): 3.0 kilometer + Water loss rate: 2.0 + Pump efficiency: 80.0 + Injection temperature: 50.0 degC + Production Wellbore heat transmission calculated with Ramey's model + Average production well temperature drop: 2.8 degC + Flowrate per production well: 80.0 kg/sec + Injection well casing ID: 9.000 in + Production well casing ID: 9.000 in + Number of times redrilling: 0 + Power plant type: Supercritical ORC + + + ***RESOURCE CHARACTERISTICS*** + + Maximum reservoir temperature: 400.0 degC + Number of segments: 1 + Geothermal gradient: 0.0650 degC/m + + + ***RESERVOIR PARAMETERS*** + + Reservoir Model = Multiple Parallel Fractures Model + Bottom-hole temperature: 215.00 degC + Fracture model = Square + Well separation: fracture height: 900.00 meter + Fracture area: 810000.00 m**2 + Reservoir volume: 1000000000 m**3 + Average reservoir pressure: 31570.25 kPa + Plant outlet pressure: 381.21 kPa + Production wellhead pressure: 450.16 kPa + Productivity Index: 5.00 kg/sec/bar + Injectivity Index: 5.00 kg/sec/bar + Reservoir density: 2700.00 kg/m**3 + Reservoir thermal conductivity: 2.70 W/m/K + Reservoir heat capacity: 1000.00 J/kg/K + + + ***RESERVOIR SIMULATION RESULTS*** + + Maximum Production Temperature: 212.3 degC + Average Production Temperature: 212.1 degC + Minimum Production Temperature: 210.4 degC + Initial Production Temperature: 210.4 degC + Average Reservoir Heat Extraction: 106.00 MW + Production Wellbore Heat Transmission Model = Ramey Model + Average Production Well Temperature Drop: 2.8 degC + Average Injection Well Pump Pressure Drop: 4214.3 kPa + Average Production Well Pump Pressure Drop: -581.3 kPa + + + ***CAPITAL COSTS (M$)*** + + Drilling and completion costs: 21.95 MUSD + Drilling and completion costs per well: 5.49 MUSD + Stimulation costs: 3.02 MUSD + Surface power plant costs: 52.13 MUSD + Field gathering system costs: 3.30 MUSD + Total surface equipment costs: 55.44 MUSD + Exploration costs: 5.33 MUSD + Total capital costs: 85.73 MUSD + Annualized capital costs: 4.29 MUSD + + + ***OPERATING AND MAINTENANCE COSTS (M$/yr)*** + + Wellfield maintenance costs: 0.61 MUSD/yr + Power plant maintenance costs: 1.87 MUSD/yr + Water costs: 0.08 MUSD/yr + Total operating and maintenance costs: 2.56 MUSD/yr + + + ***SURFACE EQUIPMENT SIMULATION RESULTS*** + + Initial geofluid availability: 0.19 MW/(kg/s) + Maximum Total Electricity Generation: 15.61 MW + Average Total Electricity Generation: 15.57 MW + Minimum Total Electricity Generation: 15.27 MW + Initial Total Electricity Generation: 15.27 MW + Maximum Net Electricity Generation: 15.17 MW + Average Net Electricity Generation: 14.41 MW + Minimum Net Electricity Generation: 13.65 MW + Initial Net Electricity Generation: 15.03 MW + Average Annual Total Electricity Generation: 122.08 GWh + Average Annual Net Electricity Generation: 112.94 GWh + Initial pumping power/net installed power: 1.59 % + Average Pumping Power: 1.16 MW + + ************************************************************ + * HEATING, COOLING AND/OR ELECTRICITY PRODUCTION PROFILE * + ************************************************************ + YEAR THERMAL GEOFLUID PUMP NET FIRST LAW + DRAWDOWN TEMPERATURE POWER POWER EFFICIENCY + (degC) (MW) (MW) (%) + 1 1.0000 210.41 0.2396 15.0257 14.3246 + 2 1.0046 211.39 0.2801 15.1607 14.3659 + 3 1.0060 211.67 0.3205 15.1697 14.3499 + 4 1.0066 211.81 0.3610 15.1549 14.3233 + 5 1.0071 211.90 0.4014 15.1313 14.2927 + 6 1.0074 211.97 0.4419 15.1033 14.2602 + 7 1.0077 212.02 0.4823 15.0726 14.2265 + 8 1.0079 212.07 0.5227 15.0401 14.1919 + 9 1.0080 212.11 0.5632 15.0064 14.1568 + 10 1.0082 212.14 0.7193 14.8561 14.0123 + 11 1.0083 212.17 1.1127 14.4677 13.6436 + 12 1.0085 212.19 1.1531 14.4318 13.6076 + 13 1.0086 212.21 1.1935 14.3954 13.5715 + 14 1.0087 212.23 1.2339 14.3586 13.5351 + 15 1.0087 212.25 1.2744 14.3214 13.4985 + 16 1.0088 212.27 1.3148 14.2839 13.4618 + 17 1.0089 212.28 1.3552 14.2459 13.4249 + 18 1.0089 212.29 1.3957 14.2076 13.3878 + 19 1.0090 212.30 1.4361 14.1687 13.3505 + 20 1.0090 212.31 1.4766 14.1294 13.3129 + 21 1.0090 212.31 1.5171 14.0894 13.2750 + 22 1.0090 212.31 1.5576 14.0488 13.2368 + 23 1.0090 212.30 1.5981 14.0074 13.1982 + 24 1.0089 212.30 1.6386 13.9651 13.1591 + 25 1.0089 212.28 1.6792 13.9220 13.1196 + 26 1.0088 212.26 1.7198 13.8777 13.0796 + 27 1.0087 212.23 1.7604 13.8324 13.0389 + 28 1.0085 212.20 1.8011 13.7858 12.9976 + 29 1.0083 212.16 1.8418 13.7378 12.9556 + 30 1.0081 212.11 1.8826 13.6885 12.9129 + + + ******************************************************************* + * ANNUAL HEATING, COOLING AND/OR ELECTRICITY PRODUCTION PROFILE * + ******************************************************************* + YEAR ELECTRICITY HEAT RESERVOIR PERCENTAGE OF + PROVIDED EXTRACTED HEAT CONTENT TOTAL HEAT MINED + (GWh/year) (GWh/year) (10^15 J) (%) + 1 119.1 829.8 442.51 0.67 + 2 119.6 832.8 439.51 1.34 + 3 119.5 833.8 436.51 2.02 + 4 119.4 834.4 433.51 2.69 + 5 119.2 834.8 430.50 3.37 + 6 119.0 835.2 427.50 4.04 + 7 118.7 835.4 424.49 4.72 + 8 118.4 835.6 421.48 5.39 + 9 118.0 835.8 418.47 6.07 + 10 115.6 836.0 415.46 6.74 + 11 113.9 836.1 412.45 7.42 + 12 113.6 836.2 409.44 8.09 + 13 113.3 836.3 406.43 8.77 + 14 113.1 836.4 403.42 9.45 + 15 112.8 836.5 400.41 10.12 + 16 112.5 836.6 397.40 10.80 + 17 112.2 836.6 394.39 11.47 + 18 111.9 836.7 391.37 12.15 + 19 111.6 836.7 388.36 12.83 + 20 111.2 836.8 385.35 13.50 + 21 110.9 836.8 382.34 14.18 + 22 110.6 836.8 379.32 14.85 + 23 110.3 836.7 376.31 15.53 + 24 109.9 836.7 373.30 16.21 + 25 109.6 836.6 370.29 16.88 + 26 109.2 836.4 367.28 17.56 + 27 108.9 836.3 364.27 18.23 + 28 108.5 836.1 361.26 18.91 + 29 108.1 835.9 358.25 19.59 + 30 89.8 696.4 355.74 20.15 + + + ******************************** + * REVENUE & CASHFLOW PROFILE * + ******************************** +Year Electricity | Heat | Cooling | Carbon | Project +Since Price Ann. Rev. Cumm. Rev. | Price Ann. Rev. Cumm. Rev. | Price Ann. Rev. Cumm. Rev. | Price Ann. Rev. Cumm. Rev. | OPEX Net Rev. Net Cashflow +Start (cents/kWh)(MUSD/yr) (MUSD) |(cents/kWh) (MUSD/yr) (MUSD) |(cents/kWh) (MUSD/yr) (MUSD) |(USD/tonne) (MUSD/yr) (MUSD) |(MUSD/yr) (MUSD/yr) (MUSD) +________________________________________________________________________________________________________________________________________________________________________________________ + 1 0.00 -85.73 0.00 | 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 -85.73 -85.73 + 2 9.00 8.15 10.72 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 8.15 -77.57 + 3 9.00 8.20 21.48 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 8.20 -69.37 + 4 9.00 8.19 32.24 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 8.19 -61.18 + 5 9.00 8.18 42.98 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 8.18 -53.00 + 6 9.00 8.16 53.71 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 8.16 -44.84 + 7 9.00 8.14 64.42 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 8.14 -36.69 + 8 10.20 9.54 76.52 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 9.54 -27.15 + 9 11.40 10.94 90.03 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 10.94 -16.21 + 10 12.60 12.31 104.90 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 12.31 -3.91 + 11 13.80 13.39 120.85 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 13.39 9.48 + 12 15.00 14.52 137.94 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.52 24.01 + 13 15.00 14.48 154.98 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.48 38.49 + 14 15.00 14.44 171.99 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.44 52.93 + 15 15.00 14.39 188.95 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.39 67.32 + 16 15.00 14.35 205.86 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.35 81.67 + 17 15.00 14.31 222.73 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.31 95.98 + 18 15.00 14.26 239.55 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.26 110.24 + 19 15.00 14.21 256.33 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.21 124.45 + 20 15.00 14.17 273.07 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.17 138.62 + 21 15.00 14.12 289.75 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.12 152.74 + 22 15.00 14.07 306.39 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.07 166.81 + 23 15.00 14.03 322.98 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 14.03 180.84 + 24 15.00 13.98 339.52 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 13.98 194.81 + 25 15.00 13.93 356.01 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 13.93 208.74 + 26 15.00 13.87 372.45 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 13.87 222.61 + 27 15.00 13.82 388.83 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 13.82 236.43 + 28 15.00 13.77 405.16 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 13.77 250.20 + 29 15.00 13.71 421.44 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 13.71 263.91 + 30 15.00 13.65 437.66 | 2.50 0.00 0.00 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 2.56 13.65 277.56 diff --git a/tests/examples/example_overpressure.txt b/tests/examples/example_overpressure.txt new file mode 100644 index 00000000..a6a27193 --- /dev/null +++ b/tests/examples/example_overpressure.txt @@ -0,0 +1,83 @@ +GEOPHIRES v2.0 Input File +Created on 2018-06-11 +Last modified on 2024-02-28 +Geothermal Electricity Problem using a Multiple Parallel Fractures Model + +Example 1 Description: This problem considers an EGS reservoir at 3km depth. +Ramey's model is applied to simulate production wellbore heat losses. The heat +is used in for electricity application with a reinjection temperature of 50deg.C. + + +***Subsurface technical parameters*** +************************************* +Overpressure Percentage, 155.0 +Overpressure Depletion Rate, 10.0 +Injection Reservoir Temperature, 101.1 +Injection Reservoir Depth, 1001.1 +Injection Reservoir Inflation Rate, 202.2 +Reservoir Model,1, ---Multiple Fractures reservoir model +Reservoir Depth,3, ---[km] +Number of Segments,1, ---[-] +Gradient 1,65, ---[deg.C/km] +Maximum Temperature,400, ---[deg.C] +Number of Production Wells,2, ---[-] +Number of Injection Wells,2, ---[-] +Production Well Diameter,9, ---[inch] +Injection Well Diameter,9, ---[inch] +Ramey Production Wellbore Model,1, ---0 if disabled 1 if enabled +Production Wellbore Temperature Drop,.5, ---[deg.C] +Injection Wellbore Temperature Gain,0, ---[deg.C] +Production Flow Rate per Well,80, ---[kg/s] +Fracture Shape,3, ---[-] Should be 1 2 3 or 4. See manual for details +Fracture Height,900, ---[m] +Reservoir Volume Option,3, ---[-] Should be 1 2 3 or 4. See manual for details +Number of Fractures,20, ---[-] +Reservoir Volume,1000000000, ---[m^3] +Water Loss Fraction,.02, ---[-] +Productivity Index,5, ---[kg/s/bar] +Injectivity Index,5, ---[kg/s/bar] +Injection Temperature,50, ---[deg.C] +Maximum Drawdown,1, ---[-] no redrilling considered +Reservoir Heat Capacity,1000, ---[J/kg/K] +Reservoir Density,2700, ---[kg/m^3] +Reservoir Thermal Conductivity,2.7, ---[W/m/K] + +***SURFACE TECHNICAL PARAMETERS*** +********************************** +End-Use Option,1, ---[-] Electricity +Power Plant Type,2, ---[-] Supercritical ORC +Circulation Pump Efficiency,.8, ---[-] between .1 and 1 +Utilization Factor,.9, ---[-] between .1 and 1 +Surface Temperature,20, ---[deg.C] +Ambient Temperature,20, ---[deg.C] + +***FINANCIAL PARAMETERS*** +************************** +Plant Lifetime,30, ---[years] +Economic Model,1, ---[-] Fixed Charge Rate Model +Fixed Charge Rate,.05, ---[-] between 0 and 1 +Inflation Rate During Construction,0, ---[-] +Starting Electricity Sale Price,0.09 +Ending Electricity Sale Price,0.15 +Electricity Escalation Start Year,5 +Electricity Escalation Rate Per Year,0.012 + + +***CAPITAL AND O&M COST PARAMETERS*** +************************************* +Well Drilling and Completion Capital Cost Adjustment Factor,1, ---[-] Use built-in correlations +Well Drilling Cost Correlation,1, ---[-] Use built-in correlations +Reservoir Stimulation Capital Cost Adjustment Factor,1, ---[-] Use built-in correlations +Surface Plant Capital Cost Adjustment Factor,1, ---[-] Use built-in correlations +Field Gathering System Capital Cost Adjustment Factor,1, ---[-] Use built-in correlations +Exploration Capital Cost Adjustment Factor,1, ---[-] Use built-in correlations +Wellfield O&M Cost Adjustment Factor,1, ---[-] Use built-in correlations +Surface Plant O&M Cost Adjustment Factor,1, ---[-] Use built-in correlations +Water Cost Adjustment Factor,1, ---[-] Use built-in correlations + + +***Simulation Parameters*** +*************************** + +Print Output to Console,1, ---[-] Should be 0 (don't print results) or 1 (print results) +Time steps per year,6, ---[1/year] diff --git a/tests/geophires-result_example-1.out b/tests/geophires-result_example-1.out index b6b719ed..f0d25efb 100644 --- a/tests/geophires-result_example-1.out +++ b/tests/geophires-result_example-1.out @@ -62,7 +62,7 @@ Simulation Metadata Reservoir Model = 1-D Linear Heat Sweep Model Bottom-hole temperature: 180.00 degC Fracture model = Circular fracture with known diameter - Well seperation: fracture diameter: 300.00 meter + Well separation: fracture diameter: 300.00 meter Fracture area: 70685.83 m**2 Number of fractures calculated with reservoir volume and fracture separation as input Number of fractures: 30.47 diff --git a/tests/geophires-result_example-2.out b/tests/geophires-result_example-2.out index 8ba676c0..a7008fb4 100644 --- a/tests/geophires-result_example-2.out +++ b/tests/geophires-result_example-2.out @@ -63,10 +63,10 @@ Simulation Metadata Reservoir Model = Multiple Parallel Fractures Model Bottom-hole temperature: 170.00 degC Fracture model = Square - Well seperation: fracture height: 900.00 meter + Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 100.00 kPa + Average reservoir pressure: 100.00 kPa Plant outlet pressure: 1062.72 kPa Production wellhead pressure: 1131.67 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/geophires-result_example-3.csv b/tests/geophires-result_example-3.csv index 80e7bbe7..1a3ac5dc 100644 --- a/tests/geophires-result_example-3.csv +++ b/tests/geophires-result_example-3.csv @@ -33,7 +33,7 @@ RESOURCE CHARACTERISTICS,Geothermal gradient,,0.07,degC/m RESERVOIR PARAMETERS,Reservoir Model,,Single Fracture m/A Thermal Drawdown Model, RESERVOIR PARAMETERS,Bottom-hole temperature,,232.0,degC RESERVOIR PARAMETERS,Reservoir volume,,176000000,m**3 -RESERVOIR PARAMETERS,Reservoir hydrostatic pressure,,100.0,kPa +RESERVOIR PARAMETERS,Average reservoir pressure,,100.0,kPa RESERVOIR PARAMETERS,Plant outlet pressure,,100.0,kPa RESERVOIR PARAMETERS,Injectivity Index,,5.0,kg/sec/bar RESERVOIR PARAMETERS,Reservoir density,,3000.0,kg/m**3 diff --git a/tests/geophires-result_example-3.out b/tests/geophires-result_example-3.out index d9808613..6eaf891a 100644 --- a/tests/geophires-result_example-3.out +++ b/tests/geophires-result_example-3.out @@ -67,7 +67,7 @@ Simulation Metadata Number of fractures: 12.00 Fracture separation: 80.00 meter Reservoir volume: 176000000 m**3 - Reservoir hydrostatic pressure: 100.00 kPa + Average reservoir pressure: 100.00 kPa Plant outlet pressure: 100.00 kPa Injectivity Index: 5.00 kg/sec/bar Reservoir density: 3000.00 kg/m**3 diff --git a/tests/geophires-result_example-4.out b/tests/geophires-result_example-4.out index bee86f8e..6234ec30 100644 --- a/tests/geophires-result_example-4.out +++ b/tests/geophires-result_example-4.out @@ -70,7 +70,7 @@ Simulation Metadata They are only used for calculating remaining heat content. Reservoir volume provided as input Reservoir volume: 125000000 m**3 - Reservoir hydrostatic pressure: 100.00 kPa + Average reservoir pressure: 100.00 kPa Plant outlet pressure: 445.96 kPa Production wellhead pressure: 514.91 kPa Productivity Index: 10.00 kg/sec/bar diff --git a/tests/geophires_monte_carlo_tests/MC_GEOPHIRES_Settings_file-2.txt b/tests/geophires_monte_carlo_tests/MC_GEOPHIRES_Settings_file-2.txt index 34fc53a1..188787f1 100644 --- a/tests/geophires_monte_carlo_tests/MC_GEOPHIRES_Settings_file-2.txt +++ b/tests/geophires_monte_carlo_tests/MC_GEOPHIRES_Settings_file-2.txt @@ -5,5 +5,5 @@ OUTPUT, Average Net Electricity Production OUTPUT, Project NPV OUTPUT, Total capital costs OUTPUT, Average Production Temperature -OUTPUT, Reservoir hydrostatic pressure +OUTPUT, Average reservoir pressure ITERATIONS, 3 diff --git a/tests/geophires_monte_carlo_tests/test_geophires_monte_carlo.py b/tests/geophires_monte_carlo_tests/test_geophires_monte_carlo.py index f7a2fefd..74a9b12d 100644 --- a/tests/geophires_monte_carlo_tests/test_geophires_monte_carlo.py +++ b/tests/geophires_monte_carlo_tests/test_geophires_monte_carlo.py @@ -84,7 +84,7 @@ def test_monte_carlo_result_ordering(self): 'Project NPV', 'Total capital costs', 'Average Production Temperature', - 'Reservoir hydrostatic pressure', + 'Average reservoir pressure', ]: self.assertIn(output, result_json_obj) for stat in ['average', 'maximum', 'mean', 'median', 'minimum', 'standard deviation']: @@ -102,7 +102,7 @@ def test_monte_carlo_result_ordering(self): self.assertGreater(avg_prod_tmp, 280) self.assertLess(avg_prod_tmp, 420) - self.assertGreater(result_json_obj['Reservoir hydrostatic pressure']['average'], 60000) + self.assertGreater(result_json_obj['Average reservoir pressure']['average'], 60000) self.assertLess(result_json_obj['Total capital costs']['average'], 1000) self.assertDictEqual(result_json_obj, result.result['output']) diff --git a/tests/geophires_x_tests/test_cylindrical_reservoir.py b/tests/geophires_x_tests/test_cylindrical_reservoir.py index 078d4836..bbb21546 100644 --- a/tests/geophires_x_tests/test_cylindrical_reservoir.py +++ b/tests/geophires_x_tests/test_cylindrical_reservoir.py @@ -119,7 +119,7 @@ def test_calculate_heat_capacity_water(self): reservoir.Calculate(model) expected_heat_capacity = heatcapacitywater( model.wellbores.Tinj.value * 0.5 + (reservoir.Trock.value * 0.9 + model.wellbores.Tinj.value * 0.1) * 0.5, - pressure=model.reserv.lithostatic_pressure(), + pressure=model.reserv.lithostatic_pressure(reservoir.rhorock.value, reservoir.Trock.value), ) assert reservoir.cpwater.value == expected_heat_capacity @@ -130,7 +130,7 @@ def test_calculate_density_water(self): reservoir.Calculate(model) expected_density = density_water_kg_per_m3( model.wellbores.Tinj.value * 0.5 + (reservoir.Trock.value * 0.9 + model.wellbores.Tinj.value * 0.1) * 0.5, - pressure=reservoir.lithostatic_pressure(), + pressure=reservoir.lithostatic_pressure(reservoir.rhorock.value, reservoir.Trock.value), ) assert expected_density == reservoir.rhowater.value diff --git a/tests/geophires_x_tests/test_reservoir.py b/tests/geophires_x_tests/test_reservoir.py index 0cedc225..42db0aa8 100644 --- a/tests/geophires_x_tests/test_reservoir.py +++ b/tests/geophires_x_tests/test_reservoir.py @@ -17,7 +17,7 @@ def test_lithostatic_pressure(self): def test_reservoir_lithostatic_pressure(self): reservoir = Reservoir(self._new_model()) - p: PlainQuantity = reservoir.lithostatic_pressure() + p: PlainQuantity = reservoir.lithostatic_pressure(2700, 3000) # Assumes Reservoir default values of rho=2700, depth=3km self.assertAlmostEqual(79.433865, p.magnitude, places=3) diff --git a/tests/result_with_ccus_profile.out b/tests/result_with_ccus_profile.out index 97a764d0..84308491 100644 --- a/tests/result_with_ccus_profile.out +++ b/tests/result_with_ccus_profile.out @@ -63,10 +63,10 @@ Simulation Metadata Reservoir Model = Multiple Parallel Fractures Model Bottom-hole temperature: 170.00 degC Fracture model = Square - Well seperation: fracture height: 900.00 meter + Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 29430.21 kPa + Average reservoir pressure: 29430.21 kPa Plant outlet pressure: 29705.96 kPa Production wellhead pressure: 29774.91 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/result_with_revenue_and_cashflow_profile.out b/tests/result_with_revenue_and_cashflow_profile.out index a4ece120..4dcaeade 100644 --- a/tests/result_with_revenue_and_cashflow_profile.out +++ b/tests/result_with_revenue_and_cashflow_profile.out @@ -64,10 +64,10 @@ Simulation Metadata Reservoir Model = Multiple Parallel Fractures Model Bottom-hole temperature: 170.00 degC Fracture model = Square - Well seperation: fracture height: 900.00 meter + Well separation: fracture height: 900.00 meter Fracture area: 810000.00 m**2 Reservoir volume: 1000000000 m**3 - Reservoir hydrostatic pressure: 29430.21 kPa + Average reservoir pressure: 29430.21 kPa Plant outlet pressure: 29705.96 kPa Production wellhead pressure: 29774.91 kPa Productivity Index: 5.00 kg/sec/bar diff --git a/tests/test_parameter.py b/tests/test_parameter.py index 90f97b2d..6c765ff9 100644 --- a/tests/test_parameter.py +++ b/tests/test_parameter.py @@ -45,21 +45,21 @@ def test_convert_units_back(self): def test_set_default_value(self): without_val = floatParameter( - 'Reservoir Hydrostatic Pressure', + 'Average Reservoir Pressure', DefaultValue=29430, # Calculated from example1 Min=1e2, Max=1e5, UnitType=Units.PRESSURE, PreferredUnits=PressureUnit.KPASCAL, CurrentUnits=PressureUnit.KPASCAL, - ErrMessage='calculate reservoir hydrostatic pressure using built-in correlation', + ErrMessage='calculate reservoir pressure using built-in correlation', ToolTipText='Reservoir hydrostatic far-field pressure. Default value is calculated with built-in modified \ Xie-Bloomfield-Shook equation (DOE, 2016).', ) self.assertEqual(29430, without_val.value) with_val = floatParameter( - 'Reservoir Hydrostatic Pressure', + 'Average Reservoir Pressure', value=1e2, DefaultValue=29430, Min=1e2, @@ -67,7 +67,7 @@ def test_set_default_value(self): UnitType=Units.PRESSURE, PreferredUnits=PressureUnit.KPASCAL, CurrentUnits=PressureUnit.KPASCAL, - ErrMessage='calculate reservoir hydrostatic pressure using built-in correlation', + ErrMessage='calculate reservoir pressure using built-in correlation', ToolTipText='Reservoir hydrostatic far-field pressure. Default value is calculated with built-in modified \ Xie-Bloomfield-Shook equation (DOE, 2016).', )