Loading tests/test_pyThermoGIS_Doublet_Benchmark.py→tests/test_pythermogis_Doublet_Benchmark.py +244 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ from unittest import TestCase from pythermogis import * class ThermoGISDoubletBenchmark(TestCase): """ This is a series of tests which produce the same results found in the Java code and in test_ThermoGISDoublet_Benchmark, but using the ntended pythermogis implementation Loading @@ -9,12 +10,15 @@ class ThermoGISDoubletBenchmark(TestCase): def test_calculateDoubletPerformanceTest(self): viscosity_mode = get_viscosity_mode("kestin") utc_properties = (instantiate_utc_properties_builder() utc_properties = ( instantiate_utc_properties_builder() .setDhReturnTemp(40) .setViscosityMode(viscosity_mode) .build()) .build() ) input_data = xr.Dataset({ input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), Loading @@ -23,9 +27,12 @@ class ThermoGISDoubletBenchmark(TestCase): "temperature": ((), 76), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), }) } ) results = calculate_doublet_performance_stochastic(input_data, utc_properties=utc_properties, rng_seed=0) results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) # Assert self.assertTrue(np.isclose(17500, results.transmissivity.data[0], 0.001)) Loading @@ -43,9 +50,12 @@ class ThermoGISDoubletBenchmark(TestCase): """ # Arrange # 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).build() ) input_data = xr.Dataset({ input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), Loading @@ -54,11 +64,13 @@ class ThermoGISDoubletBenchmark(TestCase): "temperature": ((), 76), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), }) } ) # Act results = calculate_doublet_performance_stochastic(input_data, utc_properties=utc_properties, rng_seed=0) results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) # Assert self.assertTrue(np.isclose(17500, results.transmissivity.data[0], 0.001)) Loading @@ -76,13 +88,18 @@ class ThermoGISDoubletBenchmark(TestCase): """ # Arrange # Instantiate the UTC properties class utc_properties = (self.setup_template_utc_properties_builder().setCapexConst(0.5) utc_properties = ( self.setup_template_utc_properties_builder() .setCapexConst(0.5) .setCapexVariable(1100) .setHeatExchangerEfficiency(0.4) .setDhReturnTemp(60) .setHeatExchangerParasitic(0.1).build()) .setHeatExchangerParasitic(0.1) .build() ) input_data = xr.Dataset({ input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), Loading @@ -91,10 +108,13 @@ class ThermoGISDoubletBenchmark(TestCase): "temperature": ((), 76), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), }) } ) # Act results = calculate_doublet_performance_stochastic(input_data, utc_properties=utc_properties, rng_seed=0) results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) # Assert self.assertTrue(np.isclose(17500, results.transmissivity.data[0], 0.001)) Loading @@ -113,16 +133,19 @@ class ThermoGISDoubletBenchmark(TestCase): """ # Arrange # Instantiate the UTC properties class utc_properties = (self.setup_template_utc_properties_builder() utc_properties = ( self.setup_template_utc_properties_builder() .setCapexConst(0) .setCapexVariable(2300) .setHeatExchangerEfficiency(0.6) .setUseORC(True) .setHeatExchangerBasetemp(20) .setDhReturnTemp(60) .build()) .build() ) input_data = xr.Dataset({ input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), Loading @@ -131,10 +154,13 @@ class ThermoGISDoubletBenchmark(TestCase): "temperature": ((), 100), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), }) } ) # Act results = calculate_doublet_performance_stochastic(input_data, utc_properties=utc_properties, rng_seed=0) results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) # Assert self.assertTrue(np.isclose(17500, results.transmissivity.data[0], 0.001)) Loading @@ -146,10 +172,62 @@ class ThermoGISDoubletBenchmark(TestCase): self.assertTrue(np.isclose(0.06459403120103477, results.cop.data[0], 0.001)) self.assertTrue(np.isclose(12.44409167482118, results.capex.data[0], 0.001)) def test_calculateDoubletPerformance_directHeat_and_heatpump(self): """ This is a copy of a test from the Java ThermoGisDoubletTest.java script; to validate that this python implementation of the ThermoGIS Doublet returns the same values. """ # Arrange # Instantiate the UTC properties class utc_properties = ( self.setup_template_utc_properties_builder() .setOpexPerPower(100) .setOpexBase(0) .setHpDirectHeatInputTemp(70) .setUseHeatPump(True) .setDhReturnTemp(35) .build() ) input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), "porosity": ((), 0.0), "depth": ((), 2000), "temperature": ((), 50), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), } ) # Act results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) power_hpelec = results.heat_pump_power / (results.cophp - 1) power_ratio = results.power / (results.power + power_hpelec) # Assert self.assertTrue(np.isclose(5.856159806251526, results.power + power_hpelec, 0.1)) self.assertTrue(np.isclose(8.83718197747828, results.utc * power_ratio, 0.1)) self.assertTrue(np.isclose(17499.99940, 17500, 0.001)) self.assertTrue(np.isclose(163.99771118164062, results.flow_rate, 0.001)) self.assertTrue(np.isclose(60, results.pres, 0.001)) self.assertTrue(np.isclose(4.97566556930542, results.power, 0.001)) self.assertTrue(np.isclose(989.2578125, results.welld, 0.001)) self.assertTrue(np.isclose(4.383212200392486, results.cop, 0.001)) self.assertTrue(np.isclose(3.798196792602539, results.cophp, 0.001)) self.assertTrue(np.isclose(10.401010755009017, results.utc, 0.001)) self.assertTrue(np.isclose(16.50359210062243, results.capex, 0.001)) def setup_template_utc_properties_builder(self): viscosity_mode = get_viscosity_mode("kestin") return (instantiate_utc_properties_builder() return ( instantiate_utc_properties_builder() .setSalinityGradient(47.0) .setDrillingTime(1) .setTaxRate(20) Loading @@ -162,4 +240,5 @@ class ThermoGISDoubletBenchmark(TestCase): .setWellCostZ(1050) .setWellCostZ2(0.3) .setDhReturnTemp(40) .setViscosityMode(viscosity_mode)) No newline at end of file .setViscosityMode(viscosity_mode) ) No newline at end of file Loading
tests/test_pyThermoGIS_Doublet_Benchmark.py→tests/test_pythermogis_Doublet_Benchmark.py +244 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ from unittest import TestCase from pythermogis import * class ThermoGISDoubletBenchmark(TestCase): """ This is a series of tests which produce the same results found in the Java code and in test_ThermoGISDoublet_Benchmark, but using the ntended pythermogis implementation Loading @@ -9,12 +10,15 @@ class ThermoGISDoubletBenchmark(TestCase): def test_calculateDoubletPerformanceTest(self): viscosity_mode = get_viscosity_mode("kestin") utc_properties = (instantiate_utc_properties_builder() utc_properties = ( instantiate_utc_properties_builder() .setDhReturnTemp(40) .setViscosityMode(viscosity_mode) .build()) .build() ) input_data = xr.Dataset({ input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), Loading @@ -23,9 +27,12 @@ class ThermoGISDoubletBenchmark(TestCase): "temperature": ((), 76), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), }) } ) results = calculate_doublet_performance_stochastic(input_data, utc_properties=utc_properties, rng_seed=0) results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) # Assert self.assertTrue(np.isclose(17500, results.transmissivity.data[0], 0.001)) Loading @@ -43,9 +50,12 @@ class ThermoGISDoubletBenchmark(TestCase): """ # Arrange # 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).build() ) input_data = xr.Dataset({ input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), Loading @@ -54,11 +64,13 @@ class ThermoGISDoubletBenchmark(TestCase): "temperature": ((), 76), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), }) } ) # Act results = calculate_doublet_performance_stochastic(input_data, utc_properties=utc_properties, rng_seed=0) results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) # Assert self.assertTrue(np.isclose(17500, results.transmissivity.data[0], 0.001)) Loading @@ -76,13 +88,18 @@ class ThermoGISDoubletBenchmark(TestCase): """ # Arrange # Instantiate the UTC properties class utc_properties = (self.setup_template_utc_properties_builder().setCapexConst(0.5) utc_properties = ( self.setup_template_utc_properties_builder() .setCapexConst(0.5) .setCapexVariable(1100) .setHeatExchangerEfficiency(0.4) .setDhReturnTemp(60) .setHeatExchangerParasitic(0.1).build()) .setHeatExchangerParasitic(0.1) .build() ) input_data = xr.Dataset({ input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), Loading @@ -91,10 +108,13 @@ class ThermoGISDoubletBenchmark(TestCase): "temperature": ((), 76), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), }) } ) # Act results = calculate_doublet_performance_stochastic(input_data, utc_properties=utc_properties, rng_seed=0) results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) # Assert self.assertTrue(np.isclose(17500, results.transmissivity.data[0], 0.001)) Loading @@ -113,16 +133,19 @@ class ThermoGISDoubletBenchmark(TestCase): """ # Arrange # Instantiate the UTC properties class utc_properties = (self.setup_template_utc_properties_builder() utc_properties = ( self.setup_template_utc_properties_builder() .setCapexConst(0) .setCapexVariable(2300) .setHeatExchangerEfficiency(0.6) .setUseORC(True) .setHeatExchangerBasetemp(20) .setDhReturnTemp(60) .build()) .build() ) input_data = xr.Dataset({ input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), Loading @@ -131,10 +154,13 @@ class ThermoGISDoubletBenchmark(TestCase): "temperature": ((), 100), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), }) } ) # Act results = calculate_doublet_performance_stochastic(input_data, utc_properties=utc_properties, rng_seed=0) results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) # Assert self.assertTrue(np.isclose(17500, results.transmissivity.data[0], 0.001)) Loading @@ -146,10 +172,62 @@ class ThermoGISDoubletBenchmark(TestCase): self.assertTrue(np.isclose(0.06459403120103477, results.cop.data[0], 0.001)) self.assertTrue(np.isclose(12.44409167482118, results.capex.data[0], 0.001)) def test_calculateDoubletPerformance_directHeat_and_heatpump(self): """ This is a copy of a test from the Java ThermoGisDoubletTest.java script; to validate that this python implementation of the ThermoGIS Doublet returns the same values. """ # Arrange # Instantiate the UTC properties class utc_properties = ( self.setup_template_utc_properties_builder() .setOpexPerPower(100) .setOpexBase(0) .setHpDirectHeatInputTemp(70) .setUseHeatPump(True) .setDhReturnTemp(35) .build() ) input_data = xr.Dataset( { "thickness_mean": ((), 100), "thickness_sd": ((), 0.0), "ntg": ((), 1.0), "porosity": ((), 0.0), "depth": ((), 2000), "temperature": ((), 50), "ln_permeability_mean": ((), np.log(175)), "ln_permeability_sd": ((), 0.0), } ) # Act results = calculate_doublet_performance_stochastic( input_data, utc_properties=utc_properties, rng_seed=0 ) power_hpelec = results.heat_pump_power / (results.cophp - 1) power_ratio = results.power / (results.power + power_hpelec) # Assert self.assertTrue(np.isclose(5.856159806251526, results.power + power_hpelec, 0.1)) self.assertTrue(np.isclose(8.83718197747828, results.utc * power_ratio, 0.1)) self.assertTrue(np.isclose(17499.99940, 17500, 0.001)) self.assertTrue(np.isclose(163.99771118164062, results.flow_rate, 0.001)) self.assertTrue(np.isclose(60, results.pres, 0.001)) self.assertTrue(np.isclose(4.97566556930542, results.power, 0.001)) self.assertTrue(np.isclose(989.2578125, results.welld, 0.001)) self.assertTrue(np.isclose(4.383212200392486, results.cop, 0.001)) self.assertTrue(np.isclose(3.798196792602539, results.cophp, 0.001)) self.assertTrue(np.isclose(10.401010755009017, results.utc, 0.001)) self.assertTrue(np.isclose(16.50359210062243, results.capex, 0.001)) def setup_template_utc_properties_builder(self): viscosity_mode = get_viscosity_mode("kestin") return (instantiate_utc_properties_builder() return ( instantiate_utc_properties_builder() .setSalinityGradient(47.0) .setDrillingTime(1) .setTaxRate(20) Loading @@ -162,4 +240,5 @@ class ThermoGISDoubletBenchmark(TestCase): .setWellCostZ(1050) .setWellCostZ2(0.3) .setDhReturnTemp(40) .setViscosityMode(viscosity_mode)) No newline at end of file .setViscosityMode(viscosity_mode) ) No newline at end of file