Loading src/utils/convert_python_to_java.py 0 → 100644 +4 −0 Changes for src/utils/convert_python_to_java.py: 4 added lines, 0 removed lines. Original line number Diff line number Diff line def convert_list_to_ArrayList(ArrayListObject, python_list_object: []): for item in python_list_object: ArrayListObject.add(item) return ArrayListObject tests/tests/test_jpyp.py→tests/tests/test_doublet.py +4 −43 Changes for tests/tests/test_doublet.py: 4 added lines, 43 removed lines. Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ from unittest import TestCase import numpy as np from src.utils.convert_python_to_java import convert_list_to_ArrayList from src.utils.get_repo_root import get_repo_root from pygridsio.pygridsio import read_grid Loading Loading @@ -33,7 +34,7 @@ class PyThermoGIS(TestCase): def tearDown(self): shutil.rmtree(self.test_files_out_path) def test_technoeconomic(self): def test_doublet_single_values(self): if jpype.isJVMStarted(): jpype.shutdownJVM() jpype.startJVM(str(self.jvm_path), classpath=[self.thermogis_jar_path]) Loading @@ -42,14 +43,11 @@ class PyThermoGIS(TestCase): # Import Java Classes Logger = JClass("logging.Logger") Mockito = JClass("org.mockito.Mockito") ProgressTracker = JClass("tno.geoenergy.gui.ProgressTracker") RNG = JClass("tno.geoenergy.stochastic.RandomNumberGenerator") ParallelTaskExecutor = JClass("thermogis.calc.ParallelTaskExecutor") ThermoGISDoublet = JClass("thermogis.calc.doublet.ThermoGisDoublet") UTCPropertiesBuilder = JClass("thermogis.properties.builders.UTCPropertiesBuilder") UnitTechnicalCost = JClass("thermogis.calc.steps.UnitTechnicalCost") ArrayList = JClass("java.util.ArrayList") # Convert to java.util.List aquifers = ArrayList() for item in ["simplified", "simplified_stacked"]: Loading @@ -65,40 +63,8 @@ class PyThermoGIS(TestCase): propsBuilder.setPValues([50.0]) utc_properties = propsBuilder.build() # Create instances of loggerMock, progressTrackerMock, taskExecutor and utc loggerMock = Mockito.mock(Logger) progressTrackerMock = Mockito.mock(ProgressTracker) taskExecutor = ParallelTaskExecutor(progressTrackerMock) # Create UTC Instance utc = UnitTechnicalCost(progressTrackerMock, RNG(123), taskExecutor, loggerMock) # Act utc.calculate(utc_properties) # Assert self.checkOutputGridValues() def test_doublet_single_values(self): if jpype.isJVMStarted(): jpype.shutdownJVM() jpype.startJVM(str(self.jvm_path), classpath=[self.thermogis_jar_path]) # Arrange # Import Java Classes Logger = JClass("logging.Logger") Mockito = JClass("org.mockito.Mockito") RNG = JClass("tno.geoenergy.stochastic.RandomNumberGenerator") ThermoGISDoublet = JClass("thermogis.calc.doublet.ThermoGisDoublet") # Instantiate ThermoGISProperties ThermoGISProperties = JClass("thermogis.gui.ThermoGISProperties") ThermoGISProperties.instantiateProperties() ThermoGISProperties.instantiateRunProperties() self.setupDefaultProperties(ThermoGISProperties) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(123)) doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(123), utc_properties) # Input values which usually come from grids thickness = 199.0 Loading Loading @@ -191,11 +157,6 @@ class PyThermoGIS(TestCase): doublet.calculateDoubletPerformance(-99999.0, thickness, khQuantile) # Assert # self.assertTrue(np.isclose(doublet.doubletCalc1DData.getFlowrate(), 499.975007564939, 1e-5)) def checkOutputGridValues(self): flowRateGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__flowr_P50.nc") copGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__cop_P50.nc") Loading tests/tests/test_utc.py 0 → 100644 +215 −0 Changes for tests/tests/test_utc.py: 215 added lines, 0 removed lines. Original line number Diff line number Diff line import shutil import subprocess from os import path from pathlib import Path from unittest import TestCase import numpy as np from src.utils.convert_python_to_java import convert_list_to_ArrayList from src.utils.get_repo_root import get_repo_root from pygridsio.pygridsio import read_grid # Import java classes import jpype from jpype import JClass import jpype.imports from jpype.types import * class PyThermoGIS(TestCase): test_files_path = Path(path.dirname(path.dirname(__file__)), "resources") / "test_input" test_files_out_path = Path(path.dirname(path.dirname(__file__)), "resources") / "test_output" thermogis_jar_path = get_repo_root() / "resources" / "thermogis_jar" / "thermogis-1.7.0-shaded_newprops.jar" jvm_path = get_repo_root() / "resources" / "java" / "coretto-17" / "bin" / "server" / "jvm.dll" def setUp(self): outpath = Path(self.test_files_out_path) if outpath.exists(): shutil.rmtree(outpath) outpath.mkdir(exist_ok=True) shutil.copytree(self.test_files_path / "model_jpype" / "simplified_preprocess_result", self.test_files_out_path / "simplified_preprocess_result") self.model_path = self.test_files_out_path / "simplified_preprocess_result" def tearDown(self): shutil.rmtree(self.test_files_out_path) def test_technoeconomic(self): if jpype.isJVMStarted(): jpype.shutdownJVM() jpype.startJVM(str(self.jvm_path), classpath=[self.thermogis_jar_path]) # Arrange # Import Java Classes Logger = JClass("logging.Logger") Mockito = JClass("org.mockito.Mockito") ProgressTracker = JClass("tno.geoenergy.gui.ProgressTracker") RNG = JClass("tno.geoenergy.stochastic.RandomNumberGenerator") ParallelTaskExecutor = JClass("thermogis.calc.ParallelTaskExecutor") UTCPropertiesBuilder = JClass("thermogis.properties.builders.UTCPropertiesBuilder") UnitTechnicalCost = JClass("thermogis.calc.steps.UnitTechnicalCost") ArrayList = JClass("java.util.ArrayList") # Convert to java.util.List aquifers = convert_list_to_ArrayList(ArrayList(), ["simplified", "simplified_stacked"]) # Instantiate the UTC properties class propsBuilder = UTCPropertiesBuilder() propsBuilder.setInputDataDir(str(self.model_path) + "/InputData") propsBuilder.setResultsDir(str(self.model_path) + "/Results") propsBuilder.setCheckCopiedFiles(False) propsBuilder.setAquifers(aquifers) propsBuilder.setLevelOfDetail(1) propsBuilder.setPValues([50.0]) utc_properties = propsBuilder.build() # Create instances of loggerMock, progressTrackerMock, taskExecutor and utc loggerMock = Mockito.mock(Logger) progressTrackerMock = Mockito.mock(ProgressTracker) taskExecutor = ParallelTaskExecutor(progressTrackerMock) # Create UTC Instance utc = UnitTechnicalCost(progressTrackerMock, RNG(123), taskExecutor, loggerMock) # Act utc.calculate(utc_properties) # Assert self.checkOutputGridValues() def checkOutputGridValues(self): flowRateGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__flowr_P50.nc") copGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__cop_P50.nc") thicknessGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__h_P50.nc") hProdGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__hprod_P50.nc") permeabilityGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__k_P50.nc") khGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__kh_P50.nc") npvGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__npv_P50.nc") ntgGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__ntg.nc") porosityGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__porosity.nc") powerGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__power_P50.nc") pressureGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__pres_P50.nc") temperatureGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__temperature.nc") topDepthGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__top_depth.nc") utcGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__utc_P50.nc") wellDepthGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__welld_P50.nc") tolerance = 0.00001 # // Flow rate self.assertTrue(np.isclose(0.000000, flowRateGrid.min(), 0.000001)) self.assertTrue(np.isclose(499.99496459, flowRateGrid.max(), 0.000001)) self.assertTrue(np.isclose(421.22686768, flowRateGrid.mean(), 0.00001)) # // COP self.assertTrue(np.isclose(0.000000, copGrid.min(), 0.000001)) self.assertTrue(np.isclose(29.10140991, copGrid.max(), 0.000001)) self.assertTrue(np.isclose(20.41528702, copGrid.mean(), 0.000001)) # // Thickness self.assertTrue(np.isclose(175.0, thicknessGrid.min(), 0.000001)) self.assertTrue(np.isclose(205.0, thicknessGrid.max(), 0.0001)) self.assertTrue(np.isclose(195.666671, thicknessGrid.mean(), 0.00001)) # // H Prod self.assertTrue(np.isclose(0.000000, hProdGrid.min(), tolerance)) self.assertTrue(np.isclose(3093648.75, hProdGrid.max(), tolerance)) self.assertTrue(np.isclose(2592955.00000000, hProdGrid.mean(), tolerance)) # // Permeability self.assertTrue(np.isclose(100.00000000, permeabilityGrid.min(), tolerance)) self.assertTrue(np.isclose(900.00000000, permeabilityGrid.max(), tolerance)) self.assertTrue(np.isclose(500.00000000, permeabilityGrid.mean(), tolerance)) # // KH self.assertTrue(np.isclose(17.35536957, khGrid.min(), tolerance)) self.assertTrue(np.isclose(164.42192078, khGrid.max(), tolerance)) self.assertTrue(np.isclose(94.08833313, khGrid.mean(), tolerance)) # // NPV self.assertTrue(np.isclose(0.0, npvGrid.min(), tolerance)) self.assertTrue(np.isclose(5.36793852, npvGrid.max(), tolerance)) self.assertTrue(np.isclose(3.52801609, npvGrid.mean(), tolerance)) # // NTG self.assertTrue(np.isclose(0.94, ntgGrid.min(), tolerance)) self.assertTrue(np.isclose(0.99000001, ntgGrid.max(), tolerance)) self.assertTrue(np.isclose(0.95333332, ntgGrid.mean(), tolerance)) # // Porosity self.assertTrue(np.isclose(25.0, porosityGrid.min(), tolerance)) self.assertTrue(np.isclose(27.0, porosityGrid.max(), tolerance)) self.assertTrue(np.isclose(26.0, porosityGrid.mean(), tolerance)) # // Power self.assertTrue(np.isclose(0.000000, powerGrid.min(), tolerance)) self.assertTrue(np.isclose(24.44868851, powerGrid.max(), tolerance)) self.assertTrue(np.isclose(20.49176979, powerGrid.mean(), tolerance)) # // Pressure self.assertTrue(np.isclose(0.000000, pressureGrid.min(), tolerance)) self.assertTrue(np.isclose(60.59999847, pressureGrid.max(), tolerance)) self.assertTrue(np.isclose(42.27748108, pressureGrid.mean(), tolerance)) # // Temperature self.assertTrue(np.isclose(74.71250153, temperatureGrid.min(), tolerance)) self.assertTrue(np.isclose(75.42550659, temperatureGrid.max(), tolerance)) self.assertTrue(np.isclose(75.17062378, temperatureGrid.mean(), tolerance)) # // Top depth self.assertTrue(np.isclose(1990.0, topDepthGrid.min(), tolerance)) self.assertTrue(np.isclose(2020.0, topDepthGrid.max(), tolerance)) self.assertTrue(np.isclose(2004.44445801, topDepthGrid.mean(), tolerance)) # // Unit technical cost self.assertTrue(np.isclose(0.0000, utcGrid.min(), tolerance)) self.assertTrue(np.isclose(5.03445578, utcGrid.max(), tolerance)) self.assertTrue(np.isclose(4.10233593, utcGrid.mean(), tolerance)) # // Well depth self.assertTrue(np.isclose(0.000000, wellDepthGrid.min(), tolerance)) self.assertTrue(np.isclose(1193.16406250, wellDepthGrid.max(), tolerance)) self.assertTrue(np.isclose(1019.05383301, wellDepthGrid.mean(), tolerance)) def setupDefaultProperties(self, ThermoGISProperties): PropertyFactory = JClass("tno.geoenergy.properties.PropertyFactory") GuiProperty = JClass("tno.geoenergy.properties.guicomponents.GuiProperty") inputDir = PropertyFactory.getProperty(ThermoGISProperties.IINPUTDATADIR) resultsFolder = PropertyFactory.getProperty(ThermoGISProperties.IRESULTSDIR) aquiferList = PropertyFactory.getProperty(ThermoGISProperties.IINTERVALSBATCHDC1D) pValuesProp = PropertyFactory.getProperty(ThermoGISProperties.IPVALUES) levelOfDetailProp = PropertyFactory.getProperty(ThermoGISProperties.ILOD) tempFromVoxet = PropertyFactory.getProperty(ThermoGISProperties.ITEMPFROMVOXET) nCores = PropertyFactory.getProperty(ThermoGISProperties.IMAXNUMBEROFCORES) copyAquiferFiles = PropertyFactory.getProperty(ThermoGISProperties.ICOPYAQUIFERFILES) PropertyFactory.setGuiProperty(inputDir, GuiProperty("", str(self.model_path) + "/InputData", False, "", "")) PropertyFactory.setGuiProperty(resultsFolder, GuiProperty("", str(self.model_path) + "/Results", False, "", "")) PropertyFactory.setGuiProperty(aquiferList, GuiProperty("", "simplified, simplified_stacked", False, "", "")) PropertyFactory.setGuiProperty(pValuesProp, GuiProperty("", "50", False, "", "")) PropertyFactory.setGuiProperty(levelOfDetailProp, 1) PropertyFactory.setGuiProperty(tempFromVoxet, GuiProperty("0", "", False, "", "")) PropertyFactory.setGuiProperty(nCores, 1) PropertyFactory.setGuiProperty(copyAquiferFiles, 0) def set_doublet_parameters(doublet, useStimulation, stimKhMax, khPvalue, depth, porosity, ntg, tres, surface_temperature, return_temperature, use_heat_pump, max_cooling_temperature_range, hp_minimum_injection_temperature): if not useStimulation or khPvalue > stimKhMax: doublet.setNoStimulation() doublet.doubletCalc1DData.setDepth(depth) doublet.doubletCalc1DData.setPorosity(porosity) doublet.doubletCalc1DData.setNtg(ntg) doublet.doubletCalc1DData.setSurfaceTemperature(surface_temperature) doublet.doubletCalc1DData.setReservoirTemp(tres) doublet.doubletCalc1DData.setUseHeatPump(use_heat_pump) if use_heat_pump: injectionTemp = np.max([tres - max_cooling_temperature_range, hp_minimum_injection_temperature]) else: injectionTemp = np.max([tres - max_cooling_temperature_range, return_temperature]) doublet.doubletCalc1DData.setInjectionTemp(injectionTemp) doublet.doubletCalc1DData.setDhReturnTemp(return_temperature) Loading
src/utils/convert_python_to_java.py 0 → 100644 +4 −0 Changes for src/utils/convert_python_to_java.py: 4 added lines, 0 removed lines. Original line number Diff line number Diff line def convert_list_to_ArrayList(ArrayListObject, python_list_object: []): for item in python_list_object: ArrayListObject.add(item) return ArrayListObject
tests/tests/test_jpyp.py→tests/tests/test_doublet.py +4 −43 Changes for tests/tests/test_doublet.py: 4 added lines, 43 removed lines. Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ from unittest import TestCase import numpy as np from src.utils.convert_python_to_java import convert_list_to_ArrayList from src.utils.get_repo_root import get_repo_root from pygridsio.pygridsio import read_grid Loading Loading @@ -33,7 +34,7 @@ class PyThermoGIS(TestCase): def tearDown(self): shutil.rmtree(self.test_files_out_path) def test_technoeconomic(self): def test_doublet_single_values(self): if jpype.isJVMStarted(): jpype.shutdownJVM() jpype.startJVM(str(self.jvm_path), classpath=[self.thermogis_jar_path]) Loading @@ -42,14 +43,11 @@ class PyThermoGIS(TestCase): # Import Java Classes Logger = JClass("logging.Logger") Mockito = JClass("org.mockito.Mockito") ProgressTracker = JClass("tno.geoenergy.gui.ProgressTracker") RNG = JClass("tno.geoenergy.stochastic.RandomNumberGenerator") ParallelTaskExecutor = JClass("thermogis.calc.ParallelTaskExecutor") ThermoGISDoublet = JClass("thermogis.calc.doublet.ThermoGisDoublet") UTCPropertiesBuilder = JClass("thermogis.properties.builders.UTCPropertiesBuilder") UnitTechnicalCost = JClass("thermogis.calc.steps.UnitTechnicalCost") ArrayList = JClass("java.util.ArrayList") # Convert to java.util.List aquifers = ArrayList() for item in ["simplified", "simplified_stacked"]: Loading @@ -65,40 +63,8 @@ class PyThermoGIS(TestCase): propsBuilder.setPValues([50.0]) utc_properties = propsBuilder.build() # Create instances of loggerMock, progressTrackerMock, taskExecutor and utc loggerMock = Mockito.mock(Logger) progressTrackerMock = Mockito.mock(ProgressTracker) taskExecutor = ParallelTaskExecutor(progressTrackerMock) # Create UTC Instance utc = UnitTechnicalCost(progressTrackerMock, RNG(123), taskExecutor, loggerMock) # Act utc.calculate(utc_properties) # Assert self.checkOutputGridValues() def test_doublet_single_values(self): if jpype.isJVMStarted(): jpype.shutdownJVM() jpype.startJVM(str(self.jvm_path), classpath=[self.thermogis_jar_path]) # Arrange # Import Java Classes Logger = JClass("logging.Logger") Mockito = JClass("org.mockito.Mockito") RNG = JClass("tno.geoenergy.stochastic.RandomNumberGenerator") ThermoGISDoublet = JClass("thermogis.calc.doublet.ThermoGisDoublet") # Instantiate ThermoGISProperties ThermoGISProperties = JClass("thermogis.gui.ThermoGISProperties") ThermoGISProperties.instantiateProperties() ThermoGISProperties.instantiateRunProperties() self.setupDefaultProperties(ThermoGISProperties) # Create an instance of a ThermoGISDoublet doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(123)) doublet = ThermoGISDoublet(Mockito.mock(Logger), RNG(123), utc_properties) # Input values which usually come from grids thickness = 199.0 Loading Loading @@ -191,11 +157,6 @@ class PyThermoGIS(TestCase): doublet.calculateDoubletPerformance(-99999.0, thickness, khQuantile) # Assert # self.assertTrue(np.isclose(doublet.doubletCalc1DData.getFlowrate(), 499.975007564939, 1e-5)) def checkOutputGridValues(self): flowRateGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__flowr_P50.nc") copGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__cop_P50.nc") Loading
tests/tests/test_utc.py 0 → 100644 +215 −0 Changes for tests/tests/test_utc.py: 215 added lines, 0 removed lines. Original line number Diff line number Diff line import shutil import subprocess from os import path from pathlib import Path from unittest import TestCase import numpy as np from src.utils.convert_python_to_java import convert_list_to_ArrayList from src.utils.get_repo_root import get_repo_root from pygridsio.pygridsio import read_grid # Import java classes import jpype from jpype import JClass import jpype.imports from jpype.types import * class PyThermoGIS(TestCase): test_files_path = Path(path.dirname(path.dirname(__file__)), "resources") / "test_input" test_files_out_path = Path(path.dirname(path.dirname(__file__)), "resources") / "test_output" thermogis_jar_path = get_repo_root() / "resources" / "thermogis_jar" / "thermogis-1.7.0-shaded_newprops.jar" jvm_path = get_repo_root() / "resources" / "java" / "coretto-17" / "bin" / "server" / "jvm.dll" def setUp(self): outpath = Path(self.test_files_out_path) if outpath.exists(): shutil.rmtree(outpath) outpath.mkdir(exist_ok=True) shutil.copytree(self.test_files_path / "model_jpype" / "simplified_preprocess_result", self.test_files_out_path / "simplified_preprocess_result") self.model_path = self.test_files_out_path / "simplified_preprocess_result" def tearDown(self): shutil.rmtree(self.test_files_out_path) def test_technoeconomic(self): if jpype.isJVMStarted(): jpype.shutdownJVM() jpype.startJVM(str(self.jvm_path), classpath=[self.thermogis_jar_path]) # Arrange # Import Java Classes Logger = JClass("logging.Logger") Mockito = JClass("org.mockito.Mockito") ProgressTracker = JClass("tno.geoenergy.gui.ProgressTracker") RNG = JClass("tno.geoenergy.stochastic.RandomNumberGenerator") ParallelTaskExecutor = JClass("thermogis.calc.ParallelTaskExecutor") UTCPropertiesBuilder = JClass("thermogis.properties.builders.UTCPropertiesBuilder") UnitTechnicalCost = JClass("thermogis.calc.steps.UnitTechnicalCost") ArrayList = JClass("java.util.ArrayList") # Convert to java.util.List aquifers = convert_list_to_ArrayList(ArrayList(), ["simplified", "simplified_stacked"]) # Instantiate the UTC properties class propsBuilder = UTCPropertiesBuilder() propsBuilder.setInputDataDir(str(self.model_path) + "/InputData") propsBuilder.setResultsDir(str(self.model_path) + "/Results") propsBuilder.setCheckCopiedFiles(False) propsBuilder.setAquifers(aquifers) propsBuilder.setLevelOfDetail(1) propsBuilder.setPValues([50.0]) utc_properties = propsBuilder.build() # Create instances of loggerMock, progressTrackerMock, taskExecutor and utc loggerMock = Mockito.mock(Logger) progressTrackerMock = Mockito.mock(ProgressTracker) taskExecutor = ParallelTaskExecutor(progressTrackerMock) # Create UTC Instance utc = UnitTechnicalCost(progressTrackerMock, RNG(123), taskExecutor, loggerMock) # Act utc.calculate(utc_properties) # Assert self.checkOutputGridValues() def checkOutputGridValues(self): flowRateGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__flowr_P50.nc") copGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__cop_P50.nc") thicknessGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__h_P50.nc") hProdGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__hprod_P50.nc") permeabilityGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__k_P50.nc") khGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__kh_P50.nc") npvGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__npv_P50.nc") ntgGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__ntg.nc") porosityGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__porosity.nc") powerGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__power_P50.nc") pressureGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__pres_P50.nc") temperatureGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__temperature.nc") topDepthGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__top_depth.nc") utcGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__utc_P50.nc") wellDepthGrid = read_grid(self.model_path / "Results" / "simplified" / "BaseCase" / "simplified__welld_P50.nc") tolerance = 0.00001 # // Flow rate self.assertTrue(np.isclose(0.000000, flowRateGrid.min(), 0.000001)) self.assertTrue(np.isclose(499.99496459, flowRateGrid.max(), 0.000001)) self.assertTrue(np.isclose(421.22686768, flowRateGrid.mean(), 0.00001)) # // COP self.assertTrue(np.isclose(0.000000, copGrid.min(), 0.000001)) self.assertTrue(np.isclose(29.10140991, copGrid.max(), 0.000001)) self.assertTrue(np.isclose(20.41528702, copGrid.mean(), 0.000001)) # // Thickness self.assertTrue(np.isclose(175.0, thicknessGrid.min(), 0.000001)) self.assertTrue(np.isclose(205.0, thicknessGrid.max(), 0.0001)) self.assertTrue(np.isclose(195.666671, thicknessGrid.mean(), 0.00001)) # // H Prod self.assertTrue(np.isclose(0.000000, hProdGrid.min(), tolerance)) self.assertTrue(np.isclose(3093648.75, hProdGrid.max(), tolerance)) self.assertTrue(np.isclose(2592955.00000000, hProdGrid.mean(), tolerance)) # // Permeability self.assertTrue(np.isclose(100.00000000, permeabilityGrid.min(), tolerance)) self.assertTrue(np.isclose(900.00000000, permeabilityGrid.max(), tolerance)) self.assertTrue(np.isclose(500.00000000, permeabilityGrid.mean(), tolerance)) # // KH self.assertTrue(np.isclose(17.35536957, khGrid.min(), tolerance)) self.assertTrue(np.isclose(164.42192078, khGrid.max(), tolerance)) self.assertTrue(np.isclose(94.08833313, khGrid.mean(), tolerance)) # // NPV self.assertTrue(np.isclose(0.0, npvGrid.min(), tolerance)) self.assertTrue(np.isclose(5.36793852, npvGrid.max(), tolerance)) self.assertTrue(np.isclose(3.52801609, npvGrid.mean(), tolerance)) # // NTG self.assertTrue(np.isclose(0.94, ntgGrid.min(), tolerance)) self.assertTrue(np.isclose(0.99000001, ntgGrid.max(), tolerance)) self.assertTrue(np.isclose(0.95333332, ntgGrid.mean(), tolerance)) # // Porosity self.assertTrue(np.isclose(25.0, porosityGrid.min(), tolerance)) self.assertTrue(np.isclose(27.0, porosityGrid.max(), tolerance)) self.assertTrue(np.isclose(26.0, porosityGrid.mean(), tolerance)) # // Power self.assertTrue(np.isclose(0.000000, powerGrid.min(), tolerance)) self.assertTrue(np.isclose(24.44868851, powerGrid.max(), tolerance)) self.assertTrue(np.isclose(20.49176979, powerGrid.mean(), tolerance)) # // Pressure self.assertTrue(np.isclose(0.000000, pressureGrid.min(), tolerance)) self.assertTrue(np.isclose(60.59999847, pressureGrid.max(), tolerance)) self.assertTrue(np.isclose(42.27748108, pressureGrid.mean(), tolerance)) # // Temperature self.assertTrue(np.isclose(74.71250153, temperatureGrid.min(), tolerance)) self.assertTrue(np.isclose(75.42550659, temperatureGrid.max(), tolerance)) self.assertTrue(np.isclose(75.17062378, temperatureGrid.mean(), tolerance)) # // Top depth self.assertTrue(np.isclose(1990.0, topDepthGrid.min(), tolerance)) self.assertTrue(np.isclose(2020.0, topDepthGrid.max(), tolerance)) self.assertTrue(np.isclose(2004.44445801, topDepthGrid.mean(), tolerance)) # // Unit technical cost self.assertTrue(np.isclose(0.0000, utcGrid.min(), tolerance)) self.assertTrue(np.isclose(5.03445578, utcGrid.max(), tolerance)) self.assertTrue(np.isclose(4.10233593, utcGrid.mean(), tolerance)) # // Well depth self.assertTrue(np.isclose(0.000000, wellDepthGrid.min(), tolerance)) self.assertTrue(np.isclose(1193.16406250, wellDepthGrid.max(), tolerance)) self.assertTrue(np.isclose(1019.05383301, wellDepthGrid.mean(), tolerance)) def setupDefaultProperties(self, ThermoGISProperties): PropertyFactory = JClass("tno.geoenergy.properties.PropertyFactory") GuiProperty = JClass("tno.geoenergy.properties.guicomponents.GuiProperty") inputDir = PropertyFactory.getProperty(ThermoGISProperties.IINPUTDATADIR) resultsFolder = PropertyFactory.getProperty(ThermoGISProperties.IRESULTSDIR) aquiferList = PropertyFactory.getProperty(ThermoGISProperties.IINTERVALSBATCHDC1D) pValuesProp = PropertyFactory.getProperty(ThermoGISProperties.IPVALUES) levelOfDetailProp = PropertyFactory.getProperty(ThermoGISProperties.ILOD) tempFromVoxet = PropertyFactory.getProperty(ThermoGISProperties.ITEMPFROMVOXET) nCores = PropertyFactory.getProperty(ThermoGISProperties.IMAXNUMBEROFCORES) copyAquiferFiles = PropertyFactory.getProperty(ThermoGISProperties.ICOPYAQUIFERFILES) PropertyFactory.setGuiProperty(inputDir, GuiProperty("", str(self.model_path) + "/InputData", False, "", "")) PropertyFactory.setGuiProperty(resultsFolder, GuiProperty("", str(self.model_path) + "/Results", False, "", "")) PropertyFactory.setGuiProperty(aquiferList, GuiProperty("", "simplified, simplified_stacked", False, "", "")) PropertyFactory.setGuiProperty(pValuesProp, GuiProperty("", "50", False, "", "")) PropertyFactory.setGuiProperty(levelOfDetailProp, 1) PropertyFactory.setGuiProperty(tempFromVoxet, GuiProperty("0", "", False, "", "")) PropertyFactory.setGuiProperty(nCores, 1) PropertyFactory.setGuiProperty(copyAquiferFiles, 0) def set_doublet_parameters(doublet, useStimulation, stimKhMax, khPvalue, depth, porosity, ntg, tres, surface_temperature, return_temperature, use_heat_pump, max_cooling_temperature_range, hp_minimum_injection_temperature): if not useStimulation or khPvalue > stimKhMax: doublet.setNoStimulation() doublet.doubletCalc1DData.setDepth(depth) doublet.doubletCalc1DData.setPorosity(porosity) doublet.doubletCalc1DData.setNtg(ntg) doublet.doubletCalc1DData.setSurfaceTemperature(surface_temperature) doublet.doubletCalc1DData.setReservoirTemp(tres) doublet.doubletCalc1DData.setUseHeatPump(use_heat_pump) if use_heat_pump: injectionTemp = np.max([tres - max_cooling_temperature_range, hp_minimum_injection_temperature]) else: injectionTemp = np.max([tres - max_cooling_temperature_range, return_temperature]) doublet.doubletCalc1DData.setInjectionTemp(injectionTemp) doublet.doubletCalc1DData.setDhReturnTemp(return_temperature)