Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Post conversation on jan 30, i am updaating HIP-RA so that you can se… #115

Merged
merged 3 commits into from
Feb 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion src/geophires_x/Units.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ class Units(IntEnum):
POPDENSITY = auto()
HEATPERUNITAREA = auto()
POWERPERUNITAREA = auto()
HEATPERUNITVOLUME = auto()
POWERPERUNITVOLUME = auto()


class TemperatureUnit(str, Enum):
Expand Down Expand Up @@ -307,9 +309,19 @@ class PopDensityUnit(str,Enum):

class HeatPerUnitAreaUnit(str,Enum):
"""Population Density Units"""
KJPERSQKM = "KJ/km**2"
KJPERSQKM = "kJ/km**2"


class PowerPerUnitAreaUnit(str,Enum):
"""Population Density Units"""
MWPERSQKM = "MW/km**2"


class HeatPerUnitVolumeUnit(str,Enum):
"""Population Density Units"""
KJPERCUBICKM = "kJ/km**3"


class PowerPerUnitVolumeUnit(str,Enum):
"""Population Density Units"""
MWPERCUBICKM = "MW/km**3"
65 changes: 60 additions & 5 deletions src/hip_ra_x/hip_ra_x.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@
from geophires_x.Units import EnthalpyUnit
from geophires_x.Units import HeatCapacityUnit
from geophires_x.Units import HeatPerUnitAreaUnit
from geophires_x.Units import HeatPerUnitVolumeUnit
from geophires_x.Units import HeatUnit
from geophires_x.Units import LengthUnit
from geophires_x.Units import MassUnit
from geophires_x.Units import PercentUnit
from geophires_x.Units import PowerPerUnitAreaUnit
from geophires_x.Units import PowerPerUnitVolumeUnit
from geophires_x.Units import PowerUnit
from geophires_x.Units import TemperatureUnit
from geophires_x.Units import TimeUnit
malcolm-dsider marked this conversation as resolved.
Show resolved Hide resolved
Expand Down Expand Up @@ -305,7 +307,7 @@ def parameter_dict_entry(param: Parameter) -> Parameter:
CurrentUnits=VolumeUnit.KILOMETERS3,
)
self.volume_recoverable_fluid = self.OutputParameterDict[self.volume_recoverable_fluid.Name] = OutputParameter(
Name='Recoverable Fluid Volume',
Name='Recoverable Volume (recoverable fluid)',
UnitType=Units.VOLUME,
PreferredUnits=VolumeUnit.KILOMETERS3,
CurrentUnits=VolumeUnit.KILOMETERS3,
Expand Down Expand Up @@ -488,6 +490,14 @@ def parameter_dict_entry(param: Parameter) -> Parameter:
PreferredUnits=HeatPerUnitAreaUnit.KJPERSQKM,
CurrentUnits=HeatPerUnitAreaUnit.KJPERSQKM,
)
self.heat_per_unit_volume_reservoir = self.OutputParameterDict[
self.heat_per_unit_volume_reservoir.Name
] = OutputParameter(
Name='Producible Heat/Unit Volume (reservoir)',
UnitType=Units.HEATPERUNITVOLUME,
PreferredUnits=HeatPerUnitVolumeUnit.KJPERCUBICKM,
CurrentUnits=HeatPerUnitVolumeUnit.KJPERCUBICKM,
)
self.producible_electricity_per_unit_area = self.OutputParameterDict[
self.producible_electricity_per_unit_area.Name
] = OutputParameter(
Expand All @@ -512,6 +522,14 @@ def parameter_dict_entry(param: Parameter) -> Parameter:
PreferredUnits=PowerPerUnitAreaUnit.MWPERSQKM,
CurrentUnits=PowerPerUnitAreaUnit.MWPERSQKM,
)
self.electricity_per_unit_volume_reservoir = self.OutputParameterDict[
self.electricity_per_unit_volume_reservoir.Name
] = OutputParameter(
Name='Producible Electricity/Unit Volume (reservoir)',
UnitType=Units.POWERPERUNITVOLUME,
PreferredUnits=PowerPerUnitVolumeUnit.MWPERCUBICKM,
CurrentUnits=PowerPerUnitVolumeUnit.MWPERCUBICKM,
)

self.logger.info(f'Complete {__class__.__name__!s}: {__name__}')

Expand Down Expand Up @@ -669,8 +687,14 @@ def Calculate(self):
self.producible_electricity_per_unit_area.value = (
self.reservoir_producible_electricity.value / self.reservoir_area.value
)
self.electricity_per_unit_volume_reservoir.value = (
self.reservoir_producible_electricity.value / self.reservoir_volume.value
)

self.producible_heat_per_unit_area.value = self.reservoir_producible_heat.value / self.reservoir_area.value
self.heat_per_unit_volume_reservoir.value = (
self.reservoir_producible_heat.value / self.reservoir_volume.value
)

self.logger.info(f'Complete {__class__!s}: {__class__.__name__!s}: {__name__}')
except Exception as e:
Expand Down Expand Up @@ -717,12 +741,34 @@ def render_default(p: floatParameter | OutputParameter) -> str:
def render_scientific(p: floatParameter | OutputParameter) -> str:
return f'{p.value:10.2e} {p.CurrentUnits.value}'

summary_of_inputs = {}
summary_of_results = {}

