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/doublet.py +19 −20 Original line number Diff line number Diff line Loading @@ -97,7 +97,7 @@ def calculate_performance_of_single_location(mask: float, depth: float, thicknes set_doublet_parameters(doublet, transmissivity_with_ntg, depth, porosity, ntg, temperature, utc_properties) # The Java routine which calculates DoubletPerformance, for more detail on the simulation inspect the Java source code doublet.calculateDoubletPerformance(-9999.0, thickness, transmissivity) doublet.calculateDoubletPerformance(-9999.0, thickness, transmissivity, False) if doublet.getUtcPeurctkWh() == -9999.0: # If calculation was not successful, return all 0.0 return 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 Loading @@ -112,20 +112,20 @@ def calculate_performance_of_single_location(mask: float, depth: float, thicknes npv = 1e-6 * (utc_cut - doublet.getUtcPeurctkWh()) * 3.6 * hprod * (1 - utc_properties.taxRate()) # get values from doublet output_values = {"power": doublet.doubletCalc1DData.getHpP(), "heat_pump_power": doublet.doubletCalc1DData.getHeatPowerPerDoublet(), output_values = {"power": doublet.getHpP(), "heat_pump_power": doublet.getHeatPowerPerDoublet(), "capex": doublet.getSumcapex(), "opex": doublet.getOpexFirstProdYear(), "utc": doublet.getUtcPeurctkWh(), "npv": npv, "hprod": hprod, "cop": doublet.doubletCalc1DData.getCop(), "cophp": doublet.doubletCalc1DData.getCopHpP(), "pres": doublet.doubletCalc1DData.getPresP() / 1e5, "flow_rate": doublet.doubletCalc1DData.getFlowrate(), "welld": doublet.doubletCalc1DData.getWellDistP(), "inj_temp": doublet.doubletCalc1DData.getInjectionTemp(), "prd_temp": doublet.doubletCalc1DData.getProductionTemp() "cop": doublet.getCop(), "cophp": doublet.getCopHpP(), "pres": doublet.getPresP() / 1e5, "flow_rate": doublet.getFlowrate(), "welld": doublet.getWellDistP(), "inj_temp": doublet.getInjectionTemp(), "prd_temp": doublet.getProductionTemp() } # Reset doublet variables for next calculation Loading Loading @@ -166,9 +166,8 @@ def instantiate_thermogis_doublet(utc_properties, rng_seed: int = None) -> JClas doublet = ThermoGISDoublet(Mockito.mock(Logger), rng, utc_properties) # Set parameters that do not change across simulations doublet.doubletCalc1DData.setSurfaceTemperature(utc_properties.surfaceTemperature()) doublet.doubletCalc1DData.setUseHeatPump(utc_properties.useHeatPump()) doublet.doubletCalc1DData.setDhReturnTemp(utc_properties.dhReturnTemp()) doublet.setSurfaceTemperature(utc_properties.surfaceTemperature()) doublet.setDhReturnTemp(utc_properties.dhReturnTemp()) return doublet Loading Loading @@ -201,15 +200,15 @@ def set_doublet_parameters(doublet, transmissivity_with_ntg: float, depth: float if not utc_properties.useStimulation() or transmissivity_with_ntg > utc_properties.stimKhMax(): doublet.setNoStimulation() doublet.doubletCalc1DData.setDepth(depth) doublet.doubletCalc1DData.setPorosity(porosity) doublet.doubletCalc1DData.setNtg(ntg) doublet.doubletCalc1DData.setReservoirTemp(temperature) doublet.setDepth(depth) doublet.setPorosity(porosity) doublet.setNtg(ntg) doublet.setReservoirTemp(temperature) if utc_properties.useHeatPump(): if utc_properties.calculateCop() and not utc_properties.hpApplicationMode(): doublet.doubletCalc1DData.setInjectionTemp(doublet.calculateInjectionTempWithHeatPump(temperature, utc_properties.hpDirectHeatInputTemp())) doublet.setInjectionTemp(doublet.calculateInjectionTempWithHeatPump(temperature, utc_properties.hpDirectHeatInputTemp())) else: doublet.doubletCalc1DData.setInjectionTemp(np.max([temperature - utc_properties.maxCoolingTempRange(), utc_properties.hpMinimumInjectionTemperature()])) doublet.setInjectionTemp(np.max([temperature - utc_properties.maxCoolingTempRange(), utc_properties.hpMinimumInjectionTemperature()])) else: doublet.doubletCalc1DData.setInjectionTemp(np.max([temperature - utc_properties.maxCoolingTempRange(), utc_properties.dhReturnTemp()])) doublet.setInjectionTemp(np.max([temperature - utc_properties.maxCoolingTempRange(), utc_properties.dhReturnTemp()])) tests/test_ThermoGISDoublet_Benchmark.py +63 −59 Original line number Diff line number Diff line Loading @@ -24,7 +24,9 @@ class ThermoGISDoubletBenchmark(TestCase): ViscosityMode = JClass("tno.geoenergy.ViscosityMode") # Instantiate the UTC properties class utc_properties = UTCPropertiesBuilder().build() utc_properties = (UTCPropertiesBuilder() .setViscosityMode(ViscosityMode.KESTIN) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -33,24 +35,23 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(76) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setInjectionTemp(40) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(76) doublet.setDepth(2000) doublet.setInjectionTemp(40) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert self.assertTrue(np.isclose(17500, transmissivity, 0.001)) self.assertTrue(np.isclose(227.2757568359375, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(227.2757568359375, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(6.616096470753937, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(1159.17968, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(8.636903762817383, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(13.627557754516602, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(1159.17968, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(8.636903762817383, doublet.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(13.627557754516602, doublet.getCop(), 0.001)) def test_calculateDoubletPerformance_directHeat(self): """ Loading @@ -66,7 +67,10 @@ class ThermoGISDoubletBenchmark(TestCase): ViscosityMode = JClass("tno.geoenergy.ViscosityMode") # Instantiate the UTC properties class utc_properties = self.setup_template_utc_properties_builder().setOpexBase(0).build() utc_properties = (self.setup_template_utc_properties_builder() .setOpexBase(0) .setViscosityMode(ViscosityMode.KESTIN) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -75,25 +79,24 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(76) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setInjectionTemp(40) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(76) doublet.setDepth(2000) doublet.setInjectionTemp(40) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert self.assertTrue(np.isclose(17500, transmissivity, 0.001)) self.assertTrue(np.isclose(227.2757568359375, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(1159.1796, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(13.623167037963867, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(227.2757568359375, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(1159.1796, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(13.623167037963867, doublet.getCop(), 0.001)) self.assertTrue(np.isclose(5.229816400909403, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(16.439682499211536, doublet.getSumcapex(), 0.001)) self.assertTrue(np.isclose(8.624696731567383, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(8.624696731567383, doublet.getHeatPowerPerDoublet(), 0.001)) def test_calculateDoubletPerformance_chiller(self): """ Loading @@ -112,7 +115,9 @@ class ThermoGISDoubletBenchmark(TestCase): utc_properties = (self.setup_template_utc_properties_builder().setCapexConst(0.5) .setCapexVariable(1100) .setHeatExchangerEfficiency(0.4) .setHeatExchangerParasitic(0.1).build()) .setHeatExchangerParasitic(0.1) .setViscosityMode(ViscosityMode.KESTIN) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -121,24 +126,23 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(76) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setInjectionTemp(60) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(76) doublet.setDepth(2000) doublet.setInjectionTemp(60) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert self.assertTrue(np.isclose(17500, transmissivity, 0.001)) self.assertTrue(np.isclose(256.59625244140625, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(256.59625244140625, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(20.470115103822685, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(1227.1484375, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(1.8887300754346803, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(1.6594701766967774, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(1227.1484375, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(1.8887300754346803, doublet.getCop(), 0.001)) self.assertTrue(np.isclose(1.6594701766967774, doublet.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(12.748051248109613, doublet.getSumcapex(), 0.001)) def test_calculateDoubletPerformance_directheatHP(self): Loading @@ -161,6 +165,7 @@ class ThermoGISDoubletBenchmark(TestCase): .setUseHeatPump(True) .setHpApplicationMode(True) .setHpDirectHeatInputTemp(80) .setViscosityMode(ViscosityMode.KESTIN) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -169,24 +174,23 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(50) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setDhReturnTemp(35) doublet.doubletCalc1DData.setInjectionTemp(15) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(50) doublet.setDepth(2000) doublet.setDhReturnTemp(35) doublet.setInjectionTemp(15) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert 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(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(163.99771118164062, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(5.67, doublet.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(955.27, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(3.51, doublet.getCop(), 0.001)) self.assertTrue(np.isclose(10.9, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(17.56, doublet.getSumcapex(), 0.001)) Loading @@ -209,6 +213,7 @@ class ThermoGISDoubletBenchmark(TestCase): .setCapexVariable(2300) .setHeatExchangerEfficiency(0.6) .setUseORC(True) .setViscosityMode(ViscosityMode.KESTIN) .setHeatExchangerBasetemp(20).build()) # Create an instance of a ThermoGISDoublet Loading @@ -218,24 +223,23 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(100) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setInjectionTemp(60) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(100) doublet.setDepth(2000) doublet.setInjectionTemp(60) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert self.assertTrue(np.isclose(17499.99940, transmissivity, 0.001)) self.assertTrue(np.isclose(293.6246643066406, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(293.6246643066406, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(36.98296076530068, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(0.05274631495788107, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.01)) self.assertTrue(np.isclose(1306.4453125, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(0.06459403120103477, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(0.05274631495788107, doublet.getHeatPowerPerDoublet(), 0.01)) self.assertTrue(np.isclose(1306.4453125, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(0.06459403120103477, doublet.getCop(), 0.001)) self.assertTrue(np.isclose(12.44409167482118, doublet.getSumcapex(), 0.001)) def setup_template_utc_properties_builder(self): Loading 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/doublet.py +19 −20 Original line number Diff line number Diff line Loading @@ -97,7 +97,7 @@ def calculate_performance_of_single_location(mask: float, depth: float, thicknes set_doublet_parameters(doublet, transmissivity_with_ntg, depth, porosity, ntg, temperature, utc_properties) # The Java routine which calculates DoubletPerformance, for more detail on the simulation inspect the Java source code doublet.calculateDoubletPerformance(-9999.0, thickness, transmissivity) doublet.calculateDoubletPerformance(-9999.0, thickness, transmissivity, False) if doublet.getUtcPeurctkWh() == -9999.0: # If calculation was not successful, return all 0.0 return 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 Loading @@ -112,20 +112,20 @@ def calculate_performance_of_single_location(mask: float, depth: float, thicknes npv = 1e-6 * (utc_cut - doublet.getUtcPeurctkWh()) * 3.6 * hprod * (1 - utc_properties.taxRate()) # get values from doublet output_values = {"power": doublet.doubletCalc1DData.getHpP(), "heat_pump_power": doublet.doubletCalc1DData.getHeatPowerPerDoublet(), output_values = {"power": doublet.getHpP(), "heat_pump_power": doublet.getHeatPowerPerDoublet(), "capex": doublet.getSumcapex(), "opex": doublet.getOpexFirstProdYear(), "utc": doublet.getUtcPeurctkWh(), "npv": npv, "hprod": hprod, "cop": doublet.doubletCalc1DData.getCop(), "cophp": doublet.doubletCalc1DData.getCopHpP(), "pres": doublet.doubletCalc1DData.getPresP() / 1e5, "flow_rate": doublet.doubletCalc1DData.getFlowrate(), "welld": doublet.doubletCalc1DData.getWellDistP(), "inj_temp": doublet.doubletCalc1DData.getInjectionTemp(), "prd_temp": doublet.doubletCalc1DData.getProductionTemp() "cop": doublet.getCop(), "cophp": doublet.getCopHpP(), "pres": doublet.getPresP() / 1e5, "flow_rate": doublet.getFlowrate(), "welld": doublet.getWellDistP(), "inj_temp": doublet.getInjectionTemp(), "prd_temp": doublet.getProductionTemp() } # Reset doublet variables for next calculation Loading Loading @@ -166,9 +166,8 @@ def instantiate_thermogis_doublet(utc_properties, rng_seed: int = None) -> JClas doublet = ThermoGISDoublet(Mockito.mock(Logger), rng, utc_properties) # Set parameters that do not change across simulations doublet.doubletCalc1DData.setSurfaceTemperature(utc_properties.surfaceTemperature()) doublet.doubletCalc1DData.setUseHeatPump(utc_properties.useHeatPump()) doublet.doubletCalc1DData.setDhReturnTemp(utc_properties.dhReturnTemp()) doublet.setSurfaceTemperature(utc_properties.surfaceTemperature()) doublet.setDhReturnTemp(utc_properties.dhReturnTemp()) return doublet Loading Loading @@ -201,15 +200,15 @@ def set_doublet_parameters(doublet, transmissivity_with_ntg: float, depth: float if not utc_properties.useStimulation() or transmissivity_with_ntg > utc_properties.stimKhMax(): doublet.setNoStimulation() doublet.doubletCalc1DData.setDepth(depth) doublet.doubletCalc1DData.setPorosity(porosity) doublet.doubletCalc1DData.setNtg(ntg) doublet.doubletCalc1DData.setReservoirTemp(temperature) doublet.setDepth(depth) doublet.setPorosity(porosity) doublet.setNtg(ntg) doublet.setReservoirTemp(temperature) if utc_properties.useHeatPump(): if utc_properties.calculateCop() and not utc_properties.hpApplicationMode(): doublet.doubletCalc1DData.setInjectionTemp(doublet.calculateInjectionTempWithHeatPump(temperature, utc_properties.hpDirectHeatInputTemp())) doublet.setInjectionTemp(doublet.calculateInjectionTempWithHeatPump(temperature, utc_properties.hpDirectHeatInputTemp())) else: doublet.doubletCalc1DData.setInjectionTemp(np.max([temperature - utc_properties.maxCoolingTempRange(), utc_properties.hpMinimumInjectionTemperature()])) doublet.setInjectionTemp(np.max([temperature - utc_properties.maxCoolingTempRange(), utc_properties.hpMinimumInjectionTemperature()])) else: doublet.doubletCalc1DData.setInjectionTemp(np.max([temperature - utc_properties.maxCoolingTempRange(), utc_properties.dhReturnTemp()])) doublet.setInjectionTemp(np.max([temperature - utc_properties.maxCoolingTempRange(), utc_properties.dhReturnTemp()]))
tests/test_ThermoGISDoublet_Benchmark.py +63 −59 Original line number Diff line number Diff line Loading @@ -24,7 +24,9 @@ class ThermoGISDoubletBenchmark(TestCase): ViscosityMode = JClass("tno.geoenergy.ViscosityMode") # Instantiate the UTC properties class utc_properties = UTCPropertiesBuilder().build() utc_properties = (UTCPropertiesBuilder() .setViscosityMode(ViscosityMode.KESTIN) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -33,24 +35,23 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(76) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setInjectionTemp(40) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(76) doublet.setDepth(2000) doublet.setInjectionTemp(40) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert self.assertTrue(np.isclose(17500, transmissivity, 0.001)) self.assertTrue(np.isclose(227.2757568359375, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(227.2757568359375, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(6.616096470753937, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(1159.17968, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(8.636903762817383, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(13.627557754516602, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(1159.17968, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(8.636903762817383, doublet.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(13.627557754516602, doublet.getCop(), 0.001)) def test_calculateDoubletPerformance_directHeat(self): """ Loading @@ -66,7 +67,10 @@ class ThermoGISDoubletBenchmark(TestCase): ViscosityMode = JClass("tno.geoenergy.ViscosityMode") # Instantiate the UTC properties class utc_properties = self.setup_template_utc_properties_builder().setOpexBase(0).build() utc_properties = (self.setup_template_utc_properties_builder() .setOpexBase(0) .setViscosityMode(ViscosityMode.KESTIN) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -75,25 +79,24 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(76) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setInjectionTemp(40) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(76) doublet.setDepth(2000) doublet.setInjectionTemp(40) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert self.assertTrue(np.isclose(17500, transmissivity, 0.001)) self.assertTrue(np.isclose(227.2757568359375, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(1159.1796, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(13.623167037963867, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(227.2757568359375, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(1159.1796, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(13.623167037963867, doublet.getCop(), 0.001)) self.assertTrue(np.isclose(5.229816400909403, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(16.439682499211536, doublet.getSumcapex(), 0.001)) self.assertTrue(np.isclose(8.624696731567383, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(8.624696731567383, doublet.getHeatPowerPerDoublet(), 0.001)) def test_calculateDoubletPerformance_chiller(self): """ Loading @@ -112,7 +115,9 @@ class ThermoGISDoubletBenchmark(TestCase): utc_properties = (self.setup_template_utc_properties_builder().setCapexConst(0.5) .setCapexVariable(1100) .setHeatExchangerEfficiency(0.4) .setHeatExchangerParasitic(0.1).build()) .setHeatExchangerParasitic(0.1) .setViscosityMode(ViscosityMode.KESTIN) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -121,24 +126,23 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(76) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setInjectionTemp(60) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(76) doublet.setDepth(2000) doublet.setInjectionTemp(60) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert self.assertTrue(np.isclose(17500, transmissivity, 0.001)) self.assertTrue(np.isclose(256.59625244140625, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(256.59625244140625, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(20.470115103822685, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(1227.1484375, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(1.8887300754346803, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(1.6594701766967774, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(1227.1484375, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(1.8887300754346803, doublet.getCop(), 0.001)) self.assertTrue(np.isclose(1.6594701766967774, doublet.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(12.748051248109613, doublet.getSumcapex(), 0.001)) def test_calculateDoubletPerformance_directheatHP(self): Loading @@ -161,6 +165,7 @@ class ThermoGISDoubletBenchmark(TestCase): .setUseHeatPump(True) .setHpApplicationMode(True) .setHpDirectHeatInputTemp(80) .setViscosityMode(ViscosityMode.KESTIN) .build()) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(0), utc_properties) Loading @@ -169,24 +174,23 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(50) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setDhReturnTemp(35) doublet.doubletCalc1DData.setInjectionTemp(15) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(50) doublet.setDepth(2000) doublet.setDhReturnTemp(35) doublet.setInjectionTemp(15) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert 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(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(163.99771118164062, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(5.67, doublet.getHeatPowerPerDoublet(), 0.001)) self.assertTrue(np.isclose(955.27, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(3.51, doublet.getCop(), 0.001)) self.assertTrue(np.isclose(10.9, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(17.56, doublet.getSumcapex(), 0.001)) Loading @@ -209,6 +213,7 @@ class ThermoGISDoubletBenchmark(TestCase): .setCapexVariable(2300) .setHeatExchangerEfficiency(0.6) .setUseORC(True) .setViscosityMode(ViscosityMode.KESTIN) .setHeatExchangerBasetemp(20).build()) # Create an instance of a ThermoGISDoublet Loading @@ -218,24 +223,23 @@ class ThermoGISDoubletBenchmark(TestCase): thickness = 100 permeability = 175 transmissivity = thickness * permeability doublet.doubletCalc1DData.setReservoirTemp(100) doublet.doubletCalc1DData.setDepth(2000) doublet.doubletCalc1DData.setInjectionTemp(60) doublet.doubletCalc1DData.setNtg(1.0) doublet.doubletCalc1DData.setViscosityMode(ViscosityMode.KESTIN) doublet.setReservoirTemp(100) doublet.setDepth(2000) doublet.setInjectionTemp(60) doublet.setNtg(1.0) doublet.setNoStimulation() # Act doublet.calculateDoubletPerformance(-999, thickness, transmissivity) doublet.calculateDoubletPerformance(-999, thickness, transmissivity, False) # Assert self.assertTrue(np.isclose(17499.99940, transmissivity, 0.001)) self.assertTrue(np.isclose(293.6246643066406, doublet.doubletCalc1DData.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.doubletCalc1DData.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(293.6246643066406, doublet.getFlowrate(), 1)) self.assertTrue(np.isclose(60, doublet.getDrawdownPressure() / 1e5, 0.001)) self.assertTrue(np.isclose(36.98296076530068, doublet.getUtcPeurctkWh(), 0.001)) self.assertTrue(np.isclose(0.05274631495788107, doublet.doubletCalc1DData.getHeatPowerPerDoublet(), 0.01)) self.assertTrue(np.isclose(1306.4453125, doublet.doubletCalc1DData.getWellDistance(), 0.001)) self.assertTrue(np.isclose(0.06459403120103477, doublet.doubletCalc1DData.getCop(), 0.001)) self.assertTrue(np.isclose(0.05274631495788107, doublet.getHeatPowerPerDoublet(), 0.01)) self.assertTrue(np.isclose(1306.4453125, doublet.getWellDistance(), 0.001)) self.assertTrue(np.isclose(0.06459403120103477, doublet.getCop(), 0.001)) self.assertTrue(np.isclose(12.44409167482118, doublet.getSumcapex(), 0.001)) def setup_template_utc_properties_builder(self): Loading