Loading src/pythermogis/workflow/utc/constants.py 0 → 100644 +1 −0 Original line number Diff line number Diff line DARCY_SI = 1.0e-12 / 1.01325 No newline at end of file src/pythermogis/workflow/utc/doublet.py +16 −32 Original line number Diff line number Diff line Loading @@ -2,8 +2,6 @@ import timeit from dataclasses import dataclass from typing import NamedTuple import numpy as np from pythermogis.utils.timer import print_time from pythermogis.workflow.utc.cooling_temp import calculate_cooling_temperature from pythermogis.workflow.utc.doublet_utils import ( Loading @@ -13,6 +11,7 @@ from pythermogis.workflow.utc.doublet_utils import ( from pythermogis.workflow.utc.pressure import calculate_max_pressure, optimize_pressure from pythermogis.workflow.utc.utc_properties import UTCConfiguration from pythermogis.workflow.utc.well_distance import optimize_well_distance from pythermogis.workflow.utc.constants import DARCY_SI EUR_PER_CT_PER_KWH = 0.36 NPV_SCALE = 1e-6 Loading @@ -31,7 +30,6 @@ class DoubletInput: @property def permeability(self) -> float: DARCY_SI = 1.0e-12 / 1.01325 return self.transmissivity / self.thickness * 1e-3 * DARCY_SI Loading Loading @@ -62,7 +60,7 @@ def calculate_doublet_performance( timer = timeit.default_timer() # determine initial well distance well_distance = ( np.mean([props.optim_dist_well_dist_min + props.optim_dist_well_dist_max]) (props.optim_dist_well_dist_min + props.optim_dist_well_dist_max) / 2 if props.optim_well_dist else props.default_well_distance ) Loading Loading @@ -142,27 +140,13 @@ def calculate_doublet_performance( if pressure_results is None: return None # everything underneath here is fast, no point in optimizing heat_power_per_doublet = pressure_results.heat_power_per_doublet flowrate = pressure_results.flowrate discounted_heat_produced_p = pressure_results.discounted_heat_produced variable_opex = pressure_results.variable_opex fixed_opex = pressure_results.fixed_opex total_opex_ts = pressure_results.total_opex_ts cop = pressure_results.cop drawdown_pressure = pressure_results.drawdown_pressure # overwrite like Java sum_capex = pressure_results.sum_capex utc = pressure_results.utc hp_added_power = pressure_results.hp_added_power production_temp = pressure_results.production_temp total_variable_opex = sum(variable_opex) total_fixed_opex = sum(fixed_opex) total_variable_opex = sum(pressure_results.variable_opex) total_fixed_opex = sum(pressure_results.fixed_opex) utc_eur_ct_per_kwh = ( input.unknown_input_value if utc == input.unknown_input_value else utc * EUR_PER_CT_PER_KWH if pressure_results.utc == input.unknown_input_value else pressure_results.utc * EUR_PER_CT_PER_KWH ) if abs(input.unknown_input_value) < 10: Loading @@ -178,7 +162,7 @@ def calculate_doublet_performance( input.thickness * input.ntg, 0.001, input.porosity, flowrate, pressure_results.flowrate, input.depth, input.temperature, props.salinity_surface, Loading @@ -197,29 +181,29 @@ def calculate_doublet_performance( NPV_SCALE * (utc_cutoff - utc_eur_ct_per_kwh) * 3.6 * discounted_heat_produced_p * pressure_results.discounted_heat_produced * (1 - props.tax_rate) ) opex_first_prod_year = total_opex_ts[props.drilling_time] opex_first_prod_year = pressure_results.total_opex_ts[props.drilling_time] print_time(timer, "economics: ", verbose=verbose) return DoubletOutput( power=heat_power_per_doublet, hppower=hp_added_power, capex=sum_capex, power=pressure_results.heat_power_per_doublet, hppower=pressure_results.hp_added_power, capex=pressure_results.sum_capex, var_opex=total_variable_opex, fixed_opex=total_fixed_opex, opex=opex_first_prod_year, utc=utc_eur_ct_per_kwh, npv=npv, hprod=discounted_heat_produced_p, cop=cop, hprod=pressure_results.discounted_heat_produced, cop=pressure_results.cop, cophp=pressure_results.heat_pump_cop, pres=drawdown_pressure / 1e5, flow=flowrate, flow=pressure_results.flowrate, welld=well_distance, breakthrough=breakthrough_years, cooling=end_temperature_p, production_temp=production_temp, production_temp=pressure_results.production_temp, injection_temp=injection_temperature, ) Loading
src/pythermogis/workflow/utc/constants.py 0 → 100644 +1 −0 Original line number Diff line number Diff line DARCY_SI = 1.0e-12 / 1.01325 No newline at end of file
src/pythermogis/workflow/utc/doublet.py +16 −32 Original line number Diff line number Diff line Loading @@ -2,8 +2,6 @@ import timeit from dataclasses import dataclass from typing import NamedTuple import numpy as np from pythermogis.utils.timer import print_time from pythermogis.workflow.utc.cooling_temp import calculate_cooling_temperature from pythermogis.workflow.utc.doublet_utils import ( Loading @@ -13,6 +11,7 @@ from pythermogis.workflow.utc.doublet_utils import ( from pythermogis.workflow.utc.pressure import calculate_max_pressure, optimize_pressure from pythermogis.workflow.utc.utc_properties import UTCConfiguration from pythermogis.workflow.utc.well_distance import optimize_well_distance from pythermogis.workflow.utc.constants import DARCY_SI EUR_PER_CT_PER_KWH = 0.36 NPV_SCALE = 1e-6 Loading @@ -31,7 +30,6 @@ class DoubletInput: @property def permeability(self) -> float: DARCY_SI = 1.0e-12 / 1.01325 return self.transmissivity / self.thickness * 1e-3 * DARCY_SI Loading Loading @@ -62,7 +60,7 @@ def calculate_doublet_performance( timer = timeit.default_timer() # determine initial well distance well_distance = ( np.mean([props.optim_dist_well_dist_min + props.optim_dist_well_dist_max]) (props.optim_dist_well_dist_min + props.optim_dist_well_dist_max) / 2 if props.optim_well_dist else props.default_well_distance ) Loading Loading @@ -142,27 +140,13 @@ def calculate_doublet_performance( if pressure_results is None: return None # everything underneath here is fast, no point in optimizing heat_power_per_doublet = pressure_results.heat_power_per_doublet flowrate = pressure_results.flowrate discounted_heat_produced_p = pressure_results.discounted_heat_produced variable_opex = pressure_results.variable_opex fixed_opex = pressure_results.fixed_opex total_opex_ts = pressure_results.total_opex_ts cop = pressure_results.cop drawdown_pressure = pressure_results.drawdown_pressure # overwrite like Java sum_capex = pressure_results.sum_capex utc = pressure_results.utc hp_added_power = pressure_results.hp_added_power production_temp = pressure_results.production_temp total_variable_opex = sum(variable_opex) total_fixed_opex = sum(fixed_opex) total_variable_opex = sum(pressure_results.variable_opex) total_fixed_opex = sum(pressure_results.fixed_opex) utc_eur_ct_per_kwh = ( input.unknown_input_value if utc == input.unknown_input_value else utc * EUR_PER_CT_PER_KWH if pressure_results.utc == input.unknown_input_value else pressure_results.utc * EUR_PER_CT_PER_KWH ) if abs(input.unknown_input_value) < 10: Loading @@ -178,7 +162,7 @@ def calculate_doublet_performance( input.thickness * input.ntg, 0.001, input.porosity, flowrate, pressure_results.flowrate, input.depth, input.temperature, props.salinity_surface, Loading @@ -197,29 +181,29 @@ def calculate_doublet_performance( NPV_SCALE * (utc_cutoff - utc_eur_ct_per_kwh) * 3.6 * discounted_heat_produced_p * pressure_results.discounted_heat_produced * (1 - props.tax_rate) ) opex_first_prod_year = total_opex_ts[props.drilling_time] opex_first_prod_year = pressure_results.total_opex_ts[props.drilling_time] print_time(timer, "economics: ", verbose=verbose) return DoubletOutput( power=heat_power_per_doublet, hppower=hp_added_power, capex=sum_capex, power=pressure_results.heat_power_per_doublet, hppower=pressure_results.hp_added_power, capex=pressure_results.sum_capex, var_opex=total_variable_opex, fixed_opex=total_fixed_opex, opex=opex_first_prod_year, utc=utc_eur_ct_per_kwh, npv=npv, hprod=discounted_heat_produced_p, cop=cop, hprod=pressure_results.discounted_heat_produced, cop=pressure_results.cop, cophp=pressure_results.heat_pump_cop, pres=drawdown_pressure / 1e5, flow=flowrate, flow=pressure_results.flowrate, welld=well_distance, breakthrough=breakthrough_years, cooling=end_temperature_p, production_temp=production_temp, production_temp=pressure_results.production_temp, injection_temp=injection_temperature, )