Loading resources/thermogis_jar/thermogis-1.7.0-shaded.jar LFS (134 B) File changed.No diff preview for this file type. View original file View changed file src/pythermogis/thermogis_classes/utc_properties.py +25 −0 Original line number Diff line number Diff line from pathlib import Path import typing as t import xml.etree.ElementTree as ET from jpype import JClass Loading Loading @@ -37,3 +38,27 @@ def instantiate_utc_properties_builder() -> JClass: """ start_jvm() return JClass("thermogis.properties.builders.UTCPropertiesBuilder")() def get_viscosity_mode(mode: t.Literal["kestin", "batzlewang"]) -> JClass: """ Map a string to the Java ViscosityMode enum. Parameters ---------- mode : Literal["kestin", "batzlewang"] The viscosity mode to select. Returns ------- viscosity_mode_enum : jpype.JClass The corresponding Java enum instance. """ start_jvm() viscosity_mode = JClass("tno.geoenergy.ViscosityMode") if mode == "kestin": return viscosity_mode.KESTIN elif mode == "batzlewang": return viscosity_mode.BATZLEWANG else: raise ValueError(f"Unknown viscosity mode: {mode}") No newline at end of file tests/test_ThermoGISDoublet_Benchmark.py +14 −7 Original line number Diff line number Diff line Loading @@ -155,7 +155,13 @@ class ThermoGISDoubletBenchmark(TestCase): ViscosityMode = JClass("tno.geoenergy.ViscosityMode") # Instantiate the UTC properties class utc_properties = self.setup_template_utc_properties_builder().setOpexPerPower(100).setOpexBase(0).build() utc_properties = (self.setup_template_utc_properties_builder() .setOpexPerPower(100) .setOpexBase(0) .setUseHeatPump(True) .setHpApplicationMode(True) .setHpDirectHeatInputTemp(80) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -166,7 +172,7 @@ class ThermoGISDoubletBenchmark(TestCase): doublet.doubletCalc1DData.setReservoirTemp(50) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setDhReturnTemp(35) doublet.doubletCalc1DData.setInjectionTemp(doublet.calculateInjectionTempWithHeatPump(50, 70)) doublet.doubletCalc1DData.setInjectionTemp(15) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setNoStimulation() Loading @@ -178,11 +184,12 @@ class ThermoGISDoubletBenchmark(TestCase): self.assertTrue(np.isclose(17499.99940, transmissivity, 0.001)) self.assertTrue(np.isclose(163.99771118164062, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(4.97566556930542, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(989.2578125, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(10.922356605529785, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(8.45577723033848, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(15.046041336220961, doublet.economicalData.getSumcapex(), 0.001)) self.assertTrue(np.isclose(5.67, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(955.27, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(3.51, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(10.9, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(17.56, doublet.economicalData.getSumcapex(), 0.001)) def test_calculateDoubletPerformance_ORC(self): """ Loading tests/test_pyThermoGIS_Doublet_Benchmark.py +5 −3 Original line number Diff line number Diff line Loading @@ -8,9 +8,10 @@ class ThermoGISDoubletBenchmark(TestCase): """ def test_calculateDoubletPerformanceTest(self): viscosity_mode = get_viscosity_mode("kestin") utc_properties = (instantiate_utc_properties_builder() .setDhReturnTemp(40) .setUseKestinViscosity(True) .setViscosityMode(viscosity_mode) .build()) input_data = xr.Dataset({ Loading Loading @@ -146,9 +147,10 @@ class ThermoGISDoubletBenchmark(TestCase): self.assertTrue(np.isclose(12.44409167482118, results.capex.data[0], 0.001)) def setup_template_utc_properties_builder(self): viscosity_mode = get_viscosity_mode("kestin") return (instantiate_utc_properties_builder() .setSalinityGradient(47.0) .setUseKestinViscosity(True) .setDrillingTime(1) .setTaxRate(20) .setEquityReturn(15) Loading @@ -160,4 +162,4 @@ class ThermoGISDoubletBenchmark(TestCase): .setWellCostZ(1050) .setWellCostZ2(0.3) .setDhReturnTemp(40) .setUseKestinViscosity(True)) No newline at end of file .setViscosityMode(viscosity_mode)) No newline at end of file Loading
resources/thermogis_jar/thermogis-1.7.0-shaded.jar LFS (134 B) File changed.No diff preview for this file type. View original file View changed file
src/pythermogis/thermogis_classes/utc_properties.py +25 −0 Original line number Diff line number Diff line from pathlib import Path import typing as t import xml.etree.ElementTree as ET from jpype import JClass Loading Loading @@ -37,3 +38,27 @@ def instantiate_utc_properties_builder() -> JClass: """ start_jvm() return JClass("thermogis.properties.builders.UTCPropertiesBuilder")() def get_viscosity_mode(mode: t.Literal["kestin", "batzlewang"]) -> JClass: """ Map a string to the Java ViscosityMode enum. Parameters ---------- mode : Literal["kestin", "batzlewang"] The viscosity mode to select. Returns ------- viscosity_mode_enum : jpype.JClass The corresponding Java enum instance. """ start_jvm() viscosity_mode = JClass("tno.geoenergy.ViscosityMode") if mode == "kestin": return viscosity_mode.KESTIN elif mode == "batzlewang": return viscosity_mode.BATZLEWANG else: raise ValueError(f"Unknown viscosity mode: {mode}") No newline at end of file
tests/test_ThermoGISDoublet_Benchmark.py +14 −7 Original line number Diff line number Diff line Loading @@ -155,7 +155,13 @@ class ThermoGISDoubletBenchmark(TestCase): ViscosityMode = JClass("tno.geoenergy.ViscosityMode") # Instantiate the UTC properties class utc_properties = self.setup_template_utc_properties_builder().setOpexPerPower(100).setOpexBase(0).build() utc_properties = (self.setup_template_utc_properties_builder() .setOpexPerPower(100) .setOpexBase(0) .setUseHeatPump(True) .setHpApplicationMode(True) .setHpDirectHeatInputTemp(80) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -166,7 +172,7 @@ class ThermoGISDoubletBenchmark(TestCase): doublet.doubletCalc1DData.setReservoirTemp(50) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setDhReturnTemp(35) doublet.doubletCalc1DData.setInjectionTemp(doublet.calculateInjectionTempWithHeatPump(50, 70)) doublet.doubletCalc1DData.setInjectionTemp(15) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setNoStimulation() Loading @@ -178,11 +184,12 @@ class ThermoGISDoubletBenchmark(TestCase): self.assertTrue(np.isclose(17499.99940, transmissivity, 0.001)) self.assertTrue(np.isclose(163.99771118164062, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(4.97566556930542, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(989.2578125, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(10.922356605529785, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(8.45577723033848, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(15.046041336220961, doublet.economicalData.getSumcapex(), 0.001)) self.assertTrue(np.isclose(5.67, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(955.27, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(3.51, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(10.9, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(17.56, doublet.economicalData.getSumcapex(), 0.001)) def test_calculateDoubletPerformance_ORC(self): """ Loading
tests/test_pyThermoGIS_Doublet_Benchmark.py +5 −3 Original line number Diff line number Diff line Loading @@ -8,9 +8,10 @@ class ThermoGISDoubletBenchmark(TestCase): """ def test_calculateDoubletPerformanceTest(self): viscosity_mode = get_viscosity_mode("kestin") utc_properties = (instantiate_utc_properties_builder() .setDhReturnTemp(40) .setUseKestinViscosity(True) .setViscosityMode(viscosity_mode) .build()) input_data = xr.Dataset({ Loading Loading @@ -146,9 +147,10 @@ class ThermoGISDoubletBenchmark(TestCase): self.assertTrue(np.isclose(12.44409167482118, results.capex.data[0], 0.001)) def setup_template_utc_properties_builder(self): viscosity_mode = get_viscosity_mode("kestin") return (instantiate_utc_properties_builder() .setSalinityGradient(47.0) .setUseKestinViscosity(True) .setDrillingTime(1) .setTaxRate(20) .setEquityReturn(15) Loading @@ -160,4 +162,4 @@ class ThermoGISDoubletBenchmark(TestCase): .setWellCostZ(1050) .setWellCostZ2(0.3) .setDhReturnTemp(40) .setUseKestinViscosity(True)) No newline at end of file .setViscosityMode(viscosity_mode)) No newline at end of file