├── requirements.txt ├── docs ├── examples │ └── index.rst ├── release_notes.rst ├── developers │ └── index.rst ├── _static │ └── logo.png ├── api │ ├── phydrus.model.rst │ ├── phydrus.profile.rst │ ├── phydrus.read.rst │ └── index.rst ├── Makefile ├── index.rst ├── make.bat ├── getting_started.rst └── conf.py ├── phydrus ├── version.py ├── __init__.py ├── decorators.py ├── profile.py ├── plot.py └── read.py ├── source ├── hydrus ├── hydrus.exe ├── HYDRUS1D-4.08.pdf ├── make.bat ├── makefile ├── TEMPER.FOR └── SINK.FOR ├── examples ├── hydrus ├── phydrus_paper │ └── Ex3 │ │ └── output │ │ ├── NOD_INF.OUT │ │ ├── BALANCE.OUT │ │ ├── SELECTOR.IN │ │ ├── PROFILE.DAT │ │ ├── PROFILE.OUT │ │ └── I_CHECK.OUT ├── example3.py ├── example.py ├── example2.py ├── example5.py ├── example4.py └── data │ ├── ex2.csv │ ├── ex4.csv │ └── ex3.csv ├── tests ├── test_001.py ├── test_read.py └── test_data │ ├── A_LEVEL.OUT │ ├── RUN_INF.OUT │ ├── PROFILE.OUT │ ├── BALANCE.OUT │ ├── OBS_NODE.OUT │ └── SOLUTE1.OUT ├── requirements_rtd.txt ├── .gitignore ├── .travis.yml ├── .zenodo.json ├── setup.py ├── README.md └── LICENSE /requirements.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/examples/index.rst: -------------------------------------------------------------------------------- 1 | Examples 2 | ======== -------------------------------------------------------------------------------- /phydrus/version.py: -------------------------------------------------------------------------------- 1 | __version__ = "0.1.0" 2 | -------------------------------------------------------------------------------- /docs/release_notes.rst: -------------------------------------------------------------------------------- 1 | Release Notes 2 | ============= -------------------------------------------------------------------------------- /docs/developers/index.rst: -------------------------------------------------------------------------------- 1 | Developers Section 2 | ================== -------------------------------------------------------------------------------- /source/hydrus: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhujiedong/phydrus/master/source/hydrus -------------------------------------------------------------------------------- /examples/hydrus: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhujiedong/phydrus/master/examples/hydrus -------------------------------------------------------------------------------- /tests/test_001.py: -------------------------------------------------------------------------------- 1 | def test_import(): 2 | import phydrus as ps 3 | return ps 4 | -------------------------------------------------------------------------------- /source/hydrus.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhujiedong/phydrus/master/source/hydrus.exe -------------------------------------------------------------------------------- /docs/_static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhujiedong/phydrus/master/docs/_static/logo.png -------------------------------------------------------------------------------- /source/HYDRUS1D-4.08.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhujiedong/phydrus/master/source/HYDRUS1D-4.08.pdf -------------------------------------------------------------------------------- /source/make.bat: -------------------------------------------------------------------------------- 1 | gfortran HYDRUS.FOR INPUT.FOR HYSTER.FOR MATERIAL.FOR OUTPUT.FOR SINK.FOR SOLUTE.FOR TEMPER.FOR TIME.FOR WATFLOW.FOR -o "%~dp0\hydrus.exe" 2 | -------------------------------------------------------------------------------- /requirements_rtd.txt: -------------------------------------------------------------------------------- 1 | numpy>=1.15 2 | matplotlib>=2.0 3 | pandas>=0.23 4 | scipy>=1.1 5 | Ipython 6 | ipykernel 7 | nbsphinx 8 | nbsphinx_link 9 | pydata-sphinx-theme 10 | sphinx-gallery 11 | sphinx>=3.1 12 | -------------------------------------------------------------------------------- /examples/phydrus_paper/Ex3/output/NOD_INF.OUT: -------------------------------------------------------------------------------- 1 | ******* Program HYDRUS 2 | ******* None 3 | Date: 0.**. Time: ***:**:** 4 | Units: L = cm , T = days , M = mmol 5 | -------------------------------------------------------------------------------- /phydrus/__init__.py: -------------------------------------------------------------------------------- 1 | from .model import Model 2 | from .profile import create_profile 3 | from .read import read_profile, read_nod_inf, read_run_inf, read_tlevel, \ 4 | read_balance, read_i_check, read_obs_node, read_alevel, read_solute 5 | from .version import __version__ 6 | -------------------------------------------------------------------------------- /examples/phydrus_paper/Ex3/output/BALANCE.OUT: -------------------------------------------------------------------------------- 1 | ******* Program HYDRUS 2 | ******* None 3 | Date: 0.**. Time: ***:**:** 4 | Units: L = cm , T = days , M = mmol 5 | 6 | Calculation time [sec] 2151423178.5999999 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | */Ex_hydrus/* 2 | 3 | *.o 4 | 5 | *.xml 6 | 7 | *.iml 8 | 9 | *.pyc 10 | 11 | *.so 12 | 13 | examples/notebooks/.ipynb_checkpoints/ 14 | gui/settings 15 | build 16 | dist 17 | phydrus.egg-info 18 | 19 | .idea/.name 20 | .cache/v/cache/lastfailed 21 | *.log 22 | 23 | **/*.ipynb_checkpoints/ 24 | 25 | .vscode/* 26 | -------------------------------------------------------------------------------- /docs/api/phydrus.model.rst: -------------------------------------------------------------------------------- 1 | phydrus.model 2 | ============= 3 | 4 | .. automodule:: phydrus.model 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | .. rubric:: Classes 17 | 18 | .. autosummary:: 19 | 20 | Model 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /docs/api/phydrus.profile.rst: -------------------------------------------------------------------------------- 1 | phydrus.profile 2 | =============== 3 | 4 | .. automodule:: phydrus.profile 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | .. rubric:: Functions 13 | 14 | .. autosummary:: 15 | 16 | create_profile 17 | profile_from_file 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /phydrus/decorators.py: -------------------------------------------------------------------------------- 1 | import os 2 | from functools import wraps 3 | 4 | 5 | def check_file_path(function): 6 | @wraps(function) 7 | def _check_file_path(path, *args, **kwargs): 8 | if not os.path.exists(path): 9 | raise FileNotFoundError( 10 | "File {} has not been found.".format(path)) 11 | else: 12 | return function(path, *args, **kwargs) 13 | 14 | return _check_file_path 15 | -------------------------------------------------------------------------------- /docs/api/phydrus.read.rst: -------------------------------------------------------------------------------- 1 | phydrus.read 2 | ============ 3 | 4 | .. automodule:: phydrus.read 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | .. rubric:: Functions 13 | 14 | .. autosummary:: 15 | 16 | read_alevel 17 | read_balance 18 | read_i_check 19 | read_nod_inf 20 | read_obs_node 21 | read_profile 22 | read_run_inf 23 | read_solute 24 | read_tlevel 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /docs/api/index.rst: -------------------------------------------------------------------------------- 1 | API-docs 2 | ======== 3 | This section contains the Documentation of the Application Programming 4 | Interface (API) of Phydrus. The information in this section is automatically 5 | created from the documentation strings in original Python code. In the 6 | left-hand menu you will find the different categories of the API documentation. 7 | 8 | .. currentmodule:: phydrus 9 | 10 | .. autosummary:: 11 | :toctree: . 12 | 13 | phydrus.model 14 | phydrus.read 15 | phydrus.profile 16 | 17 | 18 | .. toctree:: 19 | :maxdepth: 5 20 | 21 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | SOURCEDIR = . 8 | BUILDDIR = build 9 | 10 | # Put it first so that "make" without argument is like "make help". 11 | help: 12 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 13 | 14 | .PHONY: help Makefile 15 | 16 | # Catch-all target: route all unknown targets to Sphinx using the new 17 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 18 | %: Makefile 19 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # 2 | language: python 3 | 4 | env: 5 | global: 6 | #- DEPENDS="cython>=0.19" 7 | - NO_NET=1 8 | 9 | git: 10 | depth: 1000 11 | 12 | matrix: 13 | include: 14 | - python: 3.6 15 | dist: trusty 16 | sudo: false 17 | before_script: 18 | - "export DISPLAY=:99.0" 19 | - "sh -e /etc/init.d/xvfb start" 20 | - sleep 3 # give xvfb some time to start 21 | - python: 3.7 22 | dist: xenial 23 | sudo: true 24 | services: 25 | - xvfb 26 | 27 | # Install dependencies 28 | install: 29 | - pip install -e . 30 | - pip install --upgrade pip 31 | - pip install codecov 32 | - pip install pytest-cov 33 | - pip install codacy-coverage 34 | 35 | 36 | # command to run tests 37 | script: 38 | - py.test ./tests --cov=phydrus --cov-report=xml 39 | 40 | after_success: 41 | - python-codacy-coverage -r coverage.xml 42 | -------------------------------------------------------------------------------- /source/makefile: -------------------------------------------------------------------------------- 1 | # Makefile to compile HYDRUS-1D on Mac and Linux 2 | 3 | # Find the fortran compiler 4 | UNAME_S := $(shell uname -s) 5 | ifeq ($(UNAME_S),Darwin) 6 | CC = /usr/local/bin/gfortran 7 | endif 8 | ifeq ($(UNAME_S),Linux) 9 | CC = /usr/bin/gfortran 10 | endif 11 | 12 | # Set the files and objects 13 | objects = HYDRUS.o INPUT.o HYSTER.o MATERIAL.o OUTPUT.o SINK.o SOLUTE.o TEMPER.o TIME.o WATFLOW.o 14 | files = HYDRUS.FOR INPUT.FOR HYSTER.FOR MATERIAL.FOR OUTPUT.FOR SINK.FOR SOLUTE.FOR TEMPER.FOR TIME.FOR WATFLOW.FOR 15 | FFLAGS = -g -ffpe-trap=zero,overflow,underflow 16 | 17 | # Compile to a unix executable 18 | hydrus: 19 | $(CC) $(FFLAGS) -c $(files) 20 | $(CC) -o hydrus $(objects) 21 | rm $(objects) 22 | 23 | # Compile to an shared-object file to import in python (WIP) 24 | f2py : 25 | f2py -c $(files) -m hydrus 26 | 27 | # Clean the directory after 28 | clean : 29 | rm $(objects) -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | Welcome to the Phydrus Docs! 2 | ============================ 3 | This package provides a Python implementation of the HYDRUS-1D unsaturated 4 | zone model developed by Šimůnek, J., M. Th. van Genuchten, and M. Šejna. 5 | More information on the HYDRUS-1D model is available here. This software is 6 | licenced under the GNU GENERAL PUBLIC LICENSE found here. The Phydrus code is 7 | developed by R.A. Collenteur, G. Brunetti and M. Vremec. With Phydrus, 8 | a HYDRUS-1D model can be created, calibrated and visualized through Python 9 | scripts, making it easy to adjust the model and providing a 100% reproducible 10 | workflow of your modeling process. 11 | 12 | .. toctree:: 13 | :maxdepth: 2 14 | :hidden: 15 | 16 | About 17 | Getting Started 18 | Examples 19 | Development 20 | API Docs 21 | Release Notes 22 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=. 11 | set BUILDDIR=build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /tests/test_read.py: -------------------------------------------------------------------------------- 1 | import phydrus as ps 2 | 3 | 4 | def test_read_profile(): 5 | ps.read_profile(path="tests/test_data/PROFILE.OUT") 6 | return 7 | 8 | 9 | def test_read_nod_inf(): 10 | ps.read_nod_inf(path="tests/test_data/NOD_INF.OUT") 11 | return 12 | 13 | 14 | def test_read_run_inf(): 15 | ps.read_run_inf(path="tests/test_data/RUN_INF.OUT") 16 | return 17 | 18 | 19 | def test_read_obs_node(): 20 | ps.read_obs_node(path="tests/test_data/OBS_NODE.OUT", nodes=[5, 7, 9]) 21 | return 22 | 23 | 24 | # def test_read_i_check(): 25 | # ps.read_i_check(path="test_data/I_CHECK.OUT") 26 | # return 27 | 28 | 29 | def test_read_tlevel(): 30 | ps.read_tlevel(path="tests/test_data/T_LEVEL.OUT") 31 | return 32 | 33 | 34 | def test_read_alevel(): 35 | ps.read_alevel(path="tests/test_data/A_LEVEL.OUT") 36 | return 37 | 38 | 39 | # def test_read_balance(): 40 | # ps.read_balance(path="test_data/BALANCE.OUT") 41 | # return 42 | 43 | 44 | def test_read_solute(): 45 | ps.read_solute(path="tests/test_data/SOLUTE1.OUT") 46 | return 47 | -------------------------------------------------------------------------------- /.zenodo.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Phydrus: an open source Python implementation of the Hydrus-1D model", 3 | "license": "GNU LGPL V3", 4 | "title": "Phydrus: an open source Python implementation of the Hydrus-1D model", 5 | "upload_type": "software", 6 | "creators": [ 7 | { 8 | "affiliation": "University of Graz, Graz, Austria.", 9 | "name": "Raoul Collenteur", 10 | "orcid": "0000-0001-7843-1538" 11 | }, 12 | { 13 | "affiliation": "University of Graz, Graz, Austria.", 14 | "name": "Matevz Vremec", 15 | "orcid": "0000-0002-2730-494X" 16 | }, 17 | { 18 | "affiliation": "Institute of Hydraulics and Rural Water Management, Univ. of Natural Resources and Life Sciences, Vienna, Austria", 19 | "name": "Giuseppe Brunetti", 20 | "orcid": "0000-0001-7943-8088" 21 | }, 22 | { 23 | "affiliation": "Dep. of Land, Air and Water Resources, Univ. of California, Davis, United States", 24 | "name": "Jirka Šimunek", 25 | "orcid": "0000-0002-0166-6563" 26 | } 27 | ], 28 | "access_right": "open", 29 | "keywords": [ 30 | "python", 31 | "hydrology", 32 | "Hydrus-1D", 33 | "unsaturated zone", 34 | "open source" 35 | ] 36 | } -------------------------------------------------------------------------------- /examples/example3.py: -------------------------------------------------------------------------------- 1 | """ 2 | Example script of how to setup a basic HYDRUS-1D model using Pydrus. 3 | 4 | Author: R.A. Collenteur, University of Graz, 2019 5 | 6 | """ 7 | 8 | import os 9 | 10 | import pandas as pd 11 | 12 | import phydrus as ps 13 | 14 | ws = "example3" 15 | exe = os.path.join(os.getcwd(), "hydrus") 16 | 17 | # Create the basic model 18 | desc = "Root uptake with meteorological data" 19 | 20 | ml = ps.Model(exe_name=exe, ws_name=ws, name="model", description=desc, 21 | mass_units="mmol", time_unit="days", length_unit="cm") 22 | 23 | # Time info 24 | times = ml.add_time_info(tmax=213, print_times=True) 25 | 26 | # Water flow info 27 | ml.add_waterflow(maxit=20, tolh=1, linitw=False, top_bc=3, bot_bc=6, hseep=-60) 28 | 29 | # Add materials 30 | m = ml.get_empty_material_df(n=1) 31 | m.loc[[1, 1]] = [[0.095, 0.41, 0.019, 1.31, 3.4, 0.5]] 32 | ml.add_material(m) 33 | 34 | # Profile 35 | profile = ps.create_profile(bot=-100, dx=10, h=-70.5614) 36 | ml.add_profile(profile) 37 | 38 | # Atmospheric data 39 | atm = pd.read_csv("data/ex3.csv", index_col=0) 40 | atm = atm.drop("RootDepth", 1) 41 | ml.add_atmospheric_bc(atm) 42 | 43 | # Root uptake 44 | ml.add_root_uptake(model=0, poptm=[-25]) 45 | 46 | ml.write_input() 47 | ml.simulate() 48 | 49 | df = ml.read_tlevel() 50 | df['vBot'].plot() 51 | -------------------------------------------------------------------------------- /examples/example.py: -------------------------------------------------------------------------------- 1 | """ 2 | Example script of how to setup a basic HYDRUS-1D model using Pydrus. 3 | 4 | Author: R.A. Collenteur, University of Graz, 2019 5 | 6 | """ 7 | 8 | import os 9 | 10 | import phydrus as ps 11 | 12 | ws = "example" 13 | exe = os.path.join(os.getcwd(), "hydrus") 14 | 15 | # Create the basic model 16 | desc = "Infiltration and drainage in a large caisson" 17 | 18 | ml = ps.Model(exe_name=exe, ws_name=ws, name="model", description=desc, 19 | mass_units="mmol", time_unit="min", length_unit="cm") 20 | 21 | times = ml.add_time_info(tinit=90, tmax=273, print_times=True, dt=0.1, 22 | dtmax=0.5, printinit=120) 23 | 24 | ml.add_waterflow(top_bc=1, bot_bc=0, rtop=0) 25 | 26 | m = ml.get_empty_material_df(n=2) 27 | m.loc[1:2] = [[0.08, 0.3421, 0.03, 5, 1, -0.5], 28 | [0.08, 0.3421, 0.03, 5, 0.1, -0.5]] 29 | 30 | ml.add_material(m) 31 | 32 | profile = ps.create_profile(h=0.342) 33 | profile.loc[5:11, "Mat"] = 2 34 | ml.add_profile(profile) 35 | 36 | # atm = pd.read_csv("seep/orig/ATMOSPH.IN", skiprows=5, skipfooter=1, 37 | # skipinitialspace=True, delim_whitespace=True) 38 | # ml.add_atmosphere(atm) 39 | 40 | ml.write_input() 41 | rs = ml.simulate() 42 | ml.plots.profile() 43 | 44 | # df = ml.read_tlevel() 45 | # df['vBot[L/T]'].plot() 46 | -------------------------------------------------------------------------------- /tests/test_data/A_LEVEL.OUT: -------------------------------------------------------------------------------- 1 | 2 | 3 | Time sum(rTop) sum(rRoot) sum(vTop) sum(vRoot) sum(vBot) hTop hRoot hBot A-level 4 | [T] [L] [L] [L] [L] [L] [L] [L] [L] 5 | 6 | 91.00000 .000E+00 .160E+00 .584E-06 .160E+00 -.368E-01 -.583E+02 -.423E+02 .172E+03 1 7 | 92.00000 -.700E-01 .340E+00 -.700E-01 .340E+00 -.710E-01 -.601E+02 -.445E+02 .169E+03 2 8 | 93.00000 -.900E-01 .470E+00 -.900E-01 .470E+00 -.103E+00 -.626E+02 -.467E+02 .167E+03 3 9 | 94.00000 -.900E-01 .670E+00 -.903E-01 .670E+00 -.133E+00 -.661E+02 -.500E+02 .164E+03 4 10 | 95.00000 -.900E-01 .950E+00 -.907E-01 .950E+00 -.161E+00 -.705E+02 -.542E+02 .161E+03 5 11 | 96.00000 -.160E+00 .113E+01 -.161E+00 .113E+01 -.186E+00 -.712E+02 -.557E+02 .158E+03 6 12 | 97.00000 -.450E+00 .121E+01 -.451E+00 .121E+01 -.211E+00 -.657E+02 -.522E+02 .160E+03 7 13 | 98.00000 -.890E+00 .135E+01 -.891E+00 .135E+01 -.239E+00 -.610E+02 -.482E+02 .164E+03 8 14 | 99.00000 -.109E+01 .146E+01 -.109E+01 .146E+01 -.268E+00 -.625E+02 -.479E+02 .165E+03 9 15 | 100.00000 -.138E+01 .157E+01 -.138E+01 .157E+01 -.299E+00 -.596E+02 -.456E+02 .167E+03 10 16 | end 17 | -------------------------------------------------------------------------------- /tests/test_data/RUN_INF.OUT: -------------------------------------------------------------------------------- 1 | ******* Program HYDRUS 2 | ******* Growing season simulation 3 | 4 | Date: 1.10. Time: 14:57: 9 5 | Units: L = cm , T = days , M = - 6 | 7 | 8 | TLevel Time dt ItrW ItrC ItCum KodT KodB Converg Peclet Courant 9 | 10 | 1 .90010E+02 .10000E-01 2 1 2 -4 -7 T 1.415 .000 11 | 2 .90023E+02 .13026E-01 2 1 4 -4 -7 T 1.415 .001 12 | 3 .90040E+02 .16844E-01 2 1 6 -4 -7 T 1.414 .001 13 | 4 .90062E+02 .21821E-01 2 1 8 -4 -7 T 1.413 .001 14 | 5 .90090E+02 .28434E-01 2 1 10 -4 -7 T 1.412 .001 15 | 6 .90127E+02 .36395E-01 2 1 12 -4 -7 T 1.410 .001 16 | 7 .90175E+02 .48527E-01 2 1 14 -4 -7 T 1.407 .002 17 | 8 .90239E+02 .63458E-01 2 1 16 -4 -7 T 1.404 .002 18 | 9 .90323E+02 .84610E-01 2 1 18 -4 -7 T 1.400 .002 19 | 10 .90436E+02 .11281E+00 2 1 20 -4 -7 T 1.394 .003 20 | 11 .90577E+02 .14102E+00 2 1 22 -4 -7 T 1.387 .004 21 | end 22 | 23 | Real time [sec] 17.000000000000000 24 | -------------------------------------------------------------------------------- /examples/example2.py: -------------------------------------------------------------------------------- 1 | """ 2 | Example script of how to setup a basic HYDRUS-1D model using Pydrus. 3 | 4 | Author: R.A. Collenteur, University of Graz, 2019 5 | 6 | """ 7 | 8 | import os 9 | 10 | import pandas as pd 11 | 12 | import phydrus as ps 13 | 14 | ws = "example2" 15 | exe = os.path.join(os.getcwd(), "hydrus") 16 | 17 | # Create the basic model 18 | desc = "Example 2 - Grass Field Problem (Hupselse Beek 1982)" 19 | 20 | ml = ps.Model(exe_name=exe, ws_name=ws, name="model", description=desc, 21 | mass_units="-", time_unit="days", length_unit="cm") 22 | 23 | times = ml.add_time_info(tinit=90, tmax=273, print_times=True) 24 | 25 | # Water inflow parameters 26 | ml.add_waterflow(linitw=False, top_bc=3, bot_bc=4, ha=1e-6, hb=1e4) 27 | 28 | m = ml.get_empty_material_df(n=2) 29 | 30 | m.loc[[1, 2]] = [[0.0001, 0.399, 0.0174, 1.3757, 29.75, 0.5], 31 | [0.01, 0.339, 0.0139, 1.6024, 405.34, 0.5]] 32 | 33 | ml.add_material(m) 34 | 35 | profile = ps.create_profile(0, [-100, -230], h=-200, dx=10, mat=m.index) 36 | ml.add_profile(profile) 37 | ml.add_obs_nodes([10, 20]) 38 | 39 | atm = pd.read_csv("data/ex2.csv", index_col=0) 40 | ml.add_atmospheric_bc(atm) 41 | 42 | ml.add_root_uptake(model=0, poptm=[-25, -25]) 43 | ml.add_root_growth(2, irfak=1, trmin=0, trmed=0, trmax=2143, xrmin=10, 44 | xrmed=0, xrmax=50, trperiod=365) 45 | ml.write_input() 46 | rs = ml.simulate() 47 | 48 | df = ml.read_tlevel() 49 | df.plot(subplots=True) 50 | -------------------------------------------------------------------------------- /examples/example5.py: -------------------------------------------------------------------------------- 1 | """ 2 | Example script of how to setup a basic HYDRUS-1D model using Pydrus. 3 | 4 | Author: R.A. Collenteur, University of Graz, 2019 5 | 6 | """ 7 | 8 | import os 9 | 10 | import pandas as pd 11 | 12 | import phydrus as ps 13 | 14 | ws = "example5" 15 | exe = os.path.join(os.getcwd(), "hydrus") 16 | 17 | # Create the basic model 18 | desc = "Example 5 - Grass Field Problem (Hupselse Beek 1982)" 19 | 20 | ml = ps.Model(exe_name=exe, ws_name=ws, name="model", description=desc, 21 | mass_units="-", time_unit="days", length_unit="m", 22 | print_screen=True) 23 | 24 | times = ml.add_time_info(tinit=90, tmax=273, print_times=True) 25 | 26 | # Water inflow parameters 27 | ml.add_waterflow(linitw=False, top_bc=3, bot_bc=4, ha=1e-6, hb=1e4) 28 | ml.add_solute_transport(tpulse=1) 29 | 30 | m = ml.get_empty_material_df(n=2) 31 | m.loc[1:2] = [[0.01, 0.399, 0.0174, 1.3757, 209.75, 0.5, 1.9, 130, 1, 0], 32 | [0.01, 0.339, 0.0139, 1.6024, 45.34, 0.5, 1.9, 100, 1, 0]] 33 | ml.add_material(m) 34 | 35 | profile = ps.create_profile(0, [-50, -100], h=-200, dx=10, mat=m.index, 36 | conc=0, sconc=0) 37 | ml.add_profile(profile) 38 | ml.add_obs_nodes([10, 20]) 39 | 40 | atm = pd.read_csv("data/ex2.csv", index_col=0) 41 | atm["cTop"] = 0 42 | atm["cBot"] = 0 43 | atm.loc[0, "cTop"] = 1 44 | ml.add_atmospheric_bc(atm) 45 | 46 | sol1 = ml.get_empty_solute_df() 47 | sol1["beta"] = 1 48 | ml.add_solute(sol1, difw=0, difg=0) 49 | 50 | ml.write_input() 51 | rs = ml.simulate() 52 | 53 | df = ml.read_solutes() 54 | df.loc[:, ["cBot"]].plot(subplots=True) 55 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | with open("README.md", "r") as fh: 4 | long_description = fh.read() 5 | 6 | # Get the version. 7 | version = {} 8 | with open("phydrus/version.py") as fp: 9 | exec(fp.read(), version) 10 | 11 | setup( 12 | name='phydrus', 13 | version=version['__version__'], 14 | description='Python implementation of the HYDRUS-1D model', 15 | long_description=long_description, 16 | long_description_content_type="text/markdown", 17 | url='https://github.com/phydrus/phydrus', 18 | license='GNU General public version 3.0', 19 | author='Raoul Collenteur, Giuseppe Brunetti' 'Matevz Vremec', 20 | author_email='raoul.collenteur@uni-graz.at, giuseppe.brunetti@boku.ac.at, ' 21 | 'matevz.vremec@uni-graz.at', 22 | project_urls={ 23 | 'Source': 'https://github.com/phydrus/phydrus', 24 | 'Tracker': 'https://github.com/phydrus/phydrus/issues', 25 | 'Help': 'https://github.com/phydrus/phydrus/issues' 26 | }, 27 | classifiers=[ 28 | 'Development Status :: 3 - Alpha', 29 | 'Intended Audience :: Science/Research', 30 | 'Intended Audience :: Other Audience', 31 | 'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)', 32 | 'Programming Language :: Python :: 3.6', 33 | 'Programming Language :: Python :: 3.7', 34 | 'Topic :: Scientific/Engineering :: Hydrology', 35 | ], 36 | platforms='Windows, Mac OS-X', 37 | install_requires=['numpy>=1.15', 'matplotlib>=2.0', 'pandas>=1.0', 38 | 'scipy>=1.1'], 39 | packages=find_packages(exclude=[]), 40 | package_data={"source": ["hydrus", "hydrus.exe"], }, 41 | ) 42 | -------------------------------------------------------------------------------- /docs/getting_started.rst: -------------------------------------------------------------------------------- 1 | Getting started with Phydrus 2 | ============================ 3 | 4 | Installing Python 5 | ----------------- 6 | To install Phydrus, a working version of Python 3.6 or higher has to be 7 | installed on your computer. We recommend using the `Anaconda Distribution 8 | `_ of Python. This Python distribution 9 | includes most of the python package dependencies and the Jupyter Notebook 10 | software to run the notebooks. Moreover, it includes the Graphical User 11 | Interface (GUI) Spyder to start scripting in Python. However, you are free 12 | to install any Python distribution you want. 13 | 14 | Installing the Python package 15 | ----------------------------- 16 | The Phydrus package will be available on the Pypi package index as the 17 | software moves towards production ready software. To install in developer 18 | mode, use the following syntax: 19 | 20 | >>> pip install -e . 21 | 22 | Compiling the source code 23 | ------------------------- 24 | Before you can use Phydrus the adapted Fortran77 files need to be compiled to 25 | an executable. The makefile (MacOS/Linux) and the make.bat (Windows) in the 26 | `source` folder are available to create the Hydrus executable. Move into the 27 | source folder (which you can download from this GitHub page) and use the 28 | following syntax in your terminal or windows command line to compile the 29 | source code: 30 | 31 | >>> make 32 | 33 | This should create a Windows or Linux Executable that can be used to run the 34 | HYDRUS-1D simulation. In the Python code, you have to reference to the 35 | location of the executable so you can store it anywhere you want. For MacOS, 36 | you may need to install gfortran to compile the source code. 37 | 38 | Dependencies 39 | ------------ 40 | Phydrus depends on a number of Python packages, of which all of the necessary 41 | are automatically installed when using the pip install manager. To 42 | summarize, the following packages are necessary for a minimal function 43 | installation of Phydrus: 44 | 45 | .. include:: ../requirements.txt 46 | :literal: 47 | 48 | Updating Phydrus 49 | ---------------- 50 | If you have already installed Phydrus, it is possible to update Phydrus 51 | easily. To update, open a Windows command screen or a Mac terminal and type:: 52 | 53 | >>> pip install phydrus --upgrade 54 | -------------------------------------------------------------------------------- /examples/example4.py: -------------------------------------------------------------------------------- 1 | """ 2 | This example implements a basic example of water flow in a layered profile, 3 | following the example from the following link: 4 | 5 | https://www.pc-progress.com/Downloads/Tutorials/Tutorial_H1D_4.pdf 6 | 7 | A steady state simulation is performed and the pressure heads are used as the 8 | initial condition for a transient model. 9 | 10 | Author: R.A. Collenteur, University of Graz, 2019 11 | 12 | """ 13 | 14 | import os 15 | 16 | import pandas as pd 17 | 18 | import phydrus as ps 19 | 20 | ws = "example4" 21 | exe = os.path.join(os.getcwd(), "hydrus") 22 | 23 | # Create the basic model 24 | desc = "Steady state water flow in a layered soil profile" 25 | 26 | ml = ps.Model(exe_name=exe, ws_name=ws, name="model", description=desc, 27 | mass_units="-", time_unit="days", length_unit="cm") 28 | 29 | # Time info 30 | times = ml.add_time_info(tmax=100, print_times=True, dt=0.001, 31 | dtmin=0.000001) 32 | # Water flow info 33 | ml.add_waterflow(linitw=False, top_bc=1, bot_bc=4, ha=1e-6, hb=1e4, rtop=-0.12) 34 | 35 | # Add materials 36 | m = ml.get_empty_material_df(n=7) 37 | m.loc[1:7] = [[0.065, 0.42, 0.016, 1.94, 95.040, 0.5], 38 | [0.035, 0.42, 0.015, 3.21, 311.04, 0.5], 39 | [0.042, 0.40, 0.016, 1.52, 38.880, 0.5], 40 | [0.044, 0.40, 0.028, 2.01, 864.00, 0.5], 41 | [0.039, 0.40, 0.023, 2.99, 1209.6, 0.5], 42 | [0.030, 0.42, 0.021, 2.99, 1209.6, 0.5], 43 | [0.021, 0.39, 0.021, 2.99, 1209.6, 0.5]] 44 | ml.add_material(m) 45 | 46 | # Profile 47 | profile = ps.create_profile(bot=[-7, -19, -24, -28, -50, -75, -100], dx=1, 48 | h=-100, mat=m.index) 49 | ml.add_profile(profile) 50 | ml.add_obs_nodes([profile["x"]]) 51 | 52 | # run steady state simulation 53 | ml.write_input() 54 | ml.simulate() 55 | 56 | # Update the initial head for the transient simulation with the steady state 57 | df = ml.read_nod_inf(times=[100]) 58 | ml.profile["h"] = df["Head"].values 59 | 60 | # Atmospheric data 61 | atm = pd.read_csv("data/ex4.csv", decimal=",", sep=";") 62 | ml.add_atmospheric_bc(atm) 63 | 64 | times1 = ml.add_time_info(tmax=360, print_times=True, dt=0.001, 65 | dtmin=0.000001) 66 | 67 | # Root uptake 68 | ml.add_root_uptake(model=0, poptm=[-125] * m.index.size) 69 | 70 | ml.write_input() 71 | ml.simulate() 72 | 73 | df = ml.read_tlevel() 74 | df['vBot'].plot() 75 | -------------------------------------------------------------------------------- /phydrus/profile.py: -------------------------------------------------------------------------------- 1 | from os import path 2 | 3 | from numpy import linspace 4 | from pandas import read_csv, DataFrame 5 | 6 | 7 | def create_profile(top=0, bot=-1, dx=0.1, h=0, lay=1, mat=1, beta=0, ah=1.0, 8 | ak=1.0, ath=1.0, temp=20.0, conc=None, sconc=None): 9 | """Method to create a DataFrame describing the soil profile. 10 | 11 | Parameters 12 | ---------- 13 | top: float, optional 14 | Top of the soil column. 15 | bot: float or list of float, optional 16 | Bottom of the soil column. If a list is provided, multiple 17 | layers are created and other arguments need to be of the same 18 | length (e.g. mat). 19 | dx: float: optional 20 | Size of each grid cell. Default 0.1 meter. 21 | lay: int or list of int, optional 22 | subregion number (for mass balance calculations). 23 | mat: int or list of int, optional 24 | Material number (for heterogeneity). 25 | beta: float or list of float, optional 26 | 27 | ah: float or list of float, optional 28 | Scaling factor for the pressure head (Axz in profile.dat). 29 | ak: float or list of float, optional 30 | Scaling factor the hydraulic conductivity (Bxz in profile.dat). 31 | ath: float or list of float, optional 32 | Scaling factor the the water content (Dxz in profile.dat). 33 | temp: float, optional 34 | conc: float, optional 35 | sconc: float, optional 36 | 37 | """ 38 | if not isinstance(bot, list): 39 | bot = [bot] 40 | steps = int(top - bot[-1] / dx) + 1 41 | grid = linspace(top, bot[-1], steps) 42 | cols = ["x", "h", "Mat", "Lay", "Beta", "Axz", "Bxz", "Dxz", "Temp", 43 | "Conc", "SConc"] 44 | data = DataFrame(columns=cols) 45 | data["x"] = grid 46 | variables = [h, mat, lay, beta, ah, ak, ath, temp, conc, sconc] 47 | 48 | if len(bot) == 1: 49 | data[cols[1:]] = variables 50 | else: 51 | # If there are multiple layers 52 | for i, arg in enumerate(variables): 53 | if isinstance(arg, int) or isinstance(arg, float) or arg is None: 54 | variables[i] = [arg] * len(bot) 55 | 56 | for i, b in enumerate(bot): 57 | layer = ((data.loc[:, "x"] <= top) & (data.loc[:, "x"] > (b - dx))) 58 | data.loc[layer, cols[1:]] = [var[i] for var in variables] 59 | top = b 60 | data = data.fillna("") 61 | data.index = data.index + 1 62 | return data 63 | 64 | 65 | def profile_from_file(fname="PROFILE.DAT", ws=None): 66 | """Method to read a profile.dat file 67 | 68 | Parameters 69 | ---------- 70 | fname 71 | ws 72 | 73 | Returns 74 | ------- 75 | profile: phydrus.profile.SoilProfile 76 | 77 | """ 78 | fname = path.join(ws, fname) 79 | path.exists(fname) 80 | 81 | with open(fname) as file: 82 | # Find the starting line to read the profile 83 | for start, line in enumerate(file.readlines(1000)): 84 | if "Beta" in line: 85 | break 86 | file.seek(0) # Go back to start of file 87 | # Read the profile data into a Pandas DataFrame 88 | data = read_csv(file, skiprows=start, skipfooter=2, index_col=0, 89 | skipinitialspace=True, delim_whitespace=True) 90 | 91 | return data 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Phydrus: Python implementation of HYDRUS-1D 4 | 5 | 6 | 7 | 8 | 9 | [![Build Status](https://travis-ci.org/phydrus/phydrus.svg?branch=master)](https://travis-ci.org/raoulcollenteur/phydrus) 10 | [![Codacy Badge](https://api.codacy.com/project/badge/Grade/4235a7486bea41c8b09e2acfa5e93e5f)](https://www.codacy.com/gh/phydrus/phydrus?utm_source=github.com&utm_medium=referral&utm_content=phydrus/phydrus&utm_campaign=Badge_Grade) 11 | [![Codacy Badge](https://api.codacy.com/project/badge/Coverage/4235a7486bea41c8b09e2acfa5e93e5f)](https://www.codacy.com/gh/phydrus/phydrus?utm_source=github.com&utm_medium=referral&utm_content=phydrus/phydrus&utm_campaign=Badge_Coverage) 12 |
13 | This package provides a Python implementation of the HYDRUS-1D unsaturated zone model developed by Šimůnek, J., M. Th. van Genuchten, and M. Šejna. More information on the HYDRUS-1D model is available [here](https://www.pc-progress.com/en/Default.aspx?hydrus-1d). This software is licenced under the GNU GENERAL PUBLIC LICENSE found [here](http://www.gnu.org/licenses/gpl-3.0.txt). The Phydrus code is developed by R.A. Collenteur, G. Brunetti and M. Vremec. With Phydrus, a HYDRUS-1D model can be created, calibrated and visualized through Python scripts, making it easy to adjust the model and providing a 100% reproducible workflow of your modeling process. 14 | 15 | ## Examples and Documentation 16 | Examples of using Phydrus can be found in the example folder. This folder also contains a number of Jupyter Notebooks that thoroughly explain the use of the software. Documentation is hosted on ReadTheDocs: https://phydrus.readthedocs.io. 17 | 18 | ## Bug reports and Questions 19 | Phydrus is in active development, and bug reports are welcome as [GitHub Issues](https://github.com/phydrus/phydrus/issues). General questions or discussions are possible through GitHub Discussions](https://github.com/phydrus/phydrus/discussions) 20 | 21 | ## Installing Phydrus 22 | ### 1. Installing the Python package 23 | The Phydrus package is available from the Pypi package index and can be installed as follows: 24 | 25 | `>>> pip install phydrus` 26 | 27 | To install in developer mode, use the following syntax: 28 | 29 | `>>> pip install -e .` 30 | 31 | ### 2. Compiling the source code 32 | Before you can use Phydrus the adapted Fortran77 files need to be compiled to an executable. The makefile (MacOS/Linux) and the make.bat (Windows) in the `source` folder are available to create the hydrus executable. The compile the source code for MacOS/Linux, Gfortran needs to be installed. Instructions can be found here: https://gcc.gnu.org/wiki/GFortranBinaries. Move into the source folder (which you can download from this GitHub page) and use the following syntax in your terminal or windows command line to compile the source code: 33 | 34 | `>>> make` 35 | 36 | This should create a Windows or Linux Executable that can be used to run the HYDRUS-1D simulation. In the Python code, you have to reference to the location of the executable so you can store it anywhere you want. 37 | 38 | ## Developing Phydrus 39 | Phydrus is a community effort and help is always welcome. If you have found a bug, please open a GitHub issue to report it. Pull requests including bug fixes and new functionality are very welcome and will be accepted on the Dev-branch of this repository. 40 | 41 | ## Citing Phydrus 42 | If you use phydrus for one of your projects, we ask that you cite the code as follows: 43 | *Collenteur, R.A., Brunetti, G., and M. Vremec (2019) Phydrus: Python implementation of the HYDRUS-1D unsaturated zone model. Version X.X.X* 44 | -------------------------------------------------------------------------------- /tests/test_data/PROFILE.OUT: -------------------------------------------------------------------------------- 1 | ******* Program HYDRUS 2 | ******* Growing season simulation 3 | 4 | Date: 1.10. Time: 14:57: 9 5 | Units: L = cm , T = days , M = - 6 | 7 | 8 | n depth THr THs hs Ks Ks/KsTop Beta Ah AK ATh 9 | 10 | 1 .00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 11 | 2 1.00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 12 | 3 3.00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 13 | 4 6.00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 14 | 5 10.00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 15 | 6 15.00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 16 | 7 20.00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 17 | 8 25.00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 18 | 9 30.00 .001 .399 -1.9 .298E+02 1.000 .031 1.000 1.000 1.000 19 | 10 34.00 .001 .399 -1.9 .298E+02 1.000 .000 1.000 1.000 1.000 20 | 11 37.00 .001 .399 -1.9 .298E+02 1.000 .000 1.000 1.000 1.000 21 | 12 39.00 .001 .399 -1.9 .298E+02 1.000 .000 1.000 1.000 1.000 22 | 13 40.00 .001 .399 -1.9 .298E+02 1.000 .000 1.000 1.000 1.000 23 | 14 41.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 24 | 15 43.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 25 | 16 47.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 26 | 17 50.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 27 | 18 55.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 28 | 19 61.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 29 | 20 68.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 30 | 21 76.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 31 | 22 85.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 32 | 23 95.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 33 | 24 105.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 34 | 25 115.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 35 | 26 125.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 36 | 27 135.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 37 | 28 145.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 38 | 29 155.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 39 | 30 165.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 40 | 31 175.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 41 | 32 185.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 42 | 33 195.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 43 | 34 205.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 44 | 35 215.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 45 | 36 225.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 46 | 37 230.00 .001 .339 .0 .453E+02 1.524 .000 1.000 1.000 1.000 47 | end 48 | -------------------------------------------------------------------------------- /examples/phydrus_paper/Ex3/output/SELECTOR.IN: -------------------------------------------------------------------------------- 1 | Pcp_File_Version=4 2 | *** BLOCK A: BASIC INFORMATION *************************************************** 3 | Created with Pydrus version 0.1.0 4 | None 5 | LUnit TUnit MUnit 6 | cm 7 | days 8 | mmol 9 | lWat lChem lTemp lSink lRoot lShort lWDep lScreen AtmInf lEquil lInverse 10 | t f f t f t f f t t f 11 | lSnow lHP1 lMeteo lVapor lActRSU lFlux lIrrig 12 | f f f f f f f 13 | NMat NLay CosAlfa 14 | 1 1 1 15 | *** BLOCK B: WATER FLOW INFORMATION ********************************************** 16 | MaxIt TolTh TolH (maximum number of iterations and tolerances) 17 | 10 0.001 1 18 | TopInf WLayer KodTop lInitW 19 | t f -1 f 20 | BotInf qGWLF FreeD SeepF KodBot qDrain hSeep 21 | f f t f -1 f 0 22 | ha hb 23 | 1e-06 10000.0 24 | iModel iHyst 25 | 0 0 26 | thr ths Alfa n Ks l 27 | 0.0 0.444996 0.022674 1.518961 211.815355 0.5 28 | *** BLOCK C: TIME INFORMATION **************************************************** 29 | dt dtMin dtMax dMul dMul2 ItMin ItMax MPL 30 | 0.01 0.001 5 1.3 0.7 3 7 729 31 | tInit tMax 32 | 0 730 33 | lPrint nPrintSteps tPrintInterval lEnter 34 | f 1 1 f 35 | TPrint(1),TPrint(2),...,TPrint(MPL) 36 | 1 2 3 4 5 6 37 | 7 8 9 10 11 12 38 | 13 14 15 16 17 18 39 | 19 20 21 22 23 24 40 | 25 26 27 28 29 30 41 | 31 32 33 34 35 36 42 | 37 38 39 40 41 42 43 | 43 44 45 46 47 48 44 | 49 50 51 52 53 54 45 | 55 56 57 58 59 60 46 | 61 62 63 64 65 66 47 | 67 68 69 70 71 72 48 | 73 74 75 76 77 78 49 | 79 80 81 82 83 84 50 | 85 86 87 88 89 90 51 | 91 92 93 94 95 96 52 | 97 98 99 100 101 102 53 | 103 104 105 106 107 108 54 | 109 110 111 112 113 114 55 | 115 116 117 118 119 120 56 | 121 122 123 124 125 126 57 | 127 128 129 130 131 132 58 | 133 134 135 136 137 138 59 | 139 140 141 142 143 144 60 | 145 146 147 148 149 150 61 | 151 152 153 154 155 156 62 | 157 158 159 160 161 162 63 | 163 164 165 166 167 168 64 | 169 170 171 172 173 174 65 | 175 176 177 178 179 180 66 | 181 182 183 184 185 186 67 | 187 188 189 190 191 192 68 | 193 194 195 196 197 198 69 | 199 200 201 202 203 204 70 | 205 206 207 208 209 210 71 | 211 212 213 214 215 216 72 | 217 218 219 220 221 222 73 | 223 224 225 226 227 228 74 | 229 230 231 232 233 234 75 | 235 236 237 238 239 240 76 | 241 242 243 244 245 246 77 | 247 248 249 250 251 252 78 | 253 254 255 256 257 258 79 | 259 260 261 262 263 264 80 | 265 266 267 268 269 270 81 | 271 272 273 274 275 276 82 | 277 278 279 280 281 282 83 | 283 284 285 286 287 288 84 | 289 290 291 292 293 294 85 | 295 296 297 298 299 300 86 | 301 302 303 304 305 306 87 | 307 308 309 310 311 312 88 | 313 314 315 316 317 318 89 | 319 320 321 322 323 324 90 | 325 326 327 328 329 330 91 | 331 332 333 334 335 336 92 | 337 338 339 340 341 342 93 | 343 344 345 346 347 348 94 | 349 350 351 352 353 354 95 | 355 356 357 358 359 360 96 | 361 362 363 364 365 366 97 | 367 368 369 370 371 372 98 | 373 374 375 376 377 378 99 | 379 380 381 382 383 384 100 | 385 386 387 388 389 390 101 | 391 392 393 394 395 396 102 | 397 398 399 400 401 402 103 | 403 404 405 406 407 408 104 | 409 410 411 412 413 414 105 | 415 416 417 418 419 420 106 | 421 422 423 424 425 426 107 | 427 428 429 430 431 432 108 | 433 434 435 436 437 438 109 | 439 440 441 442 443 444 110 | 445 446 447 448 449 450 111 | 451 452 453 454 455 456 112 | 457 458 459 460 461 462 113 | 463 464 465 466 467 468 114 | 469 470 471 472 473 474 115 | 475 476 477 478 479 480 116 | 481 482 483 484 485 486 117 | 487 488 489 490 491 492 118 | 493 494 495 496 497 498 119 | 499 500 501 502 503 504 120 | 505 506 507 508 509 510 121 | 511 512 513 514 515 516 122 | 517 518 519 520 521 522 123 | 523 524 525 526 527 528 124 | 529 530 531 532 533 534 125 | 535 536 537 538 539 540 126 | 541 542 543 544 545 546 127 | 547 548 549 550 551 552 128 | 553 554 555 556 557 558 129 | 559 560 561 562 563 564 130 | 565 566 567 568 569 570 131 | 571 572 573 574 575 576 132 | 577 578 579 580 581 582 133 | 583 584 585 586 587 588 134 | 589 590 591 592 593 594 135 | 595 596 597 598 599 600 136 | 601 602 603 604 605 606 137 | 607 608 609 610 611 612 138 | 613 614 615 616 617 618 139 | 619 620 621 622 623 624 140 | 625 626 627 628 629 630 141 | 631 632 633 634 635 636 142 | 637 638 639 640 641 642 143 | 643 644 645 646 647 648 144 | 649 650 651 652 653 654 145 | 655 656 657 658 659 660 146 | 661 662 663 664 665 666 147 | 667 668 669 670 671 672 148 | 673 674 675 676 677 678 149 | 679 680 681 682 683 684 150 | 685 686 687 688 689 690 151 | 691 692 693 694 695 696 152 | 697 698 699 700 701 702 153 | 703 704 705 706 707 708 154 | 709 710 711 712 713 714 155 | 715 716 717 718 719 720 156 | 721 722 723 724 725 726 157 | 727 728 729 158 | *** BLOCK G: ROOT WATER UPTAKE INFORMATION *************************************** 159 | iMoSink cRootMax OmegaC 160 | 0 100 0 161 | P0 P2H P2L P3 r2H r2L 162 | -10 -1500 -1500 -8000 0.5 0.1 163 | POptm(1),POptm(2),...,POptm(NMat) 164 | -25 165 | *** BLOCK END OF INPUT FILE SELECTOR.IN ****************************************** 166 | -------------------------------------------------------------------------------- /examples/phydrus_paper/Ex3/output/PROFILE.DAT: -------------------------------------------------------------------------------- 1 | Pcp_File_Version=4 2 | 0 3 | 101 0 0 0 x h Mat Lay Beta Axz Bxz Dxz Temp Conc SConc 4 | 1 0.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 5 | 2 -1.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 6 | 3 -2.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 7 | 4 -3.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 8 | 5 -4.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 9 | 6 -5.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 10 | 7 -6.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 11 | 8 -7.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 12 | 9 -8.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 13 | 10 -9.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 14 | 11 -10.0 -500 1 1 1.00 1.0 1.0 1.0 20.0 15 | 12 -11.0 -500 1 1 0.95 1.0 1.0 1.0 20.0 16 | 13 -12.0 -500 1 1 0.90 1.0 1.0 1.0 20.0 17 | 14 -13.0 -500 1 1 0.85 1.0 1.0 1.0 20.0 18 | 15 -14.0 -500 1 1 0.80 1.0 1.0 1.0 20.0 19 | 16 -15.0 -500 1 1 0.75 1.0 1.0 1.0 20.0 20 | 17 -16.0 -500 1 1 0.70 1.0 1.0 1.0 20.0 21 | 18 -17.0 -500 1 1 0.65 1.0 1.0 1.0 20.0 22 | 19 -18.0 -500 1 1 0.60 1.0 1.0 1.0 20.0 23 | 20 -19.0 -500 1 1 0.55 1.0 1.0 1.0 20.0 24 | 21 -20.0 -500 1 1 0.50 1.0 1.0 1.0 20.0 25 | 22 -21.0 -500 1 1 0.45 1.0 1.0 1.0 20.0 26 | 23 -22.0 -500 1 1 0.40 1.0 1.0 1.0 20.0 27 | 24 -23.0 -500 1 1 0.35 1.0 1.0 1.0 20.0 28 | 25 -24.0 -500 1 1 0.30 1.0 1.0 1.0 20.0 29 | 26 -25.0 -500 1 1 0.25 1.0 1.0 1.0 20.0 30 | 27 -26.0 -500 1 1 0.20 1.0 1.0 1.0 20.0 31 | 28 -27.0 -500 1 1 0.15 1.0 1.0 1.0 20.0 32 | 29 -28.0 -500 1 1 0.10 1.0 1.0 1.0 20.0 33 | 30 -29.0 -500 1 1 0.05 1.0 1.0 1.0 20.0 34 | 31 -30.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 35 | 32 -31.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 36 | 33 -32.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 37 | 34 -33.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 38 | 35 -34.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 39 | 36 -35.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 40 | 37 -36.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 41 | 38 -37.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 42 | 39 -38.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 43 | 40 -39.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 44 | 41 -40.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 45 | 42 -41.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 46 | 43 -42.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 47 | 44 -43.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 48 | 45 -44.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 49 | 46 -45.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 50 | 47 -46.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 51 | 48 -47.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 52 | 49 -48.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 53 | 50 -49.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 54 | 51 -50.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 55 | 52 -51.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 56 | 53 -52.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 57 | 54 -53.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 58 | 55 -54.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 59 | 56 -55.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 60 | 57 -56.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 61 | 58 -57.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 62 | 59 -58.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 63 | 60 -59.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 64 | 61 -60.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 65 | 62 -61.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 66 | 63 -62.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 67 | 64 -63.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 68 | 65 -64.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 69 | 66 -65.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 70 | 67 -66.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 71 | 68 -67.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 72 | 69 -68.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 73 | 70 -69.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 74 | 71 -70.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 75 | 72 -71.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 76 | 73 -72.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 77 | 74 -73.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 78 | 75 -74.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 79 | 76 -75.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 80 | 77 -76.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 81 | 78 -77.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 82 | 79 -78.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 83 | 80 -79.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 84 | 81 -80.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 85 | 82 -81.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 86 | 83 -82.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 87 | 84 -83.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 88 | 85 -84.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 89 | 86 -85.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 90 | 87 -86.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 91 | 88 -87.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 92 | 89 -88.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 93 | 90 -89.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 94 | 91 -90.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 95 | 92 -91.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 96 | 93 -92.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 97 | 94 -93.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 98 | 95 -94.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 99 | 96 -95.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 100 | 97 -96.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 101 | 98 -97.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 102 | 99 -98.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 103 | 100 -99.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 104 | 101 -100.0 -500 1 1 0.00 1.0 1.0 1.0 20.0 105 | 1 106 | 31 -------------------------------------------------------------------------------- /tests/test_data/BALANCE.OUT: -------------------------------------------------------------------------------- 1 | ******* Program HYDRUS 2 | ******* Growing season simulation 3 | 4 | Date: 1.10. Time: 14:57: 9 5 | Units: L = cm , T = days , M = - 6 | 7 | ----------------------------------------------------- 8 | Time [T] 90.0000 9 | ----------------------------------------------------- 10 | Sub-region num. 1 2 11 | ----------------------------------------------------- 12 | Area [L] .230E+03 .400E+02 .190E+03 13 | W-volume [L] .787E+02 .143E+02 .644E+02 14 | In-flow [L/T] .000E+00 .000E+00 .000E+00 15 | h Mean [L] .600E+02 -.350E+02 .800E+02 16 | HeatVol [M/T2] .402E+13 .727E+12 .329E+13 17 | tMean [K] 15.000 15.000 15.000 18 | ConcVol [M/L2] 1 .787E+00 .143E+00 .644E+00 19 | cMean [M/L3] 1 .100E-01 .100E-01 .100E-01 20 | Top Flux [L/T] .000E+00 21 | Bot Flux [L/T] .000E+00 22 | ----------------------------------------------------- 23 | 24 | ----------------------------------------------------- 25 | Time [T] 120.0000 26 | ----------------------------------------------------- 27 | Sub-region num. 1 2 28 | ----------------------------------------------------- 29 | Area [L] .230E+03 .400E+02 .190E+03 30 | W-volume [L] .757E+02 .126E+02 .630E+02 31 | In-flow [L/T] .117E+00 .486E-01 .684E-01 32 | h Mean [L] .199E+02 -.729E+02 .394E+02 33 | HeatVol [M/T2] .388E+13 .652E+12 .323E+13 34 | tMean [K] 14.883 14.513 14.960 35 | ConcVol [M/L2] 1 .780E+00 .149E+00 .630E+00 36 | cMean [M/L3] 1 .103E-01 .118E-01 .100E-01 37 | Top Flux [L/T] -.238E+00 38 | Bot Flux [L/T] -.130E-01 39 | WatBalT [L] .530E-01 40 | WatBalR [%] .614 41 | CncBalT [M] 1 -.217E-06 42 | CncBalR [%] 1 .000 43 | ----------------------------------------------------- 44 | 45 | ----------------------------------------------------- 46 | Time [T] 151.0000 47 | ----------------------------------------------------- 48 | Sub-region num. 1 2 49 | ----------------------------------------------------- 50 | Area [L] .230E+03 .400E+02 .190E+03 51 | W-volume [L] .728E+02 .115E+02 .614E+02 52 | In-flow [L/T] -.437E+00 -.158E+00 -.279E+00 53 | h Mean [L] -.514E+01 -.110E+03 .168E+02 54 | HeatVol [M/T2] .376E+13 .602E+12 .316E+13 55 | tMean [K] 14.867 14.549 14.933 56 | ConcVol [M/L2] 1 .775E+00 .160E+00 .615E+00 57 | cMean [M/L3] 1 .107E-01 .138E-01 .100E-01 58 | Top Flux [L/T] .468E-02 59 | Bot Flux [L/T] -.720E-02 60 | WatBalT [L] .351E+00 61 | WatBalR [%] 1.600 62 | CncBalT [M] 1 -.810E-07 63 | CncBalR [%] 1 .000 64 | ----------------------------------------------------- 65 | 66 | ----------------------------------------------------- 67 | Time [T] 181.0000 68 | ----------------------------------------------------- 69 | Sub-region num. 1 2 70 | ----------------------------------------------------- 71 | Area [L] .230E+03 .400E+02 .190E+03 72 | W-volume [L] .730E+02 .118E+02 .613E+02 73 | In-flow [L/T] -.287E+00 -.274E+00 -.128E-01 74 | h Mean [L] -.445E+01 -.994E+02 .156E+02 75 | HeatVol [M/T2] .377E+13 .617E+12 .316E+13 76 | tMean [K] 15.153 15.952 14.985 77 | ConcVol [M/L2] 1 .773E+00 .143E+00 .631E+00 78 | cMean [M/L3] 1 .106E-01 .119E-01 .104E-01 79 | Top Flux [L/T] -.103E-01 80 | Bot Flux [L/T] -.692E-02 81 | WatBalT [L] .331E+00 82 | WatBalR [%] .865 83 | CncBalT [M] 1 -.112E-06 84 | CncBalR [%] 1 .000 85 | ----------------------------------------------------- 86 | 87 | ----------------------------------------------------- 88 | Time [T] 212.0000 89 | ----------------------------------------------------- 90 | Sub-region num. 1 2 91 | ----------------------------------------------------- 92 | Area [L] .230E+03 .400E+02 .190E+03 93 | W-volume [L] .631E+02 .895E+01 .542E+02 94 | In-flow [L/T] -.648E+00 -.332E+00 -.316E+00 95 | h Mean [L] -.834E+02 -.256E+03 -.471E+02 96 | HeatVol [M/T2] .334E+13 .494E+12 .285E+13 97 | tMean [K] 15.128 15.460 15.058 98 | ConcVol [M/L2] 1 .772E+00 .228E+00 .544E+00 99 | cMean [M/L3] 1 .128E-01 .260E-01 .101E-01 100 | Top Flux [L/T] .464E-02 101 | Bot Flux [L/T] -.138E-02 102 | WatBalT [L] .420E+00 103 | WatBalR [%] .837 104 | CncBalT [M] 1 -.102E-06 105 | CncBalR [%] 1 .000 106 | ----------------------------------------------------- 107 | 108 | ----------------------------------------------------- 109 | Time [T] 243.0000 110 | ----------------------------------------------------- 111 | Sub-region num. 1 2 112 | ----------------------------------------------------- 113 | Area [L] .230E+03 .400E+02 .190E+03 114 | W-volume [L] .613E+02 .970E+01 .516E+02 115 | In-flow [L/T] -.808E-01 -.121E-01 -.687E-01 116 | h Mean [L] -.882E+02 -.195E+03 -.658E+02 117 | HeatVol [M/T2] .326E+13 .526E+12 .274E+13 118 | tMean [K] 15.058 15.053 15.059 119 | ConcVol [M/L2] 1 .772E+00 .252E+00 .520E+00 120 | cMean [M/L3] 1 .129E-01 .259E-01 .101E-01 121 | Top Flux [L/T] -.478E-01 122 | Bot Flux [L/T] -.796E-03 123 | WatBalT [L] .571E+00 124 | WatBalR [%] .902 125 | CncBalT [M] 1 -.278E-06 126 | CncBalR [%] 1 .000 127 | ----------------------------------------------------- 128 | 129 | ----------------------------------------------------- 130 | Time [T] 273.0000 131 | ----------------------------------------------------- 132 | Sub-region num. 1 2 133 | ----------------------------------------------------- 134 | Area [L] .230E+03 .400E+02 .190E+03 135 | W-volume [L] .589E+02 .103E+02 .486E+02 136 | In-flow [L/T] .104E+01 .979E+00 .606E-01 137 | h Mean [L] -.989E+02 -.162E+03 -.855E+02 138 | HeatVol [M/T2] .316E+13 .549E+12 .261E+13 139 | tMean [K] 14.916 14.387 15.028 140 | ConcVol [M/L2] 1 .772E+00 .284E+00 .488E+00 141 | cMean [M/L3] 1 .132E-01 .279E-01 .101E-01 142 | Top Flux [L/T] -.103E+01 143 | Bot Flux [L/T] -.489E-03 144 | WatBalT [L] .630E+00 145 | WatBalR [%] .883 146 | CncBalT [M] 1 -.114E-04 147 | CncBalR [%] 1 .004 148 | ----------------------------------------------------- 149 | -------------------------------------------------------------------------------- /docs/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Configuration file for the Sphinx documentation builder. 4 | # 5 | # This file does only contain a selection of the most common options. For a 6 | # full list see the documentation: 7 | # http://www.sphinx-doc.org/en/master/config 8 | 9 | # -- Path setup -------------------------------------------------------------- 10 | 11 | # If extensions (or modules to document with autodoc) are in another directory, 12 | # add these directories to sys.path here. If the directory is relative to the 13 | # documentation root, use os.path.abspath to make it absolute, like shown here. 14 | 15 | import os 16 | import sys 17 | 18 | sys.path.insert(0, os.path.abspath('.')) 19 | 20 | # -- Project information ----------------------------------------------------- 21 | 22 | project = 'Phydrus' 23 | copyright = '2019, R.A. Collenteur, G. Brunetti, M. Vremec' 24 | author = 'R.A. Collenteur, G. Brunetti, M. Vremec' 25 | 26 | from phydrus.version import __version__ 27 | 28 | # The short X.Y version 29 | version = __version__ 30 | # The full version, including alpha/beta/rc tags 31 | release = __version__ 32 | 33 | # -- General configuration ------------------------------------------------ 34 | 35 | extensions = [ 36 | 'sphinx.ext.autodoc', 37 | 'sphinx.ext.autosummary', 38 | 'sphinx.ext.napoleon', 39 | 'sphinx.ext.doctest', 40 | 'sphinx.ext.intersphinx', 41 | 'sphinx.ext.todo', 42 | 'sphinx.ext.mathjax', 43 | 'sphinx.ext.ifconfig', 44 | 'sphinx.ext.viewcode', 45 | 'IPython.sphinxext.ipython_console_highlighting', # lowercase didn't work 46 | 'sphinx.ext.autosectionlabel', 47 | 'nbsphinx', 48 | 'nbsphinx_link' 49 | ] 50 | 51 | napoleon_numpy_docstring = True 52 | 53 | # Add any paths that contain templates here, relative to this directory. 54 | templates_path = ['_templates'] 55 | 56 | # The suffix(es) of source filenames. 57 | # You can specify multiple suffix as a list of string: 58 | # 59 | # source_suffix = ['.rst', '.md'] 60 | source_suffix = '.rst' 61 | 62 | # The master toctree document. 63 | master_doc = 'index' 64 | 65 | # The language for content autogenerated by Sphinx. Refer to documentation 66 | # for a list of supported languages. 67 | # 68 | # This is also used if you do content translation via gettext catalogs. 69 | # Usually you set "language" from the command line for these cases. 70 | language = None 71 | 72 | # List of patterns, relative to source directory, that match files and 73 | # directories to ignore when looking for source files. 74 | # This pattern also affects html_static_path and html_extra_path. 75 | exclude_patterns = ['_build', '**.ipynb_checkpoints'] 76 | 77 | # The name of the Pygments (syntax highlighting) style to use. 78 | pygments_style = 'sphinx' 79 | 80 | # -- Options for HTML output ------------------------------------------------- 81 | 82 | # The theme to use for HTML and HTML Help pages. See the documentation for 83 | # a list of builtin themes. 84 | # 85 | html_theme = "pydata_sphinx_theme" 86 | 87 | # Theme options are theme-specific and customize the look and feel of a theme 88 | # further. For a list of options available for each theme, see the 89 | # documentation. 90 | # 91 | html_theme_options = { 92 | "github_url": "https://github.com/phydrus/phydrus", 93 | "use_edit_page_button": False 94 | } 95 | 96 | html_static_path = ['_static'] 97 | html_logo = "_static/logo.png" 98 | 99 | autosummary_generate = True 100 | numpydoc_show_class_members = False 101 | 102 | html_context = { 103 | "github_user": "phydrus", 104 | "github_repo": "phydrus", 105 | "github_version": "master", 106 | "doc_path": "docs", 107 | } 108 | 109 | html_css_files = [ 110 | 'css/custom.css', 111 | ] 112 | 113 | # Custom sidebar templates, must be a dictionary that maps document names 114 | # to template names. 115 | # 116 | # The default sidebars (for documents that don't match any pattern) are 117 | # defined by theme itself. Builtin themes are using these templates by 118 | # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', 119 | # 'searchbox.html']``. 120 | # 121 | # html_sidebars = {} 122 | 123 | 124 | # -- Options for HTMLHelp output --------------------------------------------- 125 | 126 | # Output file base name for HTML help builder. 127 | htmlhelp_basename = 'phydrusdoc' 128 | 129 | # -- Options for LaTeX output ------------------------------------------------ 130 | 131 | latex_elements = { 132 | # The paper size ('letterpaper' or 'a4paper'). 133 | # 134 | # 'papersize': 'letterpaper', 135 | 136 | # The font size ('10pt', '11pt' or '12pt'). 137 | # 138 | # 'pointsize': '10pt', 139 | 140 | # Additional stuff for the LaTeX preamble. 141 | # 142 | # 'preamble': '', 143 | 144 | # Latex figure (float) alignment 145 | # 146 | # 'figure_align': 'htbp', 147 | } 148 | 149 | # Grouping the document tree into LaTeX files. List of tuples 150 | # (source start file, target name, title, 151 | # author, documentclass [howto, manual, or own class]). 152 | latex_documents = [ 153 | (master_doc, 'phydrus.tex', 'Phydrus Documentation', 154 | 'R.A. Collenteur, G. Brunetti, M. Vremec', 'manual'), 155 | ] 156 | 157 | # -- Options for manual page output ------------------------------------------ 158 | 159 | # One entry per manual page. List of tuples 160 | # (source start file, name, description, authors, manual section). 161 | man_pages = [ 162 | (master_doc, 'phydrus', 'Phydrus Documentation', 163 | [author], 1) 164 | ] 165 | 166 | # -- Options for Texinfo output ---------------------------------------------- 167 | 168 | # Grouping the document tree into Texinfo files. List of tuples 169 | # (source start file, target name, title, author, 170 | # dir menu entry, description, category) 171 | texinfo_documents = [ 172 | (master_doc, 'Phydrus', 'Phydrus Documentation', 173 | author, 'Phydrus', 'One line description of project.', 174 | 'Miscellaneous'), 175 | ] 176 | 177 | # -- Options for Epub output ------------------------------------------------- 178 | 179 | # Bibliographic Dublin Core info. 180 | epub_title = project 181 | 182 | # The unique identifier of the text. This can be a ISBN number 183 | # or the project homepage. 184 | # 185 | # epub_identifier = '' 186 | 187 | # A unique identification for the text. 188 | # 189 | # epub_uid = '' 190 | 191 | # A list of files that should not be packed into the epub file. 192 | epub_exclude_files = ['search.html'] 193 | 194 | # -- Extension configuration ------------------------------------------------- 195 | 196 | # -- Options for intersphinx extension --------------------------------------- 197 | 198 | # Example configuration for intersphinx: refer to the Python standard library. 199 | intersphinx_mapping = { 200 | "matplotlib": ("https://matplotlib.org/", None), 201 | "numpy": ("https://docs.scipy.org/doc/numpy/", None), 202 | "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), 203 | "python": ("https://docs.python.org/3/", None), 204 | "scipy": ("https://docs.scipy.org/doc/scipy/reference/", None), 205 | } 206 | 207 | # -- Options for todo extension ---------------------------------------------- 208 | 209 | # If true, `todo` and `todoList` produce output, else they produce nothing. 210 | todo_include_todos = True 211 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /examples/data/ex2.csv: -------------------------------------------------------------------------------- 1 | ,tAtm,Prec,rSoil,rRoot,hCritA,rB,hB,ht,tTop,tBot,Ampl,cTop,cBot 2 | 0,91,0.0,0,0.16,1000000.0,0,0,0,3,0,3,0,0 3 | 1,92,0.07,0,0.18,1000000.0,0,0,0,5,0,3,1,0 4 | 2,93,0.02,0,0.13,1000000.0,0,0,0,7,0,4,1,0 5 | 3,94,0.0,0,0.2,1000000.0,0,0,0,6,0,4,0,0 6 | 4,95,0.0,0,0.28,1000000.0,0,0,0,5,0,4,0,0 7 | 5,96,0.07,0,0.18,1000000.0,0,0,0,4,0,4,1,0 8 | 6,97,0.29,0,0.08,1000000.0,0,0,0,7,0,4,1,0 9 | 7,98,0.44,0,0.14,1000000.0,0,0,0,8,0,5,1,0 10 | 8,99,0.2,0,0.11,1000000.0,0,0,0,9,0,5,1,0 11 | 9,100,0.29,0,0.11,1000000.0,0,0,0,8,0,4,1,0 12 | 10,101,0.32,0,0.11,1000000.0,0,0,0,7,0,5,1,0 13 | 11,102,0.49,0,0.11,1000000.0,0,0,0,8,0,5,1,0 14 | 12,103,0.01,0,0.16,1000000.0,0,0,0,8,0,5,1,0 15 | 13,104,0.0,0,0.17,1000000.0,0,0,0,9,0,5,0,0 16 | 14,105,0.0,0,0.22,1000000.0,0,0,0,8,0,5,0,0 17 | 15,106,0.0,0,0.21,1000000.0,0,0,0,10,0,5,0,0 18 | 16,107,0.0,0,0.23,1000000.0,0,0,0,13,0,4,0,0 19 | 17,108,0.0,0,0.23,1000000.0,0,0,0,12,0,6,0,0 20 | 18,109,0.0,0,0.24,1000000.0,0,0,0,10,0,6,0,0 21 | 19,110,0.0,0,0.18,1000000.0,0,0,0,9,0,5,0,0 22 | 20,111,0.0,0,0.15,1000000.0,0,0,0,12,0,4,0,0 23 | 21,112,0.0,0,0.19,1000000.0,0,0,0,13,0,5,0,0 24 | 22,113,0.01,0,0.15,1000000.0,0,0,0,15,0,5,1,0 25 | 23,114,0.01,0,0.22,1000000.0,0,0,0,13,0,4,1,0 26 | 24,115,0.0,0,0.23,1000000.0,0,0,0,12,0,4,0,0 27 | 25,116,0.02,0,0.2,1000000.0,0,0,0,13,0,4,1,0 28 | 26,117,0.0,0,0.17,1000000.0,0,0,0,15,0,5,0,0 29 | 27,118,0.02,0,0.14,1000000.0,0,0,0,10,0,5,1,0 30 | 28,119,0.26,0,0.13,1000000.0,0,0,0,8,0,5,1,0 31 | 29,120,0.24,0,0.11,1000000.0,0,0,0,8,0,4,1,0 32 | 30,121,0.61,0,0.08,1000000.0,0,0,0,10,0,5,1,0 33 | 31,122,0.0,0,0.21,1000000.0,0,0,0,13,0,4,0,0 34 | 32,123,0.19,0,0.14,1000000.0,0,0,0,15,0,4,1,0 35 | 33,124,0.17,0,0.21,1000000.0,0,0,0,17,0,4,1,0 36 | 34,125,0.78,0,0.07,1000000.0,0,0,0,17,0,5,1,0 37 | 35,126,1.18,0,0.1,1000000.0,0,0,0,18,0,5,10,0 38 | 36,127,0.68,0,0.1,1000000.0,0,0,0,18,0,5,1,0 39 | 37,128,0.0,0,0.16,1000000.0,0,0,0,19,0,4,0,0 40 | 38,129,0.0,0,0.26,1000000.0,0,0,0,19,0,6,0,0 41 | 39,130,0.0,0,0.26,1000000.0,0,0,0,15,0,5,0,0 42 | 40,131,0.0,0,0.25,1000000.0,0,0,0,15,0,5,0,0 43 | 41,132,0.0,0,0.31,1000000.0,0,0,0,13,0,4,0,0 44 | 42,133,0.0,0,0.35,1000000.0,0,0,0,12,0,4,0,0 45 | 43,134,0.0,0,0.41,1000000.0,0,0,0,13,0,4,0,0 46 | 44,135,0.0,0,0.39,1000000.0,0,0,0,14,0,5,0,0 47 | 45,136,0.0,0,0.4,1000000.0,0,0,0,16,0,6,0,0 48 | 46,137,0.19,0,0.17,1000000.0,0,0,0,15,0,4,1,0 49 | 47,138,0.26,0,0.25,1000000.0,0,0,0,14,0,5,1,0 50 | 48,139,0.01,0,0.29,1000000.0,0,0,0,13,0,5,1,0 51 | 49,140,0.2,0,0.15,1000000.0,0,0,0,12,0,4,1,0 52 | 50,141,0.0,0,0.16,1000000.0,0,0,0,13,0,5,0,0 53 | 51,142,0.25,0,0.12,1000000.0,0,0,0,12,0,5,1,0 54 | 52,143,0.2,0,0.22,1000000.0,0,0,0,14,0,4,1,0 55 | 53,144,0.07,0,0.19,1000000.0,0,0,0,15,0,4,1,0 56 | 54,145,0.0,0,0.27,1000000.0,0,0,0,16,0,5,0,0 57 | 55,146,0.0,0,0.44,1000000.0,0,0,0,17,0,5,0,0 58 | 56,147,0.29,0,0.39,1000000.0,0,0,0,16,0,6,1,0 59 | 57,148,0.01,0,0.23,1000000.0,0,0,0,15,0,6,1,0 60 | 58,149,0.0,0,0.31,1000000.0,0,0,0,14,0,5,0,0 61 | 59,150,0.0,0,0.42,1000000.0,0,0,0,13,0,4,0,0 62 | 60,151,0.0,0,0.43,1000000.0,0,0,0,12,0,5,0,0 63 | 61,152,0.0,0,0.4,1000000.0,0,0,0,15,0,5,0,0 64 | 62,153,0.0,0,0.46,1000000.0,0,0,0,16,0,5,0,0 65 | 63,154,0.0,0,0.42,1000000.0,0,0,0,17,0,5,0,0 66 | 64,155,0.0,0,0.28,1000000.0,0,0,0,18,0,5,0,0 67 | 65,156,0.0,0,0.44,1000000.0,0,0,0,12,0,5,0,0 68 | 66,157,1.07,0,0.29,1000000.0,0,0,0,15,0,5,10,0 69 | 67,158,0.01,0,0.36,1000000.0,0,0,0,16,0,5,1,0 70 | 68,159,0.0,0,0.36,1000000.0,0,0,0,19,0,5,0,0 71 | 69,160,0.0,0,0.3,1000000.0,0,0,0,20,0,5,0,0 72 | 70,161,0.0,0,0.34,1000000.0,0,0,0,14,0,5,0,0 73 | 71,162,0.22,0,0.18,1000000.0,0,0,0,13,0,6,1,0 74 | 72,163,0.5,0,0.26,1000000.0,0,0,0,12,0,6,1,0 75 | 73,164,0.46,0,0.12,1000000.0,0,0,0,15,0,5,1,0 76 | 74,165,0.01,0,0.25,1000000.0,0,0,0,16,0,5,1,0 77 | 75,166,0.0,0,0.2,1000000.0,0,0,0,17,0,4,0,0 78 | 76,167,0.8,0,0.08,1000000.0,0,0,0,18,0,4,1,0 79 | 77,168,0.0,0,0.23,1000000.0,0,0,0,16,0,7,0,0 80 | 78,169,0.19,0,0.15,1000000.0,0,0,0,18,0,8,1,0 81 | 79,170,0.78,0,0.1,1000000.0,0,0,0,20,0,8,1,0 82 | 80,171,0.01,0,0.26,1000000.0,0,0,0,15,0,5,1,0 83 | 81,172,0.0,0,0.2,1000000.0,0,0,0,16,0,5,0,0 84 | 82,173,1.56,0,0.2,1000000.0,0,0,0,17,0,5,10,0 85 | 83,174,0.18,0,0.31,1000000.0,0,0,0,18,0,6,1,0 86 | 84,175,0.23,0,0.16,1000000.0,0,0,0,19,0,6,1,0 87 | 85,176,0.02,0,0.3,1000000.0,0,0,0,20,0,7,1,0 88 | 86,177,0.65,0,0.37,1000000.0,0,0,0,21,0,7,1,0 89 | 87,178,0.12,0,0.21,1000000.0,0,0,0,22,0,8,1,0 90 | 88,179,0.82,0,0.2,1000000.0,0,0,0,20,0,8,1,0 91 | 89,180,0.62,0,0.17,1000000.0,0,0,0,21,0,9,1,0 92 | 90,181,0.01,0,0.29,1000000.0,0,0,0,20,0,5,1,0 93 | 91,182,0.04,0,0.24,1000000.0,0,0,0,20,0,6,1,0 94 | 92,183,0.01,0,0.37,1000000.0,0,0,0,20,0,6,1,0 95 | 93,184,0.44,0,0.11,1000000.0,0,0,0,21,0,7,1,0 96 | 94,185,0.02,0,0.26,1000000.0,0,0,0,23,0,7,1,0 97 | 95,186,0.05,0,0.32,1000000.0,0,0,0,25,0,7,1,0 98 | 96,187,0.01,0,0.21,1000000.0,0,0,0,26,0,5,1,0 99 | 97,188,0.0,0,0.34,1000000.0,0,0,0,22,0,6,0,0 100 | 98,189,0.0,0,0.41,1000000.0,0,0,0,21,0,6,0,0 101 | 99,190,0.0,0,0.51,1000000.0,0,0,0,20,0,4,0,0 102 | 100,191,0.0,0,0.3,1000000.0,0,0,0,22,0,5,0,0 103 | 101,192,0.0,0,0.37,1000000.0,0,0,0,23,0,4,0,0 104 | 102,193,0.01,0,0.46,1000000.0,0,0,0,24,0,6,1,0 105 | 103,194,0.0,0,0.47,1000000.0,0,0,0,25,0,2,0,0 106 | 104,195,0.0,0,0.48,1000000.0,0,0,0,21,0,3,0,0 107 | 105,196,0.24,0,0.36,1000000.0,0,0,0,20,0,1,1,0 108 | 106,197,0.01,0,0.32,1000000.0,0,0,0,19,0,5,1,0 109 | 107,198,0.0,0,0.38,1000000.0,0,0,0,18,0,6,0,0 110 | 108,199,0.0,0,0.43,1000000.0,0,0,0,17,0,4,0,0 111 | 109,200,0.0,0,0.3,1000000.0,0,0,0,20,0,5,0,0 112 | 110,201,0.0,0,0.35,1000000.0,0,0,0,23,0,5,0,0 113 | 111,202,0.0,0,0.34,1000000.0,0,0,0,22,0,5,0,0 114 | 112,203,0.0,0,0.26,1000000.0,0,0,0,25,0,4,0,0 115 | 113,204,0.0,0,0.29,1000000.0,0,0,0,26,0,4,0,0 116 | 114,205,0.0,0,0.24,1000000.0,0,0,0,21,0,6,0,0 117 | 115,206,0.0,0,0.25,1000000.0,0,0,0,20,0,6,0,0 118 | 116,207,0.01,0,0.21,1000000.0,0,0,0,19,0,3,1,0 119 | 117,208,0.07,0,0.24,1000000.0,0,0,0,18,0,3,1,0 120 | 118,209,0.05,0,0.33,1000000.0,0,0,0,17,0,5,1,0 121 | 119,210,0.0,0,0.48,1000000.0,0,0,0,16,0,5,0,0 122 | 120,211,0.0,0,0.56,1000000.0,0,0,0,17,0,5,0,0 123 | 121,212,0.0,0,0.65,1000000.0,0,0,0,19,0,5,0,0 124 | 122,213,0.0,0,0.22,1000000.0,0,0,0,20,0,4,0,0 125 | 123,214,0.0,0,0.58,1000000.0,0,0,0,18,0,4,0,0 126 | 124,215,0.0,0,0.59,1000000.0,0,0,0,20,0,6,0,0 127 | 125,216,0.01,0,0.38,1000000.0,0,0,0,22,0,6,1,0 128 | 126,217,0.52,0,0.05,1000000.0,0,0,0,23,0,2,1,0 129 | 127,218,0.0,0,0.32,1000000.0,0,0,0,21,0,2,0,0 130 | 128,219,0.06,0,0.16,1000000.0,0,0,0,25,0,5,1,0 131 | 129,220,0.0,0,0.21,1000000.0,0,0,0,21,0,4,0,0 132 | 130,221,0.2,0,0.09,1000000.0,0,0,0,20,0,5,1,0 133 | 131,222,0.1,0,0.32,1000000.0,0,0,0,16,0,4,1,0 134 | 132,223,0.0,0,0.32,1000000.0,0,0,0,18,0,4,0,0 135 | 133,224,0.0,0,0.36,1000000.0,0,0,0,15,0,6,0,0 136 | 134,225,0.02,0,0.26,1000000.0,0,0,0,19,0,5,1,0 137 | 135,226,0.31,0,0.27,1000000.0,0,0,0,20,0,4,1,0 138 | 136,227,0.95,0,0.11,1000000.0,0,0,0,22,0,6,1,0 139 | 137,228,0.0,0,0.27,1000000.0,0,0,0,21,0,5,0,0 140 | 138,229,0.97,0,0.22,1000000.0,0,0,0,23,0,4,1,0 141 | 139,230,0.78,0,0.24,1000000.0,0,0,0,24,0,3,1,0 142 | 140,231,0.0,0,0.3,1000000.0,0,0,0,20,0,5,0,0 143 | 141,232,0.26,0,0.33,1000000.0,0,0,0,22,0,5,1,0 144 | 142,233,0.08,0,0.2,1000000.0,0,0,0,21,0,4,1,0 145 | 143,234,0.06,0,0.15,1000000.0,0,0,0,23,0,4,1,0 146 | 144,235,0.08,0,0.14,1000000.0,0,0,0,24,0,5,1,0 147 | 145,236,0.19,0,0.21,1000000.0,0,0,0,21,0,4,1,0 148 | 146,237,0.07,0,0.2,1000000.0,0,0,0,19,0,5,1,0 149 | 147,238,0.53,0,0.06,1000000.0,0,0,0,18,0,4,1,0 150 | 148,239,0.2,0,0.18,1000000.0,0,0,0,16,0,5,1,0 151 | 149,240,0.08,0,0.13,1000000.0,0,0,0,15,0,3,1,0 152 | 150,241,0.0,0,0.23,1000000.0,0,0,0,20,0,5,0,0 153 | 151,242,0.0,0,0.3,1000000.0,0,0,0,18,0,4,0,0 154 | 152,243,0.05,0,0.13,1000000.0,0,0,0,16,0,3,1,0 155 | 153,244,0.11,0,0.15,1000000.0,0,0,0,15,0,4,1,0 156 | 154,245,0.16,0,0.23,1000000.0,0,0,0,15,0,3,1,0 157 | 155,246,0.0,0,0.25,1000000.0,0,0,0,14,0,4,0,0 158 | 156,247,0.0,0,0.31,1000000.0,0,0,0,13,0,3,0,0 159 | 157,248,0.02,0,0.18,1000000.0,0,0,0,15,0,4,1,0 160 | 158,249,0.04,0,0.08,1000000.0,0,0,0,16,0,3,1,0 161 | 159,250,0.0,0,0.12,1000000.0,0,0,0,18,0,4,0,0 162 | 160,251,0.0,0,0.2,1000000.0,0,0,0,15,0,4,0,0 163 | 161,252,0.0,0,0.2,1000000.0,0,0,0,16,0,3,0,0 164 | 162,253,0.0,0,0.22,1000000.0,0,0,0,14,0,3,0,0 165 | 163,254,0.0,0,0.18,1000000.0,0,0,0,15,0,4,0,0 166 | 164,255,0.0,0,0.14,1000000.0,0,0,0,13,0,3,0,0 167 | 165,256,0.0,0,0.13,1000000.0,0,0,0,12,0,4,0,0 168 | 166,257,0.0,0,0.14,1000000.0,0,0,0,15,0,4,0,0 169 | 167,258,0.0,0,0.2,1000000.0,0,0,0,14,0,4,0,0 170 | 168,259,0.0,0,0.14,1000000.0,0,0,0,16,0,3,0,0 171 | 169,260,0.0,0,0.19,1000000.0,0,0,0,15,0,3,0,0 172 | 170,261,0.0,0,0.14,1000000.0,0,0,0,15,0,3,0,0 173 | 171,262,0.0,0,0.2,1000000.0,0,0,0,13,0,3,0,0 174 | 172,263,0.35,0,0.23,1000000.0,0,0,0,12,0,3,1,0 175 | 173,264,0.52,0,0.16,1000000.0,0,0,0,14,0,3,1,0 176 | 174,265,0.0,0,0.21,1000000.0,0,0,0,15,0,4,0,0 177 | 175,266,0.0,0,0.19,1000000.0,0,0,0,12,0,4,0,0 178 | 176,267,0.0,0,0.18,1000000.0,0,0,0,10,0,3,0,0 179 | 177,268,0.0,0,0.18,1000000.0,0,0,0,10,0,4,0,0 180 | 178,269,0.53,0,0.09,1000000.0,0,0,0,9,0,3,1,0 181 | 179,270,0.07,0,0.23,1000000.0,0,0,0,8,0,3,1,0 182 | 180,271,0.0,0,0.17,1000000.0,0,0,0,7,0,3,0,0 183 | 181,272,0.0,0,0.22,1000000.0,0,0,0,6,0,3,0,0 184 | 182,273,1.04,0,0.0,1000000.0,0,0,0,5,0,3,10,0 185 | -------------------------------------------------------------------------------- /examples/data/ex4.csv: -------------------------------------------------------------------------------- 1 | tAtm;Prec;rRoot;hCritA 2 | 1;0;0,04;100000 3 | 2;0,005;0,01;100000 4 | 3;0,005;0,02;100000 5 | 4;0,13;0;100000 6 | 5;0,04;0;100000 7 | 6;0;0,02;100000 8 | 7;0,03;0,01;100000 9 | 8;0,07;0;100000 10 | 9;0,005;0;100000 11 | 10;0,12;0;100000 12 | 11;0,72;0;100000 13 | 12;0,37;0,03;100000 14 | 13;0,07;0,03;100000 15 | 14;0,005;0,02;100000 16 | 15;0,03;0,03;100000 17 | 16;0;0,05;100000 18 | 17;0;0,08;100000 19 | 18;0;0;100000 20 | 19;0,43;0;100000 21 | 20;0,72;0,01;100000 22 | 21;0;0,01;100000 23 | 22;0;0,02;100000 24 | 23;0;0;100000 25 | 24;0,64;0,01;100000 26 | 25;0,04;0,02;100000 27 | 26;0,83;0,03;100000 28 | 27;0,42;0;100000 29 | 28;0,07;0,04;100000 30 | 29;0,06;0;100000 31 | 30;0,03;0;100000 32 | 31;0;0;100000 33 | 32;0,1;0;100000 34 | 33;0,04;0;100000 35 | 34;0,57;0,07;100000 36 | 35;0;0,08;100000 37 | 36;0;0,05;100000 38 | 37;0,22;0,06;100000 39 | 38;0,56;0,02;100000 40 | 39;0;0,1;100000 41 | 40;0;0,03;100000 42 | 41;0,19;0,05;100000 43 | 42;0,52;0,03;100000 44 | 43;0,12;0,06;100000 45 | 44;0;0,02;100000 46 | 45;0;0,03;100000 47 | 46;0,06;0,06;100000 48 | 47;0;0,01;100000 49 | 48;0,005;0,06;100000 50 | 49;0,03;0,09;100000 51 | 50;0,02;0,07;100000 52 | 51;0,03;0,04;100000 53 | 52;0,02;0,03;100000 54 | 53;0,005;0,05;100000 55 | 54;0;0,06;100000 56 | 55;0;0,05;100000 57 | 56;0;0,05;100000 58 | 57;0;0,04;100000 59 | 58;0;0,04;100000 60 | 59;0;0,02;100000 61 | 60;0;0,05;100000 62 | 61;0,005;0,03;100000 63 | 62;0,005;0,07;100000 64 | 63;0,36;0,11;100000 65 | 64;0,04;0,13;100000 66 | 65;0,005;0,07;100000 67 | 66;0,52;0,11;100000 68 | 67;0;0,12;100000 69 | 68;0,21;0,07;100000 70 | 69;0;0,07;100000 71 | 70;1,02;0,11;100000 72 | 71;0,005;0,07;100000 73 | 72;0;0;100000 74 | 73;0,005;0,04;100000 75 | 74;0;0,04;100000 76 | 75;0;0,14;100000 77 | 76;0;0,17;100000 78 | 77;0;0,19;100000 79 | 78;0;0,13;100000 80 | 79;0;0,15;100000 81 | 80;0;0,18;100000 82 | 81;0;0,21;100000 83 | 82;0;0,15;100000 84 | 83;0,005;0,14;100000 85 | 84;0;0,19;100000 86 | 85;0,02;0,17;100000 87 | 86;0,18;0,19;100000 88 | 87;2,13;0,16;100000 89 | 88;0,19;0,12;100000 90 | 89;0,03;0,1;100000 91 | 90;0,005;0,1;100000 92 | 91;0,38;0,12;100000 93 | 92;0,29;0,07;100000 94 | 93;0,53;0,09;100000 95 | 94;0,12;0,13;100000 96 | 95;0,62;0,05;100000 97 | 96;0,64;0,18;100000 98 | 97;1,42;0,17;100000 99 | 98;0,9;0,13;100000 100 | 99;0,12;0,23;100000 101 | 100;0,18;0,11;100000 102 | 101;0,42;0,15;100000 103 | 102;0,07;0,14;100000 104 | 103;0,2;0,14;100000 105 | 104;0,005;0,12;100000 106 | 105;0,21;0,14;100000 107 | 106;0,38;0,23;100000 108 | 107;0,13;0,11;100000 109 | 108;0;0,18;100000 110 | 109;0,1;0,12;100000 111 | 110;0,07;0,14;100000 112 | 111;0;0,16;100000 113 | 112;0;0,21;100000 114 | 113;0,005;0,18;100000 115 | 114;0;0,24;100000 116 | 115;0;0,27;100000 117 | 116;0,005;0,37;100000 118 | 117;0,1;0,09;100000 119 | 118;0,005;0,17;100000 120 | 119;0,08;0,13;100000 121 | 120;0,22;0,14;100000 122 | 121;0,005;0,11;100000 123 | 122;0,52;0,24;100000 124 | 123;0;0,3;100000 125 | 124;0;0,33;100000 126 | 125;0,12;0,22;100000 127 | 126;0,24;0,18;100000 128 | 127;0;0,27;100000 129 | 128;0,005;0,26;100000 130 | 129;0,005;0,32;100000 131 | 130;0,23;0,27;100000 132 | 131;0,94;0,19;100000 133 | 132;0,53;0,21;100000 134 | 133;0,27;0,22;100000 135 | 134;0,31;0,18;100000 136 | 135;0,29;0,13;100000 137 | 136;0,07;0,14;100000 138 | 137;1,64;0,2;100000 139 | 138;0,48;0,16;100000 140 | 139;0,005;0,11;100000 141 | 140;0;0,26;100000 142 | 141;0,05;0,26;100000 143 | 142;0;0,31;100000 144 | 143;0;0,31;100000 145 | 144;0;0,35;100000 146 | 145;0,13;0,25;100000 147 | 146;0,34;0,38;100000 148 | 147;0,93;0,46;100000 149 | 148;2,43;0,22;100000 150 | 149;0,53;0,17;100000 151 | 150;0,005;0,32;100000 152 | 151;0,005;0,35;100000 153 | 152;0,63;0,24;100000 154 | 153;0,77;0,15;100000 155 | 154;0;0,31;100000 156 | 155;0;0,28;100000 157 | 156;0,005;0,29;100000 158 | 157;1,13;0,25;100000 159 | 158;0,08;0,25;100000 160 | 159;0,23;0,25;100000 161 | 160;0,34;0,31;100000 162 | 161;0,28;0,2;100000 163 | 162;0,005;0,31;100000 164 | 163;0,1;0,3;100000 165 | 164;0,41;0,37;100000 166 | 165;0;0,2;100000 167 | 166;0,3;0,3;100000 168 | 167;0,005;0,36;100000 169 | 168;0,005;0,24;100000 170 | 169;0;0,37;100000 171 | 170;0,31;0,23;100000 172 | 171;0,005;0,33;100000 173 | 172;0;0,26;100000 174 | 173;0,005;0,28;100000 175 | 174;1,78;0,23;100000 176 | 175;0,005;0,25;100000 177 | 176;0,005;0,17;100000 178 | 177;0;0,21;100000 179 | 178;0;0,38;100000 180 | 179;0,92;0,34;100000 181 | 180;0;0,35;100000 182 | 181;0,68;0,27;100000 183 | 182;1,44;0,2;100000 184 | 183;0,32;0,14;100000 185 | 184;0,28;0,18;100000 186 | 185;0,03;0,2;100000 187 | 186;0,005;0,28;100000 188 | 187;3,33;0,41;100000 189 | 188;0,25;0,39;100000 190 | 189;0,21;0,4;100000 191 | 190;0,2;0,28;100000 192 | 191;2,52;0,13;100000 193 | 192;0,005;0,29;100000 194 | 193;0,005;0,26;100000 195 | 194;0;0,38;100000 196 | 195;0;0,47;100000 197 | 196;0;0,5;100000 198 | 197;0;0,53;100000 199 | 198;0;0,44;100000 200 | 199;0;0,25;100000 201 | 200;0;0,3;100000 202 | 201;0;0,55;100000 203 | 202;0,22;0,48;100000 204 | 203;0;0,44;100000 205 | 204;0,79;0,23;100000 206 | 205;0,33;0,23;100000 207 | 206;0,08;0,23;100000 208 | 207;0,005;0,25;100000 209 | 208;0,005;0,18;100000 210 | 209;2,12;0,17;100000 211 | 210;0,08;0,13;100000 212 | 211;0,005;0,24;100000 213 | 212;0;0,24;100000 214 | 213;0,23;0,19;100000 215 | 214;0,4;0,23;100000 216 | 215;0,91;0,17;100000 217 | 216;0,31;0,17;100000 218 | 217;0,03;0,25;100000 219 | 218;0;0,27;100000 220 | 219;0;0,37;100000 221 | 220;1,38;0,29;100000 222 | 221;0,53;0,31;100000 223 | 222;0,17;0,29;100000 224 | 223;0,44;0,26;100000 225 | 224;0;0,4;100000 226 | 225;0,23;0,16;100000 227 | 226;0,005;0,22;100000 228 | 227;0,83;0,17;100000 229 | 228;0,005;0,18;100000 230 | 229;0,1;0,21;100000 231 | 230;0,65;0,1;100000 232 | 231;1,78;0,26;100000 233 | 232;0,08;0,16;100000 234 | 233;0,33;0,24;100000 235 | 234;0,005;0,2;100000 236 | 235;0,005;0,18;100000 237 | 236;0;0,12;100000 238 | 237;0,005;0,18;100000 239 | 238;0;0,2;100000 240 | 239;0;0,17;100000 241 | 240;0;0,22;100000 242 | 241;0;0,29;100000 243 | 242;0;0,31;100000 244 | 243;0;0,32;100000 245 | 244;0;0,31;100000 246 | 245;0;0,31;100000 247 | 246;0;0,19;100000 248 | 247;0;0,09;100000 249 | 248;0;0,17;100000 250 | 249;0;0,26;100000 251 | 250;0;0,18;100000 252 | 251;0,33;0,16;100000 253 | 252;0,005;0,15;100000 254 | 253;0;0,17;100000 255 | 254;0,92;0,18;100000 256 | 255;1,73;0,11;100000 257 | 256;0,37;0,08;100000 258 | 257;0,42;0,09;100000 259 | 258;0,27;0,1;100000 260 | 259;0,005;0,13;100000 261 | 260;0,005;0,05;100000 262 | 261;0,07;0,07;100000 263 | 262;0,87;0,07;100000 264 | 263;0;0,08;100000 265 | 264;0;0,08;100000 266 | 265;0,02;0,09;100000 267 | 266;0,03;0,09;100000 268 | 267;0;0,11;100000 269 | 268;0;0,1;100000 270 | 269;0;0,09;100000 271 | 270;0,005;0,05;100000 272 | 271;0,005;0,04;100000 273 | 272;0;0,04;100000 274 | 273;0;0,07;100000 275 | 274;0;0,1;100000 276 | 275;0;0,09;100000 277 | 276;0;0,12;100000 278 | 277;0;0,13;100000 279 | 278;0;0,11;100000 280 | 279;0;0,11;100000 281 | 280;0;0,11;100000 282 | 281;0;0,06;100000 283 | 282;0;0,07;100000 284 | 283;0;0,09;100000 285 | 284;0;0,05;100000 286 | 285;0,005;0,03;100000 287 | 286;0;0,12;100000 288 | 287;0;0,09;100000 289 | 288;0;0,05;100000 290 | 289;0;0,07;100000 291 | 290;0;0,03;100000 292 | 291;0;0,04;100000 293 | 292;0;0,1;100000 294 | 293;0,17;0,09;100000 295 | 294;0,82;0,03;100000 296 | 295;0,33;0,02;100000 297 | 296;0,43;0,02;100000 298 | 297;0,005;0,03;100000 299 | 298;0;0,05;100000 300 | 299;0;0,04;100000 301 | 300;0,08;0,01;100000 302 | 301;1,43;0,01;100000 303 | 302;0,02;0,11;100000 304 | 303;0;0,06;100000 305 | 304;0;0,05;100000 306 | 305;0,03;0,05;100000 307 | 306;0;0;100000 308 | 307;0,06;0,04;100000 309 | 308;0,05;0;100000 310 | 309;0,08;0,01;100000 311 | 310;0,1;0,02;100000 312 | 311;0,06;0,01;100000 313 | 312;0,03;0,02;100000 314 | 313;0,17;0,04;100000 315 | 314;0;0,03;100000 316 | 315;1,44;0,05;100000 317 | 316;0,14;0,07;100000 318 | 317;1,78;0,02;100000 319 | 318;0,11;0,08;100000 320 | 319;0,005;0,02;100000 321 | 320;0,02;0,04;100000 322 | 321;0,22;0,05;100000 323 | 322;0,73;0,02;100000 324 | 323;0,13;0;100000 325 | 324;0,32;0,06;100000 326 | 325;0,47;0;100000 327 | 326;0,005;0,08;100000 328 | 327;0,02;0,04;100000 329 | 328;0,07;0,06;100000 330 | 329;0;0,03;100000 331 | 330;0,18;0,03;100000 332 | 331;0;0,01;100000 333 | 332;0;0,03;100000 334 | 333;0,08;0,03;100000 335 | 334;0,005;0,01;100000 336 | 335;0,04;0,02;100000 337 | 336;0,005;0,02;100000 338 | 337;0,33;0,02;100000 339 | 338;0,03;0,06;100000 340 | 339;0,08;0,05;100000 341 | 340;0,005;0,03;100000 342 | 341;0,83;0,04;100000 343 | 342;0,58;0,08;100000 344 | 343;0;0,06;100000 345 | 344;0,4;0,04;100000 346 | 345;0,9;0;100000 347 | 346;0;0,03;100000 348 | 347;0,02;0,05;100000 349 | 348;0,23;0;100000 350 | 349;0;0,02;100000 351 | 350;0;0,09;100000 352 | 351;0;0,04;100000 353 | 352;0;0,04;100000 354 | 353;0;0,07;100000 355 | 354;0;0,06;100000 356 | 355;0;0,03;100000 357 | 356;0;0;100000 358 | 357;0;0;100000 359 | 358;0,005;0;100000 360 | 359;0;0;100000 361 | 360;0;0;100000 -------------------------------------------------------------------------------- /phydrus/plot.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | from matplotlib import cm 3 | 4 | 5 | class Plots: 6 | def __init__(self, ml): 7 | self.ml = ml 8 | 9 | def profile(self, figsize=(3, 6), title="Soil Profile", cmap="YlOrBr", 10 | color_by="Ks", **kwargs): 11 | """Method to plot the soil profile. 12 | 13 | Parameters 14 | ---------- 15 | figsize: tuple, optional 16 | title: str, optional 17 | cmap: str, optional 18 | String with a named Matplotlib colormap. 19 | color_by: str, optional 20 | Column from the material properties sed to color the materials. 21 | Default is "Ks". 22 | 23 | Returns 24 | ------- 25 | ax: matplotlib axes instance 26 | 27 | """ 28 | fig, ax = plt.subplots(figsize=figsize, **kwargs) 29 | 30 | top = self.ml.profile.loc[:, "x"].max() 31 | w = self.ml.profile.loc[:, "h"].max() 32 | w = w + 0.2 * w 33 | 34 | # Set colors by color_by 35 | col = self.ml.materials["water"][color_by] 36 | col = (col - col.min()) / (col.max() - col.min()) 37 | colors = cm.get_cmap(cmap, 7)(col.values) 38 | 39 | for i in self.ml.profile.index[1:]: 40 | bot = self.ml.profile.loc[i, "x"] 41 | h = bot - top 42 | color = colors[self.ml.profile.loc[i, "Mat"] - 1] 43 | patch = plt.Rectangle(xy=(0, top), width=w, height=h, linewidth=1, 44 | edgecolor="darkgray", facecolor=color) 45 | ax.add_patch(patch) 46 | top = bot 47 | 48 | line = ax.plot(self.ml.profile.loc[:, ["h"]].values, 49 | self.ml.profile.loc[:, ["x"]].values, 50 | label="Initial head") 51 | 52 | ax.set_xlim(0, w) 53 | ax.set_ylim(self.ml.profile.loc[:, "x"].min(), 54 | self.ml.profile.loc[:, "x"].max()) 55 | ax.set_xlabel("h [{}]".format(self.ml.basic_info["LUnit"])) 56 | ax.set_ylabel("depth [{}]".format(self.ml.basic_info["LUnit"])) 57 | ax.set_title(title) 58 | 59 | legend_elements = [line[0]] 60 | for i, color in enumerate(colors): 61 | legend_elements.append(plt.Rectangle((0, 0), 0, 0, color=color, 62 | label="material {}".format(i)) 63 | ) 64 | 65 | plt.legend(handles=legend_elements, loc="best") 66 | plt.tight_layout() 67 | return ax 68 | 69 | def profile_information(self, data="Pressure Head", times=None, 70 | legend=True, figsize=(5, 3), **kwargs): 71 | """Method to plot the soil profile information. 72 | 73 | Parameters 74 | ---------- 75 | data: str, optional 76 | String with the variable of the profile information to plot. 77 | You can choose between: "Pressure Head", "Water Content", 78 | "Hydraulic Conductivity","Hydraulic Capacity", "Water Flux", 79 | "Root Uptake". 80 | Default is "Pressure Head". 81 | times: list of int 82 | List of integers of the time step to plot. 83 | figsize: tuple, optional 84 | legend: boolean, optional 85 | 86 | Returns 87 | ------- 88 | ax: matplotlib axes instance 89 | 90 | """ 91 | l_unit = self.ml.basic_info["LUnit"] 92 | t_unit = self.ml.basic_info["TUnit"] 93 | m_unit = self.ml.basic_info["MUnit"] 94 | 95 | use_cols = ("Head", "Moisture", "K", "C", "Flux", "Sink") 96 | col_names = ("Pressure Head", "Water Content", 97 | "Hydraulic Conductivity", "Hydraulic Capacity", 98 | "Water Flux", "Root Uptake") 99 | units = ["h [{}]".format(l_unit), 100 | "Theta [-]", "K [{}/days]".format(l_unit), 101 | "C [1/{}]".format(l_unit), 102 | "v [{}/{}]".format(l_unit, t_unit), 103 | "S [1/{}]".format(t_unit)] 104 | 105 | if self.ml.basic_info["lChem"]: 106 | use_cols = use_cols + ("Conc(1..NS)", "Sorb(1...NS)") 107 | col_names = col_names + ("Concentration", "Sorbtion") 108 | units.extend(["c [{}/{}*3]".format(m_unit, l_unit), "sorb."]) 109 | 110 | col = col_names.index(data) 111 | fig, ax = plt.subplots(figsize=figsize, **kwargs) 112 | dfs = self.ml.read_nod_inf(times=times) 113 | 114 | if times is None or len(times) > 1: 115 | for key, df in dfs.items(): 116 | df.plot(x=use_cols[col], y="Depth", ax=ax, 117 | label="time= " + str(key)) 118 | else: 119 | dfs.plot(x=use_cols[col], y="Depth", ax=ax, 120 | label="T " + str(times)) 121 | 122 | ax.set_xlabel(units[col]) 123 | ax.set_ylabel("Depth [{}]".format(self.ml.basic_info["LUnit"])) 124 | ax.grid(linestyle='--') 125 | 126 | if legend: 127 | ax.legend(bbox_to_anchor=(1, 1), loc="upper left") 128 | 129 | plt.tight_layout() 130 | return ax 131 | 132 | def water_flow(self, data="Potential Surface Flux", figsize=(6, 3), 133 | **kwargs): 134 | """Method to plot the water flow information. 135 | 136 | Parameters 137 | ---------- 138 | data: str, optional 139 | String with the variable of the water flow information to plot. 140 | You can choose between: "Potential Surface Flux", 141 | "Potential Root Water Uptake", "Actual Surface Flux", 142 | "Actual Root Water Uptake", "Bottom Flux", 143 | "Pressure head at the soil surface", 144 | "Mean value of the pressure head over the region", 145 | "Pressure head at the Bottom of the soil profile", 146 | "Surface runoff", "Volume of water in the entire flow domain". 147 | Default is "Potential Surface Flux". 148 | figsize: tuple, optional 149 | 150 | Returns 151 | ------- 152 | ax: matplotlib axes instance 153 | 154 | """ 155 | col_names = ("Potential Surface Flux", "Potential Root Water Uptake", 156 | "Actual Surface Flux", "Actual Root Water Uptake", 157 | "Bottom Flux", "Pressure head at the soil surface", 158 | "Mean value of the pressure head over the region", 159 | "Pressure head at the Bottom of the soil profile", 160 | "Surface runoff", 161 | "Volume of water in the entire flow domain") 162 | 163 | cols = ("rTop", "rRoot", "vTop", "vRoot", "vBot", "hTop", "hRoot", 164 | "hBot", "RunOff", "Volume") 165 | df = self.ml.read_tlevel() 166 | col = col_names.index(data) 167 | 168 | if col < 5: 169 | fig, axes = plt.subplots(1, 2, figsize=figsize, **kwargs) 170 | df.plot(y=cols[col], ax=axes[0], use_index=True) 171 | axes[0].set_ylabel(data) 172 | axes[0].set_xlabel("Time [{}]".format(self.ml.basic_info["TUnit"])) 173 | 174 | # Cumulative sum 175 | df.plot(y="sum(" + cols[col] + ")", ax=axes[1], use_index=True) 176 | axes[1].set_ylabel("Cum. {}".format(data)) 177 | axes[1].set_xlabel("Time [{}]".format(self.ml.basic_info["TUnit"])) 178 | fig.tight_layout() 179 | else: 180 | fig, axes = plt.subplots(1, 1, figsize=figsize, **kwargs) 181 | axes.plot(df.index, df[cols[col]]) 182 | axes.set_ylabel(data) 183 | axes.set_xlabel("Time [{}]".format(self.ml.basic_info["TUnit"])) 184 | return axes 185 | 186 | def soil_properties(self, data="Water Content", figsize=(6, 3), **kwargs): 187 | """Method to plot the soil hydraulic properties. 188 | 189 | Parameters 190 | ---------- 191 | data: str, optional 192 | String with the variable of the water flow information to plot. 193 | You can choose between: "Water Content", "Pressure head", 194 | "log Pressure head", "Hydraulic Capacity", "Hydraulic 195 | Conductivity", "log Hydraulic Conductivity", "Effective Water 196 | Content". Default is "Water Content". 197 | figsize: tuple, optional 198 | 199 | Returns 200 | ------- 201 | axes: matplotlib axes instance 202 | 203 | """ 204 | col_names = ("Water Content", "Pressure head", "log Pressure head", 205 | "Hydraulic Capacity", "Hydraulic Conductivity", 206 | "log Hydraulic Conductivity", "Effective Water Content") 207 | cols = ("theta", "h", "log_h", "C", "K", "log_K", "S", "Kv") 208 | col = col_names.index(data) 209 | 210 | dfs = self.ml.read_i_check() 211 | 212 | _, axes = plt.subplots(figsize=figsize, nrows=1, ncols=2, 213 | sharey=True, **kwargs) 214 | 215 | for i, df in dfs.items(): 216 | name = "Node {}".format(i) 217 | df.plot(x="h", y=cols[col], ax=axes[0], label=name) 218 | df.plot(x="log_h", y=cols[col], ax=axes[1], label=name) 219 | 220 | axes[0].set_xlabel(xlabel="h") 221 | axes[1].set_xlabel(xlabel="log_h") 222 | axes[0].set_ylabel(cols[col]) 223 | 224 | return axes 225 | 226 | def obs_points(self, data="Pressure Head", figsize=(4, 3), **kwargs): 227 | """Method to plot the pressure heads, water contents and water fluxes 228 | at selected observation nodes. 229 | 230 | Parameters 231 | ---------- 232 | data: str, optional 233 | String with the variable of the variable to plot. 234 | You can choose between: "Pressure head", "Water content", 235 | "Water flux". 236 | figsize: tuple, optional 237 | 238 | Returns 239 | ------- 240 | axes: matplotlib axes instance 241 | 242 | """ 243 | col_names = ("Pressure Head", "Water Content", "Water Flux", 244 | "Concentration") 245 | cols = ("h", "theta", "Temp", "Conc") 246 | col = col_names.index(data) 247 | 248 | dfs = self.ml.read_obs_node() 249 | 250 | _, ax = plt.subplots(figsize=figsize, **kwargs) 251 | for i, df in dfs.items(): 252 | name = "Node {}".format(i) 253 | df.plot(y=cols[col], ax=ax, label=name, use_index=True) 254 | 255 | ax.set_xlabel("Time [{}]".format(self.ml.basic_info["TUnit"])) 256 | ax.set_ylabel(cols[col]) 257 | return ax 258 | -------------------------------------------------------------------------------- /examples/data/ex3.csv: -------------------------------------------------------------------------------- 1 | ,tAtm,Prec,rSoil,rRoot,hCritA,rB,hB,ht,RootDepth 2 | 0,1,0.0074150000000000015,0.027000000000000003,0.084,100000,0,0,0,0 3 | 1,2,0.02576,0.0135,0.095,100000,0,0,0,0 4 | 2,3,0.037846,0.0264,0.1,100000,0,0,0,0 5 | 3,4,0.01978,0.0038,0.097,100000,0,0,0,0 6 | 4,5,0.015946000000000002,0.0008,0.097,100000,0,0,0,0 7 | 5,6,0.272091,0.0,0.035,100000,0,0,0,0 8 | 6,7,0.351975,0.0,0.022,100000,0,0,0,0 9 | 7,8,1.518459,0.0,0.004,100000,0,0,0,0 10 | 8,9,0.074883,0.0,0.032,100000,0,0,0,0 11 | 9,10,0.024161,0.0,0.046,100000,0,0,0,0 12 | 10,11,0.004357,0.0,0.08,100000,0,0,0,0 13 | 11,12,0.035098000000000004,0.0,0.064,100000,0,0,0,0 14 | 12,13,0.13783099999999998,0.0157,0.078,100000,0,0,0,0 15 | 13,14,0.596547,0.0153,0.037000000000000005,100000,0,0,0,0 16 | 14,15,0.010464,0.0213,0.08900000000000001,100000,0,0,0,0 17 | 15,16,0.011498,0.0156,0.108,100000,0,0,0,0 18 | 16,17,0.213244,0.0164,0.105,100000,0,0,0,0 19 | 17,18,1.200889,0.0159,0.03,100000,0,0,0,0 20 | 18,19,0.125,0.0174,0.059,100000,0,0,0,0 21 | 19,20,0.002108,0.0191,0.105,100000,0,0,0,0 22 | 20,21,0.022556,0.0338,0.134,100000,0,0,0,0 23 | 21,22,0.0,0.0176,0.145,100000,0,0,0,0 24 | 22,23,0.48219,0.0172,0.017,100000,0,0,0,0 25 | 23,24,0.043876,0.0347,0.053,100000,0,0,0,0 26 | 24,25,0.006816,0.0081,0.071,100000,0,0,0,0 27 | 25,26,0.008998,0.0176,0.07,100000,0,0,0,0 28 | 26,27,0.469338,0.0169,0.015,100000,0,0,0,0 29 | 27,28,0.007781999999999998,0.0,0.059,100000,0,0,0,0 30 | 28,29,0.022796,0.0231,0.08900000000000001,100000,0,0,0,0 31 | 29,30,0.008773999999999999,0.0172,0.118,100000,0,0,0,0 32 | 30,31,1.509,0.0,0.008,100000,0,0,0,0 33 | 31,32,1.128141,0.0,0.001,100000,0,0,0,0 34 | 32,33,0.6426810000000001,0.0,0.056,100000,0,0,0,0 35 | 33,34,0.170378,0.0336,0.032,100000,0,0,0,0 36 | 34,35,0.107846,0.0826,0.09,100000,0,0,0,0 37 | 35,36,0.029218,0.1024,0.127,100000,0,0,0,0 38 | 36,37,0.178558,0.1268,0.129,100000,0,0,0,0 39 | 37,38,0.024038,0.0972,0.152,100000,0,0,0,0 40 | 38,39,0.051774,0.1549,0.124,100000,0,0,0,0 41 | 39,40,0.039896,0.066,0.096,100000,0,0,0,0 42 | 40,41,0.027188,0.0491,0.14300000000000002,100000,0,0,0,0 43 | 41,42,0.577767,0.0329,0.066,100000,0,0,0,0 44 | 42,43,2.368602,0.016,0.005,100000,0,0,0,0 45 | 43,44,0.6758430000000001,0.0177,0.049,100000,0,0,0,0 46 | 44,45,0.041343,0.0865,0.092,100000,0,0,0,0 47 | 45,46,0.297154,0.1102,0.092,100000,0,0,0,0 48 | 46,47,0.07437200000000001,0.1209,0.078,100000,0,0,0,0 49 | 47,48,0.02717,0.1159,0.118,100000,0,0,0,0 50 | 48,49,0.455176,0.1159,0.079,100000,0,0,0,0 51 | 49,50,0.051349,0.1596,0.051,100000,0,0,0,0 52 | 50,51,0.022681,0.0851,0.135,100000,0,0,0,0 53 | 51,52,0.010484,0.0492,0.181,100000,0,0,0,0 54 | 52,53,0.299291,0.0503,0.091,100000,0,0,0,0 55 | 53,54,0.511931,0.0346,0.039,100000,0,0,0,0 56 | 54,55,0.006670999999999999,0.018000000000000002,0.129,100000,0,0,0,0 57 | 55,56,0.008429,0.0179,0.146,100000,0,0,0,0 58 | 56,57,0.66101,0.0,0.153,100000,0,0,0,0 59 | 57,58,2.14702,0.0,0.131,100000,0,0,0,0 60 | 58,59,0.029839,0.0,0.09,100000,0,0,0,0 61 | 59,60,0.433949,0.0,0.034,100000,0,0,0,0 62 | 60,61,0.418228,0.001,0.061,100000,0,0,0,0 63 | 61,62,0.07200000000000001,0.036000000000000004,0.018000000000000002,100000,0,0,0,0 64 | 62,63,0.487015,0.0439,0.065,100000,0,0,0,0 65 | 63,64,0.119954,0.0437,0.079,100000,0,0,0,0 66 | 64,65,0.227064,0.0671,0.066,100000,0,0,0,0 67 | 65,66,0.333336,0.0663,0.068,100000,0,0,0,0 68 | 66,67,0.060038,0.0676,0.08800000000000001,100000,0,0,0,0 69 | 67,68,0.196197,0.0676,0.095,100000,0,0,0,0 70 | 68,69,0.086634,0.0468,0.09,100000,0,0,0,0 71 | 69,70,2.293565,0.0678,0.012,100000,0,0,0,0 72 | 70,71,0.563149,0.0691,0.104,100000,0,0,0,0 73 | 71,72,0.572415,0.2124,0.056,100000,0,0,0,0 74 | 72,73,0.35920100000000005,0.2479,0.08900000000000001,100000,0,0,0,0 75 | 73,74,0.534881,0.2076,0.08,100000,0,0,0,0 76 | 74,75,0.696146,0.2043,0.081,100000,0,0,0,0 77 | 75,76,0.689688,0.2403,0.081,100000,0,0,0,0 78 | 76,77,0.16072899999999998,0.1858,0.15,100000,0,0,0,0 79 | 77,78,0.726346,0.168,0.063,100000,0,0,0,0 80 | 78,79,0.8315629999999999,0.1722,0.099,100000,0,0,0,0 81 | 79,80,0.64881,0.1526,0.054000000000000006,100000,0,0,0,0 82 | 80,81,0.517745,0.198,0.02,100000,0,0,0,0 83 | 81,82,0.06454700000000001,0.3667,0.093,100000,0,0,0,0 84 | 82,83,0.033711,0.2915,0.159,100000,0,0,0,0 85 | 83,84,0.03464,0.2204,0.184,100000,0,0,0,0 86 | 84,85,0.023801,0.1564,0.173,100000,0,0,0,0 87 | 85,86,0.45927,0.0945,0.166,100000,0,0,0,0 88 | 86,87,2.734717,0.0426,0.118,100000,0,0,0,0 89 | 87,88,2.619123,0.475,0.036000000000000004,100000,0,0,0,0 90 | 88,89,0.012605,0.8338,0.121,100000,0,0,0,0 91 | 89,90,0.010405,0.4615,0.145,100000,0,0,0,0 92 | 90,91,0.89,0.2791,0.084,100000,0,0,0,0 93 | 91,92,0.0,0.2572,0.119,100000,0,0,0,0 94 | 92,93,3.4160000000000004,0.1393,0.106,100000,0,0,0,0 95 | 93,94,0.250452,0.6499,0.048,100000,0,0,0,0 96 | 94,95,0.001022,0.7325,0.116,100000,0,0,0,0 97 | 95,96,0.3670000000000001,0.3984,0.105,100000,0,0,0,0 98 | 96,97,0.118725,0.281,0.101,100000,0,0,0,0 99 | 97,98,0.008911,0.2242,0.109,100000,0,0,0,0 100 | 98,99,0.004,0.1429,0.146,100000,0,0,0,0 101 | 99,100,0.324436,0.0,0.047,100000,0,0,0,0 102 | 100,101,0.0224,0.0,0.16699999999999998,100000,0,0,0,0 103 | 101,102,0.042124,0.0754,0.123,100000,0,0,0,0 104 | 102,103,4.056695,0.0014,0.058,100000,0,0,0,0 105 | 103,104,4.857538,0.419,0.018000000000000002,100000,0,0,0,0 106 | 104,105,0.0,2.156,0.028,100000,0,0,0,0 107 | 105,106,0.0,1.0319,0.027000000000000003,100000,0,0,0,0 108 | 106,107,0.008818000000000001,0.6744,0.061,100000,0,0,0,0 109 | 107,108,0.424321,0.4788,0.015,100000,0,0,0,0 110 | 108,109,0.047568,0.4371,0.059,100000,0,0,0,0 111 | 109,110,0.022,0.2777,0.156,100000,0,0,0,0 112 | 110,111,0.021,0.0462,0.145,100000,0,0,0,0 113 | 111,112,0.472,0.0411,0.085,100000,0,0,0,0 114 | 112,113,1.0529959999999998,0.0454,0.118,100000,0,0,0,0 115 | 113,114,0.0118,0.0495,0.102,100000,0,0,0,0 116 | 114,115,0.4798560000000001,0.0274,0.127,100000,0,0,0,0 117 | 115,116,0.933666,0.0008,0.07,100000,0,0,0,0 118 | 116,117,0.276727,0.0339,0.046,100000,0,0,0,0 119 | 117,118,0.867038,0.0314,0.04,100000,0,0,0,0 120 | 118,119,0.33931300000000003,0.0313,0.042,100000,0,0,0,0 121 | 119,120,0.017,0.0921,0.059,100000,0,0,0,0 122 | 120,121,0.214636,0.1165,0.075,100000,0,0,0,0 123 | 121,122,0.37909,0.1123,0.053,100000,0,0,0,0 124 | 122,123,0.246,0.1216,0.03,100000,0,0,0,0 125 | 123,124,0.0208,0.0936,0.081,100000,0,0,0,0 126 | 124,125,0.0806,0.0953,0.093,100000,0,0,0,0 127 | 125,126,0.083,0.064,0.085,100000,0,0,0,0 128 | 126,127,3.048635,0.0643,0.012,100000,0,0,0,0 129 | 127,128,0.019035,0.1934,0.04,100000,0,0,0,0 130 | 128,129,0.039597,0.3391,0.1,100000,0,0,0,0 131 | 129,130,0.02172,0.3101,0.107,100000,0,0,0,0 132 | 130,131,2.53992,0.2044,0.02,100000,0,0,0,0 133 | 131,132,2.984915,1.492,0.006999999999999999,100000,0,0,0,0 134 | 132,133,0.015716,1.5935,0.044,100000,0,0,0,0 135 | 133,134,0.098474,0.6095,0.025,100000,0,0,0,0 136 | 134,135,0.031278,0.3878,0.084,100000,0,0,0,0 137 | 135,136,0.010274,0.3048,0.1,100000,0,0,0,0 138 | 136,137,0.21557,0.2511,0.037000000000000005,100000,0,0,0,0 139 | 137,138,0.003998,0.1897,0.08900000000000001,100000,0,0,0,0 140 | 138,139,0.241907,0.0,0.064,100000,0,0,0,0 141 | 139,140,0.108033,0.0001,0.041,100000,0,0,0,0 142 | 140,141,0.219552,0.0495,0.064,100000,0,0,0,0 143 | 141,142,0.021337,0.0261,0.081,100000,0,0,0,0 144 | 142,143,1.809446,0.0278,0.017,100000,0,0,0,0 145 | 143,144,0.275848,0.0002,0.016,100000,0,0,0,0 146 | 144,145,0.00355,0.0335,0.08,100000,0,0,0,0 147 | 145,146,0.016613,0.0661,0.085,100000,0,0,0,0 148 | 146,147,0.009798,0.0329,0.086,100000,0,0,0,0 149 | 147,148,0.010748,0.0679,0.083,100000,0,0,0,0 150 | 148,149,0.005718,0.0005,0.084,100000,0,0,0,0 151 | 149,150,0.602997,0.0354,0.086,100000,0,0,0,0 152 | 150,151,1.383085,0.0256,0.035,100000,0,0,0,0 153 | 151,152,0.005809,0.0,0.071,100000,0,0,0,0 154 | 152,153,0.0,0.0,0.081,100000,0,0,0,0 155 | 153,154,0.0,0.0002,0.06,100000,0,0,0,0 156 | 154,155,0.015373,0.0005,0.067,100000,0,0,0,0 157 | 155,156,0.015219,0.0007,0.073,100000,0,0,0,0 158 | 156,157,0.250784,0.0,0.063,100000,0,0,0,0 159 | 157,158,2.406366,0.0001,0.018000000000000002,100000,0,0,0,0 160 | 158,159,1.667228,0.0005,0.003,100000,0,0,0,0 161 | 159,160,0.025810000000000003,0.2243,0.043,100000,0,0,0,0 162 | 160,161,1.348959,0.3097,0.21600000000000005,100000,0,0,0,0 163 | 161,162,0.061656,0.2389,0.172,100000,0,0,0,0 164 | 162,163,0.022921,0.1904,0.066,100000,0,0,0,0 165 | 163,164,0.055382000000000015,0.1346,0.05,100000,0,0,0,0 166 | 164,165,0.028372,0.2089,0.06,100000,0,0,0,0 167 | 165,166,0.017321,0.0693,0.06,100000,0,0,0,0 168 | 166,167,0.028681,0.0676,0.065,100000,0,0,0,0 169 | 167,168,0.025149,0.0351,0.06,100000,0,0,0,0 170 | 168,169,0.046567,0.0358,0.032,100000,0,0,0,0 171 | 169,170,1.775991,0.0015,0.013,100000,0,0,0,0 172 | 170,171,1.029275,0.0002,0.034,100000,0,0,0,0 173 | 171,172,0.152212,0.0999,0.013,100000,0,0,0,0 174 | 172,173,0.076935,0.0366,0.02,100000,0,0,0,0 175 | 173,174,0.021739,0.0731,0.036000000000000004,100000,0,0,0,0 176 | 174,175,0.054232,0.1079,0.054000000000000006,100000,0,0,0,0 177 | 175,176,0.010997,0.1086,0.039,100000,0,0,0,0 178 | 176,177,0.034224,0.093,0.045,100000,0,0,0,0 179 | 177,178,0.02244,0.0702,0.046,100000,0,0,0,0 180 | 178,179,0.026148,0.1105,0.041,100000,0,0,0,0 181 | 179,180,0.026541,0.0702,0.042,100000,0,0,0,0 182 | 180,181,0.024771,0.0368,0.038,100000,0,0,0,0 183 | 181,182,0.014841,0.0,0.032,100000,0,0,0,0 184 | 182,183,0.031895,0.0,0.04,100000,0,0,0,0 185 | 183,184,0.02477,0.0333,0.035,100000,0,0,0,0 186 | 184,185,0.947156,0.0,0.013,100000,0,0,0,0 187 | 185,186,0.5059939999999999,0.0,0.019,100000,0,0,0,0 188 | 186,187,0.729565,0.0,0.033,100000,0,0,0,0 189 | 187,188,0.105748,0.0006,0.026,100000,0,0,0,0 190 | 188,189,0.083302,0.0001,0.014,100000,0,0,0,0 191 | 189,190,0.04239,0.0354,0.006999999999999999,100000,0,0,0,0 192 | 190,191,0.048524,0.0341,0.009000000000000001,100000,0,0,0,0 193 | 191,192,0.040406,0.0679,0.023,100000,0,0,0,0 194 | 192,193,0.041834,0.0342,0.013,100000,0,0,0,0 195 | 193,194,0.06078,0.0637,0.032,100000,0,0,0,0 196 | 194,195,0.096608,0.1175,0.013,100000,0,0,0,0 197 | 195,196,0.033714,0.0633,0.022,100000,0,0,0,0 198 | 196,197,0.07703600000000001,0.061,0.019,100000,0,0,0,0 199 | 197,198,0.271804,0.0302,0.018000000000000002,100000,0,0,0,0 200 | 198,199,0.040856,0.0314,0.021,100000,0,0,0,0 201 | 199,200,0.040361,0.0753,0.017,100000,0,0,0,0 202 | 200,201,0.850527,0.0386,0.0,100000,0,0,0,0 203 | 201,202,1.994646,0.032,0.003,100000,0,0,0,0 204 | 202,203,0.7570020000000001,0.118,0.003,100000,0,0,0,0 205 | 203,204,0.1102,0.4207,0.021,100000,0,0,0,0 206 | 204,205,0.071935,0.4373,0.024,100000,0,0,0,0 207 | 205,206,0.058454,0.3172,0.025,100000,0,0,0,0 208 | 206,207,0.07266399999999999,0.3262,0.02,100000,0,0,0,0 209 | 207,208,0.7412569999999999,0.1888,0.022,100000,0,0,0,0 210 | 208,209,0.167998,0.1847,0.012,100000,0,0,0,0 211 | 209,210,0.030776,0.1434,0.017,100000,0,0,0,0 212 | 210,211,0.064565,0.1425,0.027000000000000003,100000,0,0,0,0 213 | 211,212,0.042261,0.1553,0.01,100000,0,0,0,0 214 | 212,213,0.035959,0.1346,0.021,100000,0,0,0,0 215 | 213,214,0.064819,0.1654,0.021,100000,0,0,0,0 216 | -------------------------------------------------------------------------------- /examples/phydrus_paper/Ex3/output/PROFILE.OUT: -------------------------------------------------------------------------------- 1 | ******* Program HYDRUS 2 | ******* None 3 | Date: 0.**. Time: ***:**:** 4 | Units: L = cm , T = days , M = mmol 5 | 6 | 7 | n depth THr THs hs Ks Ks/KsTop Beta Ah AK ATh 8 | 9 | 1 0.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 10 | 2 1.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 11 | 3 2.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 12 | 4 3.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 13 | 5 4.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 14 | 6 5.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 15 | 7 6.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 16 | 8 7.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 17 | 9 8.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 18 | 10 9.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 19 | 11 10.00 0.000 0.445 -0.0 0.212E+03 1.000 0.050 1.000 1.000 1.000 20 | 12 11.00 0.000 0.445 -0.0 0.212E+03 1.000 0.047 1.000 1.000 1.000 21 | 13 12.00 0.000 0.445 -0.0 0.212E+03 1.000 0.045 1.000 1.000 1.000 22 | 14 13.00 0.000 0.445 -0.0 0.212E+03 1.000 0.043 1.000 1.000 1.000 23 | 15 14.00 0.000 0.445 -0.0 0.212E+03 1.000 0.040 1.000 1.000 1.000 24 | 16 15.00 0.000 0.445 -0.0 0.212E+03 1.000 0.038 1.000 1.000 1.000 25 | 17 16.00 0.000 0.445 -0.0 0.212E+03 1.000 0.035 1.000 1.000 1.000 26 | 18 17.00 0.000 0.445 -0.0 0.212E+03 1.000 0.032 1.000 1.000 1.000 27 | 19 18.00 0.000 0.445 -0.0 0.212E+03 1.000 0.030 1.000 1.000 1.000 28 | 20 19.00 0.000 0.445 -0.0 0.212E+03 1.000 0.027 1.000 1.000 1.000 29 | 21 20.00 0.000 0.445 -0.0 0.212E+03 1.000 0.025 1.000 1.000 1.000 30 | 22 21.00 0.000 0.445 -0.0 0.212E+03 1.000 0.022 1.000 1.000 1.000 31 | 23 22.00 0.000 0.445 -0.0 0.212E+03 1.000 0.020 1.000 1.000 1.000 32 | 24 23.00 0.000 0.445 -0.0 0.212E+03 1.000 0.018 1.000 1.000 1.000 33 | 25 24.00 0.000 0.445 -0.0 0.212E+03 1.000 0.015 1.000 1.000 1.000 34 | 26 25.00 0.000 0.445 -0.0 0.212E+03 1.000 0.013 1.000 1.000 1.000 35 | 27 26.00 0.000 0.445 -0.0 0.212E+03 1.000 0.010 1.000 1.000 1.000 36 | 28 27.00 0.000 0.445 -0.0 0.212E+03 1.000 0.008 1.000 1.000 1.000 37 | 29 28.00 0.000 0.445 -0.0 0.212E+03 1.000 0.005 1.000 1.000 1.000 38 | 30 29.00 0.000 0.445 -0.0 0.212E+03 1.000 0.002 1.000 1.000 1.000 39 | 31 30.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 40 | 32 31.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 41 | 33 32.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 42 | 34 33.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 43 | 35 34.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 44 | 36 35.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 45 | 37 36.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 46 | 38 37.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 47 | 39 38.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 48 | 40 39.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 49 | 41 40.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 50 | 42 41.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 51 | 43 42.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 52 | 44 43.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 53 | 45 44.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 54 | 46 45.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 55 | 47 46.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 56 | 48 47.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 57 | 49 48.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 58 | 50 49.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 59 | 51 50.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 60 | 52 51.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 61 | 53 52.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 62 | 54 53.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 63 | 55 54.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 64 | 56 55.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 65 | 57 56.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 66 | 58 57.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 67 | 59 58.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 68 | 60 59.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 69 | 61 60.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 70 | 62 61.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 71 | 63 62.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 72 | 64 63.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 73 | 65 64.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 74 | 66 65.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 75 | 67 66.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 76 | 68 67.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 77 | 69 68.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 78 | 70 69.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 79 | 71 70.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 80 | 72 71.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 81 | 73 72.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 82 | 74 73.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 83 | 75 74.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 84 | 76 75.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 85 | 77 76.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 86 | 78 77.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 87 | 79 78.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 88 | 80 79.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 89 | 81 80.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 90 | 82 81.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 91 | 83 82.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 92 | 84 83.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 93 | 85 84.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 94 | 86 85.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 95 | 87 86.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 96 | 88 87.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 97 | 89 88.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 98 | 90 89.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 99 | 91 90.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 100 | 92 91.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 101 | 93 92.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 102 | 94 93.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 103 | 95 94.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 104 | 96 95.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 105 | 97 96.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 106 | 98 97.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 107 | 99 98.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 108 | 100 99.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 109 | 101 100.00 0.000 0.445 -0.0 0.212E+03 1.000 0.000 1.000 1.000 1.000 110 | end 111 | -------------------------------------------------------------------------------- /phydrus/read.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | """ 4 | 5 | import pandas as pd 6 | 7 | from .decorators import check_file_path 8 | 9 | 10 | def read_profile(path="PROFILE.OUT"): 11 | """ 12 | 13 | Parameters 14 | ---------- 15 | path: str, optional 16 | String with the name of the profile out file. default is 17 | "PROFILE.OUT". 18 | 19 | Returns 20 | ------- 21 | data: pandas.DataFrame 22 | Pandas with the profile data 23 | 24 | """ 25 | data = _read_file(path=path, start="depth", idx_col="n") 26 | return data 27 | 28 | 29 | def read_run_inf(path="RUN_INF.OUT", usecols=None): 30 | """Method to read the RUN_INF.OUT output file. 31 | 32 | Parameters 33 | ---------- 34 | path: str, optional 35 | String with the name of the run_inf out file. default is 36 | "RUN_INF.OUT". 37 | usecols: list of str optional 38 | List with the names of the columns to import. By default: 39 | "TLevel", "Time", "dt", "Iter", "ItCum", 40 | "KodT", "KodB", "Convergency". 41 | 42 | Returns 43 | ------- 44 | data: pandas.DataFrame 45 | Pandas with the run_inf data 46 | 47 | """ 48 | data = _read_file(path=path, start="TLevel", idx_col="TLevel") 49 | return data 50 | 51 | 52 | @check_file_path 53 | def read_i_check(path="I_CHECK.OUT"): 54 | """Method to read the I_CHECK.OUT output file. 55 | 56 | Parameters 57 | ---------- 58 | path: str, optional 59 | String with the name of the I_Check out file. default is 60 | "I_Check.OUT". 61 | 62 | Returns 63 | ------- 64 | data: dict 65 | Dictionary with the node as a key and a Pandas DataFrame as a 66 | value. 67 | 68 | """ 69 | names = ["theta", "h", "log_h", "C", "K", "log_K", "S", "Kv"] 70 | 71 | end = [] 72 | start = 0 73 | 74 | with open(path) as file: 75 | # Find the starting line 76 | for i, line in enumerate(file.readlines()): 77 | if "theta" in line: 78 | start = i 79 | elif "end" in line and start > 0: 80 | end.append(i) 81 | 82 | data = {} 83 | 84 | for i, e in enumerate(end): 85 | file.seek(0) # Go back to start of file 86 | 87 | # Read data into a Pandas DataFrame 88 | nrows = e - start - 2 89 | data[i] = pd.read_csv(file, skiprows=start + 1, nrows=nrows, 90 | skipinitialspace=True, delim_whitespace=True, 91 | names=names, dtype=float) 92 | start = e 93 | return data 94 | 95 | 96 | def read_tlevel(path="T_LEVEL.OUT", usecols=None): 97 | """Method to read the T_LEVEL.OUT output file. 98 | 99 | Parameters 100 | ---------- 101 | path: str, optional 102 | String with the name of the t_level out file. default is 103 | "T_LEVEL.OUT". 104 | usecols: list of str optional 105 | List with the names of the columns to import. By default 106 | only the real fluxes are imported and not the cumulative 107 | fluxes. Options are: "rTop", "rRoot", "vTop", "vRoot", "vBot", 108 | "sum(rTop)", "sum(rRoot)", "sum(vTop)", "sum(vRoot)", "sum(vBot)", 109 | "hTop", "hRoot", "hBot", "RunOff", "sum(RunOff)", "Volume", 110 | "sum(Infil)", "sum(Evap)", "TLevel", "Cum(WTrans)", "SnowLayer". 111 | 112 | Returns 113 | ------- 114 | data: pandas.DataFrame 115 | Pandas with the t_level data 116 | 117 | """ 118 | data = _read_file(path=path, start="rTop", idx_col="Time", 119 | remove_first_row=True, usecols=usecols) 120 | data = data.set_index(pd.to_numeric(data.index, errors='coerce')) 121 | return data 122 | 123 | 124 | def read_alevel(path="A_LEVEL.OUT", usecols=None): 125 | """Method to read the A_LEVEL.OUT output file. 126 | 127 | Parameters 128 | ---------- 129 | path: str, optional 130 | String with the name of the t_level out file. default is 131 | "A_LEVEL.OUT". 132 | usecols: list of str optional 133 | List with the names of the columns to import. 134 | 135 | Returns 136 | ------- 137 | data: pandas.DataFrame 138 | Pandas with the a_level data 139 | 140 | """ 141 | data = _read_file(path=path, start="Time", idx_col="Time", 142 | remove_first_row=True, usecols=usecols) 143 | return data 144 | 145 | 146 | def read_solute(path="SOLUTE1.OUT"): 147 | data = _read_file(path=path, start="Time", idx_col="Time", 148 | remove_first_row=True) 149 | return data 150 | 151 | 152 | @check_file_path 153 | def _read_file(path, start, end="end", usecols=None, idx_col=None, 154 | remove_first_row=False): 155 | """Internal method to read Hydrus output files. 156 | 157 | Parameters 158 | ---------- 159 | path: str 160 | String with the filepath. 161 | start: str 162 | String that determines the start of the data to be imported. 163 | end: str, optional 164 | String that determines the end of the data to be imported. 165 | usecols: list, optional 166 | List with the names of the columns to import. Default is all 167 | columns. 168 | idx_col: str, optional 169 | String with the name used for the index column. 170 | remove_first_row: bool, optional 171 | Remove the first row if True. Default is False. 172 | 173 | Returns 174 | ------- 175 | data: pandas.DataFrame 176 | Pandas DataFrame with the imported data. 177 | 178 | """ 179 | with open(path) as file: 180 | # Find the starting line 181 | for i, line in enumerate(file.readlines()): 182 | if start in line: 183 | s = i 184 | elif end in line: 185 | e = i 186 | break 187 | file.seek(0) # Go back to start of file 188 | 189 | # Read data into a Pandas DataFrame 190 | data = pd.read_csv(file, skiprows=s, nrows=e - s - 2, usecols=usecols, 191 | index_col=idx_col, skipinitialspace=True, 192 | delim_whitespace=True) 193 | 194 | if remove_first_row: 195 | data = data.drop(index=data.index[0]).apply(pd.to_numeric, 196 | errors="ignore") 197 | else: 198 | data = data.apply(pd.to_numeric, errors="ignore") 199 | 200 | return data 201 | 202 | 203 | @check_file_path 204 | def read_obs_node(path="OBS_NODE.OUT", nodes=None, conc=False): 205 | """Method to read the OBS_NODE.OUT output file. 206 | 207 | Parameters 208 | ---------- 209 | nodes 210 | path: str, optional 211 | String with the name of the OBS_NODE out file. default is 212 | "OBS_NODE.OUT". 213 | nodes: list of ints 214 | conc: boolean, optional 215 | 216 | Returns 217 | ------- 218 | data: dict 219 | Dictionary with the node as a key and a Pandas DataFrame as a 220 | value. 221 | 222 | """ 223 | data = {} 224 | with open(path) as file: 225 | # Find the starting times to read the information 226 | for i, line in enumerate(file.readlines()): 227 | if "time" in line: 228 | start = i 229 | elif "end" in line: 230 | end = i 231 | break 232 | 233 | for i, node in enumerate(nodes): 234 | file.seek(0) 235 | if i == 0: 236 | usecols = ["time", "h", "theta", "Temp"] 237 | if conc: 238 | usecols.append("Conc") 239 | else: 240 | usecols = ["time", "h." + str(i), "theta." + str(i), 241 | "Temp." + str(i)] 242 | if conc: 243 | usecols.append("Conc." + str(i)) 244 | df = pd.read_csv(file, skiprows=start, index_col=0, 245 | skipinitialspace=True, delim_whitespace=True, 246 | nrows=end - start - 1, usecols=usecols) 247 | if conc: 248 | df.columns = ["h", "theta", "Temp", "Conc"] 249 | else: 250 | df.columns = ["h", "theta", "Temp"] 251 | data[node] = df 252 | 253 | return data 254 | 255 | 256 | @check_file_path 257 | def read_nod_inf(path="NOD_INF.OUT", times=None): 258 | """Method to read the NOD_INF.OUT output file. 259 | 260 | Parameters 261 | ---------- 262 | path: str, optional 263 | String with the name of the NOD_INF out file. default is 264 | "NOD_INF.OUT". 265 | times: int, optional 266 | Create a DataFrame with nodal values of the pressure head, 267 | the water content, the solution and sorbed concentrations, and 268 | temperature, etc, at the time "times". default is None. 269 | 270 | Returns 271 | ------- 272 | data: dict 273 | Dictionary with the time as a key and a Pandas DataFrame as a 274 | value. 275 | 276 | """ 277 | use_times = [] 278 | start = [] 279 | end = [] 280 | 281 | with open(path) as file: 282 | # Find the starting times to read the information 283 | for i, line in enumerate(file.readlines()): 284 | if "Time" in line and "Date" not in line: 285 | time = line.replace(" ", "").split(":")[1].replace("\n", "") 286 | use_times.append(float(time)) 287 | elif "Node" in line: 288 | start.append(i) 289 | elif "end" in line: 290 | end.append(i) 291 | if times is None: 292 | times = use_times 293 | # Read the data into a Pandas DataFrame 294 | data = {} 295 | for s, e, time in zip(start, end, use_times): 296 | if time in times: 297 | file.seek(0) # Go back to start of file 298 | data[time] = pd.read_csv(file, skiprows=s, 299 | skipinitialspace=True, 300 | delim_whitespace=True, 301 | nrows=e - s - 2) 302 | data[time] = data[time].drop([0]) 303 | data[time] = data[time].apply(pd.to_numeric) 304 | if len(data) is 1: 305 | return next(iter(data.values())) 306 | else: 307 | return data 308 | 309 | 310 | @check_file_path 311 | def read_balance(path="BALANCE.OUT", usecols=None): 312 | """Method to read the BALANCE.OUT output file. 313 | 314 | Parameters 315 | ---------- 316 | path: str, optional 317 | String with the name of the run_inf out file. default is 318 | "BALANCE.OUT". 319 | usecols: list of str optional 320 | List with the names of the columns to import. By default: 321 | "Area","W-volume","In-flow","h Mean","Top Flux", 322 | "Bot Flux","WatBalT","WatBalR". 323 | 324 | Returns 325 | ------- 326 | data: pandas.DataFrame 327 | Pandas with the balance data 328 | 329 | """ 330 | if usecols is None: 331 | usecols = ["Area", "W-volume", "In-flow", "h Mean", "Top Flux", 332 | "Bot Flux", "WatBalT", "WatBalR"] 333 | 334 | lines = open(path).readlines() 335 | use_times = [] 336 | start = [] 337 | end = [16] 338 | for i, line in enumerate(lines): 339 | for x in usecols: 340 | if x in line: 341 | line1 = x 342 | line2 = line.replace("\n", "").split(" ")[-1] 343 | line3 = line.replace(" ", " ").split(" ")[-2] 344 | lines[i] = [line1, line2, line3] 345 | 346 | if "Time" in line and "Date" not in line: 347 | time = float( 348 | line.replace(" ", "").split("]")[1].replace("\n", "")) 349 | use_times.append(time) 350 | if "Area" in line: 351 | start.append(i) 352 | if "WatBalR" in line: 353 | end.append(i + 1) 354 | if "Sub-region" in line: 355 | subreg = line.replace(" ", " ").replace("\n", "").split(" ")[-1] 356 | 357 | data = {} 358 | for s, e, time in zip(start, end, use_times): 359 | df = pd.DataFrame(lines[s:e]).set_index(0).T 360 | index = {} 361 | for x in range(int(subreg) + 1): 362 | index[x + 1] = x 363 | df = df.rename(index=index) 364 | data[time] = df 365 | 366 | return data 367 | -------------------------------------------------------------------------------- /source/TEMPER.FOR: -------------------------------------------------------------------------------- 1 | * Source file TEMPER.FOR ||||||||||||||||||||||||||||||||||||||||||||||| 2 | 3 | * Calculation of heat transport 4 | 5 | subroutine Temper(N,NMat,x,dt,t,MatNum,TempO,TempN,TPar,Ampl,B,D, 6 | ! E,F,vOld,vNew,ThOld,ThNew,Cap,Cond,Sink,tPeriod, 7 | ! kTopT,tTop,kBotT,tBot,lVapor,ThVOld,ThVNew, 8 | ! vVOld,vVNew,g0,lEnBal,HeatFl,xConv,tConv,dtMaxT, 9 | ! iCampbell,iTemp) 10 | 11 | logical lVapor,lEnBal 12 | double precision B,D,E,F,t 13 | dimension x(N),MatNum(N),TempO(N),TempN(N),TPar(10,NMat),B(N), 14 | ! D(N),E(N),F(N),vOld(N),vNew(N),ThOld(N),ThNew(N),Cap(N), 15 | ! Cond(N),Sink(N),ThVOld(N),ThVNew(N),vVOld(N),vVNew(N), 16 | ! g0(N) 17 | 18 | Cw=TPar(9,1) 19 | PI=3.141592654 20 | tTopA=tTop 21 | if(tPeriod.gt.0.) tTopA=tTop+Ampl*sin(2.*PI*sngl(t)/tPeriod-7.*PI/ 22 | ! 12.) 23 | 24 | * Upper Flux BC 25 | if(kTopT.lt.0.and..not.lEnBal) then 26 | HeatFl=Cw*tTopA*(vNew(N)+vOld(N))/2. 27 | if(lVapor) then 28 | Cv=1.8e+6/xConv/tConv/tConv 29 | xLat=xLatent(TempN(N))/xConv/tConv/tConv 30 | HeatFl=HeatFl+Cv*tTopA*(vVNew(N)+vVOld(N))/2.+ 31 | ! xLat*(vVNew(N)+vVOld(N))/2. 32 | end if 33 | end if 34 | 35 | do 11 Level=1,2 36 | if(Level.eq.1) then 37 | call TempCap(N,NMat,MatNum,ThOld,vOld,Cap,Cond,TPar,iCampbell, 38 | ! xConv,tConv) 39 | else 40 | call TempCap(N,NMat,MatNum,ThNew,vNew,Cap,Cond,TPar,iCampbell, 41 | ! xConv,tConv) 42 | end if 43 | call SetUpHeat(N,Level,lEnBal,kBotT,kTopT,tBot,tTopA,HeatFl,dt, 44 | ! x,Cw,B,D,E,F,TempO,Cap,Cond,vNew,vOld,Sink) 45 | 11 continue 46 | 47 | * Adjust matrix for vapor flow effects 48 | if(lVapor) call TempAdj(N,x,dt,TempN,TempO,B,D,E,F,vVOld,vVNew,g0, 49 | ! kTopT,kBotT,tTopA,tBot,ThVNew,ThVOld, 50 | ! xConv,tConv) 51 | 52 | * Solve matrix equation 53 | call BanSol(N,B,D,E,F) 54 | do 12 i=1,N 55 | TempN(i)=sngl(F(i)) 56 | 12 continue 57 | 58 | * Max time step 59 | dtMaxT=1.e+30 60 | Cv=1.8e+6/xConv/tConv/tConv 61 | if(lEnBal) then 62 | if(iTemp.eq.0) then 63 | dtMaxT=0. 64 | dtMaxT=abs(Cap(N)*(x(N)-x(N-1))/ 65 | ! (max(0.1,TempN(N))*(Cw*vNew(N)+Cv*vVNew(N)))) 66 | end if 67 | dTempMax=2. 68 | dTemp=abs(TempN(N)-TempO(N)) 69 | dtMaxT=min(dtMaxT,dTempMax/max(0.1,dTemp)*dt) 70 | end if 71 | 72 | return 73 | end 74 | 75 | ************************************************************************ 76 | 77 | subroutine SetUpHeat(N,Level,lEnBal,kBotT,kTopT,tBot,tTopA,HeatFl, 78 | ! dt,x,Cw,B,D,E,F,TempO,Cap,Cond,vNew,vOld, 79 | ! Sink) 80 | 81 | logical lEnBal 82 | double precision B,D,E,F 83 | dimension x(N),TempO(N),B(N),D(N),E(N),F(N),vOld(N),vNew(N), 84 | ! Cap(N),Cond(N),Sink(N) 85 | 86 | dx=x(2)-x(1) 87 | if(kBotT.gt.0) then 88 | D(1)=1. 89 | E(1)=0. 90 | F(1)=tBot 91 | else if(kBotT.lt.0) then 92 | if(Level.eq.2) then 93 | D(1)=dx/2./dt*Cap(1)+(Cond(1)+Cond(2))/dx/4.+ 94 | ! Cw*(2.*vNew(1)+vNew(2))/12.+ 95 | ! dx/24.*Cw*(3.*Sink(1)+Sink(2)) 96 | E(1)=-(Cond(1)+Cond(2))/4./dx+ 97 | ! Cw*(2.*vNew(2)+vNew(1))/12.+dx/24.*Cw*(Sink(1)+Sink(2)) 98 | else 99 | F(1)=TempO(1)*(dx/2./dt*Cap(1)- 100 | ! (Cond(1)+Cond(2))/dx/4.- 101 | ! Cw*(2.*vOld(1)+vOld(2))/12.- 102 | ! dx/24.*Cw*(3.*Sink(1)+Sink(2)))+ 103 | ! TempO(2)*((Cond(1)+Cond(2))/4./dx- 104 | ! Cw*(2.*vOld(2)+vOld(1))/12.- 105 | ! dx/24.*Cw*(Sink(1)+Sink(2)))+ 106 | ! tBot*Cw*(vNew(1)+vOld(1))/2. 107 | end if 108 | else 109 | D(1)=-1. 110 | E(1)=1. 111 | F(1)=0. 112 | end if 113 | do 12 i=2,N-1 114 | dxA=x(i)-x(i-1) 115 | dxB=x(i+1)-x(i) 116 | dx=(x(i+1)-x(i-1))/2. 117 | if(Level.eq.2) then 118 | B(i)=-(Cond(i)+Cond(i-1))/4./dxA-Cw*(vNew(i)+ 119 | ! 2.*vNew(i-1))/12.+ 120 | ! dxA/24.*Cw*(Sink(i-1)+Sink(i)) 121 | D(i)=(Cond(i-1)+Cond(i))/4./dxA+(Cond(i)+Cond(i+1))/4./dxB+ 122 | ! dx/dt*Cap(i)+ 123 | ! Cw*(vNew(i+1)-vNew(i-1))/12.+ 124 | ! dxA/24.*Cw*(Sink(i-1)+3.*Sink(i))+ 125 | ! dxB/24.*Cw*(3.*Sink(i)+Sink(i+1)) 126 | E(i)=-(Cond(i)+Cond(i+1))/4./dxB+ 127 | ! Cw*(2.*vNew(i+1)+vNew(i))/12.+ 128 | ! dxB/24*Cw*(Sink(i+1)+Sink(i)) 129 | else 130 | F(i)=TempO(i-1)*((Cond(i)+Cond(i-1))/4./dxA+ 131 | ! Cw*(vOld(i)+2.*vOld(i-1))/12.- 132 | ! dxA/24.*Cw*(Sink(i-1)+Sink(i)))+ 133 | ! TempO(i)*(-Cw*(vOld(i+1)-vOld(i-1))/12.+ 134 | ! dx/dt*Cap(i)- 135 | ! (Cond(i+1)+Cond(i))/4./dxB- 136 | ! (Cond(i)+Cond(i-1))/4./dxA- 137 | ! dxA/24.*Cw*(Sink(i-1)+3.*Sink(i))- 138 | ! dxB/24.*Cw*(3.*Sink(i)+Sink(i+1)))+ 139 | ! TempO(i+1)*((Cond(i+1)+Cond(i))/4./dxB- 140 | ! Cw*(2.*vOld(i+1)+vOld(i))/12.- 141 | ! dxB/24.*Cw*(Sink(i+1)+Sink(i))) 142 | end if 143 | 12 continue 144 | if(kTopT.gt.0) then 145 | B(N)=0. 146 | D(N)=1. 147 | F(N)=tTopA 148 | else if(kTopT.lt.0) then 149 | dx=x(N)-x(N-1) 150 | if(Level.eq.2) then 151 | B(N)=-(Cond(N)+Cond(N-1))/4./dx- 152 | ! Cw*(vNew(N)+2.*vNew(N-1))/12.+ 153 | ! dx/24.*Cw*(Sink(N-1)+Sink(N)) 154 | D(N)=dx/2./dt*Cap(N)+ 155 | ! (Cond(N-1)+Cond(N))/4./dx- 156 | ! Cw*(2.*vNew(N)+vNew(N-1))/12.+ 157 | ! dx/24.*Cw*(Sink(N-1)+3.*Sink(N)) 158 | else 159 | F(N)=TempO(N-1)*((Cond(N)+Cond(N-1))/4./dx+ 160 | ! Cw*(vOld(N)+2.*vOld(N-1))/12.- 161 | ! dx/24.*Cw*(Sink(N-1)+Sink(N)))+ 162 | ! TempO(N)*(dx/2./dt*Cap(N)- 163 | ! (Cond(N-1)+Cond(N))/4./dx+ 164 | ! Cw*(2.*vOld(N)+vOld(N-1))/12.- 165 | ! dx/24.*Cw*(Sink(N-1)+3.*Sink(N))) 166 | if(.not.lEnBal) then 167 | F(N)=F(N)-HeatFl 168 | F(N)=F(N)-min(0.,HeatFl) 169 | else 170 | F(N)=F(N)-HeatFl 171 | end if 172 | end if 173 | end if 174 | 175 | return 176 | end 177 | 178 | ************************************************************************ 179 | 180 | subroutine TempAdj(N,x,dt,TempN,TempO,B,D,E,F,vVOld,vVNew,g0, 181 | ! kTopT,kBotT,tTopA,tBot,ThVNew,ThVOld,xConv, 182 | ! tConv) 183 | 184 | double precision B,D,E,F 185 | real Lat 186 | dimension x(N),TempN(N),TempO(N),B(N),D(N),E(N),F(N),vVOld(N), 187 | ! vVNew(N),ThVNew(N),ThVOld(N),g0(N) 188 | 189 | * Cv - volumetric specific heat of vapor [J/m3/K,kg/m/s2/K] 190 | * Lat - volumetric latent heat of vaporization of water [J/m3,kg/m/s2] 191 | 192 | Cv=1.8e+6/xConv/tConv/tConv 193 | 194 | do 13 iLevel=1,2 195 | do 11 i=1,N 196 | if(iLevel.eq.1) then 197 | if(i.eq.1) then 198 | vVGrad=(vVOld(i+1)-vVOld(i))/(x(i+1)-x(i)) 199 | else if(i.eq.N) then 200 | vVGrad=(vVOld(i)-vVOld(i-1))/(x(i)-x(i-1)) 201 | else 202 | vVGrad=(vVOld(i+1)-vVOld(i-1))/(x(i+1)-x(i-1))*2. 203 | end if 204 | Lat=xLatent(TempO(i))/xConv/tConv/tConv 205 | else 206 | if(i.eq.1) then 207 | vVGrad=(vVNew(i+1)-vVNew(i))/(x(i+1)-x(i)) 208 | else if(i.eq.N) then 209 | vVGrad=(vVNew(i)-vVNew(i-1))/(x(i)-x(i-1)) 210 | else 211 | vVGrad=(vVNew(i+1)-vVNew(i-1))/(x(i+1)-x(i-1))*2. 212 | end if 213 | Lat=xLatent(TempN(i))/xConv/tConv/tConv 214 | end if 215 | ThVGrad=(ThVNew(i)-ThVOld(i))/dt 216 | g0(i)=-Lat*(vVGrad+ThVGrad) 217 | 11 continue 218 | 219 | dx=x(2)-x(1) 220 | if(kBotT.lt.0) then 221 | if(iLevel.eq.1) then 222 | F(1)=F(1)+TempO(1)*(-Cv*(2.*vVOld(1)+vVOld(2))/12.)+ 223 | ! TempO(2)*(-Cv*(2.*vVOld(2)+vVOld(1))/12.)+ 224 | ! dx/12.*(2.*g0(1)+g0(2))+ 225 | ! tBot*Cv*(vVNew(1)+vVOld(1))/2. 226 | else 227 | D(1)=D(1)+Cv*(2.*vVNew(1)+vVNew(2))/12. 228 | E(1)=E(1)+Cv*(2.*vVNew(2)+vVNew(1))/12. 229 | F(1)=F(1)+dx/12.*(2.*g0(1)+g0(2)) 230 | end if 231 | end if 232 | do 12 i=2,N-1 233 | dxA=x(i)-x(i-1) 234 | dxB=x(i+1)-x(i) 235 | dx=(x(i+1)-x(i-1))/2. 236 | if(iLevel.eq.1) then 237 | F(i)=F(i)+TempO(i-1)*( Cv*(vVOld(i) +2.*vVOld(i-1))/12.)+ 238 | ! TempO(i) *(-Cv*(vVOld(i+1) -vVOld(i-1))/12.)+ 239 | ! TempO(i+1)*(-Cv*(2.*vVOld(i+1) +vVOld(i))/12.)+ 240 | ! dxA*(g0(i-1)+2.*g0(i))/12.+dxB*(2.*g0(i)+g0(i+1))/12. 241 | else 242 | B(i)=B(i)-Cv*(vVNew(i)+2.*vVNew(i-1))/12. 243 | D(i)=D(i)+Cv*(vVNew(i+1)-vVNew(i-1))/12. 244 | E(i)=E(i)+Cv*(2.*vVNew(i+1)+vVNew(i))/12. 245 | F(i)=F(i)+dxA*(g0(i-1)+2.*g0(i))/12.+ 246 | ! dxB*(2.*g0(i)+g0(i+1))/12. 247 | end if 248 | 12 continue 249 | if(kTopT.lt.0) then 250 | dx=x(N)-x(N-1) 251 | if(iLevel.eq.1) then 252 | F(N)=F(N)+TempO(N-1)*(Cv*(vVOld(N)+2.*vVOld(N-1))/12.)+ 253 | ! TempO(N) *(Cv*(2.*vVOld(N)+vVOld(N-1))/12.)+ 254 | ! dx/12.*(g0(N-1)+2.*g0(N)) 255 | if(kTopT.eq.-1) F(N)=F(N)-tTopA*Cv*(vVNew(N)+vVOld(N))/2. 256 | else 257 | B(N)=B(N)-Cv*(vVNew(N)+2.*vVNew(N-1))/12. 258 | D(N)=D(N)-Cv*(2.*vVNew(N)+vVNew(N-1))/12. 259 | F(N)=F(N)+dx/12.*(g0(N-1)+2.*g0(N)) 260 | end if 261 | end if 262 | 13 continue 263 | 264 | return 265 | end 266 | 267 | ************************************************************************ 268 | 269 | subroutine TempCap(N,NMat,MatNum,Theta,Veloc,Cap,Cond,TPar, 270 | ! iCampbell,xConv,tConv) 271 | 272 | dimension MatNum(N),Theta(N),Veloc(N),Cap(N),Cond(N), 273 | ! TPar(10,NMat) 274 | 275 | do 11 i=1,N 276 | M=MatNum(i) 277 | th=Theta(i) 278 | v=Veloc(i) 279 | Cap(i)=TPar(7,M)*TPar(1,M)+TPar(8,M)*TPar(2,M)+TPar(9,M)*th 280 | 281 | if(Cap(i).eq.0.) then 282 | write(*,*) 'Heat capacity is equal to zero' 283 | read(*,*) 284 | stop 285 | end if 286 | Cond(i)=amax1(0.,TPar(4,M)+TPar(5,M)*th+TPar(6,M)*sqrt(th)) 287 | if(iCampbell.eq.1) then 288 | * TPar(1,M) - the volume fraction of solids 289 | * TPar(4,M) - the volume fraction of quartz 290 | * TPar(5,M) - the volume fraction of other minerals 291 | * TPar(6,M) - the volume fraction of clay 292 | AA=(0.57+1.73*TPar(4,M)+0.93*TPar(5,M))/(1.-0.74*TPar(4,M)- 293 | ! 0.49*TPar(5,M))-2.8*TPar(1,M)*(1.-TPar(1,M)) 294 | BB=2.8*TPar(1,M) 295 | xc=amax1(0.005,TPar(6,M)) 296 | CC=1.+2.6/sqrt(xc) 297 | DD=0.03+0.7*TPar(1,M)**2 298 | EE=4. 299 | XLamb=AA+BB*th-(AA-DD)*exp(-(CC*th)**EE) 300 | Cond(i)=amax1(0.,XLamb*xConv/tConv/tConv/tConv) 301 | end if 302 | 303 | Cond(i)=Cond(i)+TPar(9,M)*TPar(3,M)*abs(v) 304 | 11 continue 305 | return 306 | end 307 | 308 | ************************************************************************ 309 | 310 | real function xLatent(Temp) 311 | 312 | * Function calculating the volumetric latent heat of vaporization of 313 | * water [J/m3,kg/m/s2] 314 | * row - density of soil water [kg/m3] 315 | * xLw - latent heat of vaporization of water [J/kg,ML2/T2] 316 | 317 | row=(1.-7.37e-6*(Temp-4.)**2+3.79e-8*(Temp-4.)**3)*1000. 318 | xLw=2.501e+06-2369.2*Temp 319 | xLatent=row*xLw 320 | 321 | return 322 | end 323 | 324 | * |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -------------------------------------------------------------------------------- /source/SINK.FOR: -------------------------------------------------------------------------------- 1 | * Source file SINK.FOR ||||||||||||||||||||||||||||||||||||||||||||||||| 2 | 3 | subroutine SetSnk(N,NMat,MatNum,x,hRoot,vRoot,Sink,TPot,hNew, 4 | ! lMoSink,lSolRed,lSolAdd,P0,POptm,P2H,P2L,P3,r2H, 5 | ! r2L,aOsm,c50,P3c,Beta,lChem,NS,NSD,Conc,cRoot, 6 | ! lMsSink,ThNew,ParD,dt,OmegaC,iModel,Con,lOmegaW, 7 | ! OmegaW,rBot) 8 | 9 | logical lChem,lMoSink,lSolRed,lSolAdd,lMsSink,lHanks,lOmegaW 10 | dimension x(N),MatNum(N),hNew(N),POptm(NMat),Beta(N),Sink(N), 11 | ! Conc(NSD,N),cRoot(NS),aOsm(NS),ThNew(N),ParD(11,NMat), 12 | ! Con(N) 13 | 14 | Compen=1. 15 | nStep=1 16 | if(OmegaC.lt.1.) nStep=2 17 | Omega=0. 18 | 19 | vRoot=0. 20 | hRoot=0. 21 | ARoot=0. 22 | do 11 ii=1,NS 23 | cRoot(ii)=0. 24 | 11 continue 25 | 26 | lHanks=.false. 27 | if(lHanks) then 28 | hR=P3 29 | do 22 iter=1,5 30 | Sum1=0. 31 | Sum2=0. 32 | xConst=1. ! Penalty for distance 33 | do 21 i=2,N 34 | if(Beta(i).gt.0.) then 35 | if(i.eq.N) then 36 | dxM=(x(i)-x(i-1))/2. 37 | else 38 | dxM=(x(i+1)-x(i-1))/2. 39 | end if 40 | if(hNew(i).gt.hR-xConst*x(i)) then 41 | Sum1=Sum1+Con(i)*Beta(i)*(hNew(i)+xConst*x(i))*dxM 42 | Sum2=Sum2+Con(i)*Beta(i)*dxM 43 | end if 44 | end if 45 | 21 continue 46 | hR=max((Sum1-TPot)/Sum2,P3) 47 | 22 continue 48 | do 23 i=1,N 49 | if(Beta(i).gt.0.) then 50 | if(i.eq.N) then 51 | dxM=(x(i)-x(i-1))/2. 52 | else 53 | dxM=(x(i+1)-x(i-1))/2. 54 | end if 55 | Sink(i)=max(-Con(i)*Beta(i)*(hR-xConst*x(i)-hNew(i)),0.) 56 | c Sink(i)=-Con(i)*Beta(i)*(hR-xConst*x(i)-hNew(i)) 57 | vRoot=vRoot+Sink(i)*dxM 58 | hRoot=hRoot+hNew(i)*dxM 59 | ARoot=ARoot+dxM 60 | end if 61 | 23 continue 62 | if(ARoot.gt.0.001) hRoot=hRoot/ARoot 63 | return 64 | end if 65 | 66 | do 16 iStep=1,nStep 67 | do 13 i=2,N 68 | if(Beta(i).gt.0.) then 69 | if(i.eq.N) then 70 | dxM=(x(i)-x(i-1))/2. 71 | else 72 | dxM=(x(i+1)-x(i-1))/2. 73 | end if 74 | M=MatNum(i) 75 | hRed=hNew(i) 76 | SAlfa=1. 77 | if(lChem.and.lSolRed) then 78 | cRed=0. 79 | do 15 j=1,NS 80 | cRed=cRed+aOsm(j)*Conc(j,i) 81 | 15 continue 82 | if(lSolAdd) then 83 | hRed=hRed+cRed 84 | else 85 | SAlfa=FSAlfa(lMsSink,cRed,c50,P3c) 86 | end if 87 | end if 88 | Alfa=FAlfa(lMoSink,TPot,hRed,P0,POptm(M),P2H,P2L,P3,r2H,r2L) 89 | if(iStep.ne.nStep) then 90 | Omega=Omega+Alfa*SAlfa*Beta(i)*dxM 91 | goto 13 92 | else 93 | Compen=1. 94 | if(Omega.lt.OmegaC.and.Omega.gt.0.) Compen=OmegaC 95 | if(Omega.ge.OmegaC) Compen=Omega 96 | end if 97 | Sink(i)=Alfa*SAlfa*Beta(i)*TPot/Compen 98 | if(ThNew(i)-0.00025.lt.ParD(1,MatNum(i))) Sink(i)=0. 99 | if(lMoSink) PMin=P3 100 | if(.not.lMosink) PMin=10.*P0 101 | ThLimit=FQ(iModel,PMin,ParD(1,MatNum(i))) 102 | c Sink(i)=min(Sink(i),0.5*(ThNew(i)-ParD(1,MatNum(i)))/dt) 103 | Sink(i)=min(Sink(i),max(0.,0.5*(ThNew(i)-ThLimit)/dt)) 104 | vRoot=vRoot+Sink(i)*dxM 105 | hRoot=hRoot+hNew(i)*dxM 106 | do 12 ii=1,NS 107 | if(lChem) cRoot(ii)=cRoot(ii)+Conc(ii,i)*dxM 108 | 12 continue 109 | ARoot=ARoot+dxM 110 | else 111 | Sink(i)=0. 112 | end if 113 | if(Beta(i).lt.0.) then ! Eddy Woehling's modification 114 | if(i.eq.N) then 115 | dxM=(x(i)-x(i-1))/2. 116 | else 117 | dxM=(x(i+1)-x(i-1))/2. 118 | end if 119 | Sink(i)=Beta(i)*rBot 120 | Sink(i)=max(Sink(i),0.5*(ThNew(i)-ParD(2,MatNum(i)))/dt) 121 | end if 122 | 13 continue 123 | 16 continue 124 | if(ARoot.gt.0.001) then 125 | hRoot=hRoot/ARoot 126 | do 14 ii=1,NS 127 | cRoot(ii)=cRoot(ii)/ARoot 128 | 14 continue 129 | end if 130 | if(lOmegaW.and.TPot.gt.0.) OmegaW=vRoot/TPot 131 | return 132 | end 133 | 134 | ************************************************************************ 135 | 136 | * Subroutine calculating root solute uptake with and without compensation 137 | 138 | subroutine SetSSnk(jS,NS,N,t,x,Beta,Sink,SinkS,NSD,Conc,OmegaW, 139 | ! cRootMax,lActRSU,OmegaS,SPot,rKM,cMin) 140 | 141 | double precision t 142 | logical lActRSU,lLast 143 | dimension x(N),Beta(N),Sink(N),SinkS(N),Conc(NSD,N) 144 | 145 | * Inputs: 146 | * SPot - potential root solute uptake 147 | * OmegaS - solute stress index 148 | * rKM - Michaelis-Menten constant 149 | * lActRSU - consider active root solute uptake 150 | * cRootMax - maximum concentration for the passive solute uptake 151 | 152 | * From Water Flow 153 | * Sink(i) - Root water uptake 154 | * OmegaW - ratio of actual and potential transpiration 155 | 156 | * SPUptake - passive root solute uptake (step 1) 157 | * SAUptakeP - potential active solute uptake (step 1) 158 | * SAUptakeA - uncompensated actual active solute uptake (step 2) 159 | * SAUptakeA - compensated actual active solute uptake (step 3) 160 | * SinkS(i) - local active solute uptake 161 | 162 | * Initialization 163 | Compen=1. 164 | nStep=1 165 | if(lActRSU) nStep=2 166 | if(lActRSU.and.OmegaS.lt.1.) nStep=3 167 | * step 1: Passive uptake 168 | * step 2: Active uptake without compensation 169 | * step 3: Active uptake with compensation 170 | lLast=.false. ! Active uptake only for the last solute 171 | if(lLast.and.jS.lt.NS) nStep=1 172 | Omega=0. 173 | SPUptake=0. 174 | do 10 i=1,N 175 | SinkS(i)=0. 176 | 10 continue 177 | 178 | do 12 iStep=1,nStep 179 | SAUptakeA=0. 180 | do 11 i=1,N 181 | if(Beta(i).gt.0.) then 182 | if(i.eq.N) then 183 | dxM=(x(i)-x(i-1))/2. 184 | else if(i.eq.1) then 185 | dxM=(x(i)-x(i+1))/2. 186 | else 187 | dxM=(x(i+1)-x(i-1))/2. 188 | end if 189 | cc=amax1(Conc(jS,i)-cMin,0.) 190 | if(iStep.eq.1) then 191 | SinkS(i)=Sink(i)*amax1(amin1(Conc(jS,i),cRootMax),0.) 192 | SPUptake=SPUptake+SinkS(i)*dxM 193 | * This is needed only for the last node, but that node may not have beta 194 | SAUptakeP=amax1(SPot*OmegaW-SPUptake,0.) 195 | else if(iStep.eq.2) then 196 | AUptakeA=cc/(rKM+cc)*Beta(i)*SAUptakeP 197 | Omega=Omega+AUptakeA*dxM 198 | if(nStep.eq.2) SinkS(i)=SinkS(i)+AUptakeA 199 | * This is needed only for the last node, but that node may not have beta 200 | SAUptakeA =Omega 201 | SAUptakeAN=Omega 202 | if(SAUptakeP.gt.0.) Omega1=Omega/SAUptakeP 203 | else if(iStep.eq.3) then 204 | * This is needed only for the first node, but that node may not have beta 205 | if(Omega1.lt.OmegaS.and.Omega1.gt.0.) Compen=OmegaS 206 | if(Omega1.ge.OmegaS) Compen=Omega1 207 | if(Compen.gt.0.) AUptakeA=cc/(rKM+cc)* 208 | ! Beta(i)*SAUptakeP/Compen 209 | SinkS(i)=SinkS(i)+AUptakeA 210 | SAUptakeA=SAUptakeA+AUptakeA*dxM 211 | end if 212 | else 213 | SinkS(i)=0. 214 | end if 215 | 11 continue 216 | if(iStep.eq.nStep.and.jS.eq.NS) 217 | ! write(78,100) t,SPUptake,SAUptakeP,SAUptakeA,SAUptakeAN ! the last is uncompensated 218 | 12 continue 219 | return 220 | 221 | 100 format(3x,e14.7,1x,4e12.4) 222 | end 223 | 224 | ************************************************************************ 225 | 226 | real function FSAlfa(lMode,cRed,c50,P3c) 227 | 228 | logical lMode 229 | 230 | if(lMode) then 231 | FSAlfa=0. 232 | if(abs(c50).gt.0) FSAlfa=1./(1.+(cRed/c50)**P3c) 233 | else 234 | if(cRed.le.c50) then 235 | FSAlfa=1. 236 | else 237 | FSAlfa=max(0.,1.-(cRed-c50)*P3c*0.01) 238 | end if 239 | end if 240 | return 241 | end 242 | 243 | ************************************************************************ 244 | 245 | real function FAlfa(lMoSink,TPot,h,P0,P1,P2H,P2L,P3,r2H,r2L) 246 | 247 | logical lMoSink 248 | 249 | if(lMoSink) then 250 | if(TPot.lt.r2L) P2=P2L 251 | if(TPot.gt.r2H) P2=P2H 252 | if((TPot.ge.r2L).and.(TPot.le.r2H)) 253 | ! P2=P2H+(r2H-TPot)/(r2H-r2L)*(P2L-P2H) 254 | FAlfa=0.0 255 | if((h.gt.P3).and.(h.lt.P2)) FAlfa=(h-P3)/(P2-P3) 256 | if((h.ge.P2).and.(h.le.P1)) FAlfa=1.0 257 | if((h.gt.P1).and.(h.lt.P0).and.P0-P1.gt.0.) FAlfa=(h-P0)/(P1-P0) 258 | * Uptake even at full saturation, when both P1 and P2 are equal to zero 259 | if(h.ge.P2.and.P1.eq.0..and.P0.eq.0.) FAlfa=1.0 260 | else 261 | FAlfa=1./(1.+(h/P0)**P3) 262 | end if 263 | return 264 | end 265 | 266 | ************************************************************************ 267 | 268 | subroutine SetRG(NumNP,x,Beta,t,tRMin,tRHarv,xRMin,xRMax,RGR, 269 | ! xRoot,lRoot,iRootIn,nGrowth,rGrowth,tRPeriod) 270 | 271 | dimension x(NumNP),Beta(NumNP),rGrowth(1000,5) 272 | double precision t 273 | logical lRoot 274 | 275 | if(lRoot.and.iRootIn.eq.1) then 276 | i=1000 277 | j=5 278 | call Table(nGrowth,rGrowth,i,j,t,rDummy,rDummy,rDummy,xRoot) 279 | end if 280 | 281 | if(lRoot.and.iRootIn.eq.2) then 282 | tRoot=amod(sngl(t),tRPeriod) 283 | if(tRoot.lt.tRMin.or.tRoot.gt.tRHarv) then 284 | do 11 i=1,NumNP 285 | Beta(i)=0. 286 | 11 continue 287 | return 288 | end if 289 | xR=xRMax 290 | if(xRMin.le.0.001) xRMin=0.001 291 | tt=tRoot-tRMin 292 | xR=(xRMax*xRMin)/(xRMin+(xRMax-xRMin)*exp(-RGR*tt)) 293 | else 294 | xR=xRoot 295 | end if 296 | 297 | SBeta=0. 298 | do 12 i=2,NumNP-1 299 | if(x(i).lt.x(NumNP)-xR) then 300 | Beta(i)=0. 301 | else if(x(i).lt.x(NumNP)-0.2*xR) then 302 | Beta(i)=2.08333/xR*(1-(x(NumNP)-x(i))/xR) 303 | else 304 | Beta(i)=1.66667/xR 305 | end if 306 | if(i.ne.NumNP) then 307 | SBeta=SBeta+Beta(i)*(x(i+1)-x(i-1))/2. 308 | else 309 | SBeta=SBeta+Beta(i)*(x(i)-x(i-1))/2. 310 | end if 311 | 12 continue 312 | if(SBeta.lt.0.0001) then 313 | Beta(NumNP-1)=1./((x(NumNP)-x(NumNP-2))/2.) 314 | else 315 | do 13 i=2,NumNP-1 316 | Beta(i)=Beta(i)/SBeta 317 | 13 continue 318 | end if 319 | return 320 | end 321 | 322 | * |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 323 | 324 | * Jasper Vrugt function 325 | 326 | subroutine RootInN(NumNP,Beta,z) 327 | 328 | dimension Beta(NumNP),z(NumNP) 329 | 330 | * read input 331 | read(44,*) 332 | read(44,*) Zm,Z0,Za 333 | 334 | * coordinate of the surface 335 | ZMax =z(NumNP) 336 | 337 | * calculate non-normalized uptake intensity 338 | r1=0. 339 | r2=0. 340 | do 11 i=1,NumNP 341 | if(abs(Zm).gt.1.e-5) then 342 | r1=(Zm-(ZMax-z(i)))/Zm 343 | rRootA=Za 344 | if((ZMax-z(i)).gt.Z0) rRootA=1. 345 | r2=rRootA/(Zm)*abs(Z0-(ZMax-z(i))) 346 | r2=exp(-r2) 347 | end if 348 | Beta(i)=amax1(r1*r2,0.) 349 | 11 continue 350 | 351 | * normalize uptake intensity 352 | SBeta=Beta(NumNP)*(z(NumNP)-z(NumNP-1))/2. 353 | do 12 i=2,NumNP-1 354 | SBeta=SBeta+Beta(i)*(z(i+1)-z(i-1))/2. 355 | 12 continue 356 | do 13 i=2,NumNP 357 | if(SBeta.gt.0.) then 358 | Beta(i)=Beta(i)/SBeta 359 | else 360 | Beta(i)=0. 361 | end if 362 | 13 continue 363 | 364 | return 365 | end 366 | 367 | ************************************************************************ -------------------------------------------------------------------------------- /tests/test_data/OBS_NODE.OUT: -------------------------------------------------------------------------------- 1 | ******* Program HYDRUS 2 | ******* Growing season simulation 3 | 4 | Date: 1.10. Time: 14:57: 9 5 | Units: L = cm , T = days , M = - 6 | 7 | 8 | 9 | Node( 5) Node( 7) Node( 9) 10 | 11 | time h theta Temp Conc h theta Temp Conc h theta Temp Conc 12 | 90.010 -45.045 .3454 15.000 .100E-01 -35.041 .3578 15.000 .100E-01 -25.031 .3710 15.000 .100E-01 13 | 90.023 -45.093 .3454 15.000 .100E-01 -35.082 .3578 15.000 .100E-01 -25.065 .3709 15.000 .100E-01 14 | 90.040 -45.161 .3453 15.000 .100E-01 -35.142 .3577 15.000 .100E-01 -25.116 .3709 14.999 .100E-01 15 | 90.062 -45.242 .3452 15.000 .100E-01 -35.214 .3576 15.000 .100E-01 -25.181 .3708 14.999 .100E-01 16 | 90.090 -45.346 .3451 15.000 .100E-01 -35.310 .3575 15.000 .100E-01 -25.270 .3707 14.999 .100E-01 17 | 90.127 -45.474 .3449 15.000 .100E-01 -35.430 .3573 15.000 .100E-01 -25.384 .3705 14.999 .100E-01 18 | 90.175 -45.640 .3447 15.000 .100E-01 -35.590 .3571 15.000 .100E-01 -25.538 .3703 14.999 .100E-01 19 | 90.239 -45.853 .3444 15.000 .100E-01 -35.797 .3568 15.000 .100E-01 -25.742 .3700 14.999 .100E-01 20 | 90.323 -46.131 .3441 15.000 .100E-01 -36.071 .3565 15.000 .100E-01 -26.012 .3697 14.999 .100E-01 21 | 90.436 -46.497 .3436 15.000 .101E-01 -36.433 .3560 15.000 .101E-01 -26.370 .3692 14.999 .100E-01 22 | 90.577 -46.949 .3431 15.000 .101E-01 -36.880 .3554 15.000 .101E-01 -26.813 .3686 14.999 .101E-01 23 | 90.788 -47.619 .3423 14.999 .101E-01 -37.546 .3546 14.999 .101E-01 -27.473 .3677 14.999 .101E-01 24 | 91.000 -48.291 .3415 14.999 .101E-01 -38.211 .3538 14.999 .101E-01 -28.131 .3668 14.999 .101E-01 25 | 91.010 -48.309 .3415 14.998 .101E-01 -38.241 .3537 14.999 .101E-01 -28.162 .3668 14.998 .101E-01 26 | 91.023 -48.332 .3415 14.998 .102E-01 -38.283 .3537 14.999 .101E-01 -28.205 .3667 14.998 .101E-01 27 | 91.040 -48.351 .3415 14.998 .102E-01 -38.329 .3536 14.999 .101E-01 -28.257 .3667 14.998 .101E-01 28 | 91.062 -48.380 .3414 14.998 .102E-01 -38.384 .3535 14.999 .102E-01 -28.321 .3666 14.998 .101E-01 29 | 91.090 -48.421 .3414 14.998 .102E-01 -38.450 .3535 14.999 .102E-01 -28.399 .3665 14.998 .101E-01 30 | 91.127 -48.482 .3413 14.999 .102E-01 -38.533 .3534 14.998 .102E-01 -28.494 .3664 14.998 .101E-01 31 | 91.175 -48.574 .3412 14.999 .102E-01 -38.643 .3532 14.998 .102E-01 -28.615 .3662 14.998 .101E-01 32 | 91.239 -48.706 .3411 14.999 .102E-01 -38.787 .3531 14.998 .102E-01 -28.768 .3660 14.998 .101E-01 33 | 91.323 -48.889 .3409 14.997 .102E-01 -38.979 .3528 14.998 .102E-01 -28.965 .3657 14.998 .101E-01 34 | 91.436 -49.140 .3406 14.992 .102E-01 -39.235 .3525 14.999 .102E-01 -29.224 .3654 14.998 .102E-01 35 | 91.577 -49.456 .3402 14.987 .102E-01 -39.554 .3521 14.999 .102E-01 -29.543 .3649 14.998 .102E-01 36 | 91.788 -49.929 .3397 14.985 .103E-01 -40.028 .3515 14.998 .103E-01 -30.017 .3643 14.998 .102E-01 37 | 92.000 -50.401 .3392 14.984 .103E-01 -40.501 .3510 14.996 .103E-01 -30.489 .3637 14.998 .102E-01 38 | 92.010 -50.433 .3392 14.985 .103E-01 -40.525 .3509 14.997 .103E-01 -30.511 .3637 14.998 .102E-01 39 | 92.023 -50.462 .3391 14.984 .103E-01 -40.541 .3509 14.997 .103E-01 -30.531 .3637 14.998 .102E-01 40 | 92.040 -50.510 .3391 14.984 .103E-01 -40.572 .3509 14.997 .103E-01 -30.561 .3636 14.998 .102E-01 41 | 92.062 -50.569 .3390 14.984 .103E-01 -40.614 .3508 14.997 .103E-01 -30.601 .3636 14.998 .102E-01 42 | 92.090 -50.646 .3389 14.983 .103E-01 -40.676 .3508 14.997 .103E-01 -30.657 .3635 14.998 .102E-01 43 | 92.127 -50.739 .3388 14.981 .103E-01 -40.757 .3507 14.996 .103E-01 -30.732 .3634 14.998 .102E-01 44 | 92.175 -50.859 .3387 14.978 .103E-01 -40.866 .3505 14.996 .103E-01 -30.835 .3633 14.998 .102E-01 45 | 92.239 -51.009 .3385 14.974 .103E-01 -41.008 .3503 14.996 .103E-01 -30.971 .3631 14.998 .102E-01 46 | 92.323 -51.205 .3383 14.970 .104E-01 -41.197 .3501 14.996 .103E-01 -31.154 .3629 14.998 .103E-01 47 | 92.436 -51.458 .3380 14.966 .104E-01 -41.446 .3498 14.995 .104E-01 -31.399 .3625 14.998 .103E-01 48 | 92.577 -51.770 .3377 14.963 .104E-01 -41.754 .3494 14.994 .104E-01 -31.703 .3621 14.998 .103E-01 49 | 92.788 -52.227 .3372 14.961 .104E-01 -42.207 .3489 14.991 .104E-01 -32.152 .3616 14.998 .103E-01 50 | 93.000 -52.679 .3366 14.961 .104E-01 -42.656 .3483 14.989 .104E-01 -32.596 .3610 14.997 .103E-01 51 | 93.250 -53.345 .3359 14.947 .105E-01 -43.268 .3476 14.974 .105E-01 -33.179 .3602 14.987 .103E-01 52 | 93.625 -54.784 .3343 14.939 .105E-01 -44.631 .3460 14.968 .105E-01 -34.459 .3586 14.987 .104E-01 53 | 94.000 -56.045 .3329 14.939 .106E-01 -45.859 .3444 14.966 .106E-01 -35.657 .3570 14.986 .104E-01 54 | 94.333 -57.197 .3316 14.920 .107E-01 -46.988 .3431 14.944 .107E-01 -36.761 .3556 14.970 .105E-01 55 | 94.667 -58.869 .3298 14.917 .108E-01 -48.571 .3413 14.940 .108E-01 -38.236 .3538 14.970 .105E-01 56 | 95.000 -60.347 .3281 14.918 .109E-01 -50.005 .3396 14.940 .108E-01 -39.619 .3520 14.969 .106E-01 57 | 95.010 -60.401 .3281 14.918 .109E-01 -50.063 .3396 14.940 .108E-01 -39.671 .3520 14.970 .106E-01 58 | 95.023 -60.388 .3281 14.918 .109E-01 -50.076 .3395 14.940 .109E-01 -39.700 .3519 14.970 .106E-01 59 | 95.040 -60.378 .3281 14.918 .109E-01 -50.106 .3395 14.941 .109E-01 -39.749 .3519 14.970 .106E-01 60 | 95.062 -60.355 .3281 14.918 .109E-01 -50.132 .3395 14.941 .109E-01 -39.805 .3518 14.970 .106E-01 61 | 95.090 -60.338 .3282 14.919 .109E-01 -50.169 .3394 14.941 .109E-01 -39.876 .3517 14.970 .106E-01 62 | 95.127 -60.331 .3282 14.919 .109E-01 -50.215 .3394 14.941 .109E-01 -39.961 .3516 14.970 .106E-01 63 | 95.175 -60.346 .3282 14.920 .109E-01 -50.282 .3393 14.941 .109E-01 -40.068 .3515 14.970 .106E-01 64 | 95.239 -60.395 .3281 14.920 .109E-01 -50.376 .3392 14.941 .109E-01 -40.200 .3513 14.970 .106E-01 65 | 95.323 -60.494 .3280 14.919 .109E-01 -50.513 .3391 14.942 .109E-01 -40.369 .3511 14.970 .106E-01 66 | 95.436 -60.658 .3278 14.915 .110E-01 -50.706 .3388 14.943 .109E-01 -40.585 .3509 14.969 .106E-01 67 | 95.577 -60.889 .3276 14.911 .110E-01 -50.955 .3386 14.943 .109E-01 -40.849 .3505 14.969 .106E-01 68 | 95.788 -61.258 .3273 14.910 .110E-01 -51.335 .3381 14.943 .110E-01 -41.236 .3501 14.969 .107E-01 69 | 96.000 -61.635 .3269 14.911 .111E-01 -51.718 .3377 14.942 .110E-01 -41.621 .3496 14.968 .107E-01 70 | 96.010 -61.612 .3269 14.911 .111E-01 -51.732 .3377 14.943 .110E-01 -41.639 .3496 14.969 .107E-01 71 | 96.023 -61.506 .3270 14.911 .111E-01 -51.705 .3377 14.943 .110E-01 -41.636 .3496 14.969 .107E-01 72 | 96.040 -61.346 .3272 14.910 .111E-01 -51.664 .3378 14.943 .110E-01 -41.637 .3496 14.969 .107E-01 73 | 96.062 -61.130 .3274 14.909 .111E-01 -51.589 .3379 14.943 .110E-01 -41.627 .3496 14.969 .107E-01 74 | 96.090 -60.869 .3276 14.909 .111E-01 -51.478 .3380 14.942 .110E-01 -41.602 .3496 14.969 .107E-01 75 | 96.127 -60.577 .3279 14.909 .111E-01 -51.329 .3382 14.942 .110E-01 -41.552 .3497 14.969 .107E-01 76 | 96.175 -60.252 .3282 14.908 .111E-01 -51.136 .3384 14.942 .110E-01 -41.467 .3498 14.969 .107E-01 77 | 96.239 -59.907 .3286 14.903 .111E-01 -50.905 .3386 14.942 .110E-01 -41.337 .3499 14.968 .107E-01 78 | 96.323 -59.546 .3290 14.890 .111E-01 -50.630 .3389 14.943 .111E-01 -41.150 .3502 14.968 .107E-01 79 | 96.436 -59.152 .3294 14.869 .111E-01 -50.299 .3393 14.943 .111E-01 -40.886 .3505 14.967 .107E-01 80 | 96.577 -58.737 .3299 14.848 .111E-01 -49.920 .3397 14.943 .111E-01 -40.547 .3509 14.967 .107E-01 81 | 96.788 -58.189 .3305 14.841 .111E-01 -49.381 .3403 14.938 .111E-01 -40.026 .3515 14.966 .107E-01 82 | 97.000 -57.667 .3311 14.840 .111E-01 -48.851 .3409 14.931 .111E-01 -39.495 .3522 14.965 .108E-01 83 | 97.010 -57.611 .3311 14.839 .111E-01 -48.822 .3409 14.930 .111E-01 -39.470 .3522 14.965 .108E-01 84 | 97.023 -57.545 .3312 14.838 .111E-01 -48.801 .3410 14.929 .111E-01 -39.449 .3522 14.965 .108E-01 85 | 97.040 -57.432 .3313 14.836 .111E-01 -48.755 .3410 14.929 .111E-01 -39.413 .3523 14.964 .108E-01 86 | 97.062 -57.288 .3315 14.833 .111E-01 -48.681 .3411 14.928 .111E-01 -39.359 .3524 14.964 .108E-01 87 | 97.090 -57.107 .3317 14.829 .111E-01 -48.568 .3412 14.927 .111E-01 -39.277 .3525 14.964 .108E-01 88 | 97.127 -56.896 .3319 14.823 .111E-01 -48.416 .3414 14.926 .111E-01 -39.161 .3526 14.963 .108E-01 89 | 97.175 -56.647 .3322 14.813 .111E-01 -48.212 .3416 14.925 .111E-01 -38.993 .3528 14.963 .108E-01 90 | 97.239 -56.353 .3326 14.795 .111E-01 -47.950 .3419 14.923 .111E-01 -38.765 .3531 14.962 .108E-01 91 | 97.323 -55.997 .3330 14.766 .111E-01 -47.613 .3423 14.922 .112E-01 -38.451 .3535 14.961 .108E-01 92 | 97.436 -55.560 .3334 14.725 .111E-01 -47.180 .3428 14.918 .112E-01 -38.026 .3540 14.960 .108E-01 93 | 97.577 -55.038 .3340 14.687 .110E-01 -46.643 .3435 14.912 .112E-01 -37.483 .3547 14.959 .108E-01 94 | 97.788 -54.276 .3349 14.673 .110E-01 -45.843 .3444 14.896 .112E-01 -36.659 .3557 14.956 .109E-01 95 | 98.000 -53.515 .3357 14.673 .109E-01 -45.040 .3454 14.878 .113E-01 -35.827 .3568 14.953 .109E-01 96 | 98.010 -53.526 .3357 14.673 .109E-01 -45.007 .3455 14.878 .113E-01 -35.789 .3569 14.953 .109E-01 97 | 98.023 -53.560 .3357 14.672 .109E-01 -44.966 .3455 14.877 .113E-01 -35.734 .3569 14.953 .109E-01 98 | 98.040 -53.637 .3356 14.671 .109E-01 -44.934 .3456 14.876 .113E-01 -35.674 .3570 14.952 .109E-01 99 | 98.062 -53.731 .3355 14.668 .109E-01 -44.913 .3456 14.874 .113E-01 -35.606 .3571 14.952 .109E-01 100 | 98.090 -53.837 .3354 14.662 .109E-01 -44.903 .3456 14.873 .113E-01 -35.535 .3572 14.952 .109E-01 101 | 98.127 -53.935 .3352 14.651 .109E-01 -44.899 .3456 14.870 .113E-01 -35.462 .3573 14.952 .109E-01 102 | 98.175 -54.019 .3351 14.634 .109E-01 -44.890 .3456 14.867 .113E-01 -35.383 .3574 14.951 .109E-01 103 | 98.239 -54.073 .3351 14.613 .109E-01 -44.868 .3456 14.864 .113E-01 -35.297 .3575 14.950 .109E-01 104 | 98.323 -54.085 .3351 14.586 .109E-01 -44.821 .3457 14.859 .113E-01 -35.199 .3576 14.948 .109E-01 105 | 98.436 -54.047 .3351 14.557 .109E-01 -44.741 .3458 14.852 .113E-01 -35.083 .3578 14.945 .109E-01 106 | 98.577 -53.961 .3352 14.535 .108E-01 -44.629 .3459 14.841 .113E-01 -34.949 .3579 14.942 .109E-01 107 | 98.788 -53.797 .3354 14.528 .108E-01 -44.450 .3461 14.821 .113E-01 -34.757 .3582 14.936 .110E-01 108 | 99.000 -53.624 .3356 14.532 .108E-01 -44.267 .3464 14.802 .114E-01 -34.568 .3584 14.930 .110E-01 109 | 99.010 -53.599 .3356 14.532 .108E-01 -44.257 .3464 14.801 .114E-01 -34.559 .3584 14.929 .110E-01 110 | 99.023 -53.554 .3357 14.532 .108E-01 -44.239 .3464 14.800 .114E-01 -34.546 .3585 14.929 .110E-01 111 | 99.040 -53.484 .3357 14.531 .108E-01 -44.209 .3464 14.799 .114E-01 -34.526 .3585 14.928 .110E-01 112 | 99.062 -53.395 .3358 14.530 .108E-01 -44.162 .3465 14.797 .114E-01 -34.497 .3585 14.927 .110E-01 113 | 99.090 -53.286 .3360 14.528 .108E-01 -44.095 .3466 14.795 .114E-01 -34.452 .3586 14.926 .110E-01 114 | 99.127 -53.160 .3361 14.526 .107E-01 -44.006 .3467 14.792 .114E-01 -34.388 .3587 14.925 .110E-01 115 | 99.175 -53.011 .3363 14.520 .107E-01 -43.888 .3468 14.789 .114E-01 -34.294 .3588 14.923 .110E-01 116 | 99.239 -52.838 .3365 14.511 .107E-01 -43.738 .3470 14.785 .114E-01 -34.165 .3590 14.921 .110E-01 117 | 99.323 -52.628 .3367 14.495 .107E-01 -43.544 .3473 14.780 .114E-01 -33.984 .3592 14.917 .110E-01 118 | 99.436 -52.368 .3370 14.472 .107E-01 -43.290 .3476 14.773 .114E-01 -33.738 .3595 14.913 .110E-01 119 | 99.577 -52.058 .3373 14.452 .106E-01 -42.977 .3479 14.764 .114E-01 -33.427 .3599 14.907 .110E-01 120 | 99.788 -51.609 .3378 14.452 .105E-01 -42.515 .3485 14.748 .114E-01 -32.959 .3605 14.899 .111E-01 121 | 100.000 -51.165 .3383 14.459 .105E-01 -42.056 .3491 14.732 .114E-01 -32.492 .3611 14.891 .111E-01 122 | end 123 | -------------------------------------------------------------------------------- /tests/test_data/SOLUTE1.OUT: -------------------------------------------------------------------------------- 1 | All solute fluxes and cumulative solute fluxes are positive into the region 2 | 3 | Time cvTop cvBot Sum(cvTop) Sum(cvBot) cvCh0 cvCh1 cTop cRoot cBot cvRoot Sum(cvRoot) Sum(cvNEql) TLevel 4 | [T] [M/L2/T] [M/L2/T] [M/L2] [M/L2] [M/L2] [M/L2] [M/L3] [M/L3] [M/L3] [M/L2/T] [M/L2] [M/L2] 5 | 90.01000 .000E+00 -.385E-03 .000E+00 -.385E-05 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 1 6 | 90.02303 .000E+00 -.385E-03 .000E+00 -.886E-05 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 2 7 | 90.03987 .000E+00 -.385E-03 .000E+00 -.153E-04 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 3 8 | 90.06169 .000E+00 -.383E-03 .000E+00 -.237E-04 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 4 9 | 90.09013 .000E+00 -.383E-03 .000E+00 -.346E-04 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 5 10 | 90.12652 .000E+00 -.382E-03 .000E+00 -.485E-04 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 6 11 | 90.17505 .000E+00 -.381E-03 .000E+00 -.670E-04 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 7 12 | 90.23851 .000E+00 -.378E-03 .000E+00 -.909E-04 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 8 13 | 90.32312 .000E+00 -.375E-03 .000E+00 -.123E-03 .000E+00 .000E+00 .100E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 9 14 | 90.43594 .000E+00 -.372E-03 .000E+00 -.165E-03 .000E+00 .000E+00 .101E-01 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 10 15 | 90.57695 .000E+00 -.368E-03 .000E+00 -.217E-03 .000E+00 .000E+00 .101E-01 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 11 16 | 90.78848 .000E+00 -.361E-03 .000E+00 -.293E-03 .000E+00 .000E+00 .101E-01 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 12 17 | 91.00000 .000E+00 -.356E-03 .000E+00 -.368E-03 .000E+00 .000E+00 .102E-01 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 13 18 | 91.01000 .000E+00 -.354E-03 .000E+00 -.372E-03 .000E+00 .000E+00 .101E-01 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 14 19 | 91.02303 .000E+00 -.354E-03 .000E+00 -.376E-03 .000E+00 .000E+00 .101E-01 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 15 20 | 91.03987 .000E+00 -.354E-03 .000E+00 -.382E-03 .000E+00 .000E+00 .100E-01 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 16 21 | 91.06169 .000E+00 -.353E-03 .000E+00 -.390E-03 .000E+00 .000E+00 .992E-02 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 17 22 | 91.09013 .000E+00 -.353E-03 .000E+00 -.400E-03 .000E+00 .000E+00 .982E-02 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 18 23 | 91.12652 .000E+00 -.351E-03 .000E+00 -.413E-03 .000E+00 .000E+00 .971E-02 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 19 24 | 91.17505 .000E+00 -.350E-03 .000E+00 -.430E-03 .000E+00 .000E+00 .957E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 20 25 | 91.23851 .000E+00 -.349E-03 .000E+00 -.452E-03 .000E+00 .000E+00 .941E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 21 26 | 91.32312 .000E+00 -.347E-03 .000E+00 -.481E-03 .000E+00 .000E+00 .923E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 22 27 | 91.43594 .000E+00 -.345E-03 .000E+00 -.520E-03 .000E+00 .000E+00 .903E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 23 28 | 91.57695 .000E+00 -.342E-03 .000E+00 -.568E-03 .000E+00 .000E+00 .882E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 24 29 | 91.78848 .000E+00 -.338E-03 .000E+00 -.640E-03 .000E+00 .000E+00 .858E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 25 30 | 92.00000 .000E+00 -.333E-03 .000E+00 -.710E-03 .000E+00 .000E+00 .837E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 26 31 | 92.01000 .000E+00 -.333E-03 .000E+00 -.714E-03 .000E+00 .000E+00 .838E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 27 32 | 92.02303 .000E+00 -.333E-03 .000E+00 -.718E-03 .000E+00 .000E+00 .838E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 28 33 | 92.03987 .000E+00 -.332E-03 .000E+00 -.724E-03 .000E+00 .000E+00 .838E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 29 34 | 92.06169 .000E+00 -.332E-03 .000E+00 -.731E-03 .000E+00 .000E+00 .839E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 30 35 | 92.09013 .000E+00 -.332E-03 .000E+00 -.740E-03 .000E+00 .000E+00 .839E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 31 36 | 92.12652 .000E+00 -.331E-03 .000E+00 -.752E-03 .000E+00 .000E+00 .840E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 32 37 | 92.17505 .000E+00 -.331E-03 .000E+00 -.768E-03 .000E+00 .000E+00 .840E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 33 38 | 92.23851 .000E+00 -.329E-03 .000E+00 -.789E-03 .000E+00 .000E+00 .841E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 34 39 | 92.32312 .000E+00 -.328E-03 .000E+00 -.817E-03 .000E+00 .000E+00 .842E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 35 40 | 92.43594 .000E+00 -.325E-03 .000E+00 -.854E-03 .000E+00 .000E+00 .843E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 36 41 | 92.57695 .000E+00 -.322E-03 .000E+00 -.899E-03 .000E+00 .000E+00 .843E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 37 42 | 92.78848 .000E+00 -.320E-03 .000E+00 -.967E-03 .000E+00 .000E+00 .844E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 38 43 | 93.00000 .000E+00 -.315E-03 .000E+00 -.103E-02 .000E+00 .000E+00 .843E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 39 44 | 93.25000 .000E+00 -.311E-03 .000E+00 -.111E-02 .000E+00 .000E+00 .857E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 40 45 | 93.62500 .000E+00 -.302E-03 .000E+00 -.122E-02 .000E+00 .000E+00 .878E-02 .104E-01 .100E-01 .000E+00 .000E+00 .000E+00 41 46 | 94.00000 .000E+00 -.292E-03 .000E+00 -.133E-02 .000E+00 .000E+00 .896E-02 .104E-01 .100E-01 .000E+00 .000E+00 .000E+00 42 47 | 94.33334 .000E+00 -.284E-03 .000E+00 -.143E-02 .000E+00 .000E+00 .911E-02 .105E-01 .100E-01 .000E+00 .000E+00 .000E+00 43 48 | 94.66667 .000E+00 -.274E-03 .000E+00 -.152E-02 .000E+00 .000E+00 .928E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 44 49 | 95.00000 .000E+00 -.263E-03 .000E+00 -.161E-02 .000E+00 .000E+00 .944E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 45 50 | 95.01000 .000E+00 -.263E-03 .000E+00 -.161E-02 .000E+00 .000E+00 .941E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 46 51 | 95.02303 .000E+00 -.263E-03 .000E+00 -.161E-02 .000E+00 .000E+00 .937E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 47 52 | 95.03987 .000E+00 -.263E-03 .000E+00 -.162E-02 .000E+00 .000E+00 .932E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 48 53 | 95.06169 .000E+00 -.262E-03 .000E+00 -.162E-02 .000E+00 .000E+00 .926E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 49 54 | 95.09013 .000E+00 -.262E-03 .000E+00 -.163E-02 .000E+00 .000E+00 .918E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 50 55 | 95.12652 .000E+00 -.260E-03 .000E+00 -.164E-02 .000E+00 .000E+00 .910E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 51 56 | 95.17505 .000E+00 -.260E-03 .000E+00 -.165E-02 .000E+00 .000E+00 .899E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 52 57 | 95.23851 .000E+00 -.259E-03 .000E+00 -.167E-02 .000E+00 .000E+00 .887E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 53 58 | 95.32312 .000E+00 -.257E-03 .000E+00 -.169E-02 .000E+00 .000E+00 .873E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 54 59 | 95.43594 .000E+00 -.256E-03 .000E+00 -.172E-02 .000E+00 .000E+00 .857E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 55 60 | 95.57695 .000E+00 -.253E-03 .000E+00 -.176E-02 .000E+00 .000E+00 .841E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 56 61 | 95.78848 .000E+00 -.250E-03 .000E+00 -.181E-02 .000E+00 .000E+00 .822E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 57 62 | 96.00000 .000E+00 -.249E-03 .000E+00 -.186E-02 .000E+00 .000E+00 .805E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 58 63 | 96.01000 .000E+00 -.249E-03 .000E+00 -.186E-02 .000E+00 .000E+00 .799E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 59 64 | 96.02303 .000E+00 -.248E-03 .000E+00 -.187E-02 .000E+00 .000E+00 .793E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 60 65 | 96.03987 .000E+00 -.248E-03 .000E+00 -.187E-02 .000E+00 .000E+00 .785E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 61 66 | 96.06169 .000E+00 -.248E-03 .000E+00 -.188E-02 .000E+00 .000E+00 .776E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 62 67 | 96.09013 .000E+00 -.248E-03 .000E+00 -.188E-02 .000E+00 .000E+00 .765E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 63 68 | 96.12652 .000E+00 -.248E-03 .000E+00 -.189E-02 .000E+00 .000E+00 .752E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 64 69 | 96.17505 .000E+00 -.248E-03 .000E+00 -.190E-02 .000E+00 .000E+00 .738E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 65 70 | 96.23851 .000E+00 -.248E-03 .000E+00 -.192E-02 .000E+00 .000E+00 .720E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 66 71 | 96.32312 .000E+00 -.249E-03 .000E+00 -.194E-02 .000E+00 .000E+00 .700E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 67 72 | 96.43594 .000E+00 -.250E-03 .000E+00 -.197E-02 .000E+00 .000E+00 .676E-02 .108E-01 .100E-01 .000E+00 .000E+00 .000E+00 68 73 | 96.57695 .000E+00 -.252E-03 .000E+00 -.201E-02 .000E+00 .000E+00 .649E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 69 74 | 96.78848 .000E+00 -.256E-03 .000E+00 -.206E-02 .000E+00 .000E+00 .613E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 70 75 | 97.00000 .000E+00 -.259E-03 .000E+00 -.211E-02 .000E+00 .000E+00 .582E-02 .107E-01 .100E-01 .000E+00 .000E+00 .000E+00 71 76 | 97.01000 .000E+00 -.259E-03 .000E+00 -.212E-02 .000E+00 .000E+00 .580E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 72 77 | 97.02303 .000E+00 -.260E-03 .000E+00 -.212E-02 .000E+00 .000E+00 .576E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 73 78 | 97.03987 .000E+00 -.260E-03 .000E+00 -.212E-02 .000E+00 .000E+00 .572E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 74 79 | 97.06169 .000E+00 -.260E-03 .000E+00 -.213E-02 .000E+00 .000E+00 .568E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 75 80 | 97.09013 .000E+00 -.260E-03 .000E+00 -.214E-02 .000E+00 .000E+00 .561E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 76 81 | 97.12652 .000E+00 -.262E-03 .000E+00 -.215E-02 .000E+00 .000E+00 .554E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 77 82 | 97.17505 .000E+00 -.263E-03 .000E+00 -.216E-02 .000E+00 .000E+00 .545E-02 .106E-01 .100E-01 .000E+00 .000E+00 .000E+00 78 83 | 97.23851 .000E+00 -.264E-03 .000E+00 -.218E-02 .000E+00 .000E+00 .533E-02 .105E-01 .100E-01 .000E+00 .000E+00 .000E+00 79 84 | 97.32312 .000E+00 -.266E-03 .000E+00 -.220E-02 .000E+00 .000E+00 .518E-02 .105E-01 .100E-01 .000E+00 .000E+00 .000E+00 80 85 | 97.43594 .000E+00 -.268E-03 .000E+00 -.223E-02 .000E+00 .000E+00 .500E-02 .105E-01 .100E-01 .000E+00 .000E+00 .000E+00 81 86 | 97.57695 .000E+00 -.273E-03 .000E+00 -.227E-02 .000E+00 .000E+00 .480E-02 .105E-01 .100E-01 .000E+00 .000E+00 .000E+00 82 87 | 97.78848 .000E+00 -.279E-03 .000E+00 -.233E-02 .000E+00 .000E+00 .452E-02 .104E-01 .100E-01 .000E+00 .000E+00 .000E+00 83 88 | 98.00000 .000E+00 -.285E-03 .000E+00 -.239E-02 .000E+00 .000E+00 .427E-02 .104E-01 .100E-01 .000E+00 .000E+00 .000E+00 84 89 | 98.01000 .000E+00 -.286E-03 .000E+00 -.239E-02 .000E+00 .000E+00 .427E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 85 90 | 98.02303 .000E+00 -.286E-03 .000E+00 -.239E-02 .000E+00 .000E+00 .427E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 86 91 | 98.03987 .000E+00 -.286E-03 .000E+00 -.240E-02 .000E+00 .000E+00 .427E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 87 92 | 98.06169 .000E+00 -.288E-03 .000E+00 -.241E-02 .000E+00 .000E+00 .426E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 88 93 | 98.09013 .000E+00 -.288E-03 .000E+00 -.241E-02 .000E+00 .000E+00 .426E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 89 94 | 98.12652 .000E+00 -.289E-03 .000E+00 -.242E-02 .000E+00 .000E+00 .424E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 90 95 | 98.17505 .000E+00 -.291E-03 .000E+00 -.244E-02 .000E+00 .000E+00 .423E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 91 96 | 98.23851 .000E+00 -.291E-03 .000E+00 -.246E-02 .000E+00 .000E+00 .420E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 92 97 | 98.32312 .000E+00 -.292E-03 .000E+00 -.248E-02 .000E+00 .000E+00 .417E-02 .103E-01 .100E-01 .000E+00 .000E+00 .000E+00 93 98 | 98.43594 .000E+00 -.293E-03 .000E+00 -.251E-02 .000E+00 .000E+00 .412E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 94 99 | 98.57695 .000E+00 -.295E-03 .000E+00 -.256E-02 .000E+00 .000E+00 .406E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 95 100 | 98.78848 .000E+00 -.296E-03 .000E+00 -.262E-02 .000E+00 .000E+00 .397E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 96 101 | 99.00000 .000E+00 -.297E-03 .000E+00 -.268E-02 .000E+00 .000E+00 .389E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 97 102 | 99.01000 .000E+00 -.297E-03 .000E+00 -.268E-02 .000E+00 .000E+00 .388E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 98 103 | 99.02303 .000E+00 -.297E-03 .000E+00 -.269E-02 .000E+00 .000E+00 .387E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 99 104 | 99.03987 .000E+00 -.297E-03 .000E+00 -.269E-02 .000E+00 .000E+00 .386E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 100 105 | 99.06169 .000E+00 -.297E-03 .000E+00 -.270E-02 .000E+00 .000E+00 .384E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 101 106 | 99.09013 .000E+00 -.299E-03 .000E+00 -.271E-02 .000E+00 .000E+00 .382E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 102 107 | 99.12652 .000E+00 -.299E-03 .000E+00 -.272E-02 .000E+00 .000E+00 .380E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 103 108 | 99.17505 .000E+00 -.299E-03 .000E+00 -.273E-02 .000E+00 .000E+00 .377E-02 .102E-01 .100E-01 .000E+00 .000E+00 .000E+00 104 109 | 99.23851 .000E+00 -.300E-03 .000E+00 -.275E-02 .000E+00 .000E+00 .373E-02 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 105 110 | 99.32312 .000E+00 -.302E-03 .000E+00 -.278E-02 .000E+00 .000E+00 .368E-02 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 106 111 | 99.43594 .000E+00 -.303E-03 .000E+00 -.281E-02 .000E+00 .000E+00 .362E-02 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 107 112 | 99.57695 .000E+00 -.306E-03 .000E+00 -.286E-02 .000E+00 .000E+00 .354E-02 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 108 113 | 99.78848 .000E+00 -.310E-03 .000E+00 -.292E-02 .000E+00 .000E+00 .343E-02 .101E-01 .100E-01 .000E+00 .000E+00 .000E+00 109 114 | 100.00000 .000E+00 -.314E-03 .000E+00 -.299E-02 .000E+00 .000E+00 .333E-02 .100E-01 .100E-01 .000E+00 .000E+00 .000E+00 110 115 | end -------------------------------------------------------------------------------- /examples/phydrus_paper/Ex3/output/I_CHECK.OUT: -------------------------------------------------------------------------------- 1 | ******* Program HYDRUS 2 | ******* None 3 | Date: 0.**. Time: ***:**:** 4 | Units: L = cm , T = days , M = mmol 5 | 6 | CosAlf,MaxIt,TolTh, TolH 7 | 1.000 10 0.001 1.00000 8 | 9 | TopInF,BotInF,AtmBC,SinkF,WLayer,qGWLF,FreeD,SeepF,lWat,lChem,lTemp,lRoot,lWDep 10 | T F T T F F T F T F F F F 11 | 12 | Nodal point information 13 | 14 | node x hOld MatN LayN Beta Ah AK ATh Temp Conc(1...NS) Sorb(1...NS) 15 | 16 | 1 0.000 -500.000 1 1 0.050 1.000 1.000 1.000 17 | 2 -1.000 -500.000 1 1 0.050 1.000 1.000 1.000 18 | 3 -2.000 -500.000 1 1 0.050 1.000 1.000 1.000 19 | 4 -3.000 -500.000 1 1 0.050 1.000 1.000 1.000 20 | 5 -4.000 -500.000 1 1 0.050 1.000 1.000 1.000 21 | 6 -5.000 -500.000 1 1 0.050 1.000 1.000 1.000 22 | 7 -6.000 -500.000 1 1 0.050 1.000 1.000 1.000 23 | 8 -7.000 -500.000 1 1 0.050 1.000 1.000 1.000 24 | 9 -8.000 -500.000 1 1 0.050 1.000 1.000 1.000 25 | 10 -9.000 -500.000 1 1 0.050 1.000 1.000 1.000 26 | 11 -10.000 -500.000 1 1 0.050 1.000 1.000 1.000 27 | 12 -11.000 -500.000 1 1 0.047 1.000 1.000 1.000 28 | 13 -12.000 -500.000 1 1 0.045 1.000 1.000 1.000 29 | 14 -13.000 -500.000 1 1 0.043 1.000 1.000 1.000 30 | 15 -14.000 -500.000 1 1 0.040 1.000 1.000 1.000 31 | 16 -15.000 -500.000 1 1 0.038 1.000 1.000 1.000 32 | 17 -16.000 -500.000 1 1 0.035 1.000 1.000 1.000 33 | 18 -17.000 -500.000 1 1 0.032 1.000 1.000 1.000 34 | 19 -18.000 -500.000 1 1 0.030 1.000 1.000 1.000 35 | 20 -19.000 -500.000 1 1 0.027 1.000 1.000 1.000 36 | 21 -20.000 -500.000 1 1 0.025 1.000 1.000 1.000 37 | 22 -21.000 -500.000 1 1 0.022 1.000 1.000 1.000 38 | 23 -22.000 -500.000 1 1 0.020 1.000 1.000 1.000 39 | 24 -23.000 -500.000 1 1 0.018 1.000 1.000 1.000 40 | 25 -24.000 -500.000 1 1 0.015 1.000 1.000 1.000 41 | 26 -25.000 -500.000 1 1 0.013 1.000 1.000 1.000 42 | 27 -26.000 -500.000 1 1 0.010 1.000 1.000 1.000 43 | 28 -27.000 -500.000 1 1 0.008 1.000 1.000 1.000 44 | 29 -28.000 -500.000 1 1 0.005 1.000 1.000 1.000 45 | 30 -29.000 -500.000 1 1 0.002 1.000 1.000 1.000 46 | 31 -30.000 -500.000 1 1 0.000 1.000 1.000 1.000 47 | 32 -31.000 -500.000 1 1 0.000 1.000 1.000 1.000 48 | 33 -32.000 -500.000 1 1 0.000 1.000 1.000 1.000 49 | 34 -33.000 -500.000 1 1 0.000 1.000 1.000 1.000 50 | 35 -34.000 -500.000 1 1 0.000 1.000 1.000 1.000 51 | 36 -35.000 -500.000 1 1 0.000 1.000 1.000 1.000 52 | 37 -36.000 -500.000 1 1 0.000 1.000 1.000 1.000 53 | 38 -37.000 -500.000 1 1 0.000 1.000 1.000 1.000 54 | 39 -38.000 -500.000 1 1 0.000 1.000 1.000 1.000 55 | 40 -39.000 -500.000 1 1 0.000 1.000 1.000 1.000 56 | 41 -40.000 -500.000 1 1 0.000 1.000 1.000 1.000 57 | 42 -41.000 -500.000 1 1 0.000 1.000 1.000 1.000 58 | 43 -42.000 -500.000 1 1 0.000 1.000 1.000 1.000 59 | 44 -43.000 -500.000 1 1 0.000 1.000 1.000 1.000 60 | 45 -44.000 -500.000 1 1 0.000 1.000 1.000 1.000 61 | 46 -45.000 -500.000 1 1 0.000 1.000 1.000 1.000 62 | 47 -46.000 -500.000 1 1 0.000 1.000 1.000 1.000 63 | 48 -47.000 -500.000 1 1 0.000 1.000 1.000 1.000 64 | 49 -48.000 -500.000 1 1 0.000 1.000 1.000 1.000 65 | 50 -49.000 -500.000 1 1 0.000 1.000 1.000 1.000 66 | 51 -50.000 -500.000 1 1 0.000 1.000 1.000 1.000 67 | 52 -51.000 -500.000 1 1 0.000 1.000 1.000 1.000 68 | 53 -52.000 -500.000 1 1 0.000 1.000 1.000 1.000 69 | 54 -53.000 -500.000 1 1 0.000 1.000 1.000 1.000 70 | 55 -54.000 -500.000 1 1 0.000 1.000 1.000 1.000 71 | 56 -55.000 -500.000 1 1 0.000 1.000 1.000 1.000 72 | 57 -56.000 -500.000 1 1 0.000 1.000 1.000 1.000 73 | 58 -57.000 -500.000 1 1 0.000 1.000 1.000 1.000 74 | 59 -58.000 -500.000 1 1 0.000 1.000 1.000 1.000 75 | 60 -59.000 -500.000 1 1 0.000 1.000 1.000 1.000 76 | 61 -60.000 -500.000 1 1 0.000 1.000 1.000 1.000 77 | 62 -61.000 -500.000 1 1 0.000 1.000 1.000 1.000 78 | 63 -62.000 -500.000 1 1 0.000 1.000 1.000 1.000 79 | 64 -63.000 -500.000 1 1 0.000 1.000 1.000 1.000 80 | 65 -64.000 -500.000 1 1 0.000 1.000 1.000 1.000 81 | 66 -65.000 -500.000 1 1 0.000 1.000 1.000 1.000 82 | 67 -66.000 -500.000 1 1 0.000 1.000 1.000 1.000 83 | 68 -67.000 -500.000 1 1 0.000 1.000 1.000 1.000 84 | 69 -68.000 -500.000 1 1 0.000 1.000 1.000 1.000 85 | 70 -69.000 -500.000 1 1 0.000 1.000 1.000 1.000 86 | 71 -70.000 -500.000 1 1 0.000 1.000 1.000 1.000 87 | 72 -71.000 -500.000 1 1 0.000 1.000 1.000 1.000 88 | 73 -72.000 -500.000 1 1 0.000 1.000 1.000 1.000 89 | 74 -73.000 -500.000 1 1 0.000 1.000 1.000 1.000 90 | 75 -74.000 -500.000 1 1 0.000 1.000 1.000 1.000 91 | 76 -75.000 -500.000 1 1 0.000 1.000 1.000 1.000 92 | 77 -76.000 -500.000 1 1 0.000 1.000 1.000 1.000 93 | 78 -77.000 -500.000 1 1 0.000 1.000 1.000 1.000 94 | 79 -78.000 -500.000 1 1 0.000 1.000 1.000 1.000 95 | 80 -79.000 -500.000 1 1 0.000 1.000 1.000 1.000 96 | 81 -80.000 -500.000 1 1 0.000 1.000 1.000 1.000 97 | 82 -81.000 -500.000 1 1 0.000 1.000 1.000 1.000 98 | 83 -82.000 -500.000 1 1 0.000 1.000 1.000 1.000 99 | 84 -83.000 -500.000 1 1 0.000 1.000 1.000 1.000 100 | 85 -84.000 -500.000 1 1 0.000 1.000 1.000 1.000 101 | 86 -85.000 -500.000 1 1 0.000 1.000 1.000 1.000 102 | 87 -86.000 -500.000 1 1 0.000 1.000 1.000 1.000 103 | 88 -87.000 -500.000 1 1 0.000 1.000 1.000 1.000 104 | 89 -88.000 -500.000 1 1 0.000 1.000 1.000 1.000 105 | 90 -89.000 -500.000 1 1 0.000 1.000 1.000 1.000 106 | 91 -90.000 -500.000 1 1 0.000 1.000 1.000 1.000 107 | 92 -91.000 -500.000 1 1 0.000 1.000 1.000 1.000 108 | 93 -92.000 -500.000 1 1 0.000 1.000 1.000 1.000 109 | 94 -93.000 -500.000 1 1 0.000 1.000 1.000 1.000 110 | 95 -94.000 -500.000 1 1 0.000 1.000 1.000 1.000 111 | 96 -95.000 -500.000 1 1 0.000 1.000 1.000 1.000 112 | 97 -96.000 -500.000 1 1 0.000 1.000 1.000 1.000 113 | 98 -97.000 -500.000 1 1 0.000 1.000 1.000 1.000 114 | 99 -98.000 -500.000 1 1 0.000 1.000 1.000 1.000 115 | 100 -99.000 -500.000 1 1 0.000 1.000 1.000 1.000 116 | 101 -100.000 -500.000 1 1 0.000 1.000 1.000 1.000 117 | end 118 | 119 | Number of species in the chain : 0 120 | 121 | 122 | MatNum, Param. array: 123 | 124 | Mat Qr Qs Alfa n Ks l 125 | 126 | 1 0.000 0.445 0.227E-01 0.152E+01 0.212E+03 0.500 127 | 128 | Table of Hydraulic Properties which are interpolated in simulation 129 | ================================================================= 130 | 131 | theta h log h C K log K S Kv 132 | 133 | 0.4450 -0.100E-05 -0.6000E+01 0.5647E-06 0.2118E+03 0.2326E+01 1.0000 0.0000E+00 134 | 0.4450 -0.126E-05 -0.5899E+01 0.6372E-06 0.2118E+03 0.2326E+01 1.0000 0.0000E+00 135 | 0.4450 -0.159E-05 -0.5798E+01 0.7189E-06 0.2118E+03 0.2326E+01 1.0000 0.0000E+00 136 | 0.4450 -0.201E-05 -0.5697E+01 0.8111E-06 0.2117E+03 0.2326E+01 1.0000 0.0000E+00 137 | 0.4450 -0.254E-05 -0.5596E+01 0.9152E-06 0.2117E+03 0.2326E+01 1.0000 0.0000E+00 138 | 0.4450 -0.320E-05 -0.5495E+01 0.1033E-05 0.2117E+03 0.2326E+01 1.0000 0.0000E+00 139 | 0.4450 -0.404E-05 -0.5394E+01 0.1165E-05 0.2117E+03 0.2326E+01 1.0000 0.0000E+00 140 | 0.4450 -0.509E-05 -0.5293E+01 0.1315E-05 0.2117E+03 0.2326E+01 1.0000 0.0000E+00 141 | 0.4450 -0.643E-05 -0.5192E+01 0.1483E-05 0.2117E+03 0.2326E+01 1.0000 0.0000E+00 142 | 0.4450 -0.811E-05 -0.5091E+01 0.1673E-05 0.2117E+03 0.2326E+01 1.0000 0.0000E+00 143 | 0.4450 -0.102E-04 -0.4990E+01 0.1888E-05 0.2117E+03 0.2326E+01 1.0000 0.0000E+00 144 | 0.4450 -0.129E-04 -0.4889E+01 0.2130E-05 0.2116E+03 0.2326E+01 1.0000 0.0000E+00 145 | 0.4450 -0.163E-04 -0.4788E+01 0.2404E-05 0.2116E+03 0.2326E+01 1.0000 0.0000E+00 146 | 0.4450 -0.206E-04 -0.4687E+01 0.2712E-05 0.2116E+03 0.2326E+01 1.0000 0.0000E+00 147 | 0.4450 -0.260E-04 -0.4586E+01 0.3060E-05 0.2116E+03 0.2325E+01 1.0000 0.0000E+00 148 | 0.4450 -0.327E-04 -0.4485E+01 0.3453E-05 0.2115E+03 0.2325E+01 1.0000 0.0000E+00 149 | 0.4450 -0.413E-04 -0.4384E+01 0.3895E-05 0.2115E+03 0.2325E+01 1.0000 0.0000E+00 150 | 0.4450 -0.521E-04 -0.4283E+01 0.4395E-05 0.2115E+03 0.2325E+01 1.0000 0.0000E+00 151 | 0.4450 -0.658E-04 -0.4182E+01 0.4959E-05 0.2114E+03 0.2325E+01 1.0000 0.0000E+00 152 | 0.4450 -0.830E-04 -0.4081E+01 0.5595E-05 0.2114E+03 0.2325E+01 1.0000 0.0000E+00 153 | 0.4450 -0.105E-03 -0.3980E+01 0.6313E-05 0.2113E+03 0.2325E+01 1.0000 0.0000E+00 154 | 0.4450 -0.132E-03 -0.3879E+01 0.7123E-05 0.2112E+03 0.2325E+01 1.0000 0.0000E+00 155 | 0.4450 -0.167E-03 -0.3778E+01 0.8037E-05 0.2112E+03 0.2325E+01 1.0000 0.0000E+00 156 | 0.4450 -0.210E-03 -0.3677E+01 0.9068E-05 0.2111E+03 0.2324E+01 1.0000 0.0000E+00 157 | 0.4450 -0.266E-03 -0.3576E+01 0.1023E-04 0.2110E+03 0.2324E+01 1.0000 0.0000E+00 158 | 0.4450 -0.335E-03 -0.3475E+01 0.1154E-04 0.2109E+03 0.2324E+01 1.0000 0.0000E+00 159 | 0.4450 -0.423E-03 -0.3374E+01 0.1302E-04 0.2108E+03 0.2324E+01 1.0000 0.0000E+00 160 | 0.4450 -0.534E-03 -0.3273E+01 0.1470E-04 0.2106E+03 0.2324E+01 1.0000 0.0000E+00 161 | 0.4450 -0.673E-03 -0.3172E+01 0.1658E-04 0.2105E+03 0.2323E+01 1.0000 0.0000E+00 162 | 0.4450 -0.850E-03 -0.3071E+01 0.1871E-04 0.2103E+03 0.2323E+01 1.0000 0.0000E+00 163 | 0.4450 -0.107E-02 -0.2970E+01 0.2111E-04 0.2101E+03 0.2322E+01 1.0000 0.0000E+00 164 | 0.4450 -0.135E-02 -0.2869E+01 0.2382E-04 0.2099E+03 0.2322E+01 1.0000 0.1098E-30 165 | 0.4450 -0.171E-02 -0.2768E+01 0.2687E-04 0.2096E+03 0.2321E+01 1.0000 0.1098E-30 166 | 0.4450 -0.215E-02 -0.2667E+01 0.3032E-04 0.2094E+03 0.2321E+01 1.0000 0.1098E-30 167 | 0.4450 -0.272E-02 -0.2566E+01 0.3421E-04 0.2091E+03 0.2320E+01 1.0000 0.1107E-29 168 | 0.4450 -0.343E-02 -0.2465E+01 0.3860E-04 0.2087E+03 0.2320E+01 1.0000 0.4275E-29 169 | 0.4450 -0.433E-02 -0.2364E+01 0.4355E-04 0.2083E+03 0.2319E+01 1.0000 0.1115E-28 170 | 0.4450 -0.546E-02 -0.2263E+01 0.4913E-04 0.2079E+03 0.2318E+01 1.0000 0.4309E-28 171 | 0.4450 -0.689E-02 -0.2162E+01 0.5544E-04 0.2074E+03 0.2317E+01 1.0000 0.1124E-27 172 | 0.4450 -0.870E-02 -0.2061E+01 0.6255E-04 0.2068E+03 0.2316E+01 1.0000 0.4343E-27 173 | 0.4450 -0.110E-01 -0.1960E+01 0.7057E-04 0.2061E+03 0.2314E+01 1.0000 0.1387E-26 174 | 0.4450 -0.138E-01 -0.1859E+01 0.7963E-04 0.2054E+03 0.2313E+01 1.0000 0.4378E-26 175 | 0.4450 -0.175E-01 -0.1758E+01 0.8984E-04 0.2046E+03 0.2311E+01 1.0000 0.1540E-25 176 | 0.4450 -0.221E-01 -0.1657E+01 0.1014E-03 0.2037E+03 0.2309E+01 1.0000 0.4726E-25 177 | 0.4450 -0.278E-01 -0.1556E+01 0.1144E-03 0.2027E+03 0.2307E+01 1.0000 0.1552E-24 178 | 0.4450 -0.351E-01 -0.1455E+01 0.1290E-03 0.2015E+03 0.2304E+01 1.0000 0.5096E-24 179 | 0.4450 -0.443E-01 -0.1354E+01 0.1456E-03 0.2002E+03 0.2301E+01 1.0000 0.1679E-23 180 | 0.4450 -0.559E-01 -0.1253E+01 0.1643E-03 0.1987E+03 0.2298E+01 1.0000 0.5398E-23 181 | 0.4450 -0.705E-01 -0.1152E+01 0.1853E-03 0.1971E+03 0.2295E+01 1.0000 0.1752E-22 182 | 0.4450 -0.890E-01 -0.1051E+01 0.2091E-03 0.1952E+03 0.2291E+01 1.0000 0.5667E-22 183 | 0.4450 -0.112E+00 -0.9495E+00 0.2359E-03 0.1932E+03 0.2286E+01 1.0000 0.1838E-21 184 | 0.4450 -0.142E+00 -0.8485E+00 0.2662E-03 0.1908E+03 0.2281E+01 0.9999 0.5995E-21 185 | 0.4450 -0.179E+00 -0.7475E+00 0.3003E-03 0.1882E+03 0.2275E+01 0.9999 0.1944E-20 186 | 0.4449 -0.226E+00 -0.6465E+00 0.3388E-03 0.1853E+03 0.2268E+01 0.9999 0.6300E-20 187 | 0.4449 -0.285E+00 -0.5455E+00 0.3822E-03 0.1820E+03 0.2260E+01 0.9998 0.2046E-19 188 | 0.4449 -0.359E+00 -0.4444E+00 0.4311E-03 0.1783E+03 0.2251E+01 0.9998 0.6642E-19 189 | 0.4449 -0.453E+00 -0.3434E+00 0.4862E-03 0.1742E+03 0.2241E+01 0.9997 0.2155E-18 190 | 0.4448 -0.572E+00 -0.2424E+00 0.5483E-03 0.1697E+03 0.2230E+01 0.9995 0.6990E-18 191 | 0.4447 -0.722E+00 -0.1414E+00 0.6181E-03 0.1646E+03 0.2216E+01 0.9993 0.2267E-17 192 | 0.4446 -0.911E+00 -0.4040E-01 0.6967E-03 0.1590E+03 0.2201E+01 0.9991 0.7346E-17 193 | 0.4444 -0.115E+01 0.6061E-01 0.7848E-03 0.1528E+03 0.2184E+01 0.9987 0.2378E-16 194 | 0.4441 -0.145E+01 0.1616E+00 0.8835E-03 0.1459E+03 0.2164E+01 0.9981 0.7693E-16 195 | 0.4438 -0.183E+01 0.2626E+00 0.9937E-03 0.1383E+03 0.2141E+01 0.9973 0.2485E-15 196 | 0.4433 -0.231E+01 0.3636E+00 0.1116E-02 0.1301E+03 0.2114E+01 0.9962 0.8006E-15 197 | 0.4426 -0.292E+01 0.4646E+00 0.1251E-02 0.1211E+03 0.2083E+01 0.9945 0.2572E-14 198 | 0.4416 -0.368E+01 0.5657E+00 0.1399E-02 0.1114E+03 0.2047E+01 0.9923 0.8226E-14 199 | 0.4401 -0.464E+01 0.6667E+00 0.1559E-02 0.1010E+03 0.2004E+01 0.9891 0.2614E-13 200 | 0.4381 -0.586E+01 0.7677E+00 0.1728E-02 0.9008E+02 0.1955E+01 0.9846 0.8238E-13 201 | 0.4353 -0.739E+01 0.8687E+00 0.1901E-02 0.7869E+02 0.1896E+01 0.9783 0.2564E-12 202 | 0.4315 -0.933E+01 0.9697E+00 0.2071E-02 0.6707E+02 0.1827E+01 0.9696 0.7851E-12 203 | 0.4262 -0.118E+02 0.1071E+01 0.2227E-02 0.5551E+02 0.1744E+01 0.9578 0.2350E-11 204 | 0.4192 -0.148E+02 0.1172E+01 0.2353E-02 0.4437E+02 0.1647E+01 0.9419 0.6826E-11 205 | 0.4098 -0.187E+02 0.1273E+01 0.2430E-02 0.3406E+02 0.1532E+01 0.9210 0.1906E-10 206 | 0.3978 -0.236E+02 0.1374E+01 0.2441E-02 0.2497E+02 0.1397E+01 0.8940 0.5066E-10 207 | 0.3829 -0.298E+02 0.1475E+01 0.2370E-02 0.1739E+02 0.1240E+01 0.8605 0.1267E-09 208 | 0.3650 -0.376E+02 0.1576E+01 0.2215E-02 0.1146E+02 0.1059E+01 0.8202 0.2953E-09 209 | 0.3443 -0.475E+02 0.1677E+01 0.1986E-02 0.7152E+01 0.8544E+00 0.7736 0.6362E-09 210 | 0.3213 -0.599E+02 0.1778E+01 0.1709E-02 0.4228E+01 0.6261E+00 0.7220 0.1261E-08 211 | 0.2969 -0.756E+02 0.1879E+01 0.1414E-02 0.2379E+01 0.3764E+00 0.6672 0.2300E-08 212 | 0.2718 -0.955E+02 0.1980E+01 0.1129E-02 0.1282E+01 0.1080E+00 0.6109 0.3870E-08 213 | 0.2470 -0.120E+03 0.2081E+01 0.8742E-03 0.6667E+00 -0.1761E+00 0.5551 0.6050E-08 214 | 0.2231 -0.152E+03 0.2182E+01 0.6607E-03 0.3367E+00 -0.4727E+00 0.5013 0.8854E-08 215 | 0.2004 -0.192E+03 0.2283E+01 0.4898E-03 0.1663E+00 -0.7790E+00 0.4504 0.1224E-07 216 | 0.1794 -0.242E+03 0.2384E+01 0.3578E-03 0.8077E-01 -0.1093E+01 0.4032 0.1610E-07 217 | 0.1602 -0.305E+03 0.2485E+01 0.2585E-03 0.3874E-01 -0.1412E+01 0.3599 0.2033E-07 218 | 0.1427 -0.385E+03 0.2586E+01 0.1853E-03 0.1841E-01 -0.1735E+01 0.3207 0.2480E-07 219 | 0.1269 -0.486E+03 0.2687E+01 0.1320E-03 0.8689E-02 -0.2061E+01 0.2852 0.2937E-07 220 | 0.1128 -0.614E+03 0.2788E+01 0.9368E-04 0.4082E-02 -0.2389E+01 0.2535 0.3395E-07 221 | 0.1002 -0.774E+03 0.2889E+01 0.6627E-04 0.1912E-02 -0.2719E+01 0.2251 0.3845E-07 222 | 0.0889 -0.977E+03 0.2990E+01 0.4679E-04 0.8929E-03 -0.3049E+01 0.1997 0.4279E-07 223 | 0.0788 -0.123E+04 0.3091E+01 0.3298E-04 0.4164E-03 -0.3381E+01 0.1772 0.4694E-07 224 | 0.0699 -0.156E+04 0.3192E+01 0.2322E-04 0.1939E-03 -0.3712E+01 0.1571 0.5085E-07 225 | 0.0620 -0.196E+04 0.3293E+01 0.1634E-04 0.9025E-04 -0.4045E+01 0.1393 0.5450E-07 226 | 0.0550 -0.248E+04 0.3394E+01 0.1149E-04 0.4198E-04 -0.4377E+01 0.1235 0.5789E-07 227 | 0.0487 -0.313E+04 0.3495E+01 0.8078E-05 0.1951E-04 -0.4710E+01 0.1095 0.6100E-07 228 | 0.0432 -0.394E+04 0.3596E+01 0.5677E-05 0.9069E-05 -0.5042E+01 0.0971 0.6385E-07 229 | 0.0383 -0.498E+04 0.3697E+01 0.3989E-05 0.4214E-05 -0.5375E+01 0.0860 0.6644E-07 230 | 0.0339 -0.628E+04 0.3798E+01 0.2803E-05 0.1958E-05 -0.5708E+01 0.0763 0.6877E-07 231 | 0.0301 -0.792E+04 0.3899E+01 0.1969E-05 0.9096E-06 -0.6041E+01 0.0676 0.7086E-07 232 | 0.0267 -0.100E+05 0.4000E+01 0.1383E-05 0.4225E-06 -0.6374E+01 0.0599 0.7272E-07 233 | end 234 | --------------------------------------------------------------------------------