diff --git a/src/pythermogis/workflow/utc/doubletcalc.py b/src/pythermogis/workflow/utc/doubletcalc.py index 6e7c9b9be2eca0e2f3777a8fcc84c6e61d9640ce..e57ad1b0b3c178ab63d5da05a874074006206cd5 100644 --- a/src/pythermogis/workflow/utc/doubletcalc.py +++ b/src/pythermogis/workflow/utc/doubletcalc.py @@ -1,10 +1,13 @@ import math from dataclasses import dataclass -from pythermogis.workflow.utc.utc_properties import UTCConfiguration + +from numba import njit from pydoubletcalc import Aquifer, Doublet, Well, WellPipeSegment -from pythermogis.workflow.utc.water import get_salinity + from pythermogis.workflow.utc.rock import get_geothermal_gradient -from numba import njit +from pythermogis.workflow.utc.utc_properties import UTCConfiguration +from pythermogis.workflow.utc.water import get_salinity + INCH_SI = 0.0254 @dataclass diff --git a/tests/utc/test_doublet.py b/tests/utc/test_doublet.py index 785a5f405fdc1311d6877697ee06f9009a1d017a..eb053e694b545fff4a3e4d4bffd9ace3741a5f4b 100644 --- a/tests/utc/test_doublet.py +++ b/tests/utc/test_doublet.py @@ -2,6 +2,7 @@ import timeit import numpy as np + from pythermogis.workflow.utc.doublet import DoubletInput, calculate_doublet_performance from pythermogis.workflow.utc.utc_properties import UTCConfiguration @@ -73,7 +74,7 @@ def test_calculate_doublet_performance_approximate(): result = calculate_doublet_performance(props, input_data) start = timeit.default_timer() - n_sims = 500 + n_sims = 1000 for _ in range(n_sims): result = calculate_doublet_performance(props, input_data) time_elapsed = timeit.default_timer() - start @@ -81,7 +82,6 @@ def test_calculate_doublet_performance_approximate(): print(f"{n_sims} simulations took: {time_elapsed:.1f} seconds\n" f"{n_sims/time_elapsed:.1f} simulations per second") - # Assert rtol = 0.01 # accurate to 1% assert np.isclose(result.flow, 227.2757568359375, rtol=rtol) diff --git a/tests/utc/test_doubletcalc.py b/tests/utc/test_doubletcalc.py index 1f0f7a475f7bb76f1695a908cf4b035e55b7b60e..e49d5d10925f030c41ca77b3e45b39ee32d0e8c7 100644 --- a/tests/utc/test_doubletcalc.py +++ b/tests/utc/test_doubletcalc.py @@ -1,7 +1,12 @@ -from pythermogis.workflow.utc.utc_properties import UTCConfiguration +import timeit + +import numpy as np +import pytest + from pythermogis.workflow.utc.doublet import DoubletInput from pythermogis.workflow.utc.doubletcalc import doubletcalc -import numpy as np +from pythermogis.workflow.utc.utc_properties import UTCConfiguration + def test_doubletcalc(): props = UTCConfiguration() @@ -24,4 +29,36 @@ def test_doubletcalc(): assert np.isclose(results.flowrate, 18.631507399806665, rtol=0.01) assert np.isclose(results.pump_power_required, 5.175418689587975, rtol=0.01) assert np.isclose(results.production_temp, 41.36211427733413, rtol=0.01) - assert np.isclose(results.heat_power_produced[0], 0.027926914290870505, rtol=0.01) \ No newline at end of file + assert np.isclose(results.heat_power_produced[0], 0.027926914290870505, rtol=0.01) + +def test_doubletcalc_performance(): + props = UTCConfiguration(segment_length=1) + + input_data = DoubletInput( + unknown_input_value=-999.0, + thickness=100.0, + transmissivity=17500.0, + transmissivity_with_ntg=17500.0, + ntg=1.0, + depth=2000, + porosity=0.0, + temperature=50.0, + ) + + nsims = 10000 + # one iteration to warm up the JIT compiled functions + doubletcalc(props, input_data, 600000, 1550, 40) + + start = timeit.default_timer() + for _ in range(nsims): + results = doubletcalc(props, input_data, 600000, 1550, 40) + time_elapsed = timeit.default_timer() - start + print(f"{(nsims/time_elapsed):.1f} sims/s") + + rtol=0.25 + assert np.isclose(results.geothermal_powers, 0.027926914290870505, rtol=rtol) + assert np.isclose(results.cop, 5.396068601571214, rtol=rtol) + assert np.isclose(results.flowrate, 18.631507399806665, rtol=rtol) + assert np.isclose(results.pump_power_required, 5.175418689587975, rtol=rtol) + assert np.isclose(results.production_temp, 41.36211427733413, rtol=rtol) + assert np.isclose(results.heat_power_produced[0], 0.027926914290870505, rtol=rtol) \ No newline at end of file