Loading pixi.lock +63 −21 Original line number Diff line number Diff line Loading @@ -252,6 +252,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f5/64/41c4367bcaecbc03ef0d2a3ecee58a7065d0a36ae1aa817fe573a2da66d4/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d1/80/b9c19f1bb4ac6c5fa6f94a4f278bc68a778473d1814a86a375d7cffa193a/netCDF4-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/58/c3bc54c0fad9a82899e9a2703e04ee6e8eaa76caa90c0689fd1b468a4427/pygridsio-1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/00/d815833441d8c52bf4a6930952e77d3de77d0bf67b3202ccc12dabdae279/pykrige-1.7.2.tar.gz Loading @@ -261,9 +262,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/19/94d6c66184c7d0f9374330c714f62c147dbb53eda9efdcc8fc6e2ac454c5/rasterio-1.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2a/2f/63d2cacc0e525f8e3398bcf32bd3620385f22cd1600834ec49d7f3597a7b/rioxarray-0.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/21/f6/4bfb5695d8941e5c570a04d9fcd0d36bce7511b7d78e6e75c8f9791f82d0/scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d1/a7/5c9cb413e4e2ce52c16be717e94abd40ce91b1f8974624d5d56154c5d40b/shapely-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: ./ - pypi: C:/Users/knappersfy/work/thermogis/pydoubletcalc win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda Loading Loading @@ -486,6 +489,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/66/b5/e04550fd53de57001dbd5a87242da7ff784c80790adc48897977b6ccf891/netCDF4-1.7.2-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/58/c3bc54c0fad9a82899e9a2703e04ee6e8eaa76caa90c0689fd1b468a4427/pygridsio-1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/00/d815833441d8c52bf4a6930952e77d3de77d0bf67b3202ccc12dabdae279/pykrige-1.7.2.tar.gz Loading @@ -495,9 +499,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/88/9db5f49ebfdd9c12365e4cac76c34ccb1a642b1c8cbab4124b3c681495de/rasterio-1.4.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/2a/2f/63d2cacc0e525f8e3398bcf32bd3620385f22cd1600834ec49d7f3597a7b/rioxarray-0.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/cd/01/1204382461fcbfeb05b6161b594f4007e78b6eba9b375382f79153172b4d/scipy-1.16.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e3/f0/9f8cdf2258d7aed742459cea51c70d184de92f5d2d6f5f7f1ded90a18c31/shapely-2.1.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: ./ - pypi: C:/Users/knappersfy/work/thermogis/pydoubletcalc packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 Loading Loading @@ -4471,6 +4477,10 @@ packages: - pkg:pypi/partd?source=hash-mapping size: 20884 timestamp: 1715026639309 - pypi: https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl name: pathlib version: 1.0.1 sha256: f35f95ab8b0f59e6d354090350b44a80a80635d22efdedfa84c7ad1cf0a74147 - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda sha256: 9f64009cdf5b8e529995f18e03665b03f5d07c0b17445b8badef45bde76249ee md5: 617f15191456cc6a13db418a275435e5 Loading Loading @@ -4752,6 +4762,20 @@ packages: - pkg:pypi/pycparser?source=hash-mapping size: 110100 timestamp: 1733195786147 - pypi: C:/Users/knappersfy/work/thermogis/pydoubletcalc name: pydoubletcalc version: 0.0.1 sha256: af6852e94daff598f382da9a04e74eb8649592424d163653d66a833bc140c065 requires_dist: - pandas - matplotlib - pathlib - xarray - tqdm>=4.67.1 - scipy>=1.16.2 - numba>=0.62.1 requires_python: '>=3.13,<3.14' editable: true - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b md5: 232fb4577b6687b2d503ef8e254270c9 Loading Loading @@ -4919,7 +4943,7 @@ packages: - pypi: ./ name: pythermogis version: 1.2.0 sha256: bbba086a07a9972c4416d90c0cddf7f691529a60cac13dd8dd9fb2a236d68059 sha256: f25432777c09250f39cf8019497063cc9860feeb7207723ab5ec7783781125d6 requires_dist: - jpype1>=1.5.2,<2 - xarray==2024.9.0.* Loading Loading @@ -5317,13 +5341,13 @@ packages: purls: [] size: 358164 timestamp: 1749095480268 - pypi: https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/21/f6/4bfb5695d8941e5c570a04d9fcd0d36bce7511b7d78e6e75c8f9791f82d0/scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: scipy version: 1.15.3 sha256: b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163 version: 1.16.3 sha256: 7dc1360c06535ea6116a2220f760ae572db9f661aba2d88074fe30ec2aa1ff88 requires_dist: - numpy>=1.23.5,<2.5 - pytest ; extra == 'test' - numpy>=1.25.2,<2.6 - pytest>=8.0.0 ; extra == 'test' - pytest-cov ; extra == 'test' - pytest-timeout ; extra == 'test' - pytest-xdist ; extra == 'test' Loading @@ -5334,11 +5358,11 @@ packages: - scikit-umfpack ; extra == 'test' - pooch ; extra == 'test' - hypothesis>=6.30 ; extra == 'test' - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - array-api-strict>=2.3.1 ; extra == 'test' - cython ; extra == 'test' - meson ; extra == 'test' - ninja ; sys_platform != 'emscripten' and extra == 'test' - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - intersphinx-registry ; extra == 'doc' - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - sphinx-copybutton ; extra == 'doc' Loading @@ -5346,10 +5370,11 @@ packages: - matplotlib>=3.5 ; extra == 'doc' - numpydoc ; extra == 'doc' - jupytext ; extra == 'doc' - myst-nb ; extra == 'doc' - myst-nb>=1.2.0 ; extra == 'doc' - pooch ; extra == 'doc' - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - jupyterlite-pyodide-kernel ; extra == 'doc' - linkify-it-py ; extra == 'doc' - mypy==1.10.0 ; extra == 'dev' - typing-extensions ; extra == 'dev' - types-psutil ; extra == 'dev' Loading @@ -5359,14 +5384,14 @@ packages: - rich-click ; extra == 'dev' - doit>=0.36.0 ; extra == 'dev' - pydevtool ; extra == 'dev' requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/cd/01/1204382461fcbfeb05b6161b594f4007e78b6eba9b375382f79153172b4d/scipy-1.16.3-cp313-cp313-win_amd64.whl name: scipy version: 1.15.3 sha256: c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7 version: 1.16.3 sha256: 062246acacbe9f8210de8e751b16fc37458213f124bef161a5a02c7a39284304 requires_dist: - numpy>=1.23.5,<2.5 - pytest ; extra == 'test' - numpy>=1.25.2,<2.6 - pytest>=8.0.0 ; extra == 'test' - pytest-cov ; extra == 'test' - pytest-timeout ; extra == 'test' - pytest-xdist ; extra == 'test' Loading @@ -5377,11 +5402,11 @@ packages: - scikit-umfpack ; extra == 'test' - pooch ; extra == 'test' - hypothesis>=6.30 ; extra == 'test' - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - array-api-strict>=2.3.1 ; extra == 'test' - cython ; extra == 'test' - meson ; extra == 'test' - ninja ; sys_platform != 'emscripten' and extra == 'test' - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - intersphinx-registry ; extra == 'doc' - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - sphinx-copybutton ; extra == 'doc' Loading @@ -5389,10 +5414,11 @@ packages: - matplotlib>=3.5 ; extra == 'doc' - numpydoc ; extra == 'doc' - jupytext ; extra == 'doc' - myst-nb ; extra == 'doc' - myst-nb>=1.2.0 ; extra == 'doc' - pooch ; extra == 'doc' - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - jupyterlite-pyodide-kernel ; extra == 'doc' - linkify-it-py ; extra == 'doc' - mypy==1.10.0 ; extra == 'dev' - typing-extensions ; extra == 'dev' - types-psutil ; extra == 'dev' Loading @@ -5402,7 +5428,7 @@ packages: - rich-click ; extra == 'dev' - doit>=0.36.0 ; extra == 'dev' - pydevtool ; extra == 'dev' requires_python: '>=3.10' requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py313h78bf25f_3.conda sha256: 7f548e147e14ce743a796aa5f26aba11f82c14ab53ab25b48f35974ca48f6ac7 md5: 813e01c086f6c4e134e13ef25b02df8c Loading Loading @@ -5614,6 +5640,22 @@ packages: - pkg:pypi/tornado?source=hash-mapping size: 878044 timestamp: 1748003914685 - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl name: tqdm version: 4.67.1 sha256: 26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 requires_dist: - colorama ; sys_platform == 'win32' - pytest>=6 ; extra == 'dev' - pytest-cov ; extra == 'dev' - pytest-timeout ; extra == 'dev' - pytest-asyncio>=0.24 ; extra == 'dev' - nbval ; extra == 'dev' - requests ; extra == 'discord' - slack-sdk ; extra == 'slack' - requests ; extra == 'telegram' - ipywidgets>=6 ; extra == 'notebook' requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/twine-6.1.0-pyh29332c3_0.conda sha256: c5b373f6512b96324c9607d7d91a76bb53c1056cb1012b4f9c86900c6b7f8898 md5: d319066fad04e07a0223bf9936090161 Loading pyproject.toml +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ platforms = ["win-64", "linux-64"] [tool.pixi.pypi-dependencies] pythermogis = { path = ".", editable = true } pydoubletcalc = { path = 'C:\Users\knappersfy\work\thermogis\pydoubletcalc', editable = true } [tool.pixi.tasks] test = "PYTHONPATH=src/pythermogis pytest -s tests/" Loading src/pythermogis/workflow/utc/doublet.py +5 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ class DoubletInput: porosity: float temperature: float @property def permeability(self) -> float: DARCY_SI = 1.0e-12 / 1.01325 return self.transmissivity / self.thickness * 1e-3 * DARCY_SI @dataclass class DoubletOutput: power: float Loading src/pythermogis/workflow/utc/doubletcalc.py +78 −2 Original line number Diff line number Diff line from typing import TYPE_CHECKING from dataclasses import dataclass from pythermogis.workflow.utc.utc_properties import UTCConfiguration from pydoubletcalc import Aquifer, Doublet, Well, WellPipeSegment from pythermogis.workflow.utc.water import get_salinity from pythermogis.workflow.utc.rock import get_geothermal_gradient if TYPE_CHECKING: from pythermogis.workflow.utc.doublet import DoubletInput @dataclass class Doublet1DResults: geothermal_powers: float Loading @@ -18,4 +26,72 @@ def doubletcalc( well_distance: float, injection_temp: float, ) -> Doublet1DResults: ... No newline at end of file aquifer = Aquifer( permeability=input.permeability, porosity=input.porosity, net_to_gross=input.ntg, thickness=input.thickness, salinity=get_salinity(props.salinity_surface, props.salinity_gradient, input.depth), surface_temperature=props.surface_temperature, geothermal_gradient=get_geothermal_gradient(input.depth, input.thickness, input.temperature, props.surface_temperature), rock_heat_capacity=855, rock_density=2720, thermal_conductivity=3, thermal_diffusivity=1.2e-6, ) injector = Well( aquifer=aquifer, well_type="injector", pipe_segments=..., aquifer_top_depth=..., pipe_scaling=..., target_segment_length=..., outer_diameter=..., skin=..., pump_present=..., pump_pressure=..., pump_depth=..., pump_efficiency=..., pressure_balance_tolerance=..., viscosity_mode=props.viscosity_mode, heat_exchanger_exit_temperature=..., ) producer = Well( aquifer=aquifer, well_type="producer", pipe_segments=..., aquifer_top_depth=..., pipe_scaling=..., target_segment_length=..., outer_diameter=..., skin=..., pump_present=..., pump_pressure=..., pump_depth=..., pump_efficiency=..., pressure_balance_tolerance=..., viscosity_mode=props.viscosity_mode, heat_exchanger_exit_temperature=..., ) doublet = Doublet( aquifer=aquifer, injector=injector, producer=producer, well_distance=well_distance, cooling_fraction=0.1, yearly_operating_hours=props.load_hours, pressure_balance_tolerance=10, viscosity_mode=props.viscosity_mode, heat_exchanger_exit_temperature=injection_temp, ) doublet.simulate() return Doublet1DResults( # TODO: check these values. Not sure what conversions should or shouldnt be done geothermal_powers=doublet.geothermal_power, cop=doublet.cop, flowrate=-doublet.volume_flow_pump * 3600, pump_power_required=doublet.pump_power * 1e-6, production_temp=doublet.nodes['prod_top'].temperature, heat_power_produced=[doublet.geothermal_power] * props.econ_lifetime_years, ) No newline at end of file src/pythermogis/workflow/utc/rock.py 0 → 100644 +7 −0 Original line number Diff line number Diff line from numba import njit @njit def get_geothermal_gradient(depth: float, thickness: float, temperature: float, surface_temperature: float) -> float: d_depth = depth +0.5 * thickness dt = temperature - surface_temperature return dt / d_depth Loading
pixi.lock +63 −21 Original line number Diff line number Diff line Loading @@ -252,6 +252,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f5/64/41c4367bcaecbc03ef0d2a3ecee58a7065d0a36ae1aa817fe573a2da66d4/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d1/80/b9c19f1bb4ac6c5fa6f94a4f278bc68a778473d1814a86a375d7cffa193a/netCDF4-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/58/c3bc54c0fad9a82899e9a2703e04ee6e8eaa76caa90c0689fd1b468a4427/pygridsio-1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/00/d815833441d8c52bf4a6930952e77d3de77d0bf67b3202ccc12dabdae279/pykrige-1.7.2.tar.gz Loading @@ -261,9 +262,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/19/94d6c66184c7d0f9374330c714f62c147dbb53eda9efdcc8fc6e2ac454c5/rasterio-1.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2a/2f/63d2cacc0e525f8e3398bcf32bd3620385f22cd1600834ec49d7f3597a7b/rioxarray-0.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/21/f6/4bfb5695d8941e5c570a04d9fcd0d36bce7511b7d78e6e75c8f9791f82d0/scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d1/a7/5c9cb413e4e2ce52c16be717e94abd40ce91b1f8974624d5d56154c5d40b/shapely-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: ./ - pypi: C:/Users/knappersfy/work/thermogis/pydoubletcalc win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda Loading Loading @@ -486,6 +489,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/66/b5/e04550fd53de57001dbd5a87242da7ff784c80790adc48897977b6ccf891/netCDF4-1.7.2-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/58/c3bc54c0fad9a82899e9a2703e04ee6e8eaa76caa90c0689fd1b468a4427/pygridsio-1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/00/d815833441d8c52bf4a6930952e77d3de77d0bf67b3202ccc12dabdae279/pykrige-1.7.2.tar.gz Loading @@ -495,9 +499,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/88/9db5f49ebfdd9c12365e4cac76c34ccb1a642b1c8cbab4124b3c681495de/rasterio-1.4.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/2a/2f/63d2cacc0e525f8e3398bcf32bd3620385f22cd1600834ec49d7f3597a7b/rioxarray-0.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/cd/01/1204382461fcbfeb05b6161b594f4007e78b6eba9b375382f79153172b4d/scipy-1.16.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e3/f0/9f8cdf2258d7aed742459cea51c70d184de92f5d2d6f5f7f1ded90a18c31/shapely-2.1.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: ./ - pypi: C:/Users/knappersfy/work/thermogis/pydoubletcalc packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 Loading Loading @@ -4471,6 +4477,10 @@ packages: - pkg:pypi/partd?source=hash-mapping size: 20884 timestamp: 1715026639309 - pypi: https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl name: pathlib version: 1.0.1 sha256: f35f95ab8b0f59e6d354090350b44a80a80635d22efdedfa84c7ad1cf0a74147 - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda sha256: 9f64009cdf5b8e529995f18e03665b03f5d07c0b17445b8badef45bde76249ee md5: 617f15191456cc6a13db418a275435e5 Loading Loading @@ -4752,6 +4762,20 @@ packages: - pkg:pypi/pycparser?source=hash-mapping size: 110100 timestamp: 1733195786147 - pypi: C:/Users/knappersfy/work/thermogis/pydoubletcalc name: pydoubletcalc version: 0.0.1 sha256: af6852e94daff598f382da9a04e74eb8649592424d163653d66a833bc140c065 requires_dist: - pandas - matplotlib - pathlib - xarray - tqdm>=4.67.1 - scipy>=1.16.2 - numba>=0.62.1 requires_python: '>=3.13,<3.14' editable: true - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b md5: 232fb4577b6687b2d503ef8e254270c9 Loading Loading @@ -4919,7 +4943,7 @@ packages: - pypi: ./ name: pythermogis version: 1.2.0 sha256: bbba086a07a9972c4416d90c0cddf7f691529a60cac13dd8dd9fb2a236d68059 sha256: f25432777c09250f39cf8019497063cc9860feeb7207723ab5ec7783781125d6 requires_dist: - jpype1>=1.5.2,<2 - xarray==2024.9.0.* Loading Loading @@ -5317,13 +5341,13 @@ packages: purls: [] size: 358164 timestamp: 1749095480268 - pypi: https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/21/f6/4bfb5695d8941e5c570a04d9fcd0d36bce7511b7d78e6e75c8f9791f82d0/scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: scipy version: 1.15.3 sha256: b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163 version: 1.16.3 sha256: 7dc1360c06535ea6116a2220f760ae572db9f661aba2d88074fe30ec2aa1ff88 requires_dist: - numpy>=1.23.5,<2.5 - pytest ; extra == 'test' - numpy>=1.25.2,<2.6 - pytest>=8.0.0 ; extra == 'test' - pytest-cov ; extra == 'test' - pytest-timeout ; extra == 'test' - pytest-xdist ; extra == 'test' Loading @@ -5334,11 +5358,11 @@ packages: - scikit-umfpack ; extra == 'test' - pooch ; extra == 'test' - hypothesis>=6.30 ; extra == 'test' - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - array-api-strict>=2.3.1 ; extra == 'test' - cython ; extra == 'test' - meson ; extra == 'test' - ninja ; sys_platform != 'emscripten' and extra == 'test' - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - intersphinx-registry ; extra == 'doc' - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - sphinx-copybutton ; extra == 'doc' Loading @@ -5346,10 +5370,11 @@ packages: - matplotlib>=3.5 ; extra == 'doc' - numpydoc ; extra == 'doc' - jupytext ; extra == 'doc' - myst-nb ; extra == 'doc' - myst-nb>=1.2.0 ; extra == 'doc' - pooch ; extra == 'doc' - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - jupyterlite-pyodide-kernel ; extra == 'doc' - linkify-it-py ; extra == 'doc' - mypy==1.10.0 ; extra == 'dev' - typing-extensions ; extra == 'dev' - types-psutil ; extra == 'dev' Loading @@ -5359,14 +5384,14 @@ packages: - rich-click ; extra == 'dev' - doit>=0.36.0 ; extra == 'dev' - pydevtool ; extra == 'dev' requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/cd/01/1204382461fcbfeb05b6161b594f4007e78b6eba9b375382f79153172b4d/scipy-1.16.3-cp313-cp313-win_amd64.whl name: scipy version: 1.15.3 sha256: c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7 version: 1.16.3 sha256: 062246acacbe9f8210de8e751b16fc37458213f124bef161a5a02c7a39284304 requires_dist: - numpy>=1.23.5,<2.5 - pytest ; extra == 'test' - numpy>=1.25.2,<2.6 - pytest>=8.0.0 ; extra == 'test' - pytest-cov ; extra == 'test' - pytest-timeout ; extra == 'test' - pytest-xdist ; extra == 'test' Loading @@ -5377,11 +5402,11 @@ packages: - scikit-umfpack ; extra == 'test' - pooch ; extra == 'test' - hypothesis>=6.30 ; extra == 'test' - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - array-api-strict>=2.3.1 ; extra == 'test' - cython ; extra == 'test' - meson ; extra == 'test' - ninja ; sys_platform != 'emscripten' and extra == 'test' - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - intersphinx-registry ; extra == 'doc' - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - sphinx-copybutton ; extra == 'doc' Loading @@ -5389,10 +5414,11 @@ packages: - matplotlib>=3.5 ; extra == 'doc' - numpydoc ; extra == 'doc' - jupytext ; extra == 'doc' - myst-nb ; extra == 'doc' - myst-nb>=1.2.0 ; extra == 'doc' - pooch ; extra == 'doc' - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - jupyterlite-pyodide-kernel ; extra == 'doc' - linkify-it-py ; extra == 'doc' - mypy==1.10.0 ; extra == 'dev' - typing-extensions ; extra == 'dev' - types-psutil ; extra == 'dev' Loading @@ -5402,7 +5428,7 @@ packages: - rich-click ; extra == 'dev' - doit>=0.36.0 ; extra == 'dev' - pydevtool ; extra == 'dev' requires_python: '>=3.10' requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py313h78bf25f_3.conda sha256: 7f548e147e14ce743a796aa5f26aba11f82c14ab53ab25b48f35974ca48f6ac7 md5: 813e01c086f6c4e134e13ef25b02df8c Loading Loading @@ -5614,6 +5640,22 @@ packages: - pkg:pypi/tornado?source=hash-mapping size: 878044 timestamp: 1748003914685 - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl name: tqdm version: 4.67.1 sha256: 26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 requires_dist: - colorama ; sys_platform == 'win32' - pytest>=6 ; extra == 'dev' - pytest-cov ; extra == 'dev' - pytest-timeout ; extra == 'dev' - pytest-asyncio>=0.24 ; extra == 'dev' - nbval ; extra == 'dev' - requests ; extra == 'discord' - slack-sdk ; extra == 'slack' - requests ; extra == 'telegram' - ipywidgets>=6 ; extra == 'notebook' requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/twine-6.1.0-pyh29332c3_0.conda sha256: c5b373f6512b96324c9607d7d91a76bb53c1056cb1012b4f9c86900c6b7f8898 md5: d319066fad04e07a0223bf9936090161 Loading
pyproject.toml +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ platforms = ["win-64", "linux-64"] [tool.pixi.pypi-dependencies] pythermogis = { path = ".", editable = true } pydoubletcalc = { path = 'C:\Users\knappersfy\work\thermogis\pydoubletcalc', editable = true } [tool.pixi.tasks] test = "PYTHONPATH=src/pythermogis pytest -s tests/" Loading
src/pythermogis/workflow/utc/doublet.py +5 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ class DoubletInput: porosity: float temperature: float @property def permeability(self) -> float: DARCY_SI = 1.0e-12 / 1.01325 return self.transmissivity / self.thickness * 1e-3 * DARCY_SI @dataclass class DoubletOutput: power: float Loading
src/pythermogis/workflow/utc/doubletcalc.py +78 −2 Original line number Diff line number Diff line from typing import TYPE_CHECKING from dataclasses import dataclass from pythermogis.workflow.utc.utc_properties import UTCConfiguration from pydoubletcalc import Aquifer, Doublet, Well, WellPipeSegment from pythermogis.workflow.utc.water import get_salinity from pythermogis.workflow.utc.rock import get_geothermal_gradient if TYPE_CHECKING: from pythermogis.workflow.utc.doublet import DoubletInput @dataclass class Doublet1DResults: geothermal_powers: float Loading @@ -18,4 +26,72 @@ def doubletcalc( well_distance: float, injection_temp: float, ) -> Doublet1DResults: ... No newline at end of file aquifer = Aquifer( permeability=input.permeability, porosity=input.porosity, net_to_gross=input.ntg, thickness=input.thickness, salinity=get_salinity(props.salinity_surface, props.salinity_gradient, input.depth), surface_temperature=props.surface_temperature, geothermal_gradient=get_geothermal_gradient(input.depth, input.thickness, input.temperature, props.surface_temperature), rock_heat_capacity=855, rock_density=2720, thermal_conductivity=3, thermal_diffusivity=1.2e-6, ) injector = Well( aquifer=aquifer, well_type="injector", pipe_segments=..., aquifer_top_depth=..., pipe_scaling=..., target_segment_length=..., outer_diameter=..., skin=..., pump_present=..., pump_pressure=..., pump_depth=..., pump_efficiency=..., pressure_balance_tolerance=..., viscosity_mode=props.viscosity_mode, heat_exchanger_exit_temperature=..., ) producer = Well( aquifer=aquifer, well_type="producer", pipe_segments=..., aquifer_top_depth=..., pipe_scaling=..., target_segment_length=..., outer_diameter=..., skin=..., pump_present=..., pump_pressure=..., pump_depth=..., pump_efficiency=..., pressure_balance_tolerance=..., viscosity_mode=props.viscosity_mode, heat_exchanger_exit_temperature=..., ) doublet = Doublet( aquifer=aquifer, injector=injector, producer=producer, well_distance=well_distance, cooling_fraction=0.1, yearly_operating_hours=props.load_hours, pressure_balance_tolerance=10, viscosity_mode=props.viscosity_mode, heat_exchanger_exit_temperature=injection_temp, ) doublet.simulate() return Doublet1DResults( # TODO: check these values. Not sure what conversions should or shouldnt be done geothermal_powers=doublet.geothermal_power, cop=doublet.cop, flowrate=-doublet.volume_flow_pump * 3600, pump_power_required=doublet.pump_power * 1e-6, production_temp=doublet.nodes['prod_top'].temperature, heat_power_produced=[doublet.geothermal_power] * props.econ_lifetime_years, ) No newline at end of file
src/pythermogis/workflow/utc/rock.py 0 → 100644 +7 −0 Original line number Diff line number Diff line from numba import njit @njit def get_geothermal_gradient(depth: float, thickness: float, temperature: float, surface_temperature: float) -> float: d_depth = depth +0.5 * thickness dt = temperature - surface_temperature return dt / d_depth