for param, render in [
# TODO: Commented parameters are defined in initialization but not calculated - either calculate or
# remove entirely
(self.reservoir_temperature, render_default),
(self.rejection_temperature, render_default),
(self.reservoir_porosity, render_default),
(self.reservoir_area, render_default),
(self.reservoir_thickness, render_default),
(self.reservoir_life_cycle, render_default),
(self.rock_heat_capacity, render_scientific),
(self.fluid_heat_capacity, render_default),
(self.fluid_density, render_scientific),
(self.rock_density, render_scientific),
# (self.rock_recoverable_heat, render_default),
# (self.fluid_recoverable_heat, render_default),
(self.recoverable_fluid_factor, render_default),
(self.recoverable_rock_heat, render_default),
]:
summary_of_inputs[param.Name] = render(param)

case_data_inputs = {'SUMMARY OF INPUTS': summary_of_inputs}

for param, render in [
# TODO: Commented parameters are defined in initialization but not calculated - either calculate or
# remove entirely
(self.reservoir_volume, render_default),
(self.volume_rock, render_default),
(self.volume_recoverable_fluid, render_default),
Expand Down Expand Up @@ -757,18 +803,20 @@ def render_scientific(p: floatParameter | OutputParameter) -> str:
# (self.producible_heat_rock, render_scientific),
# (self.producible_heat_fluid, render_scientific),
(self.producible_heat_per_unit_area, render_scientific),
(self.heat_per_unit_volume_reservoir, render_scientific),
# (self.heat_per_unit_area_rock, render_scientific),
# (self.heat_per_unit_area_fluid, render_scientific),
(self.reservoir_producible_electricity, render_default),
# (self.producible_electricity_rock, render_default),
# (self.producible_electricity_fluid, render_default),
(self.producible_electricity_per_unit_area, render_default),
(self.electricity_per_unit_volume_reservoir, render_default),
# (self.electricity_per_unit_area_rock, render_default),
# (self.electricity_per_unit_area_fluid, render_default),
]:
summary_of_results[param.Name] = render(param)

case_data = {'SUMMARY OF RESULTS': summary_of_results}
case_data_results = {'SUMMARY OF RESULTS': summary_of_results}

with open(outputfile, 'w', encoding='UTF-8') as f:
nl = '\n'
Expand All @@ -777,10 +825,17 @@ def render_scientific(p: floatParameter | OutputParameter) -> str:
f.write(f' ***HIP CASE REPORT***{nl}')
f.write(f' *********************{nl}')
f.write(nl)
f.write(f' ***SUMMARY OF RESULTS***{nl}')
f.write(nl)
f.write(f' ***SUMMARY OF INPUTS***{nl}')

for k, v in case_data['SUMMARY OF RESULTS'].items():
for k, v in case_data_inputs['SUMMARY OF INPUTS'].items():
# align space between value and units to same column
kv_spaces = max(1, (24 - (len(v.split(' ')[0]) + len(k)))) * ' '

f.write(f' {k}:{kv_spaces}{v}{nl}')

f.write(nl)
f.write(f' ***SUMMARY OF RESULTS***{nl}')
for k, v in case_data_results['SUMMARY OF RESULTS'].items():
# align space between value and units to same column
kv_spaces = max(1, (24 - (len(v.split(' ')[0]) + len(k)))) * ' '

Expand Down
22 changes: 18 additions & 4 deletions tests/hip_ra_x_tests/examples/HIP-RA-X_example1.out
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,24 @@
***HIP CASE REPORT***
*********************

***SUMMARY OF RESULTS***

***SUMMARY OF INPUTS***
Reservoir Temperature: 250.00 degC
Rejection Temperature: 60.00 degC
Reservoir Porosity: 10.00 %
Reservoir Area: 55.00 km**2
Reservoir Thickness: 0.25 kilometer
Reservoir Life Cycle: 25.00 yr
Rock Heat Capacity: 2.84e+12 kJ/km**3C
Fluid Specific Heat Capacity: 4.86 kJ/kgC
Density Of Reservoir Fluid: 7.99e+11 kg/km**3
Density Of Reservoir Rock: 2.55e+12 kg/km**3
Recoverable Fluid Factor: 0.50
Recoverable Heat from Rock: 0.75

***SUMMARY OF RESULTS***
Reservoir Volume (reservoir): 13.75 km**3
Reservoir Volume (rock): 12.38 km**3
Recoverable Fluid Volume: 0.69 km**3
Recoverable Volume (recoverable fluid): 0.69 km**3
Stored Heat (reservoir): 5.47e+15 kJ
Stored Heat (rock): 5.01e+15 kJ
Stored Heat (fluid): 4.58e+14 kJ
Expand All @@ -19,6 +31,8 @@
Recovery Factor (reservoir): 14.30 %
Available Heat (reservoir): 1.18e+15 kJ
Producible Heat (reservoir): 7.82e+14 kJ
Producible Heat/Unit Area (reservoir): 1.42e+13 KJ/km**2
Producible Heat/Unit Area (reservoir): 1.42e+13 kJ/km**2
Producible Heat/Unit Volume (reservoir): 5.69e+13 kJ/km**3
Producible Electricity (reservoir): 500.82 MW
Producible Electricity/Unit Area (reservoir): 9.11 MW/km**2
Producible Electricity/Unit Volume (reservoir): 36.42 MW/km**3
Loading