From 4b55196f8ee7aae65adf67dae0ba880b6df1133a Mon Sep 17 00:00:00 2001 From: SCiarella Date: Tue, 16 Dec 2025 10:33:43 +0100 Subject: [PATCH 01/17] gpu and dtype features --- docs/notebooks/WOFOST_Leaf_Dynamics.conf | 32 + docs/notebooks/optimization.ipynb | 252 +-- .../test_leafdynamics_wofost72_01.yaml | 1593 +++++++++++++++++ .../physical_models/crop/leaf_dynamics.py | 162 +- .../physical_models/crop/root_dynamics.py | 106 +- src/diffwofost/physical_models/utils.py | 14 + 6 files changed, 1995 insertions(+), 164 deletions(-) create mode 100644 docs/notebooks/WOFOST_Leaf_Dynamics.conf create mode 100644 docs/notebooks/test_leafdynamics_wofost72_01.yaml diff --git a/docs/notebooks/WOFOST_Leaf_Dynamics.conf b/docs/notebooks/WOFOST_Leaf_Dynamics.conf new file mode 100644 index 0000000..23b8de6 --- /dev/null +++ b/docs/notebooks/WOFOST_Leaf_Dynamics.conf @@ -0,0 +1,32 @@ + +from diffwofost.physical_models.crop.leaf_dynamics import WOFOST_Leaf_Dynamics +from pcse.agromanager import AgroManager + +# Module to be used for water balance +SOIL = None + +# Module to be used for the crop simulation itself +CROP = WOFOST_Leaf_Dynamics + +# Module to use for AgroManagement actions +AGROMANAGEMENT = AgroManager + +# variables to save at OUTPUT signals +# Set to an empty list if you do not want any OUTPUT +OUTPUT_VARS = ["LAI", "TWLV"] +# interval for OUTPUT signals, either "daily"|"dekadal"|"monthly"|"weekly" +# For daily output you change the number of days between successive +# outputs using OUTPUT_INTERVAL_DAYS. For dekadal and monthly +# output this is ignored. +OUTPUT_INTERVAL = "daily" +OUTPUT_INTERVAL_DAYS = 1 +# Weekday: Monday is 0 and Sunday is 6 +OUTPUT_WEEKDAY = 0 + +# Summary variables to save at CROP_FINISH signals +# Set to an empty list if you do not want any SUMMARY_OUTPUT +SUMMARY_OUTPUT_VARS = [] + +# Summary variables to save at TERMINATE signals +# Set to an empty list if you do not want any TERMINAL_OUTPUT +TERMINAL_OUTPUT_VARS = [] diff --git a/docs/notebooks/optimization.ipynb b/docs/notebooks/optimization.ipynb index 48fe890..6b4c598 100644 --- a/docs/notebooks/optimization.ipynb +++ b/docs/notebooks/optimization.ipynb @@ -56,10 +56,65 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "e4049fea-1d05-41f1-bf9d-f030ae83a324", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: diffwofost in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (0.2.0)\n", + "Requirement already satisfied: torch in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from diffwofost) (2.9.0)\n", + "Requirement already satisfied: pcse in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from diffwofost) (6.0.9)\n", + "Requirement already satisfied: SQLAlchemy<2.0,>=1.3.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (1.4.54)\n", + "Requirement already satisfied: PyYAML>=5.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (6.0.3)\n", + "Requirement already satisfied: openpyxl>=3.0.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (3.1.5)\n", + "Requirement already satisfied: requests>=2.0.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (2.32.5)\n", + "Requirement already satisfied: pandas>=0.25 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (2.3.3)\n", + "Requirement already satisfied: traitlets-pcse==5.0.0.dev in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (5.0.0.dev0)\n", + "Requirement already satisfied: dotmap>=1.3 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (1.3.30)\n", + "Requirement already satisfied: ipython_genutils in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from traitlets-pcse==5.0.0.dev->pcse->diffwofost) (0.2.0)\n", + "Requirement already satisfied: six in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from traitlets-pcse==5.0.0.dev->pcse->diffwofost) (1.17.0)\n", + "Requirement already satisfied: decorator in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from traitlets-pcse==5.0.0.dev->pcse->diffwofost) (5.2.1)\n", + "Requirement already satisfied: filelock in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.20.0)\n", + "Requirement already satisfied: typing-extensions>=4.10.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (4.15.0)\n", + "Requirement already satisfied: setuptools in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (80.9.0)\n", + "Requirement already satisfied: sympy>=1.13.3 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (1.14.0)\n", + "Requirement already satisfied: networkx>=2.5.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.5)\n", + "Requirement already satisfied: jinja2 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.1.6)\n", + "Requirement already satisfied: fsspec>=0.8.5 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (2025.9.0)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.8.93 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.93)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.8.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.90)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.8.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.90)\n", + "Requirement already satisfied: nvidia-cudnn-cu12==9.10.2.21 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (9.10.2.21)\n", + "Requirement already satisfied: nvidia-cublas-cu12==12.8.4.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.4.1)\n", + "Requirement already satisfied: nvidia-cufft-cu12==11.3.3.83 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (11.3.3.83)\n", + "Requirement already satisfied: nvidia-curand-cu12==10.3.9.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (10.3.9.90)\n", + "Requirement already satisfied: nvidia-cusolver-cu12==11.7.3.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (11.7.3.90)\n", + "Requirement already satisfied: nvidia-cusparse-cu12==12.5.8.93 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.5.8.93)\n", + "Requirement already satisfied: nvidia-cusparselt-cu12==0.7.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (0.7.1)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.27.5 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (2.27.5)\n", + "Requirement already satisfied: nvidia-nvshmem-cu12==3.3.20 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.3.20)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.8.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.90)\n", + "Requirement already satisfied: nvidia-nvjitlink-cu12==12.8.93 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.93)\n", + "Requirement already satisfied: nvidia-cufile-cu12==1.13.1.3 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (1.13.1.3)\n", + "Requirement already satisfied: triton==3.5.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.5.0)\n", + "Requirement already satisfied: et-xmlfile in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from openpyxl>=3.0.0->pcse->diffwofost) (2.0.0)\n", + "Requirement already satisfied: numpy>=1.26.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pandas>=0.25->pcse->diffwofost) (2.3.4)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pandas>=0.25->pcse->diffwofost) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pandas>=0.25->pcse->diffwofost) (2025.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pandas>=0.25->pcse->diffwofost) (2025.2)\n", + "Requirement already satisfied: charset_normalizer<4,>=2 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from requests>=2.0.0->pcse->diffwofost) (3.4.4)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from requests>=2.0.0->pcse->diffwofost) (3.11)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from requests>=2.0.0->pcse->diffwofost) (2.5.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from requests>=2.0.0->pcse->diffwofost) (2025.10.5)\n", + "Requirement already satisfied: greenlet!=0.4.17 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from SQLAlchemy<2.0,>=1.3.0->pcse->diffwofost) (3.2.4)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from sympy>=1.13.3->torch->diffwofost) (1.3.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from jinja2->torch->diffwofost) (3.0.3)\n" + ] + } + ], "source": [ "# install diffwofost\n", "!pip install diffwofost" @@ -67,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "21731653-3976-4bb9-b83b-b11d78211700", "metadata": {}, "outputs": [], @@ -82,9 +137,53 @@ "from diffwofost.physical_models.utils import prepare_engine_input" ] }, + { + "cell_type": "markdown", + "id": "f476e6d4", + "metadata": {}, + "source": [ + "### 1.1.1 Configure device and dtype\n", + "\n", + "The `diffwofost` modules support configurable device (CPU/CUDA) and dtype for tensor operations. By default, CUDA is used if available, otherwise CPU. You can override this by setting the device and dtype on the module classes or by passing them to `EngineTestHelper`." + ] + }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, + "id": "8f65f771", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using device: cuda\n", + "Using dtype: torch.float64\n" + ] + } + ], + "source": [ + "# Configure device and dtype (optional)\n", + "# By default, CUDA is used if available, otherwise CPU\n", + "# You can override by setting these before creating the engine:\n", + "# \n", + "# from diffwofost.physical_models.crop.leaf_dynamics import WOFOST_Leaf_Dynamics\n", + "# WOFOST_Leaf_Dynamics.device = torch.device(\"cuda\") # or \"cpu\"\n", + "# WOFOST_Leaf_Dynamics.dtype = torch.float32 # or torch.float64\n", + "#\n", + "# Or pass to EngineTestHelper:\n", + "# engine = EngineTestHelper(..., device=torch.device(\"cuda\"), dtype=torch.float32)\n", + "\n", + "# Check what device will be used by default\n", + "_device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "_dtype = torch.float64\n", + "print(f\"Using device: {_device}\")\n", + "print(f\"Using dtype: {_dtype}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, "id": "82a1ef6b-336e-4902-8bd1-2a1ed2020f9d", "metadata": {}, "outputs": [], @@ -114,7 +213,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "id": "0233a048-e5a2-4249-887d-35a37284769c", "metadata": {}, "outputs": [ @@ -146,7 +245,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "id": "b4a24f1c-77e4-4b05-bde9-229dd497f09e", "metadata": {}, "outputs": [ @@ -168,7 +267,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "5a459489-bfcb-4ad6-9102-1b6be5edeb52", "metadata": {}, "outputs": [], @@ -180,10 +279,23 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "id": "9f3105fb-4fbe-4405-9fd4-e8255b4b119e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "TypeError", + "evalue": "string indices must be integers, not 'str'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mTypeError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[8]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;66;03m# ---- Here we read the test data and set some variables ----\u001b[39;00m\n\u001b[32m 2\u001b[39m (crop_model_params_provider, weather_data_provider, agro_management_inputs, external_states) = (\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m \u001b[43mprepare_engine_input\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtest_data_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mSPAN\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mTDWI\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mTBASE\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mPERDL\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mRGRLAI\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 4\u001b[39m )\n\u001b[32m 6\u001b[39m expected_results = yaml.safe_load(\u001b[38;5;28mopen\u001b[39m(test_data_path))[\u001b[33m\"\u001b[39m\u001b[33mModelResults\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m 7\u001b[39m expected_lai_twlv = torch.tensor(\n\u001b[32m 8\u001b[39m [[\u001b[38;5;28mfloat\u001b[39m(item[\u001b[33m\"\u001b[39m\u001b[33mLAI\u001b[39m\u001b[33m\"\u001b[39m]), \u001b[38;5;28mfloat\u001b[39m(item[\u001b[33m\"\u001b[39m\u001b[33mTWLV\u001b[39m\u001b[33m\"\u001b[39m])] \u001b[38;5;28;01mfor\u001b[39;00m item \u001b[38;5;129;01min\u001b[39;00m expected_results], dtype=torch.float32\n\u001b[32m 9\u001b[39m ).unsqueeze(\u001b[32m0\u001b[39m) \u001b[38;5;66;03m# shape: [1, time_steps, 2]\u001b[39;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Dropbox/eScience_projects/diffWOFOST/src/diffwofost/physical_models/utils.py:237\u001b[39m, in \u001b[36mprepare_engine_input\u001b[39m\u001b[34m(test_data, crop_model_params, meteo_range_checks, dtype)\u001b[39m\n\u001b[32m 233\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mprepare_engine_input\u001b[39m(\n\u001b[32m 234\u001b[39m test_data, crop_model_params, meteo_range_checks=\u001b[38;5;28;01mTrue\u001b[39;00m, dtype=torch.float64\n\u001b[32m 235\u001b[39m ):\n\u001b[32m 236\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m\"\"\"Prepare the inputs for the engine from the YAML file.\"\"\"\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m237\u001b[39m agro_management_inputs = \u001b[43mtest_data\u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mAgroManagement\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[32m 238\u001b[39m cropd = test_data[\u001b[33m\"\u001b[39m\u001b[33mModelParameters\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m 240\u001b[39m weather_data_provider = WeatherDataProviderTestHelper(\n\u001b[32m 241\u001b[39m test_data[\u001b[33m\"\u001b[39m\u001b[33mWeatherVariables\u001b[39m\u001b[33m\"\u001b[39m], meteo_range_checks=meteo_range_checks\n\u001b[32m 242\u001b[39m )\n", + "\u001b[31mTypeError\u001b[39m: string indices must be integers, not 'str'" + ] + } + ], "source": [ "# ---- Here we read the test data and set some variables ----\n", "(crop_model_params_provider, weather_data_provider, agro_management_inputs, external_states) = (\n", @@ -215,7 +327,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "e4610238-de0d-42cf-9689-3c074eb2cc0e", "metadata": {}, "outputs": [], @@ -252,7 +364,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "36dd6463-4812-41c0-b2bf-d4769df1136f", "metadata": {}, "outputs": [], @@ -283,12 +395,16 @@ " crop_model_params_provider_.set_override(\"TDWI\", tdwi_val, check=False)\n", " crop_model_params_provider_.set_override(\"SPAN\", span_val, check=False)\n", "\n", + " # Note: You can optionally pass device and dtype to EngineTestHelper:\n", + " # engine = EngineTestHelper(..., device=torch.device(\"cuda\"), dtype=torch.float32)\n", " engine = EngineTestHelper(\n", " crop_model_params_provider_,\n", " self.weather_data_provider,\n", " self.agro_management_inputs,\n", " self.config_path,\n", " external_states_,\n", + " device = _device,\n", + " dtype = _dtype\n", " )\n", " engine.run_till_terminate()\n", " results = engine.get_output()\n", @@ -300,28 +416,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "0dcd85c8-624c-4b58-a7c9-893316110d98", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step 0, Loss 0.1348, TDWI 0.4242, SPAN 31.2111\n", - "Step 10, Loss 0.0589, TDWI 0.4890, SPAN 36.7883\n", - "Step 20, Loss 0.0174, TDWI 0.5191, SPAN 34.8344\n", - "Step 30, Loss 0.0113, TDWI 0.5056, SPAN 35.0567\n", - "Step 40, Loss 0.0067, TDWI 0.5100, SPAN 35.4831\n", - "Step 50, Loss 0.0121, TDWI 0.5019, SPAN 34.6534\n", - "Step 60, Loss 0.0005, TDWI 0.5038, SPAN 34.6887\n", - "Step 70, Loss 0.0079, TDWI 0.5015, SPAN 35.7478\n", - "Step 80, Loss 0.0145, TDWI 0.5061, SPAN 34.5574\n", - "Step 90, Loss 0.0110, TDWI 0.4985, SPAN 34.3927\n", - "Step 100, Loss 0.0271, TDWI 0.5064, SPAN 36.3026\n" - ] - } - ], + "outputs": [], "source": [ "# ---- Create model ---- \n", "opt_model = OptDiffLeafDynamics(\n", @@ -354,18 +452,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "c2d3a463-43a4-4b29-a71f-696c019343d3", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Actual TDWI 0.5100, SPAN 35.0000\n" - ] - } - ], + "outputs": [], "source": [ "# ---- validate the results using test data ---- \n", "print(f\"Actual TDWI {crop_model_params_provider[\"TDWI\"].item():.4f}, SPAN {crop_model_params_provider[\"SPAN\"].item():.4f}\")" @@ -402,7 +492,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "eaa4c172-9719-4a79-b2f2-d37ea5b6f11d", "metadata": {}, "outputs": [], @@ -419,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "26437aed-755d-4ee3-b7b6-82caf8c30ec5", "metadata": {}, "outputs": [], @@ -447,18 +537,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "22000922-68be-47ed-8afa-2e97c56bb502", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloaded: test_rootdynamics_wofost72_01.yaml\n" - ] - } - ], + "outputs": [], "source": [ "import urllib.request\n", "\n", @@ -479,18 +561,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "ae2de6dc-1294-4a5a-91d0-3e83f28dc892", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloaded: WOFOST_Root_Dynamics.conf\n" - ] - } - ], + "outputs": [], "source": [ "url = \"https://raw.githubusercontent.com/WUR-AI/diffWOFOST/refs/heads/main/tests/physical_models/test_data/WOFOST_Root_Dynamics.conf\"\n", "filename = \"WOFOST_Root_Dynamics.conf\"\n", @@ -501,7 +575,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "a69e9279-49eb-4136-8f15-7cff8bb4af52", "metadata": {}, "outputs": [], @@ -513,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "d560476b-64f9-422c-9722-8d0778cfc574", "metadata": {}, "outputs": [], @@ -548,7 +622,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "cbfc9e28-3233-4808-b658-36d6f7d18d75", "metadata": {}, "outputs": [], @@ -584,7 +658,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "90296352-4817-4586-842c-12ac6d97d779", "metadata": {}, "outputs": [], @@ -612,12 +686,16 @@ " # pass new value of parameters to the model\n", " crop_model_params_provider_.set_override(\"TDWI\", tdwi_val, check=False)\n", "\n", + " # Note: You can optionally pass device and dtype to EngineTestHelper:\n", + " # engine = EngineTestHelper(..., device=torch.device(\"cuda\"), dtype=torch.float32)\n", " engine = EngineTestHelper(\n", " crop_model_params_provider_,\n", " self.weather_data_provider,\n", " self.agro_management_inputs,\n", " self.config_path,\n", " external_states_,\n", + " device=_device,\n", + " dtype=_dtype\n", " )\n", " engine.run_till_terminate()\n", " results = engine.get_output()\n", @@ -627,7 +705,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "f2a1a612-f33c-48a0-a3d4-31318d78b9f4", "metadata": {}, "outputs": [], @@ -644,28 +722,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "6c09d1ce-db66-46f3-93d2-1b16f8196e49", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step 0, Loss 0.00000021, TDWI 0.5340\n", - "Step 10, Loss 0.00000015, TDWI 0.5137\n", - "Step 20, Loss 0.00000164, TDWI 0.5144\n", - "Step 30, Loss 0.00000068, TDWI 0.5107\n", - "Step 40, Loss 0.00000019, TDWI 0.5072\n", - "Step 50, Loss 0.00000080, TDWI 0.5084\n", - "Step 60, Loss 0.00000007, TDWI 0.5071\n", - "Step 70, Loss 0.00000100, TDWI 0.5091\n", - "Step 80, Loss 0.00000131, TDWI 0.5089\n", - "Step 90, Loss 0.00000068, TDWI 0.5115\n", - "Step 100, Loss 0.00000071, TDWI 0.5053\n" - ] - } - ], + "outputs": [], "source": [ "# ---- Optimizer ---- \n", "optimizer = torch.optim.Adam(opt_model.parameters(), lr=0.1)\n", @@ -688,18 +748,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "2029e2dd-7460-4c71-85a9-b1030a43167b", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Actual TDWI 0.5100\n" - ] - } - ], + "outputs": [], "source": [ "# ---- validate the results using test data ---- \n", "print(f\"Actual TDWI {crop_model_params_provider[\"TDWI\"].item():.4f}\")" @@ -716,7 +768,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "dwof", "language": "python", "name": "python3" }, @@ -730,7 +782,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.11" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/docs/notebooks/test_leafdynamics_wofost72_01.yaml b/docs/notebooks/test_leafdynamics_wofost72_01.yaml new file mode 100644 index 0000000..cf2a335 --- /dev/null +++ b/docs/notebooks/test_leafdynamics_wofost72_01.yaml @@ -0,0 +1,1593 @@ +# Test file for testing the simulation of leaf dynamics in WOFOST 7.1 +# encoding: UTF-8 +# +# All parameter and variable names and their respective units refer to the +# WOFOST manual available from http://wageningenur.nl/wofost +# +# Test file generated with PCSE 5.3.3: https://doi.org/10.5281/zenodo.1252479 +# +# crop: Sugar beets +# latitude: 49.43613 +# longitude: 12.98528 +# +# Wageningen-UR 2018, allard.dewit@wur.nl +AgroManagement: +- 2010-04-16: + CropCalendar: {crop_end_date: 2010-12-31, crop_end_type: harvest, crop_name: Sugar + beets, crop_start_date: 2010-04-16, crop_start_type: sowing, max_duration: 260, + variety_name: Sugar beets_95118_2010} + StateEvents: null + TimedEvents: null +ExternalStates: +- {ADMI: 0.0, DAY: 2010-04-16, DVS: -0.1, FL: 0.85, FR: 0.2, PAI: 0.0, RFTRA: 0.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-17, DVS: -0.09294444444444445, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-18, DVS: -0.08805555555555557, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-19, DVS: -0.08200000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-20, DVS: -0.07333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-21, DVS: -0.06500000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-22, DVS: -0.05994444444444446, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-23, DVS: -0.057777777777777796, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-24, DVS: -0.05333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-25, DVS: -0.04600000000000001, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-26, DVS: -0.03472222222222224, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-27, DVS: -0.025000000000000015, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-28, DVS: -0.016722222222222236, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-29, DVS: -0.007555555555555569, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.06334614016373197, DAY: 2010-04-30, DVS: 0.0, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.06955663516961932, DAY: 2010-05-01, DVS: 0.030023923444976078, FL: 0.8394916267942584, + FR: 0.20296939902203062, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.06036795101242246, DAY: 2010-05-02, DVS: 0.05741626794258373, FL: 0.8299043062200957, + FR: 0.20567853199432148, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.06904930123904608, DAY: 2010-05-03, DVS: 0.07882775119617225, FL: 0.8224102870813397, + FR: 0.20779615121720385, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.05888212870381866, DAY: 2010-05-04, DVS: 0.09868421052631579, FL: 0.8154605263157895, + FR: 0.20975997686524003, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.06345060029463373, DAY: 2010-05-05, DVS: 0.11220095693779905, FL: 0.8107296650717704, + FR: 0.2110967979389032, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.07881135347334553, DAY: 2010-05-06, DVS: 0.12212918660287082, FL: 0.8072547846889951, + FR: 0.21207871076292129, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.09852481964261431, DAY: 2010-05-07, DVS: 0.13732057416267943, FL: 0.8019377990430622, + FR: 0.21358115568641886, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.15447577442412816, DAY: 2010-05-08, DVS: 0.14760765550239235, FL: 0.7983373205741626, + FR: 0.21459855933540145, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.18431729511837602, DAY: 2010-05-09, DVS: 0.16363636363636364, FL: 0.7927272727272727, + FR: 0.21618381618381619, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.140018980850247, DAY: 2010-05-10, DVS: 0.1812200956937799, FL: 0.786572966507177, + FR: 0.21792286660707713, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.2525109296012593, DAY: 2010-05-11, DVS: 0.20107655502392344, FL: 0.7796232057416268, + FR: 0.21988669225511331, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.2607790591371754, DAY: 2010-05-12, DVS: 0.22799043062200958, FL: 0.7702033492822966, + FR: 0.2225485041274515, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.21051934478979178, DAY: 2010-05-13, DVS: 0.2508373205741627, FL: 0.762206937799043, + FR: 0.22480808665019192, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.18082952401394806, DAY: 2010-05-14, DVS: 0.2674641148325359, FL: 0.7563875598086124, + FR: 0.22645249487354752, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.21216158586167716, DAY: 2010-05-15, DVS: 0.27763157894736845, FL: 0.752828947368421, + FR: 0.22745806824754194, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.3225925110304646, DAY: 2010-05-16, DVS: 0.28791866028708135, FL: 0.7492284688995215, + FR: 0.22847547189652453, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.48110564012108614, DAY: 2010-05-17, DVS: 0.3013157894736842, FL: 0.7445394736842105, + FR: 0.22980046269519955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.37044175559672554, DAY: 2010-05-18, DVS: 0.31830143540669853, FL: 0.7385944976076555, + FR: 0.23148036174351963, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.21092861815085803, DAY: 2010-05-19, DVS: 0.33337320574162677, FL: 0.7333193779904306, + FR: 0.23297097639202902, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.30947565917826964, DAY: 2010-05-20, DVS: 0.3407894736842105, FL: 0.7307236842105264, + FR: 0.23370445344129553, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.5576143631475478, DAY: 2010-05-21, DVS: 0.35633971291866023, FL: 0.7252811004784689, + FR: 0.2352423891897576, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.8532546017550056, DAY: 2010-05-22, DVS: 0.3809808612440191, FL: 0.7166566985645932, + FR: 0.23767942583732057, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.1077369109143245, DAY: 2010-05-23, DVS: 0.40765550239234444, FL: 0.7073205741626795, + FR: 0.2403175771596824, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.345054359613823, DAY: 2010-05-24, DVS: 0.43540669856459324, FL: 0.6976076555023923, + FR: 0.24306220095693779, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.5399857398800252, DAY: 2010-05-25, DVS: 0.46662679425837317, FL: 0.6866806220095694, + FR: 0.2461499027288501, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.1323384231071365, DAY: 2010-05-26, DVS: 0.49928229665071766, FL: 0.6752511961722488, + FR: 0.24937956780062043, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.5606027420064925, DAY: 2010-05-27, DVS: 0.5257177033492823, FL: 0.6659988038277512, + FR: 0.25199405857300594, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 2.0711140915316895, DAY: 2010-05-28, DVS: 0.5544258373205742, FL: 0.655950956937799, + FR: 0.25483332457016666, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 2.7804869760516895, DAY: 2010-05-29, DVS: 0.5836124401913876, FL: 0.6457356459330144, + FR: 0.2577199116672801, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 2.241247492064963, DAY: 2010-05-30, DVS: 0.6105263157894737, FL: 0.6363157894736842, + FR: 0.26038172353961825, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 2.6631751947291513, DAY: 2010-05-31, DVS: 0.6368421052631579, FL: 0.6271052631578947, + FR: 0.26298438403701563, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.5195245565028868, DAY: 2010-06-01, DVS: 0.6534688995215311, FL: 0.6212858851674641, + FR: 0.26462879226037117, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.6652932112744012, DAY: 2010-06-02, DVS: 0.6690191387559808, FL: 0.6158433014354067, + FR: 0.26616672800883323, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.9887086907856009, DAY: 2010-06-03, DVS: 0.6867224880382775, FL: 0.6096471291866028, + FR: 0.26791760870708237, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 5.883062026536403, DAY: 2010-06-04, DVS: 0.7076555023923445, FL: 0.6023205741626794, + FR: 0.26998790683001206, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 7.185506694825693, DAY: 2010-06-05, DVS: 0.7355263157894737, FL: 0.5925657894736842, + FR: 0.2727443609022556, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 8.398874147123157, DAY: 2010-06-06, DVS: 0.766866028708134, FL: 0.5815968899521531, + FR: 0.2758438929491561, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 8.460635199837757, DAY: 2010-06-07, DVS: 0.8037081339712919, FL: 0.5687021531100478, + FR: 0.2794876176455124, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 10.983494041245319, DAY: 2010-06-08, DVS: 0.8422248803827752, FL: 0.5552212918660286, + FR: 0.283296966191703, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 12.749950206041587, DAY: 2010-06-09, DVS: 0.8801435406698566, FL: 0.5419497607655501, + FR: 0.28704716336295283, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 14.529998478430059, DAY: 2010-06-10, DVS: 0.9232057416267944, FL: 0.526877990430622, + FR: 0.2914673046251994, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 18.17948474779467, DAY: 2010-06-11, DVS: 0.9662679425837322, FL: 0.5118062200956938, + FR: 0.29625199362041466, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 17.89920097929859, DAY: 2010-06-12, DVS: 1.0, FL: 0.5, FR: 0.3, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 16.927109068911655, DAY: 2010-06-13, DVS: 1.0110266159695818, FL: 0.48346007604562735, + FR: 0.2889733840304182, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 17.694733764726987, DAY: 2010-06-14, DVS: 1.0191381495564005, FL: 0.4712927756653993, + FR: 0.2808618504435995, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 20.307476232534015, DAY: 2010-06-15, DVS: 1.0269645120405577, FL: 0.4595532319391634, + FR: 0.27303548795944227, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 24.757657128862814, DAY: 2010-06-16, DVS: 1.0346958174904943, FL: 0.4479562737642585, + FR: 0.26530418250950566, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 32.81491074090979, DAY: 2010-06-17, DVS: 1.0418567807351078, FL: 0.4372148288973383, + FR: 0.25814321926489214, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 24.910834495096452, DAY: 2010-06-18, DVS: 1.049809885931559, FL: 0.4252851711026615, + FR: 0.25019011406844094, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 35.029238340180555, DAY: 2010-06-19, DVS: 1.0582699619771865, FL: 0.4125950570342203, + FR: 0.24173003802281345, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 27.14283941622052, DAY: 2010-06-20, DVS: 1.0640367553865655, FL: 0.40394486692015175, + FR: 0.23596324461343443, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 38.7517315160596, DAY: 2010-06-21, DVS: 1.0691064638783272, FL: 0.3963403041825092, + FR: 0.23089353612167274, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 49.303521645897334, DAY: 2010-06-22, DVS: 1.0750000000000002, FL: 0.38749999999999973, + FR: 0.22499999999999976, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 58.579142820894056, DAY: 2010-06-23, DVS: 1.0811153358681878, FL: 0.37832699619771837, + FR: 0.21888466413181218, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 63.87538124612525, DAY: 2010-06-24, DVS: 1.0874841571609635, FL: 0.3687737642585548, + FR: 0.21251584283903646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 70.58830761279373, DAY: 2010-06-25, DVS: 1.0964195183776935, FL: 0.3553707224334598, + FR: 0.20358048162230646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 81.61069863667417, DAY: 2010-06-26, DVS: 1.10532319391635, FL: 0.3420152091254751, + FR: 0.19467680608365, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 98.91460885559174, DAY: 2010-06-27, DVS: 1.1146704689480356, FL: 0.32799429657794665, + FR: 0.18532953105196434, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 110.71534392471503, DAY: 2010-06-28, DVS: 1.124746514575412, FL: 0.3128802281368819, + FR: 0.17525348542458782, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 116.76687428085175, DAY: 2010-06-29, DVS: 1.1349493029150826, FL: 0.29757604562737616, + FR: 0.16505069708491735, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 117.14319484688673, DAY: 2010-06-30, DVS: 1.1457224334600762, FL: 0.2814163498098857, + FR: 0.15427756653992372, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 136.4298986955567, DAY: 2010-07-01, DVS: 1.15712927756654, FL: 0.2643060836501899, + FR: 0.14694459532862567, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.0458082598484, DAY: 2010-07-02, DVS: 1.1683460076045629, FL: 0.24748098859315576, + FR: 0.14213742531233017, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 153.63543187877124, DAY: 2010-07-03, DVS: 1.1797528517110267, FL: 0.23037072243345996, + FR: 0.13724877783813136, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 148.53017524286903, DAY: 2010-07-04, DVS: 1.1911596958174906, FL: 0.21326045627376417, + FR: 0.13236013036393257, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.83841279006657, DAY: 2010-07-05, DVS: 1.2025665399239545, FL: 0.19615019011406837, + FR: 0.12747148288973378, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 158.68737582207044, DAY: 2010-07-06, DVS: 1.2139733840304183, FL: 0.17903992395437257, + FR: 0.12258283541553498, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 182.5758636940754, DAY: 2010-07-07, DVS: 1.223510773130545, FL: 0.16473384030418253, + FR: 0.11849538294405212, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 202.21274762347915, DAY: 2010-07-08, DVS: 1.2311787072243345, FL: 0.15323193916349825, + FR: 0.1152091254752852, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 203.06904746497915, DAY: 2010-07-09, DVS: 1.2406844106463877, FL: 0.13897338403041853, + FR: 0.11113525258011955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 203.81365365320397, DAY: 2010-07-10, DVS: 1.2520912547528515, FL: 0.12186311787072274, + FR: 0.10624660510592077, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 207.2796747505659, DAY: 2010-07-11, DVS: 1.2634980988593154, FL: 0.10475285171102694, + FR: 0.10135795763172198, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 210.2564099700119, DAY: 2010-07-12, DVS: 1.2749049429657793, FL: 0.08764258555133114, + FR: 0.09646931015752318, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 203.77144757441917, DAY: 2010-07-13, DVS: 1.2863117870722431, FL: 0.07053231939163535, + FR: 0.09158066268332438, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 218.218059543731, DAY: 2010-07-14, DVS: 1.297718631178707, FL: 0.05342205323193955, + FR: 0.09, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 172.34128595981582, DAY: 2010-07-15, DVS: 1.3091254752851709, FL: 0.05, FR: 0.08966201943388256, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 217.38049720124903, DAY: 2010-07-16, DVS: 1.3205323193916347, FL: 0.05, FR: 0.08923954372623574, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 170.3206034911828, DAY: 2010-07-17, DVS: 1.3319391634980986, FL: 0.05, FR: 0.08881706801858893, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 187.5446581745791, DAY: 2010-07-18, DVS: 1.3433460076045625, FL: 0.05, FR: 0.08839459231094213, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 224.14671689354523, DAY: 2010-07-19, DVS: 1.3523447401774396, FL: 0.05, FR: 0.08806130591935409, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 233.29231714903904, DAY: 2010-07-20, DVS: 1.3613434727503166, FL: 0.05, FR: 0.08772801952776604, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 222.37721579346007, DAY: 2010-07-21, DVS: 1.37148288973384, FL: 0.05, FR: 0.08735248556541333, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 212.9717345765432, DAY: 2010-07-22, DVS: 1.382889733840304, FL: 0.05, FR: 0.08693000985776653, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 106.44059255533156, DAY: 2010-07-23, DVS: 1.3942965779467678, FL: 0.05, FR: 0.08650753415011972, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 102.18170120678516, DAY: 2010-07-24, DVS: 1.4050697084917614, FL: 0.05, FR: 0.08610852931511995, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 220.2561264890109, DAY: 2010-07-25, DVS: 1.4132129277566536, FL: 0.05, FR: 0.08580692860160542, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 198.46020040119276, DAY: 2010-07-26, DVS: 1.4202154626108996, FL: 0.05, FR: 0.08554757545885557, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 200.55021107622272, DAY: 2010-07-27, DVS: 1.4277566539923952, FL: 0.05, FR: 0.08526827207435574, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 140.03325959094497, DAY: 2010-07-28, DVS: 1.4362167300380226, FL: 0.05, FR: 0.08495493592451768, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.3498324135558, DAY: 2010-07-29, DVS: 1.4450253485424587, FL: 0.05, FR: 0.08462869079472375, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 172.10898739755729, DAY: 2010-07-30, DVS: 1.4536121673003801, FL: 0.05, FR: 0.08431066047035629, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 239.00609791132996, DAY: 2010-07-31, DVS: 1.4618821292775663, FL: 0.05, FR: 0.08400436558231236, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 231.42562696137483, DAY: 2010-08-01, DVS: 1.4703422053231938, FL: 0.05, FR: 0.0836910294324743, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 155.96076995709458, DAY: 2010-08-02, DVS: 1.4803231939163497, FL: 0.05, FR: 0.08332136318828334, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 158.9912960157878, DAY: 2010-08-03, DVS: 1.4905576679340937, FL: 0.05, FR: 0.08294230859503357, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 225.87944658593784, DAY: 2010-08-04, DVS: 1.5001584283903675, FL: 0.05, FR: 0.08258672487443083, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 151.14300077473197, DAY: 2010-08-05, DVS: 1.508016476552598, FL: 0.05, FR: 0.08229568605360749, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 64.90608388145633, DAY: 2010-08-06, DVS: 1.5157477820025347, FL: 0.05, FR: 0.08200934140731353, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 89.22935957524096, DAY: 2010-08-07, DVS: 1.5236692015209123, FL: 0.05, FR: 0.08171595549922547, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 208.20159137335756, DAY: 2010-08-08, DVS: 1.531780735107731, FL: 0.05, FR: 0.0814155283293433, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 202.41906247758274, DAY: 2010-08-09, DVS: 1.5401774397972114, FL: 0.05, FR: 0.08110453926676994, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 205.60001859060077, DAY: 2010-08-10, DVS: 1.54946134347275, FL: 0.05, FR: 0.08076069098249075, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 193.46756914002214, DAY: 2010-08-11, DVS: 1.558333333333333, FL: 0.05, FR: 0.08043209876543211, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 169.18156119156453, DAY: 2010-08-12, DVS: 1.5679340937896067, FL: 0.05, FR: 0.08007651504482939, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 93.08974266331302, DAY: 2010-08-13, DVS: 1.5777883396704686, FL: 0.05, FR: 0.0784423320659063, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 160.937893254941, DAY: 2010-08-14, DVS: 1.5872623574144484, FL: 0.05, FR: 0.07654752851711033, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 186.76242029906928, DAY: 2010-08-15, DVS: 1.596546261089987, FL: 0.05, FR: 0.07469074778200262, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 174.26873717886699, DAY: 2010-08-16, DVS: 1.6078580481622304, FL: 0.05, FR: 0.07242839036755393, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 53.098070543751426, DAY: 2010-08-17, DVS: 1.6159695817490491, FL: 0.05, FR: 0.07080608365019019, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 70.23327561394287, DAY: 2010-08-18, DVS: 1.622782002534854, FL: 0.05, FR: 0.0694435994930292, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 199.91869360998516, DAY: 2010-08-19, DVS: 1.6301964512040557, FL: 0.05, FR: 0.06796070975918887, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 223.74667130958667, DAY: 2010-08-20, DVS: 1.6388466413181242, FL: 0.05, FR: 0.06623067173637517, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 213.71782243484523, DAY: 2010-08-21, DVS: 1.647401774397972, FL: 0.05, FR: 0.06451964512040559, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 204.92227270536407, DAY: 2010-08-22, DVS: 1.6576996197718632, FL: 0.05, FR: 0.062460076045627366, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 148.08498613058885, DAY: 2010-08-23, DVS: 1.669106463878327, FL: 0.05, FR: 0.06017870722433459, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 131.56663617540406, DAY: 2010-08-24, DVS: 1.6796261089987325, FL: 0.05, FR: 0.058074778200253495, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 208.14796378003513, DAY: 2010-08-25, DVS: 1.6903992395437262, FL: 0.05, FR: 0.05592015209125477, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 174.43741030541455, DAY: 2010-08-26, DVS: 1.697845373891001, FL: 0.05, FR: 0.05443092522179978, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 138.12218294509915, DAY: 2010-08-27, DVS: 1.707636248415716, FL: 0.05, FR: 0.05247275031685682, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 153.8085011163628, DAY: 2010-08-28, DVS: 1.717141951837769, FL: 0.05, FR: 0.05057160963244618, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 166.36786308607878, DAY: 2010-08-29, DVS: 1.7241128010139415, FL: 0.05, FR: 0.0491774397972117, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 128.9994856080207, DAY: 2010-08-30, DVS: 1.7297845373890999, FL: 0.05, FR: 0.048043092522180024, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.98852774320295, DAY: 2010-08-31, DVS: 1.7338403041825092, FL: 0.05, FR: 0.04723193916349815, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 131.51208699193373, DAY: 2010-09-01, DVS: 1.738973384030418, FL: 0.05, FR: 0.046205323193916396, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 133.52093244179918, DAY: 2010-09-02, DVS: 1.7434093789607095, FL: 0.05, FR: 0.04531812420785811, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 191.3675196695657, DAY: 2010-09-03, DVS: 1.7488910012674268, FL: 0.05, FR: 0.044221799746514634, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 142.11326427125846, DAY: 2010-09-04, DVS: 1.7548162230671733, FL: 0.05, FR: 0.04303675538656533, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 202.89142256251282, DAY: 2010-09-05, DVS: 1.761248415716096, FL: 0.05, FR: 0.041750316856780816, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 199.62648416769255, DAY: 2010-09-06, DVS: 1.7663814955640047, FL: 0.05, FR: 0.04072370088719906, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 174.64113933021284, DAY: 2010-09-07, DVS: 1.7712927756653989, FL: 0.05, FR: 0.03974144486692022, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 139.08471598465746, DAY: 2010-09-08, DVS: 1.7755703422053228, FL: 0.05, FR: 0.038885931558935424, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 82.67638414658957, DAY: 2010-09-09, DVS: 1.781780735107731, FL: 0.05, FR: 0.03764385297845378, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 152.03323101044322, DAY: 2010-09-10, DVS: 1.7885297845373889, FL: 0.05, FR: 0.03629404309252222, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 188.54073598348467, DAY: 2010-09-11, DVS: 1.7956273764258552, FL: 0.05, FR: 0.03487452471482894, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 184.05041333017076, DAY: 2010-09-12, DVS: 1.8026299112801012, FL: 0.05, FR: 0.033474017743979755, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 80.5742369039994, DAY: 2010-09-13, DVS: 1.8095690747782, FL: 0.05, FR: 0.03208618504435998, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 84.81301930060773, DAY: 2010-09-14, DVS: 1.8155259822560201, FL: 0.05, FR: 0.030894803548795965, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 49.372356921724915, DAY: 2010-09-15, DVS: 1.820722433460076, FL: 0.05, FR: 0.02985551330798479, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 141.38168873270675, DAY: 2010-09-16, DVS: 1.8274081115335867, FL: 0.05, FR: 0.028518377693282644, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.8674496140244, DAY: 2010-09-17, DVS: 1.8338403041825093, FL: 0.05, FR: 0.02723193916349813, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 161.59738610558637, DAY: 2010-09-18, DVS: 1.838593155893536, FL: 0.05, FR: 0.02628136882129279, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 160.71185556416103, DAY: 2010-09-19, DVS: 1.8419201520912547, FL: 0.05, FR: 0.025615969581749047, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 167.07029527454148, DAY: 2010-09-20, DVS: 1.8455640050697084, FL: 0.05, FR: 0.024887198986058304, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 167.44249755660599, DAY: 2010-09-21, DVS: 1.849873257287706, FL: 0.05, FR: 0.02402534854245881, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 161.66286186201958, DAY: 2010-09-22, DVS: 1.855830164765526, FL: 0.05, FR: 0.02283396704689479, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 158.87746836853117, DAY: 2010-09-23, DVS: 1.8624524714828898, FL: 0.05, FR: 0.02150950570342202, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 145.92499554293613, DAY: 2010-09-24, DVS: 1.869169835234474, FL: 0.05, FR: 0.020166032953105165, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 36.85993111833173, DAY: 2010-09-25, DVS: 1.8765209125475286, FL: 0.05, FR: 0.01869581749049426, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 70.50229901761877, DAY: 2010-09-26, DVS: 1.8823193916349812, FL: 0.05, FR: 0.017536121673003745, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 117.81966505006466, DAY: 2010-09-27, DVS: 1.886089987325729, FL: 0.05, FR: 0.016782002534854165, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 44.65653234518239, DAY: 2010-09-28, DVS: 1.889860583016477, FL: 0.05, FR: 0.016027883396704593, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 109.53680851036636, DAY: 2010-09-29, DVS: 1.8931875792141957, FL: 0.05, FR: 0.01536248415716085, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 101.08752630541781, DAY: 2010-09-30, DVS: 1.8975602027883403, FL: 0.05, FR: 0.01448795944233193, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 40.80050881178069, DAY: 2010-10-01, DVS: 1.9008555133079854, FL: 0.05, FR: 0.013828897338402896, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 79.8450266683765, DAY: 2010-10-02, DVS: 1.903738910012675, FL: 0.05, FR: 0.013252217997464996, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 118.6265113682002, DAY: 2010-10-03, DVS: 1.9084283903675545, FL: 0.05, FR: 0.012314321926489083, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 118.23375396361399, DAY: 2010-10-04, DVS: 1.9136565272496837, FL: 0.05, FR: 0.01126869455006324, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 82.43081801012632, DAY: 2010-10-05, DVS: 1.9184093789607104, FL: 0.05, FR: 0.010318124207857896, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 46.50841125589101, DAY: 2010-10-06, DVS: 1.9236692015209131, FL: 0.05, FR: 0.010458650190114152, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 32.96815156408577, DAY: 2010-10-07, DVS: 1.9287389100126748, FL: 0.05, FR: 0.011092363751584362, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 121.77727753718361, DAY: 2010-10-08, DVS: 1.9339353612167307, FL: 0.05, FR: 0.011741920152091346, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 119.4686953266058, DAY: 2010-10-09, DVS: 1.9394486692015216, FL: 0.05, FR: 0.012431083650190206, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 112.63420513906051, DAY: 2010-10-10, DVS: 1.9442648922686951, FL: 0.05, FR: 0.0130331115335869, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 112.72875569349394, DAY: 2010-10-11, DVS: 1.947972116603296, FL: 0.05, FR: 0.013496514575411999, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 108.04315231817708, DAY: 2010-10-12, DVS: 1.9517110266159703, FL: 0.05, FR: 0.013963878326996292, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 100.22700691884458, DAY: 2010-10-13, DVS: 1.9545310519645127, FL: 0.05, FR: 0.014316381495564095, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 95.2909499094097, DAY: 2010-10-14, DVS: 1.956970849176173, FL: 0.05, FR: 0.014621356147021633, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 19.539595870890874, DAY: 2010-10-15, DVS: 1.9585551330798485, FL: 0.05, FR: 0.014819391634981069, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 14.597831536425922, DAY: 2010-10-16, DVS: 1.9593155893536127, FL: 0.05, FR: 0.014914448669201594, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 19.96890058359237, DAY: 2010-10-17, DVS: 1.9616603295310526, FL: 0.05, FR: 0.015207541191381582, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 25.375332030621163, DAY: 2010-10-18, DVS: 1.9637515842839044, FL: 0.05, FR: 0.015468948035488053, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 23.259772421309517, DAY: 2010-10-19, DVS: 1.9649556400506978, FL: 0.05, FR: 0.015619455006337227, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 22.074458545299972, DAY: 2010-10-20, DVS: 1.9661913814955647, FL: 0.05, FR: 0.015773922686945593, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 32.66904408314212, DAY: 2010-10-21, DVS: 1.9677439797211667, FL: 0.05, FR: 0.015967997465145836, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 25.41711865536422, DAY: 2010-10-22, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 21.79726782047625, DAY: 2010-10-23, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 6.162785924356052, DAY: 2010-10-24, DVS: 1.9686628643852986, FL: 0.05, FR: 0.016082858048162327, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 3.619123014735839, DAY: 2010-10-25, DVS: 1.970785804816224, FL: 0.05, FR: 0.01634822560202799, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-26, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-27, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-28, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-29, DVS: 1.9728136882129288, FL: 0.05, FR: 0.016601711026616103, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-30, DVS: 1.9751267427122952, FL: 0.05, FR: 0.0168908428390369, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-31, DVS: 1.9769328263624852, FL: 0.05, FR: 0.01711660329531066, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-01, DVS: 1.9792458808618516, FL: 0.05, FR: 0.017405735107731454, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-02, DVS: 1.983555133079849, FL: 0.05, FR: 0.01794439163498114, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 19.61920187706796, DAY: 2010-11-03, DVS: 1.985107731305451, FL: 0.05, FR: 0.018138466413181384, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 10.228893739954652, DAY: 2010-11-04, DVS: 1.9885297845373902, FL: 0.05, FR: 0.018566223067173773, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 45.50321836194165, DAY: 2010-11-05, DVS: 1.9948035487959452, FL: 0.05, FR: 0.019350443599493155, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 5.839463393806534, DAY: 2010-11-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 15.254533744320435, DAY: 2010-11-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 15.049318336197585, DAY: 2010-11-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 43.25829726065667, DAY: 2010-11-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 14.626290896706164, DAY: 2010-11-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 23.742415471479614, DAY: 2010-11-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 37.48822680676657, DAY: 2010-11-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 42.06031750650069, DAY: 2010-11-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 67.08969220067297, DAY: 2010-11-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 45.329423579045425, DAY: 2010-11-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 3.8155572206520234, DAY: 2010-11-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 6.152076941584958, DAY: 2010-11-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 4.4505561136862735, DAY: 2010-11-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 4.783258811957177, DAY: 2010-11-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 3.2038529975166394, DAY: 2010-11-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.8364366655705052, DAY: 2010-11-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 12.744056136326153, DAY: 2010-11-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-01, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-02, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-03, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-04, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-05, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-31, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +ModelParameters: + KDIFTB: [0.0, 0.69, 2.0, 0.69] + PERDL: 0.03 + RGRLAI: 0.016 + SLATB: [0.0, 0.002, 2.0, 0.002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + SPAN: 35.0 + TBASE: 3.0 + TDWI: 0.51 +ModelResults: +- {DAY: 2010-04-16, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-17, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-18, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-19, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-20, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-21, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-22, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-23, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-24, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-25, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-26, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-27, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-28, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-29, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-30, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-05-01, LAI: 0.0008012884382783444, TWLV: 0.40064421913917214} +- {DAY: 2010-05-02, LAI: 0.0009180728639041013, TWLV: 0.4590364319520506} +- {DAY: 2010-05-03, LAI: 0.0010182721089098878, TWLV: 0.5091360544549438} +- {DAY: 2010-05-04, LAI: 0.0011318458202194273, TWLV: 0.5659229101097136} +- {DAY: 2010-05-05, LAI: 0.0012278779235462473, TWLV: 0.6139389617731237} +- {DAY: 2010-05-06, LAI: 0.0013202769303496714, TWLV: 0.6653802456985948} +- {DAY: 2010-05-07, LAI: 0.0014475186147080191, TWLV: 0.7290010878777686} +- {DAY: 2010-05-08, LAI: 0.0015599873277284634, TWLV: 0.8080118648930814} +- {DAY: 2010-05-09, LAI: 0.0017472859219589006, TWLV: 0.9313356407404586} +- {DAY: 2010-05-10, LAI: 0.0019747815900125966, TWLV: 1.0774489874161168} +- {DAY: 2010-05-11, LAI: 0.002195051880281977, TWLV: 1.1875841325508072} +- {DAY: 2010-05-12, LAI: 0.0025887786411230413, TWLV: 1.3844475129713394} +- {DAY: 2010-05-13, LAI: 0.002990484450663319, TWLV: 1.5853004177414776} +- {DAY: 2010-05-14, LAI: 0.003311403060942695, TWLV: 1.7457597228811657} +- {DAY: 2010-05-15, LAI: 0.0035631374590580646, TWLV: 1.8825369252914288} +- {DAY: 2010-05-16, LAI: 0.00383515276491807, TWLV: 2.04225830864769} +- {DAY: 2010-05-17, LAI: 0.004213777827675692, TWLV: 2.283953801765497} +- {DAY: 2010-05-18, LAI: 0.0047368321250869415, TWLV: 2.642155941847756} +- {DAY: 2010-05-19, LAI: 0.005253674600194289, TWLV: 2.9157621842156174} +- {DAY: 2010-05-20, LAI: 0.005533629300107672, TWLV: 3.0704402272783855} +- {DAY: 2010-05-21, LAI: 0.005985911687804124, TWLV: 3.296581421126612} +- {DAY: 2010-05-22, LAI: 0.006794766005696632, TWLV: 3.701008580072866} +- {DAY: 2010-05-23, LAI: 0.008017747257554211, TWLV: 4.312499206001656} +- {DAY: 2010-05-24, LAI: 0.00958479747325244, TWLV: 5.096024313850768} +- {DAY: 2010-05-25, LAI: 0.011461437909919379, TWLV: 6.034344532184239} +- {DAY: 2010-05-26, LAI: 0.01357639464141274, TWLV: 7.091822897930922} +- {DAY: 2010-05-27, LAI: 0.015105620390762525, TWLV: 7.856435772605814} +- {DAY: 2010-05-28, LAI: 0.01718433950961579, TWLV: 8.895795332032444} +- {DAY: 2010-05-29, LAI: 0.019901438050150936, TWLV: 10.254344602300018} +- {DAY: 2010-05-30, LAI: 0.023492357157129082, TWLV: 12.04980415578909} +- {DAY: 2010-05-31, LAI: 0.026344639491767546, TWLV: 13.475945323108323} +- {DAY: 2010-06-01, LAI: 0.02968482185441995, TWLV: 15.146036504434525} +- {DAY: 2010-06-02, LAI: 0.031572940172661136, TWLV: 16.090095663555118} +- {DAY: 2010-06-03, LAI: 0.033624059510839535, TWLV: 17.115655332644323} +- {DAY: 2010-06-04, LAI: 0.03604888059909132, TWLV: 18.328065876770204} +- {DAY: 2010-06-05, LAI: 0.04313585919440744, TWLV: 21.871555174428266} +- {DAY: 2010-06-06, LAI: 0.051651630089183116, TWLV: 26.129440621816094} +- {DAY: 2010-06-07, LAI: 0.061421148255315854, TWLV: 31.014199704882472} +- {DAY: 2010-06-08, LAI: 0.0710443111649686, TWLV: 35.82578115970886} +- {DAY: 2010-06-09, LAI: 0.0832408506665347, TWLV: 41.924050910491914} +- {DAY: 2010-06-10, LAI: 0.09706051559440852, TWLV: 48.83388337442883} +- {DAY: 2010-06-11, LAI: 0.11237158839295898, TWLV: 56.48941977370405} +- {DAY: 2010-06-12, LAI: 0.13098033513707127, TWLV: 65.79379314576016} +- {DAY: 2010-06-13, LAI: 0.14887953611636986, TWLV: 74.74339363540945} +- {DAY: 2010-06-14, LAI: 0.16524669899174718, TWLV: 82.9269750730981} +- {DAY: 2010-06-15, LAI: 0.18192549937302407, TWLV: 91.26637526373655} +- {DAY: 2010-06-16, LAI: 0.20059023204340157, TWLV: 100.59874159892532} +- {DAY: 2010-06-17, LAI: 0.2227709277125586, TWLV: 111.68908943350381} +- {DAY: 2010-06-18, LAI: 0.2514652588822952, TWLV: 126.03625501837213} +- {DAY: 2010-06-19, LAI: 0.27265367590340955, TWLV: 136.63046352892925} +- {DAY: 2010-06-20, LAI: 0.3015594570850738, TWLV: 151.08335411976137} +- {DAY: 2010-06-21, LAI: 0.3234878783967143, TWLV: 162.0475647755816} +- {DAY: 2010-06-22, LAI: 0.35420562451006227, TWLV: 177.4064378322556} +- {DAY: 2010-06-23, LAI: 0.39241585378563265, TWLV: 196.5115524700408} +- {DAY: 2010-06-24, LAI: 0.4367399960721646, TWLV: 218.67362361330683} +- {DAY: 2010-06-25, LAI: 0.48385112564333244, TWLV: 242.22918839889073} +- {DAY: 2010-06-26, LAI: 0.5340211613867598, TWLV: 267.3142062706045} +- {DAY: 2010-06-27, LAI: 0.5898453617089561, TWLV: 295.22630643170277} +- {DAY: 2010-06-28, LAI: 0.6547322168147012, TWLV: 327.6697339845752} +- {DAY: 2010-06-29, LAI: 0.7240135009455375, TWLV: 362.3103760499934} +- {DAY: 2010-06-30, LAI: 0.7935075503630673, TWLV: 397.0574007587582} +- {DAY: 2010-07-01, LAI: 0.8594395709608256, TWLV: 430.02341105763736} +- {DAY: 2010-07-02, LAI: 0.9315580753948549, TWLV: 466.08266327465213} +- {DAY: 2010-07-03, LAI: 1.0043401593881085, TWLV: 502.473705271279} +- {DAY: 2010-07-04, LAI: 1.0751263702546872, TWLV: 537.866810704568} +- {DAY: 2010-07-05, LAI: 1.1384775961401201, TWLV: 569.5424236472843} +- {DAY: 2010-07-06, LAI: 1.1964746616899873, TWLV: 598.540956422218} +- {DAY: 2010-07-07, LAI: 1.253297413089392, TWLV: 626.9523321219206} +- {DAY: 2010-07-08, LAI: 1.313450259435748, TWLV: 657.0287552950986} +- {DAY: 2010-07-09, LAI: 1.3754211623195973, TWLV: 688.0142067370235} +- {DAY: 2010-07-10, LAI: 1.431863547755681, TWLV: 716.2353994550654} +- {DAY: 2010-07-11, LAI: 1.481538282353287, TWLV: 741.0727667538684} +- {DAY: 2010-07-12, LAI: 1.5249645564169987, TWLV: 762.7859037857244} +- {DAY: 2010-07-13, LAI: 1.561819387214024, TWLV: 781.2133191842369} +- {DAY: 2010-07-14, LAI: 1.5905643328604533, TWLV: 795.5857920074517} +- {DAY: 2010-07-15, LAI: 1.6138796464466851, TWLV: 807.2434488005674} +- {DAY: 2010-07-16, LAI: 1.6311137750426667, TWLV: 815.8605130985583} +- {DAY: 2010-07-17, LAI: 1.6528518247627917, TWLV: 826.7295379586208} +- {DAY: 2010-07-18, LAI: 1.6698838851119098, TWLV: 835.2455681331799} +- {DAY: 2010-07-19, LAI: 1.6886383509293676, TWLV: 844.6228010419088} +- {DAY: 2010-07-20, LAI: 1.7110530226187224, TWLV: 855.830136886586} +- {DAY: 2010-07-21, LAI: 1.734382254333626, TWLV: 867.494752744038} +- {DAY: 2010-07-22, LAI: 1.7566199759129721, TWLV: 878.613613533711} +- {DAY: 2010-07-23, LAI: 1.7779171493706263, TWLV: 889.2622002625382} +- {DAY: 2010-07-24, LAI: 1.7885612086261597, TWLV: 894.5842298903048} +- {DAY: 2010-07-25, LAI: 1.7987793787468382, TWLV: 899.693314950644} +- {DAY: 2010-07-26, LAI: 1.8208049913957394, TWLV: 910.7061212750945} +- {DAY: 2010-07-27, LAI: 1.8406510114358585, TWLV: 920.629131295154} +- {DAY: 2010-07-28, LAI: 1.860012432543481, TWLV: 930.6566418489653} +- {DAY: 2010-07-29, LAI: 1.8737912856386716, TWLV: 937.6583048285124} +- {DAY: 2010-07-30, LAI: 1.888426069635021, TWLV: 945.0257964491902} +- {DAY: 2010-07-31, LAI: 1.9053349635533372, TWLV: 953.6312458190681} +- {DAY: 2010-08-01, LAI: 1.9289958629470914, TWLV: 965.5815507146347} +- {DAY: 2010-08-02, LAI: 1.951723631380945, TWLV: 977.1528320627035} +- {DAY: 2010-08-03, LAI: 1.9670994380863849, TWLV: 984.9508705605582} +- {DAY: 2010-08-04, LAI: 1.9822031351175824, TWLV: 992.9004353613476} +- {DAY: 2010-08-05, LAI: 2.003946411461921, TWLV: 1004.1944076906445} +- {DAY: 2010-08-06, LAI: 2.0181590321792258, TWLV: 1011.7515577293809} +- {DAY: 2010-08-07, LAI: 2.0234005610046544, TWLV: 1014.9968619234538} +- {DAY: 2010-08-08, LAI: 2.0315146426442854, TWLV: 1019.4583299022158} +- {DAY: 2010-08-09, LAI: 2.0511118205297634, TWLV: 1029.8684094708835} +- {DAY: 2010-08-10, LAI: 2.069786676561823, TWLV: 1039.989362594763} +- {DAY: 2010-08-11, LAI: 2.088470037984216, TWLV: 1050.269363524293} +- {DAY: 2010-08-12, LAI: 2.1057018381667243, TWLV: 1059.9427419812944} +- {DAY: 2010-08-13, LAI: 2.1190120494176776, TWLV: 1068.4018200408725} +- {DAY: 2010-08-14, LAI: 2.1256039251434737, TWLV: 1073.0563071740382} +- {DAY: 2010-08-15, LAI: 2.13810679536199, TWLV: 1081.1032018367853} +- {DAY: 2010-08-16, LAI: 2.1505905726946066, TWLV: 1090.4413228517385} +- {DAY: 2010-08-17, LAI: 2.164078208756074, TWLV: 1099.1547597106821} +- {DAY: 2010-08-18, LAI: 2.1598762161268814, TWLV: 1101.8096632378697} +- {DAY: 2010-08-19, LAI: 2.1668995436882756, TWLV: 1105.3213270185668} +- {DAY: 2010-08-20, LAI: 2.1783756421544984, TWLV: 1115.3172616990657} +- {DAY: 2010-08-21, LAI: 2.1909807911193253, TWLV: 1126.5045952645448} +- {DAY: 2010-08-22, LAI: 2.202729410453157, TWLV: 1137.1904863862871} +- {DAY: 2010-08-23, LAI: 2.2110250982221276, TWLV: 1147.4366000215553} +- {DAY: 2010-08-24, LAI: 2.2120139319073124, TWLV: 1154.8408493280847} +- {DAY: 2010-08-25, LAI: 2.2098595227263025, TWLV: 1161.4191811368548} +- {DAY: 2010-08-26, LAI: 2.2120655723601943, TWLV: 1171.8265793258568} +- {DAY: 2010-08-27, LAI: 2.2295093133907358, TWLV: 1180.5484498411276} +- {DAY: 2010-08-28, LAI: 2.225422330705947, TWLV: 1187.4545589883824} +- {DAY: 2010-08-29, LAI: 2.207757217560929, TWLV: 1195.1449840442008} +- {DAY: 2010-08-30, LAI: 2.224394003869537, TWLV: 1203.4633771985045} +- {DAY: 2010-08-31, LAI: 2.2186292197599613, TWLV: 1209.9133514789057} +- {DAY: 2010-09-01, LAI: 2.2112473768651246, TWLV: 1217.312777866066} +- {DAY: 2010-09-02, LAI: 2.224398585564318, TWLV: 1223.8883822156624} +- {DAY: 2010-09-03, LAI: 2.2090563476387612, TWLV: 1230.5644288377528} +- {DAY: 2010-09-04, LAI: 2.207004682584603, TWLV: 1240.132804821231} +- {DAY: 2010-09-05, LAI: 2.1923102278300646, TWLV: 1247.2384680347939} +- {DAY: 2010-09-06, LAI: 2.1906709487746756, TWLV: 1257.3830391629194} +- {DAY: 2010-09-07, LAI: 2.1799158510780967, TWLV: 1267.364363371304} +- {DAY: 2010-09-08, LAI: 2.1591697357355475, TWLV: 1276.0964203378148} +- {DAY: 2010-09-09, LAI: 2.1730782073340134, TWLV: 1283.0506561370478} +- {DAY: 2010-09-10, LAI: 2.1370217034621404, TWLV: 1287.184475344377} +- {DAY: 2010-09-11, LAI: 2.105113896992017, TWLV: 1294.786136894899} +- {DAY: 2010-09-12, LAI: 2.073797934846938, TWLV: 1304.2131736940735} +- {DAY: 2010-09-13, LAI: 2.0922029761799545, TWLV: 1313.415694360582} +- {DAY: 2010-09-14, LAI: 2.044436199548158, TWLV: 1317.444406205782} +- {DAY: 2010-09-15, LAI: 1.988030646372474, TWLV: 1321.6850571708123} +- {DAY: 2010-09-16, LAI: 1.9929678820646464, TWLV: 1324.1536750168984} +- {DAY: 2010-09-17, LAI: 1.937824766807081, TWLV: 1331.2227594535339} +- {DAY: 2010-09-18, LAI: 1.9526115117684832, TWLV: 1338.6161319342352} +- {DAY: 2010-09-19, LAI: 1.899277200961512, TWLV: 1346.6960012395143} +- {DAY: 2010-09-20, LAI: 1.9153483865179282, TWLV: 1354.7315940177225} +- {DAY: 2010-09-21, LAI: 1.9320554160453822, TWLV: 1363.0851087814494} +- {DAY: 2010-09-22, LAI: 1.8828676452032849, TWLV: 1371.4572336592796} +- {DAY: 2010-09-23, LAI: 1.8990339313894868, TWLV: 1379.5403767523808} +- {DAY: 2010-09-24, LAI: 1.8428031737923105, TWLV: 1387.4842501708072} +- {DAY: 2010-09-25, LAI: 1.8573956733466044, TWLV: 1394.780499947954} +- {DAY: 2010-09-26, LAI: 1.7882995824651837, TWLV: 1396.6234965038707} +- {DAY: 2010-09-27, LAI: 1.7953498123669454, TWLV: 1400.1486114547515} +- {DAY: 2010-09-28, LAI: 1.7363455680053737, TWLV: 1406.0395947072548} +- {DAY: 2010-09-29, LAI: 1.7408112212398918, TWLV: 1408.2724213245137} +- {DAY: 2010-09-30, LAI: 1.7517649020909287, TWLV: 1413.7492617500325} +- {DAY: 2010-10-01, LAI: 1.6985224288360379, TWLV: 1418.803638065303} +- {DAY: 2010-10-02, LAI: 1.702602479717216, TWLV: 1420.843663505892} +- {DAY: 2010-10-03, LAI: 1.7105869823840534, TWLV: 1424.835914839311} +- {DAY: 2010-10-04, LAI: 1.664452567971006, TWLV: 1430.7672404077211} +- {DAY: 2010-10-05, LAI: 1.6762759433673675, TWLV: 1436.6789281059018} +- {DAY: 2010-10-06, LAI: 1.6276962737689755, TWLV: 1440.800469006408} +- {DAY: 2010-10-07, LAI: 1.6323471148945645, TWLV: 1443.1258895692026} +- {DAY: 2010-10-08, LAI: 1.575491083704617, TWLV: 1444.7742971474072} +- {DAY: 2010-10-09, LAI: 1.5876688114583353, TWLV: 1450.8631610242664} +- {DAY: 2010-10-10, LAI: 1.5376447781071463, TWLV: 1456.8365957905967} +- {DAY: 2010-10-11, LAI: 1.5489081986210524, TWLV: 1462.4683060475495} +- {DAY: 2010-10-12, LAI: 1.503738688754318, TWLV: 1468.1047438322244} +- {DAY: 2010-10-13, LAI: 1.5145430039861358, TWLV: 1473.5069014481332} +- {DAY: 2010-10-14, LAI: 1.5245657046780203, TWLV: 1478.5182517940752} +- {DAY: 2010-10-15, LAI: 1.5340947996689613, TWLV: 1483.282799289546} +- {DAY: 2010-10-16, LAI: 1.5360487592560503, TWLV: 1484.2597790830905} +- {DAY: 2010-10-17, LAI: 1.487833807812087, TWLV: 1484.9896706599118} +- {DAY: 2010-10-18, LAI: 1.489830697870446, TWLV: 1485.9881156890915} +- {DAY: 2010-10-19, LAI: 1.4923682310735082, TWLV: 1487.2568822906223} +- {DAY: 2010-10-20, LAI: 1.4946942083156392, TWLV: 1488.419870911688} +- {DAY: 2010-10-21, LAI: 1.4969016541701692, TWLV: 1489.5235938389528} +- {DAY: 2010-10-22, LAI: 1.5001685585784834, TWLV: 1491.1570460431099} +- {DAY: 2010-10-23, LAI: 1.5027102704440198, TWLV: 1492.4279019758783} +- {DAY: 2010-10-24, LAI: 1.5048899972260672, TWLV: 1493.517765366902} +- {DAY: 2010-10-25, LAI: 1.505506275818503, TWLV: 1493.8259046631197} +- {DAY: 2010-10-26, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} +- {DAY: 2010-10-27, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} +- {DAY: 2010-10-28, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} +- {DAY: 2010-10-29, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} +- {DAY: 2010-10-30, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-10-31, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-11-01, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-11-02, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-11-03, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-11-04, LAI: 1.4644038342439714, TWLV: 1494.98782090771} +- {DAY: 2010-11-05, LAI: 1.4285718928209417, TWLV: 1495.4992655947076} +- {DAY: 2010-11-06, LAI: 1.4331222146571359, TWLV: 1497.7744265128047} +- {DAY: 2010-11-07, LAI: 1.4049612153500868, TWLV: 1498.066399682495} +- {DAY: 2010-11-08, LAI: 1.4064866687245188, TWLV: 1498.829126369711} +- {DAY: 2010-11-09, LAI: 1.4079916005581385, TWLV: 1499.5815922865208} +- {DAY: 2010-11-10, LAI: 1.4123174302842043, TWLV: 1501.7445071495538} +- {DAY: 2010-11-11, LAI: 1.3904647457876436, TWLV: 1502.4758216943892} +- {DAY: 2010-11-12, LAI: 1.3928389873347915, TWLV: 1503.6629424679631} +- {DAY: 2010-11-13, LAI: 1.396587810015468, TWLV: 1505.5373538083013} +- {DAY: 2010-11-14, LAI: 1.4007938417661183, TWLV: 1507.6403696836264} +- {DAY: 2010-11-15, LAI: 1.4075028109861856, TWLV: 1510.99485429366} +- {DAY: 2010-11-16, LAI: 1.3948016247481085, TWLV: 1513.2613254726125} +- {DAY: 2010-11-17, LAI: 1.3951831804701738, TWLV: 1513.452103333645} +- {DAY: 2010-11-18, LAI: 1.395798388164332, TWLV: 1513.7597071807243} +- {DAY: 2010-11-19, LAI: 1.3962434437757008, TWLV: 1513.9822349864085} +- {DAY: 2010-11-20, LAI: 1.3967217696568965, TWLV: 1514.2213979270064} +- {DAY: 2010-11-21, LAI: 1.397042154956648, TWLV: 1514.3815905768822} +- {DAY: 2010-11-22, LAI: 1.3971257986232053, TWLV: 1514.4234124101608} +- {DAY: 2010-11-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-01, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-02, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-03, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-04, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-05, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-06, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-07, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-08, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-09, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-10, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-11, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-12, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-13, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-14, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-15, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-16, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-17, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-18, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-19, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-20, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-21, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-22, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-31, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +Precision: {LAI: 0.01, TWLV: 0.1} +WeatherVariables: +- {DAY: 2010-04-16, E0: 0.292, ELEV: 440.0, ES0: 0.259, ET0: 0.254, IRRAD: 15048000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.35, TMAX: 14.5, + TMIN: 4.2, VAP: 7.45, WIND: 2.298643329164947} +- {DAY: 2010-04-17, E0: 0.307, ELEV: 440.0, ES0: 0.259, ET0: 0.29100000000000004, + IRRAD: 22799000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.3999999999999995, + TMAX: 14.6, TMIN: 0.2, VAP: 6.04, WIND: 1.6521498928373055} +- {DAY: 2010-04-18, E0: 0.303, ELEV: 440.0, ES0: 0.263, ET0: 0.28300000000000003, + IRRAD: 18735000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.450000000000001, + TMAX: 15.8, TMIN: 1.1, VAP: 6.95, WIND: 2.2268107251285425} +- {DAY: 2010-04-19, E0: 0.34500000000000003, ELEV: 440.0, ES0: 0.29700000000000004, + ET0: 0.337, IRRAD: 21025000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.8, TMAX: 18.6, TMIN: 3.0, VAP: 7.35, WIND: 1.939480308982924} +- {DAY: 2010-04-20, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.28900000000000003, + ET0: 0.319, IRRAD: 18687000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.5, TMAX: 16.9, TMIN: 4.1, VAP: 7.42, WIND: 2.442308537237756} +- {DAY: 2010-04-21, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.266, ET0: 0.262, + IRRAD: 14308000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.550000000000001, + TMAX: 10.4, TMIN: 4.7, VAP: 5.87, WIND: 3.0888019735653973} +- {DAY: 2010-04-22, E0: 0.288, ELEV: 440.0, ES0: 0.244, ET0: 0.28500000000000003, + IRRAD: 22864000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.95, + TMAX: 12.4, TMIN: -2.5, VAP: 4.42, WIND: 1.72398249687371} +- {DAY: 2010-04-23, E0: 0.333, ELEV: 440.0, ES0: 0.286, ET0: 0.331, IRRAD: 23148000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.0, TMAX: 15.0, + TMIN: -1.0, VAP: 5.13, WIND: 2.2268107251285425} +- {DAY: 2010-04-24, E0: 0.369, ELEV: 440.0, ES0: 0.316, ET0: 0.36, IRRAD: 24044000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.6, TMAX: 18.0, + TMIN: 1.2, VAP: 6.37, WIND: 1.8676477049465194} +- {DAY: 2010-04-25, E0: 0.43899999999999995, ELEV: 440.0, ES0: 0.381, ET0: 0.425, + IRRAD: 24020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.15, + TMAX: 20.6, TMIN: 5.7, VAP: 7.05, WIND: 2.154978121092138} +- {DAY: 2010-04-26, E0: 0.29700000000000004, ELEV: 440.0, ES0: 0.262, ET0: 0.286, + IRRAD: 15089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 11.75, + TMAX: 17.6, TMIN: 5.9, VAP: 8.63, WIND: 2.083145517055733} +- {DAY: 2010-04-27, E0: 0.3, ELEV: 440.0, ES0: 0.26, ET0: 0.286, IRRAD: 17661000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.45, TMAX: 17.9, + TMIN: 3.0, VAP: 8.23, WIND: 1.6521498928373055} +- {DAY: 2010-04-28, E0: 0.373, ELEV: 440.0, ES0: 0.317, ET0: 0.352, IRRAD: 24464000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 19.8, + TMIN: 2.7, VAP: 7.52, WIND: 1.077489060546069} +- {DAY: 2010-04-29, E0: 0.41100000000000003, ELEV: 440.0, ES0: 0.352, ET0: 0.41600000000000004, + IRRAD: 23615000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, + TMAX: 23.8, TMIN: 4.1, VAP: 8.26, WIND: 1.5084846847644964} +- {DAY: 2010-04-30, E0: 0.348, ELEV: 440.0, ES0: 0.311, ET0: 0.333, IRRAD: 14717000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 22.6, + TMIN: 8.5, VAP: 11.53, WIND: 2.2268107251285425} +- {DAY: 2010-05-01, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.26, ET0: 0.24900000000000003, + IRRAD: 12969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.58, SNOWDEPTH: .nan, TEMP: 14.45, + TMAX: 17.8, TMIN: 11.1, VAP: 12.04, WIND: 1.8676477049465194} +- {DAY: 2010-05-02, E0: 0.176, ELEV: 440.0, ES0: 0.158, ET0: 0.147, IRRAD: 7834000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.8, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 14.2, + TMIN: 9.7, VAP: 11.97, WIND: 1.4366520807280918} +- {DAY: 2010-05-03, E0: 0.189, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.161, + IRRAD: 8347000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 13.5, TMIN: 9.1, VAP: 10.82, WIND: 1.6521498928373055} +- {DAY: 2010-05-04, E0: 0.133, ELEV: 440.0, ES0: 0.121, ET0: 0.11699999999999999, + IRRAD: 5850000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.37, SNOWDEPTH: .nan, TEMP: 8.65, + TMAX: 10.6, TMIN: 6.7, VAP: 9.71, WIND: 2.9451367654925877} +- {DAY: 2010-05-05, E0: 0.176, ELEV: 440.0, ES0: 0.161, ET0: 0.125, IRRAD: 7550000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 7.15, TMAX: 8.9, + TMIN: 5.4, VAP: 8.77, WIND: 4.669119262366299} +- {DAY: 2010-05-06, E0: 0.159, ELEV: 440.0, ES0: 0.144, ET0: 0.145, IRRAD: 6844000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 9.350000000000001, + TMAX: 11.8, TMIN: 6.9, VAP: 9.74, WIND: 3.304299785674611} +- {DAY: 2010-05-07, E0: 0.213, ELEV: 440.0, ES0: 0.189, ET0: 0.175, IRRAD: 11585000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.300000000000001, + TMAX: 10.4, TMIN: 4.2, VAP: 8.06, WIND: 2.2268107251285425} +- {DAY: 2010-05-08, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.246, + IRRAD: 16249000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.7, + TMAX: 15.5, TMIN: 3.9, VAP: 8.4, WIND: 1.077489060546069} +- {DAY: 2010-05-09, E0: 0.29, ELEV: 440.0, ES0: 0.252, ET0: 0.261, IRRAD: 16930000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 10.35, TMAX: 17.3, + TMIN: 3.4, VAP: 9.58, WIND: 1.5803172888009012} +- {DAY: 2010-05-10, E0: 0.182, ELEV: 440.0, ES0: 0.16299999999999998, ET0: 0.152, + IRRAD: 8387000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 14.0, TMIN: 8.6, VAP: 11.36, WIND: 1.077489060546069} +- {DAY: 2010-05-11, E0: 0.39, ELEV: 440.0, ES0: 0.344, ET0: 0.317, IRRAD: 18611000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.3, + TMIN: 9.2, VAP: 12.27, WIND: 2.5859737453105653} +- {DAY: 2010-05-12, E0: 0.32599999999999996, ELEV: 440.0, ES0: 0.29100000000000004, + ET0: 0.269, IRRAD: 14823000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.55, TMAX: 15.5, TMIN: 9.6, VAP: 10.25, WIND: 2.154978121092138} +- {DAY: 2010-05-13, E0: 0.197, ELEV: 440.0, ES0: 0.178, ET0: 0.16699999999999998, + IRRAD: 8293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.44000000000000006, SNOWDEPTH: .nan, + TEMP: 9.95, TMAX: 12.7, TMIN: 7.2, VAP: 9.85, WIND: 2.7296389533833745} +- {DAY: 2010-05-14, E0: 0.149, ELEV: 440.0, ES0: 0.133, ET0: 0.12, IRRAD: 7517000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 7.25, TMAX: 8.6, + TMIN: 5.9, VAP: 8.94, WIND: 1.72398249687371} +- {DAY: 2010-05-15, E0: 0.177, ELEV: 440.0, ES0: 0.161, ET0: 0.148, IRRAD: 8182000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 7.300000000000001, + TMAX: 9.3, TMIN: 5.3, VAP: 8.06, WIND: 2.0113129130193284} +- {DAY: 2010-05-16, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.267, ET0: 0.23500000000000001, + IRRAD: 11902000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.600000000000001, + TMAX: 12.3, TMIN: 4.9, VAP: 7.59, WIND: 3.1606345776018023} +- {DAY: 2010-05-17, E0: 0.364, ELEV: 440.0, ES0: 0.323, ET0: 0.315, IRRAD: 18616000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 10.1, TMAX: 15.4, + TMIN: 4.8, VAP: 7.99, WIND: 2.801471557419779} +- {DAY: 2010-05-18, E0: 0.23900000000000002, ELEV: 440.0, ES0: 0.217, ET0: 0.20600000000000002, + IRRAD: 10082000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 9.3, + TMAX: 11.5, TMIN: 7.1, VAP: 8.29, WIND: 2.65780634934697} +- {DAY: 2010-05-19, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.096, ET0: 0.095, + IRRAD: 5446000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 6.1, + TMAX: 7.1, TMIN: 5.1, VAP: 8.46, WIND: 2.7296389533833745} +- {DAY: 2010-05-20, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.095, ET0: 0.10400000000000001, + IRRAD: 5694000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 9.5, + TMAX: 12.5, TMIN: 6.5, VAP: 11.3, WIND: 1.3648194766916872} +- {DAY: 2010-05-21, E0: 0.265, ELEV: 440.0, ES0: 0.23700000000000002, ET0: 0.21800000000000003, + IRRAD: 11531000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 13.3, + TMAX: 17.0, TMIN: 9.6, VAP: 12.21, WIND: 1.8676477049465194} +- {DAY: 2010-05-22, E0: 0.386, ELEV: 440.0, ES0: 0.339, ET0: 0.323, IRRAD: 19035000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.1, SNOWDEPTH: .nan, TEMP: 14.15, TMAX: 20.1, + TMIN: 8.2, VAP: 11.77, WIND: 1.5084846847644964} +- {DAY: 2010-05-23, E0: 0.45099999999999996, ELEV: 440.0, ES0: 0.395, ET0: 0.378, + IRRAD: 22815000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.6, + TMAX: 20.9, TMIN: 8.3, VAP: 11.7, WIND: 1.6521498928373055} +- {DAY: 2010-05-24, E0: 0.492, ELEV: 440.0, ES0: 0.433, ET0: 0.43600000000000005, + IRRAD: 23334000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 16.05, + TMAX: 23.5, TMIN: 8.6, VAP: 12.38, WIND: 2.5141411412741608} +- {DAY: 2010-05-25, E0: 0.458, ELEV: 440.0, ES0: 0.404, ET0: 0.39, IRRAD: 20822000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: .nan, TEMP: 16.65, + TMAX: 22.0, TMIN: 11.3, VAP: 13.18, WIND: 2.370475933201351} +- {DAY: 2010-05-26, E0: 0.215, ELEV: 440.0, ES0: 0.193, ET0: 0.187, IRRAD: 9210000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.93, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 17.5, + TMIN: 10.6, VAP: 13.39, WIND: 1.5084846847644964} +- {DAY: 2010-05-27, E0: 0.303, ELEV: 440.0, ES0: 0.27, ET0: 0.257, IRRAD: 13115000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 15.0, TMAX: 18.8, + TMIN: 11.2, VAP: 13.15, WIND: 2.083145517055733} +- {DAY: 2010-05-28, E0: 0.362, ELEV: 440.0, ES0: 0.321, ET0: 0.305, IRRAD: 16517000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.2, TMAX: 20.4, + TMIN: 10.0, VAP: 12.78, WIND: 1.72398249687371} +- {DAY: 2010-05-29, E0: 0.413, ELEV: 440.0, ES0: 0.362, ET0: 0.346, IRRAD: 20796000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.9, + TMIN: 8.6, VAP: 11.43, WIND: 1.5084846847644964} +- {DAY: 2010-05-30, E0: 0.277, ELEV: 440.0, ES0: 0.25, ET0: 0.233, IRRAD: 11117000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 3.6, SNOWDEPTH: .nan, TEMP: 14.0, TMAX: 17.8, + TMIN: 10.2, VAP: 12.48, WIND: 2.370475933201351} +- {DAY: 2010-05-31, E0: 0.307, ELEV: 440.0, ES0: 0.277, ET0: 0.21800000000000003, + IRRAD: 13569000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.32, SNOWDEPTH: .nan, TEMP: 9.95, + TMAX: 13.1, TMIN: 6.8, VAP: 9.74, WIND: 3.663462805856634} +- {DAY: 2010-06-01, E0: 0.10900000000000001, ELEV: 440.0, ES0: 0.098, ET0: 0.10300000000000001, + IRRAD: 5021000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 9.5, + TMAX: 11.0, TMIN: 8.0, VAP: 10.76, WIND: 2.7296389533833745} +- {DAY: 2010-06-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10300000000000001, + ET0: 0.10800000000000001, IRRAD: 5185000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.2, + SNOWDEPTH: .nan, TEMP: 10.4, TMAX: 11.5, TMIN: 9.3, VAP: 11.4, WIND: 2.65780634934697} +- {DAY: 2010-06-03, E0: 0.128, ELEV: 440.0, ES0: 0.11399999999999999, ET0: 0.118, + IRRAD: 5892000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.75, + TMAX: 13.2, TMIN: 10.3, VAP: 12.64, WIND: 1.7958151009101146} +- {DAY: 2010-06-04, E0: 0.528, ELEV: 440.0, ES0: 0.45899999999999996, ET0: 0.44000000000000006, + IRRAD: 27697000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.65, + TMAX: 21.1, TMIN: 8.2, VAP: 11.3, WIND: 1.5803172888009012} +- {DAY: 2010-06-05, E0: 0.564, ELEV: 440.0, ES0: 0.488, ET0: 0.497, IRRAD: 29724000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.1, TMAX: 24.8, + TMIN: 7.4, VAP: 11.5, WIND: 1.3648194766916872} +- {DAY: 2010-06-06, E0: 0.5900000000000001, ELEV: 440.0, ES0: 0.513, ET0: 0.525, IRRAD: 28294000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.4, TMAX: 27.0, + TMIN: 9.8, VAP: 13.35, WIND: 1.6521498928373055} +- {DAY: 2010-06-07, E0: 0.505, ELEV: 440.0, ES0: 0.45099999999999996, ET0: 0.42699999999999994, + IRRAD: 19774000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, + TMAX: 22.6, TMIN: 15.6, VAP: 14.43, WIND: 2.801471557419779} +- {DAY: 2010-06-08, E0: 0.538, ELEV: 440.0, ES0: 0.471, ET0: 0.465, IRRAD: 24452000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.85, TMAX: 26.9, + TMIN: 10.8, VAP: 14.7, WIND: 1.4366520807280918} +- {DAY: 2010-06-09, E0: 0.595, ELEV: 440.0, ES0: 0.525, ET0: 0.517, IRRAD: 24742000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, TMAX: 28.6, + TMIN: 14.4, VAP: 17.3, WIND: 2.083145517055733} +- {DAY: 2010-06-10, E0: 0.607, ELEV: 440.0, ES0: 0.536, ET0: 0.533, IRRAD: 24198000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.3, TMAX: 30.5, + TMIN: 16.1, VAP: 17.26, WIND: 1.5803172888009012} +- {DAY: 2010-06-11, E0: 0.653, ELEV: 440.0, ES0: 0.5740000000000001, ET0: 0.5650000000000001, + IRRAD: 27798000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, + TMAX: 27.1, TMIN: 15.9, VAP: 16.05, WIND: 2.298643329164947} +- {DAY: 2010-06-12, E0: 0.5, ELEV: 440.0, ES0: 0.44400000000000006, ET0: 0.437, IRRAD: 19853000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 20.4, TMAX: 26.5, + TMIN: 14.3, VAP: 15.11, WIND: 1.72398249687371} +- {DAY: 2010-06-13, E0: 0.371, ELEV: 440.0, ES0: 0.33399999999999996, ET0: 0.29900000000000004, + IRRAD: 14405000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 15.8, + TMAX: 19.3, TMIN: 12.3, VAP: 13.18, WIND: 2.442308537237756} +- {DAY: 2010-06-14, E0: 0.321, ELEV: 440.0, ES0: 0.288, ET0: 0.258, IRRAD: 12885000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.35, TMAX: 18.9, + TMIN: 11.8, VAP: 13.39, WIND: 2.0113129130193284} +- {DAY: 2010-06-15, E0: 0.369, ELEV: 440.0, ES0: 0.335, ET0: 0.288, IRRAD: 13535000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.200000000000001, + TMAX: 18.6, TMIN: 11.8, VAP: 12.91, WIND: 3.2324671816382065} +- {DAY: 2010-06-16, E0: 0.413, ELEV: 440.0, ES0: 0.374, ET0: 0.33999999999999997, + IRRAD: 15421000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.3, + TMAX: 17.3, TMIN: 11.3, VAP: 11.03, WIND: 4.309956242184276} +- {DAY: 2010-06-17, E0: 0.489, ELEV: 440.0, ES0: 0.438, ET0: 0.389, IRRAD: 20003000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.3, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 19.8, + TMIN: 11.3, VAP: 12.24, WIND: 3.735295409893039} +- {DAY: 2010-06-18, E0: 0.28700000000000003, ELEV: 440.0, ES0: 0.258, ET0: 0.242, + IRRAD: 11148000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 16.35, + TMAX: 18.7, TMIN: 14.0, VAP: 14.16, WIND: 1.5803172888009012} +- {DAY: 2010-06-19, E0: 0.346, ELEV: 440.0, ES0: 0.308, ET0: 0.275, IRRAD: 16133000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.1, TMAX: 15.6, + TMIN: 8.6, VAP: 10.12, WIND: 1.6521498928373055} +- {DAY: 2010-06-20, E0: 0.23199999999999998, ELEV: 440.0, ES0: 0.21000000000000002, + ET0: 0.19, IRRAD: 9754000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, + TEMP: 11.0, TMAX: 14.0, TMIN: 8.0, VAP: 10.05, WIND: 1.3648194766916872} +- {DAY: 2010-06-21, E0: 0.337, ELEV: 440.0, ES0: 0.303, ET0: 0.264, IRRAD: 14403000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.3, TMAX: 15.8, + TMIN: 8.8, VAP: 10.18, WIND: 1.72398249687371} +- {DAY: 2010-06-22, E0: 0.36, ELEV: 440.0, ES0: 0.318, ET0: 0.312, IRRAD: 17475000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.65, TMAX: 18.3, + TMIN: 7.0, VAP: 9.81, WIND: 1.5084846847644964} +- {DAY: 2010-06-23, E0: 0.383, ELEV: 440.0, ES0: 0.33599999999999997, ET0: 0.331, + IRRAD: 19579000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.05, + TMAX: 19.7, TMIN: 6.4, VAP: 10.42, WIND: 1.2929868726552827} +- {DAY: 2010-06-24, E0: 0.44800000000000006, ELEV: 440.0, ES0: 0.397, ET0: 0.383, + IRRAD: 19454000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.1, + TMAX: 22.5, TMIN: 11.7, VAP: 11.5, WIND: 1.2929868726552827} +- {DAY: 2010-06-25, E0: 0.418, ELEV: 440.0, ES0: 0.367, ET0: 0.378, IRRAD: 19342000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 17.05, TMAX: 24.0, + TMIN: 10.1, VAP: 13.52, WIND: 1.5803172888009012} +- {DAY: 2010-06-26, E0: 0.457, ELEV: 440.0, ES0: 0.4, ET0: 0.40499999999999997, IRRAD: 21119000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.75, TMAX: 24.3, + TMIN: 11.2, VAP: 13.96, WIND: 1.5084846847644964} +- {DAY: 2010-06-27, E0: 0.571, ELEV: 440.0, ES0: 0.49800000000000005, ET0: 0.506, + IRRAD: 26779000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.9, + TMAX: 24.8, TMIN: 13.0, VAP: 12.48, WIND: 1.6521498928373055} +- {DAY: 2010-06-28, E0: 0.585, ELEV: 440.0, ES0: 0.507, ET0: 0.519, IRRAD: 28562000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, TMAX: 26.6, + TMIN: 11.6, VAP: 12.38, WIND: 1.077489060546069} +- {DAY: 2010-06-29, E0: 0.538, ELEV: 440.0, ES0: 0.46799999999999997, ET0: 0.493, + IRRAD: 25202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.0, + TMAX: 28.1, TMIN: 11.9, VAP: 13.52, WIND: 1.1493216645824735} +- {DAY: 2010-06-30, E0: 0.515, ELEV: 440.0, ES0: 0.45499999999999996, ET0: 0.45099999999999996, + IRRAD: 21164000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 21.35, + TMAX: 27.5, TMIN: 15.2, VAP: 15.65, WIND: 1.3648194766916872} +- {DAY: 2010-07-01, E0: 0.533, ELEV: 440.0, ES0: 0.462, ET0: 0.47800000000000004, + IRRAD: 25266000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.7, + TMAX: 28.2, TMIN: 13.2, VAP: 14.63, WIND: 0.861991248436855} +- {DAY: 2010-07-02, E0: 0.597, ELEV: 440.0, ES0: 0.518, ET0: 0.5349999999999999, IRRAD: 27426000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.2, TMAX: 30.2, + TMIN: 14.2, VAP: 14.87, WIND: 0.9338238524732597} +- {DAY: 2010-07-03, E0: 0.614, ELEV: 440.0, ES0: 0.537, ET0: 0.5519999999999999, IRRAD: 26263000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.1, TMAX: 30.8, + TMIN: 15.4, VAP: 15.51, WIND: 1.2929868726552827} +- {DAY: 2010-07-04, E0: 0.509, ELEV: 440.0, ES0: 0.449, ET0: 0.457, IRRAD: 20494000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 22.45, TMAX: 28.9, + TMIN: 16.0, VAP: 17.26, WIND: 1.5084846847644964} +- {DAY: 2010-07-05, E0: 0.489, ELEV: 440.0, ES0: 0.43600000000000005, ET0: 0.409, + IRRAD: 18435000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 22.0, + TMAX: 26.7, TMIN: 17.3, VAP: 17.84, WIND: 1.6521498928373055} +- {DAY: 2010-07-06, E0: 0.454, ELEV: 440.0, ES0: 0.40499999999999997, ET0: 0.381, + IRRAD: 18109000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.049999999999997, + TMAX: 20.4, TMIN: 15.7, VAP: 13.45, WIND: 2.2268107251285425} +- {DAY: 2010-07-07, E0: 0.40499999999999997, ELEV: 440.0, ES0: 0.352, ET0: 0.377, + IRRAD: 21158000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.1, + TMAX: 22.4, TMIN: 7.8, VAP: 10.22, WIND: 1.077489060546069} +- {DAY: 2010-07-08, E0: 0.5599999999999999, ELEV: 440.0, ES0: 0.484, ET0: 0.505, IRRAD: 28373000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.0, TMAX: 27.4, + TMIN: 8.6, VAP: 11.33, WIND: 1.0056564565096642} +- {DAY: 2010-07-09, E0: 0.609, ELEV: 440.0, ES0: 0.5269999999999999, ET0: 0.55, IRRAD: 28929000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 30.9, + TMIN: 11.4, VAP: 13.69, WIND: 0.9338238524732597} +- {DAY: 2010-07-10, E0: 0.619, ELEV: 440.0, ES0: 0.5389999999999999, ET0: 0.5780000000000001, + IRRAD: 27293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.25, + TMAX: 32.1, TMIN: 14.4, VAP: 15.14, WIND: 1.2929868726552827} +- {DAY: 2010-07-11, E0: 0.671, ELEV: 440.0, ES0: 0.587, ET0: 0.628, IRRAD: 28557000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 24.1, TMAX: 33.7, + TMIN: 14.5, VAP: 13.93, WIND: 1.4366520807280918} +- {DAY: 2010-07-12, E0: 0.669, ELEV: 440.0, ES0: 0.589, ET0: 0.617, IRRAD: 27106000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 24.45, TMAX: 33.5, + TMIN: 15.4, VAP: 16.08, WIND: 1.5803172888009012} +- {DAY: 2010-07-13, E0: 0.5700000000000001, ELEV: 440.0, ES0: 0.506, ET0: 0.514, IRRAD: 21652000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 23.65, TMAX: 29.1, + TMIN: 18.2, VAP: 17.03, WIND: 1.939480308982924} +- {DAY: 2010-07-14, E0: 0.633, ELEV: 440.0, ES0: 0.5509999999999999, ET0: 0.579, IRRAD: 27607000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 24.0, TMAX: 32.9, + TMIN: 15.1, VAP: 16.42, WIND: 1.1493216645824735} +- {DAY: 2010-07-15, E0: 0.43499999999999994, ELEV: 440.0, ES0: 0.39, ET0: 0.376, IRRAD: 15587000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.75, TMAX: 26.0, + TMIN: 19.5, VAP: 17.94, WIND: 1.5803172888009012} +- {DAY: 2010-07-16, E0: 0.645, ELEV: 440.0, ES0: 0.5650000000000001, ET0: 0.585, IRRAD: 26895000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 24.25, TMAX: 33.4, + TMIN: 15.1, VAP: 18.14, WIND: 1.4366520807280918} +- {DAY: 2010-07-17, E0: 0.391, ELEV: 440.0, ES0: 0.35, ET0: 0.331, IRRAD: 14872000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.31, SNOWDEPTH: .nan, TEMP: 21.55, TMAX: 24.6, + TMIN: 18.5, VAP: 17.36, WIND: 1.8676477049465194} +- {DAY: 2010-07-18, E0: 0.371, ELEV: 440.0, ES0: 0.329, ET0: 0.316, IRRAD: 15735000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.200000000000003, + TMAX: 21.1, TMIN: 13.3, VAP: 14.0, WIND: 1.72398249687371} +- {DAY: 2010-07-19, E0: 0.45499999999999996, ELEV: 440.0, ES0: 0.399, ET0: 0.40099999999999997, + IRRAD: 21342000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.2, + TMAX: 23.4, TMIN: 11.0, VAP: 12.17, WIND: 1.939480308982924} +- {DAY: 2010-07-20, E0: 0.5469999999999999, ELEV: 440.0, ES0: 0.477, ET0: 0.485, IRRAD: 25767000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.0, TMAX: 25.9, + TMIN: 12.1, VAP: 14.23, WIND: 1.7958151009101146} +- {DAY: 2010-07-21, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.509, ET0: 0.517, IRRAD: 26623000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.85, TMAX: 31.2, + TMIN: 14.5, VAP: 16.25, WIND: 0.861991248436855} +- {DAY: 2010-07-22, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.516, ET0: 0.534, IRRAD: 23571000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 24.200000000000003, + TMAX: 31.8, TMIN: 16.6, VAP: 17.94, WIND: 1.5803172888009012} +- {DAY: 2010-07-23, E0: 0.266, ELEV: 440.0, ES0: 0.242, ET0: 0.23199999999999998, + IRRAD: 8448000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.6, SNOWDEPTH: .nan, TEMP: 20.0, + TMAX: 22.4, TMIN: 17.6, VAP: 18.07, WIND: 2.0113129130193284} +- {DAY: 2010-07-24, E0: 0.21800000000000003, ELEV: 440.0, ES0: 0.199, ET0: 0.197, + IRRAD: 7503000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 15.85, + TMAX: 18.0, TMIN: 13.7, VAP: 14.26, WIND: 2.442308537237756} +- {DAY: 2010-07-25, E0: 0.393, ELEV: 440.0, ES0: 0.346, ET0: 0.344, IRRAD: 18998000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 18.8, + TMIN: 9.3, VAP: 10.18, WIND: 1.939480308982924} +- {DAY: 2010-07-26, E0: 0.34700000000000003, ELEV: 440.0, ES0: 0.306, ET0: 0.301, + IRRAD: 16015000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.899999999999999, + TMAX: 20.7, TMIN: 9.1, VAP: 11.9, WIND: 1.3648194766916872} +- {DAY: 2010-07-27, E0: 0.367, ELEV: 440.0, ES0: 0.324, ET0: 0.305, IRRAD: 16530000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 16.35, TMAX: 21.3, + TMIN: 11.4, VAP: 13.79, WIND: 1.3648194766916872} +- {DAY: 2010-07-28, E0: 0.282, ELEV: 440.0, ES0: 0.254, ET0: 0.24300000000000002, + IRRAD: 10520000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16999999999999998, SNOWDEPTH: .nan, + TEMP: 16.9, TMAX: 20.4, TMIN: 13.4, VAP: 15.27, WIND: 2.65780634934697} +- {DAY: 2010-07-29, E0: 0.273, ELEV: 440.0, ES0: 0.244, ET0: 0.22999999999999998, + IRRAD: 11067000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 16.549999999999997, + TMAX: 18.9, TMIN: 14.2, VAP: 14.84, WIND: 1.7958151009101146} +- {DAY: 2010-07-30, E0: 0.312, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.258, + IRRAD: 13224000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.049999999999997, + TMAX: 19.4, TMIN: 12.7, VAP: 13.25, WIND: 1.221154268618878} +- {DAY: 2010-07-31, E0: 0.48200000000000004, ELEV: 440.0, ES0: 0.414, ET0: 0.42800000000000005, + IRRAD: 26033000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.35, + TMAX: 24.1, TMIN: 8.6, VAP: 12.21, WIND: 1.221154268618878} +- {DAY: 2010-08-01, E0: 0.511, ELEV: 440.0, ES0: 0.44000000000000006, ET0: 0.46699999999999997, + IRRAD: 25874000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.75, + TMAX: 27.3, TMIN: 10.2, VAP: 13.62, WIND: 1.221154268618878} +- {DAY: 2010-08-02, E0: 0.301, ELEV: 440.0, ES0: 0.268, ET0: 0.258, IRRAD: 12301000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.8699999999999999, SNOWDEPTH: .nan, TEMP: 19.15, + TMAX: 23.4, TMIN: 14.9, VAP: 17.5, WIND: 1.221154268618878} +- {DAY: 2010-08-03, E0: 0.315, ELEV: 440.0, ES0: 0.282, ET0: 0.263, IRRAD: 12311000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 20.0, + TMIN: 16.3, VAP: 15.81, WIND: 1.8676477049465194} +- {DAY: 2010-08-04, E0: 0.4, ELEV: 440.0, ES0: 0.34900000000000003, ET0: 0.333, IRRAD: 19963000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.4, TMAX: 21.6, + TMIN: 9.2, VAP: 12.34, WIND: 1.1493216645824735} +- {DAY: 2010-08-05, E0: 0.255, ELEV: 440.0, ES0: 0.227, ET0: 0.21800000000000003, + IRRAD: 10993000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.2, + TMAX: 20.4, TMIN: 10.0, VAP: 14.13, WIND: 1.5084846847644964} +- {DAY: 2010-08-06, E0: 0.121, ELEV: 440.0, ES0: 0.10800000000000001, ET0: 0.12, IRRAD: 4960000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.8, SNOWDEPTH: .nan, TEMP: 15.5, TMAX: 16.8, + TMIN: 14.2, VAP: 16.08, WIND: 1.7958151009101146} +- {DAY: 2010-08-07, E0: 0.17099999999999999, ELEV: 440.0, ES0: 0.154, ET0: 0.155, + IRRAD: 6510000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.8, + TMAX: 18.0, TMIN: 13.6, VAP: 15.27, WIND: 2.0113129130193284} +- {DAY: 2010-08-08, E0: 0.374, ELEV: 440.0, ES0: 0.32999999999999996, ET0: 0.314, + IRRAD: 17177000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 16.25, + TMAX: 22.0, TMIN: 10.5, VAP: 13.93, WIND: 1.72398249687371} +- {DAY: 2010-08-09, E0: 0.384, ELEV: 440.0, ES0: 0.339, ET0: 0.331, IRRAD: 16768000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, TMAX: 22.1, + TMIN: 13.2, VAP: 13.96, WIND: 1.7958151009101146} +- {DAY: 2010-08-10, E0: 0.34900000000000003, ELEV: 440.0, ES0: 0.304, ET0: 0.316, + IRRAD: 17022000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.0, + TMAX: 24.6, TMIN: 9.4, VAP: 13.59, WIND: 1.077489060546069} +- {DAY: 2010-08-11, E0: 0.35, ELEV: 440.0, ES0: 0.307, ET0: 0.3, IRRAD: 15774000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 25.0, + TMIN: 11.3, VAP: 15.41, WIND: 1.077489060546069} +- {DAY: 2010-08-12, E0: 0.311, ELEV: 440.0, ES0: 0.275, ET0: 0.262, IRRAD: 13152000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 18.55, TMAX: 22.8, + TMIN: 14.3, VAP: 17.13, WIND: 1.6521498928373055} +- {DAY: 2010-08-13, E0: 0.187, ELEV: 440.0, ES0: 0.16699999999999998, ET0: 0.16599999999999998, + IRRAD: 7020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.8, SNOWDEPTH: .nan, TEMP: 17.95, + TMAX: 20.0, TMIN: 15.9, VAP: 17.3, WIND: 1.221154268618878} +- {DAY: 2010-08-14, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.24500000000000002, + IRRAD: 12078000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, + TMAX: 20.7, TMIN: 14.6, VAP: 16.32, WIND: 2.298643329164947} +- {DAY: 2010-08-15, E0: 0.414, ELEV: 440.0, ES0: 0.369, ET0: 0.374, IRRAD: 15896000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 20.85, TMAX: 25.1, + TMIN: 16.6, VAP: 16.49, WIND: 2.442308537237756} +- {DAY: 2010-08-16, E0: 0.31, ELEV: 440.0, ES0: 0.277, ET0: 0.258, IRRAD: 12819000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 15.8, TMAX: 18.3, + TMIN: 13.3, VAP: 13.45, WIND: 2.5859737453105653} +- {DAY: 2010-08-17, E0: 0.127, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.132, + IRRAD: 4005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.76, SNOWDEPTH: .nan, TEMP: 13.75, + TMAX: 14.9, TMIN: 12.6, VAP: 13.49, WIND: 3.663462805856634} +- {DAY: 2010-08-18, E0: 0.154, ELEV: 440.0, ES0: 0.141, ET0: 0.155, IRRAD: 5067000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.700000000000001, + TMAX: 17.1, TMIN: 12.3, VAP: 13.89, WIND: 2.7296389533833745} +- {DAY: 2010-08-19, E0: 0.361, ELEV: 440.0, ES0: 0.319, ET0: 0.318, IRRAD: 15911000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.65, TMAX: 20.7, + TMIN: 12.6, VAP: 12.71, WIND: 2.154978121092138} +- {DAY: 2010-08-20, E0: 0.391, ELEV: 440.0, ES0: 0.33199999999999996, ET0: 0.361, + IRRAD: 22793000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.5, + TMAX: 25.3, TMIN: 7.7, VAP: 13.12, WIND: 0.861991248436855} +- {DAY: 2010-08-21, E0: 0.426, ELEV: 440.0, ES0: 0.364, ET0: 0.39, IRRAD: 22795000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.25, TMAX: 27.3, + TMIN: 11.2, VAP: 15.58, WIND: 1.0056564565096642} +- {DAY: 2010-08-22, E0: 0.437, ELEV: 440.0, ES0: 0.376, ET0: 0.39, IRRAD: 21331000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.1, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 29.1, + TMIN: 13.2, VAP: 17.94, WIND: 1.077489060546069} +- {DAY: 2010-08-23, E0: 0.262, ELEV: 440.0, ES0: 0.231, ET0: 0.24300000000000002, + IRRAD: 11294000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.11000000000000001, SNOWDEPTH: .nan, + TEMP: 19.6, TMAX: 24.1, TMIN: 15.1, VAP: 18.71, WIND: 1.939480308982924} +- {DAY: 2010-08-24, E0: 0.31, ELEV: 440.0, ES0: 0.282, ET0: 0.27799999999999997, IRRAD: 10039000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 20.0, TMAX: 22.2, + TMIN: 17.8, VAP: 16.79, WIND: 2.65780634934697} +- {DAY: 2010-08-25, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.29, ET0: 0.294, IRRAD: 16736000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.75, TMAX: 19.2, + TMIN: 10.3, VAP: 11.97, WIND: 2.298643329164947} +- {DAY: 2010-08-26, E0: 0.315, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.29300000000000004, + IRRAD: 13589000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 18.45, + TMAX: 26.0, TMIN: 10.9, VAP: 16.35, WIND: 1.939480308982924} +- {DAY: 2010-08-27, E0: 0.256, ELEV: 440.0, ES0: 0.229, ET0: 0.22599999999999998, + IRRAD: 10050000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.36, SNOWDEPTH: .nan, TEMP: 18.0, + TMAX: 21.1, TMIN: 14.9, VAP: 17.53, WIND: 3.663462805856634} +- {DAY: 2010-08-28, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.223, ET0: 0.22000000000000003, + IRRAD: 10561000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.0, + TMAX: 15.6, TMIN: 12.4, VAP: 11.9, WIND: 2.65780634934697} +- {DAY: 2010-08-29, E0: 0.252, ELEV: 440.0, ES0: 0.225, ET0: 0.209, IRRAD: 11595000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 15.5, + TMIN: 8.4, VAP: 10.76, WIND: 2.7296389533833745} +- {DAY: 2010-08-30, E0: 0.176, ELEV: 440.0, ES0: 0.157, ET0: 0.141, IRRAD: 8652000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.47000000000000003, SNOWDEPTH: .nan, TEMP: 9.399999999999999, + TMAX: 11.2, TMIN: 7.6, VAP: 9.95, WIND: 2.9451367654925877} +- {DAY: 2010-08-31, E0: 0.196, ELEV: 440.0, ES0: 0.174, ET0: 0.178, IRRAD: 10017000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 14.6, + TMIN: 7.6, VAP: 10.35, WIND: 2.083145517055733} +- {DAY: 2010-09-01, E0: 0.16799999999999998, ELEV: 440.0, ES0: 0.149, ET0: 0.142, + IRRAD: 8681000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 10.0, + TMAX: 14.4, TMIN: 5.6, VAP: 10.66, WIND: 1.72398249687371} +- {DAY: 2010-09-02, E0: 0.175, ELEV: 440.0, ES0: 0.154, ET0: 0.147, IRRAD: 8821000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 11.65, TMAX: 15.8, + TMIN: 7.5, VAP: 11.7, WIND: 1.0056564565096642} +- {DAY: 2010-09-03, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.21400000000000002, + ET0: 0.211, IRRAD: 14382000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.35, TMAX: 17.2, TMIN: 7.5, VAP: 11.33, WIND: 1.221154268618878} +- {DAY: 2010-09-04, E0: 0.225, ELEV: 440.0, ES0: 0.20099999999999998, ET0: 0.194, + IRRAD: 9609000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 13.15, + TMAX: 16.6, TMIN: 9.7, VAP: 10.66, WIND: 1.5084846847644964} +- {DAY: 2010-09-05, E0: 0.306, ELEV: 440.0, ES0: 0.262, ET0: 0.277, IRRAD: 19211000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 16.2, + TMIN: 6.0, VAP: 9.21, WIND: 2.65780634934697} +- {DAY: 2010-09-06, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.24900000000000003, + ET0: 0.272, IRRAD: 18341000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.75, TMAX: 15.9, TMIN: 5.6, VAP: 8.77, WIND: 2.5859737453105653} +- {DAY: 2010-09-07, E0: 0.24, ELEV: 440.0, ES0: 0.21000000000000002, ET0: 0.193, IRRAD: 13266000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 9.75, TMAX: 14.3, + TMIN: 5.2, VAP: 9.88, WIND: 3.663462805856634} +- {DAY: 2010-09-08, E0: 0.22000000000000003, ELEV: 440.0, ES0: 0.196, ET0: 0.152, + IRRAD: 9667000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 12.8, + TMAX: 14.9, TMIN: 10.7, VAP: 12.91, WIND: 3.2324671816382065} +- {DAY: 2010-09-09, E0: 0.131, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.131, + IRRAD: 5725000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 13.65, + TMAX: 15.8, TMIN: 11.5, VAP: 13.18, WIND: 1.7958151009101146} +- {DAY: 2010-09-10, E0: 0.211, ELEV: 440.0, ES0: 0.184, ET0: 0.185, IRRAD: 10961000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.200000000000001, + TMAX: 18.6, TMIN: 9.8, VAP: 12.95, WIND: 1.2929868726552827} +- {DAY: 2010-09-11, E0: 0.286, ELEV: 440.0, ES0: 0.242, ET0: 0.253, IRRAD: 17976000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 21.0, + TMIN: 7.1, VAP: 11.57, WIND: 1.0056564565096642} +- {DAY: 2010-09-12, E0: 0.246, ELEV: 440.0, ES0: 0.205, ET0: 0.238, IRRAD: 16699000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, TMAX: 21.7, + TMIN: 6.2, VAP: 11.67, WIND: 0.861991248436855} +- {DAY: 2010-09-13, E0: 0.101, ELEV: 440.0, ES0: 0.088, ET0: 0.11699999999999999, + IRRAD: 5574000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.4, + TMAX: 15.9, TMIN: 8.9, VAP: 12.58, WIND: 1.221154268618878} +- {DAY: 2010-09-14, E0: 0.12, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.10300000000000001, + IRRAD: 5860000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.2, + TMAX: 13.8, TMIN: 8.6, VAP: 12.17, WIND: 2.370475933201351} +- {DAY: 2010-09-15, E0: 0.124, ELEV: 440.0, ES0: 0.11499999999999999, ET0: 0.132, + IRRAD: 3950000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 13.55, + TMAX: 15.2, TMIN: 11.9, VAP: 12.81, WIND: 2.801471557419779} +- {DAY: 2010-09-16, E0: 0.24100000000000002, ELEV: 440.0, ES0: 0.21600000000000003, + ET0: 0.22400000000000003, IRRAD: 10417000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, + SNOWDEPTH: .nan, TEMP: 13.149999999999999, TMAX: 16.4, TMIN: 9.9, VAP: 10.32, WIND: 2.5859737453105653} +- {DAY: 2010-09-17, E0: 0.195, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.192, + IRRAD: 11312000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, + TMAX: 15.9, TMIN: 5.1, VAP: 9.17, WIND: 1.939480308982924} +- {DAY: 2010-09-18, E0: 0.182, ELEV: 440.0, ES0: 0.152, ET0: 0.176, IRRAD: 14229000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.25, TMAX: 14.7, + TMIN: 1.8, VAP: 8.29, WIND: 1.221154268618878} +- {DAY: 2010-09-19, E0: 0.20099999999999998, ELEV: 440.0, ES0: 0.16899999999999998, + ET0: 0.186, IRRAD: 14777000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 8.75, TMAX: 15.2, TMIN: 2.3, VAP: 7.79, WIND: 1.077489060546069} +- {DAY: 2010-09-20, E0: 0.176, ELEV: 440.0, ES0: 0.143, ET0: 0.19, IRRAD: 14819000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 18.3, + TMIN: 1.3, VAP: 9.21, WIND: 1.0056564565096642} +- {DAY: 2010-09-21, E0: 0.21000000000000002, ELEV: 440.0, ES0: 0.16999999999999998, + ET0: 0.225, IRRAD: 17280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.399999999999999, TMAX: 20.9, TMIN: 3.9, VAP: 9.85, WIND: 0.9338238524732597} +- {DAY: 2010-09-22, E0: 0.215, ELEV: 440.0, ES0: 0.174, ET0: 0.23500000000000001, + IRRAD: 16698000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.45, + TMAX: 20.8, TMIN: 6.1, VAP: 10.93, WIND: 1.3648194766916872} +- {DAY: 2010-09-23, E0: 0.191, ELEV: 440.0, ES0: 0.155, ET0: 0.198, IRRAD: 14630000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.600000000000001, + TMAX: 20.6, TMIN: 6.6, VAP: 12.24, WIND: 1.077489060546069} +- {DAY: 2010-09-24, E0: 0.20299999999999999, ELEV: 440.0, ES0: 0.17099999999999999, + ET0: 0.207, IRRAD: 12696000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, + TEMP: 14.600000000000001, TMAX: 21.3, TMIN: 7.9, VAP: 12.91, WIND: 1.6521498928373055} +- {DAY: 2010-09-25, E0: 0.072, ELEV: 440.0, ES0: 0.064, ET0: 0.08299999999999999, + IRRAD: 3235000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 12.15, + TMAX: 13.3, TMIN: 11.0, VAP: 12.81, WIND: 1.8676477049465194} +- {DAY: 2010-09-26, E0: 0.118, ELEV: 440.0, ES0: 0.10700000000000001, ET0: 0.11100000000000002, + IRRAD: 5247000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.95, + TMAX: 10.9, TMIN: 7.0, VAP: 9.37, WIND: 2.5859737453105653} +- {DAY: 2010-09-27, E0: 0.181, ELEV: 440.0, ES0: 0.16, ET0: 0.153, IRRAD: 9271000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 8.95, TMAX: 12.4, + TMIN: 5.5, VAP: 9.07, WIND: 3.44796499374742} +- {DAY: 2010-09-28, E0: 0.063, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.057999999999999996, + IRRAD: 3652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 8.25, + TMAX: 9.1, TMIN: 7.4, VAP: 10.45, WIND: 3.0169693695289928} +- {DAY: 2010-09-29, E0: 0.153, ELEV: 440.0, ES0: 0.134, ET0: 0.127, IRRAD: 8714000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.9, TMAX: 12.1, + TMIN: 7.7, VAP: 9.61, WIND: 1.4366520807280918} +- {DAY: 2010-09-30, E0: 0.13999999999999999, ELEV: 440.0, ES0: 0.123, ET0: 0.11299999999999999, + IRRAD: 7718000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.2, + TMAX: 12.3, TMIN: 4.1, VAP: 8.46, WIND: 1.0056564565096642} +- {DAY: 2010-10-01, E0: 0.06, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.071, + IRRAD: 3340000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: .nan, TEMP: 7.55, + TMAX: 10.2, TMIN: 4.9, VAP: 9.54, WIND: 1.221154268618878} +- {DAY: 2010-10-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10200000000000001, + ET0: 0.099, IRRAD: 6112000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, + TEMP: 10.4, TMAX: 13.8, TMIN: 7.0, VAP: 11.16, WIND: 1.5803172888009012} +- {DAY: 2010-10-03, E0: 0.152, ELEV: 440.0, ES0: 0.128, ET0: 0.134, IRRAD: 10165000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 12.9, + TMIN: 9.6, VAP: 11.19, WIND: 3.304299785674611} +- {DAY: 2010-10-04, E0: 0.142, ELEV: 440.0, ES0: 0.118, ET0: 0.125, IRRAD: 10677000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, TMAX: 12.3, + TMIN: 8.7, VAP: 10.96, WIND: 3.735295409893039} +- {DAY: 2010-10-05, E0: 0.121, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.092, + IRRAD: 6490000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 13.2, TMIN: 9.4, VAP: 12.07, WIND: 2.154978121092138} +- {DAY: 2010-10-06, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.074, ET0: 0.077, + IRRAD: 3969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.0, + TMAX: 12.2, TMIN: 9.8, VAP: 12.0, WIND: 2.0113129130193284} +- {DAY: 2010-10-07, E0: 0.072, ELEV: 440.0, ES0: 0.065, ET0: 0.079, IRRAD: 3115000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.2, TMAX: 11.9, + TMIN: 10.5, VAP: 11.94, WIND: 2.370475933201351} +- {DAY: 2010-10-08, E0: 0.178, ELEV: 440.0, ES0: 0.148, ET0: 0.21400000000000002, + IRRAD: 12854000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.700000000000001, + TMAX: 16.1, TMIN: 7.3, VAP: 9.58, WIND: 3.663462805856634} +- {DAY: 2010-10-09, E0: 0.20400000000000001, ELEV: 440.0, ES0: 0.175, ET0: 0.23700000000000002, + IRRAD: 12656000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.600000000000001, + TMAX: 15.3, TMIN: 5.9, VAP: 7.55, WIND: 3.44796499374742} +- {DAY: 2010-10-10, E0: 0.16399999999999998, ELEV: 440.0, ES0: 0.135, ET0: 0.213, + IRRAD: 13447000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.85, + TMAX: 14.0, TMIN: 3.7, VAP: 6.58, WIND: 2.8733041614561836} +- {DAY: 2010-10-11, E0: 0.16, ELEV: 440.0, ES0: 0.131, ET0: 0.21200000000000002, IRRAD: 13109000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.9, TMAX: 14.5, + TMIN: 3.3, VAP: 6.85, WIND: 3.0169693695289928} +- {DAY: 2010-10-12, E0: 0.123, ELEV: 440.0, ES0: 0.096, ET0: 0.16299999999999998, + IRRAD: 13005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.449999999999999, + TMAX: 14.2, TMIN: 0.7, VAP: 7.32, WIND: 2.5141411412741608} +- {DAY: 2010-10-13, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.092, ET0: 0.134, + IRRAD: 11311000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.85, + TMAX: 12.1, TMIN: 1.6, VAP: 7.62, WIND: 2.8733041614561836} +- {DAY: 2010-10-14, E0: 0.073, ELEV: 440.0, ES0: 0.052000000000000005, ET0: 0.10700000000000001, + IRRAD: 10652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.5, + TMAX: 12.4, TMIN: -1.4, VAP: 7.05, WIND: 1.2929868726552827} +- {DAY: 2010-10-15, E0: 0.052000000000000005, ELEV: 440.0, ES0: 0.045, ET0: 0.05, + IRRAD: 3788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.43, SNOWDEPTH: .nan, TEMP: 4.2, + TMAX: 8.6, TMIN: -0.2, VAP: 8.19, WIND: 0.9338238524732597} +- {DAY: 2010-10-16, E0: 0.054000000000000006, ELEV: 440.0, ES0: 0.047, ET0: 0.057999999999999996, + IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.31, SNOWDEPTH: .nan, TEMP: 6.7, + TMAX: 7.5, TMIN: 5.9, VAP: 8.94, WIND: 1.1493216645824735} +- {DAY: 2010-10-17, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.076, ET0: 0.08399999999999999, + IRRAD: 3537000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 6.3, + TMAX: 7.5, TMIN: 5.1, VAP: 7.72, WIND: 2.442308537237756} +- {DAY: 2010-10-18, E0: 0.08499999999999999, ELEV: 440.0, ES0: 0.075, ET0: 0.074, + IRRAD: 5197000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.9, + TMAX: 7.5, TMIN: 2.3, VAP: 7.05, WIND: 1.3648194766916872} +- {DAY: 2010-10-19, E0: 0.061, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.06999999999999999, + IRRAD: 3878000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 4.95, + TMAX: 7.2, TMIN: 2.7, VAP: 7.55, WIND: 2.5859737453105653} +- {DAY: 2010-10-20, E0: 0.068, ELEV: 440.0, ES0: 0.062, ET0: 0.072, IRRAD: 3005000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.52, SNOWDEPTH: .nan, TEMP: 5.449999999999999, + TMAX: 6.6, TMIN: 4.3, VAP: 7.72, WIND: 3.0169693695289928} +- {DAY: 2010-10-21, E0: 0.099, ELEV: 440.0, ES0: 0.089, ET0: 0.10200000000000001, + IRRAD: 5320000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 3.75, + TMAX: 6.1, TMIN: 1.4, VAP: 5.87, WIND: 2.8733041614561836} +- {DAY: 2010-10-22, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.04, ET0: 0.073, IRRAD: 8983000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.1, TMAX: 6.9, + TMIN: -2.7, VAP: 5.7, WIND: 1.5084846847644964} +- {DAY: 2010-10-23, E0: 0.037, ELEV: 440.0, ES0: 0.025, ET0: 0.06, IRRAD: 6012000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.21000000000000002, SNOWDEPTH: .nan, TEMP: 3.6999999999999997, + TMAX: 9.6, TMIN: -2.2, VAP: 7.35, WIND: 1.6521498928373055} +- {DAY: 2010-10-24, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.049, ET0: 0.066, + IRRAD: 2853000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 6.35, + TMAX: 7.6, TMIN: 5.1, VAP: 8.36, WIND: 2.370475933201351} +- {DAY: 2010-10-25, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.05, ET0: 0.05600000000000001, + IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 3.8, + TMAX: 5.6, TMIN: 2.0, VAP: 6.78, WIND: 1.1493216645824735} +- {DAY: 2010-10-26, E0: 0.051000000000000004, ELEV: 440.0, ES0: 0.040999999999999995, + ET0: 0.06, IRRAD: 5809000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, + TEMP: 2.4, TMAX: 6.8, TMIN: -2.0, VAP: 6.07, WIND: 1.1493216645824735} +- {DAY: 2010-10-27, E0: 0.047, ELEV: 440.0, ES0: 0.031, ET0: 0.061, IRRAD: 9014000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.5, TMAX: 8.1, + TMIN: -3.1, VAP: 5.87, WIND: 1.1493216645824735} +- {DAY: 2010-10-28, E0: 0.071, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.08399999999999999, + IRRAD: 7497000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.3999999999999995, + TMAX: 10.6, TMIN: 0.2, VAP: 6.58, WIND: 1.4366520807280918} +- {DAY: 2010-10-29, E0: 0.032, ELEV: 440.0, ES0: 0.012, ET0: 0.087, IRRAD: 9759000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.65, TMAX: 14.4, + TMIN: -1.1, VAP: 6.78, WIND: 1.077489060546069} +- {DAY: 2010-10-30, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.018, ET0: 0.075, + IRRAD: 8668000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.8500000000000005, + TMAX: 11.9, TMIN: -0.2, VAP: 7.01, WIND: 1.3648194766916872} +- {DAY: 2010-10-31, E0: 0.046, ELEV: 440.0, ES0: 0.033, ET0: 0.06899999999999999, + IRRAD: 6399000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.6499999999999995, + TMAX: 11.6, TMIN: 1.7, VAP: 8.06, WIND: 1.72398249687371} +- {DAY: 2010-11-01, E0: 0.073, ELEV: 440.0, ES0: 0.061, ET0: 0.071, IRRAD: 5266000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 14.3, + TMIN: 5.3, VAP: 9.64, WIND: 1.077489060546069} +- {DAY: 2010-11-02, E0: 0.019, ELEV: 440.0, ES0: 0.012, ET0: 0.04, IRRAD: 3367000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 5.45, TMAX: 8.3, + TMIN: 2.6, VAP: 8.87, WIND: 1.8676477049465194} +- {DAY: 2010-11-03, E0: 0.062, ELEV: 440.0, ES0: 0.054000000000000006, ET0: 0.074, + IRRAD: 3638000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 8.4, + TMAX: 11.8, TMIN: 5.0, VAP: 9.74, WIND: 3.1606345776018023} +- {DAY: 2010-11-04, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.11000000000000001, + ET0: 0.141, IRRAD: 1972000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.9, TMAX: 15.4, TMIN: 10.4, VAP: 11.9, WIND: 4.597286658329894} +- {DAY: 2010-11-05, E0: 0.154, ELEV: 440.0, ES0: 0.144, ET0: 0.177, IRRAD: 4424000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.5, TMAX: 14.7, + TMIN: 12.3, VAP: 10.86, WIND: 4.166291034111466} +- {DAY: 2010-11-06, E0: 0.10800000000000001, ELEV: 440.0, ES0: 0.10400000000000001, + ET0: 0.146, IRRAD: 1597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, + TEMP: 11.5, TMAX: 12.3, TMIN: 10.7, VAP: 9.88, WIND: 3.519797597783825} +- {DAY: 2010-11-07, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.03, ET0: 0.056999999999999995, + IRRAD: 1958000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 8.149999999999999, + TMAX: 10.2, TMIN: 6.1, VAP: 9.68, WIND: 1.5803172888009012} +- {DAY: 2010-11-08, E0: 0.037, ELEV: 440.0, ES0: 0.033, ET0: 0.045, IRRAD: 2280000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 4.6, TMAX: 5.6, + TMIN: 3.6, VAP: 7.62, WIND: 1.5084846847644964} +- {DAY: 2010-11-09, E0: 0.032, ELEV: 440.0, ES0: 0.020999999999999998, ET0: 0.048, + IRRAD: 5597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.0, + TMAX: 8.1, TMIN: 1.9, VAP: 7.28, WIND: 1.5084846847644964} +- {DAY: 2010-11-10, E0: 0.032, ELEV: 440.0, ES0: 0.026000000000000002, ET0: 0.03, + IRRAD: 3253000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 2.6999999999999997, + TMAX: 5.8, TMIN: -0.4, VAP: 7.18, WIND: 1.221154268618878} +- {DAY: 2010-11-11, E0: 0.046, ELEV: 440.0, ES0: 0.039, ET0: 0.05500000000000001, + IRRAD: 3562000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.01, SNOWDEPTH: .nan, TEMP: 4.0, + TMAX: 6.3, TMIN: 1.7, VAP: 7.11, WIND: 3.663462805856634} +- {DAY: 2010-11-12, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.02, ET0: 0.040999999999999995, + IRRAD: 3632000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 6.8, + TMAX: 10.0, TMIN: 3.6, VAP: 9.44, WIND: 4.956449678511917} +- {DAY: 2010-11-13, E0: 0.101, ELEV: 440.0, ES0: 0.092, ET0: 0.149, IRRAD: 4082000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.6, TMAX: 16.2, + TMIN: 9.0, VAP: 11.03, WIND: 4.094458430075062} +- {DAY: 2010-11-14, E0: 0.009, ELEV: 440.0, ES0: 0.004, ET0: 0.081, IRRAD: 7485000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 16.8, + TMIN: 5.7, VAP: 9.74, WIND: 1.6521498928373055} +- {DAY: 2010-11-15, E0: 0.040999999999999995, ELEV: 440.0, ES0: 0.032, ET0: 0.06, + IRRAD: 4089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: .nan, TEMP: 8.45, + TMAX: 12.2, TMIN: 4.7, VAP: 9.71, WIND: 2.083145517055733} +- {DAY: 2010-11-16, E0: 0.02, ELEV: 440.0, ES0: 0.018, ET0: 0.047, IRRAD: 1177000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.13, SNOWDEPTH: .nan, TEMP: 5.9, TMAX: 6.0, + TMIN: 5.8, VAP: 8.53, WIND: 2.298643329164947} +- {DAY: 2010-11-17, E0: 0.013000000000000001, ELEV: 440.0, ES0: 0.011, ET0: 0.033, + IRRAD: 1433000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 4.4, + TMAX: 5.2, TMIN: 3.6, VAP: 8.03, WIND: 1.7958151009101146} +- {DAY: 2010-11-18, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.040999999999999995, + IRRAD: 1288000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 4.800000000000001, + TMAX: 4.9, TMIN: 4.7, VAP: 7.89, WIND: 1.5803172888009012} +- {DAY: 2010-11-19, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.03, + IRRAD: 1611000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 3.1500000000000004, + TMAX: 4.9, TMIN: 1.4, VAP: 7.42, WIND: 1.0056564565096642} +- {DAY: 2010-11-20, E0: 0.024, ELEV: 440.0, ES0: 0.019, ET0: 0.03, IRRAD: 2629000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.95, TMAX: 4.3, + TMIN: 1.6, VAP: 6.88, WIND: 1.5084846847644964} +- {DAY: 2010-11-21, E0: 0.025, ELEV: 440.0, ES0: 0.02, ET0: 0.022, IRRAD: 2790000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 2.75, TMAX: 4.2, + TMIN: 1.3, VAP: 7.18, WIND: 3.376132389711016} +- {DAY: 2010-11-22, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.052000000000000005, + ET0: 0.056999999999999995, IRRAD: 1810000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, + SNOWDEPTH: .nan, TEMP: 5.4, TMAX: 7.0, TMIN: 3.8, VAP: 7.79, WIND: 2.8733041614561836} +- {DAY: 2010-11-23, E0: 0.033, ELEV: 440.0, ES0: 0.031, ET0: 0.036, IRRAD: 1270000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.18, SNOWDEPTH: 0.5, TEMP: 0.8500000000000001, + TMAX: 1.3, TMIN: 0.4, VAP: 6.0, WIND: 3.735295409893039} +- {DAY: 2010-11-24, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.032, ET0: 0.034, + IRRAD: 1628000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.12, SNOWDEPTH: 4.0, TEMP: 1.2, + TMAX: 1.9, TMIN: 0.5, VAP: 6.14, WIND: 3.878960617965848} +- {DAY: 2010-11-25, E0: 0.022, ELEV: 440.0, ES0: 0.016, ET0: 0.03, IRRAD: 3374000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 1.0, TEMP: 0.7499999999999999, + TMAX: 2.3, TMIN: -0.8, VAP: 5.66, WIND: 1.8676477049465194} +- {DAY: 2010-11-26, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.024, + IRRAD: 1677000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 2.0, TEMP: -1.3, + TMAX: -0.2, TMIN: -2.4, VAP: 5.23, WIND: 1.221154268618878} +- {DAY: 2010-11-27, E0: 0.024, ELEV: 440.0, ES0: 0.018, ET0: 0.026000000000000002, + IRRAD: 3588000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 2.0, TEMP: -2.0, + TMAX: -0.4, TMIN: -3.6, VAP: 4.28, WIND: 1.221154268618878} +- {DAY: 2010-11-28, E0: 0.024, ELEV: 440.0, ES0: 0.02, ET0: 0.013000000000000001, + IRRAD: 3194000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 2.0, TEMP: -3.85, + TMAX: -1.5, TMIN: -6.2, VAP: 4.35, WIND: 2.370475933201351} +- {DAY: 2010-11-29, E0: 0.028000000000000004, ELEV: 440.0, ES0: 0.024, ET0: 0.019, + IRRAD: 2553000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 16.0, TEMP: -1.95, + TMAX: -1.0, TMIN: -2.9, VAP: 4.96, WIND: 1.5803172888009012} +- {DAY: 2010-11-30, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.024, ET0: 0.03, + IRRAD: 2146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 19.0, TEMP: -3.8000000000000003, + TMAX: -3.2, TMIN: -4.4, VAP: 3.98, WIND: 2.370475933201351} +- {DAY: 2010-12-01, E0: 0.03, ELEV: 440.0, ES0: 0.028000000000000004, ET0: 0.036, + IRRAD: 1406000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 20.0, TEMP: -6.0, + TMAX: -4.8, TMIN: -7.2, VAP: 3.37, WIND: 4.453621450257085} +- {DAY: 2010-12-02, E0: 0.023, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, + IRRAD: 3010000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -7.95, + TMAX: -5.5, TMIN: -10.4, VAP: 2.87, WIND: 1.939480308982924} +- {DAY: 2010-12-03, E0: 0.019, ELEV: 440.0, ES0: 0.015, ET0: 0.015, IRRAD: 2926000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.100000000000001, + TMAX: -5.4, TMIN: -10.8, VAP: 2.83, WIND: 0.7901586444004506} +- {DAY: 2010-12-04, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.015, + IRRAD: 1788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.6, + TMAX: -5.1, TMIN: -12.1, VAP: 3.14, WIND: 2.0113129130193284} +- {DAY: 2010-12-05, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.01, + IRRAD: 2315000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: 18.0, TEMP: -7.35, + TMAX: -3.7, TMIN: -11.0, VAP: 3.61, WIND: 1.939480308982924} +- {DAY: 2010-12-06, E0: 0.008, ELEV: 440.0, ES0: 0.006, ET0: 0.017, IRRAD: 1609000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.0, SNOWDEPTH: 23.0, TEMP: -1.9999999999999998, + TMAX: 0.1, TMIN: -4.1, VAP: 5.26, WIND: 1.1493216645824735} +- {DAY: 2010-12-07, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.019, IRRAD: 1671000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 25.0, TEMP: 0.0, TMAX: 1.5, + TMIN: -1.5, VAP: 5.93, WIND: 1.0056564565096642} +- {DAY: 2010-12-08, E0: 0.02, ELEV: 440.0, ES0: 0.016, ET0: 0.022, IRRAD: 1933000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 21.0, TEMP: 2.6500000000000004, + TMAX: 4.9, TMIN: 0.4, VAP: 7.11, WIND: 1.5803172888009012} +- {DAY: 2010-12-09, E0: 0.020999999999999998, ELEV: 440.0, ES0: 0.018, ET0: 0.024, + IRRAD: 1529000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: 14.0, TEMP: -2.0, + TMAX: -1.2, TMIN: -2.8, VAP: 4.92, WIND: 4.597286658329894} +- {DAY: 2010-12-10, E0: 0.018, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.028999999999999998, + IRRAD: 3723000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: 14.0, + TEMP: -2.45, TMAX: -2.0, TMIN: -2.9, VAP: 4.28, WIND: 3.0888019735653973} +- {DAY: 2010-12-11, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, + IRRAD: 1355000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: 16.0, TEMP: -0.30000000000000004, + TMAX: 2.3, TMIN: -2.9, VAP: 6.07, WIND: 4.453621450257085} +- {DAY: 2010-12-12, E0: 0.039, ELEV: 440.0, ES0: 0.036, ET0: 0.043, IRRAD: 1668000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.24, SNOWDEPTH: 9.0, TEMP: 1.0499999999999998, + TMAX: 1.4, TMIN: 0.7, VAP: 5.8, WIND: 3.807128013929443} +- {DAY: 2010-12-13, E0: 0.006, ELEV: 440.0, ES0: 0.003, ET0: 0.022, IRRAD: 4070000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 9.0, TEMP: -5.9, TMAX: -5.6, + TMIN: -6.2, VAP: 3.17, WIND: 2.5141411412741608} +- {DAY: 2010-12-14, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.008, + IRRAD: 2280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: 9.0, TEMP: -8.25, + TMAX: -5.4, TMIN: -11.1, VAP: 3.27, WIND: 2.083145517055733} +- {DAY: 2010-12-15, E0: 0.022, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, + IRRAD: 1877000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 9.0, TEMP: -6.65, + TMAX: -6.3, TMIN: -7.0, VAP: 3.34, WIND: 2.801471557419779} +- {DAY: 2010-12-16, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.01, IRRAD: 3137000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 11.0, TEMP: -9.1, + TMAX: -6.2, TMIN: -12.0, VAP: 2.8, WIND: 2.154978121092138} +- {DAY: 2010-12-17, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.016, IRRAD: 1541000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 13.0, TEMP: -7.25, TMAX: -4.9, + TMIN: -9.6, VAP: 3.41, WIND: 1.939480308982924} +- {DAY: 2010-12-18, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, + IRRAD: 3633000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -7.3, + TMAX: -4.1, TMIN: -10.5, VAP: 3.03, WIND: 1.5084846847644964} +- {DAY: 2010-12-19, E0: 0.006, ELEV: 440.0, ES0: 0.004, ET0: 0.009, IRRAD: 1737000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.29, SNOWDEPTH: 13.0, TEMP: -6.75, TMAX: -0.6, + TMIN: -12.9, VAP: 4.01, WIND: 2.154978121092138} +- {DAY: 2010-12-20, E0: 0.036, ELEV: 440.0, ES0: 0.033, ET0: 0.048, IRRAD: 1538000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.41, SNOWDEPTH: 13.0, TEMP: 0.7, TMAX: 2.9, + TMIN: -1.5, VAP: 5.4, WIND: 2.65780634934697} +- {DAY: 2010-12-21, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.018, + IRRAD: 2103000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 13.0, TEMP: -0.19999999999999996, + TMAX: 3.5, TMIN: -3.9, VAP: 5.8, WIND: 1.2929868726552827} +- {DAY: 2010-12-22, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.014000000000000002, + IRRAD: 2105000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -0.44999999999999996, + TMAX: 1.5, TMIN: -2.4, VAP: 5.66, WIND: 1.221154268618878} +- {DAY: 2010-12-23, E0: 0.019, ELEV: 440.0, ES0: 0.016, ET0: 0.014000000000000002, + IRRAD: 2239000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 12.0, TEMP: -0.5, + TMAX: 2.1, TMIN: -3.1, VAP: 5.66, WIND: 1.2929868726552827} +- {DAY: 2010-12-24, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.028999999999999998, + IRRAD: 1140000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: 13.0, TEMP: 0.3, + TMAX: 1.5, TMIN: -0.9, VAP: 5.8, WIND: 2.442308537237756} +- {DAY: 2010-12-25, E0: 0.034, ELEV: 440.0, ES0: 0.032, ET0: 0.031, IRRAD: 2108000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 16.0, TEMP: -4.65, TMAX: -4.5, + TMIN: -4.8, VAP: 3.57, WIND: 2.298643329164947} +- {DAY: 2010-12-26, E0: 0.012, ELEV: 440.0, ES0: 0.009, ET0: 0.012, IRRAD: 2899000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: 16.0, TEMP: -9.95, TMAX: -7.9, + TMIN: -12.0, VAP: 2.6, WIND: 1.6521498928373055} +- {DAY: 2010-12-27, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.017, IRRAD: 1694000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: 16.0, TEMP: -6.5, TMAX: -4.2, + TMIN: -8.8, VAP: 3.54, WIND: 1.72398249687371} +- {DAY: 2010-12-28, E0: 0.016, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.023, + IRRAD: 3146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 16.0, TEMP: -4.65, + TMAX: -2.7, TMIN: -6.6, VAP: 3.41, WIND: 1.4366520807280918} +- {DAY: 2010-12-29, E0: 0.004, ELEV: 440.0, ES0: 0.004, ET0: 0.006, IRRAD: 3716000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 15.0, TEMP: -11.35, TMAX: -8.7, + TMIN: -14.0, VAP: 2.09, WIND: 0.6464934363276413} +- {DAY: 2010-12-30, E0: 0.0, ELEV: 440.0, ES0: 0.0, ET0: 0.0, IRRAD: 5266000.0, LAT: 49.43613, + LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -13.5, TMAX: -8.4, TMIN: -18.6, + VAP: 1.89, WIND: 0.6464934363276413} +- {DAY: 2010-12-31, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.002, + IRRAD: 1689000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 22.0, TEMP: -9.15, + TMAX: -3.4, TMIN: -14.9, VAP: 3.91, WIND: 1.72398249687371} diff --git a/src/diffwofost/physical_models/crop/leaf_dynamics.py b/src/diffwofost/physical_models/crop/leaf_dynamics.py index 4363670..4aa795a 100644 --- a/src/diffwofost/physical_models/crop/leaf_dynamics.py +++ b/src/diffwofost/physical_models/crop/leaf_dynamics.py @@ -17,8 +17,6 @@ from diffwofost.physical_models.utils import _get_drv from diffwofost.physical_models.utils import _get_params_shape -DTYPE = torch.float64 # Default data type for tensors in this module - class WOFOST_Leaf_Dynamics(SimulationObject): """Leaf dynamics for the WOFOST crop model. @@ -122,40 +120,118 @@ class WOFOST_Leaf_Dynamics(SimulationObject): MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) params_shape = None # Shape of the parameters tensors + # Default values that can be overridden before instantiation + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + dtype = torch.float64 + class Parameters(ParamTemplate): - RGRLAI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SPAN = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TBASE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - PERDL = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TDWI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + RGRLAI = Any() + SPAN = Any() + TBASE = Any() + PERDL = Any() + TDWI = Any() SLATB = AfgenTrait() KDIFTB = AfgenTrait() + def __init__(self, parvalues, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device + self.RGRLAI = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.SPAN = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TBASE = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.PERDL = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TDWI = [torch.tensor(-99.0, dtype=dtype, device=device)] + + # Call parent init + super().__init__(parvalues) + class StateVariables(StatesTemplate): - LV = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SLA = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - LVAGE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - LAIEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LASUM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAIEXP = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAIMAX = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAI = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - WLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - DWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - TWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LV = Any() + SLA = Any() + LVAGE = Any() + LAIEM = Any() + LASUM = Any() + LAIEXP = Any() + LAIMAX = Any() + LAI = Any() + WLV = Any() + DWLV = Any() + TWLV = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device if not in kwargs + if "LV" not in kwargs: + self.LV = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "SLA" not in kwargs: + self.SLA = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "LVAGE" not in kwargs: + self.LVAGE = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "LAIEM" not in kwargs: + self.LAIEM = torch.tensor(-99.0, dtype=dtype, device=device) + if "LASUM" not in kwargs: + self.LASUM = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAIEXP" not in kwargs: + self.LAIEXP = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAIMAX" not in kwargs: + self.LAIMAX = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAI" not in kwargs: + self.LAI = torch.tensor(-99.0, dtype=dtype, device=device) + if "WLV" not in kwargs: + self.WLV = torch.tensor(-99.0, dtype=dtype, device=device) + if "DWLV" not in kwargs: + self.DWLV = torch.tensor(-99.0, dtype=dtype, device=device) + if "TWLV" not in kwargs: + self.TWLV = torch.tensor(-99.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish, **kwargs) class RateVariables(RatesTemplate): - GRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV1 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV2 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV3 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DALV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - SLAT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - FYSAGE = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GLAIEX = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GLASOL = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + GRLV = Any() + DSLV1 = Any() + DSLV2 = Any() + DSLV3 = Any() + DSLV = Any() + DALV = Any() + DRLV = Any() + SLAT = Any() + FYSAGE = Any() + GLAIEX = Any() + GLASOL = Any() + + def __init__(self, kiosk, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device + self.GRLV = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV1 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV2 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV3 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV = torch.tensor(0.0, dtype=dtype, device=device) + self.DALV = torch.tensor(0.0, dtype=dtype, device=device) + self.DRLV = torch.tensor(0.0, dtype=dtype, device=device) + self.SLAT = torch.tensor(0.0, dtype=dtype, device=device) + self.FYSAGE = torch.tensor(0.0, dtype=dtype, device=device) + self.GLAIEX = torch.tensor(0.0, dtype=dtype, device=device) + self.GLASOL = torch.tensor(0.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk) def initialize( self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider @@ -191,13 +267,15 @@ def initialize( # Initial leaf biomass WLV = (params.TDWI * (1 - FR)) * FL - DWLV = torch.zeros(self.params_shape, dtype=DTYPE) + DWLV = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) TWLV = WLV + DWLV # Initialize leaf classes (SLA, age and weight) - SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - LVAGE = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) + LVAGE = torch.zeros( + (*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device + ) + LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) SLA[..., 0] = params.SLATB(DVS) LV[..., 0] = WLV @@ -249,8 +327,8 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask # A mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=DTYPE) - dvs_mask = (DVS >= 0).to(dtype=DTYPE) + DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) + dvs_mask = (DVS >= 0).to(dtype=self.dtype) # Growth rate leaves # weight of new leaves @@ -269,7 +347,7 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: if "RF_FROST" in self.kiosk: r.DSLV3 = s.WLV * k.RF_FROST else: - r.DSLV3 = torch.zeros_like(s.WLV, dtype=DTYPE) + r.DSLV3 = torch.zeros_like(s.WLV, dtype=self.dtype) r.DSLV3 = dvs_mask * r.DSLV3 @@ -292,14 +370,14 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: if p.SPAN.requires_grad: # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very # small and mask should be 1 - sharpness = torch.tensor(1e-16, dtype=DTYPE) + sharpness = torch.tensor(1e-16, dtype=self.dtype, device=self.device) # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is # equal to zero and mask should be 0.0 epsilon = 1e-14 - span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=DTYPE) + span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=self.dtype) else: - span_mask = (s.LVAGE > tSPAN).to(dtype=DTYPE) + span_mask = (s.LVAGE > tSPAN).to(dtype=self.dtype) r.DALV = torch.sum(span_mask * s.LV, dim=-1) r.DALV = dvs_mask * r.DALV @@ -329,14 +407,14 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: r.GLAIEX = torch.where( dvs_mask.bool(), torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), - torch.tensor(0.0, dtype=DTYPE), + torch.tensor(0.0, dtype=self.dtype, device=self.device), ) # source-limited increase in leaf area r.GLASOL = torch.where( dvs_mask.bool(), torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), - torch.tensor(0.0, dtype=DTYPE), + torch.tensor(0.0, dtype=self.dtype, device=self.device), ) # sink-limited increase in leaf area @@ -347,7 +425,7 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: r.SLAT = torch.where( dvs_mask.bool(), torch.where(is_lai_exp & (r.GRLV > epsilon), GLA / (r.GRLV + epsilon), r.SLAT), - torch.tensor(0.0, dtype=DTYPE), + torch.tensor(0.0, dtype=self.dtype, device=self.device), ) @prepare_states diff --git a/src/diffwofost/physical_models/crop/root_dynamics.py b/src/diffwofost/physical_models/crop/root_dynamics.py index 6143609..7e79f73 100644 --- a/src/diffwofost/physical_models/crop/root_dynamics.py +++ b/src/diffwofost/physical_models/crop/root_dynamics.py @@ -14,8 +14,6 @@ from diffwofost.physical_models.utils import _broadcast_to from diffwofost.physical_models.utils import _get_params_shape -DTYPE = torch.float64 # Default data type for tensors in this module - class WOFOST_Root_Dynamics(SimulationObject): """Root biomass dynamics and rooting depth. @@ -117,27 +115,87 @@ class WOFOST_Root_Dynamics(SimulationObject): better and more biophysical approach to root development in WOFOST. """ # noqa: E501 + # Default values that can be overridden before instantiation + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + dtype = torch.float64 + class Parameters(ParamTemplate): - RDI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - RRI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - RDMCR = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - RDMSOL = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TDWI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - IAIRDU = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + RDI = Any() + RRI = Any() + RDMCR = Any() + RDMSOL = Any() + TDWI = Any() + IAIRDU = Any() RDRRTB = AfgenTrait() + def __init__(self, parvalues, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Root_Dynamics.dtype + if device is None: + device = WOFOST_Root_Dynamics.device + + # Set default values using the provided dtype and device + self.RDI = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.RRI = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.RDMCR = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.RDMSOL = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TDWI = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.IAIRDU = [torch.tensor(-99.0, dtype=dtype, device=device)] + + # Call parent init + super().__init__(parvalues) + class RateVariables(RatesTemplate): - RR = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GRRT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DRRT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GWRT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + RR = Any() + GRRT = Any() + DRRT = Any() + GWRT = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Root_Dynamics.dtype + if device is None: + device = WOFOST_Root_Dynamics.device + + # Set default values using the provided dtype and device + self.RR = torch.tensor(0.0, dtype=dtype, device=device) + self.GRRT = torch.tensor(0.0, dtype=dtype, device=device) + self.DRRT = torch.tensor(0.0, dtype=dtype, device=device) + self.GWRT = torch.tensor(0.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish) class StateVariables(StatesTemplate): - RD = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - RDM = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - WRT = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - DWRT = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TWRT = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + RD = Any() + RDM = Any() + WRT = Any() + DWRT = Any() + TWRT = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Root_Dynamics.dtype + if device is None: + device = WOFOST_Root_Dynamics.device + + # Set default values using the provided dtype and device if not in kwargs + if "RD" not in kwargs: + self.RD = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "RDM" not in kwargs: + self.RDM = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "WRT" not in kwargs: + self.WRT = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "DWRT" not in kwargs: + self.DWRT = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "TWRT" not in kwargs: + self.TWRT = [torch.tensor(-99.0, dtype=dtype, device=device)] + + # Call parent init + super().__init__(kiosk, publish=publish, **kwargs) def initialize( self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider @@ -168,7 +226,11 @@ def initialize( # Initial root biomass states WRT = _broadcast_to(params.TDWI * self.kiosk.FR, shape) - DWRT = torch.zeros_like(WRT) if shape else torch.zeros((), dtype=DTYPE) + DWRT = ( + torch.zeros_like(WRT) + if shape + else torch.zeros((), dtype=self.dtype, device=self.device) + ) TWRT = WRT + DWRT self.states = self.StateVariables( @@ -192,8 +254,8 @@ def calc_rates(self, day: datetime.date = None, drv: WeatherDataContainer = None # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask # Make a mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=DTYPE) - dvs_mask = (DVS >= 0).to(dtype=DTYPE) + DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) + dvs_mask = (DVS >= 0).to(dtype=self.dtype) # Increase in root biomass r.GRRT = dvs_mask * k.FR * k.DMI @@ -205,8 +267,8 @@ def calc_rates(self, day: datetime.date = None, drv: WeatherDataContainer = None # Do not let the roots growth if partioning to the roots # (variable FR) is zero. - FR = torch.as_tensor(k["FR"], dtype=DTYPE) - mask = (FR > 0.0).to(dtype=DTYPE) + FR = torch.as_tensor(k["FR"], dtype=self.dtype, device=self.device) + mask = (FR > 0.0).to(dtype=self.dtype) r.RR = r.RR * mask * dvs_mask @prepare_states diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index 5195526..48ad756 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -123,13 +123,27 @@ def __init__( agromanagement, test_config, external_states=None, + device=None, + dtype=None, ): BaseEngine.__init__(self) + # Set device and dtype on crop modules if provided + if device is None: + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + if dtype is None: + dtype = torch.float64 + # Load the model configuration self.mconf = ConfigurationLoader(test_config) self.parameterprovider = parameterprovider + # Configure device and dtype on crop module class if it supports them + if hasattr(self.mconf.CROP, "device"): + self.mconf.CROP.device = device + if hasattr(self.mconf.CROP, "dtype"): + self.mconf.CROP.dtype = dtype + # Variable kiosk for registering and publishing variables self.kiosk = VariableKioskTestHelper(external_states) From 2a56108a8540f917c0b3e0e60b8728c504e06919 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Tue, 16 Dec 2025 11:48:57 +0100 Subject: [PATCH 02/17] make notebook run on gpu --- docs/notebooks/WOFOST_Leaf_Dynamics.conf | 32 - docs/notebooks/optimization.ipynb | 159 +- .../test_leafdynamics_wofost72_01.yaml | 1593 ----------------- .../physical_models/crop/leaf_dynamics.py | 50 +- .../physical_models/crop/phenology.py | 334 +++- .../physical_models/crop/root_dynamics.py | 8 +- src/diffwofost/physical_models/utils.py | 32 +- 7 files changed, 399 insertions(+), 1809 deletions(-) delete mode 100644 docs/notebooks/WOFOST_Leaf_Dynamics.conf delete mode 100644 docs/notebooks/test_leafdynamics_wofost72_01.yaml diff --git a/docs/notebooks/WOFOST_Leaf_Dynamics.conf b/docs/notebooks/WOFOST_Leaf_Dynamics.conf deleted file mode 100644 index 23b8de6..0000000 --- a/docs/notebooks/WOFOST_Leaf_Dynamics.conf +++ /dev/null @@ -1,32 +0,0 @@ - -from diffwofost.physical_models.crop.leaf_dynamics import WOFOST_Leaf_Dynamics -from pcse.agromanager import AgroManager - -# Module to be used for water balance -SOIL = None - -# Module to be used for the crop simulation itself -CROP = WOFOST_Leaf_Dynamics - -# Module to use for AgroManagement actions -AGROMANAGEMENT = AgroManager - -# variables to save at OUTPUT signals -# Set to an empty list if you do not want any OUTPUT -OUTPUT_VARS = ["LAI", "TWLV"] -# interval for OUTPUT signals, either "daily"|"dekadal"|"monthly"|"weekly" -# For daily output you change the number of days between successive -# outputs using OUTPUT_INTERVAL_DAYS. For dekadal and monthly -# output this is ignored. -OUTPUT_INTERVAL = "daily" -OUTPUT_INTERVAL_DAYS = 1 -# Weekday: Monday is 0 and Sunday is 6 -OUTPUT_WEEKDAY = 0 - -# Summary variables to save at CROP_FINISH signals -# Set to an empty list if you do not want any SUMMARY_OUTPUT -SUMMARY_OUTPUT_VARS = [] - -# Summary variables to save at TERMINATE signals -# Set to an empty list if you do not want any TERMINAL_OUTPUT -TERMINAL_OUTPUT_VARS = [] diff --git a/docs/notebooks/optimization.ipynb b/docs/notebooks/optimization.ipynb index 6b4c598..7eb2da8 100644 --- a/docs/notebooks/optimization.ipynb +++ b/docs/notebooks/optimization.ipynb @@ -134,7 +134,8 @@ "import yaml\n", "from pathlib import Path\n", "from diffwofost.physical_models.utils import EngineTestHelper\n", - "from diffwofost.physical_models.utils import prepare_engine_input" + "from diffwofost.physical_models.utils import prepare_engine_input\n", + "from diffwofost.physical_models.utils import get_test_data " ] }, { @@ -158,7 +159,7 @@ "output_type": "stream", "text": [ "Using device: cuda\n", - "Using dtype: torch.float64\n" + "Using dtype: torch.float32\n" ] } ], @@ -176,7 +177,8 @@ "\n", "# Check what device will be used by default\n", "_device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", - "_dtype = torch.float64\n", + "#_device = torch.device(\"cpu\") # --- IGNORE ---\n", + "_dtype = torch.float32\n", "print(f\"Using device: {_device}\")\n", "print(f\"Using dtype: {_dtype}\")" ] @@ -282,24 +284,11 @@ "execution_count": 8, "id": "9f3105fb-4fbe-4405-9fd4-e8255b4b119e", "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "string indices must be integers, not 'str'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mTypeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[8]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;66;03m# ---- Here we read the test data and set some variables ----\u001b[39;00m\n\u001b[32m 2\u001b[39m (crop_model_params_provider, weather_data_provider, agro_management_inputs, external_states) = (\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m \u001b[43mprepare_engine_input\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtest_data_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mSPAN\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mTDWI\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mTBASE\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mPERDL\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mRGRLAI\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 4\u001b[39m )\n\u001b[32m 6\u001b[39m expected_results = yaml.safe_load(\u001b[38;5;28mopen\u001b[39m(test_data_path))[\u001b[33m\"\u001b[39m\u001b[33mModelResults\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m 7\u001b[39m expected_lai_twlv = torch.tensor(\n\u001b[32m 8\u001b[39m [[\u001b[38;5;28mfloat\u001b[39m(item[\u001b[33m\"\u001b[39m\u001b[33mLAI\u001b[39m\u001b[33m\"\u001b[39m]), \u001b[38;5;28mfloat\u001b[39m(item[\u001b[33m\"\u001b[39m\u001b[33mTWLV\u001b[39m\u001b[33m\"\u001b[39m])] \u001b[38;5;28;01mfor\u001b[39;00m item \u001b[38;5;129;01min\u001b[39;00m expected_results], dtype=torch.float32\n\u001b[32m 9\u001b[39m ).unsqueeze(\u001b[32m0\u001b[39m) \u001b[38;5;66;03m# shape: [1, time_steps, 2]\u001b[39;00m\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/Dropbox/eScience_projects/diffWOFOST/src/diffwofost/physical_models/utils.py:237\u001b[39m, in \u001b[36mprepare_engine_input\u001b[39m\u001b[34m(test_data, crop_model_params, meteo_range_checks, dtype)\u001b[39m\n\u001b[32m 233\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mprepare_engine_input\u001b[39m(\n\u001b[32m 234\u001b[39m test_data, crop_model_params, meteo_range_checks=\u001b[38;5;28;01mTrue\u001b[39;00m, dtype=torch.float64\n\u001b[32m 235\u001b[39m ):\n\u001b[32m 236\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m\"\"\"Prepare the inputs for the engine from the YAML file.\"\"\"\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m237\u001b[39m agro_management_inputs = \u001b[43mtest_data\u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mAgroManagement\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[32m 238\u001b[39m cropd = test_data[\u001b[33m\"\u001b[39m\u001b[33mModelParameters\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m 240\u001b[39m weather_data_provider = WeatherDataProviderTestHelper(\n\u001b[32m 241\u001b[39m test_data[\u001b[33m\"\u001b[39m\u001b[33mWeatherVariables\u001b[39m\u001b[33m\"\u001b[39m], meteo_range_checks=meteo_range_checks\n\u001b[32m 242\u001b[39m )\n", - "\u001b[31mTypeError\u001b[39m: string indices must be integers, not 'str'" - ] - } - ], + "outputs": [], "source": [ "# ---- Here we read the test data and set some variables ----\n", "(crop_model_params_provider, weather_data_provider, agro_management_inputs, external_states) = (\n", - " prepare_engine_input(test_data_path, [\"SPAN\", \"TDWI\", \"TBASE\", \"PERDL\", \"RGRLAI\"])\n", + " prepare_engine_input(get_test_data(test_data_path), [\"SPAN\", \"TDWI\", \"TBASE\", \"PERDL\", \"RGRLAI\"])\n", ")\n", "\n", "expected_results = yaml.safe_load(open(test_data_path))[\"ModelResults\"]\n", @@ -327,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "e4610238-de0d-42cf-9689-3c074eb2cc0e", "metadata": {}, "outputs": [], @@ -364,7 +353,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "36dd6463-4812-41c0-b2bf-d4769df1136f", "metadata": {}, "outputs": [], @@ -384,7 +373,8 @@ " self.span = BoundedParameter(SPAN_MIN, SPAN_MAX, init_value=SPAN_INIT)\n", "\n", " def forward(self):\n", - " # currently, copying is needed due to an internal issue in engine\n", + " # [!] currently, copying is needed due to an internal issue in engine\n", + " # [!] this hinders in particular the gpu\n", " crop_model_params_provider_ = copy.deepcopy(self.crop_model_params_provider)\n", " external_states_ = copy.deepcopy(self.external_states)\n", " \n", @@ -416,10 +406,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "0dcd85c8-624c-4b58-a7c9-893316110d98", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step 0, Loss 0.1351, TDWI 0.4242, SPAN 30.0000, Time 1.4211s\n", + "Step 10, Loss 0.1348, TDWI 0.5577, SPAN 30.0000, Time 1.2539s\n", + "Step 20, Loss 0.1347, TDWI 0.4957, SPAN 30.0000, Time 1.1583s\n", + "Step 30, Loss 0.1347, TDWI 0.5045, SPAN 30.0000, Time 1.0540s\n" + ] + } + ], "source": [ "# ---- Create model ---- \n", "opt_model = OptDiffLeafDynamics(\n", @@ -434,28 +435,40 @@ "optimizer = torch.optim.Adam(opt_model.parameters(), lr=0.1)\n", "\n", "# ---- We use relative MAE as loss because there are two outputs with different untis ---- \n", - "denom = torch.mean(torch.abs(expected_lai_twlv), dim=1) \n", + "denom = torch.mean(torch.abs(expected_lai_twlv), dim=1).to(dtype=_dtype).to(device=_device) \n", "\n", "# Training loop (example)\n", - "for step in range(101):\n", + "import time\n", + "#for step in range(101):\n", + "for step in range(31):\n", + " start_time = time.time()\n", " optimizer.zero_grad()\n", " results = opt_model() \n", - " mae = torch.mean(torch.abs(results - expected_lai_twlv), dim=1)\n", + " mae = torch.mean(torch.abs(results - expected_lai_twlv.to(dtype=_dtype).to(device=_device)), dim=1)\n", " rmae = mae / denom\n", " loss = rmae.sum() # example: relative mean absolute error\n", " loss.backward()\n", " optimizer.step()\n", + " step_time = time.time() - start_time\n", "\n", " if step % 10 == 0:\n", - " print(f\"Step {step}, Loss {loss.item():.4f}, TDWI {opt_model.tdwi().item():.4f}, SPAN {opt_model.span().item():.4f}\")" + " print(f\"Step {step}, Loss {loss.item():.4f}, TDWI {opt_model.tdwi().item():.4f}, SPAN {opt_model.span().item():.4f}, Time {step_time:.4f}s\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "c2d3a463-43a4-4b29-a71f-696c019343d3", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Actual TDWI 0.5100, SPAN 35.0000\n" + ] + } + ], "source": [ "# ---- validate the results using test data ---- \n", "print(f\"Actual TDWI {crop_model_params_provider[\"TDWI\"].item():.4f}, SPAN {crop_model_params_provider[\"SPAN\"].item():.4f}\")" @@ -492,7 +505,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "eaa4c172-9719-4a79-b2f2-d37ea5b6f11d", "metadata": {}, "outputs": [], @@ -509,7 +522,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "26437aed-755d-4ee3-b7b6-82caf8c30ec5", "metadata": {}, "outputs": [], @@ -537,10 +550,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "22000922-68be-47ed-8afa-2e97c56bb502", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloaded: test_rootdynamics_wofost72_01.yaml\n" + ] + } + ], "source": [ "import urllib.request\n", "\n", @@ -561,10 +582,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "ae2de6dc-1294-4a5a-91d0-3e83f28dc892", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloaded: WOFOST_Root_Dynamics.conf\n" + ] + } + ], "source": [ "url = \"https://raw.githubusercontent.com/WUR-AI/diffWOFOST/refs/heads/main/tests/physical_models/test_data/WOFOST_Root_Dynamics.conf\"\n", "filename = \"WOFOST_Root_Dynamics.conf\"\n", @@ -575,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "a69e9279-49eb-4136-8f15-7cff8bb4af52", "metadata": {}, "outputs": [], @@ -587,14 +616,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "d560476b-64f9-422c-9722-8d0778cfc574", "metadata": {}, "outputs": [], "source": [ "# ---- Here we read the test data and set some variables ----\n", "(crop_model_params_provider, weather_data_provider, agro_management_inputs, external_states) = (\n", - " prepare_engine_input(test_data_path, [\"RDI\", \"RRI\", \"RDMCR\", \"RDMSOL\", \"TDWI\", \"IAIRDU\"])\n", + " prepare_engine_input(get_test_data(test_data_path), [\"RDI\", \"RRI\", \"RDMCR\", \"RDMSOL\", \"TDWI\", \"IAIRDU\"])\n", ")\n", "\n", "expected_results = yaml.safe_load(open(test_data_path))[\"ModelResults\"]\n", @@ -622,7 +651,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "cbfc9e28-3233-4808-b658-36d6f7d18d75", "metadata": {}, "outputs": [], @@ -658,7 +687,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "90296352-4817-4586-842c-12ac6d97d779", "metadata": {}, "outputs": [], @@ -677,7 +706,8 @@ " self.tdwi = BoundedParameter(TDWI_MIN, TDWI_MAX, init_value=TDWI_INIT)\n", " \n", " def forward(self):\n", - " # currently, copying is needed due to an internal issue in engine\n", + " # [!] currently, copying is needed due to an internal issue in engine\n", + " # [!] this hinders the gpu in particular\n", " crop_model_params_provider_ = copy.deepcopy(self.crop_model_params_provider)\n", " external_states_ = copy.deepcopy(self.external_states)\n", " \n", @@ -705,7 +735,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "f2a1a612-f33c-48a0-a3d4-31318d78b9f4", "metadata": {}, "outputs": [], @@ -722,48 +752,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "6c09d1ce-db66-46f3-93d2-1b16f8196e49", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step 0, Loss 0.00004644, TDWI 0.3214, Time 0.2898s\n", + "Step 10, Loss 0.00000479, TDWI 0.5424, Time 0.2516s\n", + "Step 20, Loss 0.00000412, TDWI 0.4864, Time 0.2406s\n" + ] + } + ], "source": [ "# ---- Optimizer ---- \n", "optimizer = torch.optim.Adam(opt_model.parameters(), lr=0.1)\n", "\n", "# ---- We use relative MAE as loss because there are two outputs with different untis ---- \n", - "denom = torch.mean(torch.abs(expected_twrt)) \n", + "denom = torch.mean(torch.abs(expected_twrt)).to(dtype=_dtype).to(device=_device) \n", "\n", "# Training loop (example)\n", - "for step in range(101):\n", + "import time\n", + "for step in range(21):\n", + " start_time = time.time()\n", " optimizer.zero_grad()\n", " results = opt_model() \n", - " mae = torch.mean(torch.abs(results - expected_twrt))\n", + " mae = torch.mean(torch.abs(results - expected_twrt.to(dtype=_dtype).to(device=_device)))\n", " loss = mae / denom # example: relative mean absolute error\n", " loss.backward()\n", " optimizer.step()\n", + " step_time = time.time() - start_time\n", "\n", " if step % 10 == 0:\n", - " print(f\"Step {step}, Loss {loss.item():.8f}, TDWI {opt_model.tdwi().item():.4f}\")" + " print(f\"Step {step}, Loss {loss.item():.8f}, TDWI {opt_model.tdwi().item():.4f}, Time {step_time:.4f}s\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "2029e2dd-7460-4c71-85a9-b1030a43167b", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Actual TDWI 0.5100\n" + ] + } + ], "source": [ "# ---- validate the results using test data ---- \n", "print(f\"Actual TDWI {crop_model_params_provider[\"TDWI\"].item():.4f}\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a6a511a4-f269-4af4-9f51-2dafa9ba38c0", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/notebooks/test_leafdynamics_wofost72_01.yaml b/docs/notebooks/test_leafdynamics_wofost72_01.yaml deleted file mode 100644 index cf2a335..0000000 --- a/docs/notebooks/test_leafdynamics_wofost72_01.yaml +++ /dev/null @@ -1,1593 +0,0 @@ -# Test file for testing the simulation of leaf dynamics in WOFOST 7.1 -# encoding: UTF-8 -# -# All parameter and variable names and their respective units refer to the -# WOFOST manual available from http://wageningenur.nl/wofost -# -# Test file generated with PCSE 5.3.3: https://doi.org/10.5281/zenodo.1252479 -# -# crop: Sugar beets -# latitude: 49.43613 -# longitude: 12.98528 -# -# Wageningen-UR 2018, allard.dewit@wur.nl -AgroManagement: -- 2010-04-16: - CropCalendar: {crop_end_date: 2010-12-31, crop_end_type: harvest, crop_name: Sugar - beets, crop_start_date: 2010-04-16, crop_start_type: sowing, max_duration: 260, - variety_name: Sugar beets_95118_2010} - StateEvents: null - TimedEvents: null -ExternalStates: -- {ADMI: 0.0, DAY: 2010-04-16, DVS: -0.1, FL: 0.85, FR: 0.2, PAI: 0.0, RFTRA: 0.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-17, DVS: -0.09294444444444445, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-18, DVS: -0.08805555555555557, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-19, DVS: -0.08200000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-20, DVS: -0.07333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-21, DVS: -0.06500000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-22, DVS: -0.05994444444444446, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-23, DVS: -0.057777777777777796, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-24, DVS: -0.05333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-25, DVS: -0.04600000000000001, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-26, DVS: -0.03472222222222224, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-27, DVS: -0.025000000000000015, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-28, DVS: -0.016722222222222236, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-29, DVS: -0.007555555555555569, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.06334614016373197, DAY: 2010-04-30, DVS: 0.0, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06955663516961932, DAY: 2010-05-01, DVS: 0.030023923444976078, FL: 0.8394916267942584, - FR: 0.20296939902203062, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06036795101242246, DAY: 2010-05-02, DVS: 0.05741626794258373, FL: 0.8299043062200957, - FR: 0.20567853199432148, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06904930123904608, DAY: 2010-05-03, DVS: 0.07882775119617225, FL: 0.8224102870813397, - FR: 0.20779615121720385, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.05888212870381866, DAY: 2010-05-04, DVS: 0.09868421052631579, FL: 0.8154605263157895, - FR: 0.20975997686524003, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06345060029463373, DAY: 2010-05-05, DVS: 0.11220095693779905, FL: 0.8107296650717704, - FR: 0.2110967979389032, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.07881135347334553, DAY: 2010-05-06, DVS: 0.12212918660287082, FL: 0.8072547846889951, - FR: 0.21207871076292129, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.09852481964261431, DAY: 2010-05-07, DVS: 0.13732057416267943, FL: 0.8019377990430622, - FR: 0.21358115568641886, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.15447577442412816, DAY: 2010-05-08, DVS: 0.14760765550239235, FL: 0.7983373205741626, - FR: 0.21459855933540145, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.18431729511837602, DAY: 2010-05-09, DVS: 0.16363636363636364, FL: 0.7927272727272727, - FR: 0.21618381618381619, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.140018980850247, DAY: 2010-05-10, DVS: 0.1812200956937799, FL: 0.786572966507177, - FR: 0.21792286660707713, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.2525109296012593, DAY: 2010-05-11, DVS: 0.20107655502392344, FL: 0.7796232057416268, - FR: 0.21988669225511331, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.2607790591371754, DAY: 2010-05-12, DVS: 0.22799043062200958, FL: 0.7702033492822966, - FR: 0.2225485041274515, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21051934478979178, DAY: 2010-05-13, DVS: 0.2508373205741627, FL: 0.762206937799043, - FR: 0.22480808665019192, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.18082952401394806, DAY: 2010-05-14, DVS: 0.2674641148325359, FL: 0.7563875598086124, - FR: 0.22645249487354752, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21216158586167716, DAY: 2010-05-15, DVS: 0.27763157894736845, FL: 0.752828947368421, - FR: 0.22745806824754194, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.3225925110304646, DAY: 2010-05-16, DVS: 0.28791866028708135, FL: 0.7492284688995215, - FR: 0.22847547189652453, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.48110564012108614, DAY: 2010-05-17, DVS: 0.3013157894736842, FL: 0.7445394736842105, - FR: 0.22980046269519955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.37044175559672554, DAY: 2010-05-18, DVS: 0.31830143540669853, FL: 0.7385944976076555, - FR: 0.23148036174351963, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21092861815085803, DAY: 2010-05-19, DVS: 0.33337320574162677, FL: 0.7333193779904306, - FR: 0.23297097639202902, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.30947565917826964, DAY: 2010-05-20, DVS: 0.3407894736842105, FL: 0.7307236842105264, - FR: 0.23370445344129553, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.5576143631475478, DAY: 2010-05-21, DVS: 0.35633971291866023, FL: 0.7252811004784689, - FR: 0.2352423891897576, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.8532546017550056, DAY: 2010-05-22, DVS: 0.3809808612440191, FL: 0.7166566985645932, - FR: 0.23767942583732057, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.1077369109143245, DAY: 2010-05-23, DVS: 0.40765550239234444, FL: 0.7073205741626795, - FR: 0.2403175771596824, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.345054359613823, DAY: 2010-05-24, DVS: 0.43540669856459324, FL: 0.6976076555023923, - FR: 0.24306220095693779, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5399857398800252, DAY: 2010-05-25, DVS: 0.46662679425837317, FL: 0.6866806220095694, - FR: 0.2461499027288501, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.1323384231071365, DAY: 2010-05-26, DVS: 0.49928229665071766, FL: 0.6752511961722488, - FR: 0.24937956780062043, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5606027420064925, DAY: 2010-05-27, DVS: 0.5257177033492823, FL: 0.6659988038277512, - FR: 0.25199405857300594, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.0711140915316895, DAY: 2010-05-28, DVS: 0.5544258373205742, FL: 0.655950956937799, - FR: 0.25483332457016666, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.7804869760516895, DAY: 2010-05-29, DVS: 0.5836124401913876, FL: 0.6457356459330144, - FR: 0.2577199116672801, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.241247492064963, DAY: 2010-05-30, DVS: 0.6105263157894737, FL: 0.6363157894736842, - FR: 0.26038172353961825, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.6631751947291513, DAY: 2010-05-31, DVS: 0.6368421052631579, FL: 0.6271052631578947, - FR: 0.26298438403701563, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5195245565028868, DAY: 2010-06-01, DVS: 0.6534688995215311, FL: 0.6212858851674641, - FR: 0.26462879226037117, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.6652932112744012, DAY: 2010-06-02, DVS: 0.6690191387559808, FL: 0.6158433014354067, - FR: 0.26616672800883323, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.9887086907856009, DAY: 2010-06-03, DVS: 0.6867224880382775, FL: 0.6096471291866028, - FR: 0.26791760870708237, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 5.883062026536403, DAY: 2010-06-04, DVS: 0.7076555023923445, FL: 0.6023205741626794, - FR: 0.26998790683001206, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 7.185506694825693, DAY: 2010-06-05, DVS: 0.7355263157894737, FL: 0.5925657894736842, - FR: 0.2727443609022556, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 8.398874147123157, DAY: 2010-06-06, DVS: 0.766866028708134, FL: 0.5815968899521531, - FR: 0.2758438929491561, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 8.460635199837757, DAY: 2010-06-07, DVS: 0.8037081339712919, FL: 0.5687021531100478, - FR: 0.2794876176455124, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 10.983494041245319, DAY: 2010-06-08, DVS: 0.8422248803827752, FL: 0.5552212918660286, - FR: 0.283296966191703, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 12.749950206041587, DAY: 2010-06-09, DVS: 0.8801435406698566, FL: 0.5419497607655501, - FR: 0.28704716336295283, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.529998478430059, DAY: 2010-06-10, DVS: 0.9232057416267944, FL: 0.526877990430622, - FR: 0.2914673046251994, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 18.17948474779467, DAY: 2010-06-11, DVS: 0.9662679425837322, FL: 0.5118062200956938, - FR: 0.29625199362041466, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 17.89920097929859, DAY: 2010-06-12, DVS: 1.0, FL: 0.5, FR: 0.3, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 16.927109068911655, DAY: 2010-06-13, DVS: 1.0110266159695818, FL: 0.48346007604562735, - FR: 0.2889733840304182, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 17.694733764726987, DAY: 2010-06-14, DVS: 1.0191381495564005, FL: 0.4712927756653993, - FR: 0.2808618504435995, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 20.307476232534015, DAY: 2010-06-15, DVS: 1.0269645120405577, FL: 0.4595532319391634, - FR: 0.27303548795944227, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 24.757657128862814, DAY: 2010-06-16, DVS: 1.0346958174904943, FL: 0.4479562737642585, - FR: 0.26530418250950566, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.81491074090979, DAY: 2010-06-17, DVS: 1.0418567807351078, FL: 0.4372148288973383, - FR: 0.25814321926489214, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 24.910834495096452, DAY: 2010-06-18, DVS: 1.049809885931559, FL: 0.4252851711026615, - FR: 0.25019011406844094, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 35.029238340180555, DAY: 2010-06-19, DVS: 1.0582699619771865, FL: 0.4125950570342203, - FR: 0.24173003802281345, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 27.14283941622052, DAY: 2010-06-20, DVS: 1.0640367553865655, FL: 0.40394486692015175, - FR: 0.23596324461343443, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 38.7517315160596, DAY: 2010-06-21, DVS: 1.0691064638783272, FL: 0.3963403041825092, - FR: 0.23089353612167274, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 49.303521645897334, DAY: 2010-06-22, DVS: 1.0750000000000002, FL: 0.38749999999999973, - FR: 0.22499999999999976, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 58.579142820894056, DAY: 2010-06-23, DVS: 1.0811153358681878, FL: 0.37832699619771837, - FR: 0.21888466413181218, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 63.87538124612525, DAY: 2010-06-24, DVS: 1.0874841571609635, FL: 0.3687737642585548, - FR: 0.21251584283903646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.58830761279373, DAY: 2010-06-25, DVS: 1.0964195183776935, FL: 0.3553707224334598, - FR: 0.20358048162230646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 81.61069863667417, DAY: 2010-06-26, DVS: 1.10532319391635, FL: 0.3420152091254751, - FR: 0.19467680608365, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 98.91460885559174, DAY: 2010-06-27, DVS: 1.1146704689480356, FL: 0.32799429657794665, - FR: 0.18532953105196434, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 110.71534392471503, DAY: 2010-06-28, DVS: 1.124746514575412, FL: 0.3128802281368819, - FR: 0.17525348542458782, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 116.76687428085175, DAY: 2010-06-29, DVS: 1.1349493029150826, FL: 0.29757604562737616, - FR: 0.16505069708491735, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 117.14319484688673, DAY: 2010-06-30, DVS: 1.1457224334600762, FL: 0.2814163498098857, - FR: 0.15427756653992372, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 136.4298986955567, DAY: 2010-07-01, DVS: 1.15712927756654, FL: 0.2643060836501899, - FR: 0.14694459532862567, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.0458082598484, DAY: 2010-07-02, DVS: 1.1683460076045629, FL: 0.24748098859315576, - FR: 0.14213742531233017, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 153.63543187877124, DAY: 2010-07-03, DVS: 1.1797528517110267, FL: 0.23037072243345996, - FR: 0.13724877783813136, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 148.53017524286903, DAY: 2010-07-04, DVS: 1.1911596958174906, FL: 0.21326045627376417, - FR: 0.13236013036393257, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.83841279006657, DAY: 2010-07-05, DVS: 1.2025665399239545, FL: 0.19615019011406837, - FR: 0.12747148288973378, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.68737582207044, DAY: 2010-07-06, DVS: 1.2139733840304183, FL: 0.17903992395437257, - FR: 0.12258283541553498, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 182.5758636940754, DAY: 2010-07-07, DVS: 1.223510773130545, FL: 0.16473384030418253, - FR: 0.11849538294405212, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.21274762347915, DAY: 2010-07-08, DVS: 1.2311787072243345, FL: 0.15323193916349825, - FR: 0.1152091254752852, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.06904746497915, DAY: 2010-07-09, DVS: 1.2406844106463877, FL: 0.13897338403041853, - FR: 0.11113525258011955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.81365365320397, DAY: 2010-07-10, DVS: 1.2520912547528515, FL: 0.12186311787072274, - FR: 0.10624660510592077, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 207.2796747505659, DAY: 2010-07-11, DVS: 1.2634980988593154, FL: 0.10475285171102694, - FR: 0.10135795763172198, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 210.2564099700119, DAY: 2010-07-12, DVS: 1.2749049429657793, FL: 0.08764258555133114, - FR: 0.09646931015752318, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.77144757441917, DAY: 2010-07-13, DVS: 1.2863117870722431, FL: 0.07053231939163535, - FR: 0.09158066268332438, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 218.218059543731, DAY: 2010-07-14, DVS: 1.297718631178707, FL: 0.05342205323193955, - FR: 0.09, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 172.34128595981582, DAY: 2010-07-15, DVS: 1.3091254752851709, FL: 0.05, FR: 0.08966201943388256, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 217.38049720124903, DAY: 2010-07-16, DVS: 1.3205323193916347, FL: 0.05, FR: 0.08923954372623574, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 170.3206034911828, DAY: 2010-07-17, DVS: 1.3319391634980986, FL: 0.05, FR: 0.08881706801858893, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 187.5446581745791, DAY: 2010-07-18, DVS: 1.3433460076045625, FL: 0.05, FR: 0.08839459231094213, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 224.14671689354523, DAY: 2010-07-19, DVS: 1.3523447401774396, FL: 0.05, FR: 0.08806130591935409, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 233.29231714903904, DAY: 2010-07-20, DVS: 1.3613434727503166, FL: 0.05, FR: 0.08772801952776604, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 222.37721579346007, DAY: 2010-07-21, DVS: 1.37148288973384, FL: 0.05, FR: 0.08735248556541333, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 212.9717345765432, DAY: 2010-07-22, DVS: 1.382889733840304, FL: 0.05, FR: 0.08693000985776653, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 106.44059255533156, DAY: 2010-07-23, DVS: 1.3942965779467678, FL: 0.05, FR: 0.08650753415011972, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 102.18170120678516, DAY: 2010-07-24, DVS: 1.4050697084917614, FL: 0.05, FR: 0.08610852931511995, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 220.2561264890109, DAY: 2010-07-25, DVS: 1.4132129277566536, FL: 0.05, FR: 0.08580692860160542, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 198.46020040119276, DAY: 2010-07-26, DVS: 1.4202154626108996, FL: 0.05, FR: 0.08554757545885557, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 200.55021107622272, DAY: 2010-07-27, DVS: 1.4277566539923952, FL: 0.05, FR: 0.08526827207435574, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 140.03325959094497, DAY: 2010-07-28, DVS: 1.4362167300380226, FL: 0.05, FR: 0.08495493592451768, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.3498324135558, DAY: 2010-07-29, DVS: 1.4450253485424587, FL: 0.05, FR: 0.08462869079472375, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 172.10898739755729, DAY: 2010-07-30, DVS: 1.4536121673003801, FL: 0.05, FR: 0.08431066047035629, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 239.00609791132996, DAY: 2010-07-31, DVS: 1.4618821292775663, FL: 0.05, FR: 0.08400436558231236, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 231.42562696137483, DAY: 2010-08-01, DVS: 1.4703422053231938, FL: 0.05, FR: 0.0836910294324743, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 155.96076995709458, DAY: 2010-08-02, DVS: 1.4803231939163497, FL: 0.05, FR: 0.08332136318828334, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.9912960157878, DAY: 2010-08-03, DVS: 1.4905576679340937, FL: 0.05, FR: 0.08294230859503357, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 225.87944658593784, DAY: 2010-08-04, DVS: 1.5001584283903675, FL: 0.05, FR: 0.08258672487443083, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 151.14300077473197, DAY: 2010-08-05, DVS: 1.508016476552598, FL: 0.05, FR: 0.08229568605360749, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 64.90608388145633, DAY: 2010-08-06, DVS: 1.5157477820025347, FL: 0.05, FR: 0.08200934140731353, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 89.22935957524096, DAY: 2010-08-07, DVS: 1.5236692015209123, FL: 0.05, FR: 0.08171595549922547, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 208.20159137335756, DAY: 2010-08-08, DVS: 1.531780735107731, FL: 0.05, FR: 0.0814155283293433, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.41906247758274, DAY: 2010-08-09, DVS: 1.5401774397972114, FL: 0.05, FR: 0.08110453926676994, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 205.60001859060077, DAY: 2010-08-10, DVS: 1.54946134347275, FL: 0.05, FR: 0.08076069098249075, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 193.46756914002214, DAY: 2010-08-11, DVS: 1.558333333333333, FL: 0.05, FR: 0.08043209876543211, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 169.18156119156453, DAY: 2010-08-12, DVS: 1.5679340937896067, FL: 0.05, FR: 0.08007651504482939, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 93.08974266331302, DAY: 2010-08-13, DVS: 1.5777883396704686, FL: 0.05, FR: 0.0784423320659063, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 160.937893254941, DAY: 2010-08-14, DVS: 1.5872623574144484, FL: 0.05, FR: 0.07654752851711033, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 186.76242029906928, DAY: 2010-08-15, DVS: 1.596546261089987, FL: 0.05, FR: 0.07469074778200262, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.26873717886699, DAY: 2010-08-16, DVS: 1.6078580481622304, FL: 0.05, FR: 0.07242839036755393, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 53.098070543751426, DAY: 2010-08-17, DVS: 1.6159695817490491, FL: 0.05, FR: 0.07080608365019019, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.23327561394287, DAY: 2010-08-18, DVS: 1.622782002534854, FL: 0.05, FR: 0.0694435994930292, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 199.91869360998516, DAY: 2010-08-19, DVS: 1.6301964512040557, FL: 0.05, FR: 0.06796070975918887, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 223.74667130958667, DAY: 2010-08-20, DVS: 1.6388466413181242, FL: 0.05, FR: 0.06623067173637517, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 213.71782243484523, DAY: 2010-08-21, DVS: 1.647401774397972, FL: 0.05, FR: 0.06451964512040559, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 204.92227270536407, DAY: 2010-08-22, DVS: 1.6576996197718632, FL: 0.05, FR: 0.062460076045627366, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 148.08498613058885, DAY: 2010-08-23, DVS: 1.669106463878327, FL: 0.05, FR: 0.06017870722433459, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 131.56663617540406, DAY: 2010-08-24, DVS: 1.6796261089987325, FL: 0.05, FR: 0.058074778200253495, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 208.14796378003513, DAY: 2010-08-25, DVS: 1.6903992395437262, FL: 0.05, FR: 0.05592015209125477, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.43741030541455, DAY: 2010-08-26, DVS: 1.697845373891001, FL: 0.05, FR: 0.05443092522179978, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 138.12218294509915, DAY: 2010-08-27, DVS: 1.707636248415716, FL: 0.05, FR: 0.05247275031685682, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 153.8085011163628, DAY: 2010-08-28, DVS: 1.717141951837769, FL: 0.05, FR: 0.05057160963244618, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 166.36786308607878, DAY: 2010-08-29, DVS: 1.7241128010139415, FL: 0.05, FR: 0.0491774397972117, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 128.9994856080207, DAY: 2010-08-30, DVS: 1.7297845373890999, FL: 0.05, FR: 0.048043092522180024, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.98852774320295, DAY: 2010-08-31, DVS: 1.7338403041825092, FL: 0.05, FR: 0.04723193916349815, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 131.51208699193373, DAY: 2010-09-01, DVS: 1.738973384030418, FL: 0.05, FR: 0.046205323193916396, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 133.52093244179918, DAY: 2010-09-02, DVS: 1.7434093789607095, FL: 0.05, FR: 0.04531812420785811, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 191.3675196695657, DAY: 2010-09-03, DVS: 1.7488910012674268, FL: 0.05, FR: 0.044221799746514634, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 142.11326427125846, DAY: 2010-09-04, DVS: 1.7548162230671733, FL: 0.05, FR: 0.04303675538656533, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.89142256251282, DAY: 2010-09-05, DVS: 1.761248415716096, FL: 0.05, FR: 0.041750316856780816, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 199.62648416769255, DAY: 2010-09-06, DVS: 1.7663814955640047, FL: 0.05, FR: 0.04072370088719906, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.64113933021284, DAY: 2010-09-07, DVS: 1.7712927756653989, FL: 0.05, FR: 0.03974144486692022, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 139.08471598465746, DAY: 2010-09-08, DVS: 1.7755703422053228, FL: 0.05, FR: 0.038885931558935424, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 82.67638414658957, DAY: 2010-09-09, DVS: 1.781780735107731, FL: 0.05, FR: 0.03764385297845378, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 152.03323101044322, DAY: 2010-09-10, DVS: 1.7885297845373889, FL: 0.05, FR: 0.03629404309252222, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 188.54073598348467, DAY: 2010-09-11, DVS: 1.7956273764258552, FL: 0.05, FR: 0.03487452471482894, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 184.05041333017076, DAY: 2010-09-12, DVS: 1.8026299112801012, FL: 0.05, FR: 0.033474017743979755, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 80.5742369039994, DAY: 2010-09-13, DVS: 1.8095690747782, FL: 0.05, FR: 0.03208618504435998, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 84.81301930060773, DAY: 2010-09-14, DVS: 1.8155259822560201, FL: 0.05, FR: 0.030894803548795965, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 49.372356921724915, DAY: 2010-09-15, DVS: 1.820722433460076, FL: 0.05, FR: 0.02985551330798479, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 141.38168873270675, DAY: 2010-09-16, DVS: 1.8274081115335867, FL: 0.05, FR: 0.028518377693282644, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.8674496140244, DAY: 2010-09-17, DVS: 1.8338403041825093, FL: 0.05, FR: 0.02723193916349813, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 161.59738610558637, DAY: 2010-09-18, DVS: 1.838593155893536, FL: 0.05, FR: 0.02628136882129279, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 160.71185556416103, DAY: 2010-09-19, DVS: 1.8419201520912547, FL: 0.05, FR: 0.025615969581749047, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 167.07029527454148, DAY: 2010-09-20, DVS: 1.8455640050697084, FL: 0.05, FR: 0.024887198986058304, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 167.44249755660599, DAY: 2010-09-21, DVS: 1.849873257287706, FL: 0.05, FR: 0.02402534854245881, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 161.66286186201958, DAY: 2010-09-22, DVS: 1.855830164765526, FL: 0.05, FR: 0.02283396704689479, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.87746836853117, DAY: 2010-09-23, DVS: 1.8624524714828898, FL: 0.05, FR: 0.02150950570342202, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 145.92499554293613, DAY: 2010-09-24, DVS: 1.869169835234474, FL: 0.05, FR: 0.020166032953105165, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 36.85993111833173, DAY: 2010-09-25, DVS: 1.8765209125475286, FL: 0.05, FR: 0.01869581749049426, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.50229901761877, DAY: 2010-09-26, DVS: 1.8823193916349812, FL: 0.05, FR: 0.017536121673003745, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 117.81966505006466, DAY: 2010-09-27, DVS: 1.886089987325729, FL: 0.05, FR: 0.016782002534854165, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 44.65653234518239, DAY: 2010-09-28, DVS: 1.889860583016477, FL: 0.05, FR: 0.016027883396704593, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 109.53680851036636, DAY: 2010-09-29, DVS: 1.8931875792141957, FL: 0.05, FR: 0.01536248415716085, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 101.08752630541781, DAY: 2010-09-30, DVS: 1.8975602027883403, FL: 0.05, FR: 0.01448795944233193, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 40.80050881178069, DAY: 2010-10-01, DVS: 1.9008555133079854, FL: 0.05, FR: 0.013828897338402896, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 79.8450266683765, DAY: 2010-10-02, DVS: 1.903738910012675, FL: 0.05, FR: 0.013252217997464996, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 118.6265113682002, DAY: 2010-10-03, DVS: 1.9084283903675545, FL: 0.05, FR: 0.012314321926489083, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 118.23375396361399, DAY: 2010-10-04, DVS: 1.9136565272496837, FL: 0.05, FR: 0.01126869455006324, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 82.43081801012632, DAY: 2010-10-05, DVS: 1.9184093789607104, FL: 0.05, FR: 0.010318124207857896, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 46.50841125589101, DAY: 2010-10-06, DVS: 1.9236692015209131, FL: 0.05, FR: 0.010458650190114152, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.96815156408577, DAY: 2010-10-07, DVS: 1.9287389100126748, FL: 0.05, FR: 0.011092363751584362, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 121.77727753718361, DAY: 2010-10-08, DVS: 1.9339353612167307, FL: 0.05, FR: 0.011741920152091346, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 119.4686953266058, DAY: 2010-10-09, DVS: 1.9394486692015216, FL: 0.05, FR: 0.012431083650190206, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 112.63420513906051, DAY: 2010-10-10, DVS: 1.9442648922686951, FL: 0.05, FR: 0.0130331115335869, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 112.72875569349394, DAY: 2010-10-11, DVS: 1.947972116603296, FL: 0.05, FR: 0.013496514575411999, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 108.04315231817708, DAY: 2010-10-12, DVS: 1.9517110266159703, FL: 0.05, FR: 0.013963878326996292, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 100.22700691884458, DAY: 2010-10-13, DVS: 1.9545310519645127, FL: 0.05, FR: 0.014316381495564095, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 95.2909499094097, DAY: 2010-10-14, DVS: 1.956970849176173, FL: 0.05, FR: 0.014621356147021633, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.539595870890874, DAY: 2010-10-15, DVS: 1.9585551330798485, FL: 0.05, FR: 0.014819391634981069, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.597831536425922, DAY: 2010-10-16, DVS: 1.9593155893536127, FL: 0.05, FR: 0.014914448669201594, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.96890058359237, DAY: 2010-10-17, DVS: 1.9616603295310526, FL: 0.05, FR: 0.015207541191381582, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 25.375332030621163, DAY: 2010-10-18, DVS: 1.9637515842839044, FL: 0.05, FR: 0.015468948035488053, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 23.259772421309517, DAY: 2010-10-19, DVS: 1.9649556400506978, FL: 0.05, FR: 0.015619455006337227, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 22.074458545299972, DAY: 2010-10-20, DVS: 1.9661913814955647, FL: 0.05, FR: 0.015773922686945593, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.66904408314212, DAY: 2010-10-21, DVS: 1.9677439797211667, FL: 0.05, FR: 0.015967997465145836, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 25.41711865536422, DAY: 2010-10-22, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 21.79726782047625, DAY: 2010-10-23, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 6.162785924356052, DAY: 2010-10-24, DVS: 1.9686628643852986, FL: 0.05, FR: 0.016082858048162327, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.619123014735839, DAY: 2010-10-25, DVS: 1.970785804816224, FL: 0.05, FR: 0.01634822560202799, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-26, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-27, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-28, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-29, DVS: 1.9728136882129288, FL: 0.05, FR: 0.016601711026616103, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-30, DVS: 1.9751267427122952, FL: 0.05, FR: 0.0168908428390369, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-31, DVS: 1.9769328263624852, FL: 0.05, FR: 0.01711660329531066, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-01, DVS: 1.9792458808618516, FL: 0.05, FR: 0.017405735107731454, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-02, DVS: 1.983555133079849, FL: 0.05, FR: 0.01794439163498114, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.61920187706796, DAY: 2010-11-03, DVS: 1.985107731305451, FL: 0.05, FR: 0.018138466413181384, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 10.228893739954652, DAY: 2010-11-04, DVS: 1.9885297845373902, FL: 0.05, FR: 0.018566223067173773, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 45.50321836194165, DAY: 2010-11-05, DVS: 1.9948035487959452, FL: 0.05, FR: 0.019350443599493155, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 5.839463393806534, DAY: 2010-11-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 15.254533744320435, DAY: 2010-11-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 15.049318336197585, DAY: 2010-11-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 43.25829726065667, DAY: 2010-11-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.626290896706164, DAY: 2010-11-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 23.742415471479614, DAY: 2010-11-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 37.48822680676657, DAY: 2010-11-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 42.06031750650069, DAY: 2010-11-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 67.08969220067297, DAY: 2010-11-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 45.329423579045425, DAY: 2010-11-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.8155572206520234, DAY: 2010-11-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 6.152076941584958, DAY: 2010-11-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 4.4505561136862735, DAY: 2010-11-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 4.783258811957177, DAY: 2010-11-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.2038529975166394, DAY: 2010-11-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.8364366655705052, DAY: 2010-11-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 12.744056136326153, DAY: 2010-11-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-01, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-02, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-03, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-04, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-05, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-31, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -ModelParameters: - KDIFTB: [0.0, 0.69, 2.0, 0.69] - PERDL: 0.03 - RGRLAI: 0.016 - SLATB: [0.0, 0.002, 2.0, 0.002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - SPAN: 35.0 - TBASE: 3.0 - TDWI: 0.51 -ModelResults: -- {DAY: 2010-04-16, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-17, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-18, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-19, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-20, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-21, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-22, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-23, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-24, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-25, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-26, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-27, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-28, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-29, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-30, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-05-01, LAI: 0.0008012884382783444, TWLV: 0.40064421913917214} -- {DAY: 2010-05-02, LAI: 0.0009180728639041013, TWLV: 0.4590364319520506} -- {DAY: 2010-05-03, LAI: 0.0010182721089098878, TWLV: 0.5091360544549438} -- {DAY: 2010-05-04, LAI: 0.0011318458202194273, TWLV: 0.5659229101097136} -- {DAY: 2010-05-05, LAI: 0.0012278779235462473, TWLV: 0.6139389617731237} -- {DAY: 2010-05-06, LAI: 0.0013202769303496714, TWLV: 0.6653802456985948} -- {DAY: 2010-05-07, LAI: 0.0014475186147080191, TWLV: 0.7290010878777686} -- {DAY: 2010-05-08, LAI: 0.0015599873277284634, TWLV: 0.8080118648930814} -- {DAY: 2010-05-09, LAI: 0.0017472859219589006, TWLV: 0.9313356407404586} -- {DAY: 2010-05-10, LAI: 0.0019747815900125966, TWLV: 1.0774489874161168} -- {DAY: 2010-05-11, LAI: 0.002195051880281977, TWLV: 1.1875841325508072} -- {DAY: 2010-05-12, LAI: 0.0025887786411230413, TWLV: 1.3844475129713394} -- {DAY: 2010-05-13, LAI: 0.002990484450663319, TWLV: 1.5853004177414776} -- {DAY: 2010-05-14, LAI: 0.003311403060942695, TWLV: 1.7457597228811657} -- {DAY: 2010-05-15, LAI: 0.0035631374590580646, TWLV: 1.8825369252914288} -- {DAY: 2010-05-16, LAI: 0.00383515276491807, TWLV: 2.04225830864769} -- {DAY: 2010-05-17, LAI: 0.004213777827675692, TWLV: 2.283953801765497} -- {DAY: 2010-05-18, LAI: 0.0047368321250869415, TWLV: 2.642155941847756} -- {DAY: 2010-05-19, LAI: 0.005253674600194289, TWLV: 2.9157621842156174} -- {DAY: 2010-05-20, LAI: 0.005533629300107672, TWLV: 3.0704402272783855} -- {DAY: 2010-05-21, LAI: 0.005985911687804124, TWLV: 3.296581421126612} -- {DAY: 2010-05-22, LAI: 0.006794766005696632, TWLV: 3.701008580072866} -- {DAY: 2010-05-23, LAI: 0.008017747257554211, TWLV: 4.312499206001656} -- {DAY: 2010-05-24, LAI: 0.00958479747325244, TWLV: 5.096024313850768} -- {DAY: 2010-05-25, LAI: 0.011461437909919379, TWLV: 6.034344532184239} -- {DAY: 2010-05-26, LAI: 0.01357639464141274, TWLV: 7.091822897930922} -- {DAY: 2010-05-27, LAI: 0.015105620390762525, TWLV: 7.856435772605814} -- {DAY: 2010-05-28, LAI: 0.01718433950961579, TWLV: 8.895795332032444} -- {DAY: 2010-05-29, LAI: 0.019901438050150936, TWLV: 10.254344602300018} -- {DAY: 2010-05-30, LAI: 0.023492357157129082, TWLV: 12.04980415578909} -- {DAY: 2010-05-31, LAI: 0.026344639491767546, TWLV: 13.475945323108323} -- {DAY: 2010-06-01, LAI: 0.02968482185441995, TWLV: 15.146036504434525} -- {DAY: 2010-06-02, LAI: 0.031572940172661136, TWLV: 16.090095663555118} -- {DAY: 2010-06-03, LAI: 0.033624059510839535, TWLV: 17.115655332644323} -- {DAY: 2010-06-04, LAI: 0.03604888059909132, TWLV: 18.328065876770204} -- {DAY: 2010-06-05, LAI: 0.04313585919440744, TWLV: 21.871555174428266} -- {DAY: 2010-06-06, LAI: 0.051651630089183116, TWLV: 26.129440621816094} -- {DAY: 2010-06-07, LAI: 0.061421148255315854, TWLV: 31.014199704882472} -- {DAY: 2010-06-08, LAI: 0.0710443111649686, TWLV: 35.82578115970886} -- {DAY: 2010-06-09, LAI: 0.0832408506665347, TWLV: 41.924050910491914} -- {DAY: 2010-06-10, LAI: 0.09706051559440852, TWLV: 48.83388337442883} -- {DAY: 2010-06-11, LAI: 0.11237158839295898, TWLV: 56.48941977370405} -- {DAY: 2010-06-12, LAI: 0.13098033513707127, TWLV: 65.79379314576016} -- {DAY: 2010-06-13, LAI: 0.14887953611636986, TWLV: 74.74339363540945} -- {DAY: 2010-06-14, LAI: 0.16524669899174718, TWLV: 82.9269750730981} -- {DAY: 2010-06-15, LAI: 0.18192549937302407, TWLV: 91.26637526373655} -- {DAY: 2010-06-16, LAI: 0.20059023204340157, TWLV: 100.59874159892532} -- {DAY: 2010-06-17, LAI: 0.2227709277125586, TWLV: 111.68908943350381} -- {DAY: 2010-06-18, LAI: 0.2514652588822952, TWLV: 126.03625501837213} -- {DAY: 2010-06-19, LAI: 0.27265367590340955, TWLV: 136.63046352892925} -- {DAY: 2010-06-20, LAI: 0.3015594570850738, TWLV: 151.08335411976137} -- {DAY: 2010-06-21, LAI: 0.3234878783967143, TWLV: 162.0475647755816} -- {DAY: 2010-06-22, LAI: 0.35420562451006227, TWLV: 177.4064378322556} -- {DAY: 2010-06-23, LAI: 0.39241585378563265, TWLV: 196.5115524700408} -- {DAY: 2010-06-24, LAI: 0.4367399960721646, TWLV: 218.67362361330683} -- {DAY: 2010-06-25, LAI: 0.48385112564333244, TWLV: 242.22918839889073} -- {DAY: 2010-06-26, LAI: 0.5340211613867598, TWLV: 267.3142062706045} -- {DAY: 2010-06-27, LAI: 0.5898453617089561, TWLV: 295.22630643170277} -- {DAY: 2010-06-28, LAI: 0.6547322168147012, TWLV: 327.6697339845752} -- {DAY: 2010-06-29, LAI: 0.7240135009455375, TWLV: 362.3103760499934} -- {DAY: 2010-06-30, LAI: 0.7935075503630673, TWLV: 397.0574007587582} -- {DAY: 2010-07-01, LAI: 0.8594395709608256, TWLV: 430.02341105763736} -- {DAY: 2010-07-02, LAI: 0.9315580753948549, TWLV: 466.08266327465213} -- {DAY: 2010-07-03, LAI: 1.0043401593881085, TWLV: 502.473705271279} -- {DAY: 2010-07-04, LAI: 1.0751263702546872, TWLV: 537.866810704568} -- {DAY: 2010-07-05, LAI: 1.1384775961401201, TWLV: 569.5424236472843} -- {DAY: 2010-07-06, LAI: 1.1964746616899873, TWLV: 598.540956422218} -- {DAY: 2010-07-07, LAI: 1.253297413089392, TWLV: 626.9523321219206} -- {DAY: 2010-07-08, LAI: 1.313450259435748, TWLV: 657.0287552950986} -- {DAY: 2010-07-09, LAI: 1.3754211623195973, TWLV: 688.0142067370235} -- {DAY: 2010-07-10, LAI: 1.431863547755681, TWLV: 716.2353994550654} -- {DAY: 2010-07-11, LAI: 1.481538282353287, TWLV: 741.0727667538684} -- {DAY: 2010-07-12, LAI: 1.5249645564169987, TWLV: 762.7859037857244} -- {DAY: 2010-07-13, LAI: 1.561819387214024, TWLV: 781.2133191842369} -- {DAY: 2010-07-14, LAI: 1.5905643328604533, TWLV: 795.5857920074517} -- {DAY: 2010-07-15, LAI: 1.6138796464466851, TWLV: 807.2434488005674} -- {DAY: 2010-07-16, LAI: 1.6311137750426667, TWLV: 815.8605130985583} -- {DAY: 2010-07-17, LAI: 1.6528518247627917, TWLV: 826.7295379586208} -- {DAY: 2010-07-18, LAI: 1.6698838851119098, TWLV: 835.2455681331799} -- {DAY: 2010-07-19, LAI: 1.6886383509293676, TWLV: 844.6228010419088} -- {DAY: 2010-07-20, LAI: 1.7110530226187224, TWLV: 855.830136886586} -- {DAY: 2010-07-21, LAI: 1.734382254333626, TWLV: 867.494752744038} -- {DAY: 2010-07-22, LAI: 1.7566199759129721, TWLV: 878.613613533711} -- {DAY: 2010-07-23, LAI: 1.7779171493706263, TWLV: 889.2622002625382} -- {DAY: 2010-07-24, LAI: 1.7885612086261597, TWLV: 894.5842298903048} -- {DAY: 2010-07-25, LAI: 1.7987793787468382, TWLV: 899.693314950644} -- {DAY: 2010-07-26, LAI: 1.8208049913957394, TWLV: 910.7061212750945} -- {DAY: 2010-07-27, LAI: 1.8406510114358585, TWLV: 920.629131295154} -- {DAY: 2010-07-28, LAI: 1.860012432543481, TWLV: 930.6566418489653} -- {DAY: 2010-07-29, LAI: 1.8737912856386716, TWLV: 937.6583048285124} -- {DAY: 2010-07-30, LAI: 1.888426069635021, TWLV: 945.0257964491902} -- {DAY: 2010-07-31, LAI: 1.9053349635533372, TWLV: 953.6312458190681} -- {DAY: 2010-08-01, LAI: 1.9289958629470914, TWLV: 965.5815507146347} -- {DAY: 2010-08-02, LAI: 1.951723631380945, TWLV: 977.1528320627035} -- {DAY: 2010-08-03, LAI: 1.9670994380863849, TWLV: 984.9508705605582} -- {DAY: 2010-08-04, LAI: 1.9822031351175824, TWLV: 992.9004353613476} -- {DAY: 2010-08-05, LAI: 2.003946411461921, TWLV: 1004.1944076906445} -- {DAY: 2010-08-06, LAI: 2.0181590321792258, TWLV: 1011.7515577293809} -- {DAY: 2010-08-07, LAI: 2.0234005610046544, TWLV: 1014.9968619234538} -- {DAY: 2010-08-08, LAI: 2.0315146426442854, TWLV: 1019.4583299022158} -- {DAY: 2010-08-09, LAI: 2.0511118205297634, TWLV: 1029.8684094708835} -- {DAY: 2010-08-10, LAI: 2.069786676561823, TWLV: 1039.989362594763} -- {DAY: 2010-08-11, LAI: 2.088470037984216, TWLV: 1050.269363524293} -- {DAY: 2010-08-12, LAI: 2.1057018381667243, TWLV: 1059.9427419812944} -- {DAY: 2010-08-13, LAI: 2.1190120494176776, TWLV: 1068.4018200408725} -- {DAY: 2010-08-14, LAI: 2.1256039251434737, TWLV: 1073.0563071740382} -- {DAY: 2010-08-15, LAI: 2.13810679536199, TWLV: 1081.1032018367853} -- {DAY: 2010-08-16, LAI: 2.1505905726946066, TWLV: 1090.4413228517385} -- {DAY: 2010-08-17, LAI: 2.164078208756074, TWLV: 1099.1547597106821} -- {DAY: 2010-08-18, LAI: 2.1598762161268814, TWLV: 1101.8096632378697} -- {DAY: 2010-08-19, LAI: 2.1668995436882756, TWLV: 1105.3213270185668} -- {DAY: 2010-08-20, LAI: 2.1783756421544984, TWLV: 1115.3172616990657} -- {DAY: 2010-08-21, LAI: 2.1909807911193253, TWLV: 1126.5045952645448} -- {DAY: 2010-08-22, LAI: 2.202729410453157, TWLV: 1137.1904863862871} -- {DAY: 2010-08-23, LAI: 2.2110250982221276, TWLV: 1147.4366000215553} -- {DAY: 2010-08-24, LAI: 2.2120139319073124, TWLV: 1154.8408493280847} -- {DAY: 2010-08-25, LAI: 2.2098595227263025, TWLV: 1161.4191811368548} -- {DAY: 2010-08-26, LAI: 2.2120655723601943, TWLV: 1171.8265793258568} -- {DAY: 2010-08-27, LAI: 2.2295093133907358, TWLV: 1180.5484498411276} -- {DAY: 2010-08-28, LAI: 2.225422330705947, TWLV: 1187.4545589883824} -- {DAY: 2010-08-29, LAI: 2.207757217560929, TWLV: 1195.1449840442008} -- {DAY: 2010-08-30, LAI: 2.224394003869537, TWLV: 1203.4633771985045} -- {DAY: 2010-08-31, LAI: 2.2186292197599613, TWLV: 1209.9133514789057} -- {DAY: 2010-09-01, LAI: 2.2112473768651246, TWLV: 1217.312777866066} -- {DAY: 2010-09-02, LAI: 2.224398585564318, TWLV: 1223.8883822156624} -- {DAY: 2010-09-03, LAI: 2.2090563476387612, TWLV: 1230.5644288377528} -- {DAY: 2010-09-04, LAI: 2.207004682584603, TWLV: 1240.132804821231} -- {DAY: 2010-09-05, LAI: 2.1923102278300646, TWLV: 1247.2384680347939} -- {DAY: 2010-09-06, LAI: 2.1906709487746756, TWLV: 1257.3830391629194} -- {DAY: 2010-09-07, LAI: 2.1799158510780967, TWLV: 1267.364363371304} -- {DAY: 2010-09-08, LAI: 2.1591697357355475, TWLV: 1276.0964203378148} -- {DAY: 2010-09-09, LAI: 2.1730782073340134, TWLV: 1283.0506561370478} -- {DAY: 2010-09-10, LAI: 2.1370217034621404, TWLV: 1287.184475344377} -- {DAY: 2010-09-11, LAI: 2.105113896992017, TWLV: 1294.786136894899} -- {DAY: 2010-09-12, LAI: 2.073797934846938, TWLV: 1304.2131736940735} -- {DAY: 2010-09-13, LAI: 2.0922029761799545, TWLV: 1313.415694360582} -- {DAY: 2010-09-14, LAI: 2.044436199548158, TWLV: 1317.444406205782} -- {DAY: 2010-09-15, LAI: 1.988030646372474, TWLV: 1321.6850571708123} -- {DAY: 2010-09-16, LAI: 1.9929678820646464, TWLV: 1324.1536750168984} -- {DAY: 2010-09-17, LAI: 1.937824766807081, TWLV: 1331.2227594535339} -- {DAY: 2010-09-18, LAI: 1.9526115117684832, TWLV: 1338.6161319342352} -- {DAY: 2010-09-19, LAI: 1.899277200961512, TWLV: 1346.6960012395143} -- {DAY: 2010-09-20, LAI: 1.9153483865179282, TWLV: 1354.7315940177225} -- {DAY: 2010-09-21, LAI: 1.9320554160453822, TWLV: 1363.0851087814494} -- {DAY: 2010-09-22, LAI: 1.8828676452032849, TWLV: 1371.4572336592796} -- {DAY: 2010-09-23, LAI: 1.8990339313894868, TWLV: 1379.5403767523808} -- {DAY: 2010-09-24, LAI: 1.8428031737923105, TWLV: 1387.4842501708072} -- {DAY: 2010-09-25, LAI: 1.8573956733466044, TWLV: 1394.780499947954} -- {DAY: 2010-09-26, LAI: 1.7882995824651837, TWLV: 1396.6234965038707} -- {DAY: 2010-09-27, LAI: 1.7953498123669454, TWLV: 1400.1486114547515} -- {DAY: 2010-09-28, LAI: 1.7363455680053737, TWLV: 1406.0395947072548} -- {DAY: 2010-09-29, LAI: 1.7408112212398918, TWLV: 1408.2724213245137} -- {DAY: 2010-09-30, LAI: 1.7517649020909287, TWLV: 1413.7492617500325} -- {DAY: 2010-10-01, LAI: 1.6985224288360379, TWLV: 1418.803638065303} -- {DAY: 2010-10-02, LAI: 1.702602479717216, TWLV: 1420.843663505892} -- {DAY: 2010-10-03, LAI: 1.7105869823840534, TWLV: 1424.835914839311} -- {DAY: 2010-10-04, LAI: 1.664452567971006, TWLV: 1430.7672404077211} -- {DAY: 2010-10-05, LAI: 1.6762759433673675, TWLV: 1436.6789281059018} -- {DAY: 2010-10-06, LAI: 1.6276962737689755, TWLV: 1440.800469006408} -- {DAY: 2010-10-07, LAI: 1.6323471148945645, TWLV: 1443.1258895692026} -- {DAY: 2010-10-08, LAI: 1.575491083704617, TWLV: 1444.7742971474072} -- {DAY: 2010-10-09, LAI: 1.5876688114583353, TWLV: 1450.8631610242664} -- {DAY: 2010-10-10, LAI: 1.5376447781071463, TWLV: 1456.8365957905967} -- {DAY: 2010-10-11, LAI: 1.5489081986210524, TWLV: 1462.4683060475495} -- {DAY: 2010-10-12, LAI: 1.503738688754318, TWLV: 1468.1047438322244} -- {DAY: 2010-10-13, LAI: 1.5145430039861358, TWLV: 1473.5069014481332} -- {DAY: 2010-10-14, LAI: 1.5245657046780203, TWLV: 1478.5182517940752} -- {DAY: 2010-10-15, LAI: 1.5340947996689613, TWLV: 1483.282799289546} -- {DAY: 2010-10-16, LAI: 1.5360487592560503, TWLV: 1484.2597790830905} -- {DAY: 2010-10-17, LAI: 1.487833807812087, TWLV: 1484.9896706599118} -- {DAY: 2010-10-18, LAI: 1.489830697870446, TWLV: 1485.9881156890915} -- {DAY: 2010-10-19, LAI: 1.4923682310735082, TWLV: 1487.2568822906223} -- {DAY: 2010-10-20, LAI: 1.4946942083156392, TWLV: 1488.419870911688} -- {DAY: 2010-10-21, LAI: 1.4969016541701692, TWLV: 1489.5235938389528} -- {DAY: 2010-10-22, LAI: 1.5001685585784834, TWLV: 1491.1570460431099} -- {DAY: 2010-10-23, LAI: 1.5027102704440198, TWLV: 1492.4279019758783} -- {DAY: 2010-10-24, LAI: 1.5048899972260672, TWLV: 1493.517765366902} -- {DAY: 2010-10-25, LAI: 1.505506275818503, TWLV: 1493.8259046631197} -- {DAY: 2010-10-26, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-27, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-28, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-29, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-30, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-10-31, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-01, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-02, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-03, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-04, LAI: 1.4644038342439714, TWLV: 1494.98782090771} -- {DAY: 2010-11-05, LAI: 1.4285718928209417, TWLV: 1495.4992655947076} -- {DAY: 2010-11-06, LAI: 1.4331222146571359, TWLV: 1497.7744265128047} -- {DAY: 2010-11-07, LAI: 1.4049612153500868, TWLV: 1498.066399682495} -- {DAY: 2010-11-08, LAI: 1.4064866687245188, TWLV: 1498.829126369711} -- {DAY: 2010-11-09, LAI: 1.4079916005581385, TWLV: 1499.5815922865208} -- {DAY: 2010-11-10, LAI: 1.4123174302842043, TWLV: 1501.7445071495538} -- {DAY: 2010-11-11, LAI: 1.3904647457876436, TWLV: 1502.4758216943892} -- {DAY: 2010-11-12, LAI: 1.3928389873347915, TWLV: 1503.6629424679631} -- {DAY: 2010-11-13, LAI: 1.396587810015468, TWLV: 1505.5373538083013} -- {DAY: 2010-11-14, LAI: 1.4007938417661183, TWLV: 1507.6403696836264} -- {DAY: 2010-11-15, LAI: 1.4075028109861856, TWLV: 1510.99485429366} -- {DAY: 2010-11-16, LAI: 1.3948016247481085, TWLV: 1513.2613254726125} -- {DAY: 2010-11-17, LAI: 1.3951831804701738, TWLV: 1513.452103333645} -- {DAY: 2010-11-18, LAI: 1.395798388164332, TWLV: 1513.7597071807243} -- {DAY: 2010-11-19, LAI: 1.3962434437757008, TWLV: 1513.9822349864085} -- {DAY: 2010-11-20, LAI: 1.3967217696568965, TWLV: 1514.2213979270064} -- {DAY: 2010-11-21, LAI: 1.397042154956648, TWLV: 1514.3815905768822} -- {DAY: 2010-11-22, LAI: 1.3971257986232053, TWLV: 1514.4234124101608} -- {DAY: 2010-11-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-01, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-02, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-03, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-04, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-05, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-06, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-07, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-08, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-09, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-10, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-11, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-12, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-13, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-14, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-15, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-16, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-17, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-18, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-19, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-20, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-21, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-22, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-31, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -Precision: {LAI: 0.01, TWLV: 0.1} -WeatherVariables: -- {DAY: 2010-04-16, E0: 0.292, ELEV: 440.0, ES0: 0.259, ET0: 0.254, IRRAD: 15048000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.35, TMAX: 14.5, - TMIN: 4.2, VAP: 7.45, WIND: 2.298643329164947} -- {DAY: 2010-04-17, E0: 0.307, ELEV: 440.0, ES0: 0.259, ET0: 0.29100000000000004, - IRRAD: 22799000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.3999999999999995, - TMAX: 14.6, TMIN: 0.2, VAP: 6.04, WIND: 1.6521498928373055} -- {DAY: 2010-04-18, E0: 0.303, ELEV: 440.0, ES0: 0.263, ET0: 0.28300000000000003, - IRRAD: 18735000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.450000000000001, - TMAX: 15.8, TMIN: 1.1, VAP: 6.95, WIND: 2.2268107251285425} -- {DAY: 2010-04-19, E0: 0.34500000000000003, ELEV: 440.0, ES0: 0.29700000000000004, - ET0: 0.337, IRRAD: 21025000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.8, TMAX: 18.6, TMIN: 3.0, VAP: 7.35, WIND: 1.939480308982924} -- {DAY: 2010-04-20, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.28900000000000003, - ET0: 0.319, IRRAD: 18687000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.5, TMAX: 16.9, TMIN: 4.1, VAP: 7.42, WIND: 2.442308537237756} -- {DAY: 2010-04-21, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.266, ET0: 0.262, - IRRAD: 14308000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.550000000000001, - TMAX: 10.4, TMIN: 4.7, VAP: 5.87, WIND: 3.0888019735653973} -- {DAY: 2010-04-22, E0: 0.288, ELEV: 440.0, ES0: 0.244, ET0: 0.28500000000000003, - IRRAD: 22864000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.95, - TMAX: 12.4, TMIN: -2.5, VAP: 4.42, WIND: 1.72398249687371} -- {DAY: 2010-04-23, E0: 0.333, ELEV: 440.0, ES0: 0.286, ET0: 0.331, IRRAD: 23148000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.0, TMAX: 15.0, - TMIN: -1.0, VAP: 5.13, WIND: 2.2268107251285425} -- {DAY: 2010-04-24, E0: 0.369, ELEV: 440.0, ES0: 0.316, ET0: 0.36, IRRAD: 24044000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.6, TMAX: 18.0, - TMIN: 1.2, VAP: 6.37, WIND: 1.8676477049465194} -- {DAY: 2010-04-25, E0: 0.43899999999999995, ELEV: 440.0, ES0: 0.381, ET0: 0.425, - IRRAD: 24020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.15, - TMAX: 20.6, TMIN: 5.7, VAP: 7.05, WIND: 2.154978121092138} -- {DAY: 2010-04-26, E0: 0.29700000000000004, ELEV: 440.0, ES0: 0.262, ET0: 0.286, - IRRAD: 15089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 11.75, - TMAX: 17.6, TMIN: 5.9, VAP: 8.63, WIND: 2.083145517055733} -- {DAY: 2010-04-27, E0: 0.3, ELEV: 440.0, ES0: 0.26, ET0: 0.286, IRRAD: 17661000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.45, TMAX: 17.9, - TMIN: 3.0, VAP: 8.23, WIND: 1.6521498928373055} -- {DAY: 2010-04-28, E0: 0.373, ELEV: 440.0, ES0: 0.317, ET0: 0.352, IRRAD: 24464000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 19.8, - TMIN: 2.7, VAP: 7.52, WIND: 1.077489060546069} -- {DAY: 2010-04-29, E0: 0.41100000000000003, ELEV: 440.0, ES0: 0.352, ET0: 0.41600000000000004, - IRRAD: 23615000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, - TMAX: 23.8, TMIN: 4.1, VAP: 8.26, WIND: 1.5084846847644964} -- {DAY: 2010-04-30, E0: 0.348, ELEV: 440.0, ES0: 0.311, ET0: 0.333, IRRAD: 14717000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 22.6, - TMIN: 8.5, VAP: 11.53, WIND: 2.2268107251285425} -- {DAY: 2010-05-01, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.26, ET0: 0.24900000000000003, - IRRAD: 12969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.58, SNOWDEPTH: .nan, TEMP: 14.45, - TMAX: 17.8, TMIN: 11.1, VAP: 12.04, WIND: 1.8676477049465194} -- {DAY: 2010-05-02, E0: 0.176, ELEV: 440.0, ES0: 0.158, ET0: 0.147, IRRAD: 7834000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.8, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 14.2, - TMIN: 9.7, VAP: 11.97, WIND: 1.4366520807280918} -- {DAY: 2010-05-03, E0: 0.189, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.161, - IRRAD: 8347000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 13.5, TMIN: 9.1, VAP: 10.82, WIND: 1.6521498928373055} -- {DAY: 2010-05-04, E0: 0.133, ELEV: 440.0, ES0: 0.121, ET0: 0.11699999999999999, - IRRAD: 5850000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.37, SNOWDEPTH: .nan, TEMP: 8.65, - TMAX: 10.6, TMIN: 6.7, VAP: 9.71, WIND: 2.9451367654925877} -- {DAY: 2010-05-05, E0: 0.176, ELEV: 440.0, ES0: 0.161, ET0: 0.125, IRRAD: 7550000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 7.15, TMAX: 8.9, - TMIN: 5.4, VAP: 8.77, WIND: 4.669119262366299} -- {DAY: 2010-05-06, E0: 0.159, ELEV: 440.0, ES0: 0.144, ET0: 0.145, IRRAD: 6844000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 9.350000000000001, - TMAX: 11.8, TMIN: 6.9, VAP: 9.74, WIND: 3.304299785674611} -- {DAY: 2010-05-07, E0: 0.213, ELEV: 440.0, ES0: 0.189, ET0: 0.175, IRRAD: 11585000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.300000000000001, - TMAX: 10.4, TMIN: 4.2, VAP: 8.06, WIND: 2.2268107251285425} -- {DAY: 2010-05-08, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.246, - IRRAD: 16249000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.7, - TMAX: 15.5, TMIN: 3.9, VAP: 8.4, WIND: 1.077489060546069} -- {DAY: 2010-05-09, E0: 0.29, ELEV: 440.0, ES0: 0.252, ET0: 0.261, IRRAD: 16930000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 10.35, TMAX: 17.3, - TMIN: 3.4, VAP: 9.58, WIND: 1.5803172888009012} -- {DAY: 2010-05-10, E0: 0.182, ELEV: 440.0, ES0: 0.16299999999999998, ET0: 0.152, - IRRAD: 8387000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 14.0, TMIN: 8.6, VAP: 11.36, WIND: 1.077489060546069} -- {DAY: 2010-05-11, E0: 0.39, ELEV: 440.0, ES0: 0.344, ET0: 0.317, IRRAD: 18611000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.3, - TMIN: 9.2, VAP: 12.27, WIND: 2.5859737453105653} -- {DAY: 2010-05-12, E0: 0.32599999999999996, ELEV: 440.0, ES0: 0.29100000000000004, - ET0: 0.269, IRRAD: 14823000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.55, TMAX: 15.5, TMIN: 9.6, VAP: 10.25, WIND: 2.154978121092138} -- {DAY: 2010-05-13, E0: 0.197, ELEV: 440.0, ES0: 0.178, ET0: 0.16699999999999998, - IRRAD: 8293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.44000000000000006, SNOWDEPTH: .nan, - TEMP: 9.95, TMAX: 12.7, TMIN: 7.2, VAP: 9.85, WIND: 2.7296389533833745} -- {DAY: 2010-05-14, E0: 0.149, ELEV: 440.0, ES0: 0.133, ET0: 0.12, IRRAD: 7517000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 7.25, TMAX: 8.6, - TMIN: 5.9, VAP: 8.94, WIND: 1.72398249687371} -- {DAY: 2010-05-15, E0: 0.177, ELEV: 440.0, ES0: 0.161, ET0: 0.148, IRRAD: 8182000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 7.300000000000001, - TMAX: 9.3, TMIN: 5.3, VAP: 8.06, WIND: 2.0113129130193284} -- {DAY: 2010-05-16, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.267, ET0: 0.23500000000000001, - IRRAD: 11902000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.600000000000001, - TMAX: 12.3, TMIN: 4.9, VAP: 7.59, WIND: 3.1606345776018023} -- {DAY: 2010-05-17, E0: 0.364, ELEV: 440.0, ES0: 0.323, ET0: 0.315, IRRAD: 18616000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 10.1, TMAX: 15.4, - TMIN: 4.8, VAP: 7.99, WIND: 2.801471557419779} -- {DAY: 2010-05-18, E0: 0.23900000000000002, ELEV: 440.0, ES0: 0.217, ET0: 0.20600000000000002, - IRRAD: 10082000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 9.3, - TMAX: 11.5, TMIN: 7.1, VAP: 8.29, WIND: 2.65780634934697} -- {DAY: 2010-05-19, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.096, ET0: 0.095, - IRRAD: 5446000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 6.1, - TMAX: 7.1, TMIN: 5.1, VAP: 8.46, WIND: 2.7296389533833745} -- {DAY: 2010-05-20, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.095, ET0: 0.10400000000000001, - IRRAD: 5694000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 9.5, - TMAX: 12.5, TMIN: 6.5, VAP: 11.3, WIND: 1.3648194766916872} -- {DAY: 2010-05-21, E0: 0.265, ELEV: 440.0, ES0: 0.23700000000000002, ET0: 0.21800000000000003, - IRRAD: 11531000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 13.3, - TMAX: 17.0, TMIN: 9.6, VAP: 12.21, WIND: 1.8676477049465194} -- {DAY: 2010-05-22, E0: 0.386, ELEV: 440.0, ES0: 0.339, ET0: 0.323, IRRAD: 19035000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.1, SNOWDEPTH: .nan, TEMP: 14.15, TMAX: 20.1, - TMIN: 8.2, VAP: 11.77, WIND: 1.5084846847644964} -- {DAY: 2010-05-23, E0: 0.45099999999999996, ELEV: 440.0, ES0: 0.395, ET0: 0.378, - IRRAD: 22815000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.6, - TMAX: 20.9, TMIN: 8.3, VAP: 11.7, WIND: 1.6521498928373055} -- {DAY: 2010-05-24, E0: 0.492, ELEV: 440.0, ES0: 0.433, ET0: 0.43600000000000005, - IRRAD: 23334000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 16.05, - TMAX: 23.5, TMIN: 8.6, VAP: 12.38, WIND: 2.5141411412741608} -- {DAY: 2010-05-25, E0: 0.458, ELEV: 440.0, ES0: 0.404, ET0: 0.39, IRRAD: 20822000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: .nan, TEMP: 16.65, - TMAX: 22.0, TMIN: 11.3, VAP: 13.18, WIND: 2.370475933201351} -- {DAY: 2010-05-26, E0: 0.215, ELEV: 440.0, ES0: 0.193, ET0: 0.187, IRRAD: 9210000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.93, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 17.5, - TMIN: 10.6, VAP: 13.39, WIND: 1.5084846847644964} -- {DAY: 2010-05-27, E0: 0.303, ELEV: 440.0, ES0: 0.27, ET0: 0.257, IRRAD: 13115000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 15.0, TMAX: 18.8, - TMIN: 11.2, VAP: 13.15, WIND: 2.083145517055733} -- {DAY: 2010-05-28, E0: 0.362, ELEV: 440.0, ES0: 0.321, ET0: 0.305, IRRAD: 16517000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.2, TMAX: 20.4, - TMIN: 10.0, VAP: 12.78, WIND: 1.72398249687371} -- {DAY: 2010-05-29, E0: 0.413, ELEV: 440.0, ES0: 0.362, ET0: 0.346, IRRAD: 20796000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.9, - TMIN: 8.6, VAP: 11.43, WIND: 1.5084846847644964} -- {DAY: 2010-05-30, E0: 0.277, ELEV: 440.0, ES0: 0.25, ET0: 0.233, IRRAD: 11117000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 3.6, SNOWDEPTH: .nan, TEMP: 14.0, TMAX: 17.8, - TMIN: 10.2, VAP: 12.48, WIND: 2.370475933201351} -- {DAY: 2010-05-31, E0: 0.307, ELEV: 440.0, ES0: 0.277, ET0: 0.21800000000000003, - IRRAD: 13569000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.32, SNOWDEPTH: .nan, TEMP: 9.95, - TMAX: 13.1, TMIN: 6.8, VAP: 9.74, WIND: 3.663462805856634} -- {DAY: 2010-06-01, E0: 0.10900000000000001, ELEV: 440.0, ES0: 0.098, ET0: 0.10300000000000001, - IRRAD: 5021000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 9.5, - TMAX: 11.0, TMIN: 8.0, VAP: 10.76, WIND: 2.7296389533833745} -- {DAY: 2010-06-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10300000000000001, - ET0: 0.10800000000000001, IRRAD: 5185000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.2, - SNOWDEPTH: .nan, TEMP: 10.4, TMAX: 11.5, TMIN: 9.3, VAP: 11.4, WIND: 2.65780634934697} -- {DAY: 2010-06-03, E0: 0.128, ELEV: 440.0, ES0: 0.11399999999999999, ET0: 0.118, - IRRAD: 5892000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.75, - TMAX: 13.2, TMIN: 10.3, VAP: 12.64, WIND: 1.7958151009101146} -- {DAY: 2010-06-04, E0: 0.528, ELEV: 440.0, ES0: 0.45899999999999996, ET0: 0.44000000000000006, - IRRAD: 27697000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.65, - TMAX: 21.1, TMIN: 8.2, VAP: 11.3, WIND: 1.5803172888009012} -- {DAY: 2010-06-05, E0: 0.564, ELEV: 440.0, ES0: 0.488, ET0: 0.497, IRRAD: 29724000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.1, TMAX: 24.8, - TMIN: 7.4, VAP: 11.5, WIND: 1.3648194766916872} -- {DAY: 2010-06-06, E0: 0.5900000000000001, ELEV: 440.0, ES0: 0.513, ET0: 0.525, IRRAD: 28294000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.4, TMAX: 27.0, - TMIN: 9.8, VAP: 13.35, WIND: 1.6521498928373055} -- {DAY: 2010-06-07, E0: 0.505, ELEV: 440.0, ES0: 0.45099999999999996, ET0: 0.42699999999999994, - IRRAD: 19774000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, - TMAX: 22.6, TMIN: 15.6, VAP: 14.43, WIND: 2.801471557419779} -- {DAY: 2010-06-08, E0: 0.538, ELEV: 440.0, ES0: 0.471, ET0: 0.465, IRRAD: 24452000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.85, TMAX: 26.9, - TMIN: 10.8, VAP: 14.7, WIND: 1.4366520807280918} -- {DAY: 2010-06-09, E0: 0.595, ELEV: 440.0, ES0: 0.525, ET0: 0.517, IRRAD: 24742000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, TMAX: 28.6, - TMIN: 14.4, VAP: 17.3, WIND: 2.083145517055733} -- {DAY: 2010-06-10, E0: 0.607, ELEV: 440.0, ES0: 0.536, ET0: 0.533, IRRAD: 24198000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.3, TMAX: 30.5, - TMIN: 16.1, VAP: 17.26, WIND: 1.5803172888009012} -- {DAY: 2010-06-11, E0: 0.653, ELEV: 440.0, ES0: 0.5740000000000001, ET0: 0.5650000000000001, - IRRAD: 27798000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, - TMAX: 27.1, TMIN: 15.9, VAP: 16.05, WIND: 2.298643329164947} -- {DAY: 2010-06-12, E0: 0.5, ELEV: 440.0, ES0: 0.44400000000000006, ET0: 0.437, IRRAD: 19853000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 20.4, TMAX: 26.5, - TMIN: 14.3, VAP: 15.11, WIND: 1.72398249687371} -- {DAY: 2010-06-13, E0: 0.371, ELEV: 440.0, ES0: 0.33399999999999996, ET0: 0.29900000000000004, - IRRAD: 14405000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 15.8, - TMAX: 19.3, TMIN: 12.3, VAP: 13.18, WIND: 2.442308537237756} -- {DAY: 2010-06-14, E0: 0.321, ELEV: 440.0, ES0: 0.288, ET0: 0.258, IRRAD: 12885000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.35, TMAX: 18.9, - TMIN: 11.8, VAP: 13.39, WIND: 2.0113129130193284} -- {DAY: 2010-06-15, E0: 0.369, ELEV: 440.0, ES0: 0.335, ET0: 0.288, IRRAD: 13535000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.200000000000001, - TMAX: 18.6, TMIN: 11.8, VAP: 12.91, WIND: 3.2324671816382065} -- {DAY: 2010-06-16, E0: 0.413, ELEV: 440.0, ES0: 0.374, ET0: 0.33999999999999997, - IRRAD: 15421000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.3, - TMAX: 17.3, TMIN: 11.3, VAP: 11.03, WIND: 4.309956242184276} -- {DAY: 2010-06-17, E0: 0.489, ELEV: 440.0, ES0: 0.438, ET0: 0.389, IRRAD: 20003000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.3, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 19.8, - TMIN: 11.3, VAP: 12.24, WIND: 3.735295409893039} -- {DAY: 2010-06-18, E0: 0.28700000000000003, ELEV: 440.0, ES0: 0.258, ET0: 0.242, - IRRAD: 11148000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 16.35, - TMAX: 18.7, TMIN: 14.0, VAP: 14.16, WIND: 1.5803172888009012} -- {DAY: 2010-06-19, E0: 0.346, ELEV: 440.0, ES0: 0.308, ET0: 0.275, IRRAD: 16133000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.1, TMAX: 15.6, - TMIN: 8.6, VAP: 10.12, WIND: 1.6521498928373055} -- {DAY: 2010-06-20, E0: 0.23199999999999998, ELEV: 440.0, ES0: 0.21000000000000002, - ET0: 0.19, IRRAD: 9754000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, - TEMP: 11.0, TMAX: 14.0, TMIN: 8.0, VAP: 10.05, WIND: 1.3648194766916872} -- {DAY: 2010-06-21, E0: 0.337, ELEV: 440.0, ES0: 0.303, ET0: 0.264, IRRAD: 14403000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.3, TMAX: 15.8, - TMIN: 8.8, VAP: 10.18, WIND: 1.72398249687371} -- {DAY: 2010-06-22, E0: 0.36, ELEV: 440.0, ES0: 0.318, ET0: 0.312, IRRAD: 17475000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.65, TMAX: 18.3, - TMIN: 7.0, VAP: 9.81, WIND: 1.5084846847644964} -- {DAY: 2010-06-23, E0: 0.383, ELEV: 440.0, ES0: 0.33599999999999997, ET0: 0.331, - IRRAD: 19579000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.05, - TMAX: 19.7, TMIN: 6.4, VAP: 10.42, WIND: 1.2929868726552827} -- {DAY: 2010-06-24, E0: 0.44800000000000006, ELEV: 440.0, ES0: 0.397, ET0: 0.383, - IRRAD: 19454000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.1, - TMAX: 22.5, TMIN: 11.7, VAP: 11.5, WIND: 1.2929868726552827} -- {DAY: 2010-06-25, E0: 0.418, ELEV: 440.0, ES0: 0.367, ET0: 0.378, IRRAD: 19342000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 17.05, TMAX: 24.0, - TMIN: 10.1, VAP: 13.52, WIND: 1.5803172888009012} -- {DAY: 2010-06-26, E0: 0.457, ELEV: 440.0, ES0: 0.4, ET0: 0.40499999999999997, IRRAD: 21119000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.75, TMAX: 24.3, - TMIN: 11.2, VAP: 13.96, WIND: 1.5084846847644964} -- {DAY: 2010-06-27, E0: 0.571, ELEV: 440.0, ES0: 0.49800000000000005, ET0: 0.506, - IRRAD: 26779000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.9, - TMAX: 24.8, TMIN: 13.0, VAP: 12.48, WIND: 1.6521498928373055} -- {DAY: 2010-06-28, E0: 0.585, ELEV: 440.0, ES0: 0.507, ET0: 0.519, IRRAD: 28562000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, TMAX: 26.6, - TMIN: 11.6, VAP: 12.38, WIND: 1.077489060546069} -- {DAY: 2010-06-29, E0: 0.538, ELEV: 440.0, ES0: 0.46799999999999997, ET0: 0.493, - IRRAD: 25202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.0, - TMAX: 28.1, TMIN: 11.9, VAP: 13.52, WIND: 1.1493216645824735} -- {DAY: 2010-06-30, E0: 0.515, ELEV: 440.0, ES0: 0.45499999999999996, ET0: 0.45099999999999996, - IRRAD: 21164000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 21.35, - TMAX: 27.5, TMIN: 15.2, VAP: 15.65, WIND: 1.3648194766916872} -- {DAY: 2010-07-01, E0: 0.533, ELEV: 440.0, ES0: 0.462, ET0: 0.47800000000000004, - IRRAD: 25266000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.7, - TMAX: 28.2, TMIN: 13.2, VAP: 14.63, WIND: 0.861991248436855} -- {DAY: 2010-07-02, E0: 0.597, ELEV: 440.0, ES0: 0.518, ET0: 0.5349999999999999, IRRAD: 27426000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.2, TMAX: 30.2, - TMIN: 14.2, VAP: 14.87, WIND: 0.9338238524732597} -- {DAY: 2010-07-03, E0: 0.614, ELEV: 440.0, ES0: 0.537, ET0: 0.5519999999999999, IRRAD: 26263000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.1, TMAX: 30.8, - TMIN: 15.4, VAP: 15.51, WIND: 1.2929868726552827} -- {DAY: 2010-07-04, E0: 0.509, ELEV: 440.0, ES0: 0.449, ET0: 0.457, IRRAD: 20494000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 22.45, TMAX: 28.9, - TMIN: 16.0, VAP: 17.26, WIND: 1.5084846847644964} -- {DAY: 2010-07-05, E0: 0.489, ELEV: 440.0, ES0: 0.43600000000000005, ET0: 0.409, - IRRAD: 18435000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 22.0, - TMAX: 26.7, TMIN: 17.3, VAP: 17.84, WIND: 1.6521498928373055} -- {DAY: 2010-07-06, E0: 0.454, ELEV: 440.0, ES0: 0.40499999999999997, ET0: 0.381, - IRRAD: 18109000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.049999999999997, - TMAX: 20.4, TMIN: 15.7, VAP: 13.45, WIND: 2.2268107251285425} -- {DAY: 2010-07-07, E0: 0.40499999999999997, ELEV: 440.0, ES0: 0.352, ET0: 0.377, - IRRAD: 21158000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.1, - TMAX: 22.4, TMIN: 7.8, VAP: 10.22, WIND: 1.077489060546069} -- {DAY: 2010-07-08, E0: 0.5599999999999999, ELEV: 440.0, ES0: 0.484, ET0: 0.505, IRRAD: 28373000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.0, TMAX: 27.4, - TMIN: 8.6, VAP: 11.33, WIND: 1.0056564565096642} -- {DAY: 2010-07-09, E0: 0.609, ELEV: 440.0, ES0: 0.5269999999999999, ET0: 0.55, IRRAD: 28929000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 30.9, - TMIN: 11.4, VAP: 13.69, WIND: 0.9338238524732597} -- {DAY: 2010-07-10, E0: 0.619, ELEV: 440.0, ES0: 0.5389999999999999, ET0: 0.5780000000000001, - IRRAD: 27293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.25, - TMAX: 32.1, TMIN: 14.4, VAP: 15.14, WIND: 1.2929868726552827} -- {DAY: 2010-07-11, E0: 0.671, ELEV: 440.0, ES0: 0.587, ET0: 0.628, IRRAD: 28557000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 24.1, TMAX: 33.7, - TMIN: 14.5, VAP: 13.93, WIND: 1.4366520807280918} -- {DAY: 2010-07-12, E0: 0.669, ELEV: 440.0, ES0: 0.589, ET0: 0.617, IRRAD: 27106000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 24.45, TMAX: 33.5, - TMIN: 15.4, VAP: 16.08, WIND: 1.5803172888009012} -- {DAY: 2010-07-13, E0: 0.5700000000000001, ELEV: 440.0, ES0: 0.506, ET0: 0.514, IRRAD: 21652000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 23.65, TMAX: 29.1, - TMIN: 18.2, VAP: 17.03, WIND: 1.939480308982924} -- {DAY: 2010-07-14, E0: 0.633, ELEV: 440.0, ES0: 0.5509999999999999, ET0: 0.579, IRRAD: 27607000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 24.0, TMAX: 32.9, - TMIN: 15.1, VAP: 16.42, WIND: 1.1493216645824735} -- {DAY: 2010-07-15, E0: 0.43499999999999994, ELEV: 440.0, ES0: 0.39, ET0: 0.376, IRRAD: 15587000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.75, TMAX: 26.0, - TMIN: 19.5, VAP: 17.94, WIND: 1.5803172888009012} -- {DAY: 2010-07-16, E0: 0.645, ELEV: 440.0, ES0: 0.5650000000000001, ET0: 0.585, IRRAD: 26895000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 24.25, TMAX: 33.4, - TMIN: 15.1, VAP: 18.14, WIND: 1.4366520807280918} -- {DAY: 2010-07-17, E0: 0.391, ELEV: 440.0, ES0: 0.35, ET0: 0.331, IRRAD: 14872000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.31, SNOWDEPTH: .nan, TEMP: 21.55, TMAX: 24.6, - TMIN: 18.5, VAP: 17.36, WIND: 1.8676477049465194} -- {DAY: 2010-07-18, E0: 0.371, ELEV: 440.0, ES0: 0.329, ET0: 0.316, IRRAD: 15735000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.200000000000003, - TMAX: 21.1, TMIN: 13.3, VAP: 14.0, WIND: 1.72398249687371} -- {DAY: 2010-07-19, E0: 0.45499999999999996, ELEV: 440.0, ES0: 0.399, ET0: 0.40099999999999997, - IRRAD: 21342000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.2, - TMAX: 23.4, TMIN: 11.0, VAP: 12.17, WIND: 1.939480308982924} -- {DAY: 2010-07-20, E0: 0.5469999999999999, ELEV: 440.0, ES0: 0.477, ET0: 0.485, IRRAD: 25767000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.0, TMAX: 25.9, - TMIN: 12.1, VAP: 14.23, WIND: 1.7958151009101146} -- {DAY: 2010-07-21, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.509, ET0: 0.517, IRRAD: 26623000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.85, TMAX: 31.2, - TMIN: 14.5, VAP: 16.25, WIND: 0.861991248436855} -- {DAY: 2010-07-22, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.516, ET0: 0.534, IRRAD: 23571000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 24.200000000000003, - TMAX: 31.8, TMIN: 16.6, VAP: 17.94, WIND: 1.5803172888009012} -- {DAY: 2010-07-23, E0: 0.266, ELEV: 440.0, ES0: 0.242, ET0: 0.23199999999999998, - IRRAD: 8448000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.6, SNOWDEPTH: .nan, TEMP: 20.0, - TMAX: 22.4, TMIN: 17.6, VAP: 18.07, WIND: 2.0113129130193284} -- {DAY: 2010-07-24, E0: 0.21800000000000003, ELEV: 440.0, ES0: 0.199, ET0: 0.197, - IRRAD: 7503000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 15.85, - TMAX: 18.0, TMIN: 13.7, VAP: 14.26, WIND: 2.442308537237756} -- {DAY: 2010-07-25, E0: 0.393, ELEV: 440.0, ES0: 0.346, ET0: 0.344, IRRAD: 18998000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 18.8, - TMIN: 9.3, VAP: 10.18, WIND: 1.939480308982924} -- {DAY: 2010-07-26, E0: 0.34700000000000003, ELEV: 440.0, ES0: 0.306, ET0: 0.301, - IRRAD: 16015000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.899999999999999, - TMAX: 20.7, TMIN: 9.1, VAP: 11.9, WIND: 1.3648194766916872} -- {DAY: 2010-07-27, E0: 0.367, ELEV: 440.0, ES0: 0.324, ET0: 0.305, IRRAD: 16530000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 16.35, TMAX: 21.3, - TMIN: 11.4, VAP: 13.79, WIND: 1.3648194766916872} -- {DAY: 2010-07-28, E0: 0.282, ELEV: 440.0, ES0: 0.254, ET0: 0.24300000000000002, - IRRAD: 10520000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16999999999999998, SNOWDEPTH: .nan, - TEMP: 16.9, TMAX: 20.4, TMIN: 13.4, VAP: 15.27, WIND: 2.65780634934697} -- {DAY: 2010-07-29, E0: 0.273, ELEV: 440.0, ES0: 0.244, ET0: 0.22999999999999998, - IRRAD: 11067000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 16.549999999999997, - TMAX: 18.9, TMIN: 14.2, VAP: 14.84, WIND: 1.7958151009101146} -- {DAY: 2010-07-30, E0: 0.312, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.258, - IRRAD: 13224000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.049999999999997, - TMAX: 19.4, TMIN: 12.7, VAP: 13.25, WIND: 1.221154268618878} -- {DAY: 2010-07-31, E0: 0.48200000000000004, ELEV: 440.0, ES0: 0.414, ET0: 0.42800000000000005, - IRRAD: 26033000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.35, - TMAX: 24.1, TMIN: 8.6, VAP: 12.21, WIND: 1.221154268618878} -- {DAY: 2010-08-01, E0: 0.511, ELEV: 440.0, ES0: 0.44000000000000006, ET0: 0.46699999999999997, - IRRAD: 25874000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.75, - TMAX: 27.3, TMIN: 10.2, VAP: 13.62, WIND: 1.221154268618878} -- {DAY: 2010-08-02, E0: 0.301, ELEV: 440.0, ES0: 0.268, ET0: 0.258, IRRAD: 12301000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.8699999999999999, SNOWDEPTH: .nan, TEMP: 19.15, - TMAX: 23.4, TMIN: 14.9, VAP: 17.5, WIND: 1.221154268618878} -- {DAY: 2010-08-03, E0: 0.315, ELEV: 440.0, ES0: 0.282, ET0: 0.263, IRRAD: 12311000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 20.0, - TMIN: 16.3, VAP: 15.81, WIND: 1.8676477049465194} -- {DAY: 2010-08-04, E0: 0.4, ELEV: 440.0, ES0: 0.34900000000000003, ET0: 0.333, IRRAD: 19963000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.4, TMAX: 21.6, - TMIN: 9.2, VAP: 12.34, WIND: 1.1493216645824735} -- {DAY: 2010-08-05, E0: 0.255, ELEV: 440.0, ES0: 0.227, ET0: 0.21800000000000003, - IRRAD: 10993000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.2, - TMAX: 20.4, TMIN: 10.0, VAP: 14.13, WIND: 1.5084846847644964} -- {DAY: 2010-08-06, E0: 0.121, ELEV: 440.0, ES0: 0.10800000000000001, ET0: 0.12, IRRAD: 4960000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.8, SNOWDEPTH: .nan, TEMP: 15.5, TMAX: 16.8, - TMIN: 14.2, VAP: 16.08, WIND: 1.7958151009101146} -- {DAY: 2010-08-07, E0: 0.17099999999999999, ELEV: 440.0, ES0: 0.154, ET0: 0.155, - IRRAD: 6510000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.8, - TMAX: 18.0, TMIN: 13.6, VAP: 15.27, WIND: 2.0113129130193284} -- {DAY: 2010-08-08, E0: 0.374, ELEV: 440.0, ES0: 0.32999999999999996, ET0: 0.314, - IRRAD: 17177000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 16.25, - TMAX: 22.0, TMIN: 10.5, VAP: 13.93, WIND: 1.72398249687371} -- {DAY: 2010-08-09, E0: 0.384, ELEV: 440.0, ES0: 0.339, ET0: 0.331, IRRAD: 16768000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, TMAX: 22.1, - TMIN: 13.2, VAP: 13.96, WIND: 1.7958151009101146} -- {DAY: 2010-08-10, E0: 0.34900000000000003, ELEV: 440.0, ES0: 0.304, ET0: 0.316, - IRRAD: 17022000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.0, - TMAX: 24.6, TMIN: 9.4, VAP: 13.59, WIND: 1.077489060546069} -- {DAY: 2010-08-11, E0: 0.35, ELEV: 440.0, ES0: 0.307, ET0: 0.3, IRRAD: 15774000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 25.0, - TMIN: 11.3, VAP: 15.41, WIND: 1.077489060546069} -- {DAY: 2010-08-12, E0: 0.311, ELEV: 440.0, ES0: 0.275, ET0: 0.262, IRRAD: 13152000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 18.55, TMAX: 22.8, - TMIN: 14.3, VAP: 17.13, WIND: 1.6521498928373055} -- {DAY: 2010-08-13, E0: 0.187, ELEV: 440.0, ES0: 0.16699999999999998, ET0: 0.16599999999999998, - IRRAD: 7020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.8, SNOWDEPTH: .nan, TEMP: 17.95, - TMAX: 20.0, TMIN: 15.9, VAP: 17.3, WIND: 1.221154268618878} -- {DAY: 2010-08-14, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.24500000000000002, - IRRAD: 12078000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, - TMAX: 20.7, TMIN: 14.6, VAP: 16.32, WIND: 2.298643329164947} -- {DAY: 2010-08-15, E0: 0.414, ELEV: 440.0, ES0: 0.369, ET0: 0.374, IRRAD: 15896000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 20.85, TMAX: 25.1, - TMIN: 16.6, VAP: 16.49, WIND: 2.442308537237756} -- {DAY: 2010-08-16, E0: 0.31, ELEV: 440.0, ES0: 0.277, ET0: 0.258, IRRAD: 12819000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 15.8, TMAX: 18.3, - TMIN: 13.3, VAP: 13.45, WIND: 2.5859737453105653} -- {DAY: 2010-08-17, E0: 0.127, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.132, - IRRAD: 4005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.76, SNOWDEPTH: .nan, TEMP: 13.75, - TMAX: 14.9, TMIN: 12.6, VAP: 13.49, WIND: 3.663462805856634} -- {DAY: 2010-08-18, E0: 0.154, ELEV: 440.0, ES0: 0.141, ET0: 0.155, IRRAD: 5067000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.700000000000001, - TMAX: 17.1, TMIN: 12.3, VAP: 13.89, WIND: 2.7296389533833745} -- {DAY: 2010-08-19, E0: 0.361, ELEV: 440.0, ES0: 0.319, ET0: 0.318, IRRAD: 15911000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.65, TMAX: 20.7, - TMIN: 12.6, VAP: 12.71, WIND: 2.154978121092138} -- {DAY: 2010-08-20, E0: 0.391, ELEV: 440.0, ES0: 0.33199999999999996, ET0: 0.361, - IRRAD: 22793000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.5, - TMAX: 25.3, TMIN: 7.7, VAP: 13.12, WIND: 0.861991248436855} -- {DAY: 2010-08-21, E0: 0.426, ELEV: 440.0, ES0: 0.364, ET0: 0.39, IRRAD: 22795000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.25, TMAX: 27.3, - TMIN: 11.2, VAP: 15.58, WIND: 1.0056564565096642} -- {DAY: 2010-08-22, E0: 0.437, ELEV: 440.0, ES0: 0.376, ET0: 0.39, IRRAD: 21331000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.1, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 29.1, - TMIN: 13.2, VAP: 17.94, WIND: 1.077489060546069} -- {DAY: 2010-08-23, E0: 0.262, ELEV: 440.0, ES0: 0.231, ET0: 0.24300000000000002, - IRRAD: 11294000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.11000000000000001, SNOWDEPTH: .nan, - TEMP: 19.6, TMAX: 24.1, TMIN: 15.1, VAP: 18.71, WIND: 1.939480308982924} -- {DAY: 2010-08-24, E0: 0.31, ELEV: 440.0, ES0: 0.282, ET0: 0.27799999999999997, IRRAD: 10039000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 20.0, TMAX: 22.2, - TMIN: 17.8, VAP: 16.79, WIND: 2.65780634934697} -- {DAY: 2010-08-25, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.29, ET0: 0.294, IRRAD: 16736000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.75, TMAX: 19.2, - TMIN: 10.3, VAP: 11.97, WIND: 2.298643329164947} -- {DAY: 2010-08-26, E0: 0.315, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.29300000000000004, - IRRAD: 13589000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 18.45, - TMAX: 26.0, TMIN: 10.9, VAP: 16.35, WIND: 1.939480308982924} -- {DAY: 2010-08-27, E0: 0.256, ELEV: 440.0, ES0: 0.229, ET0: 0.22599999999999998, - IRRAD: 10050000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.36, SNOWDEPTH: .nan, TEMP: 18.0, - TMAX: 21.1, TMIN: 14.9, VAP: 17.53, WIND: 3.663462805856634} -- {DAY: 2010-08-28, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.223, ET0: 0.22000000000000003, - IRRAD: 10561000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.0, - TMAX: 15.6, TMIN: 12.4, VAP: 11.9, WIND: 2.65780634934697} -- {DAY: 2010-08-29, E0: 0.252, ELEV: 440.0, ES0: 0.225, ET0: 0.209, IRRAD: 11595000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 15.5, - TMIN: 8.4, VAP: 10.76, WIND: 2.7296389533833745} -- {DAY: 2010-08-30, E0: 0.176, ELEV: 440.0, ES0: 0.157, ET0: 0.141, IRRAD: 8652000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.47000000000000003, SNOWDEPTH: .nan, TEMP: 9.399999999999999, - TMAX: 11.2, TMIN: 7.6, VAP: 9.95, WIND: 2.9451367654925877} -- {DAY: 2010-08-31, E0: 0.196, ELEV: 440.0, ES0: 0.174, ET0: 0.178, IRRAD: 10017000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 14.6, - TMIN: 7.6, VAP: 10.35, WIND: 2.083145517055733} -- {DAY: 2010-09-01, E0: 0.16799999999999998, ELEV: 440.0, ES0: 0.149, ET0: 0.142, - IRRAD: 8681000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 10.0, - TMAX: 14.4, TMIN: 5.6, VAP: 10.66, WIND: 1.72398249687371} -- {DAY: 2010-09-02, E0: 0.175, ELEV: 440.0, ES0: 0.154, ET0: 0.147, IRRAD: 8821000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 11.65, TMAX: 15.8, - TMIN: 7.5, VAP: 11.7, WIND: 1.0056564565096642} -- {DAY: 2010-09-03, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.21400000000000002, - ET0: 0.211, IRRAD: 14382000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.35, TMAX: 17.2, TMIN: 7.5, VAP: 11.33, WIND: 1.221154268618878} -- {DAY: 2010-09-04, E0: 0.225, ELEV: 440.0, ES0: 0.20099999999999998, ET0: 0.194, - IRRAD: 9609000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 13.15, - TMAX: 16.6, TMIN: 9.7, VAP: 10.66, WIND: 1.5084846847644964} -- {DAY: 2010-09-05, E0: 0.306, ELEV: 440.0, ES0: 0.262, ET0: 0.277, IRRAD: 19211000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 16.2, - TMIN: 6.0, VAP: 9.21, WIND: 2.65780634934697} -- {DAY: 2010-09-06, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.24900000000000003, - ET0: 0.272, IRRAD: 18341000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.75, TMAX: 15.9, TMIN: 5.6, VAP: 8.77, WIND: 2.5859737453105653} -- {DAY: 2010-09-07, E0: 0.24, ELEV: 440.0, ES0: 0.21000000000000002, ET0: 0.193, IRRAD: 13266000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 9.75, TMAX: 14.3, - TMIN: 5.2, VAP: 9.88, WIND: 3.663462805856634} -- {DAY: 2010-09-08, E0: 0.22000000000000003, ELEV: 440.0, ES0: 0.196, ET0: 0.152, - IRRAD: 9667000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 12.8, - TMAX: 14.9, TMIN: 10.7, VAP: 12.91, WIND: 3.2324671816382065} -- {DAY: 2010-09-09, E0: 0.131, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.131, - IRRAD: 5725000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 13.65, - TMAX: 15.8, TMIN: 11.5, VAP: 13.18, WIND: 1.7958151009101146} -- {DAY: 2010-09-10, E0: 0.211, ELEV: 440.0, ES0: 0.184, ET0: 0.185, IRRAD: 10961000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.200000000000001, - TMAX: 18.6, TMIN: 9.8, VAP: 12.95, WIND: 1.2929868726552827} -- {DAY: 2010-09-11, E0: 0.286, ELEV: 440.0, ES0: 0.242, ET0: 0.253, IRRAD: 17976000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 21.0, - TMIN: 7.1, VAP: 11.57, WIND: 1.0056564565096642} -- {DAY: 2010-09-12, E0: 0.246, ELEV: 440.0, ES0: 0.205, ET0: 0.238, IRRAD: 16699000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, TMAX: 21.7, - TMIN: 6.2, VAP: 11.67, WIND: 0.861991248436855} -- {DAY: 2010-09-13, E0: 0.101, ELEV: 440.0, ES0: 0.088, ET0: 0.11699999999999999, - IRRAD: 5574000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.4, - TMAX: 15.9, TMIN: 8.9, VAP: 12.58, WIND: 1.221154268618878} -- {DAY: 2010-09-14, E0: 0.12, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.10300000000000001, - IRRAD: 5860000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.2, - TMAX: 13.8, TMIN: 8.6, VAP: 12.17, WIND: 2.370475933201351} -- {DAY: 2010-09-15, E0: 0.124, ELEV: 440.0, ES0: 0.11499999999999999, ET0: 0.132, - IRRAD: 3950000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 13.55, - TMAX: 15.2, TMIN: 11.9, VAP: 12.81, WIND: 2.801471557419779} -- {DAY: 2010-09-16, E0: 0.24100000000000002, ELEV: 440.0, ES0: 0.21600000000000003, - ET0: 0.22400000000000003, IRRAD: 10417000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, - SNOWDEPTH: .nan, TEMP: 13.149999999999999, TMAX: 16.4, TMIN: 9.9, VAP: 10.32, WIND: 2.5859737453105653} -- {DAY: 2010-09-17, E0: 0.195, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.192, - IRRAD: 11312000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, - TMAX: 15.9, TMIN: 5.1, VAP: 9.17, WIND: 1.939480308982924} -- {DAY: 2010-09-18, E0: 0.182, ELEV: 440.0, ES0: 0.152, ET0: 0.176, IRRAD: 14229000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.25, TMAX: 14.7, - TMIN: 1.8, VAP: 8.29, WIND: 1.221154268618878} -- {DAY: 2010-09-19, E0: 0.20099999999999998, ELEV: 440.0, ES0: 0.16899999999999998, - ET0: 0.186, IRRAD: 14777000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 8.75, TMAX: 15.2, TMIN: 2.3, VAP: 7.79, WIND: 1.077489060546069} -- {DAY: 2010-09-20, E0: 0.176, ELEV: 440.0, ES0: 0.143, ET0: 0.19, IRRAD: 14819000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 18.3, - TMIN: 1.3, VAP: 9.21, WIND: 1.0056564565096642} -- {DAY: 2010-09-21, E0: 0.21000000000000002, ELEV: 440.0, ES0: 0.16999999999999998, - ET0: 0.225, IRRAD: 17280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.399999999999999, TMAX: 20.9, TMIN: 3.9, VAP: 9.85, WIND: 0.9338238524732597} -- {DAY: 2010-09-22, E0: 0.215, ELEV: 440.0, ES0: 0.174, ET0: 0.23500000000000001, - IRRAD: 16698000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.45, - TMAX: 20.8, TMIN: 6.1, VAP: 10.93, WIND: 1.3648194766916872} -- {DAY: 2010-09-23, E0: 0.191, ELEV: 440.0, ES0: 0.155, ET0: 0.198, IRRAD: 14630000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.600000000000001, - TMAX: 20.6, TMIN: 6.6, VAP: 12.24, WIND: 1.077489060546069} -- {DAY: 2010-09-24, E0: 0.20299999999999999, ELEV: 440.0, ES0: 0.17099999999999999, - ET0: 0.207, IRRAD: 12696000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, - TEMP: 14.600000000000001, TMAX: 21.3, TMIN: 7.9, VAP: 12.91, WIND: 1.6521498928373055} -- {DAY: 2010-09-25, E0: 0.072, ELEV: 440.0, ES0: 0.064, ET0: 0.08299999999999999, - IRRAD: 3235000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 12.15, - TMAX: 13.3, TMIN: 11.0, VAP: 12.81, WIND: 1.8676477049465194} -- {DAY: 2010-09-26, E0: 0.118, ELEV: 440.0, ES0: 0.10700000000000001, ET0: 0.11100000000000002, - IRRAD: 5247000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.95, - TMAX: 10.9, TMIN: 7.0, VAP: 9.37, WIND: 2.5859737453105653} -- {DAY: 2010-09-27, E0: 0.181, ELEV: 440.0, ES0: 0.16, ET0: 0.153, IRRAD: 9271000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 8.95, TMAX: 12.4, - TMIN: 5.5, VAP: 9.07, WIND: 3.44796499374742} -- {DAY: 2010-09-28, E0: 0.063, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.057999999999999996, - IRRAD: 3652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 8.25, - TMAX: 9.1, TMIN: 7.4, VAP: 10.45, WIND: 3.0169693695289928} -- {DAY: 2010-09-29, E0: 0.153, ELEV: 440.0, ES0: 0.134, ET0: 0.127, IRRAD: 8714000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.9, TMAX: 12.1, - TMIN: 7.7, VAP: 9.61, WIND: 1.4366520807280918} -- {DAY: 2010-09-30, E0: 0.13999999999999999, ELEV: 440.0, ES0: 0.123, ET0: 0.11299999999999999, - IRRAD: 7718000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.2, - TMAX: 12.3, TMIN: 4.1, VAP: 8.46, WIND: 1.0056564565096642} -- {DAY: 2010-10-01, E0: 0.06, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.071, - IRRAD: 3340000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: .nan, TEMP: 7.55, - TMAX: 10.2, TMIN: 4.9, VAP: 9.54, WIND: 1.221154268618878} -- {DAY: 2010-10-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10200000000000001, - ET0: 0.099, IRRAD: 6112000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, - TEMP: 10.4, TMAX: 13.8, TMIN: 7.0, VAP: 11.16, WIND: 1.5803172888009012} -- {DAY: 2010-10-03, E0: 0.152, ELEV: 440.0, ES0: 0.128, ET0: 0.134, IRRAD: 10165000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 12.9, - TMIN: 9.6, VAP: 11.19, WIND: 3.304299785674611} -- {DAY: 2010-10-04, E0: 0.142, ELEV: 440.0, ES0: 0.118, ET0: 0.125, IRRAD: 10677000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, TMAX: 12.3, - TMIN: 8.7, VAP: 10.96, WIND: 3.735295409893039} -- {DAY: 2010-10-05, E0: 0.121, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.092, - IRRAD: 6490000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 13.2, TMIN: 9.4, VAP: 12.07, WIND: 2.154978121092138} -- {DAY: 2010-10-06, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.074, ET0: 0.077, - IRRAD: 3969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.0, - TMAX: 12.2, TMIN: 9.8, VAP: 12.0, WIND: 2.0113129130193284} -- {DAY: 2010-10-07, E0: 0.072, ELEV: 440.0, ES0: 0.065, ET0: 0.079, IRRAD: 3115000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.2, TMAX: 11.9, - TMIN: 10.5, VAP: 11.94, WIND: 2.370475933201351} -- {DAY: 2010-10-08, E0: 0.178, ELEV: 440.0, ES0: 0.148, ET0: 0.21400000000000002, - IRRAD: 12854000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.700000000000001, - TMAX: 16.1, TMIN: 7.3, VAP: 9.58, WIND: 3.663462805856634} -- {DAY: 2010-10-09, E0: 0.20400000000000001, ELEV: 440.0, ES0: 0.175, ET0: 0.23700000000000002, - IRRAD: 12656000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.600000000000001, - TMAX: 15.3, TMIN: 5.9, VAP: 7.55, WIND: 3.44796499374742} -- {DAY: 2010-10-10, E0: 0.16399999999999998, ELEV: 440.0, ES0: 0.135, ET0: 0.213, - IRRAD: 13447000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.85, - TMAX: 14.0, TMIN: 3.7, VAP: 6.58, WIND: 2.8733041614561836} -- {DAY: 2010-10-11, E0: 0.16, ELEV: 440.0, ES0: 0.131, ET0: 0.21200000000000002, IRRAD: 13109000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.9, TMAX: 14.5, - TMIN: 3.3, VAP: 6.85, WIND: 3.0169693695289928} -- {DAY: 2010-10-12, E0: 0.123, ELEV: 440.0, ES0: 0.096, ET0: 0.16299999999999998, - IRRAD: 13005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.449999999999999, - TMAX: 14.2, TMIN: 0.7, VAP: 7.32, WIND: 2.5141411412741608} -- {DAY: 2010-10-13, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.092, ET0: 0.134, - IRRAD: 11311000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.85, - TMAX: 12.1, TMIN: 1.6, VAP: 7.62, WIND: 2.8733041614561836} -- {DAY: 2010-10-14, E0: 0.073, ELEV: 440.0, ES0: 0.052000000000000005, ET0: 0.10700000000000001, - IRRAD: 10652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.5, - TMAX: 12.4, TMIN: -1.4, VAP: 7.05, WIND: 1.2929868726552827} -- {DAY: 2010-10-15, E0: 0.052000000000000005, ELEV: 440.0, ES0: 0.045, ET0: 0.05, - IRRAD: 3788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.43, SNOWDEPTH: .nan, TEMP: 4.2, - TMAX: 8.6, TMIN: -0.2, VAP: 8.19, WIND: 0.9338238524732597} -- {DAY: 2010-10-16, E0: 0.054000000000000006, ELEV: 440.0, ES0: 0.047, ET0: 0.057999999999999996, - IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.31, SNOWDEPTH: .nan, TEMP: 6.7, - TMAX: 7.5, TMIN: 5.9, VAP: 8.94, WIND: 1.1493216645824735} -- {DAY: 2010-10-17, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.076, ET0: 0.08399999999999999, - IRRAD: 3537000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 6.3, - TMAX: 7.5, TMIN: 5.1, VAP: 7.72, WIND: 2.442308537237756} -- {DAY: 2010-10-18, E0: 0.08499999999999999, ELEV: 440.0, ES0: 0.075, ET0: 0.074, - IRRAD: 5197000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.9, - TMAX: 7.5, TMIN: 2.3, VAP: 7.05, WIND: 1.3648194766916872} -- {DAY: 2010-10-19, E0: 0.061, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.06999999999999999, - IRRAD: 3878000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 4.95, - TMAX: 7.2, TMIN: 2.7, VAP: 7.55, WIND: 2.5859737453105653} -- {DAY: 2010-10-20, E0: 0.068, ELEV: 440.0, ES0: 0.062, ET0: 0.072, IRRAD: 3005000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.52, SNOWDEPTH: .nan, TEMP: 5.449999999999999, - TMAX: 6.6, TMIN: 4.3, VAP: 7.72, WIND: 3.0169693695289928} -- {DAY: 2010-10-21, E0: 0.099, ELEV: 440.0, ES0: 0.089, ET0: 0.10200000000000001, - IRRAD: 5320000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 3.75, - TMAX: 6.1, TMIN: 1.4, VAP: 5.87, WIND: 2.8733041614561836} -- {DAY: 2010-10-22, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.04, ET0: 0.073, IRRAD: 8983000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.1, TMAX: 6.9, - TMIN: -2.7, VAP: 5.7, WIND: 1.5084846847644964} -- {DAY: 2010-10-23, E0: 0.037, ELEV: 440.0, ES0: 0.025, ET0: 0.06, IRRAD: 6012000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.21000000000000002, SNOWDEPTH: .nan, TEMP: 3.6999999999999997, - TMAX: 9.6, TMIN: -2.2, VAP: 7.35, WIND: 1.6521498928373055} -- {DAY: 2010-10-24, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.049, ET0: 0.066, - IRRAD: 2853000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 6.35, - TMAX: 7.6, TMIN: 5.1, VAP: 8.36, WIND: 2.370475933201351} -- {DAY: 2010-10-25, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.05, ET0: 0.05600000000000001, - IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 3.8, - TMAX: 5.6, TMIN: 2.0, VAP: 6.78, WIND: 1.1493216645824735} -- {DAY: 2010-10-26, E0: 0.051000000000000004, ELEV: 440.0, ES0: 0.040999999999999995, - ET0: 0.06, IRRAD: 5809000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, - TEMP: 2.4, TMAX: 6.8, TMIN: -2.0, VAP: 6.07, WIND: 1.1493216645824735} -- {DAY: 2010-10-27, E0: 0.047, ELEV: 440.0, ES0: 0.031, ET0: 0.061, IRRAD: 9014000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.5, TMAX: 8.1, - TMIN: -3.1, VAP: 5.87, WIND: 1.1493216645824735} -- {DAY: 2010-10-28, E0: 0.071, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.08399999999999999, - IRRAD: 7497000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.3999999999999995, - TMAX: 10.6, TMIN: 0.2, VAP: 6.58, WIND: 1.4366520807280918} -- {DAY: 2010-10-29, E0: 0.032, ELEV: 440.0, ES0: 0.012, ET0: 0.087, IRRAD: 9759000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.65, TMAX: 14.4, - TMIN: -1.1, VAP: 6.78, WIND: 1.077489060546069} -- {DAY: 2010-10-30, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.018, ET0: 0.075, - IRRAD: 8668000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.8500000000000005, - TMAX: 11.9, TMIN: -0.2, VAP: 7.01, WIND: 1.3648194766916872} -- {DAY: 2010-10-31, E0: 0.046, ELEV: 440.0, ES0: 0.033, ET0: 0.06899999999999999, - IRRAD: 6399000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.6499999999999995, - TMAX: 11.6, TMIN: 1.7, VAP: 8.06, WIND: 1.72398249687371} -- {DAY: 2010-11-01, E0: 0.073, ELEV: 440.0, ES0: 0.061, ET0: 0.071, IRRAD: 5266000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 14.3, - TMIN: 5.3, VAP: 9.64, WIND: 1.077489060546069} -- {DAY: 2010-11-02, E0: 0.019, ELEV: 440.0, ES0: 0.012, ET0: 0.04, IRRAD: 3367000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 5.45, TMAX: 8.3, - TMIN: 2.6, VAP: 8.87, WIND: 1.8676477049465194} -- {DAY: 2010-11-03, E0: 0.062, ELEV: 440.0, ES0: 0.054000000000000006, ET0: 0.074, - IRRAD: 3638000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 8.4, - TMAX: 11.8, TMIN: 5.0, VAP: 9.74, WIND: 3.1606345776018023} -- {DAY: 2010-11-04, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.11000000000000001, - ET0: 0.141, IRRAD: 1972000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.9, TMAX: 15.4, TMIN: 10.4, VAP: 11.9, WIND: 4.597286658329894} -- {DAY: 2010-11-05, E0: 0.154, ELEV: 440.0, ES0: 0.144, ET0: 0.177, IRRAD: 4424000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.5, TMAX: 14.7, - TMIN: 12.3, VAP: 10.86, WIND: 4.166291034111466} -- {DAY: 2010-11-06, E0: 0.10800000000000001, ELEV: 440.0, ES0: 0.10400000000000001, - ET0: 0.146, IRRAD: 1597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, - TEMP: 11.5, TMAX: 12.3, TMIN: 10.7, VAP: 9.88, WIND: 3.519797597783825} -- {DAY: 2010-11-07, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.03, ET0: 0.056999999999999995, - IRRAD: 1958000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 8.149999999999999, - TMAX: 10.2, TMIN: 6.1, VAP: 9.68, WIND: 1.5803172888009012} -- {DAY: 2010-11-08, E0: 0.037, ELEV: 440.0, ES0: 0.033, ET0: 0.045, IRRAD: 2280000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 4.6, TMAX: 5.6, - TMIN: 3.6, VAP: 7.62, WIND: 1.5084846847644964} -- {DAY: 2010-11-09, E0: 0.032, ELEV: 440.0, ES0: 0.020999999999999998, ET0: 0.048, - IRRAD: 5597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.0, - TMAX: 8.1, TMIN: 1.9, VAP: 7.28, WIND: 1.5084846847644964} -- {DAY: 2010-11-10, E0: 0.032, ELEV: 440.0, ES0: 0.026000000000000002, ET0: 0.03, - IRRAD: 3253000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 2.6999999999999997, - TMAX: 5.8, TMIN: -0.4, VAP: 7.18, WIND: 1.221154268618878} -- {DAY: 2010-11-11, E0: 0.046, ELEV: 440.0, ES0: 0.039, ET0: 0.05500000000000001, - IRRAD: 3562000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.01, SNOWDEPTH: .nan, TEMP: 4.0, - TMAX: 6.3, TMIN: 1.7, VAP: 7.11, WIND: 3.663462805856634} -- {DAY: 2010-11-12, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.02, ET0: 0.040999999999999995, - IRRAD: 3632000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 6.8, - TMAX: 10.0, TMIN: 3.6, VAP: 9.44, WIND: 4.956449678511917} -- {DAY: 2010-11-13, E0: 0.101, ELEV: 440.0, ES0: 0.092, ET0: 0.149, IRRAD: 4082000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.6, TMAX: 16.2, - TMIN: 9.0, VAP: 11.03, WIND: 4.094458430075062} -- {DAY: 2010-11-14, E0: 0.009, ELEV: 440.0, ES0: 0.004, ET0: 0.081, IRRAD: 7485000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 16.8, - TMIN: 5.7, VAP: 9.74, WIND: 1.6521498928373055} -- {DAY: 2010-11-15, E0: 0.040999999999999995, ELEV: 440.0, ES0: 0.032, ET0: 0.06, - IRRAD: 4089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: .nan, TEMP: 8.45, - TMAX: 12.2, TMIN: 4.7, VAP: 9.71, WIND: 2.083145517055733} -- {DAY: 2010-11-16, E0: 0.02, ELEV: 440.0, ES0: 0.018, ET0: 0.047, IRRAD: 1177000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.13, SNOWDEPTH: .nan, TEMP: 5.9, TMAX: 6.0, - TMIN: 5.8, VAP: 8.53, WIND: 2.298643329164947} -- {DAY: 2010-11-17, E0: 0.013000000000000001, ELEV: 440.0, ES0: 0.011, ET0: 0.033, - IRRAD: 1433000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 4.4, - TMAX: 5.2, TMIN: 3.6, VAP: 8.03, WIND: 1.7958151009101146} -- {DAY: 2010-11-18, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.040999999999999995, - IRRAD: 1288000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 4.800000000000001, - TMAX: 4.9, TMIN: 4.7, VAP: 7.89, WIND: 1.5803172888009012} -- {DAY: 2010-11-19, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.03, - IRRAD: 1611000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 3.1500000000000004, - TMAX: 4.9, TMIN: 1.4, VAP: 7.42, WIND: 1.0056564565096642} -- {DAY: 2010-11-20, E0: 0.024, ELEV: 440.0, ES0: 0.019, ET0: 0.03, IRRAD: 2629000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.95, TMAX: 4.3, - TMIN: 1.6, VAP: 6.88, WIND: 1.5084846847644964} -- {DAY: 2010-11-21, E0: 0.025, ELEV: 440.0, ES0: 0.02, ET0: 0.022, IRRAD: 2790000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 2.75, TMAX: 4.2, - TMIN: 1.3, VAP: 7.18, WIND: 3.376132389711016} -- {DAY: 2010-11-22, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.052000000000000005, - ET0: 0.056999999999999995, IRRAD: 1810000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, - SNOWDEPTH: .nan, TEMP: 5.4, TMAX: 7.0, TMIN: 3.8, VAP: 7.79, WIND: 2.8733041614561836} -- {DAY: 2010-11-23, E0: 0.033, ELEV: 440.0, ES0: 0.031, ET0: 0.036, IRRAD: 1270000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.18, SNOWDEPTH: 0.5, TEMP: 0.8500000000000001, - TMAX: 1.3, TMIN: 0.4, VAP: 6.0, WIND: 3.735295409893039} -- {DAY: 2010-11-24, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.032, ET0: 0.034, - IRRAD: 1628000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.12, SNOWDEPTH: 4.0, TEMP: 1.2, - TMAX: 1.9, TMIN: 0.5, VAP: 6.14, WIND: 3.878960617965848} -- {DAY: 2010-11-25, E0: 0.022, ELEV: 440.0, ES0: 0.016, ET0: 0.03, IRRAD: 3374000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 1.0, TEMP: 0.7499999999999999, - TMAX: 2.3, TMIN: -0.8, VAP: 5.66, WIND: 1.8676477049465194} -- {DAY: 2010-11-26, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.024, - IRRAD: 1677000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 2.0, TEMP: -1.3, - TMAX: -0.2, TMIN: -2.4, VAP: 5.23, WIND: 1.221154268618878} -- {DAY: 2010-11-27, E0: 0.024, ELEV: 440.0, ES0: 0.018, ET0: 0.026000000000000002, - IRRAD: 3588000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 2.0, TEMP: -2.0, - TMAX: -0.4, TMIN: -3.6, VAP: 4.28, WIND: 1.221154268618878} -- {DAY: 2010-11-28, E0: 0.024, ELEV: 440.0, ES0: 0.02, ET0: 0.013000000000000001, - IRRAD: 3194000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 2.0, TEMP: -3.85, - TMAX: -1.5, TMIN: -6.2, VAP: 4.35, WIND: 2.370475933201351} -- {DAY: 2010-11-29, E0: 0.028000000000000004, ELEV: 440.0, ES0: 0.024, ET0: 0.019, - IRRAD: 2553000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 16.0, TEMP: -1.95, - TMAX: -1.0, TMIN: -2.9, VAP: 4.96, WIND: 1.5803172888009012} -- {DAY: 2010-11-30, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.024, ET0: 0.03, - IRRAD: 2146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 19.0, TEMP: -3.8000000000000003, - TMAX: -3.2, TMIN: -4.4, VAP: 3.98, WIND: 2.370475933201351} -- {DAY: 2010-12-01, E0: 0.03, ELEV: 440.0, ES0: 0.028000000000000004, ET0: 0.036, - IRRAD: 1406000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 20.0, TEMP: -6.0, - TMAX: -4.8, TMIN: -7.2, VAP: 3.37, WIND: 4.453621450257085} -- {DAY: 2010-12-02, E0: 0.023, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, - IRRAD: 3010000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -7.95, - TMAX: -5.5, TMIN: -10.4, VAP: 2.87, WIND: 1.939480308982924} -- {DAY: 2010-12-03, E0: 0.019, ELEV: 440.0, ES0: 0.015, ET0: 0.015, IRRAD: 2926000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.100000000000001, - TMAX: -5.4, TMIN: -10.8, VAP: 2.83, WIND: 0.7901586444004506} -- {DAY: 2010-12-04, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.015, - IRRAD: 1788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.6, - TMAX: -5.1, TMIN: -12.1, VAP: 3.14, WIND: 2.0113129130193284} -- {DAY: 2010-12-05, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.01, - IRRAD: 2315000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: 18.0, TEMP: -7.35, - TMAX: -3.7, TMIN: -11.0, VAP: 3.61, WIND: 1.939480308982924} -- {DAY: 2010-12-06, E0: 0.008, ELEV: 440.0, ES0: 0.006, ET0: 0.017, IRRAD: 1609000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.0, SNOWDEPTH: 23.0, TEMP: -1.9999999999999998, - TMAX: 0.1, TMIN: -4.1, VAP: 5.26, WIND: 1.1493216645824735} -- {DAY: 2010-12-07, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.019, IRRAD: 1671000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 25.0, TEMP: 0.0, TMAX: 1.5, - TMIN: -1.5, VAP: 5.93, WIND: 1.0056564565096642} -- {DAY: 2010-12-08, E0: 0.02, ELEV: 440.0, ES0: 0.016, ET0: 0.022, IRRAD: 1933000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 21.0, TEMP: 2.6500000000000004, - TMAX: 4.9, TMIN: 0.4, VAP: 7.11, WIND: 1.5803172888009012} -- {DAY: 2010-12-09, E0: 0.020999999999999998, ELEV: 440.0, ES0: 0.018, ET0: 0.024, - IRRAD: 1529000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: 14.0, TEMP: -2.0, - TMAX: -1.2, TMIN: -2.8, VAP: 4.92, WIND: 4.597286658329894} -- {DAY: 2010-12-10, E0: 0.018, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.028999999999999998, - IRRAD: 3723000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: 14.0, - TEMP: -2.45, TMAX: -2.0, TMIN: -2.9, VAP: 4.28, WIND: 3.0888019735653973} -- {DAY: 2010-12-11, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, - IRRAD: 1355000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: 16.0, TEMP: -0.30000000000000004, - TMAX: 2.3, TMIN: -2.9, VAP: 6.07, WIND: 4.453621450257085} -- {DAY: 2010-12-12, E0: 0.039, ELEV: 440.0, ES0: 0.036, ET0: 0.043, IRRAD: 1668000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.24, SNOWDEPTH: 9.0, TEMP: 1.0499999999999998, - TMAX: 1.4, TMIN: 0.7, VAP: 5.8, WIND: 3.807128013929443} -- {DAY: 2010-12-13, E0: 0.006, ELEV: 440.0, ES0: 0.003, ET0: 0.022, IRRAD: 4070000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 9.0, TEMP: -5.9, TMAX: -5.6, - TMIN: -6.2, VAP: 3.17, WIND: 2.5141411412741608} -- {DAY: 2010-12-14, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.008, - IRRAD: 2280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: 9.0, TEMP: -8.25, - TMAX: -5.4, TMIN: -11.1, VAP: 3.27, WIND: 2.083145517055733} -- {DAY: 2010-12-15, E0: 0.022, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, - IRRAD: 1877000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 9.0, TEMP: -6.65, - TMAX: -6.3, TMIN: -7.0, VAP: 3.34, WIND: 2.801471557419779} -- {DAY: 2010-12-16, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.01, IRRAD: 3137000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 11.0, TEMP: -9.1, - TMAX: -6.2, TMIN: -12.0, VAP: 2.8, WIND: 2.154978121092138} -- {DAY: 2010-12-17, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.016, IRRAD: 1541000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 13.0, TEMP: -7.25, TMAX: -4.9, - TMIN: -9.6, VAP: 3.41, WIND: 1.939480308982924} -- {DAY: 2010-12-18, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, - IRRAD: 3633000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -7.3, - TMAX: -4.1, TMIN: -10.5, VAP: 3.03, WIND: 1.5084846847644964} -- {DAY: 2010-12-19, E0: 0.006, ELEV: 440.0, ES0: 0.004, ET0: 0.009, IRRAD: 1737000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.29, SNOWDEPTH: 13.0, TEMP: -6.75, TMAX: -0.6, - TMIN: -12.9, VAP: 4.01, WIND: 2.154978121092138} -- {DAY: 2010-12-20, E0: 0.036, ELEV: 440.0, ES0: 0.033, ET0: 0.048, IRRAD: 1538000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.41, SNOWDEPTH: 13.0, TEMP: 0.7, TMAX: 2.9, - TMIN: -1.5, VAP: 5.4, WIND: 2.65780634934697} -- {DAY: 2010-12-21, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.018, - IRRAD: 2103000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 13.0, TEMP: -0.19999999999999996, - TMAX: 3.5, TMIN: -3.9, VAP: 5.8, WIND: 1.2929868726552827} -- {DAY: 2010-12-22, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.014000000000000002, - IRRAD: 2105000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -0.44999999999999996, - TMAX: 1.5, TMIN: -2.4, VAP: 5.66, WIND: 1.221154268618878} -- {DAY: 2010-12-23, E0: 0.019, ELEV: 440.0, ES0: 0.016, ET0: 0.014000000000000002, - IRRAD: 2239000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 12.0, TEMP: -0.5, - TMAX: 2.1, TMIN: -3.1, VAP: 5.66, WIND: 1.2929868726552827} -- {DAY: 2010-12-24, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.028999999999999998, - IRRAD: 1140000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: 13.0, TEMP: 0.3, - TMAX: 1.5, TMIN: -0.9, VAP: 5.8, WIND: 2.442308537237756} -- {DAY: 2010-12-25, E0: 0.034, ELEV: 440.0, ES0: 0.032, ET0: 0.031, IRRAD: 2108000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 16.0, TEMP: -4.65, TMAX: -4.5, - TMIN: -4.8, VAP: 3.57, WIND: 2.298643329164947} -- {DAY: 2010-12-26, E0: 0.012, ELEV: 440.0, ES0: 0.009, ET0: 0.012, IRRAD: 2899000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: 16.0, TEMP: -9.95, TMAX: -7.9, - TMIN: -12.0, VAP: 2.6, WIND: 1.6521498928373055} -- {DAY: 2010-12-27, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.017, IRRAD: 1694000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: 16.0, TEMP: -6.5, TMAX: -4.2, - TMIN: -8.8, VAP: 3.54, WIND: 1.72398249687371} -- {DAY: 2010-12-28, E0: 0.016, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.023, - IRRAD: 3146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 16.0, TEMP: -4.65, - TMAX: -2.7, TMIN: -6.6, VAP: 3.41, WIND: 1.4366520807280918} -- {DAY: 2010-12-29, E0: 0.004, ELEV: 440.0, ES0: 0.004, ET0: 0.006, IRRAD: 3716000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 15.0, TEMP: -11.35, TMAX: -8.7, - TMIN: -14.0, VAP: 2.09, WIND: 0.6464934363276413} -- {DAY: 2010-12-30, E0: 0.0, ELEV: 440.0, ES0: 0.0, ET0: 0.0, IRRAD: 5266000.0, LAT: 49.43613, - LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -13.5, TMAX: -8.4, TMIN: -18.6, - VAP: 1.89, WIND: 0.6464934363276413} -- {DAY: 2010-12-31, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.002, - IRRAD: 1689000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 22.0, TEMP: -9.15, - TMAX: -3.4, TMIN: -14.9, VAP: 3.91, WIND: 1.72398249687371} diff --git a/src/diffwofost/physical_models/crop/leaf_dynamics.py b/src/diffwofost/physical_models/crop/leaf_dynamics.py index 4aa795a..0ed74e3 100644 --- a/src/diffwofost/physical_models/crop/leaf_dynamics.py +++ b/src/diffwofost/physical_models/crop/leaf_dynamics.py @@ -339,8 +339,16 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # death due to self shading cause by high LAI DVS = self.kiosk["DVS"] - LAICR = 3.2 / p.KDIFTB(DVS) - r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) + LAICR = torch.tensor(3.2, dtype=self.dtype, device=self.device) / p.KDIFTB(DVS) + r.DSLV2 = ( + dvs_mask + * s.WLV + * torch.clamp( + torch.tensor(0.03, dtype=self.dtype, device=self.device) * (s.LAI - LAICR) / LAICR, + torch.tensor(0.0, dtype=self.dtype, device=self.device), + torch.tensor(0.03, dtype=self.dtype, device=self.device), + ) + ) # Death of leaves due to frost damage as determined by # Reduction Factor Frost "RF_FROST" @@ -360,7 +368,9 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # in DALV. # Note that the actual leaf death is imposed on the array LV during the # state integration step. - tSPAN = _broadcast_to(p.SPAN, s.LVAGE.shape) # Broadcast to same shape + tSPAN = _broadcast_to( + p.SPAN, s.LVAGE.shape, dtype=self.dtype, device=self.device + ) # Broadcast to same shape # Using a sigmoid here instead of a conditional statement on the value of # SPAN because the latter would not allow for the gradient to be tracked. @@ -374,7 +384,7 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is # equal to zero and mask should be 0.0 - epsilon = 1e-14 + epsilon = torch.tensor(1e-14, dtype=self.dtype, device=self.device) span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=self.dtype) else: span_mask = (s.LVAGE > tSPAN).to(dtype=self.dtype) @@ -389,16 +399,18 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: TEMP = _get_drv(drv.TEMP, self.params_shape) # physiologic ageing of leaves per time step - TBASE = _broadcast_to(p.TBASE, self.params_shape) - FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) - r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) + TBASE = _broadcast_to(p.TBASE, self.params_shape, dtype=self.dtype, device=self.device) + FYSAGE = (TEMP - TBASE) / (torch.tensor(35.0, dtype=self.dtype, device=self.device) - TBASE) + r.FYSAGE = dvs_mask * torch.clamp( + FYSAGE, torch.tensor(0.0, dtype=self.dtype, device=self.device) + ) # specific leaf area of leaves per time step r.SLAT = dvs_mask * p.SLATB(DVS) # leaf area not to exceed exponential growth curve - is_lai_exp = s.LAIEXP < 6.0 - DTEFF = torch.clamp(TEMP - TBASE, 0.0) + is_lai_exp = s.LAIEXP < torch.tensor(6.0, dtype=self.dtype, device=self.device) + DTEFF = torch.clamp(TEMP - TBASE, torch.tensor(0.0, dtype=self.dtype, device=self.device)) # NOTE: conditional statements do not allow for the gradient to be # tracked through the condition. Thus, the gradient with respect to @@ -421,7 +433,9 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: GLA = torch.minimum(r.GLAIEX, r.GLASOL) # adjustment of specific leaf area of youngest leaf class - epsilon = 1e-10 # small value to avoid division by zero + epsilon = torch.tensor( + 1e-10, dtype=self.dtype, device=self.device + ) # small value to avoid division by zero r.SLAT = torch.where( dvs_mask.bool(), torch.where(is_lai_exp & (r.GRLV > epsilon), GLA / (r.GRLV + epsilon), r.SLAT), @@ -444,7 +458,7 @@ def integrate(self, day: datetime.date, delt=1.0) -> None: tLV = states.LV.clone() tSLA = states.SLA.clone() tLVAGE = states.LVAGE.clone() - tDRLV = _broadcast_to(rates.DRLV, tLV.shape) + tDRLV = _broadcast_to(rates.DRLV, tLV.shape, dtype=self.dtype, device=self.device) # Leaf death is imposed on leaves from the oldest ones. # Calculate the cumulative sum of weights after leaf death, and @@ -455,7 +469,9 @@ def integrate(self, day: datetime.date, delt=1.0) -> None: # Adjust value of oldest leaf class, i.e. the first non-zero # weight along the time axis (the last dimension). # Cast argument to int because torch.argmax requires it to be numeric - idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True) + idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True).to( + device=self.device + ) new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) @@ -464,16 +480,18 @@ def integrate(self, day: datetime.date, delt=1.0) -> None: # NOTE: conditional statements do not allow for the gradient to be # tracked through the condition. Thus, the gradient with respect to # parameters that contribute to `is_alive` are expected to be incorrect. - tLV = torch.where(is_alive, tLV, 0.0) + tLV = torch.where(is_alive, tLV, torch.tensor(0.0, dtype=self.dtype, device=self.device)) tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) - tLVAGE = torch.where(is_alive, tLVAGE, 0.0) - tSLA = torch.where(is_alive, tSLA, 0.0) + tLVAGE = torch.where( + is_alive, tLVAGE, torch.tensor(0.0, dtype=self.dtype, device=self.device) + ) + tSLA = torch.where(is_alive, tSLA, torch.tensor(0.0, dtype=self.dtype, device=self.device)) # --------- leave growth --------- idx = int((day - self.START_DATE).days / delt) tLV[..., idx] = rates.GRLV tSLA[..., idx] = rates.SLAT - tLVAGE[..., idx] = 0.0 + tLVAGE[..., idx] = torch.tensor(0.0, dtype=self.dtype, device=self.device) # calculation of new leaf area states.LASUM = torch.sum(tLV * tSLA, dim=-1) diff --git a/src/diffwofost/physical_models/crop/phenology.py b/src/diffwofost/physical_models/crop/phenology.py index db7fb2c..262f0aa 100644 --- a/src/diffwofost/physical_models/crop/phenology.py +++ b/src/diffwofost/physical_models/crop/phenology.py @@ -94,31 +94,71 @@ class Vernalisation(SimulationObject): params_shape = None # Shape of the parameters tensors + # Default values that can be overridden before instantiation + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + dtype = torch.float64 + class Parameters(ParamTemplate): - VERNSAT = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Saturated vernalisation requirements - VERNBASE = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Base vernalisation requirements - VERNRTB = AfgenTrait() # Vernalisation temperature response - VERNDVS = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Critical DVS for vernalisation fulfillment + VERNSAT = Any() + VERNBASE = Any() + VERNRTB = AfgenTrait() + VERNDVS = Any() + + def __init__(self, parvalues, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = Vernalisation.dtype + if device is None: + device = Vernalisation.device + + # Set default values using the provided dtype and device + self.VERNSAT = torch.tensor(-99.0, dtype=dtype, device=device) + self.VERNBASE = torch.tensor(-99.0, dtype=dtype, device=device) + self.VERNDVS = torch.tensor(-99.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(parvalues) class RateVariables(RatesTemplate): - VERNR = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) # Rate of vernalisation - VERNFAC = Any( - default_value=torch.tensor(0.0, dtype=DTYPE) - ) # Red. factor for phenol. devel. + VERNR = Any() + VERNFAC = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = Vernalisation.dtype + if device is None: + device = Vernalisation.device + + # Set default values using the provided dtype and device + self.VERNR = torch.tensor(0.0, dtype=dtype, device=device) + self.VERNFAC = torch.tensor(0.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish) class StateVariables(StatesTemplate): - VERN = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Vernalisation state - DOV = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Day ordinal when vernalisation fulfilled - ISVERNALISED = Any(default_value=torch.tensor(False)) # True when VERNSAT is reached and - # Forced when DVS > VERNDVS + VERN = Any() + DOV = Any() + ISVERNALISED = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = Vernalisation.dtype + if device is None: + device = Vernalisation.device + + # Set default values using the provided dtype and device if not in kwargs + if "VERN" not in kwargs: + self.VERN = torch.tensor(-99.0, dtype=dtype, device=device) + if "DOV" not in kwargs: + self.DOV = torch.tensor(-99.0, dtype=dtype, device=device) + if "ISVERNALISED" not in kwargs: + self.ISVERNALISED = torch.tensor(False, dtype=torch.bool, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish, **kwargs) def initialize(self, day, kiosk, parvalues, dvs_shape=None): """Initialize the Vernalisation sub-module. @@ -152,25 +192,39 @@ def initialize(self, day, kiosk, parvalues, dvs_shape=None): ) # Explicitly initialize rates self.rates = self.RateVariables(kiosk, publish=["VERNFAC"]) - self.rates.VERNR = _broadcast_to(self.rates.VERNR, self.params_shape) - self.rates.VERNFAC = _broadcast_to(self.rates.VERNFAC, self.params_shape) + self.rates.VERNR = _broadcast_to( + self.rates.VERNR, self.params_shape, dtype=self.dtype, device=self.device + ) + self.rates.VERNFAC = _broadcast_to( + self.rates.VERNFAC, self.params_shape, dtype=self.dtype, device=self.device + ) self.kiosk = kiosk # Explicitly broadcast all parameters to params_shape - self.params.VERNSAT = _broadcast_to(self.params.VERNSAT, self.params_shape) - self.params.VERNBASE = _broadcast_to(self.params.VERNBASE, self.params_shape) - self.params.VERNDVS = _broadcast_to(self.params.VERNDVS, self.params_shape) + self.params.VERNSAT = _broadcast_to( + self.params.VERNSAT, self.params_shape, dtype=self.dtype, device=self.device + ) + self.params.VERNBASE = _broadcast_to( + self.params.VERNBASE, self.params_shape, dtype=self.dtype, device=self.device + ) + self.params.VERNDVS = _broadcast_to( + self.params.VERNDVS, self.params_shape, dtype=self.dtype, device=self.device + ) # Define initial states self.states = self.StateVariables( kiosk, - VERN=torch.zeros(self.params_shape, dtype=DTYPE), - DOV=torch.full(self.params_shape, -1.0, dtype=DTYPE), # -1 indicates not yet fulfilled - ISVERNALISED=torch.zeros(self.params_shape, dtype=torch.bool), + VERN=torch.zeros(self.params_shape, dtype=self.dtype, device=self.device), + DOV=torch.full( + self.params_shape, -1.0, dtype=self.dtype, device=self.device + ), # -1 indicates not yet fulfilled + ISVERNALISED=torch.zeros(self.params_shape, dtype=torch.bool, device=self.device), publish=["ISVERNALISED"], ) # Per-element force flag (False for all elements initially) - self._force_vernalisation = torch.zeros(self.params_shape, dtype=torch.bool) + self._force_vernalisation = torch.zeros( + self.params_shape, dtype=torch.bool, device=self.device + ) @prepare_rates def calc_rates(self, day, drv): @@ -254,7 +308,9 @@ def integrate(self, day, delt=1.0): if torch.any(newly_reached_and_no_dov): states.DOV = torch.where( newly_reached_and_no_dov, - torch.full(self.params_shape, day.toordinal(), dtype=DTYPE), + torch.full( + self.params_shape, day.toordinal(), dtype=self.dtype, device=self.device + ), states.DOV, ) self.logger.info(f"Vernalization requirements reached at day {day}.") @@ -357,55 +413,107 @@ class DVS_Phenology(SimulationObject): params_shape = None # Shape of the parameters tensors + # Default values that can be overridden before instantiation + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + dtype = torch.float64 + class Parameters(ParamTemplate): - TSUMEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Temp. sum for emergence - TBASEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Base temp. for emergence - TEFFMX = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Max eff temperature for emergence - TSUM1 = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Temperature sum emergence to anthesis - TSUM2 = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Temperature sum anthesis to maturity - IDSL = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Switch for photoperiod (1) and vernalisation (2) - DLO = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Optimal day length for phenol. development - DLC = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Critical day length for phenol. development - DVSI = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Initial development stage - DVSEND = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Final development stage - DTSMTB = AfgenTrait() # Temperature response function for phenol. - # development. + TSUMEM = Any() + TBASEM = Any() + TEFFMX = Any() + TSUM1 = Any() + TSUM2 = Any() + IDSL = Any() + DLO = Any() + DLC = Any() + DVSI = Any() + DVSEND = Any() + DTSMTB = AfgenTrait() CROP_START_TYPE = Enum(["sowing", "emergence"]) CROP_END_TYPE = Enum(["maturity", "harvest", "earliest"]) + def __init__(self, parvalues, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = DVS_Phenology.dtype + if device is None: + device = DVS_Phenology.device + + # Set default values using the provided dtype and device + self.TSUMEM = torch.tensor(-99.0, dtype=dtype, device=device) + self.TBASEM = torch.tensor(-99.0, dtype=dtype, device=device) + self.TEFFMX = torch.tensor(-99.0, dtype=dtype, device=device) + self.TSUM1 = torch.tensor(-99.0, dtype=dtype, device=device) + self.TSUM2 = torch.tensor(-99.0, dtype=dtype, device=device) + self.IDSL = torch.tensor(-99.0, dtype=dtype, device=device) + self.DLO = torch.tensor(-99.0, dtype=dtype, device=device) + self.DLC = torch.tensor(-99.0, dtype=dtype, device=device) + self.DVSI = torch.tensor(-99.0, dtype=dtype, device=device) + self.DVSEND = torch.tensor(-99.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(parvalues) + class RateVariables(RatesTemplate): - DTSUME = Any( - default_value=torch.tensor(0.0, dtype=DTYPE) - ) # increase in temperature sum for emergence - DTSUM = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) # increase in temperature sum - DVR = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) # development rate + DTSUME = Any() + DTSUM = Any() + DVR = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = DVS_Phenology.dtype + if device is None: + device = DVS_Phenology.device + + # Set default values using the provided dtype and device + self.DTSUME = torch.tensor(0.0, dtype=dtype, device=device) + self.DTSUM = torch.tensor(0.0, dtype=dtype, device=device) + self.DVR = torch.tensor(0.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish) class StateVariables(StatesTemplate): - DVS = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Development stage - TSUM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Temperature sum state - TSUME = Any( - default_value=torch.tensor(-99.0, dtype=DTYPE) - ) # Temperature sum for emergence state - # States which register phenological events as day ordinals (tensor of floats) - DOS = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Day of sowing (ordinal) - DOE = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Day of emergence (ordinal) - DOA = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Day of anthesis (ordinal) - DOM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Day of maturity (ordinal) - DOH = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) # Day of harvest (ordinal) - # STAGE as integer tensor: 0=emerging, 1=vegetative, 2=reproductive, 3=mature - STAGE = Any(default_value=torch.tensor(-99, dtype=torch.long)) + DVS = Any() + TSUM = Any() + TSUME = Any() + DOS = Any() + DOE = Any() + DOA = Any() + DOM = Any() + DOH = Any() + STAGE = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = DVS_Phenology.dtype + if device is None: + device = DVS_Phenology.device + + # Set default values using the provided dtype and device if not in kwargs + if "DVS" not in kwargs: + self.DVS = torch.tensor(-99.0, dtype=dtype, device=device) + if "TSUM" not in kwargs: + self.TSUM = torch.tensor(-99.0, dtype=dtype, device=device) + if "TSUME" not in kwargs: + self.TSUME = torch.tensor(-99.0, dtype=dtype, device=device) + if "DOS" not in kwargs: + self.DOS = torch.tensor(-99.0, dtype=dtype, device=device) + if "DOE" not in kwargs: + self.DOE = torch.tensor(-99.0, dtype=dtype, device=device) + if "DOA" not in kwargs: + self.DOA = torch.tensor(-99.0, dtype=dtype, device=device) + if "DOM" not in kwargs: + self.DOM = torch.tensor(-99.0, dtype=dtype, device=device) + if "DOH" not in kwargs: + self.DOH = torch.tensor(-99.0, dtype=dtype, device=device) + if "STAGE" not in kwargs: + self.STAGE = torch.tensor(-99, dtype=torch.long, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish, **kwargs) def initialize(self, day, kiosk, parvalues): """:param day: start date of the simulation @@ -419,7 +527,9 @@ def initialize(self, day, kiosk, parvalues): # Initialize vernalisation for IDSL>=2 # It has to be done in advance to get the correct params_shape - IDSL = _broadcast_to(self.params.IDSL, self.params_shape) + IDSL = _broadcast_to( + self.params.IDSL, self.params_shape, dtype=self.dtype, device=self.device + ) if torch.any(IDSL >= 2): if self.params_shape != (): self.vernalisation = Vernalisation( @@ -440,19 +550,23 @@ def initialize(self, day, kiosk, parvalues): # Define initial states DVS, DOS, DOE, STAGE = self._get_initial_stage(day) - DVS = _broadcast_to(DVS, self.params_shape) + DVS = _broadcast_to(DVS, self.params_shape, dtype=self.dtype, device=self.device) # Initialize all date tensors with -1 (not yet occurred) - DOS = _broadcast_to(DOS, self.params_shape) - DOE = _broadcast_to(DOE, self.params_shape) - DOA = torch.full(self.params_shape, -1.0, dtype=DTYPE) - DOM = torch.full(self.params_shape, -1.0, dtype=DTYPE) - DOH = torch.full(self.params_shape, -1.0, dtype=DTYPE) - STAGE = _broadcast_to(STAGE, self.params_shape) + DOS = _broadcast_to(DOS, self.params_shape, dtype=self.dtype, device=self.device) + DOE = _broadcast_to(DOE, self.params_shape, dtype=self.dtype, device=self.device) + DOA = torch.full(self.params_shape, -1.0, dtype=self.dtype, device=self.device) + DOM = torch.full(self.params_shape, -1.0, dtype=self.dtype, device=self.device) + DOH = torch.full(self.params_shape, -1.0, dtype=self.dtype, device=self.device) + STAGE = _broadcast_to(STAGE, self.params_shape, dtype=self.dtype, device=self.device) # Also ensure TSUM and TSUME are properly shaped - TSUM = torch.zeros(self.params_shape, dtype=DTYPE, requires_grad=True) - TSUME = torch.zeros(self.params_shape, dtype=DTYPE, requires_grad=True) + TSUM = torch.zeros( + self.params_shape, dtype=self.dtype, device=self.device, requires_grad=True + ) + TSUME = torch.zeros( + self.params_shape, dtype=self.dtype, device=self.device, requires_grad=True + ) self.states = self.StateVariables( kiosk, @@ -541,30 +655,34 @@ def calc_rates(self, day, drv): # Day length sensitivity DAYLP = daylength(day, drv.LAT) - DAYLP_t = _broadcast_to(DAYLP, shape) + DAYLP_t = _broadcast_to(DAYLP, shape, dtype=self.dtype, device=self.device) # Compute DVRED conditionally based on IDSL >= 1 safe_den = p.DLO - p.DLC safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), EPS) dvred_active = torch.clamp((DAYLP_t - p.DLC) / safe_den, 0.0, 1.0) - DVRED = torch.where(p.IDSL >= 1, dvred_active, torch.ones(shape, dtype=DTYPE)) + DVRED = torch.where( + p.IDSL >= 1, dvred_active, torch.ones(shape, dtype=self.dtype, device=self.device) + ) # Vernalisation factor - always compute if module exists - VERNFAC = torch.ones(shape, dtype=DTYPE) + VERNFAC = torch.ones(shape, dtype=self.dtype, device=self.device) if hasattr(self, "vernalisation") and self.vernalisation is not None: # Always call calc_rates (it handles stage internally now) self.vernalisation.calc_rates(day, drv) # Apply vernalisation only where IDSL >= 2 AND in vegetative stage is_vegetative = s.STAGE == 1 VERNFAC = torch.where( - (p.IDSL >= 2) & is_vegetative, self.kiosk["VERNFAC"], torch.ones(shape, dtype=DTYPE) + (p.IDSL >= 2) & is_vegetative, + self.kiosk["VERNFAC"], + torch.ones(shape, dtype=self.dtype, device=self.device), ) TEMP = _get_drv(drv.TEMP, shape) # Initialize all rate variables - r.DTSUME = torch.zeros(shape, dtype=DTYPE) - r.DTSUM = torch.zeros(shape, dtype=DTYPE) - r.DVR = torch.zeros(shape, dtype=DTYPE) + r.DTSUME = torch.zeros(shape, dtype=self.dtype, device=self.device) + r.DTSUM = torch.zeros(shape, dtype=self.dtype, device=self.device) + r.DVR = torch.zeros(shape, dtype=self.dtype, device=self.device) # Compute rates for emerging stage (STAGE == 0) is_emerging = s.STAGE == 0 @@ -673,13 +791,19 @@ def integrate(self, day, delt=1.0): s.DVS = s.DVS + r.DVR s.TSUM = s.TSUM + r.DTSUM - day_ordinal = torch.tensor(day.toordinal(), dtype=DTYPE) + day_ordinal = torch.tensor(day.toordinal(), dtype=self.dtype, device=self.device) # Check transitions for emerging -> vegetative (STAGE 0 -> 1) is_emerging = s.STAGE == 0 should_emerge = is_emerging & (s.DVS >= 0.0) - s.STAGE = torch.where(should_emerge, torch.ones(shape, dtype=torch.long), s.STAGE) - s.DOE = torch.where(should_emerge, torch.full(shape, day_ordinal, dtype=DTYPE), s.DOE) + s.STAGE = torch.where( + should_emerge, torch.ones(shape, dtype=torch.long, device=self.device), s.STAGE + ) + s.DOE = torch.where( + should_emerge, + torch.full(shape, day_ordinal, dtype=self.dtype, device=self.device), + s.DOE, + ) s.DVS = torch.where(should_emerge, torch.clamp(s.DVS, max=0.0), s.DVS) # Send signal if any crop emerged (only once per day) @@ -689,15 +813,27 @@ def integrate(self, day, delt=1.0): # Check transitions for vegetative -> reproductive (STAGE 1 -> 2) is_vegetative = s.STAGE == 1 should_flower = is_vegetative & (s.DVS >= 1.0) - s.STAGE = torch.where(should_flower, torch.full(shape, 2, dtype=torch.long), s.STAGE) - s.DOA = torch.where(should_flower, torch.full(shape, day_ordinal, dtype=DTYPE), s.DOA) + s.STAGE = torch.where( + should_flower, torch.full(shape, 2, dtype=torch.long, device=self.device), s.STAGE + ) + s.DOA = torch.where( + should_flower, + torch.full(shape, day_ordinal, dtype=self.dtype, device=self.device), + s.DOA, + ) s.DVS = torch.where(should_flower, torch.clamp(s.DVS, max=1.0), s.DVS) # Check transitions for reproductive -> mature (STAGE 2 -> 3) is_reproductive = s.STAGE == 2 should_mature = is_reproductive & (s.DVS >= p.DVSEND) - s.STAGE = torch.where(should_mature, torch.full(shape, 3, dtype=torch.long), s.STAGE) - s.DOM = torch.where(should_mature, torch.full(shape, day_ordinal, dtype=DTYPE), s.DOM) + s.STAGE = torch.where( + should_mature, torch.full(shape, 3, dtype=torch.long, device=self.device), s.STAGE + ) + s.DOM = torch.where( + should_mature, + torch.full(shape, day_ordinal, dtype=self.dtype, device=self.device), + s.DOM, + ) s.DVS = torch.where(should_mature, torch.minimum(s.DVS, p.DVSEND), s.DVS) # Send crop_finish signal if maturity reached for one. @@ -730,8 +866,10 @@ def _on_CROP_FINISH(self, day, finish_type=None): """ if finish_type in ["harvest", "earliest"]: - day_ordinal = torch.tensor(day.toordinal(), dtype=DTYPE) - self._for_finalize["DOH"] = torch.full(self.params_shape, day_ordinal, dtype=DTYPE) + day_ordinal = torch.tensor(day.toordinal(), dtype=self.dtype, device=self.device) + self._for_finalize["DOH"] = torch.full( + self.params_shape, day_ordinal, dtype=self.dtype, device=self.device + ) def get_variable(self, varname): # TODO: should be removed while fixing #49. this is needed because diff --git a/src/diffwofost/physical_models/crop/root_dynamics.py b/src/diffwofost/physical_models/crop/root_dynamics.py index 7e79f73..24e6765 100644 --- a/src/diffwofost/physical_models/crop/root_dynamics.py +++ b/src/diffwofost/physical_models/crop/root_dynamics.py @@ -221,11 +221,13 @@ def initialize( # Initial root depth states rdmax = torch.max(params.RDI, torch.min(params.RDMCR, params.RDMSOL)) - RDM = _broadcast_to(rdmax, shape) - RD = _broadcast_to(params.RDI, shape) + RDM = _broadcast_to(rdmax, shape, dtype=self.dtype, device=self.device) + RD = _broadcast_to(params.RDI, shape, dtype=self.dtype, device=self.device) # Initial root biomass states - WRT = _broadcast_to(params.TDWI * self.kiosk.FR, shape) + WRT = _broadcast_to( + params.TDWI * self.kiosk.FR, shape, dtype=self.dtype, device=self.device + ) DWRT = ( torch.zeros_like(WRT) if shape diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index 48ad756..d58df80 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -31,8 +31,6 @@ from pcse.traitlets import Enum from pcse.traitlets import TraitType -DTYPE = torch.float64 # Default data type for tensors in this module - logging.disable(logging.CRITICAL) this_dir = os.path.dirname(__file__) @@ -387,9 +385,13 @@ def _check_x_ascending(self, tbl_xy): return list(range(valid_n)) - def __init__(self, tbl_xy): + def __init__(self, tbl_xy, dtype=torch.float64): # Convert to tensor if needed - tbl_xy = torch.as_tensor(tbl_xy, dtype=DTYPE) + tbl_xy = torch.as_tensor(tbl_xy, dtype=dtype) + + # Store dtype and device from the input table + self.dtype = tbl_xy.dtype + self.device = tbl_xy.device # Detect if we have batched tables (>1D) self.is_batched = tbl_xy.dim() > 1 @@ -427,7 +429,7 @@ def __init__(self, tbl_xy): if len(x_vals) > 1: slopes = (y_vals[1:] - y_vals[:-1]) / (x_vals[1:] - x_vals[:-1]) else: - slopes = torch.tensor([], dtype=DTYPE) + slopes = torch.tensor([], dtype=self.dtype, device=self.device) x_list_batch.append(x_vals) y_list_batch.append(y_vals) @@ -466,7 +468,7 @@ def __call__(self, x): Returns: torch.Tensor: The interpolated value, preserving batch dimensions. """ - x = torch.as_tensor(x, dtype=DTYPE) + x = torch.as_tensor(x, dtype=self.dtype, device=self.device) if self.is_batched: # Ensure x has compatible shape for broadcasting @@ -636,11 +638,23 @@ def _get_drv(drv_var, expected_shape): ) -def _broadcast_to(x, shape): - """Create a view of tensor X with the given shape.""" +def _broadcast_to(x, shape, dtype=None, device=None): + """Create a view of tensor X with the given shape. + + Args: + x: The tensor or value to broadcast + shape: The target shape + dtype: Optional dtype for the tensor (inferred from x if not provided) + device: Optional device for the tensor (inferred from x if not provided) + """ # If x is not a tensor, convert it if not isinstance(x, torch.Tensor): - x = torch.tensor(x, dtype=DTYPE) + x = torch.tensor(x) + # Ensure correct dtype and device + if dtype is not None: + x = x.to(dtype=dtype) + if device is not None: + x = x.to(device=device) # If already the correct shape, return as-is if x.shape == shape: return x From 6ff5f625b46656d72b7be07be11901494999bc8a Mon Sep 17 00:00:00 2001 From: SCiarella Date: Tue, 16 Dec 2025 12:20:12 +0100 Subject: [PATCH 03/17] . --- docs/notebooks/WOFOST_Leaf_Dynamics.conf | 32 + docs/notebooks/WOFOST_Root_Dynamics.conf | 32 + docs/notebooks/optimization.ipynb | 14 +- .../test_leafdynamics_wofost72_01.yaml | 1593 +++++++++++++++++ .../test_rootdynamics_wofost72_01.yaml | 1333 ++++++++++++++ new_leaf.py | 524 ++++++ old_leaf_dynamics.py | 436 +++++ .../physical_models/crop/leaf_dynamics.py | 212 +-- .../physical_models/crop/phenology.py | 27 +- src/diffwofost/physical_models/utils.py | 8 +- .../crop/test_leaf_dynamics.py | 8 +- 11 files changed, 4038 insertions(+), 181 deletions(-) create mode 100644 docs/notebooks/WOFOST_Leaf_Dynamics.conf create mode 100644 docs/notebooks/WOFOST_Root_Dynamics.conf create mode 100644 docs/notebooks/test_leafdynamics_wofost72_01.yaml create mode 100644 docs/notebooks/test_rootdynamics_wofost72_01.yaml create mode 100644 new_leaf.py create mode 100644 old_leaf_dynamics.py diff --git a/docs/notebooks/WOFOST_Leaf_Dynamics.conf b/docs/notebooks/WOFOST_Leaf_Dynamics.conf new file mode 100644 index 0000000..23b8de6 --- /dev/null +++ b/docs/notebooks/WOFOST_Leaf_Dynamics.conf @@ -0,0 +1,32 @@ + +from diffwofost.physical_models.crop.leaf_dynamics import WOFOST_Leaf_Dynamics +from pcse.agromanager import AgroManager + +# Module to be used for water balance +SOIL = None + +# Module to be used for the crop simulation itself +CROP = WOFOST_Leaf_Dynamics + +# Module to use for AgroManagement actions +AGROMANAGEMENT = AgroManager + +# variables to save at OUTPUT signals +# Set to an empty list if you do not want any OUTPUT +OUTPUT_VARS = ["LAI", "TWLV"] +# interval for OUTPUT signals, either "daily"|"dekadal"|"monthly"|"weekly" +# For daily output you change the number of days between successive +# outputs using OUTPUT_INTERVAL_DAYS. For dekadal and monthly +# output this is ignored. +OUTPUT_INTERVAL = "daily" +OUTPUT_INTERVAL_DAYS = 1 +# Weekday: Monday is 0 and Sunday is 6 +OUTPUT_WEEKDAY = 0 + +# Summary variables to save at CROP_FINISH signals +# Set to an empty list if you do not want any SUMMARY_OUTPUT +SUMMARY_OUTPUT_VARS = [] + +# Summary variables to save at TERMINATE signals +# Set to an empty list if you do not want any TERMINAL_OUTPUT +TERMINAL_OUTPUT_VARS = [] diff --git a/docs/notebooks/WOFOST_Root_Dynamics.conf b/docs/notebooks/WOFOST_Root_Dynamics.conf new file mode 100644 index 0000000..fc19795 --- /dev/null +++ b/docs/notebooks/WOFOST_Root_Dynamics.conf @@ -0,0 +1,32 @@ + +from diffwofost.physical_models.crop.root_dynamics import WOFOST_Root_Dynamics +from pcse.agromanager import AgroManager + +# Module to be used for water balance +SOIL = None + +# Module to be used for the crop simulation itself +CROP = WOFOST_Root_Dynamics + +# Module to use for AgroManagement actions +AGROMANAGEMENT = AgroManager + +# variables to save at OUTPUT signals +# Set to an empty list if you do not want any OUTPUT +OUTPUT_VARS = ["RD", "TWRT"] +# interval for OUTPUT signals, either "daily"|"dekadal"|"monthly"|"weekly" +# For daily output you change the number of days between successive +# outputs using OUTPUT_INTERVAL_DAYS. For dekadal and monthly +# output this is ignored. +OUTPUT_INTERVAL = "daily" +OUTPUT_INTERVAL_DAYS = 1 +# Weekday: Monday is 0 and Sunday is 6 +OUTPUT_WEEKDAY = 0 + +# Summary variables to save at CROP_FINISH signals +# Set to an empty list if you do not want any SUMMARY_OUTPUT +SUMMARY_OUTPUT_VARS = [] + +# Summary variables to save at TERMINATE signals +# Set to an empty list if you do not want any TERMINAL_OUTPUT +TERMINAL_OUTPUT_VARS = [] diff --git a/docs/notebooks/optimization.ipynb b/docs/notebooks/optimization.ipynb index 7eb2da8..1be2f0c 100644 --- a/docs/notebooks/optimization.ipynb +++ b/docs/notebooks/optimization.ipynb @@ -414,10 +414,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Step 0, Loss 0.1351, TDWI 0.4242, SPAN 30.0000, Time 1.4211s\n", - "Step 10, Loss 0.1348, TDWI 0.5577, SPAN 30.0000, Time 1.2539s\n", - "Step 20, Loss 0.1347, TDWI 0.4957, SPAN 30.0000, Time 1.1583s\n", - "Step 30, Loss 0.1347, TDWI 0.5045, SPAN 30.0000, Time 1.0540s\n" + "Step 0, Loss 0.1351, TDWI 0.4242, SPAN 30.0000, Time 1.2994s\n", + "Step 10, Loss 0.1348, TDWI 0.5577, SPAN 30.0000, Time 1.0421s\n", + "Step 20, Loss 0.1347, TDWI 0.4957, SPAN 30.0000, Time 1.0390s\n", + "Step 30, Loss 0.1347, TDWI 0.5045, SPAN 30.0000, Time 1.0408s\n" ] } ], @@ -760,9 +760,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Step 0, Loss 0.00004644, TDWI 0.3214, Time 0.2898s\n", - "Step 10, Loss 0.00000479, TDWI 0.5424, Time 0.2516s\n", - "Step 20, Loss 0.00000412, TDWI 0.4864, Time 0.2406s\n" + "Step 0, Loss 0.00004644, TDWI 0.3214, Time 0.2779s\n", + "Step 10, Loss 0.00000479, TDWI 0.5424, Time 0.3150s\n", + "Step 20, Loss 0.00000412, TDWI 0.4864, Time 0.2740s\n" ] } ], diff --git a/docs/notebooks/test_leafdynamics_wofost72_01.yaml b/docs/notebooks/test_leafdynamics_wofost72_01.yaml new file mode 100644 index 0000000..cf2a335 --- /dev/null +++ b/docs/notebooks/test_leafdynamics_wofost72_01.yaml @@ -0,0 +1,1593 @@ +# Test file for testing the simulation of leaf dynamics in WOFOST 7.1 +# encoding: UTF-8 +# +# All parameter and variable names and their respective units refer to the +# WOFOST manual available from http://wageningenur.nl/wofost +# +# Test file generated with PCSE 5.3.3: https://doi.org/10.5281/zenodo.1252479 +# +# crop: Sugar beets +# latitude: 49.43613 +# longitude: 12.98528 +# +# Wageningen-UR 2018, allard.dewit@wur.nl +AgroManagement: +- 2010-04-16: + CropCalendar: {crop_end_date: 2010-12-31, crop_end_type: harvest, crop_name: Sugar + beets, crop_start_date: 2010-04-16, crop_start_type: sowing, max_duration: 260, + variety_name: Sugar beets_95118_2010} + StateEvents: null + TimedEvents: null +ExternalStates: +- {ADMI: 0.0, DAY: 2010-04-16, DVS: -0.1, FL: 0.85, FR: 0.2, PAI: 0.0, RFTRA: 0.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-17, DVS: -0.09294444444444445, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-18, DVS: -0.08805555555555557, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-19, DVS: -0.08200000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-20, DVS: -0.07333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-21, DVS: -0.06500000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-22, DVS: -0.05994444444444446, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-23, DVS: -0.057777777777777796, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-24, DVS: -0.05333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-25, DVS: -0.04600000000000001, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-26, DVS: -0.03472222222222224, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-27, DVS: -0.025000000000000015, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-28, DVS: -0.016722222222222236, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-04-29, DVS: -0.007555555555555569, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 0.0, SAI: 0.0} +- {ADMI: 0.06334614016373197, DAY: 2010-04-30, DVS: 0.0, FL: 0.85, FR: 0.2, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.06955663516961932, DAY: 2010-05-01, DVS: 0.030023923444976078, FL: 0.8394916267942584, + FR: 0.20296939902203062, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.06036795101242246, DAY: 2010-05-02, DVS: 0.05741626794258373, FL: 0.8299043062200957, + FR: 0.20567853199432148, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.06904930123904608, DAY: 2010-05-03, DVS: 0.07882775119617225, FL: 0.8224102870813397, + FR: 0.20779615121720385, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.05888212870381866, DAY: 2010-05-04, DVS: 0.09868421052631579, FL: 0.8154605263157895, + FR: 0.20975997686524003, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.06345060029463373, DAY: 2010-05-05, DVS: 0.11220095693779905, FL: 0.8107296650717704, + FR: 0.2110967979389032, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.07881135347334553, DAY: 2010-05-06, DVS: 0.12212918660287082, FL: 0.8072547846889951, + FR: 0.21207871076292129, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.09852481964261431, DAY: 2010-05-07, DVS: 0.13732057416267943, FL: 0.8019377990430622, + FR: 0.21358115568641886, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.15447577442412816, DAY: 2010-05-08, DVS: 0.14760765550239235, FL: 0.7983373205741626, + FR: 0.21459855933540145, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.18431729511837602, DAY: 2010-05-09, DVS: 0.16363636363636364, FL: 0.7927272727272727, + FR: 0.21618381618381619, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.140018980850247, DAY: 2010-05-10, DVS: 0.1812200956937799, FL: 0.786572966507177, + FR: 0.21792286660707713, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.2525109296012593, DAY: 2010-05-11, DVS: 0.20107655502392344, FL: 0.7796232057416268, + FR: 0.21988669225511331, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.2607790591371754, DAY: 2010-05-12, DVS: 0.22799043062200958, FL: 0.7702033492822966, + FR: 0.2225485041274515, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.21051934478979178, DAY: 2010-05-13, DVS: 0.2508373205741627, FL: 0.762206937799043, + FR: 0.22480808665019192, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.18082952401394806, DAY: 2010-05-14, DVS: 0.2674641148325359, FL: 0.7563875598086124, + FR: 0.22645249487354752, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.21216158586167716, DAY: 2010-05-15, DVS: 0.27763157894736845, FL: 0.752828947368421, + FR: 0.22745806824754194, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.3225925110304646, DAY: 2010-05-16, DVS: 0.28791866028708135, FL: 0.7492284688995215, + FR: 0.22847547189652453, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.48110564012108614, DAY: 2010-05-17, DVS: 0.3013157894736842, FL: 0.7445394736842105, + FR: 0.22980046269519955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.37044175559672554, DAY: 2010-05-18, DVS: 0.31830143540669853, FL: 0.7385944976076555, + FR: 0.23148036174351963, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.21092861815085803, DAY: 2010-05-19, DVS: 0.33337320574162677, FL: 0.7333193779904306, + FR: 0.23297097639202902, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.30947565917826964, DAY: 2010-05-20, DVS: 0.3407894736842105, FL: 0.7307236842105264, + FR: 0.23370445344129553, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.5576143631475478, DAY: 2010-05-21, DVS: 0.35633971291866023, FL: 0.7252811004784689, + FR: 0.2352423891897576, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.8532546017550056, DAY: 2010-05-22, DVS: 0.3809808612440191, FL: 0.7166566985645932, + FR: 0.23767942583732057, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.1077369109143245, DAY: 2010-05-23, DVS: 0.40765550239234444, FL: 0.7073205741626795, + FR: 0.2403175771596824, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.345054359613823, DAY: 2010-05-24, DVS: 0.43540669856459324, FL: 0.6976076555023923, + FR: 0.24306220095693779, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.5399857398800252, DAY: 2010-05-25, DVS: 0.46662679425837317, FL: 0.6866806220095694, + FR: 0.2461499027288501, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.1323384231071365, DAY: 2010-05-26, DVS: 0.49928229665071766, FL: 0.6752511961722488, + FR: 0.24937956780062043, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.5606027420064925, DAY: 2010-05-27, DVS: 0.5257177033492823, FL: 0.6659988038277512, + FR: 0.25199405857300594, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 2.0711140915316895, DAY: 2010-05-28, DVS: 0.5544258373205742, FL: 0.655950956937799, + FR: 0.25483332457016666, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 2.7804869760516895, DAY: 2010-05-29, DVS: 0.5836124401913876, FL: 0.6457356459330144, + FR: 0.2577199116672801, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 2.241247492064963, DAY: 2010-05-30, DVS: 0.6105263157894737, FL: 0.6363157894736842, + FR: 0.26038172353961825, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 2.6631751947291513, DAY: 2010-05-31, DVS: 0.6368421052631579, FL: 0.6271052631578947, + FR: 0.26298438403701563, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.5195245565028868, DAY: 2010-06-01, DVS: 0.6534688995215311, FL: 0.6212858851674641, + FR: 0.26462879226037117, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.6652932112744012, DAY: 2010-06-02, DVS: 0.6690191387559808, FL: 0.6158433014354067, + FR: 0.26616672800883323, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 1.9887086907856009, DAY: 2010-06-03, DVS: 0.6867224880382775, FL: 0.6096471291866028, + FR: 0.26791760870708237, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 5.883062026536403, DAY: 2010-06-04, DVS: 0.7076555023923445, FL: 0.6023205741626794, + FR: 0.26998790683001206, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 7.185506694825693, DAY: 2010-06-05, DVS: 0.7355263157894737, FL: 0.5925657894736842, + FR: 0.2727443609022556, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 8.398874147123157, DAY: 2010-06-06, DVS: 0.766866028708134, FL: 0.5815968899521531, + FR: 0.2758438929491561, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 8.460635199837757, DAY: 2010-06-07, DVS: 0.8037081339712919, FL: 0.5687021531100478, + FR: 0.2794876176455124, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 10.983494041245319, DAY: 2010-06-08, DVS: 0.8422248803827752, FL: 0.5552212918660286, + FR: 0.283296966191703, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 12.749950206041587, DAY: 2010-06-09, DVS: 0.8801435406698566, FL: 0.5419497607655501, + FR: 0.28704716336295283, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 14.529998478430059, DAY: 2010-06-10, DVS: 0.9232057416267944, FL: 0.526877990430622, + FR: 0.2914673046251994, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 18.17948474779467, DAY: 2010-06-11, DVS: 0.9662679425837322, FL: 0.5118062200956938, + FR: 0.29625199362041466, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 17.89920097929859, DAY: 2010-06-12, DVS: 1.0, FL: 0.5, FR: 0.3, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 16.927109068911655, DAY: 2010-06-13, DVS: 1.0110266159695818, FL: 0.48346007604562735, + FR: 0.2889733840304182, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 17.694733764726987, DAY: 2010-06-14, DVS: 1.0191381495564005, FL: 0.4712927756653993, + FR: 0.2808618504435995, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 20.307476232534015, DAY: 2010-06-15, DVS: 1.0269645120405577, FL: 0.4595532319391634, + FR: 0.27303548795944227, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 24.757657128862814, DAY: 2010-06-16, DVS: 1.0346958174904943, FL: 0.4479562737642585, + FR: 0.26530418250950566, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 32.81491074090979, DAY: 2010-06-17, DVS: 1.0418567807351078, FL: 0.4372148288973383, + FR: 0.25814321926489214, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 24.910834495096452, DAY: 2010-06-18, DVS: 1.049809885931559, FL: 0.4252851711026615, + FR: 0.25019011406844094, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 35.029238340180555, DAY: 2010-06-19, DVS: 1.0582699619771865, FL: 0.4125950570342203, + FR: 0.24173003802281345, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 27.14283941622052, DAY: 2010-06-20, DVS: 1.0640367553865655, FL: 0.40394486692015175, + FR: 0.23596324461343443, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 38.7517315160596, DAY: 2010-06-21, DVS: 1.0691064638783272, FL: 0.3963403041825092, + FR: 0.23089353612167274, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 49.303521645897334, DAY: 2010-06-22, DVS: 1.0750000000000002, FL: 0.38749999999999973, + FR: 0.22499999999999976, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 58.579142820894056, DAY: 2010-06-23, DVS: 1.0811153358681878, FL: 0.37832699619771837, + FR: 0.21888466413181218, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 63.87538124612525, DAY: 2010-06-24, DVS: 1.0874841571609635, FL: 0.3687737642585548, + FR: 0.21251584283903646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 70.58830761279373, DAY: 2010-06-25, DVS: 1.0964195183776935, FL: 0.3553707224334598, + FR: 0.20358048162230646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 81.61069863667417, DAY: 2010-06-26, DVS: 1.10532319391635, FL: 0.3420152091254751, + FR: 0.19467680608365, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 98.91460885559174, DAY: 2010-06-27, DVS: 1.1146704689480356, FL: 0.32799429657794665, + FR: 0.18532953105196434, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 110.71534392471503, DAY: 2010-06-28, DVS: 1.124746514575412, FL: 0.3128802281368819, + FR: 0.17525348542458782, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 116.76687428085175, DAY: 2010-06-29, DVS: 1.1349493029150826, FL: 0.29757604562737616, + FR: 0.16505069708491735, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 117.14319484688673, DAY: 2010-06-30, DVS: 1.1457224334600762, FL: 0.2814163498098857, + FR: 0.15427756653992372, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 136.4298986955567, DAY: 2010-07-01, DVS: 1.15712927756654, FL: 0.2643060836501899, + FR: 0.14694459532862567, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.0458082598484, DAY: 2010-07-02, DVS: 1.1683460076045629, FL: 0.24748098859315576, + FR: 0.14213742531233017, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 153.63543187877124, DAY: 2010-07-03, DVS: 1.1797528517110267, FL: 0.23037072243345996, + FR: 0.13724877783813136, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 148.53017524286903, DAY: 2010-07-04, DVS: 1.1911596958174906, FL: 0.21326045627376417, + FR: 0.13236013036393257, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.83841279006657, DAY: 2010-07-05, DVS: 1.2025665399239545, FL: 0.19615019011406837, + FR: 0.12747148288973378, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 158.68737582207044, DAY: 2010-07-06, DVS: 1.2139733840304183, FL: 0.17903992395437257, + FR: 0.12258283541553498, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 182.5758636940754, DAY: 2010-07-07, DVS: 1.223510773130545, FL: 0.16473384030418253, + FR: 0.11849538294405212, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 202.21274762347915, DAY: 2010-07-08, DVS: 1.2311787072243345, FL: 0.15323193916349825, + FR: 0.1152091254752852, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 203.06904746497915, DAY: 2010-07-09, DVS: 1.2406844106463877, FL: 0.13897338403041853, + FR: 0.11113525258011955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 203.81365365320397, DAY: 2010-07-10, DVS: 1.2520912547528515, FL: 0.12186311787072274, + FR: 0.10624660510592077, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 207.2796747505659, DAY: 2010-07-11, DVS: 1.2634980988593154, FL: 0.10475285171102694, + FR: 0.10135795763172198, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 210.2564099700119, DAY: 2010-07-12, DVS: 1.2749049429657793, FL: 0.08764258555133114, + FR: 0.09646931015752318, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 203.77144757441917, DAY: 2010-07-13, DVS: 1.2863117870722431, FL: 0.07053231939163535, + FR: 0.09158066268332438, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 218.218059543731, DAY: 2010-07-14, DVS: 1.297718631178707, FL: 0.05342205323193955, + FR: 0.09, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 172.34128595981582, DAY: 2010-07-15, DVS: 1.3091254752851709, FL: 0.05, FR: 0.08966201943388256, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 217.38049720124903, DAY: 2010-07-16, DVS: 1.3205323193916347, FL: 0.05, FR: 0.08923954372623574, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 170.3206034911828, DAY: 2010-07-17, DVS: 1.3319391634980986, FL: 0.05, FR: 0.08881706801858893, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 187.5446581745791, DAY: 2010-07-18, DVS: 1.3433460076045625, FL: 0.05, FR: 0.08839459231094213, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 224.14671689354523, DAY: 2010-07-19, DVS: 1.3523447401774396, FL: 0.05, FR: 0.08806130591935409, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 233.29231714903904, DAY: 2010-07-20, DVS: 1.3613434727503166, FL: 0.05, FR: 0.08772801952776604, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 222.37721579346007, DAY: 2010-07-21, DVS: 1.37148288973384, FL: 0.05, FR: 0.08735248556541333, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 212.9717345765432, DAY: 2010-07-22, DVS: 1.382889733840304, FL: 0.05, FR: 0.08693000985776653, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 106.44059255533156, DAY: 2010-07-23, DVS: 1.3942965779467678, FL: 0.05, FR: 0.08650753415011972, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 102.18170120678516, DAY: 2010-07-24, DVS: 1.4050697084917614, FL: 0.05, FR: 0.08610852931511995, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 220.2561264890109, DAY: 2010-07-25, DVS: 1.4132129277566536, FL: 0.05, FR: 0.08580692860160542, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 198.46020040119276, DAY: 2010-07-26, DVS: 1.4202154626108996, FL: 0.05, FR: 0.08554757545885557, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 200.55021107622272, DAY: 2010-07-27, DVS: 1.4277566539923952, FL: 0.05, FR: 0.08526827207435574, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 140.03325959094497, DAY: 2010-07-28, DVS: 1.4362167300380226, FL: 0.05, FR: 0.08495493592451768, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.3498324135558, DAY: 2010-07-29, DVS: 1.4450253485424587, FL: 0.05, FR: 0.08462869079472375, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 172.10898739755729, DAY: 2010-07-30, DVS: 1.4536121673003801, FL: 0.05, FR: 0.08431066047035629, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 239.00609791132996, DAY: 2010-07-31, DVS: 1.4618821292775663, FL: 0.05, FR: 0.08400436558231236, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 231.42562696137483, DAY: 2010-08-01, DVS: 1.4703422053231938, FL: 0.05, FR: 0.0836910294324743, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 155.96076995709458, DAY: 2010-08-02, DVS: 1.4803231939163497, FL: 0.05, FR: 0.08332136318828334, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 158.9912960157878, DAY: 2010-08-03, DVS: 1.4905576679340937, FL: 0.05, FR: 0.08294230859503357, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 225.87944658593784, DAY: 2010-08-04, DVS: 1.5001584283903675, FL: 0.05, FR: 0.08258672487443083, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 151.14300077473197, DAY: 2010-08-05, DVS: 1.508016476552598, FL: 0.05, FR: 0.08229568605360749, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 64.90608388145633, DAY: 2010-08-06, DVS: 1.5157477820025347, FL: 0.05, FR: 0.08200934140731353, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 89.22935957524096, DAY: 2010-08-07, DVS: 1.5236692015209123, FL: 0.05, FR: 0.08171595549922547, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 208.20159137335756, DAY: 2010-08-08, DVS: 1.531780735107731, FL: 0.05, FR: 0.0814155283293433, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 202.41906247758274, DAY: 2010-08-09, DVS: 1.5401774397972114, FL: 0.05, FR: 0.08110453926676994, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 205.60001859060077, DAY: 2010-08-10, DVS: 1.54946134347275, FL: 0.05, FR: 0.08076069098249075, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 193.46756914002214, DAY: 2010-08-11, DVS: 1.558333333333333, FL: 0.05, FR: 0.08043209876543211, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 169.18156119156453, DAY: 2010-08-12, DVS: 1.5679340937896067, FL: 0.05, FR: 0.08007651504482939, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 93.08974266331302, DAY: 2010-08-13, DVS: 1.5777883396704686, FL: 0.05, FR: 0.0784423320659063, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 160.937893254941, DAY: 2010-08-14, DVS: 1.5872623574144484, FL: 0.05, FR: 0.07654752851711033, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 186.76242029906928, DAY: 2010-08-15, DVS: 1.596546261089987, FL: 0.05, FR: 0.07469074778200262, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 174.26873717886699, DAY: 2010-08-16, DVS: 1.6078580481622304, FL: 0.05, FR: 0.07242839036755393, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 53.098070543751426, DAY: 2010-08-17, DVS: 1.6159695817490491, FL: 0.05, FR: 0.07080608365019019, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 70.23327561394287, DAY: 2010-08-18, DVS: 1.622782002534854, FL: 0.05, FR: 0.0694435994930292, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 199.91869360998516, DAY: 2010-08-19, DVS: 1.6301964512040557, FL: 0.05, FR: 0.06796070975918887, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 223.74667130958667, DAY: 2010-08-20, DVS: 1.6388466413181242, FL: 0.05, FR: 0.06623067173637517, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 213.71782243484523, DAY: 2010-08-21, DVS: 1.647401774397972, FL: 0.05, FR: 0.06451964512040559, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 204.92227270536407, DAY: 2010-08-22, DVS: 1.6576996197718632, FL: 0.05, FR: 0.062460076045627366, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 148.08498613058885, DAY: 2010-08-23, DVS: 1.669106463878327, FL: 0.05, FR: 0.06017870722433459, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 131.56663617540406, DAY: 2010-08-24, DVS: 1.6796261089987325, FL: 0.05, FR: 0.058074778200253495, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 208.14796378003513, DAY: 2010-08-25, DVS: 1.6903992395437262, FL: 0.05, FR: 0.05592015209125477, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 174.43741030541455, DAY: 2010-08-26, DVS: 1.697845373891001, FL: 0.05, FR: 0.05443092522179978, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 138.12218294509915, DAY: 2010-08-27, DVS: 1.707636248415716, FL: 0.05, FR: 0.05247275031685682, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 153.8085011163628, DAY: 2010-08-28, DVS: 1.717141951837769, FL: 0.05, FR: 0.05057160963244618, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 166.36786308607878, DAY: 2010-08-29, DVS: 1.7241128010139415, FL: 0.05, FR: 0.0491774397972117, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 128.9994856080207, DAY: 2010-08-30, DVS: 1.7297845373890999, FL: 0.05, FR: 0.048043092522180024, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.98852774320295, DAY: 2010-08-31, DVS: 1.7338403041825092, FL: 0.05, FR: 0.04723193916349815, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 131.51208699193373, DAY: 2010-09-01, DVS: 1.738973384030418, FL: 0.05, FR: 0.046205323193916396, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 133.52093244179918, DAY: 2010-09-02, DVS: 1.7434093789607095, FL: 0.05, FR: 0.04531812420785811, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 191.3675196695657, DAY: 2010-09-03, DVS: 1.7488910012674268, FL: 0.05, FR: 0.044221799746514634, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 142.11326427125846, DAY: 2010-09-04, DVS: 1.7548162230671733, FL: 0.05, FR: 0.04303675538656533, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 202.89142256251282, DAY: 2010-09-05, DVS: 1.761248415716096, FL: 0.05, FR: 0.041750316856780816, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 199.62648416769255, DAY: 2010-09-06, DVS: 1.7663814955640047, FL: 0.05, FR: 0.04072370088719906, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 174.64113933021284, DAY: 2010-09-07, DVS: 1.7712927756653989, FL: 0.05, FR: 0.03974144486692022, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 139.08471598465746, DAY: 2010-09-08, DVS: 1.7755703422053228, FL: 0.05, FR: 0.038885931558935424, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 82.67638414658957, DAY: 2010-09-09, DVS: 1.781780735107731, FL: 0.05, FR: 0.03764385297845378, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 152.03323101044322, DAY: 2010-09-10, DVS: 1.7885297845373889, FL: 0.05, FR: 0.03629404309252222, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 188.54073598348467, DAY: 2010-09-11, DVS: 1.7956273764258552, FL: 0.05, FR: 0.03487452471482894, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 184.05041333017076, DAY: 2010-09-12, DVS: 1.8026299112801012, FL: 0.05, FR: 0.033474017743979755, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 80.5742369039994, DAY: 2010-09-13, DVS: 1.8095690747782, FL: 0.05, FR: 0.03208618504435998, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 84.81301930060773, DAY: 2010-09-14, DVS: 1.8155259822560201, FL: 0.05, FR: 0.030894803548795965, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 49.372356921724915, DAY: 2010-09-15, DVS: 1.820722433460076, FL: 0.05, FR: 0.02985551330798479, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 141.38168873270675, DAY: 2010-09-16, DVS: 1.8274081115335867, FL: 0.05, FR: 0.028518377693282644, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 147.8674496140244, DAY: 2010-09-17, DVS: 1.8338403041825093, FL: 0.05, FR: 0.02723193916349813, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 161.59738610558637, DAY: 2010-09-18, DVS: 1.838593155893536, FL: 0.05, FR: 0.02628136882129279, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 160.71185556416103, DAY: 2010-09-19, DVS: 1.8419201520912547, FL: 0.05, FR: 0.025615969581749047, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 167.07029527454148, DAY: 2010-09-20, DVS: 1.8455640050697084, FL: 0.05, FR: 0.024887198986058304, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 167.44249755660599, DAY: 2010-09-21, DVS: 1.849873257287706, FL: 0.05, FR: 0.02402534854245881, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 161.66286186201958, DAY: 2010-09-22, DVS: 1.855830164765526, FL: 0.05, FR: 0.02283396704689479, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 158.87746836853117, DAY: 2010-09-23, DVS: 1.8624524714828898, FL: 0.05, FR: 0.02150950570342202, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 145.92499554293613, DAY: 2010-09-24, DVS: 1.869169835234474, FL: 0.05, FR: 0.020166032953105165, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 36.85993111833173, DAY: 2010-09-25, DVS: 1.8765209125475286, FL: 0.05, FR: 0.01869581749049426, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 70.50229901761877, DAY: 2010-09-26, DVS: 1.8823193916349812, FL: 0.05, FR: 0.017536121673003745, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 117.81966505006466, DAY: 2010-09-27, DVS: 1.886089987325729, FL: 0.05, FR: 0.016782002534854165, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 44.65653234518239, DAY: 2010-09-28, DVS: 1.889860583016477, FL: 0.05, FR: 0.016027883396704593, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 109.53680851036636, DAY: 2010-09-29, DVS: 1.8931875792141957, FL: 0.05, FR: 0.01536248415716085, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 101.08752630541781, DAY: 2010-09-30, DVS: 1.8975602027883403, FL: 0.05, FR: 0.01448795944233193, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 40.80050881178069, DAY: 2010-10-01, DVS: 1.9008555133079854, FL: 0.05, FR: 0.013828897338402896, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 79.8450266683765, DAY: 2010-10-02, DVS: 1.903738910012675, FL: 0.05, FR: 0.013252217997464996, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 118.6265113682002, DAY: 2010-10-03, DVS: 1.9084283903675545, FL: 0.05, FR: 0.012314321926489083, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 118.23375396361399, DAY: 2010-10-04, DVS: 1.9136565272496837, FL: 0.05, FR: 0.01126869455006324, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 82.43081801012632, DAY: 2010-10-05, DVS: 1.9184093789607104, FL: 0.05, FR: 0.010318124207857896, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 46.50841125589101, DAY: 2010-10-06, DVS: 1.9236692015209131, FL: 0.05, FR: 0.010458650190114152, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 32.96815156408577, DAY: 2010-10-07, DVS: 1.9287389100126748, FL: 0.05, FR: 0.011092363751584362, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 121.77727753718361, DAY: 2010-10-08, DVS: 1.9339353612167307, FL: 0.05, FR: 0.011741920152091346, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 119.4686953266058, DAY: 2010-10-09, DVS: 1.9394486692015216, FL: 0.05, FR: 0.012431083650190206, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 112.63420513906051, DAY: 2010-10-10, DVS: 1.9442648922686951, FL: 0.05, FR: 0.0130331115335869, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 112.72875569349394, DAY: 2010-10-11, DVS: 1.947972116603296, FL: 0.05, FR: 0.013496514575411999, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 108.04315231817708, DAY: 2010-10-12, DVS: 1.9517110266159703, FL: 0.05, FR: 0.013963878326996292, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 100.22700691884458, DAY: 2010-10-13, DVS: 1.9545310519645127, FL: 0.05, FR: 0.014316381495564095, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 95.2909499094097, DAY: 2010-10-14, DVS: 1.956970849176173, FL: 0.05, FR: 0.014621356147021633, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 19.539595870890874, DAY: 2010-10-15, DVS: 1.9585551330798485, FL: 0.05, FR: 0.014819391634981069, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 14.597831536425922, DAY: 2010-10-16, DVS: 1.9593155893536127, FL: 0.05, FR: 0.014914448669201594, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 19.96890058359237, DAY: 2010-10-17, DVS: 1.9616603295310526, FL: 0.05, FR: 0.015207541191381582, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 25.375332030621163, DAY: 2010-10-18, DVS: 1.9637515842839044, FL: 0.05, FR: 0.015468948035488053, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 23.259772421309517, DAY: 2010-10-19, DVS: 1.9649556400506978, FL: 0.05, FR: 0.015619455006337227, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 22.074458545299972, DAY: 2010-10-20, DVS: 1.9661913814955647, FL: 0.05, FR: 0.015773922686945593, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 32.66904408314212, DAY: 2010-10-21, DVS: 1.9677439797211667, FL: 0.05, FR: 0.015967997465145836, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 25.41711865536422, DAY: 2010-10-22, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 21.79726782047625, DAY: 2010-10-23, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 6.162785924356052, DAY: 2010-10-24, DVS: 1.9686628643852986, FL: 0.05, FR: 0.016082858048162327, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 3.619123014735839, DAY: 2010-10-25, DVS: 1.970785804816224, FL: 0.05, FR: 0.01634822560202799, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-26, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-27, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-28, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-29, DVS: 1.9728136882129288, FL: 0.05, FR: 0.016601711026616103, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-30, DVS: 1.9751267427122952, FL: 0.05, FR: 0.0168908428390369, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-10-31, DVS: 1.9769328263624852, FL: 0.05, FR: 0.01711660329531066, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-01, DVS: 1.9792458808618516, FL: 0.05, FR: 0.017405735107731454, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-02, DVS: 1.983555133079849, FL: 0.05, FR: 0.01794439163498114, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 19.61920187706796, DAY: 2010-11-03, DVS: 1.985107731305451, FL: 0.05, FR: 0.018138466413181384, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 10.228893739954652, DAY: 2010-11-04, DVS: 1.9885297845373902, FL: 0.05, FR: 0.018566223067173773, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 45.50321836194165, DAY: 2010-11-05, DVS: 1.9948035487959452, FL: 0.05, FR: 0.019350443599493155, + PAI: 0.0, RFTRA: 1.0, SAI: 0.0} +- {ADMI: 5.839463393806534, DAY: 2010-11-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 15.254533744320435, DAY: 2010-11-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 15.049318336197585, DAY: 2010-11-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 43.25829726065667, DAY: 2010-11-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 14.626290896706164, DAY: 2010-11-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 23.742415471479614, DAY: 2010-11-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 37.48822680676657, DAY: 2010-11-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 42.06031750650069, DAY: 2010-11-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 67.08969220067297, DAY: 2010-11-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 45.329423579045425, DAY: 2010-11-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 3.8155572206520234, DAY: 2010-11-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 6.152076941584958, DAY: 2010-11-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 4.4505561136862735, DAY: 2010-11-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 4.783258811957177, DAY: 2010-11-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 3.2038529975166394, DAY: 2010-11-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.8364366655705052, DAY: 2010-11-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 12.744056136326153, DAY: 2010-11-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, + RFTRA: 1.0, SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-11-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-01, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-02, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-03, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-04, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-05, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +- {ADMI: 0.0, DAY: 2010-12-31, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, + SAI: 0.0} +ModelParameters: + KDIFTB: [0.0, 0.69, 2.0, 0.69] + PERDL: 0.03 + RGRLAI: 0.016 + SLATB: [0.0, 0.002, 2.0, 0.002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + SPAN: 35.0 + TBASE: 3.0 + TDWI: 0.51 +ModelResults: +- {DAY: 2010-04-16, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-17, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-18, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-19, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-20, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-21, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-22, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-23, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-24, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-25, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-26, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-27, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-28, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-29, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-04-30, LAI: 0.0006936, TWLV: 0.3468} +- {DAY: 2010-05-01, LAI: 0.0008012884382783444, TWLV: 0.40064421913917214} +- {DAY: 2010-05-02, LAI: 0.0009180728639041013, TWLV: 0.4590364319520506} +- {DAY: 2010-05-03, LAI: 0.0010182721089098878, TWLV: 0.5091360544549438} +- {DAY: 2010-05-04, LAI: 0.0011318458202194273, TWLV: 0.5659229101097136} +- {DAY: 2010-05-05, LAI: 0.0012278779235462473, TWLV: 0.6139389617731237} +- {DAY: 2010-05-06, LAI: 0.0013202769303496714, TWLV: 0.6653802456985948} +- {DAY: 2010-05-07, LAI: 0.0014475186147080191, TWLV: 0.7290010878777686} +- {DAY: 2010-05-08, LAI: 0.0015599873277284634, TWLV: 0.8080118648930814} +- {DAY: 2010-05-09, LAI: 0.0017472859219589006, TWLV: 0.9313356407404586} +- {DAY: 2010-05-10, LAI: 0.0019747815900125966, TWLV: 1.0774489874161168} +- {DAY: 2010-05-11, LAI: 0.002195051880281977, TWLV: 1.1875841325508072} +- {DAY: 2010-05-12, LAI: 0.0025887786411230413, TWLV: 1.3844475129713394} +- {DAY: 2010-05-13, LAI: 0.002990484450663319, TWLV: 1.5853004177414776} +- {DAY: 2010-05-14, LAI: 0.003311403060942695, TWLV: 1.7457597228811657} +- {DAY: 2010-05-15, LAI: 0.0035631374590580646, TWLV: 1.8825369252914288} +- {DAY: 2010-05-16, LAI: 0.00383515276491807, TWLV: 2.04225830864769} +- {DAY: 2010-05-17, LAI: 0.004213777827675692, TWLV: 2.283953801765497} +- {DAY: 2010-05-18, LAI: 0.0047368321250869415, TWLV: 2.642155941847756} +- {DAY: 2010-05-19, LAI: 0.005253674600194289, TWLV: 2.9157621842156174} +- {DAY: 2010-05-20, LAI: 0.005533629300107672, TWLV: 3.0704402272783855} +- {DAY: 2010-05-21, LAI: 0.005985911687804124, TWLV: 3.296581421126612} +- {DAY: 2010-05-22, LAI: 0.006794766005696632, TWLV: 3.701008580072866} +- {DAY: 2010-05-23, LAI: 0.008017747257554211, TWLV: 4.312499206001656} +- {DAY: 2010-05-24, LAI: 0.00958479747325244, TWLV: 5.096024313850768} +- {DAY: 2010-05-25, LAI: 0.011461437909919379, TWLV: 6.034344532184239} +- {DAY: 2010-05-26, LAI: 0.01357639464141274, TWLV: 7.091822897930922} +- {DAY: 2010-05-27, LAI: 0.015105620390762525, TWLV: 7.856435772605814} +- {DAY: 2010-05-28, LAI: 0.01718433950961579, TWLV: 8.895795332032444} +- {DAY: 2010-05-29, LAI: 0.019901438050150936, TWLV: 10.254344602300018} +- {DAY: 2010-05-30, LAI: 0.023492357157129082, TWLV: 12.04980415578909} +- {DAY: 2010-05-31, LAI: 0.026344639491767546, TWLV: 13.475945323108323} +- {DAY: 2010-06-01, LAI: 0.02968482185441995, TWLV: 15.146036504434525} +- {DAY: 2010-06-02, LAI: 0.031572940172661136, TWLV: 16.090095663555118} +- {DAY: 2010-06-03, LAI: 0.033624059510839535, TWLV: 17.115655332644323} +- {DAY: 2010-06-04, LAI: 0.03604888059909132, TWLV: 18.328065876770204} +- {DAY: 2010-06-05, LAI: 0.04313585919440744, TWLV: 21.871555174428266} +- {DAY: 2010-06-06, LAI: 0.051651630089183116, TWLV: 26.129440621816094} +- {DAY: 2010-06-07, LAI: 0.061421148255315854, TWLV: 31.014199704882472} +- {DAY: 2010-06-08, LAI: 0.0710443111649686, TWLV: 35.82578115970886} +- {DAY: 2010-06-09, LAI: 0.0832408506665347, TWLV: 41.924050910491914} +- {DAY: 2010-06-10, LAI: 0.09706051559440852, TWLV: 48.83388337442883} +- {DAY: 2010-06-11, LAI: 0.11237158839295898, TWLV: 56.48941977370405} +- {DAY: 2010-06-12, LAI: 0.13098033513707127, TWLV: 65.79379314576016} +- {DAY: 2010-06-13, LAI: 0.14887953611636986, TWLV: 74.74339363540945} +- {DAY: 2010-06-14, LAI: 0.16524669899174718, TWLV: 82.9269750730981} +- {DAY: 2010-06-15, LAI: 0.18192549937302407, TWLV: 91.26637526373655} +- {DAY: 2010-06-16, LAI: 0.20059023204340157, TWLV: 100.59874159892532} +- {DAY: 2010-06-17, LAI: 0.2227709277125586, TWLV: 111.68908943350381} +- {DAY: 2010-06-18, LAI: 0.2514652588822952, TWLV: 126.03625501837213} +- {DAY: 2010-06-19, LAI: 0.27265367590340955, TWLV: 136.63046352892925} +- {DAY: 2010-06-20, LAI: 0.3015594570850738, TWLV: 151.08335411976137} +- {DAY: 2010-06-21, LAI: 0.3234878783967143, TWLV: 162.0475647755816} +- {DAY: 2010-06-22, LAI: 0.35420562451006227, TWLV: 177.4064378322556} +- {DAY: 2010-06-23, LAI: 0.39241585378563265, TWLV: 196.5115524700408} +- {DAY: 2010-06-24, LAI: 0.4367399960721646, TWLV: 218.67362361330683} +- {DAY: 2010-06-25, LAI: 0.48385112564333244, TWLV: 242.22918839889073} +- {DAY: 2010-06-26, LAI: 0.5340211613867598, TWLV: 267.3142062706045} +- {DAY: 2010-06-27, LAI: 0.5898453617089561, TWLV: 295.22630643170277} +- {DAY: 2010-06-28, LAI: 0.6547322168147012, TWLV: 327.6697339845752} +- {DAY: 2010-06-29, LAI: 0.7240135009455375, TWLV: 362.3103760499934} +- {DAY: 2010-06-30, LAI: 0.7935075503630673, TWLV: 397.0574007587582} +- {DAY: 2010-07-01, LAI: 0.8594395709608256, TWLV: 430.02341105763736} +- {DAY: 2010-07-02, LAI: 0.9315580753948549, TWLV: 466.08266327465213} +- {DAY: 2010-07-03, LAI: 1.0043401593881085, TWLV: 502.473705271279} +- {DAY: 2010-07-04, LAI: 1.0751263702546872, TWLV: 537.866810704568} +- {DAY: 2010-07-05, LAI: 1.1384775961401201, TWLV: 569.5424236472843} +- {DAY: 2010-07-06, LAI: 1.1964746616899873, TWLV: 598.540956422218} +- {DAY: 2010-07-07, LAI: 1.253297413089392, TWLV: 626.9523321219206} +- {DAY: 2010-07-08, LAI: 1.313450259435748, TWLV: 657.0287552950986} +- {DAY: 2010-07-09, LAI: 1.3754211623195973, TWLV: 688.0142067370235} +- {DAY: 2010-07-10, LAI: 1.431863547755681, TWLV: 716.2353994550654} +- {DAY: 2010-07-11, LAI: 1.481538282353287, TWLV: 741.0727667538684} +- {DAY: 2010-07-12, LAI: 1.5249645564169987, TWLV: 762.7859037857244} +- {DAY: 2010-07-13, LAI: 1.561819387214024, TWLV: 781.2133191842369} +- {DAY: 2010-07-14, LAI: 1.5905643328604533, TWLV: 795.5857920074517} +- {DAY: 2010-07-15, LAI: 1.6138796464466851, TWLV: 807.2434488005674} +- {DAY: 2010-07-16, LAI: 1.6311137750426667, TWLV: 815.8605130985583} +- {DAY: 2010-07-17, LAI: 1.6528518247627917, TWLV: 826.7295379586208} +- {DAY: 2010-07-18, LAI: 1.6698838851119098, TWLV: 835.2455681331799} +- {DAY: 2010-07-19, LAI: 1.6886383509293676, TWLV: 844.6228010419088} +- {DAY: 2010-07-20, LAI: 1.7110530226187224, TWLV: 855.830136886586} +- {DAY: 2010-07-21, LAI: 1.734382254333626, TWLV: 867.494752744038} +- {DAY: 2010-07-22, LAI: 1.7566199759129721, TWLV: 878.613613533711} +- {DAY: 2010-07-23, LAI: 1.7779171493706263, TWLV: 889.2622002625382} +- {DAY: 2010-07-24, LAI: 1.7885612086261597, TWLV: 894.5842298903048} +- {DAY: 2010-07-25, LAI: 1.7987793787468382, TWLV: 899.693314950644} +- {DAY: 2010-07-26, LAI: 1.8208049913957394, TWLV: 910.7061212750945} +- {DAY: 2010-07-27, LAI: 1.8406510114358585, TWLV: 920.629131295154} +- {DAY: 2010-07-28, LAI: 1.860012432543481, TWLV: 930.6566418489653} +- {DAY: 2010-07-29, LAI: 1.8737912856386716, TWLV: 937.6583048285124} +- {DAY: 2010-07-30, LAI: 1.888426069635021, TWLV: 945.0257964491902} +- {DAY: 2010-07-31, LAI: 1.9053349635533372, TWLV: 953.6312458190681} +- {DAY: 2010-08-01, LAI: 1.9289958629470914, TWLV: 965.5815507146347} +- {DAY: 2010-08-02, LAI: 1.951723631380945, TWLV: 977.1528320627035} +- {DAY: 2010-08-03, LAI: 1.9670994380863849, TWLV: 984.9508705605582} +- {DAY: 2010-08-04, LAI: 1.9822031351175824, TWLV: 992.9004353613476} +- {DAY: 2010-08-05, LAI: 2.003946411461921, TWLV: 1004.1944076906445} +- {DAY: 2010-08-06, LAI: 2.0181590321792258, TWLV: 1011.7515577293809} +- {DAY: 2010-08-07, LAI: 2.0234005610046544, TWLV: 1014.9968619234538} +- {DAY: 2010-08-08, LAI: 2.0315146426442854, TWLV: 1019.4583299022158} +- {DAY: 2010-08-09, LAI: 2.0511118205297634, TWLV: 1029.8684094708835} +- {DAY: 2010-08-10, LAI: 2.069786676561823, TWLV: 1039.989362594763} +- {DAY: 2010-08-11, LAI: 2.088470037984216, TWLV: 1050.269363524293} +- {DAY: 2010-08-12, LAI: 2.1057018381667243, TWLV: 1059.9427419812944} +- {DAY: 2010-08-13, LAI: 2.1190120494176776, TWLV: 1068.4018200408725} +- {DAY: 2010-08-14, LAI: 2.1256039251434737, TWLV: 1073.0563071740382} +- {DAY: 2010-08-15, LAI: 2.13810679536199, TWLV: 1081.1032018367853} +- {DAY: 2010-08-16, LAI: 2.1505905726946066, TWLV: 1090.4413228517385} +- {DAY: 2010-08-17, LAI: 2.164078208756074, TWLV: 1099.1547597106821} +- {DAY: 2010-08-18, LAI: 2.1598762161268814, TWLV: 1101.8096632378697} +- {DAY: 2010-08-19, LAI: 2.1668995436882756, TWLV: 1105.3213270185668} +- {DAY: 2010-08-20, LAI: 2.1783756421544984, TWLV: 1115.3172616990657} +- {DAY: 2010-08-21, LAI: 2.1909807911193253, TWLV: 1126.5045952645448} +- {DAY: 2010-08-22, LAI: 2.202729410453157, TWLV: 1137.1904863862871} +- {DAY: 2010-08-23, LAI: 2.2110250982221276, TWLV: 1147.4366000215553} +- {DAY: 2010-08-24, LAI: 2.2120139319073124, TWLV: 1154.8408493280847} +- {DAY: 2010-08-25, LAI: 2.2098595227263025, TWLV: 1161.4191811368548} +- {DAY: 2010-08-26, LAI: 2.2120655723601943, TWLV: 1171.8265793258568} +- {DAY: 2010-08-27, LAI: 2.2295093133907358, TWLV: 1180.5484498411276} +- {DAY: 2010-08-28, LAI: 2.225422330705947, TWLV: 1187.4545589883824} +- {DAY: 2010-08-29, LAI: 2.207757217560929, TWLV: 1195.1449840442008} +- {DAY: 2010-08-30, LAI: 2.224394003869537, TWLV: 1203.4633771985045} +- {DAY: 2010-08-31, LAI: 2.2186292197599613, TWLV: 1209.9133514789057} +- {DAY: 2010-09-01, LAI: 2.2112473768651246, TWLV: 1217.312777866066} +- {DAY: 2010-09-02, LAI: 2.224398585564318, TWLV: 1223.8883822156624} +- {DAY: 2010-09-03, LAI: 2.2090563476387612, TWLV: 1230.5644288377528} +- {DAY: 2010-09-04, LAI: 2.207004682584603, TWLV: 1240.132804821231} +- {DAY: 2010-09-05, LAI: 2.1923102278300646, TWLV: 1247.2384680347939} +- {DAY: 2010-09-06, LAI: 2.1906709487746756, TWLV: 1257.3830391629194} +- {DAY: 2010-09-07, LAI: 2.1799158510780967, TWLV: 1267.364363371304} +- {DAY: 2010-09-08, LAI: 2.1591697357355475, TWLV: 1276.0964203378148} +- {DAY: 2010-09-09, LAI: 2.1730782073340134, TWLV: 1283.0506561370478} +- {DAY: 2010-09-10, LAI: 2.1370217034621404, TWLV: 1287.184475344377} +- {DAY: 2010-09-11, LAI: 2.105113896992017, TWLV: 1294.786136894899} +- {DAY: 2010-09-12, LAI: 2.073797934846938, TWLV: 1304.2131736940735} +- {DAY: 2010-09-13, LAI: 2.0922029761799545, TWLV: 1313.415694360582} +- {DAY: 2010-09-14, LAI: 2.044436199548158, TWLV: 1317.444406205782} +- {DAY: 2010-09-15, LAI: 1.988030646372474, TWLV: 1321.6850571708123} +- {DAY: 2010-09-16, LAI: 1.9929678820646464, TWLV: 1324.1536750168984} +- {DAY: 2010-09-17, LAI: 1.937824766807081, TWLV: 1331.2227594535339} +- {DAY: 2010-09-18, LAI: 1.9526115117684832, TWLV: 1338.6161319342352} +- {DAY: 2010-09-19, LAI: 1.899277200961512, TWLV: 1346.6960012395143} +- {DAY: 2010-09-20, LAI: 1.9153483865179282, TWLV: 1354.7315940177225} +- {DAY: 2010-09-21, LAI: 1.9320554160453822, TWLV: 1363.0851087814494} +- {DAY: 2010-09-22, LAI: 1.8828676452032849, TWLV: 1371.4572336592796} +- {DAY: 2010-09-23, LAI: 1.8990339313894868, TWLV: 1379.5403767523808} +- {DAY: 2010-09-24, LAI: 1.8428031737923105, TWLV: 1387.4842501708072} +- {DAY: 2010-09-25, LAI: 1.8573956733466044, TWLV: 1394.780499947954} +- {DAY: 2010-09-26, LAI: 1.7882995824651837, TWLV: 1396.6234965038707} +- {DAY: 2010-09-27, LAI: 1.7953498123669454, TWLV: 1400.1486114547515} +- {DAY: 2010-09-28, LAI: 1.7363455680053737, TWLV: 1406.0395947072548} +- {DAY: 2010-09-29, LAI: 1.7408112212398918, TWLV: 1408.2724213245137} +- {DAY: 2010-09-30, LAI: 1.7517649020909287, TWLV: 1413.7492617500325} +- {DAY: 2010-10-01, LAI: 1.6985224288360379, TWLV: 1418.803638065303} +- {DAY: 2010-10-02, LAI: 1.702602479717216, TWLV: 1420.843663505892} +- {DAY: 2010-10-03, LAI: 1.7105869823840534, TWLV: 1424.835914839311} +- {DAY: 2010-10-04, LAI: 1.664452567971006, TWLV: 1430.7672404077211} +- {DAY: 2010-10-05, LAI: 1.6762759433673675, TWLV: 1436.6789281059018} +- {DAY: 2010-10-06, LAI: 1.6276962737689755, TWLV: 1440.800469006408} +- {DAY: 2010-10-07, LAI: 1.6323471148945645, TWLV: 1443.1258895692026} +- {DAY: 2010-10-08, LAI: 1.575491083704617, TWLV: 1444.7742971474072} +- {DAY: 2010-10-09, LAI: 1.5876688114583353, TWLV: 1450.8631610242664} +- {DAY: 2010-10-10, LAI: 1.5376447781071463, TWLV: 1456.8365957905967} +- {DAY: 2010-10-11, LAI: 1.5489081986210524, TWLV: 1462.4683060475495} +- {DAY: 2010-10-12, LAI: 1.503738688754318, TWLV: 1468.1047438322244} +- {DAY: 2010-10-13, LAI: 1.5145430039861358, TWLV: 1473.5069014481332} +- {DAY: 2010-10-14, LAI: 1.5245657046780203, TWLV: 1478.5182517940752} +- {DAY: 2010-10-15, LAI: 1.5340947996689613, TWLV: 1483.282799289546} +- {DAY: 2010-10-16, LAI: 1.5360487592560503, TWLV: 1484.2597790830905} +- {DAY: 2010-10-17, LAI: 1.487833807812087, TWLV: 1484.9896706599118} +- {DAY: 2010-10-18, LAI: 1.489830697870446, TWLV: 1485.9881156890915} +- {DAY: 2010-10-19, LAI: 1.4923682310735082, TWLV: 1487.2568822906223} +- {DAY: 2010-10-20, LAI: 1.4946942083156392, TWLV: 1488.419870911688} +- {DAY: 2010-10-21, LAI: 1.4969016541701692, TWLV: 1489.5235938389528} +- {DAY: 2010-10-22, LAI: 1.5001685585784834, TWLV: 1491.1570460431099} +- {DAY: 2010-10-23, LAI: 1.5027102704440198, TWLV: 1492.4279019758783} +- {DAY: 2010-10-24, LAI: 1.5048899972260672, TWLV: 1493.517765366902} +- {DAY: 2010-10-25, LAI: 1.505506275818503, TWLV: 1493.8259046631197} +- {DAY: 2010-10-26, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} +- {DAY: 2010-10-27, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} +- {DAY: 2010-10-28, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} +- {DAY: 2010-10-29, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} +- {DAY: 2010-10-30, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-10-31, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-11-01, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-11-02, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-11-03, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} +- {DAY: 2010-11-04, LAI: 1.4644038342439714, TWLV: 1494.98782090771} +- {DAY: 2010-11-05, LAI: 1.4285718928209417, TWLV: 1495.4992655947076} +- {DAY: 2010-11-06, LAI: 1.4331222146571359, TWLV: 1497.7744265128047} +- {DAY: 2010-11-07, LAI: 1.4049612153500868, TWLV: 1498.066399682495} +- {DAY: 2010-11-08, LAI: 1.4064866687245188, TWLV: 1498.829126369711} +- {DAY: 2010-11-09, LAI: 1.4079916005581385, TWLV: 1499.5815922865208} +- {DAY: 2010-11-10, LAI: 1.4123174302842043, TWLV: 1501.7445071495538} +- {DAY: 2010-11-11, LAI: 1.3904647457876436, TWLV: 1502.4758216943892} +- {DAY: 2010-11-12, LAI: 1.3928389873347915, TWLV: 1503.6629424679631} +- {DAY: 2010-11-13, LAI: 1.396587810015468, TWLV: 1505.5373538083013} +- {DAY: 2010-11-14, LAI: 1.4007938417661183, TWLV: 1507.6403696836264} +- {DAY: 2010-11-15, LAI: 1.4075028109861856, TWLV: 1510.99485429366} +- {DAY: 2010-11-16, LAI: 1.3948016247481085, TWLV: 1513.2613254726125} +- {DAY: 2010-11-17, LAI: 1.3951831804701738, TWLV: 1513.452103333645} +- {DAY: 2010-11-18, LAI: 1.395798388164332, TWLV: 1513.7597071807243} +- {DAY: 2010-11-19, LAI: 1.3962434437757008, TWLV: 1513.9822349864085} +- {DAY: 2010-11-20, LAI: 1.3967217696568965, TWLV: 1514.2213979270064} +- {DAY: 2010-11-21, LAI: 1.397042154956648, TWLV: 1514.3815905768822} +- {DAY: 2010-11-22, LAI: 1.3971257986232053, TWLV: 1514.4234124101608} +- {DAY: 2010-11-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-11-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-01, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-02, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-03, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-04, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-05, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-06, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-07, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-08, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-09, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-10, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-11, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-12, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-13, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-14, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-15, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-16, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-17, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-18, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-19, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-20, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-21, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-22, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +- {DAY: 2010-12-31, LAI: 1.3984002042368375, TWLV: 1515.060615216977} +Precision: {LAI: 0.01, TWLV: 0.1} +WeatherVariables: +- {DAY: 2010-04-16, E0: 0.292, ELEV: 440.0, ES0: 0.259, ET0: 0.254, IRRAD: 15048000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.35, TMAX: 14.5, + TMIN: 4.2, VAP: 7.45, WIND: 2.298643329164947} +- {DAY: 2010-04-17, E0: 0.307, ELEV: 440.0, ES0: 0.259, ET0: 0.29100000000000004, + IRRAD: 22799000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.3999999999999995, + TMAX: 14.6, TMIN: 0.2, VAP: 6.04, WIND: 1.6521498928373055} +- {DAY: 2010-04-18, E0: 0.303, ELEV: 440.0, ES0: 0.263, ET0: 0.28300000000000003, + IRRAD: 18735000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.450000000000001, + TMAX: 15.8, TMIN: 1.1, VAP: 6.95, WIND: 2.2268107251285425} +- {DAY: 2010-04-19, E0: 0.34500000000000003, ELEV: 440.0, ES0: 0.29700000000000004, + ET0: 0.337, IRRAD: 21025000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.8, TMAX: 18.6, TMIN: 3.0, VAP: 7.35, WIND: 1.939480308982924} +- {DAY: 2010-04-20, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.28900000000000003, + ET0: 0.319, IRRAD: 18687000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.5, TMAX: 16.9, TMIN: 4.1, VAP: 7.42, WIND: 2.442308537237756} +- {DAY: 2010-04-21, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.266, ET0: 0.262, + IRRAD: 14308000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.550000000000001, + TMAX: 10.4, TMIN: 4.7, VAP: 5.87, WIND: 3.0888019735653973} +- {DAY: 2010-04-22, E0: 0.288, ELEV: 440.0, ES0: 0.244, ET0: 0.28500000000000003, + IRRAD: 22864000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.95, + TMAX: 12.4, TMIN: -2.5, VAP: 4.42, WIND: 1.72398249687371} +- {DAY: 2010-04-23, E0: 0.333, ELEV: 440.0, ES0: 0.286, ET0: 0.331, IRRAD: 23148000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.0, TMAX: 15.0, + TMIN: -1.0, VAP: 5.13, WIND: 2.2268107251285425} +- {DAY: 2010-04-24, E0: 0.369, ELEV: 440.0, ES0: 0.316, ET0: 0.36, IRRAD: 24044000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.6, TMAX: 18.0, + TMIN: 1.2, VAP: 6.37, WIND: 1.8676477049465194} +- {DAY: 2010-04-25, E0: 0.43899999999999995, ELEV: 440.0, ES0: 0.381, ET0: 0.425, + IRRAD: 24020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.15, + TMAX: 20.6, TMIN: 5.7, VAP: 7.05, WIND: 2.154978121092138} +- {DAY: 2010-04-26, E0: 0.29700000000000004, ELEV: 440.0, ES0: 0.262, ET0: 0.286, + IRRAD: 15089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 11.75, + TMAX: 17.6, TMIN: 5.9, VAP: 8.63, WIND: 2.083145517055733} +- {DAY: 2010-04-27, E0: 0.3, ELEV: 440.0, ES0: 0.26, ET0: 0.286, IRRAD: 17661000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.45, TMAX: 17.9, + TMIN: 3.0, VAP: 8.23, WIND: 1.6521498928373055} +- {DAY: 2010-04-28, E0: 0.373, ELEV: 440.0, ES0: 0.317, ET0: 0.352, IRRAD: 24464000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 19.8, + TMIN: 2.7, VAP: 7.52, WIND: 1.077489060546069} +- {DAY: 2010-04-29, E0: 0.41100000000000003, ELEV: 440.0, ES0: 0.352, ET0: 0.41600000000000004, + IRRAD: 23615000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, + TMAX: 23.8, TMIN: 4.1, VAP: 8.26, WIND: 1.5084846847644964} +- {DAY: 2010-04-30, E0: 0.348, ELEV: 440.0, ES0: 0.311, ET0: 0.333, IRRAD: 14717000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 22.6, + TMIN: 8.5, VAP: 11.53, WIND: 2.2268107251285425} +- {DAY: 2010-05-01, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.26, ET0: 0.24900000000000003, + IRRAD: 12969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.58, SNOWDEPTH: .nan, TEMP: 14.45, + TMAX: 17.8, TMIN: 11.1, VAP: 12.04, WIND: 1.8676477049465194} +- {DAY: 2010-05-02, E0: 0.176, ELEV: 440.0, ES0: 0.158, ET0: 0.147, IRRAD: 7834000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.8, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 14.2, + TMIN: 9.7, VAP: 11.97, WIND: 1.4366520807280918} +- {DAY: 2010-05-03, E0: 0.189, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.161, + IRRAD: 8347000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 13.5, TMIN: 9.1, VAP: 10.82, WIND: 1.6521498928373055} +- {DAY: 2010-05-04, E0: 0.133, ELEV: 440.0, ES0: 0.121, ET0: 0.11699999999999999, + IRRAD: 5850000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.37, SNOWDEPTH: .nan, TEMP: 8.65, + TMAX: 10.6, TMIN: 6.7, VAP: 9.71, WIND: 2.9451367654925877} +- {DAY: 2010-05-05, E0: 0.176, ELEV: 440.0, ES0: 0.161, ET0: 0.125, IRRAD: 7550000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 7.15, TMAX: 8.9, + TMIN: 5.4, VAP: 8.77, WIND: 4.669119262366299} +- {DAY: 2010-05-06, E0: 0.159, ELEV: 440.0, ES0: 0.144, ET0: 0.145, IRRAD: 6844000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 9.350000000000001, + TMAX: 11.8, TMIN: 6.9, VAP: 9.74, WIND: 3.304299785674611} +- {DAY: 2010-05-07, E0: 0.213, ELEV: 440.0, ES0: 0.189, ET0: 0.175, IRRAD: 11585000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.300000000000001, + TMAX: 10.4, TMIN: 4.2, VAP: 8.06, WIND: 2.2268107251285425} +- {DAY: 2010-05-08, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.246, + IRRAD: 16249000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.7, + TMAX: 15.5, TMIN: 3.9, VAP: 8.4, WIND: 1.077489060546069} +- {DAY: 2010-05-09, E0: 0.29, ELEV: 440.0, ES0: 0.252, ET0: 0.261, IRRAD: 16930000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 10.35, TMAX: 17.3, + TMIN: 3.4, VAP: 9.58, WIND: 1.5803172888009012} +- {DAY: 2010-05-10, E0: 0.182, ELEV: 440.0, ES0: 0.16299999999999998, ET0: 0.152, + IRRAD: 8387000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 14.0, TMIN: 8.6, VAP: 11.36, WIND: 1.077489060546069} +- {DAY: 2010-05-11, E0: 0.39, ELEV: 440.0, ES0: 0.344, ET0: 0.317, IRRAD: 18611000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.3, + TMIN: 9.2, VAP: 12.27, WIND: 2.5859737453105653} +- {DAY: 2010-05-12, E0: 0.32599999999999996, ELEV: 440.0, ES0: 0.29100000000000004, + ET0: 0.269, IRRAD: 14823000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.55, TMAX: 15.5, TMIN: 9.6, VAP: 10.25, WIND: 2.154978121092138} +- {DAY: 2010-05-13, E0: 0.197, ELEV: 440.0, ES0: 0.178, ET0: 0.16699999999999998, + IRRAD: 8293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.44000000000000006, SNOWDEPTH: .nan, + TEMP: 9.95, TMAX: 12.7, TMIN: 7.2, VAP: 9.85, WIND: 2.7296389533833745} +- {DAY: 2010-05-14, E0: 0.149, ELEV: 440.0, ES0: 0.133, ET0: 0.12, IRRAD: 7517000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 7.25, TMAX: 8.6, + TMIN: 5.9, VAP: 8.94, WIND: 1.72398249687371} +- {DAY: 2010-05-15, E0: 0.177, ELEV: 440.0, ES0: 0.161, ET0: 0.148, IRRAD: 8182000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 7.300000000000001, + TMAX: 9.3, TMIN: 5.3, VAP: 8.06, WIND: 2.0113129130193284} +- {DAY: 2010-05-16, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.267, ET0: 0.23500000000000001, + IRRAD: 11902000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.600000000000001, + TMAX: 12.3, TMIN: 4.9, VAP: 7.59, WIND: 3.1606345776018023} +- {DAY: 2010-05-17, E0: 0.364, ELEV: 440.0, ES0: 0.323, ET0: 0.315, IRRAD: 18616000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 10.1, TMAX: 15.4, + TMIN: 4.8, VAP: 7.99, WIND: 2.801471557419779} +- {DAY: 2010-05-18, E0: 0.23900000000000002, ELEV: 440.0, ES0: 0.217, ET0: 0.20600000000000002, + IRRAD: 10082000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 9.3, + TMAX: 11.5, TMIN: 7.1, VAP: 8.29, WIND: 2.65780634934697} +- {DAY: 2010-05-19, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.096, ET0: 0.095, + IRRAD: 5446000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 6.1, + TMAX: 7.1, TMIN: 5.1, VAP: 8.46, WIND: 2.7296389533833745} +- {DAY: 2010-05-20, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.095, ET0: 0.10400000000000001, + IRRAD: 5694000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 9.5, + TMAX: 12.5, TMIN: 6.5, VAP: 11.3, WIND: 1.3648194766916872} +- {DAY: 2010-05-21, E0: 0.265, ELEV: 440.0, ES0: 0.23700000000000002, ET0: 0.21800000000000003, + IRRAD: 11531000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 13.3, + TMAX: 17.0, TMIN: 9.6, VAP: 12.21, WIND: 1.8676477049465194} +- {DAY: 2010-05-22, E0: 0.386, ELEV: 440.0, ES0: 0.339, ET0: 0.323, IRRAD: 19035000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.1, SNOWDEPTH: .nan, TEMP: 14.15, TMAX: 20.1, + TMIN: 8.2, VAP: 11.77, WIND: 1.5084846847644964} +- {DAY: 2010-05-23, E0: 0.45099999999999996, ELEV: 440.0, ES0: 0.395, ET0: 0.378, + IRRAD: 22815000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.6, + TMAX: 20.9, TMIN: 8.3, VAP: 11.7, WIND: 1.6521498928373055} +- {DAY: 2010-05-24, E0: 0.492, ELEV: 440.0, ES0: 0.433, ET0: 0.43600000000000005, + IRRAD: 23334000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 16.05, + TMAX: 23.5, TMIN: 8.6, VAP: 12.38, WIND: 2.5141411412741608} +- {DAY: 2010-05-25, E0: 0.458, ELEV: 440.0, ES0: 0.404, ET0: 0.39, IRRAD: 20822000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: .nan, TEMP: 16.65, + TMAX: 22.0, TMIN: 11.3, VAP: 13.18, WIND: 2.370475933201351} +- {DAY: 2010-05-26, E0: 0.215, ELEV: 440.0, ES0: 0.193, ET0: 0.187, IRRAD: 9210000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.93, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 17.5, + TMIN: 10.6, VAP: 13.39, WIND: 1.5084846847644964} +- {DAY: 2010-05-27, E0: 0.303, ELEV: 440.0, ES0: 0.27, ET0: 0.257, IRRAD: 13115000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 15.0, TMAX: 18.8, + TMIN: 11.2, VAP: 13.15, WIND: 2.083145517055733} +- {DAY: 2010-05-28, E0: 0.362, ELEV: 440.0, ES0: 0.321, ET0: 0.305, IRRAD: 16517000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.2, TMAX: 20.4, + TMIN: 10.0, VAP: 12.78, WIND: 1.72398249687371} +- {DAY: 2010-05-29, E0: 0.413, ELEV: 440.0, ES0: 0.362, ET0: 0.346, IRRAD: 20796000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.9, + TMIN: 8.6, VAP: 11.43, WIND: 1.5084846847644964} +- {DAY: 2010-05-30, E0: 0.277, ELEV: 440.0, ES0: 0.25, ET0: 0.233, IRRAD: 11117000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 3.6, SNOWDEPTH: .nan, TEMP: 14.0, TMAX: 17.8, + TMIN: 10.2, VAP: 12.48, WIND: 2.370475933201351} +- {DAY: 2010-05-31, E0: 0.307, ELEV: 440.0, ES0: 0.277, ET0: 0.21800000000000003, + IRRAD: 13569000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.32, SNOWDEPTH: .nan, TEMP: 9.95, + TMAX: 13.1, TMIN: 6.8, VAP: 9.74, WIND: 3.663462805856634} +- {DAY: 2010-06-01, E0: 0.10900000000000001, ELEV: 440.0, ES0: 0.098, ET0: 0.10300000000000001, + IRRAD: 5021000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 9.5, + TMAX: 11.0, TMIN: 8.0, VAP: 10.76, WIND: 2.7296389533833745} +- {DAY: 2010-06-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10300000000000001, + ET0: 0.10800000000000001, IRRAD: 5185000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.2, + SNOWDEPTH: .nan, TEMP: 10.4, TMAX: 11.5, TMIN: 9.3, VAP: 11.4, WIND: 2.65780634934697} +- {DAY: 2010-06-03, E0: 0.128, ELEV: 440.0, ES0: 0.11399999999999999, ET0: 0.118, + IRRAD: 5892000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.75, + TMAX: 13.2, TMIN: 10.3, VAP: 12.64, WIND: 1.7958151009101146} +- {DAY: 2010-06-04, E0: 0.528, ELEV: 440.0, ES0: 0.45899999999999996, ET0: 0.44000000000000006, + IRRAD: 27697000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.65, + TMAX: 21.1, TMIN: 8.2, VAP: 11.3, WIND: 1.5803172888009012} +- {DAY: 2010-06-05, E0: 0.564, ELEV: 440.0, ES0: 0.488, ET0: 0.497, IRRAD: 29724000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.1, TMAX: 24.8, + TMIN: 7.4, VAP: 11.5, WIND: 1.3648194766916872} +- {DAY: 2010-06-06, E0: 0.5900000000000001, ELEV: 440.0, ES0: 0.513, ET0: 0.525, IRRAD: 28294000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.4, TMAX: 27.0, + TMIN: 9.8, VAP: 13.35, WIND: 1.6521498928373055} +- {DAY: 2010-06-07, E0: 0.505, ELEV: 440.0, ES0: 0.45099999999999996, ET0: 0.42699999999999994, + IRRAD: 19774000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, + TMAX: 22.6, TMIN: 15.6, VAP: 14.43, WIND: 2.801471557419779} +- {DAY: 2010-06-08, E0: 0.538, ELEV: 440.0, ES0: 0.471, ET0: 0.465, IRRAD: 24452000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.85, TMAX: 26.9, + TMIN: 10.8, VAP: 14.7, WIND: 1.4366520807280918} +- {DAY: 2010-06-09, E0: 0.595, ELEV: 440.0, ES0: 0.525, ET0: 0.517, IRRAD: 24742000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, TMAX: 28.6, + TMIN: 14.4, VAP: 17.3, WIND: 2.083145517055733} +- {DAY: 2010-06-10, E0: 0.607, ELEV: 440.0, ES0: 0.536, ET0: 0.533, IRRAD: 24198000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.3, TMAX: 30.5, + TMIN: 16.1, VAP: 17.26, WIND: 1.5803172888009012} +- {DAY: 2010-06-11, E0: 0.653, ELEV: 440.0, ES0: 0.5740000000000001, ET0: 0.5650000000000001, + IRRAD: 27798000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, + TMAX: 27.1, TMIN: 15.9, VAP: 16.05, WIND: 2.298643329164947} +- {DAY: 2010-06-12, E0: 0.5, ELEV: 440.0, ES0: 0.44400000000000006, ET0: 0.437, IRRAD: 19853000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 20.4, TMAX: 26.5, + TMIN: 14.3, VAP: 15.11, WIND: 1.72398249687371} +- {DAY: 2010-06-13, E0: 0.371, ELEV: 440.0, ES0: 0.33399999999999996, ET0: 0.29900000000000004, + IRRAD: 14405000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 15.8, + TMAX: 19.3, TMIN: 12.3, VAP: 13.18, WIND: 2.442308537237756} +- {DAY: 2010-06-14, E0: 0.321, ELEV: 440.0, ES0: 0.288, ET0: 0.258, IRRAD: 12885000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.35, TMAX: 18.9, + TMIN: 11.8, VAP: 13.39, WIND: 2.0113129130193284} +- {DAY: 2010-06-15, E0: 0.369, ELEV: 440.0, ES0: 0.335, ET0: 0.288, IRRAD: 13535000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.200000000000001, + TMAX: 18.6, TMIN: 11.8, VAP: 12.91, WIND: 3.2324671816382065} +- {DAY: 2010-06-16, E0: 0.413, ELEV: 440.0, ES0: 0.374, ET0: 0.33999999999999997, + IRRAD: 15421000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.3, + TMAX: 17.3, TMIN: 11.3, VAP: 11.03, WIND: 4.309956242184276} +- {DAY: 2010-06-17, E0: 0.489, ELEV: 440.0, ES0: 0.438, ET0: 0.389, IRRAD: 20003000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.3, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 19.8, + TMIN: 11.3, VAP: 12.24, WIND: 3.735295409893039} +- {DAY: 2010-06-18, E0: 0.28700000000000003, ELEV: 440.0, ES0: 0.258, ET0: 0.242, + IRRAD: 11148000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 16.35, + TMAX: 18.7, TMIN: 14.0, VAP: 14.16, WIND: 1.5803172888009012} +- {DAY: 2010-06-19, E0: 0.346, ELEV: 440.0, ES0: 0.308, ET0: 0.275, IRRAD: 16133000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.1, TMAX: 15.6, + TMIN: 8.6, VAP: 10.12, WIND: 1.6521498928373055} +- {DAY: 2010-06-20, E0: 0.23199999999999998, ELEV: 440.0, ES0: 0.21000000000000002, + ET0: 0.19, IRRAD: 9754000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, + TEMP: 11.0, TMAX: 14.0, TMIN: 8.0, VAP: 10.05, WIND: 1.3648194766916872} +- {DAY: 2010-06-21, E0: 0.337, ELEV: 440.0, ES0: 0.303, ET0: 0.264, IRRAD: 14403000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.3, TMAX: 15.8, + TMIN: 8.8, VAP: 10.18, WIND: 1.72398249687371} +- {DAY: 2010-06-22, E0: 0.36, ELEV: 440.0, ES0: 0.318, ET0: 0.312, IRRAD: 17475000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.65, TMAX: 18.3, + TMIN: 7.0, VAP: 9.81, WIND: 1.5084846847644964} +- {DAY: 2010-06-23, E0: 0.383, ELEV: 440.0, ES0: 0.33599999999999997, ET0: 0.331, + IRRAD: 19579000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.05, + TMAX: 19.7, TMIN: 6.4, VAP: 10.42, WIND: 1.2929868726552827} +- {DAY: 2010-06-24, E0: 0.44800000000000006, ELEV: 440.0, ES0: 0.397, ET0: 0.383, + IRRAD: 19454000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.1, + TMAX: 22.5, TMIN: 11.7, VAP: 11.5, WIND: 1.2929868726552827} +- {DAY: 2010-06-25, E0: 0.418, ELEV: 440.0, ES0: 0.367, ET0: 0.378, IRRAD: 19342000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 17.05, TMAX: 24.0, + TMIN: 10.1, VAP: 13.52, WIND: 1.5803172888009012} +- {DAY: 2010-06-26, E0: 0.457, ELEV: 440.0, ES0: 0.4, ET0: 0.40499999999999997, IRRAD: 21119000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.75, TMAX: 24.3, + TMIN: 11.2, VAP: 13.96, WIND: 1.5084846847644964} +- {DAY: 2010-06-27, E0: 0.571, ELEV: 440.0, ES0: 0.49800000000000005, ET0: 0.506, + IRRAD: 26779000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.9, + TMAX: 24.8, TMIN: 13.0, VAP: 12.48, WIND: 1.6521498928373055} +- {DAY: 2010-06-28, E0: 0.585, ELEV: 440.0, ES0: 0.507, ET0: 0.519, IRRAD: 28562000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, TMAX: 26.6, + TMIN: 11.6, VAP: 12.38, WIND: 1.077489060546069} +- {DAY: 2010-06-29, E0: 0.538, ELEV: 440.0, ES0: 0.46799999999999997, ET0: 0.493, + IRRAD: 25202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.0, + TMAX: 28.1, TMIN: 11.9, VAP: 13.52, WIND: 1.1493216645824735} +- {DAY: 2010-06-30, E0: 0.515, ELEV: 440.0, ES0: 0.45499999999999996, ET0: 0.45099999999999996, + IRRAD: 21164000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 21.35, + TMAX: 27.5, TMIN: 15.2, VAP: 15.65, WIND: 1.3648194766916872} +- {DAY: 2010-07-01, E0: 0.533, ELEV: 440.0, ES0: 0.462, ET0: 0.47800000000000004, + IRRAD: 25266000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.7, + TMAX: 28.2, TMIN: 13.2, VAP: 14.63, WIND: 0.861991248436855} +- {DAY: 2010-07-02, E0: 0.597, ELEV: 440.0, ES0: 0.518, ET0: 0.5349999999999999, IRRAD: 27426000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.2, TMAX: 30.2, + TMIN: 14.2, VAP: 14.87, WIND: 0.9338238524732597} +- {DAY: 2010-07-03, E0: 0.614, ELEV: 440.0, ES0: 0.537, ET0: 0.5519999999999999, IRRAD: 26263000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.1, TMAX: 30.8, + TMIN: 15.4, VAP: 15.51, WIND: 1.2929868726552827} +- {DAY: 2010-07-04, E0: 0.509, ELEV: 440.0, ES0: 0.449, ET0: 0.457, IRRAD: 20494000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 22.45, TMAX: 28.9, + TMIN: 16.0, VAP: 17.26, WIND: 1.5084846847644964} +- {DAY: 2010-07-05, E0: 0.489, ELEV: 440.0, ES0: 0.43600000000000005, ET0: 0.409, + IRRAD: 18435000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 22.0, + TMAX: 26.7, TMIN: 17.3, VAP: 17.84, WIND: 1.6521498928373055} +- {DAY: 2010-07-06, E0: 0.454, ELEV: 440.0, ES0: 0.40499999999999997, ET0: 0.381, + IRRAD: 18109000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.049999999999997, + TMAX: 20.4, TMIN: 15.7, VAP: 13.45, WIND: 2.2268107251285425} +- {DAY: 2010-07-07, E0: 0.40499999999999997, ELEV: 440.0, ES0: 0.352, ET0: 0.377, + IRRAD: 21158000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.1, + TMAX: 22.4, TMIN: 7.8, VAP: 10.22, WIND: 1.077489060546069} +- {DAY: 2010-07-08, E0: 0.5599999999999999, ELEV: 440.0, ES0: 0.484, ET0: 0.505, IRRAD: 28373000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.0, TMAX: 27.4, + TMIN: 8.6, VAP: 11.33, WIND: 1.0056564565096642} +- {DAY: 2010-07-09, E0: 0.609, ELEV: 440.0, ES0: 0.5269999999999999, ET0: 0.55, IRRAD: 28929000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 30.9, + TMIN: 11.4, VAP: 13.69, WIND: 0.9338238524732597} +- {DAY: 2010-07-10, E0: 0.619, ELEV: 440.0, ES0: 0.5389999999999999, ET0: 0.5780000000000001, + IRRAD: 27293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.25, + TMAX: 32.1, TMIN: 14.4, VAP: 15.14, WIND: 1.2929868726552827} +- {DAY: 2010-07-11, E0: 0.671, ELEV: 440.0, ES0: 0.587, ET0: 0.628, IRRAD: 28557000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 24.1, TMAX: 33.7, + TMIN: 14.5, VAP: 13.93, WIND: 1.4366520807280918} +- {DAY: 2010-07-12, E0: 0.669, ELEV: 440.0, ES0: 0.589, ET0: 0.617, IRRAD: 27106000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 24.45, TMAX: 33.5, + TMIN: 15.4, VAP: 16.08, WIND: 1.5803172888009012} +- {DAY: 2010-07-13, E0: 0.5700000000000001, ELEV: 440.0, ES0: 0.506, ET0: 0.514, IRRAD: 21652000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 23.65, TMAX: 29.1, + TMIN: 18.2, VAP: 17.03, WIND: 1.939480308982924} +- {DAY: 2010-07-14, E0: 0.633, ELEV: 440.0, ES0: 0.5509999999999999, ET0: 0.579, IRRAD: 27607000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 24.0, TMAX: 32.9, + TMIN: 15.1, VAP: 16.42, WIND: 1.1493216645824735} +- {DAY: 2010-07-15, E0: 0.43499999999999994, ELEV: 440.0, ES0: 0.39, ET0: 0.376, IRRAD: 15587000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.75, TMAX: 26.0, + TMIN: 19.5, VAP: 17.94, WIND: 1.5803172888009012} +- {DAY: 2010-07-16, E0: 0.645, ELEV: 440.0, ES0: 0.5650000000000001, ET0: 0.585, IRRAD: 26895000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 24.25, TMAX: 33.4, + TMIN: 15.1, VAP: 18.14, WIND: 1.4366520807280918} +- {DAY: 2010-07-17, E0: 0.391, ELEV: 440.0, ES0: 0.35, ET0: 0.331, IRRAD: 14872000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.31, SNOWDEPTH: .nan, TEMP: 21.55, TMAX: 24.6, + TMIN: 18.5, VAP: 17.36, WIND: 1.8676477049465194} +- {DAY: 2010-07-18, E0: 0.371, ELEV: 440.0, ES0: 0.329, ET0: 0.316, IRRAD: 15735000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.200000000000003, + TMAX: 21.1, TMIN: 13.3, VAP: 14.0, WIND: 1.72398249687371} +- {DAY: 2010-07-19, E0: 0.45499999999999996, ELEV: 440.0, ES0: 0.399, ET0: 0.40099999999999997, + IRRAD: 21342000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.2, + TMAX: 23.4, TMIN: 11.0, VAP: 12.17, WIND: 1.939480308982924} +- {DAY: 2010-07-20, E0: 0.5469999999999999, ELEV: 440.0, ES0: 0.477, ET0: 0.485, IRRAD: 25767000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.0, TMAX: 25.9, + TMIN: 12.1, VAP: 14.23, WIND: 1.7958151009101146} +- {DAY: 2010-07-21, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.509, ET0: 0.517, IRRAD: 26623000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.85, TMAX: 31.2, + TMIN: 14.5, VAP: 16.25, WIND: 0.861991248436855} +- {DAY: 2010-07-22, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.516, ET0: 0.534, IRRAD: 23571000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 24.200000000000003, + TMAX: 31.8, TMIN: 16.6, VAP: 17.94, WIND: 1.5803172888009012} +- {DAY: 2010-07-23, E0: 0.266, ELEV: 440.0, ES0: 0.242, ET0: 0.23199999999999998, + IRRAD: 8448000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.6, SNOWDEPTH: .nan, TEMP: 20.0, + TMAX: 22.4, TMIN: 17.6, VAP: 18.07, WIND: 2.0113129130193284} +- {DAY: 2010-07-24, E0: 0.21800000000000003, ELEV: 440.0, ES0: 0.199, ET0: 0.197, + IRRAD: 7503000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 15.85, + TMAX: 18.0, TMIN: 13.7, VAP: 14.26, WIND: 2.442308537237756} +- {DAY: 2010-07-25, E0: 0.393, ELEV: 440.0, ES0: 0.346, ET0: 0.344, IRRAD: 18998000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 18.8, + TMIN: 9.3, VAP: 10.18, WIND: 1.939480308982924} +- {DAY: 2010-07-26, E0: 0.34700000000000003, ELEV: 440.0, ES0: 0.306, ET0: 0.301, + IRRAD: 16015000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.899999999999999, + TMAX: 20.7, TMIN: 9.1, VAP: 11.9, WIND: 1.3648194766916872} +- {DAY: 2010-07-27, E0: 0.367, ELEV: 440.0, ES0: 0.324, ET0: 0.305, IRRAD: 16530000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 16.35, TMAX: 21.3, + TMIN: 11.4, VAP: 13.79, WIND: 1.3648194766916872} +- {DAY: 2010-07-28, E0: 0.282, ELEV: 440.0, ES0: 0.254, ET0: 0.24300000000000002, + IRRAD: 10520000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16999999999999998, SNOWDEPTH: .nan, + TEMP: 16.9, TMAX: 20.4, TMIN: 13.4, VAP: 15.27, WIND: 2.65780634934697} +- {DAY: 2010-07-29, E0: 0.273, ELEV: 440.0, ES0: 0.244, ET0: 0.22999999999999998, + IRRAD: 11067000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 16.549999999999997, + TMAX: 18.9, TMIN: 14.2, VAP: 14.84, WIND: 1.7958151009101146} +- {DAY: 2010-07-30, E0: 0.312, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.258, + IRRAD: 13224000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.049999999999997, + TMAX: 19.4, TMIN: 12.7, VAP: 13.25, WIND: 1.221154268618878} +- {DAY: 2010-07-31, E0: 0.48200000000000004, ELEV: 440.0, ES0: 0.414, ET0: 0.42800000000000005, + IRRAD: 26033000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.35, + TMAX: 24.1, TMIN: 8.6, VAP: 12.21, WIND: 1.221154268618878} +- {DAY: 2010-08-01, E0: 0.511, ELEV: 440.0, ES0: 0.44000000000000006, ET0: 0.46699999999999997, + IRRAD: 25874000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.75, + TMAX: 27.3, TMIN: 10.2, VAP: 13.62, WIND: 1.221154268618878} +- {DAY: 2010-08-02, E0: 0.301, ELEV: 440.0, ES0: 0.268, ET0: 0.258, IRRAD: 12301000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.8699999999999999, SNOWDEPTH: .nan, TEMP: 19.15, + TMAX: 23.4, TMIN: 14.9, VAP: 17.5, WIND: 1.221154268618878} +- {DAY: 2010-08-03, E0: 0.315, ELEV: 440.0, ES0: 0.282, ET0: 0.263, IRRAD: 12311000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 20.0, + TMIN: 16.3, VAP: 15.81, WIND: 1.8676477049465194} +- {DAY: 2010-08-04, E0: 0.4, ELEV: 440.0, ES0: 0.34900000000000003, ET0: 0.333, IRRAD: 19963000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.4, TMAX: 21.6, + TMIN: 9.2, VAP: 12.34, WIND: 1.1493216645824735} +- {DAY: 2010-08-05, E0: 0.255, ELEV: 440.0, ES0: 0.227, ET0: 0.21800000000000003, + IRRAD: 10993000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.2, + TMAX: 20.4, TMIN: 10.0, VAP: 14.13, WIND: 1.5084846847644964} +- {DAY: 2010-08-06, E0: 0.121, ELEV: 440.0, ES0: 0.10800000000000001, ET0: 0.12, IRRAD: 4960000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.8, SNOWDEPTH: .nan, TEMP: 15.5, TMAX: 16.8, + TMIN: 14.2, VAP: 16.08, WIND: 1.7958151009101146} +- {DAY: 2010-08-07, E0: 0.17099999999999999, ELEV: 440.0, ES0: 0.154, ET0: 0.155, + IRRAD: 6510000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.8, + TMAX: 18.0, TMIN: 13.6, VAP: 15.27, WIND: 2.0113129130193284} +- {DAY: 2010-08-08, E0: 0.374, ELEV: 440.0, ES0: 0.32999999999999996, ET0: 0.314, + IRRAD: 17177000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 16.25, + TMAX: 22.0, TMIN: 10.5, VAP: 13.93, WIND: 1.72398249687371} +- {DAY: 2010-08-09, E0: 0.384, ELEV: 440.0, ES0: 0.339, ET0: 0.331, IRRAD: 16768000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, TMAX: 22.1, + TMIN: 13.2, VAP: 13.96, WIND: 1.7958151009101146} +- {DAY: 2010-08-10, E0: 0.34900000000000003, ELEV: 440.0, ES0: 0.304, ET0: 0.316, + IRRAD: 17022000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.0, + TMAX: 24.6, TMIN: 9.4, VAP: 13.59, WIND: 1.077489060546069} +- {DAY: 2010-08-11, E0: 0.35, ELEV: 440.0, ES0: 0.307, ET0: 0.3, IRRAD: 15774000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 25.0, + TMIN: 11.3, VAP: 15.41, WIND: 1.077489060546069} +- {DAY: 2010-08-12, E0: 0.311, ELEV: 440.0, ES0: 0.275, ET0: 0.262, IRRAD: 13152000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 18.55, TMAX: 22.8, + TMIN: 14.3, VAP: 17.13, WIND: 1.6521498928373055} +- {DAY: 2010-08-13, E0: 0.187, ELEV: 440.0, ES0: 0.16699999999999998, ET0: 0.16599999999999998, + IRRAD: 7020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.8, SNOWDEPTH: .nan, TEMP: 17.95, + TMAX: 20.0, TMIN: 15.9, VAP: 17.3, WIND: 1.221154268618878} +- {DAY: 2010-08-14, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.24500000000000002, + IRRAD: 12078000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, + TMAX: 20.7, TMIN: 14.6, VAP: 16.32, WIND: 2.298643329164947} +- {DAY: 2010-08-15, E0: 0.414, ELEV: 440.0, ES0: 0.369, ET0: 0.374, IRRAD: 15896000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 20.85, TMAX: 25.1, + TMIN: 16.6, VAP: 16.49, WIND: 2.442308537237756} +- {DAY: 2010-08-16, E0: 0.31, ELEV: 440.0, ES0: 0.277, ET0: 0.258, IRRAD: 12819000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 15.8, TMAX: 18.3, + TMIN: 13.3, VAP: 13.45, WIND: 2.5859737453105653} +- {DAY: 2010-08-17, E0: 0.127, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.132, + IRRAD: 4005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.76, SNOWDEPTH: .nan, TEMP: 13.75, + TMAX: 14.9, TMIN: 12.6, VAP: 13.49, WIND: 3.663462805856634} +- {DAY: 2010-08-18, E0: 0.154, ELEV: 440.0, ES0: 0.141, ET0: 0.155, IRRAD: 5067000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.700000000000001, + TMAX: 17.1, TMIN: 12.3, VAP: 13.89, WIND: 2.7296389533833745} +- {DAY: 2010-08-19, E0: 0.361, ELEV: 440.0, ES0: 0.319, ET0: 0.318, IRRAD: 15911000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.65, TMAX: 20.7, + TMIN: 12.6, VAP: 12.71, WIND: 2.154978121092138} +- {DAY: 2010-08-20, E0: 0.391, ELEV: 440.0, ES0: 0.33199999999999996, ET0: 0.361, + IRRAD: 22793000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.5, + TMAX: 25.3, TMIN: 7.7, VAP: 13.12, WIND: 0.861991248436855} +- {DAY: 2010-08-21, E0: 0.426, ELEV: 440.0, ES0: 0.364, ET0: 0.39, IRRAD: 22795000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.25, TMAX: 27.3, + TMIN: 11.2, VAP: 15.58, WIND: 1.0056564565096642} +- {DAY: 2010-08-22, E0: 0.437, ELEV: 440.0, ES0: 0.376, ET0: 0.39, IRRAD: 21331000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.1, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 29.1, + TMIN: 13.2, VAP: 17.94, WIND: 1.077489060546069} +- {DAY: 2010-08-23, E0: 0.262, ELEV: 440.0, ES0: 0.231, ET0: 0.24300000000000002, + IRRAD: 11294000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.11000000000000001, SNOWDEPTH: .nan, + TEMP: 19.6, TMAX: 24.1, TMIN: 15.1, VAP: 18.71, WIND: 1.939480308982924} +- {DAY: 2010-08-24, E0: 0.31, ELEV: 440.0, ES0: 0.282, ET0: 0.27799999999999997, IRRAD: 10039000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 20.0, TMAX: 22.2, + TMIN: 17.8, VAP: 16.79, WIND: 2.65780634934697} +- {DAY: 2010-08-25, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.29, ET0: 0.294, IRRAD: 16736000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.75, TMAX: 19.2, + TMIN: 10.3, VAP: 11.97, WIND: 2.298643329164947} +- {DAY: 2010-08-26, E0: 0.315, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.29300000000000004, + IRRAD: 13589000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 18.45, + TMAX: 26.0, TMIN: 10.9, VAP: 16.35, WIND: 1.939480308982924} +- {DAY: 2010-08-27, E0: 0.256, ELEV: 440.0, ES0: 0.229, ET0: 0.22599999999999998, + IRRAD: 10050000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.36, SNOWDEPTH: .nan, TEMP: 18.0, + TMAX: 21.1, TMIN: 14.9, VAP: 17.53, WIND: 3.663462805856634} +- {DAY: 2010-08-28, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.223, ET0: 0.22000000000000003, + IRRAD: 10561000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.0, + TMAX: 15.6, TMIN: 12.4, VAP: 11.9, WIND: 2.65780634934697} +- {DAY: 2010-08-29, E0: 0.252, ELEV: 440.0, ES0: 0.225, ET0: 0.209, IRRAD: 11595000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 15.5, + TMIN: 8.4, VAP: 10.76, WIND: 2.7296389533833745} +- {DAY: 2010-08-30, E0: 0.176, ELEV: 440.0, ES0: 0.157, ET0: 0.141, IRRAD: 8652000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.47000000000000003, SNOWDEPTH: .nan, TEMP: 9.399999999999999, + TMAX: 11.2, TMIN: 7.6, VAP: 9.95, WIND: 2.9451367654925877} +- {DAY: 2010-08-31, E0: 0.196, ELEV: 440.0, ES0: 0.174, ET0: 0.178, IRRAD: 10017000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 14.6, + TMIN: 7.6, VAP: 10.35, WIND: 2.083145517055733} +- {DAY: 2010-09-01, E0: 0.16799999999999998, ELEV: 440.0, ES0: 0.149, ET0: 0.142, + IRRAD: 8681000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 10.0, + TMAX: 14.4, TMIN: 5.6, VAP: 10.66, WIND: 1.72398249687371} +- {DAY: 2010-09-02, E0: 0.175, ELEV: 440.0, ES0: 0.154, ET0: 0.147, IRRAD: 8821000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 11.65, TMAX: 15.8, + TMIN: 7.5, VAP: 11.7, WIND: 1.0056564565096642} +- {DAY: 2010-09-03, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.21400000000000002, + ET0: 0.211, IRRAD: 14382000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.35, TMAX: 17.2, TMIN: 7.5, VAP: 11.33, WIND: 1.221154268618878} +- {DAY: 2010-09-04, E0: 0.225, ELEV: 440.0, ES0: 0.20099999999999998, ET0: 0.194, + IRRAD: 9609000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 13.15, + TMAX: 16.6, TMIN: 9.7, VAP: 10.66, WIND: 1.5084846847644964} +- {DAY: 2010-09-05, E0: 0.306, ELEV: 440.0, ES0: 0.262, ET0: 0.277, IRRAD: 19211000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 16.2, + TMIN: 6.0, VAP: 9.21, WIND: 2.65780634934697} +- {DAY: 2010-09-06, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.24900000000000003, + ET0: 0.272, IRRAD: 18341000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.75, TMAX: 15.9, TMIN: 5.6, VAP: 8.77, WIND: 2.5859737453105653} +- {DAY: 2010-09-07, E0: 0.24, ELEV: 440.0, ES0: 0.21000000000000002, ET0: 0.193, IRRAD: 13266000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 9.75, TMAX: 14.3, + TMIN: 5.2, VAP: 9.88, WIND: 3.663462805856634} +- {DAY: 2010-09-08, E0: 0.22000000000000003, ELEV: 440.0, ES0: 0.196, ET0: 0.152, + IRRAD: 9667000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 12.8, + TMAX: 14.9, TMIN: 10.7, VAP: 12.91, WIND: 3.2324671816382065} +- {DAY: 2010-09-09, E0: 0.131, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.131, + IRRAD: 5725000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 13.65, + TMAX: 15.8, TMIN: 11.5, VAP: 13.18, WIND: 1.7958151009101146} +- {DAY: 2010-09-10, E0: 0.211, ELEV: 440.0, ES0: 0.184, ET0: 0.185, IRRAD: 10961000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.200000000000001, + TMAX: 18.6, TMIN: 9.8, VAP: 12.95, WIND: 1.2929868726552827} +- {DAY: 2010-09-11, E0: 0.286, ELEV: 440.0, ES0: 0.242, ET0: 0.253, IRRAD: 17976000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 21.0, + TMIN: 7.1, VAP: 11.57, WIND: 1.0056564565096642} +- {DAY: 2010-09-12, E0: 0.246, ELEV: 440.0, ES0: 0.205, ET0: 0.238, IRRAD: 16699000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, TMAX: 21.7, + TMIN: 6.2, VAP: 11.67, WIND: 0.861991248436855} +- {DAY: 2010-09-13, E0: 0.101, ELEV: 440.0, ES0: 0.088, ET0: 0.11699999999999999, + IRRAD: 5574000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.4, + TMAX: 15.9, TMIN: 8.9, VAP: 12.58, WIND: 1.221154268618878} +- {DAY: 2010-09-14, E0: 0.12, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.10300000000000001, + IRRAD: 5860000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.2, + TMAX: 13.8, TMIN: 8.6, VAP: 12.17, WIND: 2.370475933201351} +- {DAY: 2010-09-15, E0: 0.124, ELEV: 440.0, ES0: 0.11499999999999999, ET0: 0.132, + IRRAD: 3950000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 13.55, + TMAX: 15.2, TMIN: 11.9, VAP: 12.81, WIND: 2.801471557419779} +- {DAY: 2010-09-16, E0: 0.24100000000000002, ELEV: 440.0, ES0: 0.21600000000000003, + ET0: 0.22400000000000003, IRRAD: 10417000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, + SNOWDEPTH: .nan, TEMP: 13.149999999999999, TMAX: 16.4, TMIN: 9.9, VAP: 10.32, WIND: 2.5859737453105653} +- {DAY: 2010-09-17, E0: 0.195, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.192, + IRRAD: 11312000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, + TMAX: 15.9, TMIN: 5.1, VAP: 9.17, WIND: 1.939480308982924} +- {DAY: 2010-09-18, E0: 0.182, ELEV: 440.0, ES0: 0.152, ET0: 0.176, IRRAD: 14229000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.25, TMAX: 14.7, + TMIN: 1.8, VAP: 8.29, WIND: 1.221154268618878} +- {DAY: 2010-09-19, E0: 0.20099999999999998, ELEV: 440.0, ES0: 0.16899999999999998, + ET0: 0.186, IRRAD: 14777000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 8.75, TMAX: 15.2, TMIN: 2.3, VAP: 7.79, WIND: 1.077489060546069} +- {DAY: 2010-09-20, E0: 0.176, ELEV: 440.0, ES0: 0.143, ET0: 0.19, IRRAD: 14819000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 18.3, + TMIN: 1.3, VAP: 9.21, WIND: 1.0056564565096642} +- {DAY: 2010-09-21, E0: 0.21000000000000002, ELEV: 440.0, ES0: 0.16999999999999998, + ET0: 0.225, IRRAD: 17280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.399999999999999, TMAX: 20.9, TMIN: 3.9, VAP: 9.85, WIND: 0.9338238524732597} +- {DAY: 2010-09-22, E0: 0.215, ELEV: 440.0, ES0: 0.174, ET0: 0.23500000000000001, + IRRAD: 16698000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.45, + TMAX: 20.8, TMIN: 6.1, VAP: 10.93, WIND: 1.3648194766916872} +- {DAY: 2010-09-23, E0: 0.191, ELEV: 440.0, ES0: 0.155, ET0: 0.198, IRRAD: 14630000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.600000000000001, + TMAX: 20.6, TMIN: 6.6, VAP: 12.24, WIND: 1.077489060546069} +- {DAY: 2010-09-24, E0: 0.20299999999999999, ELEV: 440.0, ES0: 0.17099999999999999, + ET0: 0.207, IRRAD: 12696000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, + TEMP: 14.600000000000001, TMAX: 21.3, TMIN: 7.9, VAP: 12.91, WIND: 1.6521498928373055} +- {DAY: 2010-09-25, E0: 0.072, ELEV: 440.0, ES0: 0.064, ET0: 0.08299999999999999, + IRRAD: 3235000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 12.15, + TMAX: 13.3, TMIN: 11.0, VAP: 12.81, WIND: 1.8676477049465194} +- {DAY: 2010-09-26, E0: 0.118, ELEV: 440.0, ES0: 0.10700000000000001, ET0: 0.11100000000000002, + IRRAD: 5247000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.95, + TMAX: 10.9, TMIN: 7.0, VAP: 9.37, WIND: 2.5859737453105653} +- {DAY: 2010-09-27, E0: 0.181, ELEV: 440.0, ES0: 0.16, ET0: 0.153, IRRAD: 9271000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 8.95, TMAX: 12.4, + TMIN: 5.5, VAP: 9.07, WIND: 3.44796499374742} +- {DAY: 2010-09-28, E0: 0.063, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.057999999999999996, + IRRAD: 3652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 8.25, + TMAX: 9.1, TMIN: 7.4, VAP: 10.45, WIND: 3.0169693695289928} +- {DAY: 2010-09-29, E0: 0.153, ELEV: 440.0, ES0: 0.134, ET0: 0.127, IRRAD: 8714000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.9, TMAX: 12.1, + TMIN: 7.7, VAP: 9.61, WIND: 1.4366520807280918} +- {DAY: 2010-09-30, E0: 0.13999999999999999, ELEV: 440.0, ES0: 0.123, ET0: 0.11299999999999999, + IRRAD: 7718000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.2, + TMAX: 12.3, TMIN: 4.1, VAP: 8.46, WIND: 1.0056564565096642} +- {DAY: 2010-10-01, E0: 0.06, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.071, + IRRAD: 3340000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: .nan, TEMP: 7.55, + TMAX: 10.2, TMIN: 4.9, VAP: 9.54, WIND: 1.221154268618878} +- {DAY: 2010-10-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10200000000000001, + ET0: 0.099, IRRAD: 6112000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, + TEMP: 10.4, TMAX: 13.8, TMIN: 7.0, VAP: 11.16, WIND: 1.5803172888009012} +- {DAY: 2010-10-03, E0: 0.152, ELEV: 440.0, ES0: 0.128, ET0: 0.134, IRRAD: 10165000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 12.9, + TMIN: 9.6, VAP: 11.19, WIND: 3.304299785674611} +- {DAY: 2010-10-04, E0: 0.142, ELEV: 440.0, ES0: 0.118, ET0: 0.125, IRRAD: 10677000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, TMAX: 12.3, + TMIN: 8.7, VAP: 10.96, WIND: 3.735295409893039} +- {DAY: 2010-10-05, E0: 0.121, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.092, + IRRAD: 6490000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 13.2, TMIN: 9.4, VAP: 12.07, WIND: 2.154978121092138} +- {DAY: 2010-10-06, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.074, ET0: 0.077, + IRRAD: 3969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.0, + TMAX: 12.2, TMIN: 9.8, VAP: 12.0, WIND: 2.0113129130193284} +- {DAY: 2010-10-07, E0: 0.072, ELEV: 440.0, ES0: 0.065, ET0: 0.079, IRRAD: 3115000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.2, TMAX: 11.9, + TMIN: 10.5, VAP: 11.94, WIND: 2.370475933201351} +- {DAY: 2010-10-08, E0: 0.178, ELEV: 440.0, ES0: 0.148, ET0: 0.21400000000000002, + IRRAD: 12854000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.700000000000001, + TMAX: 16.1, TMIN: 7.3, VAP: 9.58, WIND: 3.663462805856634} +- {DAY: 2010-10-09, E0: 0.20400000000000001, ELEV: 440.0, ES0: 0.175, ET0: 0.23700000000000002, + IRRAD: 12656000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.600000000000001, + TMAX: 15.3, TMIN: 5.9, VAP: 7.55, WIND: 3.44796499374742} +- {DAY: 2010-10-10, E0: 0.16399999999999998, ELEV: 440.0, ES0: 0.135, ET0: 0.213, + IRRAD: 13447000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.85, + TMAX: 14.0, TMIN: 3.7, VAP: 6.58, WIND: 2.8733041614561836} +- {DAY: 2010-10-11, E0: 0.16, ELEV: 440.0, ES0: 0.131, ET0: 0.21200000000000002, IRRAD: 13109000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.9, TMAX: 14.5, + TMIN: 3.3, VAP: 6.85, WIND: 3.0169693695289928} +- {DAY: 2010-10-12, E0: 0.123, ELEV: 440.0, ES0: 0.096, ET0: 0.16299999999999998, + IRRAD: 13005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.449999999999999, + TMAX: 14.2, TMIN: 0.7, VAP: 7.32, WIND: 2.5141411412741608} +- {DAY: 2010-10-13, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.092, ET0: 0.134, + IRRAD: 11311000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.85, + TMAX: 12.1, TMIN: 1.6, VAP: 7.62, WIND: 2.8733041614561836} +- {DAY: 2010-10-14, E0: 0.073, ELEV: 440.0, ES0: 0.052000000000000005, ET0: 0.10700000000000001, + IRRAD: 10652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.5, + TMAX: 12.4, TMIN: -1.4, VAP: 7.05, WIND: 1.2929868726552827} +- {DAY: 2010-10-15, E0: 0.052000000000000005, ELEV: 440.0, ES0: 0.045, ET0: 0.05, + IRRAD: 3788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.43, SNOWDEPTH: .nan, TEMP: 4.2, + TMAX: 8.6, TMIN: -0.2, VAP: 8.19, WIND: 0.9338238524732597} +- {DAY: 2010-10-16, E0: 0.054000000000000006, ELEV: 440.0, ES0: 0.047, ET0: 0.057999999999999996, + IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.31, SNOWDEPTH: .nan, TEMP: 6.7, + TMAX: 7.5, TMIN: 5.9, VAP: 8.94, WIND: 1.1493216645824735} +- {DAY: 2010-10-17, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.076, ET0: 0.08399999999999999, + IRRAD: 3537000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 6.3, + TMAX: 7.5, TMIN: 5.1, VAP: 7.72, WIND: 2.442308537237756} +- {DAY: 2010-10-18, E0: 0.08499999999999999, ELEV: 440.0, ES0: 0.075, ET0: 0.074, + IRRAD: 5197000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.9, + TMAX: 7.5, TMIN: 2.3, VAP: 7.05, WIND: 1.3648194766916872} +- {DAY: 2010-10-19, E0: 0.061, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.06999999999999999, + IRRAD: 3878000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 4.95, + TMAX: 7.2, TMIN: 2.7, VAP: 7.55, WIND: 2.5859737453105653} +- {DAY: 2010-10-20, E0: 0.068, ELEV: 440.0, ES0: 0.062, ET0: 0.072, IRRAD: 3005000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.52, SNOWDEPTH: .nan, TEMP: 5.449999999999999, + TMAX: 6.6, TMIN: 4.3, VAP: 7.72, WIND: 3.0169693695289928} +- {DAY: 2010-10-21, E0: 0.099, ELEV: 440.0, ES0: 0.089, ET0: 0.10200000000000001, + IRRAD: 5320000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 3.75, + TMAX: 6.1, TMIN: 1.4, VAP: 5.87, WIND: 2.8733041614561836} +- {DAY: 2010-10-22, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.04, ET0: 0.073, IRRAD: 8983000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.1, TMAX: 6.9, + TMIN: -2.7, VAP: 5.7, WIND: 1.5084846847644964} +- {DAY: 2010-10-23, E0: 0.037, ELEV: 440.0, ES0: 0.025, ET0: 0.06, IRRAD: 6012000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.21000000000000002, SNOWDEPTH: .nan, TEMP: 3.6999999999999997, + TMAX: 9.6, TMIN: -2.2, VAP: 7.35, WIND: 1.6521498928373055} +- {DAY: 2010-10-24, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.049, ET0: 0.066, + IRRAD: 2853000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 6.35, + TMAX: 7.6, TMIN: 5.1, VAP: 8.36, WIND: 2.370475933201351} +- {DAY: 2010-10-25, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.05, ET0: 0.05600000000000001, + IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 3.8, + TMAX: 5.6, TMIN: 2.0, VAP: 6.78, WIND: 1.1493216645824735} +- {DAY: 2010-10-26, E0: 0.051000000000000004, ELEV: 440.0, ES0: 0.040999999999999995, + ET0: 0.06, IRRAD: 5809000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, + TEMP: 2.4, TMAX: 6.8, TMIN: -2.0, VAP: 6.07, WIND: 1.1493216645824735} +- {DAY: 2010-10-27, E0: 0.047, ELEV: 440.0, ES0: 0.031, ET0: 0.061, IRRAD: 9014000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.5, TMAX: 8.1, + TMIN: -3.1, VAP: 5.87, WIND: 1.1493216645824735} +- {DAY: 2010-10-28, E0: 0.071, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.08399999999999999, + IRRAD: 7497000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.3999999999999995, + TMAX: 10.6, TMIN: 0.2, VAP: 6.58, WIND: 1.4366520807280918} +- {DAY: 2010-10-29, E0: 0.032, ELEV: 440.0, ES0: 0.012, ET0: 0.087, IRRAD: 9759000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.65, TMAX: 14.4, + TMIN: -1.1, VAP: 6.78, WIND: 1.077489060546069} +- {DAY: 2010-10-30, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.018, ET0: 0.075, + IRRAD: 8668000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.8500000000000005, + TMAX: 11.9, TMIN: -0.2, VAP: 7.01, WIND: 1.3648194766916872} +- {DAY: 2010-10-31, E0: 0.046, ELEV: 440.0, ES0: 0.033, ET0: 0.06899999999999999, + IRRAD: 6399000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.6499999999999995, + TMAX: 11.6, TMIN: 1.7, VAP: 8.06, WIND: 1.72398249687371} +- {DAY: 2010-11-01, E0: 0.073, ELEV: 440.0, ES0: 0.061, ET0: 0.071, IRRAD: 5266000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 14.3, + TMIN: 5.3, VAP: 9.64, WIND: 1.077489060546069} +- {DAY: 2010-11-02, E0: 0.019, ELEV: 440.0, ES0: 0.012, ET0: 0.04, IRRAD: 3367000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 5.45, TMAX: 8.3, + TMIN: 2.6, VAP: 8.87, WIND: 1.8676477049465194} +- {DAY: 2010-11-03, E0: 0.062, ELEV: 440.0, ES0: 0.054000000000000006, ET0: 0.074, + IRRAD: 3638000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 8.4, + TMAX: 11.8, TMIN: 5.0, VAP: 9.74, WIND: 3.1606345776018023} +- {DAY: 2010-11-04, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.11000000000000001, + ET0: 0.141, IRRAD: 1972000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.9, TMAX: 15.4, TMIN: 10.4, VAP: 11.9, WIND: 4.597286658329894} +- {DAY: 2010-11-05, E0: 0.154, ELEV: 440.0, ES0: 0.144, ET0: 0.177, IRRAD: 4424000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.5, TMAX: 14.7, + TMIN: 12.3, VAP: 10.86, WIND: 4.166291034111466} +- {DAY: 2010-11-06, E0: 0.10800000000000001, ELEV: 440.0, ES0: 0.10400000000000001, + ET0: 0.146, IRRAD: 1597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, + TEMP: 11.5, TMAX: 12.3, TMIN: 10.7, VAP: 9.88, WIND: 3.519797597783825} +- {DAY: 2010-11-07, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.03, ET0: 0.056999999999999995, + IRRAD: 1958000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 8.149999999999999, + TMAX: 10.2, TMIN: 6.1, VAP: 9.68, WIND: 1.5803172888009012} +- {DAY: 2010-11-08, E0: 0.037, ELEV: 440.0, ES0: 0.033, ET0: 0.045, IRRAD: 2280000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 4.6, TMAX: 5.6, + TMIN: 3.6, VAP: 7.62, WIND: 1.5084846847644964} +- {DAY: 2010-11-09, E0: 0.032, ELEV: 440.0, ES0: 0.020999999999999998, ET0: 0.048, + IRRAD: 5597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.0, + TMAX: 8.1, TMIN: 1.9, VAP: 7.28, WIND: 1.5084846847644964} +- {DAY: 2010-11-10, E0: 0.032, ELEV: 440.0, ES0: 0.026000000000000002, ET0: 0.03, + IRRAD: 3253000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 2.6999999999999997, + TMAX: 5.8, TMIN: -0.4, VAP: 7.18, WIND: 1.221154268618878} +- {DAY: 2010-11-11, E0: 0.046, ELEV: 440.0, ES0: 0.039, ET0: 0.05500000000000001, + IRRAD: 3562000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.01, SNOWDEPTH: .nan, TEMP: 4.0, + TMAX: 6.3, TMIN: 1.7, VAP: 7.11, WIND: 3.663462805856634} +- {DAY: 2010-11-12, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.02, ET0: 0.040999999999999995, + IRRAD: 3632000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 6.8, + TMAX: 10.0, TMIN: 3.6, VAP: 9.44, WIND: 4.956449678511917} +- {DAY: 2010-11-13, E0: 0.101, ELEV: 440.0, ES0: 0.092, ET0: 0.149, IRRAD: 4082000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.6, TMAX: 16.2, + TMIN: 9.0, VAP: 11.03, WIND: 4.094458430075062} +- {DAY: 2010-11-14, E0: 0.009, ELEV: 440.0, ES0: 0.004, ET0: 0.081, IRRAD: 7485000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 16.8, + TMIN: 5.7, VAP: 9.74, WIND: 1.6521498928373055} +- {DAY: 2010-11-15, E0: 0.040999999999999995, ELEV: 440.0, ES0: 0.032, ET0: 0.06, + IRRAD: 4089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: .nan, TEMP: 8.45, + TMAX: 12.2, TMIN: 4.7, VAP: 9.71, WIND: 2.083145517055733} +- {DAY: 2010-11-16, E0: 0.02, ELEV: 440.0, ES0: 0.018, ET0: 0.047, IRRAD: 1177000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.13, SNOWDEPTH: .nan, TEMP: 5.9, TMAX: 6.0, + TMIN: 5.8, VAP: 8.53, WIND: 2.298643329164947} +- {DAY: 2010-11-17, E0: 0.013000000000000001, ELEV: 440.0, ES0: 0.011, ET0: 0.033, + IRRAD: 1433000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 4.4, + TMAX: 5.2, TMIN: 3.6, VAP: 8.03, WIND: 1.7958151009101146} +- {DAY: 2010-11-18, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.040999999999999995, + IRRAD: 1288000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 4.800000000000001, + TMAX: 4.9, TMIN: 4.7, VAP: 7.89, WIND: 1.5803172888009012} +- {DAY: 2010-11-19, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.03, + IRRAD: 1611000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 3.1500000000000004, + TMAX: 4.9, TMIN: 1.4, VAP: 7.42, WIND: 1.0056564565096642} +- {DAY: 2010-11-20, E0: 0.024, ELEV: 440.0, ES0: 0.019, ET0: 0.03, IRRAD: 2629000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.95, TMAX: 4.3, + TMIN: 1.6, VAP: 6.88, WIND: 1.5084846847644964} +- {DAY: 2010-11-21, E0: 0.025, ELEV: 440.0, ES0: 0.02, ET0: 0.022, IRRAD: 2790000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 2.75, TMAX: 4.2, + TMIN: 1.3, VAP: 7.18, WIND: 3.376132389711016} +- {DAY: 2010-11-22, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.052000000000000005, + ET0: 0.056999999999999995, IRRAD: 1810000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, + SNOWDEPTH: .nan, TEMP: 5.4, TMAX: 7.0, TMIN: 3.8, VAP: 7.79, WIND: 2.8733041614561836} +- {DAY: 2010-11-23, E0: 0.033, ELEV: 440.0, ES0: 0.031, ET0: 0.036, IRRAD: 1270000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.18, SNOWDEPTH: 0.5, TEMP: 0.8500000000000001, + TMAX: 1.3, TMIN: 0.4, VAP: 6.0, WIND: 3.735295409893039} +- {DAY: 2010-11-24, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.032, ET0: 0.034, + IRRAD: 1628000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.12, SNOWDEPTH: 4.0, TEMP: 1.2, + TMAX: 1.9, TMIN: 0.5, VAP: 6.14, WIND: 3.878960617965848} +- {DAY: 2010-11-25, E0: 0.022, ELEV: 440.0, ES0: 0.016, ET0: 0.03, IRRAD: 3374000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 1.0, TEMP: 0.7499999999999999, + TMAX: 2.3, TMIN: -0.8, VAP: 5.66, WIND: 1.8676477049465194} +- {DAY: 2010-11-26, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.024, + IRRAD: 1677000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 2.0, TEMP: -1.3, + TMAX: -0.2, TMIN: -2.4, VAP: 5.23, WIND: 1.221154268618878} +- {DAY: 2010-11-27, E0: 0.024, ELEV: 440.0, ES0: 0.018, ET0: 0.026000000000000002, + IRRAD: 3588000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 2.0, TEMP: -2.0, + TMAX: -0.4, TMIN: -3.6, VAP: 4.28, WIND: 1.221154268618878} +- {DAY: 2010-11-28, E0: 0.024, ELEV: 440.0, ES0: 0.02, ET0: 0.013000000000000001, + IRRAD: 3194000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 2.0, TEMP: -3.85, + TMAX: -1.5, TMIN: -6.2, VAP: 4.35, WIND: 2.370475933201351} +- {DAY: 2010-11-29, E0: 0.028000000000000004, ELEV: 440.0, ES0: 0.024, ET0: 0.019, + IRRAD: 2553000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 16.0, TEMP: -1.95, + TMAX: -1.0, TMIN: -2.9, VAP: 4.96, WIND: 1.5803172888009012} +- {DAY: 2010-11-30, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.024, ET0: 0.03, + IRRAD: 2146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 19.0, TEMP: -3.8000000000000003, + TMAX: -3.2, TMIN: -4.4, VAP: 3.98, WIND: 2.370475933201351} +- {DAY: 2010-12-01, E0: 0.03, ELEV: 440.0, ES0: 0.028000000000000004, ET0: 0.036, + IRRAD: 1406000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 20.0, TEMP: -6.0, + TMAX: -4.8, TMIN: -7.2, VAP: 3.37, WIND: 4.453621450257085} +- {DAY: 2010-12-02, E0: 0.023, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, + IRRAD: 3010000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -7.95, + TMAX: -5.5, TMIN: -10.4, VAP: 2.87, WIND: 1.939480308982924} +- {DAY: 2010-12-03, E0: 0.019, ELEV: 440.0, ES0: 0.015, ET0: 0.015, IRRAD: 2926000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.100000000000001, + TMAX: -5.4, TMIN: -10.8, VAP: 2.83, WIND: 0.7901586444004506} +- {DAY: 2010-12-04, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.015, + IRRAD: 1788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.6, + TMAX: -5.1, TMIN: -12.1, VAP: 3.14, WIND: 2.0113129130193284} +- {DAY: 2010-12-05, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.01, + IRRAD: 2315000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: 18.0, TEMP: -7.35, + TMAX: -3.7, TMIN: -11.0, VAP: 3.61, WIND: 1.939480308982924} +- {DAY: 2010-12-06, E0: 0.008, ELEV: 440.0, ES0: 0.006, ET0: 0.017, IRRAD: 1609000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.0, SNOWDEPTH: 23.0, TEMP: -1.9999999999999998, + TMAX: 0.1, TMIN: -4.1, VAP: 5.26, WIND: 1.1493216645824735} +- {DAY: 2010-12-07, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.019, IRRAD: 1671000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 25.0, TEMP: 0.0, TMAX: 1.5, + TMIN: -1.5, VAP: 5.93, WIND: 1.0056564565096642} +- {DAY: 2010-12-08, E0: 0.02, ELEV: 440.0, ES0: 0.016, ET0: 0.022, IRRAD: 1933000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 21.0, TEMP: 2.6500000000000004, + TMAX: 4.9, TMIN: 0.4, VAP: 7.11, WIND: 1.5803172888009012} +- {DAY: 2010-12-09, E0: 0.020999999999999998, ELEV: 440.0, ES0: 0.018, ET0: 0.024, + IRRAD: 1529000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: 14.0, TEMP: -2.0, + TMAX: -1.2, TMIN: -2.8, VAP: 4.92, WIND: 4.597286658329894} +- {DAY: 2010-12-10, E0: 0.018, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.028999999999999998, + IRRAD: 3723000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: 14.0, + TEMP: -2.45, TMAX: -2.0, TMIN: -2.9, VAP: 4.28, WIND: 3.0888019735653973} +- {DAY: 2010-12-11, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, + IRRAD: 1355000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: 16.0, TEMP: -0.30000000000000004, + TMAX: 2.3, TMIN: -2.9, VAP: 6.07, WIND: 4.453621450257085} +- {DAY: 2010-12-12, E0: 0.039, ELEV: 440.0, ES0: 0.036, ET0: 0.043, IRRAD: 1668000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.24, SNOWDEPTH: 9.0, TEMP: 1.0499999999999998, + TMAX: 1.4, TMIN: 0.7, VAP: 5.8, WIND: 3.807128013929443} +- {DAY: 2010-12-13, E0: 0.006, ELEV: 440.0, ES0: 0.003, ET0: 0.022, IRRAD: 4070000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 9.0, TEMP: -5.9, TMAX: -5.6, + TMIN: -6.2, VAP: 3.17, WIND: 2.5141411412741608} +- {DAY: 2010-12-14, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.008, + IRRAD: 2280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: 9.0, TEMP: -8.25, + TMAX: -5.4, TMIN: -11.1, VAP: 3.27, WIND: 2.083145517055733} +- {DAY: 2010-12-15, E0: 0.022, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, + IRRAD: 1877000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 9.0, TEMP: -6.65, + TMAX: -6.3, TMIN: -7.0, VAP: 3.34, WIND: 2.801471557419779} +- {DAY: 2010-12-16, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.01, IRRAD: 3137000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 11.0, TEMP: -9.1, + TMAX: -6.2, TMIN: -12.0, VAP: 2.8, WIND: 2.154978121092138} +- {DAY: 2010-12-17, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.016, IRRAD: 1541000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 13.0, TEMP: -7.25, TMAX: -4.9, + TMIN: -9.6, VAP: 3.41, WIND: 1.939480308982924} +- {DAY: 2010-12-18, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, + IRRAD: 3633000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -7.3, + TMAX: -4.1, TMIN: -10.5, VAP: 3.03, WIND: 1.5084846847644964} +- {DAY: 2010-12-19, E0: 0.006, ELEV: 440.0, ES0: 0.004, ET0: 0.009, IRRAD: 1737000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.29, SNOWDEPTH: 13.0, TEMP: -6.75, TMAX: -0.6, + TMIN: -12.9, VAP: 4.01, WIND: 2.154978121092138} +- {DAY: 2010-12-20, E0: 0.036, ELEV: 440.0, ES0: 0.033, ET0: 0.048, IRRAD: 1538000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.41, SNOWDEPTH: 13.0, TEMP: 0.7, TMAX: 2.9, + TMIN: -1.5, VAP: 5.4, WIND: 2.65780634934697} +- {DAY: 2010-12-21, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.018, + IRRAD: 2103000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 13.0, TEMP: -0.19999999999999996, + TMAX: 3.5, TMIN: -3.9, VAP: 5.8, WIND: 1.2929868726552827} +- {DAY: 2010-12-22, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.014000000000000002, + IRRAD: 2105000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -0.44999999999999996, + TMAX: 1.5, TMIN: -2.4, VAP: 5.66, WIND: 1.221154268618878} +- {DAY: 2010-12-23, E0: 0.019, ELEV: 440.0, ES0: 0.016, ET0: 0.014000000000000002, + IRRAD: 2239000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 12.0, TEMP: -0.5, + TMAX: 2.1, TMIN: -3.1, VAP: 5.66, WIND: 1.2929868726552827} +- {DAY: 2010-12-24, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.028999999999999998, + IRRAD: 1140000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: 13.0, TEMP: 0.3, + TMAX: 1.5, TMIN: -0.9, VAP: 5.8, WIND: 2.442308537237756} +- {DAY: 2010-12-25, E0: 0.034, ELEV: 440.0, ES0: 0.032, ET0: 0.031, IRRAD: 2108000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 16.0, TEMP: -4.65, TMAX: -4.5, + TMIN: -4.8, VAP: 3.57, WIND: 2.298643329164947} +- {DAY: 2010-12-26, E0: 0.012, ELEV: 440.0, ES0: 0.009, ET0: 0.012, IRRAD: 2899000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: 16.0, TEMP: -9.95, TMAX: -7.9, + TMIN: -12.0, VAP: 2.6, WIND: 1.6521498928373055} +- {DAY: 2010-12-27, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.017, IRRAD: 1694000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: 16.0, TEMP: -6.5, TMAX: -4.2, + TMIN: -8.8, VAP: 3.54, WIND: 1.72398249687371} +- {DAY: 2010-12-28, E0: 0.016, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.023, + IRRAD: 3146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 16.0, TEMP: -4.65, + TMAX: -2.7, TMIN: -6.6, VAP: 3.41, WIND: 1.4366520807280918} +- {DAY: 2010-12-29, E0: 0.004, ELEV: 440.0, ES0: 0.004, ET0: 0.006, IRRAD: 3716000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 15.0, TEMP: -11.35, TMAX: -8.7, + TMIN: -14.0, VAP: 2.09, WIND: 0.6464934363276413} +- {DAY: 2010-12-30, E0: 0.0, ELEV: 440.0, ES0: 0.0, ET0: 0.0, IRRAD: 5266000.0, LAT: 49.43613, + LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -13.5, TMAX: -8.4, TMIN: -18.6, + VAP: 1.89, WIND: 0.6464934363276413} +- {DAY: 2010-12-31, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.002, + IRRAD: 1689000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 22.0, TEMP: -9.15, + TMAX: -3.4, TMIN: -14.9, VAP: 3.91, WIND: 1.72398249687371} diff --git a/docs/notebooks/test_rootdynamics_wofost72_01.yaml b/docs/notebooks/test_rootdynamics_wofost72_01.yaml new file mode 100644 index 0000000..b0fc306 --- /dev/null +++ b/docs/notebooks/test_rootdynamics_wofost72_01.yaml @@ -0,0 +1,1333 @@ +# Test file for testing the simulation of root dynamics in WOFOST 7.1 +# encoding: UTF-8 +# +# All parameter and variable names and their respective units refer to the +# WOFOST manual available from http://wageningenur.nl/wofost +# +# Test file generated with PCSE 5.3.3: https://doi.org/10.5281/zenodo.1252479 +# +# crop: Sugar beets +# latitude: 49.43613 +# longitude: 12.98528 +# +# Wageningen-UR 2018, allard.dewit@wur.nl +AgroManagement: +- 2010-04-16: + CropCalendar: {crop_end_date: 2010-12-31, crop_end_type: harvest, crop_name: Sugar + beets, crop_start_date: 2010-04-16, crop_start_type: sowing, max_duration: 260, + variety_name: Sugar beets_95118_2010} + StateEvents: null + TimedEvents: null +ExternalStates: +- {DAY: 2010-04-16, DMI: 0.0, DVS: -0.1, FR: 0.2} +- {DAY: 2010-04-17, DMI: 0.0, DVS: -0.09294444444444445, FR: 0.2} +- {DAY: 2010-04-18, DMI: 0.0, DVS: -0.08805555555555557, FR: 0.2} +- {DAY: 2010-04-19, DMI: 0.0, DVS: -0.08200000000000002, FR: 0.2} +- {DAY: 2010-04-20, DMI: 0.0, DVS: -0.07333333333333335, FR: 0.2} +- {DAY: 2010-04-21, DMI: 0.0, DVS: -0.06500000000000002, FR: 0.2} +- {DAY: 2010-04-22, DMI: 0.0, DVS: -0.05994444444444446, FR: 0.2} +- {DAY: 2010-04-23, DMI: 0.0, DVS: -0.057777777777777796, FR: 0.2} +- {DAY: 2010-04-24, DMI: 0.0, DVS: -0.05333333333333335, FR: 0.2} +- {DAY: 2010-04-25, DMI: 0.0, DVS: -0.04600000000000001, FR: 0.2} +- {DAY: 2010-04-26, DMI: 0.0, DVS: -0.03472222222222224, FR: 0.2} +- {DAY: 2010-04-27, DMI: 0.0, DVS: -0.025000000000000015, FR: 0.2} +- {DAY: 2010-04-28, DMI: 0.0, DVS: -0.016722222222222236, FR: 0.2} +- {DAY: 2010-04-29, DMI: 0.0, DVS: -0.007555555555555569, FR: 0.2} +- {DAY: 2010-04-30, DMI: 0.07918267520466496, DVS: 0.0, FR: 0.2} +- {DAY: 2010-05-01, DMI: 0.08726971722826227, DVS: 0.030023923444976078, FR: 0.20296939902203062} +- {DAY: 2010-05-02, DMI: 0.07599939501067457, DVS: 0.05741626794258373, FR: 0.20567853199432148} +- {DAY: 2010-05-03, DMI: 0.08716102723451649, DVS: 0.07882775119617225, FR: 0.20779615121720385} +- {DAY: 2010-05-04, DMI: 0.07451170148310429, DVS: 0.09868421052631579, FR: 0.20975997686524003} +- {DAY: 2010-05-05, DMI: 0.08042887914367952, DVS: 0.11220095693779905, FR: 0.2110967979389032} +- {DAY: 2010-05-06, DMI: 0.10002439907374032, DVS: 0.12212918660287082, FR: 0.21207871076292129} +- {DAY: 2010-05-07, DMI: 0.1252828824678163, DVS: 0.13732057416267943, FR: 0.21358115568641886} +- {DAY: 2010-05-08, DMI: 0.19668384398863892, DVS: 0.14760765550239235, FR: 0.21459855933540145} +- {DAY: 2010-05-09, DMI: 0.23515372471768342, DVS: 0.16363636363636364, FR: 0.21618381618381619} +- {DAY: 2010-05-10, DMI: 0.17903474589877846, DVS: 0.1812200956937799, FR: 0.21792286660707713} +- {DAY: 2010-05-11, DMI: 0.32368494050076585, DVS: 0.20107655502392344, FR: 0.21988669225511331} +- {DAY: 2010-05-12, DMI: 0.3354280756055375, DVS: 0.22799043062200958, FR: 0.2225485041274515} +- {DAY: 2010-05-13, DMI: 0.27157061517848186, DVS: 0.2508373205741627, FR: 0.22480808665019192} +- {DAY: 2010-05-14, DMI: 0.23376654027781746, DVS: 0.2674641148325359, FR: 0.22645249487354752} +- {DAY: 2010-05-15, DMI: 0.2746279226299125, DVS: 0.27763157894736845, FR: 0.22745806824754194} +- {DAY: 2010-05-16, DMI: 0.41812346760179614, DVS: 0.28791866028708135, FR: 0.22847547189652453} +- {DAY: 2010-05-17, DMI: 0.6246506480705561, DVS: 0.3013157894736842, FR: 0.22980046269519955} +- {DAY: 2010-05-18, DMI: 0.48201989533687994, DVS: 0.31830143540669853, FR: 0.23148036174351963} +- {DAY: 2010-05-19, DMI: 0.27499431137388586, DVS: 0.33337320574162677, FR: 0.23297097639202902} +- {DAY: 2010-05-20, DMI: 0.4038593993767407, DVS: 0.3407894736842105, FR: 0.23370445344129553} +- {DAY: 2010-05-21, DMI: 0.7291386908288087, DVS: 0.35633971291866023, FR: 0.2352423891897576} +- {DAY: 2010-05-22, DMI: 1.1192858105557582, DVS: 0.3809808612440191, FR: 0.23767942583732057} +- {DAY: 2010-05-23, DMI: 1.458157879673842, DVS: 0.40765550239234444, FR: 0.2403175771596824} +- {DAY: 2010-05-24, DMI: 1.7769681489209164, DVS: 0.43540669856459324, FR: 0.24306220095693779} +- {DAY: 2010-05-25, DMI: 2.0428275401894824, DVS: 0.46662679425837317, FR: 0.2461499027288501} +- {DAY: 2010-05-26, DMI: 1.5085366378707437, DVS: 0.49928229665071766, FR: 0.24937956780062043} +- {DAY: 2010-05-27, DMI: 2.0863507300881627, DVS: 0.5257177033492823, FR: 0.25199405857300594} +- {DAY: 2010-05-28, DMI: 2.7793970930557403, DVS: 0.5544258373205742, FR: 0.25483332457016666} +- {DAY: 2010-05-29, DMI: 3.7458730467863006, DVS: 0.5836124401913876, FR: 0.2577199116672801} +- {DAY: 2010-05-30, DMI: 3.030275972615202, DVS: 0.6105263157894737, FR: 0.26038172353961825} +- {DAY: 2010-05-31, DMI: 3.6134582999974127, DVS: 0.6368421052631579, FR: 0.26298438403701563} +- {DAY: 2010-06-01, DMI: 2.0663367568789845, DVS: 0.6534688995215311, FR: 0.26462879226037117} +- {DAY: 2010-06-02, DMI: 2.269307313847779, DVS: 0.6690191387559808, FR: 0.26616672800883323} +- {DAY: 2010-06-03, DMI: 2.7165093907987297, DVS: 0.6867224880382775, FR: 0.26791760870708237} +- {DAY: 2010-06-04, DMI: 8.058855574556208, DVS: 0.7076555023923445, FR: 0.26998790683001206} +- {DAY: 2010-06-05, DMI: 9.88030385538193, DVS: 0.7355263157894737, FR: 0.2727443609022556} +- {DAY: 2010-06-06, DMI: 11.598154134649121, DVS: 0.766866028708134, FR: 0.2758438929491561} +- {DAY: 2010-06-07, DMI: 11.742525745623032, DVS: 0.8037081339712919, FR: 0.2794876176455124} +- {DAY: 2010-06-08, DMI: 15.325027972719834, DVS: 0.8422248803827752, FR: 0.283296966191703} +- {DAY: 2010-06-09, DMI: 17.883301041598045, DVS: 0.8801435406698566, FR: 0.28704716336295283} +- {DAY: 2010-06-10, DMI: 20.50716723911232, DVS: 0.9232057416267944, FR: 0.2914673046251994} +- {DAY: 2010-06-11, DMI: 25.832378327177924, DVS: 0.9662679425837322, FR: 0.29625199362041466} +- {DAY: 2010-06-12, DMI: 25.5702871132837, DVS: 1.0, FR: 0.3} +- {DAY: 2010-06-13, DMI: 23.80657585627682, DVS: 1.0110266159695818, FR: 0.2889733840304182} +- {DAY: 2010-06-14, DMI: 24.605472224831853, DVS: 1.0191381495564005, FR: 0.2808618504435995} +- {DAY: 2010-06-15, DMI: 27.934618397714924, DVS: 1.0269645120405577, FR: 0.27303548795944227} +- {DAY: 2010-06-16, DMI: 33.697833224949775, DVS: 1.0346958174904943, FR: 0.26530418250950566} +- {DAY: 2010-06-17, DMI: 44.23348494354046, DVS: 1.0418567807351078, FR: 0.25814321926489214} +- {DAY: 2010-06-18, DMI: 33.22286750613776, DVS: 1.049809885931559, FR: 0.25019011406844094} +- {DAY: 2010-06-19, DMI: 46.196262672520916, DVS: 1.0582699619771865, FR: 0.24173003802281345} +- {DAY: 2010-06-20, DMI: 35.52556761812795, DVS: 1.0640367553865655, FR: 0.23596324461343443} +- {DAY: 2010-06-21, DMI: 50.385393097138405, DVS: 1.0691064638783272, FR: 0.23089353612167274} +- {DAY: 2010-06-22, DMI: 63.617447285028796, DVS: 1.0750000000000002, FR: 0.22499999999999976} +- {DAY: 2010-06-23, DMI: 74.9942295727493, DVS: 1.0811153358681878, FR: 0.21888466413181218} +- {DAY: 2010-06-24, DMI: 81.1132270602226, DVS: 1.0874841571609635, FR: 0.21251584283903646} +- {DAY: 2010-06-25, DMI: 88.63206637198206, DVS: 1.0964195183776935, FR: 0.20358048162230646} +- {DAY: 2010-06-26, DMI: 101.33906393505809, DVS: 1.10532319391635, FR: 0.19467680608365} +- {DAY: 2010-06-27, DMI: 121.41671095960774, DVS: 1.1146704689480356, FR: 0.18532953105196434} +- {DAY: 2010-06-28, DMI: 134.2416633087712, DVS: 1.124746514575412, FR: 0.17525348542458782} +- {DAY: 2010-06-29, DMI: 139.8490589466692, DVS: 1.1349493029150826, FR: 0.16505069708491735} +- {DAY: 2010-06-30, DMI: 138.51257837352458, DVS: 1.1457224334600762, FR: 0.15427756653992372} +- {DAY: 2010-07-01, DMI: 159.93087664465835, DVS: 1.15712927756654, FR: 0.14694459532862567} +- {DAY: 2010-07-02, DMI: 171.40951546159334, DVS: 1.1683460076045629, FR: 0.14213742531233017} +- {DAY: 2010-07-03, DMI: 178.07616834641388, DVS: 1.1797528517110267, FR: 0.13724877783813136} +- {DAY: 2010-07-04, DMI: 171.18873906194537, DVS: 1.1911596958174906, FR: 0.13236013036393257} +- {DAY: 2010-07-05, DMI: 169.43676898916004, DVS: 1.2025665399239545, FR: 0.12747148288973378} +- {DAY: 2010-07-06, DMI: 180.85738714403087, DVS: 1.2139733840304183, FR: 0.12258283541553498} +- {DAY: 2010-07-07, DMI: 207.11844290032522, DVS: 1.223510773130545, FR: 0.11849538294405212} +- {DAY: 2010-07-08, DMI: 228.542985066502, DVS: 1.2311787072243345, FR: 0.1152091254752852} +- {DAY: 2010-07-09, DMI: 228.45888314777966, DVS: 1.2406844106463877, FR: 0.11113525258011955} +- {DAY: 2010-07-10, DMI: 228.04238262765804, DVS: 1.2520912547528515, FR: 0.10624660510592077} +- {DAY: 2010-07-11, DMI: 230.65877733062854, DVS: 1.2634980988593154, FR: 0.10135795763172198} +- {DAY: 2010-07-12, DMI: 232.7053329053697, DVS: 1.2749049429657793, FR: 0.09646931015752318} +- {DAY: 2010-07-13, DMI: 224.31429979939352, DVS: 1.2863117870722431, FR: 0.09158066268332438} +- {DAY: 2010-07-14, DMI: 239.8000654326714, DVS: 1.297718631178707, FR: 0.09} +- {DAY: 2010-07-15, DMI: 189.31571530459587, DVS: 1.3091254752851709, FR: 0.08966201943388256} +- {DAY: 2010-07-16, DMI: 238.6802102614641, DVS: 1.3205323193916347, FR: 0.08923954372623574} +- {DAY: 2010-07-17, DMI: 186.92251304665294, DVS: 1.3319391634980986, FR: 0.08881706801858893} +- {DAY: 2010-07-18, DMI: 205.73008518017616, DVS: 1.3433460076045625, FR: 0.08839459231094213} +- {DAY: 2010-07-19, DMI: 245.791431319311, DVS: 1.3523447401774396, FR: 0.08806130591935409} +- {DAY: 2010-07-20, DMI: 255.72671543444338, DVS: 1.3613434727503166, FR: 0.08772801952776604} +- {DAY: 2010-07-21, DMI: 243.6616681427436, DVS: 1.37148288973384, FR: 0.08735248556541333} +- {DAY: 2010-07-22, DMI: 233.24798413686509, DVS: 1.382889733840304, FR: 0.08693000985776653} +- {DAY: 2010-07-23, DMI: 116.52049309055121, DVS: 1.3942965779467678, FR: 0.08650753415011972} +- {DAY: 2010-07-24, DMI: 111.80944836940988, DVS: 1.4050697084917614, FR: 0.08610852931511995} +- {DAY: 2010-07-25, DMI: 240.9295512949976, DVS: 1.4132129277566536, FR: 0.08580692860160542} +- {DAY: 2010-07-26, DMI: 217.0262717612417, DVS: 1.4202154626108996, FR: 0.08554757545885557} +- {DAY: 2010-07-27, DMI: 219.24483972040034, DVS: 1.4277566539923952, FR: 0.08526827207435574} +- {DAY: 2010-07-28, DMI: 153.03427676802764, DVS: 1.4362167300380226, FR: 0.08495493592451768} +- {DAY: 2010-07-29, DMI: 160.97274508361494, DVS: 1.4450253485424587, FR: 0.08462869079472375} +- {DAY: 2010-07-30, DMI: 187.95565260808146, DVS: 1.4536121673003801, FR: 0.08431066047035629} +- {DAY: 2010-07-31, DMI: 260.9249312233565, DVS: 1.4618821292775663, FR: 0.08400436558231236} +- {DAY: 2010-08-01, DMI: 252.56287387216008, DVS: 1.4703422053231938, FR: 0.0836910294324743} +- {DAY: 2010-08-02, DMI: 170.13680006718482, DVS: 1.4803231939163497, FR: 0.08332136318828334} +- {DAY: 2010-08-03, DMI: 173.37109486776916, DVS: 1.4905576679340937, FR: 0.08294230859503357} +- {DAY: 2010-08-04, DMI: 246.21340535433285, DVS: 1.5001584283903675, FR: 0.08258672487443083} +- {DAY: 2010-08-05, DMI: 164.69684023252935, DVS: 1.508016476552598, FR: 0.08229568605360749} +- {DAY: 2010-08-06, DMI: 70.70451455460315, DVS: 1.5157477820025347, FR: 0.08200934140731353} +- {DAY: 2010-08-07, DMI: 97.16967218324102, DVS: 1.5236692015209123, FR: 0.08171595549922547} +- {DAY: 2010-08-08, DMI: 226.65481269751402, DVS: 1.531780735107731, FR: 0.0814155283293433} +- {DAY: 2010-08-09, DMI: 220.2851914363175, DVS: 1.5401774397972114, FR: 0.08110453926676994} +- {DAY: 2010-08-10, DMI: 223.66321432701545, DVS: 1.54946134347275, FR: 0.08076069098249075} +- {DAY: 2010-08-11, DMI: 210.38965026974282, DVS: 1.558333333333333, FR: 0.08043209876543211} +- {DAY: 2010-08-12, DMI: 183.90829667731444, DVS: 1.5679340937896067, FR: 0.08007651504482939} +- {DAY: 2010-08-13, DMI: 101.01347523047299, DVS: 1.5777883396704686, FR: 0.0784423320659063} +- {DAY: 2010-08-14, DMI: 174.27848018697188, DVS: 1.5872623574144484, FR: 0.07654752851711033} +- {DAY: 2010-08-15, DMI: 201.837839458963, DVS: 1.596546261089987, FR: 0.07469074778200262} +- {DAY: 2010-08-16, DMI: 187.87631636108574, DVS: 1.6078580481622304, FR: 0.07242839036755393} +- {DAY: 2010-08-17, DMI: 57.144229648358795, DVS: 1.6159695817490491, FR: 0.07080608365019019} +- {DAY: 2010-08-18, DMI: 75.47449630745594, DVS: 1.622782002534854, FR: 0.0694435994930292} +- {DAY: 2010-08-19, DMI: 214.49599357376033, DVS: 1.6301964512040557, FR: 0.06796070975918887} +- {DAY: 2010-08-20, DMI: 239.61664250168837, DVS: 1.6388466413181242, FR: 0.06623067173637517} +- {DAY: 2010-08-21, DMI: 228.45784127914993, DVS: 1.647401774397972, FR: 0.06451964512040559} +- {DAY: 2010-08-22, DMI: 218.57444943895214, DVS: 1.6576996197718632, FR: 0.062460076045627366} +- {DAY: 2010-08-23, DMI: 157.56717502455717, DVS: 1.669106463878327, FR: 0.06017870722433459} +- {DAY: 2010-08-24, DMI: 139.67843001806267, DVS: 1.6796261089987325, FR: 0.058074778200253495} +- {DAY: 2010-08-25, DMI: 220.47707536720424, DVS: 1.6903992395437262, FR: 0.05592015209125477} +- {DAY: 2010-08-26, DMI: 184.47875988999735, DVS: 1.697845373891001, FR: 0.05443092522179978} +- {DAY: 2010-08-27, DMI: 145.77119865554025, DVS: 1.707636248415716, FR: 0.05247275031685682} +- {DAY: 2010-08-28, DMI: 162.00116056864348, DVS: 1.717141951837769, FR: 0.05057160963244618} +- {DAY: 2010-08-29, DMI: 174.97256591239946, DVS: 1.7241128010139415, FR: 0.0491774397972117} +- {DAY: 2010-08-30, DMI: 135.50979523831683, DVS: 1.7297845373890999, FR: 0.048043092522180024} +- {DAY: 2010-08-31, DMI: 155.32482020154353, DVS: 1.7338403041825092, FR: 0.04723193916349815} +- {DAY: 2010-09-01, DMI: 137.8830163241428, DVS: 1.738973384030418, FR: 0.046205323193916396} +- {DAY: 2010-09-02, DMI: 139.85908377176526, DVS: 1.7434093789607095, FR: 0.04531812420785811} +- {DAY: 2010-09-03, DMI: 200.2216828327037, DVS: 1.7488910012674268, FR: 0.044221799746514634} +- {DAY: 2010-09-04, DMI: 148.50441233891394, DVS: 1.7548162230671733, FR: 0.04303675538656533} +- {DAY: 2010-09-05, DMI: 211.73127018106075, DVS: 1.761248415716096, FR: 0.041750316856780816} +- {DAY: 2010-09-06, DMI: 208.10113243944386, DVS: 1.7663814955640047, FR: 0.04072370088719906} +- {DAY: 2010-09-07, DMI: 181.86887104172663, DVS: 1.7712927756653989, FR: 0.03974144486692022} +- {DAY: 2010-09-08, DMI: 144.71197597830826, DVS: 1.7755703422053228, FR: 0.038885931558935424} +- {DAY: 2010-09-09, DMI: 85.9103819334138, DVS: 1.781780735107731, FR: 0.03764385297845378} +- {DAY: 2010-09-10, DMI: 157.75894080629766, DVS: 1.7885297845373889, FR: 0.03629404309252222} +- {DAY: 2010-09-11, DMI: 195.35359993246007, DVS: 1.7956273764258552, FR: 0.03487452471482894} +- {DAY: 2010-09-12, DMI: 190.42469287847678, DVS: 1.8026299112801012, FR: 0.033474017743979755} +- {DAY: 2010-09-13, DMI: 83.2452597111574, DVS: 1.8095690747782, FR: 0.03208618504435998} +- {DAY: 2010-09-14, DMI: 87.51683471638283, DVS: 1.8155259822560201, FR: 0.030894803548795965} +- {DAY: 2010-09-15, DMI: 50.891756433182515, DVS: 1.820722433460076, FR: 0.02985551330798479} +- {DAY: 2010-09-16, DMI: 145.53202601713195, DVS: 1.8274081115335867, FR: 0.028518377693282644} +- {DAY: 2010-09-17, DMI: 152.00689205078376, DVS: 1.8338403041825093, FR: 0.02723193916349813} +- {DAY: 2010-09-18, DMI: 165.95901622008535, DVS: 1.838593155893536, FR: 0.02628136882129279} +- {DAY: 2010-09-19, DMI: 164.93687349861023, DVS: 1.8419201520912547, FR: 0.025615969581749047} +- {DAY: 2010-09-20, DMI: 171.33432675770277, DVS: 1.8455640050697084, FR: 0.024887198986058304} +- {DAY: 2010-09-21, DMI: 171.56439186872714, DVS: 1.849873257287706, FR: 0.02402534854245881} +- {DAY: 2010-09-22, DMI: 165.44052536645825, DVS: 1.855830164765526, FR: 0.02283396704689479} +- {DAY: 2010-09-23, DMI: 162.36996607999322, DVS: 1.8624524714828898, FR: 0.02150950570342202} +- {DAY: 2010-09-24, DMI: 148.92828831269958, DVS: 1.869169835234474, FR: 0.020166032953105165} +- {DAY: 2010-09-25, DMI: 37.562186909332446, DVS: 1.8765209125475286, FR: 0.01869581749049426} +- {DAY: 2010-09-26, DMI: 71.76070344456296, DVS: 1.8823193916349812, FR: 0.017536121673003745} +- {DAY: 2010-09-27, DMI: 119.83066354950572, DVS: 1.886089987325729, FR: 0.016782002534854165} +- {DAY: 2010-09-28, DMI: 45.38394085732656, DVS: 1.889860583016477, FR: 0.016027883396704593} +- {DAY: 2010-09-29, DMI: 111.24582066792776, DVS: 1.8931875792141957, FR: 0.01536248415716085} +- {DAY: 2010-09-30, DMI: 102.57360858647225, DVS: 1.8975602027883403, FR: 0.01448795944233193} +- {DAY: 2010-10-01, DMI: 41.372646898356045, DVS: 1.9008555133079854, FR: 0.013828897338402896} +- {DAY: 2010-10-02, DMI: 80.91736117849351, DVS: 1.903738910012675, FR: 0.013252217997464996} +- {DAY: 2010-10-03, DMI: 120.10552952390906, DVS: 1.9084283903675545, FR: 0.012314321926489083} +- {DAY: 2010-10-04, DMI: 119.58127886909577, DVS: 1.9136565272496837, FR: 0.01126869455006324} +- {DAY: 2010-10-05, DMI: 83.29021681249708, DVS: 1.9184093789607104, FR: 0.010318124207857896} +- {DAY: 2010-10-06, DMI: 46.99996747465517, DVS: 1.9236692015209131, FR: 0.010458650190114152} +- {DAY: 2010-10-07, DMI: 33.33794821238907, DVS: 1.9287389100126748, FR: 0.011092363751584362} +- {DAY: 2010-10-08, DMI: 123.22416585344278, DVS: 1.9339353612167307, FR: 0.011741920152091346} +- {DAY: 2010-10-09, DMI: 120.97251477717472, DVS: 1.9394486692015216, FR: 0.012431083650190206} +- {DAY: 2010-10-10, DMI: 114.12156421384698, DVS: 1.9442648922686951, FR: 0.0130331115335869} +- {DAY: 2010-10-11, DMI: 114.27101612821554, DVS: 1.947972116603296, FR: 0.013496514575411999} +- {DAY: 2010-10-12, DMI: 109.57321942208434, DVS: 1.9517110266159703, FR: 0.013963878326996292} +- {DAY: 2010-10-13, DMI: 101.68273575543198, DVS: 1.9545310519645127, FR: 0.014316381495564095} +- {DAY: 2010-10-14, DMI: 96.70490679279165, DVS: 1.956970849176173, FR: 0.014621356147021633} +- {DAY: 2010-10-15, DMI: 19.833516519695102, DVS: 1.9585551330798485, FR: 0.014819391634981069} +- {DAY: 2010-10-16, DMI: 14.818846461309908, DVS: 1.9593155893536127, FR: 0.014914448669201594} +- {DAY: 2010-10-17, DMI: 20.277267971517908, DVS: 1.9616603295310526, FR: 0.015207541191381582} +- {DAY: 2010-10-18, DMI: 25.774029148179505, DVS: 1.9637515842839044, FR: 0.015468948035488053} +- {DAY: 2010-10-19, DMI: 23.62884205666545, DVS: 1.9649556400506978, FR: 0.015619455006337227} +- {DAY: 2010-10-20, DMI: 22.42823986696576, DVS: 1.9661913814955647, FR: 0.015773922686945593} +- {DAY: 2010-10-21, DMI: 33.199168318700075, DVS: 1.9677439797211667, FR: 0.015967997465145836} +- {DAY: 2010-10-22, DMI: 25.831124631818263, DVS: 1.9682192648922694, FR: 0.016027408111533678} +- {DAY: 2010-10-23, DMI: 22.152311964952556, DVS: 1.9682192648922694, FR: 0.016027408111533678} +- {DAY: 2010-10-24, DMI: 6.263521247460609, DVS: 1.9686628643852986, FR: 0.016082858048162327} +- {DAY: 2010-10-25, DMI: 3.6792725931398476, DVS: 1.970785804816224, FR: 0.01634822560202799} +- {DAY: 2010-10-26, DMI: 0.0, DVS: 1.9712927756654002, FR: 0.016411596958175026} +- {DAY: 2010-10-27, DMI: 0.0, DVS: 1.9712927756654002, FR: 0.016411596958175026} +- {DAY: 2010-10-28, DMI: 0.0, DVS: 1.9712927756654002, FR: 0.016411596958175026} +- {DAY: 2010-10-29, DMI: 0.0, DVS: 1.9728136882129288, FR: 0.016601711026616103} +- {DAY: 2010-10-30, DMI: 0.0, DVS: 1.9751267427122952, FR: 0.0168908428390369} +- {DAY: 2010-10-31, DMI: 0.0, DVS: 1.9769328263624852, FR: 0.01711660329531066} +- {DAY: 2010-11-01, DMI: 0.0, DVS: 1.9792458808618516, FR: 0.017405735107731454} +- {DAY: 2010-11-02, DMI: 0.0, DVS: 1.983555133079849, FR: 0.01794439163498114} +- {DAY: 2010-11-03, DMI: 19.981638149523437, DVS: 1.985107731305451, FR: 0.018138466413181384} +- {DAY: 2010-11-04, DMI: 10.42239831190848, DVS: 1.9885297845373902, FR: 0.018566223067173773} +- {DAY: 2010-11-05, DMI: 46.401100234993315, DVS: 1.9948035487959452, FR: 0.019350443599493155} +- {DAY: 2010-11-06, DMI: 5.958636116129116, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-07, DMI: 15.565850759510647, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-08, DMI: 15.35644728183427, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-09, DMI: 44.141119653731295, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-10, DMI: 14.924786629292004, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-11, DMI: 24.2269545627343, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-12, DMI: 38.25329265996589, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-13, DMI: 42.91869133316397, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-14, DMI: 68.45886959252344, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-15, DMI: 46.2545138561688, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-16, DMI: 3.8934257353592074, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-17, DMI: 6.277629532229549, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-18, DMI: 4.541383789475789, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-19, DMI: 4.880876338731813, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-20, DMI: 3.2692377525679994, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-21, DMI: 0.8535068016025563, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-22, DMI: 13.004138914618522, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-23, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-24, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-25, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-26, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-27, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-28, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-29, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-11-30, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-01, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-02, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-03, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-04, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-05, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-06, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-07, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-08, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-09, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-10, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-11, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-12, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-13, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-14, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-15, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-16, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-17, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-18, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-19, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-20, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-21, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-22, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-23, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-24, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-25, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-26, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-27, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-28, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-29, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-30, DMI: 0.0, DVS: 2.0, FR: 0.02} +- {DAY: 2010-12-31, DMI: 0.0, DVS: 2.0, FR: 0.02} +ModelParameters: + IAIRDU: 0.0 + RDI: 10.0 + RDMCR: 120.0 + RDMSOL: 120 + RDRRTB: [0.0, 0.0, 1.5, 0.0, 1.5001, 0.02, 2.0, 0.02, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + RRI: 1.2 + TDWI: 0.51 +ModelResults: +- {DAY: 2010-04-16, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-17, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-18, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-19, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-20, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-21, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-22, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-23, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-24, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-25, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-26, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-27, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-28, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-29, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-04-30, RD: 10.0, TWRT: 0.10200000000000001} +- {DAY: 2010-05-01, RD: 11.2, TWRT: 0.117836535040933} +- {DAY: 2010-05-02, RD: 12.399999999999999, TWRT: 0.13554961709957594} +- {DAY: 2010-05-03, RD: 13.599999999999998, TWRT: 0.15118106109782806} +- {DAY: 2010-05-04, RD: 14.799999999999997, TWRT: 0.16929278709329848} +- {DAY: 2010-05-05, RD: 15.999999999999996, TWRT: 0.1849223598725841} +- {DAY: 2010-05-06, RD: 17.199999999999996, TWRT: 0.2019006387216299} +- {DAY: 2010-05-07, RD: 18.399999999999995, TWRT: 0.22311368432202466} +- {DAY: 2010-05-08, RD: 19.599999999999994, TWRT: 0.24987174714722665} +- {DAY: 2010-05-09, RD: 20.799999999999994, TWRT: 0.29207981671173744} +- {DAY: 2010-05-10, RD: 21.999999999999993, TWRT: 0.34291624631104484} +- {DAY: 2010-05-11, RD: 23.199999999999992, TWRT: 0.3819320113595763} +- {DAY: 2010-05-12, RD: 24.39999999999999, TWRT: 0.4531060222590828} +- {DAY: 2010-05-13, RD: 25.59999999999999, TWRT: 0.5277550387274449} +- {DAY: 2010-05-14, RD: 26.79999999999999, TWRT: 0.588806309116135} +- {DAY: 2010-05-15, RD: 27.99999999999999, TWRT: 0.6417433253800043} +- {DAY: 2010-05-16, RD: 29.19999999999999, TWRT: 0.7042096621482397} +- {DAY: 2010-05-17, RD: 30.399999999999988, TWRT: 0.7997406187195713} +- {DAY: 2010-05-18, RD: 31.599999999999987, TWRT: 0.9432856266690413} +- {DAY: 2010-05-19, RD: 32.79999999999999, TWRT: 1.0548637664091958} +- {DAY: 2010-05-20, RD: 33.99999999999999, TWRT: 1.1189294596322237} +- {DAY: 2010-05-21, RD: 35.199999999999996, TWRT: 1.2133131998306947} +- {DAY: 2010-05-22, RD: 36.4, TWRT: 1.3848375275119558} +- {DAY: 2010-05-23, RD: 37.6, TWRT: 1.6508687363127084} +- {DAY: 2010-05-24, RD: 38.800000000000004, TWRT: 2.001289705072226} +- {DAY: 2010-05-25, RD: 40.00000000000001, TWRT: 2.4332034943793195} +- {DAY: 2010-05-26, RD: 41.20000000000001, TWRT: 2.9360452946887765} +- {DAY: 2010-05-27, RD: 42.40000000000001, TWRT: 3.3122435094523834} +- {DAY: 2010-05-28, RD: 43.600000000000016, TWRT: 3.8379914975340537} +- {DAY: 2010-05-29, RD: 44.80000000000002, TWRT: 4.5462744990581045} +- {DAY: 2010-05-30, RD: 46.00000000000002, TWRT: 5.511660569792715} +- {DAY: 2010-05-31, RD: 47.200000000000024, TWRT: 6.300689050342955} +- {DAY: 2010-06-01, RD: 48.40000000000003, TWRT: 7.250972155611216} +- {DAY: 2010-06-02, RD: 49.60000000000003, TWRT: 7.797784355987314} +- {DAY: 2010-06-03, RD: 50.80000000000003, TWRT: 8.401798458560693} +- {DAY: 2010-06-04, RD: 52.000000000000036, TWRT: 9.129599158573821} +- {DAY: 2010-06-05, RD: 53.20000000000004, TWRT: 11.305392706593626} +- {DAY: 2010-06-06, RD: 54.40000000000004, TWRT: 14.000189867149862} +- {DAY: 2010-06-07, RD: 55.600000000000044, TWRT: 17.199469854675826} +- {DAY: 2010-06-08, RD: 56.80000000000005, TWRT: 20.4813604004611} +- {DAY: 2010-06-09, RD: 58.00000000000005, TWRT: 24.822894331935615} +- {DAY: 2010-06-10, RD: 59.20000000000005, TWRT: 29.956245167492074} +- {DAY: 2010-06-11, RD: 60.400000000000055, TWRT: 35.93341392817433} +- {DAY: 2010-06-12, RD: 61.60000000000006, TWRT: 43.586307507557585} +- {DAY: 2010-06-13, RD: 62.80000000000006, TWRT: 51.25739364154269} +- {DAY: 2010-06-14, RD: 64.00000000000006, TWRT: 58.13686042890785} +- {DAY: 2010-06-15, RD: 65.20000000000006, TWRT: 65.04759888901272} +- {DAY: 2010-06-16, RD: 66.40000000000006, TWRT: 72.67474105419363} +- {DAY: 2010-06-17, RD: 67.60000000000007, TWRT: 81.61491715028059} +- {DAY: 2010-06-18, RD: 68.80000000000007, TWRT: 93.03349135291126} +- {DAY: 2010-06-19, RD: 70.00000000000007, TWRT: 101.34552436395256} +- {DAY: 2010-06-20, RD: 71.20000000000007, TWRT: 112.51254869629292} +- {DAY: 2010-06-21, RD: 72.40000000000008, TWRT: 120.89527689820035} +- {DAY: 2010-06-22, RD: 73.60000000000008, TWRT: 132.52893847927916} +- {DAY: 2010-06-23, RD: 74.80000000000008, TWRT: 146.84286411841063} +- {DAY: 2010-06-24, RD: 76.00000000000009, TWRT: 163.2579508702659} +- {DAY: 2010-06-25, RD: 77.20000000000009, TWRT: 180.49579668436323} +- {DAY: 2010-06-26, RD: 78.40000000000009, TWRT: 198.53955544355156} +- {DAY: 2010-06-27, RD: 79.6000000000001, TWRT: 218.26792074193548} +- {DAY: 2010-06-28, RD: 80.8000000000001, TWRT: 240.77002284595147} +- {DAY: 2010-06-29, RD: 82.0000000000001, TWRT: 264.2963422300076} +- {DAY: 2010-06-30, RD: 83.2000000000001, TWRT: 287.3785268958251} +- {DAY: 2010-07-01, RD: 84.4000000000001, TWRT: 308.7479104224629} +- {DAY: 2010-07-02, RD: 85.60000000000011, TWRT: 332.2488883715646} +- {DAY: 2010-07-03, RD: 86.80000000000011, TWRT: 356.61259557330953} +- {DAY: 2010-07-04, RD: 88.00000000000011, TWRT: 381.05333204095217} +- {DAY: 2010-07-05, RD: 89.20000000000012, TWRT: 403.7118958600285} +- {DAY: 2010-07-06, RD: 90.40000000000012, TWRT: 425.310252059122} +- {DAY: 2010-07-07, RD: 91.60000000000012, TWRT: 447.4802633810824} +- {DAY: 2010-07-08, RD: 92.80000000000013, TWRT: 472.02284258733226} +- {DAY: 2010-07-09, RD: 94.00000000000013, TWRT: 498.3530800303551} +- {DAY: 2010-07-10, RD: 95.20000000000013, TWRT: 523.7429157131556} +- {DAY: 2010-07-11, RD: 96.40000000000013, TWRT: 547.9716446876097} +- {DAY: 2010-07-12, RD: 97.60000000000014, TWRT: 571.3507472676723} +- {DAY: 2010-07-13, RD: 98.80000000000014, TWRT: 593.7996702030301} +- {DAY: 2010-07-14, RD: 100.00000000000014, TWRT: 614.3425224280045} +- {DAY: 2010-07-15, RD: 101.20000000000014, TWRT: 635.9245283169449} +- {DAY: 2010-07-16, RD: 102.40000000000015, TWRT: 652.898957661725} +- {DAY: 2010-07-17, RD: 103.60000000000015, TWRT: 674.1986707219401} +- {DAY: 2010-07-18, RD: 104.80000000000015, TWRT: 690.8005802774102} +- {DAY: 2010-07-19, RD: 106.00000000000016, TWRT: 708.9860072830072} +- {DAY: 2010-07-20, RD: 107.20000000000016, TWRT: 730.630721708773} +- {DAY: 2010-07-21, RD: 108.40000000000016, TWRT: 753.0651199941773} +- {DAY: 2010-07-22, RD: 109.60000000000016, TWRT: 774.3495723434609} +- {DAY: 2010-07-23, RD: 110.80000000000017, TWRT: 794.6258219037827} +- {DAY: 2010-07-24, RD: 112.00000000000017, TWRT: 804.7057224390023} +- {DAY: 2010-07-25, RD: 113.20000000000017, TWRT: 814.333469601627} +- {DAY: 2010-07-26, RD: 114.40000000000018, TWRT: 835.0068944076137} +- {DAY: 2010-07-27, RD: 115.60000000000018, TWRT: 853.5729657676626} +- {DAY: 2010-07-28, RD: 116.80000000000018, TWRT: 872.2675944118403} +- {DAY: 2010-07-29, RD: 118.00000000000018, TWRT: 885.2686115889229} +- {DAY: 2010-07-30, RD: 119.20000000000019, TWRT: 898.891524258982} +- {DAY: 2010-07-31, RD: 120.0, TWRT: 914.7381894695062} +- {DAY: 2010-08-01, RD: 120.0, TWRT: 936.6570227815328} +- {DAY: 2010-08-02, RD: 120.0, TWRT: 957.794269692318} +- {DAY: 2010-08-03, RD: 120.0, TWRT: 971.9702998024082} +- {DAY: 2010-08-04, RD: 120.0, TWRT: 986.3500986543896} +- {DAY: 2010-08-05, RD: 120.0, TWRT: 1006.6840574227846} +- {DAY: 2010-08-06, RD: 120.0, TWRT: 1020.237896880582} +- {DAY: 2010-08-07, RD: 120.0, TWRT: 1026.0363275537288} +- {DAY: 2010-08-08, RD: 120.0, TWRT: 1033.9766401617287} +- {DAY: 2010-08-09, RD: 120.0, TWRT: 1052.4298614858853} +- {DAY: 2010-08-10, RD: 120.0, TWRT: 1070.29599044462} +- {DAY: 2010-08-11, RD: 120.0, TWRT: 1088.3591861810346} +- {DAY: 2010-08-12, RD: 120.0, TWRT: 1105.2812673107553} +- {DAY: 2010-08-13, RD: 120.0, TWRT: 1120.0080027965053} +- {DAY: 2010-08-14, RD: 120.0, TWRT: 1127.9317353636652} +- {DAY: 2010-08-15, RD: 120.0, TWRT: 1141.272322295696} +- {DAY: 2010-08-16, RD: 120.0, TWRT: 1156.3477414555898} +- {DAY: 2010-08-17, RD: 120.0, TWRT: 1169.9553206378087} +- {DAY: 2010-08-18, RD: 120.0, TWRT: 1174.001479742416} +- {DAY: 2010-08-19, RD: 120.0, TWRT: 1179.242700435929} +- {DAY: 2010-08-20, RD: 120.0, TWRT: 1193.8200003997042} +- {DAY: 2010-08-21, RD: 120.0, TWRT: 1209.689971591806} +- {DAY: 2010-08-22, RD: 120.0, TWRT: 1224.4299904361105} +- {DAY: 2010-08-23, RD: 120.0, TWRT: 1238.0821671696986} +- {DAY: 2010-08-24, RD: 120.0, TWRT: 1247.564356063667} +- {DAY: 2010-08-25, RD: 120.0, TWRT: 1255.6761499063255} +- {DAY: 2010-08-26, RD: 120.0, TWRT: 1268.0052614934948} +- {DAY: 2010-08-27, RD: 120.0, TWRT: 1278.0466110780776} +- {DAY: 2010-08-28, RD: 120.0, TWRT: 1285.6956267885184} +- {DAY: 2010-08-29, RD: 120.0, TWRT: 1293.888286240799} +- {DAY: 2010-08-30, RD: 120.0, TWRT: 1302.4929890671199} +- {DAY: 2010-08-31, RD: 120.0, TWRT: 1309.003298697416} +- {DAY: 2010-09-01, RD: 120.0, TWRT: 1316.3395911557566} +- {DAY: 2010-09-02, RD: 120.0, TWRT: 1322.7105204879656} +- {DAY: 2010-09-03, RD: 120.0, TWRT: 1329.0486718179318} +- {DAY: 2010-09-04, RD: 120.0, TWRT: 1337.9028349810696} +- {DAY: 2010-09-05, RD: 120.0, TWRT: 1344.2939830487253} +- {DAY: 2010-09-06, RD: 120.0, TWRT: 1353.133830667273} +- {DAY: 2010-09-07, RD: 120.0, TWRT: 1361.6084789390243} +- {DAY: 2010-09-08, RD: 120.0, TWRT: 1368.836210650538} +- {DAY: 2010-09-09, RD: 120.0, TWRT: 1374.4634706441889} +- {DAY: 2010-09-10, RD: 120.0, TWRT: 1377.697468431013} +- {DAY: 2010-09-11, RD: 120.0, TWRT: 1383.4231782268675} +- {DAY: 2010-09-12, RD: 120.0, TWRT: 1390.2360421758428} +- {DAY: 2010-09-13, RD: 120.0, TWRT: 1396.610321724149} +- {DAY: 2010-09-14, RD: 120.0, TWRT: 1399.2813445313068} +- {DAY: 2010-09-15, RD: 120.0, TWRT: 1401.9851599470821} +- {DAY: 2010-09-16, RD: 120.0, TWRT: 1403.5045594585395} +- {DAY: 2010-09-17, RD: 120.0, TWRT: 1407.6548967429649} +- {DAY: 2010-09-18, RD: 120.0, TWRT: 1411.7943391797241} +- {DAY: 2010-09-19, RD: 120.0, TWRT: 1416.1559692942233} +- {DAY: 2010-09-20, RD: 120.0, TWRT: 1420.3809872286724} +- {DAY: 2010-09-21, RD: 120.0, TWRT: 1424.6450187118337} +- {DAY: 2010-09-22, RD: 120.0, TWRT: 1428.7669130239549} +- {DAY: 2010-09-23, RD: 120.0, TWRT: 1432.5445765283935} +- {DAY: 2010-09-24, RD: 120.0, TWRT: 1436.0370742398557} +- {DAY: 2010-09-25, RD: 120.0, TWRT: 1439.040367009619} +- {DAY: 2010-09-26, RD: 120.0, TWRT: 1439.7426228006198} +- {DAY: 2010-09-27, RD: 120.0, TWRT: 1441.001027227564} +- {DAY: 2010-09-28, RD: 120.0, TWRT: 1443.012025727005} +- {DAY: 2010-09-29, RD: 120.0, TWRT: 1443.7394342391492} +- {DAY: 2010-09-30, RD: 120.0, TWRT: 1445.4484463967106} +- {DAY: 2010-10-01, RD: 120.0, TWRT: 1446.934528677765} +- {DAY: 2010-10-02, RD: 120.0, TWRT: 1447.5066667643405} +- {DAY: 2010-10-03, RD: 120.0, TWRT: 1448.5790012744574} +- {DAY: 2010-10-04, RD: 120.0, TWRT: 1450.0580194301663} +- {DAY: 2010-10-05, RD: 120.0, TWRT: 1451.405544335648} +- {DAY: 2010-10-06, RD: 120.0, TWRT: 1452.2649431380187} +- {DAY: 2010-10-07, RD: 120.0, TWRT: 1452.756499356783} +- {DAY: 2010-10-08, RD: 120.0, TWRT: 1453.1262960050863} +- {DAY: 2010-10-09, RD: 120.0, TWRT: 1454.5731843213453} +- {DAY: 2010-10-10, RD: 120.0, TWRT: 1456.0770037719144} +- {DAY: 2010-10-11, RD: 120.0, TWRT: 1457.5643628467008} +- {DAY: 2010-10-12, RD: 120.0, TWRT: 1459.1066232814223} +- {DAY: 2010-10-13, RD: 120.0, TWRT: 1460.6366903853298} +- {DAY: 2010-10-14, RD: 120.0, TWRT: 1462.0924192219172} +- {DAY: 2010-10-15, RD: 120.0, TWRT: 1463.506376105299} +- {DAY: 2010-10-16, RD: 120.0, TWRT: 1463.8002967541033} +- {DAY: 2010-10-17, RD: 120.0, TWRT: 1464.0213116789873} +- {DAY: 2010-10-18, RD: 120.0, TWRT: 1464.3296790669128} +- {DAY: 2010-10-19, RD: 120.0, TWRT: 1464.728376184471} +- {DAY: 2010-10-20, RD: 120.0, TWRT: 1465.097445819827} +- {DAY: 2010-10-21, RD: 120.0, TWRT: 1465.4512271414928} +- {DAY: 2010-10-22, RD: 120.0, TWRT: 1465.981351377051} +- {DAY: 2010-10-23, RD: 120.0, TWRT: 1466.395357353505} +- {DAY: 2010-10-24, RD: 120.0, TWRT: 1466.750401497981} +- {DAY: 2010-10-25, RD: 120.0, TWRT: 1466.8511368210857} +- {DAY: 2010-10-26, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-10-27, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-10-28, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-10-29, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-10-30, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-10-31, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-11-01, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-11-02, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-11-03, RD: 120.0, TWRT: 1466.9112863994897} +- {DAY: 2010-11-04, RD: 120.0, TWRT: 1467.273722671945} +- {DAY: 2010-11-05, RD: 120.0, TWRT: 1467.467227243899} +- {DAY: 2010-11-06, RD: 120.0, TWRT: 1468.3651091169509} +- {DAY: 2010-11-07, RD: 120.0, TWRT: 1468.4842818392733} +- {DAY: 2010-11-08, RD: 120.0, TWRT: 1468.7955988544636} +- {DAY: 2010-11-09, RD: 120.0, TWRT: 1469.1027278001002} +- {DAY: 2010-11-10, RD: 120.0, TWRT: 1469.9855501931747} +- {DAY: 2010-11-11, RD: 120.0, TWRT: 1470.2840459257604} +- {DAY: 2010-11-12, RD: 120.0, TWRT: 1470.7685850170153} +- {DAY: 2010-11-13, RD: 120.0, TWRT: 1471.5336508702146} +- {DAY: 2010-11-14, RD: 120.0, TWRT: 1472.392024696878} +- {DAY: 2010-11-15, RD: 120.0, TWRT: 1473.7612020887284} +- {DAY: 2010-11-16, RD: 120.0, TWRT: 1474.6862923658518} +- {DAY: 2010-11-17, RD: 120.0, TWRT: 1474.764160880559} +- {DAY: 2010-11-18, RD: 120.0, TWRT: 1474.8897134712035} +- {DAY: 2010-11-19, RD: 120.0, TWRT: 1474.9805411469931} +- {DAY: 2010-11-20, RD: 120.0, TWRT: 1475.0781586737678} +- {DAY: 2010-11-21, RD: 120.0, TWRT: 1475.1435434288192} +- {DAY: 2010-11-22, RD: 120.0, TWRT: 1475.160613564851} +- {DAY: 2010-11-23, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-11-24, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-11-25, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-11-26, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-11-27, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-11-28, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-11-29, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-11-30, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-01, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-02, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-03, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-04, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-05, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-06, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-07, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-08, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-09, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-10, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-11, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-12, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-13, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-14, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-15, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-16, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-17, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-18, RD: 120.0, TWRT: 1475.4206963431436} +- {DAY: 2010-12-19, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-20, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-21, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-22, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-23, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-24, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-25, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-26, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-27, RD: 120.0, TWRT: 1475.4206963431438} +- {DAY: 2010-12-28, RD: 120.0, TWRT: 1475.420696343144} +- {DAY: 2010-12-29, RD: 120.0, TWRT: 1475.420696343144} +- {DAY: 2010-12-30, RD: 120.0, TWRT: 1475.420696343144} +- {DAY: 2010-12-31, RD: 120.0, TWRT: 1475.420696343144} +Precision: {RD: 0.01, TWRT: 0.1} +WeatherVariables: +- {DAY: 2010-04-16, E0: 0.292, ELEV: 440.0, ES0: 0.259, ET0: 0.254, IRRAD: 15048000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.35, TMAX: 14.5, + TMIN: 4.2, VAP: 7.45, WIND: 2.298643329164947} +- {DAY: 2010-04-17, E0: 0.307, ELEV: 440.0, ES0: 0.259, ET0: 0.29100000000000004, + IRRAD: 22799000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.3999999999999995, + TMAX: 14.6, TMIN: 0.2, VAP: 6.04, WIND: 1.6521498928373055} +- {DAY: 2010-04-18, E0: 0.303, ELEV: 440.0, ES0: 0.263, ET0: 0.28300000000000003, + IRRAD: 18735000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.450000000000001, + TMAX: 15.8, TMIN: 1.1, VAP: 6.95, WIND: 2.2268107251285425} +- {DAY: 2010-04-19, E0: 0.34500000000000003, ELEV: 440.0, ES0: 0.29700000000000004, + ET0: 0.337, IRRAD: 21025000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.8, TMAX: 18.6, TMIN: 3.0, VAP: 7.35, WIND: 1.939480308982924} +- {DAY: 2010-04-20, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.28900000000000003, + ET0: 0.319, IRRAD: 18687000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.5, TMAX: 16.9, TMIN: 4.1, VAP: 7.42, WIND: 2.442308537237756} +- {DAY: 2010-04-21, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.266, ET0: 0.262, + IRRAD: 14308000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.550000000000001, + TMAX: 10.4, TMIN: 4.7, VAP: 5.87, WIND: 3.0888019735653973} +- {DAY: 2010-04-22, E0: 0.288, ELEV: 440.0, ES0: 0.244, ET0: 0.28500000000000003, + IRRAD: 22864000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.95, + TMAX: 12.4, TMIN: -2.5, VAP: 4.42, WIND: 1.72398249687371} +- {DAY: 2010-04-23, E0: 0.333, ELEV: 440.0, ES0: 0.286, ET0: 0.331, IRRAD: 23148000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.0, TMAX: 15.0, + TMIN: -1.0, VAP: 5.13, WIND: 2.2268107251285425} +- {DAY: 2010-04-24, E0: 0.369, ELEV: 440.0, ES0: 0.316, ET0: 0.36, IRRAD: 24044000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.6, TMAX: 18.0, + TMIN: 1.2, VAP: 6.37, WIND: 1.8676477049465194} +- {DAY: 2010-04-25, E0: 0.43899999999999995, ELEV: 440.0, ES0: 0.381, ET0: 0.425, + IRRAD: 24020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.15, + TMAX: 20.6, TMIN: 5.7, VAP: 7.05, WIND: 2.154978121092138} +- {DAY: 2010-04-26, E0: 0.29700000000000004, ELEV: 440.0, ES0: 0.262, ET0: 0.286, + IRRAD: 15089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 11.75, + TMAX: 17.6, TMIN: 5.9, VAP: 8.63, WIND: 2.083145517055733} +- {DAY: 2010-04-27, E0: 0.3, ELEV: 440.0, ES0: 0.26, ET0: 0.286, IRRAD: 17661000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.45, TMAX: 17.9, + TMIN: 3.0, VAP: 8.23, WIND: 1.6521498928373055} +- {DAY: 2010-04-28, E0: 0.373, ELEV: 440.0, ES0: 0.317, ET0: 0.352, IRRAD: 24464000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 19.8, + TMIN: 2.7, VAP: 7.52, WIND: 1.077489060546069} +- {DAY: 2010-04-29, E0: 0.41100000000000003, ELEV: 440.0, ES0: 0.352, ET0: 0.41600000000000004, + IRRAD: 23615000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, + TMAX: 23.8, TMIN: 4.1, VAP: 8.26, WIND: 1.5084846847644964} +- {DAY: 2010-04-30, E0: 0.348, ELEV: 440.0, ES0: 0.311, ET0: 0.333, IRRAD: 14717000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 22.6, + TMIN: 8.5, VAP: 11.53, WIND: 2.2268107251285425} +- {DAY: 2010-05-01, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.26, ET0: 0.24900000000000003, + IRRAD: 12969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.58, SNOWDEPTH: .nan, TEMP: 14.45, + TMAX: 17.8, TMIN: 11.1, VAP: 12.04, WIND: 1.8676477049465194} +- {DAY: 2010-05-02, E0: 0.176, ELEV: 440.0, ES0: 0.158, ET0: 0.147, IRRAD: 7834000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.8, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 14.2, + TMIN: 9.7, VAP: 11.97, WIND: 1.4366520807280918} +- {DAY: 2010-05-03, E0: 0.189, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.161, + IRRAD: 8347000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 13.5, TMIN: 9.1, VAP: 10.82, WIND: 1.6521498928373055} +- {DAY: 2010-05-04, E0: 0.133, ELEV: 440.0, ES0: 0.121, ET0: 0.11699999999999999, + IRRAD: 5850000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.37, SNOWDEPTH: .nan, TEMP: 8.65, + TMAX: 10.6, TMIN: 6.7, VAP: 9.71, WIND: 2.9451367654925877} +- {DAY: 2010-05-05, E0: 0.176, ELEV: 440.0, ES0: 0.161, ET0: 0.125, IRRAD: 7550000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 7.15, TMAX: 8.9, + TMIN: 5.4, VAP: 8.77, WIND: 4.669119262366299} +- {DAY: 2010-05-06, E0: 0.159, ELEV: 440.0, ES0: 0.144, ET0: 0.145, IRRAD: 6844000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 9.350000000000001, + TMAX: 11.8, TMIN: 6.9, VAP: 9.74, WIND: 3.304299785674611} +- {DAY: 2010-05-07, E0: 0.213, ELEV: 440.0, ES0: 0.189, ET0: 0.175, IRRAD: 11585000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.300000000000001, + TMAX: 10.4, TMIN: 4.2, VAP: 8.06, WIND: 2.2268107251285425} +- {DAY: 2010-05-08, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.246, + IRRAD: 16249000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.7, + TMAX: 15.5, TMIN: 3.9, VAP: 8.4, WIND: 1.077489060546069} +- {DAY: 2010-05-09, E0: 0.29, ELEV: 440.0, ES0: 0.252, ET0: 0.261, IRRAD: 16930000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 10.35, TMAX: 17.3, + TMIN: 3.4, VAP: 9.58, WIND: 1.5803172888009012} +- {DAY: 2010-05-10, E0: 0.182, ELEV: 440.0, ES0: 0.16299999999999998, ET0: 0.152, + IRRAD: 8387000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 14.0, TMIN: 8.6, VAP: 11.36, WIND: 1.077489060546069} +- {DAY: 2010-05-11, E0: 0.39, ELEV: 440.0, ES0: 0.344, ET0: 0.317, IRRAD: 18611000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.3, + TMIN: 9.2, VAP: 12.27, WIND: 2.5859737453105653} +- {DAY: 2010-05-12, E0: 0.32599999999999996, ELEV: 440.0, ES0: 0.29100000000000004, + ET0: 0.269, IRRAD: 14823000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.55, TMAX: 15.5, TMIN: 9.6, VAP: 10.25, WIND: 2.154978121092138} +- {DAY: 2010-05-13, E0: 0.197, ELEV: 440.0, ES0: 0.178, ET0: 0.16699999999999998, + IRRAD: 8293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.44000000000000006, SNOWDEPTH: .nan, + TEMP: 9.95, TMAX: 12.7, TMIN: 7.2, VAP: 9.85, WIND: 2.7296389533833745} +- {DAY: 2010-05-14, E0: 0.149, ELEV: 440.0, ES0: 0.133, ET0: 0.12, IRRAD: 7517000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 7.25, TMAX: 8.6, + TMIN: 5.9, VAP: 8.94, WIND: 1.72398249687371} +- {DAY: 2010-05-15, E0: 0.177, ELEV: 440.0, ES0: 0.161, ET0: 0.148, IRRAD: 8182000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 7.300000000000001, + TMAX: 9.3, TMIN: 5.3, VAP: 8.06, WIND: 2.0113129130193284} +- {DAY: 2010-05-16, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.267, ET0: 0.23500000000000001, + IRRAD: 11902000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.600000000000001, + TMAX: 12.3, TMIN: 4.9, VAP: 7.59, WIND: 3.1606345776018023} +- {DAY: 2010-05-17, E0: 0.364, ELEV: 440.0, ES0: 0.323, ET0: 0.315, IRRAD: 18616000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 10.1, TMAX: 15.4, + TMIN: 4.8, VAP: 7.99, WIND: 2.801471557419779} +- {DAY: 2010-05-18, E0: 0.23900000000000002, ELEV: 440.0, ES0: 0.217, ET0: 0.20600000000000002, + IRRAD: 10082000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 9.3, + TMAX: 11.5, TMIN: 7.1, VAP: 8.29, WIND: 2.65780634934697} +- {DAY: 2010-05-19, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.096, ET0: 0.095, + IRRAD: 5446000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 6.1, + TMAX: 7.1, TMIN: 5.1, VAP: 8.46, WIND: 2.7296389533833745} +- {DAY: 2010-05-20, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.095, ET0: 0.10400000000000001, + IRRAD: 5694000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 9.5, + TMAX: 12.5, TMIN: 6.5, VAP: 11.3, WIND: 1.3648194766916872} +- {DAY: 2010-05-21, E0: 0.265, ELEV: 440.0, ES0: 0.23700000000000002, ET0: 0.21800000000000003, + IRRAD: 11531000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 13.3, + TMAX: 17.0, TMIN: 9.6, VAP: 12.21, WIND: 1.8676477049465194} +- {DAY: 2010-05-22, E0: 0.386, ELEV: 440.0, ES0: 0.339, ET0: 0.323, IRRAD: 19035000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.1, SNOWDEPTH: .nan, TEMP: 14.15, TMAX: 20.1, + TMIN: 8.2, VAP: 11.77, WIND: 1.5084846847644964} +- {DAY: 2010-05-23, E0: 0.45099999999999996, ELEV: 440.0, ES0: 0.395, ET0: 0.378, + IRRAD: 22815000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.6, + TMAX: 20.9, TMIN: 8.3, VAP: 11.7, WIND: 1.6521498928373055} +- {DAY: 2010-05-24, E0: 0.492, ELEV: 440.0, ES0: 0.433, ET0: 0.43600000000000005, + IRRAD: 23334000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 16.05, + TMAX: 23.5, TMIN: 8.6, VAP: 12.38, WIND: 2.5141411412741608} +- {DAY: 2010-05-25, E0: 0.458, ELEV: 440.0, ES0: 0.404, ET0: 0.39, IRRAD: 20822000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: .nan, TEMP: 16.65, + TMAX: 22.0, TMIN: 11.3, VAP: 13.18, WIND: 2.370475933201351} +- {DAY: 2010-05-26, E0: 0.215, ELEV: 440.0, ES0: 0.193, ET0: 0.187, IRRAD: 9210000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.93, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 17.5, + TMIN: 10.6, VAP: 13.39, WIND: 1.5084846847644964} +- {DAY: 2010-05-27, E0: 0.303, ELEV: 440.0, ES0: 0.27, ET0: 0.257, IRRAD: 13115000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 15.0, TMAX: 18.8, + TMIN: 11.2, VAP: 13.15, WIND: 2.083145517055733} +- {DAY: 2010-05-28, E0: 0.362, ELEV: 440.0, ES0: 0.321, ET0: 0.305, IRRAD: 16517000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.2, TMAX: 20.4, + TMIN: 10.0, VAP: 12.78, WIND: 1.72398249687371} +- {DAY: 2010-05-29, E0: 0.413, ELEV: 440.0, ES0: 0.362, ET0: 0.346, IRRAD: 20796000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.9, + TMIN: 8.6, VAP: 11.43, WIND: 1.5084846847644964} +- {DAY: 2010-05-30, E0: 0.277, ELEV: 440.0, ES0: 0.25, ET0: 0.233, IRRAD: 11117000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 3.6, SNOWDEPTH: .nan, TEMP: 14.0, TMAX: 17.8, + TMIN: 10.2, VAP: 12.48, WIND: 2.370475933201351} +- {DAY: 2010-05-31, E0: 0.307, ELEV: 440.0, ES0: 0.277, ET0: 0.21800000000000003, + IRRAD: 13569000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.32, SNOWDEPTH: .nan, TEMP: 9.95, + TMAX: 13.1, TMIN: 6.8, VAP: 9.74, WIND: 3.663462805856634} +- {DAY: 2010-06-01, E0: 0.10900000000000001, ELEV: 440.0, ES0: 0.098, ET0: 0.10300000000000001, + IRRAD: 5021000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 9.5, + TMAX: 11.0, TMIN: 8.0, VAP: 10.76, WIND: 2.7296389533833745} +- {DAY: 2010-06-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10300000000000001, + ET0: 0.10800000000000001, IRRAD: 5185000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.2, + SNOWDEPTH: .nan, TEMP: 10.4, TMAX: 11.5, TMIN: 9.3, VAP: 11.4, WIND: 2.65780634934697} +- {DAY: 2010-06-03, E0: 0.128, ELEV: 440.0, ES0: 0.11399999999999999, ET0: 0.118, + IRRAD: 5892000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.75, + TMAX: 13.2, TMIN: 10.3, VAP: 12.64, WIND: 1.7958151009101146} +- {DAY: 2010-06-04, E0: 0.528, ELEV: 440.0, ES0: 0.45899999999999996, ET0: 0.44000000000000006, + IRRAD: 27697000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.65, + TMAX: 21.1, TMIN: 8.2, VAP: 11.3, WIND: 1.5803172888009012} +- {DAY: 2010-06-05, E0: 0.564, ELEV: 440.0, ES0: 0.488, ET0: 0.497, IRRAD: 29724000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.1, TMAX: 24.8, + TMIN: 7.4, VAP: 11.5, WIND: 1.3648194766916872} +- {DAY: 2010-06-06, E0: 0.5900000000000001, ELEV: 440.0, ES0: 0.513, ET0: 0.525, IRRAD: 28294000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.4, TMAX: 27.0, + TMIN: 9.8, VAP: 13.35, WIND: 1.6521498928373055} +- {DAY: 2010-06-07, E0: 0.505, ELEV: 440.0, ES0: 0.45099999999999996, ET0: 0.42699999999999994, + IRRAD: 19774000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, + TMAX: 22.6, TMIN: 15.6, VAP: 14.43, WIND: 2.801471557419779} +- {DAY: 2010-06-08, E0: 0.538, ELEV: 440.0, ES0: 0.471, ET0: 0.465, IRRAD: 24452000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.85, TMAX: 26.9, + TMIN: 10.8, VAP: 14.7, WIND: 1.4366520807280918} +- {DAY: 2010-06-09, E0: 0.595, ELEV: 440.0, ES0: 0.525, ET0: 0.517, IRRAD: 24742000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, TMAX: 28.6, + TMIN: 14.4, VAP: 17.3, WIND: 2.083145517055733} +- {DAY: 2010-06-10, E0: 0.607, ELEV: 440.0, ES0: 0.536, ET0: 0.533, IRRAD: 24198000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.3, TMAX: 30.5, + TMIN: 16.1, VAP: 17.26, WIND: 1.5803172888009012} +- {DAY: 2010-06-11, E0: 0.653, ELEV: 440.0, ES0: 0.5740000000000001, ET0: 0.5650000000000001, + IRRAD: 27798000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, + TMAX: 27.1, TMIN: 15.9, VAP: 16.05, WIND: 2.298643329164947} +- {DAY: 2010-06-12, E0: 0.5, ELEV: 440.0, ES0: 0.44400000000000006, ET0: 0.437, IRRAD: 19853000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 20.4, TMAX: 26.5, + TMIN: 14.3, VAP: 15.11, WIND: 1.72398249687371} +- {DAY: 2010-06-13, E0: 0.371, ELEV: 440.0, ES0: 0.33399999999999996, ET0: 0.29900000000000004, + IRRAD: 14405000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 15.8, + TMAX: 19.3, TMIN: 12.3, VAP: 13.18, WIND: 2.442308537237756} +- {DAY: 2010-06-14, E0: 0.321, ELEV: 440.0, ES0: 0.288, ET0: 0.258, IRRAD: 12885000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.35, TMAX: 18.9, + TMIN: 11.8, VAP: 13.39, WIND: 2.0113129130193284} +- {DAY: 2010-06-15, E0: 0.369, ELEV: 440.0, ES0: 0.335, ET0: 0.288, IRRAD: 13535000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.200000000000001, + TMAX: 18.6, TMIN: 11.8, VAP: 12.91, WIND: 3.2324671816382065} +- {DAY: 2010-06-16, E0: 0.413, ELEV: 440.0, ES0: 0.374, ET0: 0.33999999999999997, + IRRAD: 15421000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.3, + TMAX: 17.3, TMIN: 11.3, VAP: 11.03, WIND: 4.309956242184276} +- {DAY: 2010-06-17, E0: 0.489, ELEV: 440.0, ES0: 0.438, ET0: 0.389, IRRAD: 20003000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.3, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 19.8, + TMIN: 11.3, VAP: 12.24, WIND: 3.735295409893039} +- {DAY: 2010-06-18, E0: 0.28700000000000003, ELEV: 440.0, ES0: 0.258, ET0: 0.242, + IRRAD: 11148000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 16.35, + TMAX: 18.7, TMIN: 14.0, VAP: 14.16, WIND: 1.5803172888009012} +- {DAY: 2010-06-19, E0: 0.346, ELEV: 440.0, ES0: 0.308, ET0: 0.275, IRRAD: 16133000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.1, TMAX: 15.6, + TMIN: 8.6, VAP: 10.12, WIND: 1.6521498928373055} +- {DAY: 2010-06-20, E0: 0.23199999999999998, ELEV: 440.0, ES0: 0.21000000000000002, + ET0: 0.19, IRRAD: 9754000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, + TEMP: 11.0, TMAX: 14.0, TMIN: 8.0, VAP: 10.05, WIND: 1.3648194766916872} +- {DAY: 2010-06-21, E0: 0.337, ELEV: 440.0, ES0: 0.303, ET0: 0.264, IRRAD: 14403000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.3, TMAX: 15.8, + TMIN: 8.8, VAP: 10.18, WIND: 1.72398249687371} +- {DAY: 2010-06-22, E0: 0.36, ELEV: 440.0, ES0: 0.318, ET0: 0.312, IRRAD: 17475000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.65, TMAX: 18.3, + TMIN: 7.0, VAP: 9.81, WIND: 1.5084846847644964} +- {DAY: 2010-06-23, E0: 0.383, ELEV: 440.0, ES0: 0.33599999999999997, ET0: 0.331, + IRRAD: 19579000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.05, + TMAX: 19.7, TMIN: 6.4, VAP: 10.42, WIND: 1.2929868726552827} +- {DAY: 2010-06-24, E0: 0.44800000000000006, ELEV: 440.0, ES0: 0.397, ET0: 0.383, + IRRAD: 19454000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.1, + TMAX: 22.5, TMIN: 11.7, VAP: 11.5, WIND: 1.2929868726552827} +- {DAY: 2010-06-25, E0: 0.418, ELEV: 440.0, ES0: 0.367, ET0: 0.378, IRRAD: 19342000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 17.05, TMAX: 24.0, + TMIN: 10.1, VAP: 13.52, WIND: 1.5803172888009012} +- {DAY: 2010-06-26, E0: 0.457, ELEV: 440.0, ES0: 0.4, ET0: 0.40499999999999997, IRRAD: 21119000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.75, TMAX: 24.3, + TMIN: 11.2, VAP: 13.96, WIND: 1.5084846847644964} +- {DAY: 2010-06-27, E0: 0.571, ELEV: 440.0, ES0: 0.49800000000000005, ET0: 0.506, + IRRAD: 26779000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.9, + TMAX: 24.8, TMIN: 13.0, VAP: 12.48, WIND: 1.6521498928373055} +- {DAY: 2010-06-28, E0: 0.585, ELEV: 440.0, ES0: 0.507, ET0: 0.519, IRRAD: 28562000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, TMAX: 26.6, + TMIN: 11.6, VAP: 12.38, WIND: 1.077489060546069} +- {DAY: 2010-06-29, E0: 0.538, ELEV: 440.0, ES0: 0.46799999999999997, ET0: 0.493, + IRRAD: 25202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.0, + TMAX: 28.1, TMIN: 11.9, VAP: 13.52, WIND: 1.1493216645824735} +- {DAY: 2010-06-30, E0: 0.515, ELEV: 440.0, ES0: 0.45499999999999996, ET0: 0.45099999999999996, + IRRAD: 21164000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 21.35, + TMAX: 27.5, TMIN: 15.2, VAP: 15.65, WIND: 1.3648194766916872} +- {DAY: 2010-07-01, E0: 0.533, ELEV: 440.0, ES0: 0.462, ET0: 0.47800000000000004, + IRRAD: 25266000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.7, + TMAX: 28.2, TMIN: 13.2, VAP: 14.63, WIND: 0.861991248436855} +- {DAY: 2010-07-02, E0: 0.597, ELEV: 440.0, ES0: 0.518, ET0: 0.5349999999999999, IRRAD: 27426000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.2, TMAX: 30.2, + TMIN: 14.2, VAP: 14.87, WIND: 0.9338238524732597} +- {DAY: 2010-07-03, E0: 0.614, ELEV: 440.0, ES0: 0.537, ET0: 0.5519999999999999, IRRAD: 26263000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.1, TMAX: 30.8, + TMIN: 15.4, VAP: 15.51, WIND: 1.2929868726552827} +- {DAY: 2010-07-04, E0: 0.509, ELEV: 440.0, ES0: 0.449, ET0: 0.457, IRRAD: 20494000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 22.45, TMAX: 28.9, + TMIN: 16.0, VAP: 17.26, WIND: 1.5084846847644964} +- {DAY: 2010-07-05, E0: 0.489, ELEV: 440.0, ES0: 0.43600000000000005, ET0: 0.409, + IRRAD: 18435000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 22.0, + TMAX: 26.7, TMIN: 17.3, VAP: 17.84, WIND: 1.6521498928373055} +- {DAY: 2010-07-06, E0: 0.454, ELEV: 440.0, ES0: 0.40499999999999997, ET0: 0.381, + IRRAD: 18109000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.049999999999997, + TMAX: 20.4, TMIN: 15.7, VAP: 13.45, WIND: 2.2268107251285425} +- {DAY: 2010-07-07, E0: 0.40499999999999997, ELEV: 440.0, ES0: 0.352, ET0: 0.377, + IRRAD: 21158000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.1, + TMAX: 22.4, TMIN: 7.8, VAP: 10.22, WIND: 1.077489060546069} +- {DAY: 2010-07-08, E0: 0.5599999999999999, ELEV: 440.0, ES0: 0.484, ET0: 0.505, IRRAD: 28373000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.0, TMAX: 27.4, + TMIN: 8.6, VAP: 11.33, WIND: 1.0056564565096642} +- {DAY: 2010-07-09, E0: 0.609, ELEV: 440.0, ES0: 0.5269999999999999, ET0: 0.55, IRRAD: 28929000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 30.9, + TMIN: 11.4, VAP: 13.69, WIND: 0.9338238524732597} +- {DAY: 2010-07-10, E0: 0.619, ELEV: 440.0, ES0: 0.5389999999999999, ET0: 0.5780000000000001, + IRRAD: 27293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.25, + TMAX: 32.1, TMIN: 14.4, VAP: 15.14, WIND: 1.2929868726552827} +- {DAY: 2010-07-11, E0: 0.671, ELEV: 440.0, ES0: 0.587, ET0: 0.628, IRRAD: 28557000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 24.1, TMAX: 33.7, + TMIN: 14.5, VAP: 13.93, WIND: 1.4366520807280918} +- {DAY: 2010-07-12, E0: 0.669, ELEV: 440.0, ES0: 0.589, ET0: 0.617, IRRAD: 27106000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 24.45, TMAX: 33.5, + TMIN: 15.4, VAP: 16.08, WIND: 1.5803172888009012} +- {DAY: 2010-07-13, E0: 0.5700000000000001, ELEV: 440.0, ES0: 0.506, ET0: 0.514, IRRAD: 21652000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 23.65, TMAX: 29.1, + TMIN: 18.2, VAP: 17.03, WIND: 1.939480308982924} +- {DAY: 2010-07-14, E0: 0.633, ELEV: 440.0, ES0: 0.5509999999999999, ET0: 0.579, IRRAD: 27607000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 24.0, TMAX: 32.9, + TMIN: 15.1, VAP: 16.42, WIND: 1.1493216645824735} +- {DAY: 2010-07-15, E0: 0.43499999999999994, ELEV: 440.0, ES0: 0.39, ET0: 0.376, IRRAD: 15587000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.75, TMAX: 26.0, + TMIN: 19.5, VAP: 17.94, WIND: 1.5803172888009012} +- {DAY: 2010-07-16, E0: 0.645, ELEV: 440.0, ES0: 0.5650000000000001, ET0: 0.585, IRRAD: 26895000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 24.25, TMAX: 33.4, + TMIN: 15.1, VAP: 18.14, WIND: 1.4366520807280918} +- {DAY: 2010-07-17, E0: 0.391, ELEV: 440.0, ES0: 0.35, ET0: 0.331, IRRAD: 14872000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.31, SNOWDEPTH: .nan, TEMP: 21.55, TMAX: 24.6, + TMIN: 18.5, VAP: 17.36, WIND: 1.8676477049465194} +- {DAY: 2010-07-18, E0: 0.371, ELEV: 440.0, ES0: 0.329, ET0: 0.316, IRRAD: 15735000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.200000000000003, + TMAX: 21.1, TMIN: 13.3, VAP: 14.0, WIND: 1.72398249687371} +- {DAY: 2010-07-19, E0: 0.45499999999999996, ELEV: 440.0, ES0: 0.399, ET0: 0.40099999999999997, + IRRAD: 21342000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.2, + TMAX: 23.4, TMIN: 11.0, VAP: 12.17, WIND: 1.939480308982924} +- {DAY: 2010-07-20, E0: 0.5469999999999999, ELEV: 440.0, ES0: 0.477, ET0: 0.485, IRRAD: 25767000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.0, TMAX: 25.9, + TMIN: 12.1, VAP: 14.23, WIND: 1.7958151009101146} +- {DAY: 2010-07-21, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.509, ET0: 0.517, IRRAD: 26623000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.85, TMAX: 31.2, + TMIN: 14.5, VAP: 16.25, WIND: 0.861991248436855} +- {DAY: 2010-07-22, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.516, ET0: 0.534, IRRAD: 23571000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 24.200000000000003, + TMAX: 31.8, TMIN: 16.6, VAP: 17.94, WIND: 1.5803172888009012} +- {DAY: 2010-07-23, E0: 0.266, ELEV: 440.0, ES0: 0.242, ET0: 0.23199999999999998, + IRRAD: 8448000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.6, SNOWDEPTH: .nan, TEMP: 20.0, + TMAX: 22.4, TMIN: 17.6, VAP: 18.07, WIND: 2.0113129130193284} +- {DAY: 2010-07-24, E0: 0.21800000000000003, ELEV: 440.0, ES0: 0.199, ET0: 0.197, + IRRAD: 7503000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 15.85, + TMAX: 18.0, TMIN: 13.7, VAP: 14.26, WIND: 2.442308537237756} +- {DAY: 2010-07-25, E0: 0.393, ELEV: 440.0, ES0: 0.346, ET0: 0.344, IRRAD: 18998000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 18.8, + TMIN: 9.3, VAP: 10.18, WIND: 1.939480308982924} +- {DAY: 2010-07-26, E0: 0.34700000000000003, ELEV: 440.0, ES0: 0.306, ET0: 0.301, + IRRAD: 16015000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.899999999999999, + TMAX: 20.7, TMIN: 9.1, VAP: 11.9, WIND: 1.3648194766916872} +- {DAY: 2010-07-27, E0: 0.367, ELEV: 440.0, ES0: 0.324, ET0: 0.305, IRRAD: 16530000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 16.35, TMAX: 21.3, + TMIN: 11.4, VAP: 13.79, WIND: 1.3648194766916872} +- {DAY: 2010-07-28, E0: 0.282, ELEV: 440.0, ES0: 0.254, ET0: 0.24300000000000002, + IRRAD: 10520000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16999999999999998, SNOWDEPTH: .nan, + TEMP: 16.9, TMAX: 20.4, TMIN: 13.4, VAP: 15.27, WIND: 2.65780634934697} +- {DAY: 2010-07-29, E0: 0.273, ELEV: 440.0, ES0: 0.244, ET0: 0.22999999999999998, + IRRAD: 11067000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 16.549999999999997, + TMAX: 18.9, TMIN: 14.2, VAP: 14.84, WIND: 1.7958151009101146} +- {DAY: 2010-07-30, E0: 0.312, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.258, + IRRAD: 13224000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.049999999999997, + TMAX: 19.4, TMIN: 12.7, VAP: 13.25, WIND: 1.221154268618878} +- {DAY: 2010-07-31, E0: 0.48200000000000004, ELEV: 440.0, ES0: 0.414, ET0: 0.42800000000000005, + IRRAD: 26033000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.35, + TMAX: 24.1, TMIN: 8.6, VAP: 12.21, WIND: 1.221154268618878} +- {DAY: 2010-08-01, E0: 0.511, ELEV: 440.0, ES0: 0.44000000000000006, ET0: 0.46699999999999997, + IRRAD: 25874000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.75, + TMAX: 27.3, TMIN: 10.2, VAP: 13.62, WIND: 1.221154268618878} +- {DAY: 2010-08-02, E0: 0.301, ELEV: 440.0, ES0: 0.268, ET0: 0.258, IRRAD: 12301000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.8699999999999999, SNOWDEPTH: .nan, TEMP: 19.15, + TMAX: 23.4, TMIN: 14.9, VAP: 17.5, WIND: 1.221154268618878} +- {DAY: 2010-08-03, E0: 0.315, ELEV: 440.0, ES0: 0.282, ET0: 0.263, IRRAD: 12311000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 20.0, + TMIN: 16.3, VAP: 15.81, WIND: 1.8676477049465194} +- {DAY: 2010-08-04, E0: 0.4, ELEV: 440.0, ES0: 0.34900000000000003, ET0: 0.333, IRRAD: 19963000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.4, TMAX: 21.6, + TMIN: 9.2, VAP: 12.34, WIND: 1.1493216645824735} +- {DAY: 2010-08-05, E0: 0.255, ELEV: 440.0, ES0: 0.227, ET0: 0.21800000000000003, + IRRAD: 10993000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.2, + TMAX: 20.4, TMIN: 10.0, VAP: 14.13, WIND: 1.5084846847644964} +- {DAY: 2010-08-06, E0: 0.121, ELEV: 440.0, ES0: 0.10800000000000001, ET0: 0.12, IRRAD: 4960000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.8, SNOWDEPTH: .nan, TEMP: 15.5, TMAX: 16.8, + TMIN: 14.2, VAP: 16.08, WIND: 1.7958151009101146} +- {DAY: 2010-08-07, E0: 0.17099999999999999, ELEV: 440.0, ES0: 0.154, ET0: 0.155, + IRRAD: 6510000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.8, + TMAX: 18.0, TMIN: 13.6, VAP: 15.27, WIND: 2.0113129130193284} +- {DAY: 2010-08-08, E0: 0.374, ELEV: 440.0, ES0: 0.32999999999999996, ET0: 0.314, + IRRAD: 17177000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 16.25, + TMAX: 22.0, TMIN: 10.5, VAP: 13.93, WIND: 1.72398249687371} +- {DAY: 2010-08-09, E0: 0.384, ELEV: 440.0, ES0: 0.339, ET0: 0.331, IRRAD: 16768000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, TMAX: 22.1, + TMIN: 13.2, VAP: 13.96, WIND: 1.7958151009101146} +- {DAY: 2010-08-10, E0: 0.34900000000000003, ELEV: 440.0, ES0: 0.304, ET0: 0.316, + IRRAD: 17022000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.0, + TMAX: 24.6, TMIN: 9.4, VAP: 13.59, WIND: 1.077489060546069} +- {DAY: 2010-08-11, E0: 0.35, ELEV: 440.0, ES0: 0.307, ET0: 0.3, IRRAD: 15774000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 25.0, + TMIN: 11.3, VAP: 15.41, WIND: 1.077489060546069} +- {DAY: 2010-08-12, E0: 0.311, ELEV: 440.0, ES0: 0.275, ET0: 0.262, IRRAD: 13152000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 18.55, TMAX: 22.8, + TMIN: 14.3, VAP: 17.13, WIND: 1.6521498928373055} +- {DAY: 2010-08-13, E0: 0.187, ELEV: 440.0, ES0: 0.16699999999999998, ET0: 0.16599999999999998, + IRRAD: 7020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.8, SNOWDEPTH: .nan, TEMP: 17.95, + TMAX: 20.0, TMIN: 15.9, VAP: 17.3, WIND: 1.221154268618878} +- {DAY: 2010-08-14, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.24500000000000002, + IRRAD: 12078000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, + TMAX: 20.7, TMIN: 14.6, VAP: 16.32, WIND: 2.298643329164947} +- {DAY: 2010-08-15, E0: 0.414, ELEV: 440.0, ES0: 0.369, ET0: 0.374, IRRAD: 15896000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 20.85, TMAX: 25.1, + TMIN: 16.6, VAP: 16.49, WIND: 2.442308537237756} +- {DAY: 2010-08-16, E0: 0.31, ELEV: 440.0, ES0: 0.277, ET0: 0.258, IRRAD: 12819000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 15.8, TMAX: 18.3, + TMIN: 13.3, VAP: 13.45, WIND: 2.5859737453105653} +- {DAY: 2010-08-17, E0: 0.127, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.132, + IRRAD: 4005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.76, SNOWDEPTH: .nan, TEMP: 13.75, + TMAX: 14.9, TMIN: 12.6, VAP: 13.49, WIND: 3.663462805856634} +- {DAY: 2010-08-18, E0: 0.154, ELEV: 440.0, ES0: 0.141, ET0: 0.155, IRRAD: 5067000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.700000000000001, + TMAX: 17.1, TMIN: 12.3, VAP: 13.89, WIND: 2.7296389533833745} +- {DAY: 2010-08-19, E0: 0.361, ELEV: 440.0, ES0: 0.319, ET0: 0.318, IRRAD: 15911000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.65, TMAX: 20.7, + TMIN: 12.6, VAP: 12.71, WIND: 2.154978121092138} +- {DAY: 2010-08-20, E0: 0.391, ELEV: 440.0, ES0: 0.33199999999999996, ET0: 0.361, + IRRAD: 22793000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.5, + TMAX: 25.3, TMIN: 7.7, VAP: 13.12, WIND: 0.861991248436855} +- {DAY: 2010-08-21, E0: 0.426, ELEV: 440.0, ES0: 0.364, ET0: 0.39, IRRAD: 22795000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.25, TMAX: 27.3, + TMIN: 11.2, VAP: 15.58, WIND: 1.0056564565096642} +- {DAY: 2010-08-22, E0: 0.437, ELEV: 440.0, ES0: 0.376, ET0: 0.39, IRRAD: 21331000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.1, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 29.1, + TMIN: 13.2, VAP: 17.94, WIND: 1.077489060546069} +- {DAY: 2010-08-23, E0: 0.262, ELEV: 440.0, ES0: 0.231, ET0: 0.24300000000000002, + IRRAD: 11294000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.11000000000000001, SNOWDEPTH: .nan, + TEMP: 19.6, TMAX: 24.1, TMIN: 15.1, VAP: 18.71, WIND: 1.939480308982924} +- {DAY: 2010-08-24, E0: 0.31, ELEV: 440.0, ES0: 0.282, ET0: 0.27799999999999997, IRRAD: 10039000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 20.0, TMAX: 22.2, + TMIN: 17.8, VAP: 16.79, WIND: 2.65780634934697} +- {DAY: 2010-08-25, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.29, ET0: 0.294, IRRAD: 16736000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.75, TMAX: 19.2, + TMIN: 10.3, VAP: 11.97, WIND: 2.298643329164947} +- {DAY: 2010-08-26, E0: 0.315, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.29300000000000004, + IRRAD: 13589000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 18.45, + TMAX: 26.0, TMIN: 10.9, VAP: 16.35, WIND: 1.939480308982924} +- {DAY: 2010-08-27, E0: 0.256, ELEV: 440.0, ES0: 0.229, ET0: 0.22599999999999998, + IRRAD: 10050000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.36, SNOWDEPTH: .nan, TEMP: 18.0, + TMAX: 21.1, TMIN: 14.9, VAP: 17.53, WIND: 3.663462805856634} +- {DAY: 2010-08-28, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.223, ET0: 0.22000000000000003, + IRRAD: 10561000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.0, + TMAX: 15.6, TMIN: 12.4, VAP: 11.9, WIND: 2.65780634934697} +- {DAY: 2010-08-29, E0: 0.252, ELEV: 440.0, ES0: 0.225, ET0: 0.209, IRRAD: 11595000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 15.5, + TMIN: 8.4, VAP: 10.76, WIND: 2.7296389533833745} +- {DAY: 2010-08-30, E0: 0.176, ELEV: 440.0, ES0: 0.157, ET0: 0.141, IRRAD: 8652000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.47000000000000003, SNOWDEPTH: .nan, TEMP: 9.399999999999999, + TMAX: 11.2, TMIN: 7.6, VAP: 9.95, WIND: 2.9451367654925877} +- {DAY: 2010-08-31, E0: 0.196, ELEV: 440.0, ES0: 0.174, ET0: 0.178, IRRAD: 10017000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 14.6, + TMIN: 7.6, VAP: 10.35, WIND: 2.083145517055733} +- {DAY: 2010-09-01, E0: 0.16799999999999998, ELEV: 440.0, ES0: 0.149, ET0: 0.142, + IRRAD: 8681000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 10.0, + TMAX: 14.4, TMIN: 5.6, VAP: 10.66, WIND: 1.72398249687371} +- {DAY: 2010-09-02, E0: 0.175, ELEV: 440.0, ES0: 0.154, ET0: 0.147, IRRAD: 8821000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 11.65, TMAX: 15.8, + TMIN: 7.5, VAP: 11.7, WIND: 1.0056564565096642} +- {DAY: 2010-09-03, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.21400000000000002, + ET0: 0.211, IRRAD: 14382000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.35, TMAX: 17.2, TMIN: 7.5, VAP: 11.33, WIND: 1.221154268618878} +- {DAY: 2010-09-04, E0: 0.225, ELEV: 440.0, ES0: 0.20099999999999998, ET0: 0.194, + IRRAD: 9609000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 13.15, + TMAX: 16.6, TMIN: 9.7, VAP: 10.66, WIND: 1.5084846847644964} +- {DAY: 2010-09-05, E0: 0.306, ELEV: 440.0, ES0: 0.262, ET0: 0.277, IRRAD: 19211000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 16.2, + TMIN: 6.0, VAP: 9.21, WIND: 2.65780634934697} +- {DAY: 2010-09-06, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.24900000000000003, + ET0: 0.272, IRRAD: 18341000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 10.75, TMAX: 15.9, TMIN: 5.6, VAP: 8.77, WIND: 2.5859737453105653} +- {DAY: 2010-09-07, E0: 0.24, ELEV: 440.0, ES0: 0.21000000000000002, ET0: 0.193, IRRAD: 13266000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 9.75, TMAX: 14.3, + TMIN: 5.2, VAP: 9.88, WIND: 3.663462805856634} +- {DAY: 2010-09-08, E0: 0.22000000000000003, ELEV: 440.0, ES0: 0.196, ET0: 0.152, + IRRAD: 9667000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 12.8, + TMAX: 14.9, TMIN: 10.7, VAP: 12.91, WIND: 3.2324671816382065} +- {DAY: 2010-09-09, E0: 0.131, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.131, + IRRAD: 5725000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 13.65, + TMAX: 15.8, TMIN: 11.5, VAP: 13.18, WIND: 1.7958151009101146} +- {DAY: 2010-09-10, E0: 0.211, ELEV: 440.0, ES0: 0.184, ET0: 0.185, IRRAD: 10961000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.200000000000001, + TMAX: 18.6, TMIN: 9.8, VAP: 12.95, WIND: 1.2929868726552827} +- {DAY: 2010-09-11, E0: 0.286, ELEV: 440.0, ES0: 0.242, ET0: 0.253, IRRAD: 17976000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 21.0, + TMIN: 7.1, VAP: 11.57, WIND: 1.0056564565096642} +- {DAY: 2010-09-12, E0: 0.246, ELEV: 440.0, ES0: 0.205, ET0: 0.238, IRRAD: 16699000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, TMAX: 21.7, + TMIN: 6.2, VAP: 11.67, WIND: 0.861991248436855} +- {DAY: 2010-09-13, E0: 0.101, ELEV: 440.0, ES0: 0.088, ET0: 0.11699999999999999, + IRRAD: 5574000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.4, + TMAX: 15.9, TMIN: 8.9, VAP: 12.58, WIND: 1.221154268618878} +- {DAY: 2010-09-14, E0: 0.12, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.10300000000000001, + IRRAD: 5860000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.2, + TMAX: 13.8, TMIN: 8.6, VAP: 12.17, WIND: 2.370475933201351} +- {DAY: 2010-09-15, E0: 0.124, ELEV: 440.0, ES0: 0.11499999999999999, ET0: 0.132, + IRRAD: 3950000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 13.55, + TMAX: 15.2, TMIN: 11.9, VAP: 12.81, WIND: 2.801471557419779} +- {DAY: 2010-09-16, E0: 0.24100000000000002, ELEV: 440.0, ES0: 0.21600000000000003, + ET0: 0.22400000000000003, IRRAD: 10417000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, + SNOWDEPTH: .nan, TEMP: 13.149999999999999, TMAX: 16.4, TMIN: 9.9, VAP: 10.32, WIND: 2.5859737453105653} +- {DAY: 2010-09-17, E0: 0.195, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.192, + IRRAD: 11312000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, + TMAX: 15.9, TMIN: 5.1, VAP: 9.17, WIND: 1.939480308982924} +- {DAY: 2010-09-18, E0: 0.182, ELEV: 440.0, ES0: 0.152, ET0: 0.176, IRRAD: 14229000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.25, TMAX: 14.7, + TMIN: 1.8, VAP: 8.29, WIND: 1.221154268618878} +- {DAY: 2010-09-19, E0: 0.20099999999999998, ELEV: 440.0, ES0: 0.16899999999999998, + ET0: 0.186, IRRAD: 14777000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 8.75, TMAX: 15.2, TMIN: 2.3, VAP: 7.79, WIND: 1.077489060546069} +- {DAY: 2010-09-20, E0: 0.176, ELEV: 440.0, ES0: 0.143, ET0: 0.19, IRRAD: 14819000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 18.3, + TMIN: 1.3, VAP: 9.21, WIND: 1.0056564565096642} +- {DAY: 2010-09-21, E0: 0.21000000000000002, ELEV: 440.0, ES0: 0.16999999999999998, + ET0: 0.225, IRRAD: 17280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.399999999999999, TMAX: 20.9, TMIN: 3.9, VAP: 9.85, WIND: 0.9338238524732597} +- {DAY: 2010-09-22, E0: 0.215, ELEV: 440.0, ES0: 0.174, ET0: 0.23500000000000001, + IRRAD: 16698000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.45, + TMAX: 20.8, TMIN: 6.1, VAP: 10.93, WIND: 1.3648194766916872} +- {DAY: 2010-09-23, E0: 0.191, ELEV: 440.0, ES0: 0.155, ET0: 0.198, IRRAD: 14630000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.600000000000001, + TMAX: 20.6, TMIN: 6.6, VAP: 12.24, WIND: 1.077489060546069} +- {DAY: 2010-09-24, E0: 0.20299999999999999, ELEV: 440.0, ES0: 0.17099999999999999, + ET0: 0.207, IRRAD: 12696000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, + TEMP: 14.600000000000001, TMAX: 21.3, TMIN: 7.9, VAP: 12.91, WIND: 1.6521498928373055} +- {DAY: 2010-09-25, E0: 0.072, ELEV: 440.0, ES0: 0.064, ET0: 0.08299999999999999, + IRRAD: 3235000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 12.15, + TMAX: 13.3, TMIN: 11.0, VAP: 12.81, WIND: 1.8676477049465194} +- {DAY: 2010-09-26, E0: 0.118, ELEV: 440.0, ES0: 0.10700000000000001, ET0: 0.11100000000000002, + IRRAD: 5247000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.95, + TMAX: 10.9, TMIN: 7.0, VAP: 9.37, WIND: 2.5859737453105653} +- {DAY: 2010-09-27, E0: 0.181, ELEV: 440.0, ES0: 0.16, ET0: 0.153, IRRAD: 9271000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 8.95, TMAX: 12.4, + TMIN: 5.5, VAP: 9.07, WIND: 3.44796499374742} +- {DAY: 2010-09-28, E0: 0.063, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.057999999999999996, + IRRAD: 3652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 8.25, + TMAX: 9.1, TMIN: 7.4, VAP: 10.45, WIND: 3.0169693695289928} +- {DAY: 2010-09-29, E0: 0.153, ELEV: 440.0, ES0: 0.134, ET0: 0.127, IRRAD: 8714000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.9, TMAX: 12.1, + TMIN: 7.7, VAP: 9.61, WIND: 1.4366520807280918} +- {DAY: 2010-09-30, E0: 0.13999999999999999, ELEV: 440.0, ES0: 0.123, ET0: 0.11299999999999999, + IRRAD: 7718000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.2, + TMAX: 12.3, TMIN: 4.1, VAP: 8.46, WIND: 1.0056564565096642} +- {DAY: 2010-10-01, E0: 0.06, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.071, + IRRAD: 3340000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: .nan, TEMP: 7.55, + TMAX: 10.2, TMIN: 4.9, VAP: 9.54, WIND: 1.221154268618878} +- {DAY: 2010-10-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10200000000000001, + ET0: 0.099, IRRAD: 6112000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, + TEMP: 10.4, TMAX: 13.8, TMIN: 7.0, VAP: 11.16, WIND: 1.5803172888009012} +- {DAY: 2010-10-03, E0: 0.152, ELEV: 440.0, ES0: 0.128, ET0: 0.134, IRRAD: 10165000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 12.9, + TMIN: 9.6, VAP: 11.19, WIND: 3.304299785674611} +- {DAY: 2010-10-04, E0: 0.142, ELEV: 440.0, ES0: 0.118, ET0: 0.125, IRRAD: 10677000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, TMAX: 12.3, + TMIN: 8.7, VAP: 10.96, WIND: 3.735295409893039} +- {DAY: 2010-10-05, E0: 0.121, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.092, + IRRAD: 6490000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.3, + TMAX: 13.2, TMIN: 9.4, VAP: 12.07, WIND: 2.154978121092138} +- {DAY: 2010-10-06, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.074, ET0: 0.077, + IRRAD: 3969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.0, + TMAX: 12.2, TMIN: 9.8, VAP: 12.0, WIND: 2.0113129130193284} +- {DAY: 2010-10-07, E0: 0.072, ELEV: 440.0, ES0: 0.065, ET0: 0.079, IRRAD: 3115000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.2, TMAX: 11.9, + TMIN: 10.5, VAP: 11.94, WIND: 2.370475933201351} +- {DAY: 2010-10-08, E0: 0.178, ELEV: 440.0, ES0: 0.148, ET0: 0.21400000000000002, + IRRAD: 12854000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.700000000000001, + TMAX: 16.1, TMIN: 7.3, VAP: 9.58, WIND: 3.663462805856634} +- {DAY: 2010-10-09, E0: 0.20400000000000001, ELEV: 440.0, ES0: 0.175, ET0: 0.23700000000000002, + IRRAD: 12656000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.600000000000001, + TMAX: 15.3, TMIN: 5.9, VAP: 7.55, WIND: 3.44796499374742} +- {DAY: 2010-10-10, E0: 0.16399999999999998, ELEV: 440.0, ES0: 0.135, ET0: 0.213, + IRRAD: 13447000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.85, + TMAX: 14.0, TMIN: 3.7, VAP: 6.58, WIND: 2.8733041614561836} +- {DAY: 2010-10-11, E0: 0.16, ELEV: 440.0, ES0: 0.131, ET0: 0.21200000000000002, IRRAD: 13109000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.9, TMAX: 14.5, + TMIN: 3.3, VAP: 6.85, WIND: 3.0169693695289928} +- {DAY: 2010-10-12, E0: 0.123, ELEV: 440.0, ES0: 0.096, ET0: 0.16299999999999998, + IRRAD: 13005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.449999999999999, + TMAX: 14.2, TMIN: 0.7, VAP: 7.32, WIND: 2.5141411412741608} +- {DAY: 2010-10-13, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.092, ET0: 0.134, + IRRAD: 11311000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.85, + TMAX: 12.1, TMIN: 1.6, VAP: 7.62, WIND: 2.8733041614561836} +- {DAY: 2010-10-14, E0: 0.073, ELEV: 440.0, ES0: 0.052000000000000005, ET0: 0.10700000000000001, + IRRAD: 10652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.5, + TMAX: 12.4, TMIN: -1.4, VAP: 7.05, WIND: 1.2929868726552827} +- {DAY: 2010-10-15, E0: 0.052000000000000005, ELEV: 440.0, ES0: 0.045, ET0: 0.05, + IRRAD: 3788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.43, SNOWDEPTH: .nan, TEMP: 4.2, + TMAX: 8.6, TMIN: -0.2, VAP: 8.19, WIND: 0.9338238524732597} +- {DAY: 2010-10-16, E0: 0.054000000000000006, ELEV: 440.0, ES0: 0.047, ET0: 0.057999999999999996, + IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.31, SNOWDEPTH: .nan, TEMP: 6.7, + TMAX: 7.5, TMIN: 5.9, VAP: 8.94, WIND: 1.1493216645824735} +- {DAY: 2010-10-17, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.076, ET0: 0.08399999999999999, + IRRAD: 3537000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 6.3, + TMAX: 7.5, TMIN: 5.1, VAP: 7.72, WIND: 2.442308537237756} +- {DAY: 2010-10-18, E0: 0.08499999999999999, ELEV: 440.0, ES0: 0.075, ET0: 0.074, + IRRAD: 5197000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.9, + TMAX: 7.5, TMIN: 2.3, VAP: 7.05, WIND: 1.3648194766916872} +- {DAY: 2010-10-19, E0: 0.061, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.06999999999999999, + IRRAD: 3878000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 4.95, + TMAX: 7.2, TMIN: 2.7, VAP: 7.55, WIND: 2.5859737453105653} +- {DAY: 2010-10-20, E0: 0.068, ELEV: 440.0, ES0: 0.062, ET0: 0.072, IRRAD: 3005000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.52, SNOWDEPTH: .nan, TEMP: 5.449999999999999, + TMAX: 6.6, TMIN: 4.3, VAP: 7.72, WIND: 3.0169693695289928} +- {DAY: 2010-10-21, E0: 0.099, ELEV: 440.0, ES0: 0.089, ET0: 0.10200000000000001, + IRRAD: 5320000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 3.75, + TMAX: 6.1, TMIN: 1.4, VAP: 5.87, WIND: 2.8733041614561836} +- {DAY: 2010-10-22, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.04, ET0: 0.073, IRRAD: 8983000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.1, TMAX: 6.9, + TMIN: -2.7, VAP: 5.7, WIND: 1.5084846847644964} +- {DAY: 2010-10-23, E0: 0.037, ELEV: 440.0, ES0: 0.025, ET0: 0.06, IRRAD: 6012000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.21000000000000002, SNOWDEPTH: .nan, TEMP: 3.6999999999999997, + TMAX: 9.6, TMIN: -2.2, VAP: 7.35, WIND: 1.6521498928373055} +- {DAY: 2010-10-24, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.049, ET0: 0.066, + IRRAD: 2853000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 6.35, + TMAX: 7.6, TMIN: 5.1, VAP: 8.36, WIND: 2.370475933201351} +- {DAY: 2010-10-25, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.05, ET0: 0.05600000000000001, + IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 3.8, + TMAX: 5.6, TMIN: 2.0, VAP: 6.78, WIND: 1.1493216645824735} +- {DAY: 2010-10-26, E0: 0.051000000000000004, ELEV: 440.0, ES0: 0.040999999999999995, + ET0: 0.06, IRRAD: 5809000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, + TEMP: 2.4, TMAX: 6.8, TMIN: -2.0, VAP: 6.07, WIND: 1.1493216645824735} +- {DAY: 2010-10-27, E0: 0.047, ELEV: 440.0, ES0: 0.031, ET0: 0.061, IRRAD: 9014000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.5, TMAX: 8.1, + TMIN: -3.1, VAP: 5.87, WIND: 1.1493216645824735} +- {DAY: 2010-10-28, E0: 0.071, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.08399999999999999, + IRRAD: 7497000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.3999999999999995, + TMAX: 10.6, TMIN: 0.2, VAP: 6.58, WIND: 1.4366520807280918} +- {DAY: 2010-10-29, E0: 0.032, ELEV: 440.0, ES0: 0.012, ET0: 0.087, IRRAD: 9759000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.65, TMAX: 14.4, + TMIN: -1.1, VAP: 6.78, WIND: 1.077489060546069} +- {DAY: 2010-10-30, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.018, ET0: 0.075, + IRRAD: 8668000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.8500000000000005, + TMAX: 11.9, TMIN: -0.2, VAP: 7.01, WIND: 1.3648194766916872} +- {DAY: 2010-10-31, E0: 0.046, ELEV: 440.0, ES0: 0.033, ET0: 0.06899999999999999, + IRRAD: 6399000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.6499999999999995, + TMAX: 11.6, TMIN: 1.7, VAP: 8.06, WIND: 1.72398249687371} +- {DAY: 2010-11-01, E0: 0.073, ELEV: 440.0, ES0: 0.061, ET0: 0.071, IRRAD: 5266000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 14.3, + TMIN: 5.3, VAP: 9.64, WIND: 1.077489060546069} +- {DAY: 2010-11-02, E0: 0.019, ELEV: 440.0, ES0: 0.012, ET0: 0.04, IRRAD: 3367000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 5.45, TMAX: 8.3, + TMIN: 2.6, VAP: 8.87, WIND: 1.8676477049465194} +- {DAY: 2010-11-03, E0: 0.062, ELEV: 440.0, ES0: 0.054000000000000006, ET0: 0.074, + IRRAD: 3638000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 8.4, + TMAX: 11.8, TMIN: 5.0, VAP: 9.74, WIND: 3.1606345776018023} +- {DAY: 2010-11-04, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.11000000000000001, + ET0: 0.141, IRRAD: 1972000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, + TEMP: 12.9, TMAX: 15.4, TMIN: 10.4, VAP: 11.9, WIND: 4.597286658329894} +- {DAY: 2010-11-05, E0: 0.154, ELEV: 440.0, ES0: 0.144, ET0: 0.177, IRRAD: 4424000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.5, TMAX: 14.7, + TMIN: 12.3, VAP: 10.86, WIND: 4.166291034111466} +- {DAY: 2010-11-06, E0: 0.10800000000000001, ELEV: 440.0, ES0: 0.10400000000000001, + ET0: 0.146, IRRAD: 1597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, + TEMP: 11.5, TMAX: 12.3, TMIN: 10.7, VAP: 9.88, WIND: 3.519797597783825} +- {DAY: 2010-11-07, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.03, ET0: 0.056999999999999995, + IRRAD: 1958000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 8.149999999999999, + TMAX: 10.2, TMIN: 6.1, VAP: 9.68, WIND: 1.5803172888009012} +- {DAY: 2010-11-08, E0: 0.037, ELEV: 440.0, ES0: 0.033, ET0: 0.045, IRRAD: 2280000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 4.6, TMAX: 5.6, + TMIN: 3.6, VAP: 7.62, WIND: 1.5084846847644964} +- {DAY: 2010-11-09, E0: 0.032, ELEV: 440.0, ES0: 0.020999999999999998, ET0: 0.048, + IRRAD: 5597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.0, + TMAX: 8.1, TMIN: 1.9, VAP: 7.28, WIND: 1.5084846847644964} +- {DAY: 2010-11-10, E0: 0.032, ELEV: 440.0, ES0: 0.026000000000000002, ET0: 0.03, + IRRAD: 3253000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 2.6999999999999997, + TMAX: 5.8, TMIN: -0.4, VAP: 7.18, WIND: 1.221154268618878} +- {DAY: 2010-11-11, E0: 0.046, ELEV: 440.0, ES0: 0.039, ET0: 0.05500000000000001, + IRRAD: 3562000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.01, SNOWDEPTH: .nan, TEMP: 4.0, + TMAX: 6.3, TMIN: 1.7, VAP: 7.11, WIND: 3.663462805856634} +- {DAY: 2010-11-12, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.02, ET0: 0.040999999999999995, + IRRAD: 3632000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 6.8, + TMAX: 10.0, TMIN: 3.6, VAP: 9.44, WIND: 4.956449678511917} +- {DAY: 2010-11-13, E0: 0.101, ELEV: 440.0, ES0: 0.092, ET0: 0.149, IRRAD: 4082000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.6, TMAX: 16.2, + TMIN: 9.0, VAP: 11.03, WIND: 4.094458430075062} +- {DAY: 2010-11-14, E0: 0.009, ELEV: 440.0, ES0: 0.004, ET0: 0.081, IRRAD: 7485000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 16.8, + TMIN: 5.7, VAP: 9.74, WIND: 1.6521498928373055} +- {DAY: 2010-11-15, E0: 0.040999999999999995, ELEV: 440.0, ES0: 0.032, ET0: 0.06, + IRRAD: 4089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: .nan, TEMP: 8.45, + TMAX: 12.2, TMIN: 4.7, VAP: 9.71, WIND: 2.083145517055733} +- {DAY: 2010-11-16, E0: 0.02, ELEV: 440.0, ES0: 0.018, ET0: 0.047, IRRAD: 1177000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.13, SNOWDEPTH: .nan, TEMP: 5.9, TMAX: 6.0, + TMIN: 5.8, VAP: 8.53, WIND: 2.298643329164947} +- {DAY: 2010-11-17, E0: 0.013000000000000001, ELEV: 440.0, ES0: 0.011, ET0: 0.033, + IRRAD: 1433000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 4.4, + TMAX: 5.2, TMIN: 3.6, VAP: 8.03, WIND: 1.7958151009101146} +- {DAY: 2010-11-18, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.040999999999999995, + IRRAD: 1288000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 4.800000000000001, + TMAX: 4.9, TMIN: 4.7, VAP: 7.89, WIND: 1.5803172888009012} +- {DAY: 2010-11-19, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.03, + IRRAD: 1611000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 3.1500000000000004, + TMAX: 4.9, TMIN: 1.4, VAP: 7.42, WIND: 1.0056564565096642} +- {DAY: 2010-11-20, E0: 0.024, ELEV: 440.0, ES0: 0.019, ET0: 0.03, IRRAD: 2629000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.95, TMAX: 4.3, + TMIN: 1.6, VAP: 6.88, WIND: 1.5084846847644964} +- {DAY: 2010-11-21, E0: 0.025, ELEV: 440.0, ES0: 0.02, ET0: 0.022, IRRAD: 2790000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 2.75, TMAX: 4.2, + TMIN: 1.3, VAP: 7.18, WIND: 3.376132389711016} +- {DAY: 2010-11-22, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.052000000000000005, + ET0: 0.056999999999999995, IRRAD: 1810000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, + SNOWDEPTH: .nan, TEMP: 5.4, TMAX: 7.0, TMIN: 3.8, VAP: 7.79, WIND: 2.8733041614561836} +- {DAY: 2010-11-23, E0: 0.033, ELEV: 440.0, ES0: 0.031, ET0: 0.036, IRRAD: 1270000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.18, SNOWDEPTH: 0.5, TEMP: 0.8500000000000001, + TMAX: 1.3, TMIN: 0.4, VAP: 6.0, WIND: 3.735295409893039} +- {DAY: 2010-11-24, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.032, ET0: 0.034, + IRRAD: 1628000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.12, SNOWDEPTH: 4.0, TEMP: 1.2, + TMAX: 1.9, TMIN: 0.5, VAP: 6.14, WIND: 3.878960617965848} +- {DAY: 2010-11-25, E0: 0.022, ELEV: 440.0, ES0: 0.016, ET0: 0.03, IRRAD: 3374000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 1.0, TEMP: 0.7499999999999999, + TMAX: 2.3, TMIN: -0.8, VAP: 5.66, WIND: 1.8676477049465194} +- {DAY: 2010-11-26, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.024, + IRRAD: 1677000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 2.0, TEMP: -1.3, + TMAX: -0.2, TMIN: -2.4, VAP: 5.23, WIND: 1.221154268618878} +- {DAY: 2010-11-27, E0: 0.024, ELEV: 440.0, ES0: 0.018, ET0: 0.026000000000000002, + IRRAD: 3588000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 2.0, TEMP: -2.0, + TMAX: -0.4, TMIN: -3.6, VAP: 4.28, WIND: 1.221154268618878} +- {DAY: 2010-11-28, E0: 0.024, ELEV: 440.0, ES0: 0.02, ET0: 0.013000000000000001, + IRRAD: 3194000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 2.0, TEMP: -3.85, + TMAX: -1.5, TMIN: -6.2, VAP: 4.35, WIND: 2.370475933201351} +- {DAY: 2010-11-29, E0: 0.028000000000000004, ELEV: 440.0, ES0: 0.024, ET0: 0.019, + IRRAD: 2553000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 16.0, TEMP: -1.95, + TMAX: -1.0, TMIN: -2.9, VAP: 4.96, WIND: 1.5803172888009012} +- {DAY: 2010-11-30, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.024, ET0: 0.03, + IRRAD: 2146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 19.0, TEMP: -3.8000000000000003, + TMAX: -3.2, TMIN: -4.4, VAP: 3.98, WIND: 2.370475933201351} +- {DAY: 2010-12-01, E0: 0.03, ELEV: 440.0, ES0: 0.028000000000000004, ET0: 0.036, + IRRAD: 1406000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 20.0, TEMP: -6.0, + TMAX: -4.8, TMIN: -7.2, VAP: 3.37, WIND: 4.453621450257085} +- {DAY: 2010-12-02, E0: 0.023, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, + IRRAD: 3010000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -7.95, + TMAX: -5.5, TMIN: -10.4, VAP: 2.87, WIND: 1.939480308982924} +- {DAY: 2010-12-03, E0: 0.019, ELEV: 440.0, ES0: 0.015, ET0: 0.015, IRRAD: 2926000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.100000000000001, + TMAX: -5.4, TMIN: -10.8, VAP: 2.83, WIND: 0.7901586444004506} +- {DAY: 2010-12-04, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.015, + IRRAD: 1788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.6, + TMAX: -5.1, TMIN: -12.1, VAP: 3.14, WIND: 2.0113129130193284} +- {DAY: 2010-12-05, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.01, + IRRAD: 2315000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: 18.0, TEMP: -7.35, + TMAX: -3.7, TMIN: -11.0, VAP: 3.61, WIND: 1.939480308982924} +- {DAY: 2010-12-06, E0: 0.008, ELEV: 440.0, ES0: 0.006, ET0: 0.017, IRRAD: 1609000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 2.0, SNOWDEPTH: 23.0, TEMP: -1.9999999999999998, + TMAX: 0.1, TMIN: -4.1, VAP: 5.26, WIND: 1.1493216645824735} +- {DAY: 2010-12-07, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.019, IRRAD: 1671000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 25.0, TEMP: 0.0, TMAX: 1.5, + TMIN: -1.5, VAP: 5.93, WIND: 1.0056564565096642} +- {DAY: 2010-12-08, E0: 0.02, ELEV: 440.0, ES0: 0.016, ET0: 0.022, IRRAD: 1933000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 21.0, TEMP: 2.6500000000000004, + TMAX: 4.9, TMIN: 0.4, VAP: 7.11, WIND: 1.5803172888009012} +- {DAY: 2010-12-09, E0: 0.020999999999999998, ELEV: 440.0, ES0: 0.018, ET0: 0.024, + IRRAD: 1529000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: 14.0, TEMP: -2.0, + TMAX: -1.2, TMIN: -2.8, VAP: 4.92, WIND: 4.597286658329894} +- {DAY: 2010-12-10, E0: 0.018, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.028999999999999998, + IRRAD: 3723000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: 14.0, + TEMP: -2.45, TMAX: -2.0, TMIN: -2.9, VAP: 4.28, WIND: 3.0888019735653973} +- {DAY: 2010-12-11, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, + IRRAD: 1355000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: 16.0, TEMP: -0.30000000000000004, + TMAX: 2.3, TMIN: -2.9, VAP: 6.07, WIND: 4.453621450257085} +- {DAY: 2010-12-12, E0: 0.039, ELEV: 440.0, ES0: 0.036, ET0: 0.043, IRRAD: 1668000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.24, SNOWDEPTH: 9.0, TEMP: 1.0499999999999998, + TMAX: 1.4, TMIN: 0.7, VAP: 5.8, WIND: 3.807128013929443} +- {DAY: 2010-12-13, E0: 0.006, ELEV: 440.0, ES0: 0.003, ET0: 0.022, IRRAD: 4070000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 9.0, TEMP: -5.9, TMAX: -5.6, + TMIN: -6.2, VAP: 3.17, WIND: 2.5141411412741608} +- {DAY: 2010-12-14, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.008, + IRRAD: 2280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: 9.0, TEMP: -8.25, + TMAX: -5.4, TMIN: -11.1, VAP: 3.27, WIND: 2.083145517055733} +- {DAY: 2010-12-15, E0: 0.022, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, + IRRAD: 1877000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 9.0, TEMP: -6.65, + TMAX: -6.3, TMIN: -7.0, VAP: 3.34, WIND: 2.801471557419779} +- {DAY: 2010-12-16, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.01, IRRAD: 3137000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 11.0, TEMP: -9.1, + TMAX: -6.2, TMIN: -12.0, VAP: 2.8, WIND: 2.154978121092138} +- {DAY: 2010-12-17, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.016, IRRAD: 1541000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 13.0, TEMP: -7.25, TMAX: -4.9, + TMIN: -9.6, VAP: 3.41, WIND: 1.939480308982924} +- {DAY: 2010-12-18, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, + IRRAD: 3633000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -7.3, + TMAX: -4.1, TMIN: -10.5, VAP: 3.03, WIND: 1.5084846847644964} +- {DAY: 2010-12-19, E0: 0.006, ELEV: 440.0, ES0: 0.004, ET0: 0.009, IRRAD: 1737000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.29, SNOWDEPTH: 13.0, TEMP: -6.75, TMAX: -0.6, + TMIN: -12.9, VAP: 4.01, WIND: 2.154978121092138} +- {DAY: 2010-12-20, E0: 0.036, ELEV: 440.0, ES0: 0.033, ET0: 0.048, IRRAD: 1538000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.41, SNOWDEPTH: 13.0, TEMP: 0.7, TMAX: 2.9, + TMIN: -1.5, VAP: 5.4, WIND: 2.65780634934697} +- {DAY: 2010-12-21, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.018, + IRRAD: 2103000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 13.0, TEMP: -0.19999999999999996, + TMAX: 3.5, TMIN: -3.9, VAP: 5.8, WIND: 1.2929868726552827} +- {DAY: 2010-12-22, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.014000000000000002, + IRRAD: 2105000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -0.44999999999999996, + TMAX: 1.5, TMIN: -2.4, VAP: 5.66, WIND: 1.221154268618878} +- {DAY: 2010-12-23, E0: 0.019, ELEV: 440.0, ES0: 0.016, ET0: 0.014000000000000002, + IRRAD: 2239000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 12.0, TEMP: -0.5, + TMAX: 2.1, TMIN: -3.1, VAP: 5.66, WIND: 1.2929868726552827} +- {DAY: 2010-12-24, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.028999999999999998, + IRRAD: 1140000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: 13.0, TEMP: 0.3, + TMAX: 1.5, TMIN: -0.9, VAP: 5.8, WIND: 2.442308537237756} +- {DAY: 2010-12-25, E0: 0.034, ELEV: 440.0, ES0: 0.032, ET0: 0.031, IRRAD: 2108000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 16.0, TEMP: -4.65, TMAX: -4.5, + TMIN: -4.8, VAP: 3.57, WIND: 2.298643329164947} +- {DAY: 2010-12-26, E0: 0.012, ELEV: 440.0, ES0: 0.009, ET0: 0.012, IRRAD: 2899000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: 16.0, TEMP: -9.95, TMAX: -7.9, + TMIN: -12.0, VAP: 2.6, WIND: 1.6521498928373055} +- {DAY: 2010-12-27, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.017, IRRAD: 1694000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: 16.0, TEMP: -6.5, TMAX: -4.2, + TMIN: -8.8, VAP: 3.54, WIND: 1.72398249687371} +- {DAY: 2010-12-28, E0: 0.016, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.023, + IRRAD: 3146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 16.0, TEMP: -4.65, + TMAX: -2.7, TMIN: -6.6, VAP: 3.41, WIND: 1.4366520807280918} +- {DAY: 2010-12-29, E0: 0.004, ELEV: 440.0, ES0: 0.004, ET0: 0.006, IRRAD: 3716000.0, + LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 15.0, TEMP: -11.35, TMAX: -8.7, + TMIN: -14.0, VAP: 2.09, WIND: 0.6464934363276413} +- {DAY: 2010-12-30, E0: 0.0, ELEV: 440.0, ES0: 0.0, ET0: 0.0, IRRAD: 5266000.0, LAT: 49.43613, + LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -13.5, TMAX: -8.4, TMIN: -18.6, + VAP: 1.89, WIND: 0.6464934363276413} +- {DAY: 2010-12-31, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.002, + IRRAD: 1689000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 22.0, TEMP: -9.15, + TMAX: -3.4, TMIN: -14.9, VAP: 3.91, WIND: 1.72398249687371} diff --git a/new_leaf.py b/new_leaf.py new file mode 100644 index 0000000..ca8f8bb --- /dev/null +++ b/new_leaf.py @@ -0,0 +1,524 @@ +"""Leaf dynamics for the WOFOST crop model.""" + +import datetime +import torch +from pcse.base import ParamTemplate +from pcse.base import RatesTemplate +from pcse.base import SimulationObject +from pcse.base import StatesTemplate +from pcse.base.parameter_providers import ParameterProvider +from pcse.base.variablekiosk import VariableKiosk +from pcse.base.weather import WeatherDataContainer +from pcse.decorators import prepare_rates +from pcse.decorators import prepare_states +from pcse.traitlets import Any +from diffwofost.physical_models.utils import AfgenTrait +from diffwofost.physical_models.utils import _broadcast_to +from diffwofost.physical_models.utils import _get_drv +from diffwofost.physical_models.utils import _get_params_shape + + +class WOFOST_Leaf_Dynamics(SimulationObject): + """Leaf dynamics for the WOFOST crop model. + + Implementation of biomass partitioning to leaves, growth and senenscence + of leaves. WOFOST keeps track of the biomass that has been partitioned to + the leaves for each day (variable `LV`), which is called a leaf class). + For each leaf class the leaf age (variable 'LVAGE') and specific leaf area + (variable `SLA`) are also registered. Total living leaf biomass is + calculated by summing the biomass values for all leaf classes. Similarly, + leaf area is calculated by summing leaf biomass times specific leaf area + (`LV` * `SLA`). + + Senescense of the leaves can occur as a result of physiological age, + drought stress or self-shading. + + **Simulation parameters** (provide in cropdata dictionary) + + | Name | Description | Type | Unit | + |--------|------------------------------------------------------------------ |------|------------| + | RGRLAI | Maximum relative increase in LAI. |SCr | ha ha⁻¹ d⁻¹| + | SPAN | Life span of leaves growing at 35 Celsius |SCr | d | + | TBASE | Lower threshold temp. for ageing of leaves |SCr | C | + | PERDL | Max. relative death rate of leaves due to water stress |SCr | | + | TDWI | Initial total crop dry weight |SCr | kg ha⁻¹ | + | KDIFTB | Extinction coefficient for diffuse visible light as function of DVS|TCr | | + | SLATB | Specific leaf area as a function of DVS |TCr | ha kg⁻¹ | + + **State variables** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|-------------| + | LV | Leaf biomass per leaf class | N | kg ha⁻¹ | + | SLA | Specific leaf area per leaf class | N | ha kg⁻¹ | + | LVAGE | Leaf age per leaf class | N | d | + | LVSUM | Sum of LV | N | kg ha⁻¹ | + | LAIEM | LAI at emergence | N | - | + | LASUM | Total leaf area as sum of LV*SLA, not including stem and pod area | N | - | + | LAIEXP | LAI value under theoretical exponential growth | N | - | + | LAIMAX | Maximum LAI reached during growth cycle | N | - | + | LAI | Leaf area index, including stem and pod area | Y | - | + | WLV | Dry weight of living leaves | Y | kg ha⁻¹ | + | DWLV | Dry weight of dead leaves | N | kg ha⁻¹ | + | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | + + **Rate variables** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|---------------| + | GRLV | Growth rate leaves | N | kg ha⁻¹ d⁻¹ | + | DSLV1 | Death rate leaves due to water stress | N | kg ha⁻¹ d⁻¹ | + | DSLV2 | Death rate leaves due to self-shading | N | kg ha⁻¹ d⁻¹ | + | DSLV3 | Death rate leaves due to frost kill | N | kg ha⁻¹ d⁻¹ | + | DSLV | Maximum of DSLV1, DSLV2, DSLV3 | N | kg ha⁻¹ d⁻¹ | + | DALV | Death rate leaves due to aging | N | kg ha⁻¹ d⁻¹ | + | DRLV | Death rate leaves as a combination of DSLV and DALV | N | kg ha⁻¹ d⁻¹ | + | SLAT | Specific leaf area for current time step, adjusted for source/sink limited leaf expansion rate | N | ha kg⁻¹ | + | FYSAGE | Increase in physiological leaf age | N | - | + | GLAIEX | Sink-limited leaf expansion rate (exponential curve) | N | ha ha⁻¹ d⁻¹ | + | GLASOL | Source-limited leaf expansion rate (biomass increase) | N | ha ha⁻¹ d⁻¹ | + + **External dependencies** + + | Name | Description | Provided by | Unit | + |-----------|-----------------------------------|--------------------------------|----------------| + | DVS | Crop development stage | DVS_Phenology | - | + | FL | Fraction biomass to leaves | DVS_Partitioning | - | + | FR | Fraction biomass to roots | DVS_Partitioning | - | + | SAI | Stem area index | WOFOST_Stem_Dynamics | - | + | PAI | Pod area index | WOFOST_Storage_Organ_Dynamics | - | + | TRA | Transpiration rate | Evapotranspiration | cm day⁻¹ ? | + | TRAMX | Maximum transpiration rate | Evapotranspiration | cm day⁻¹ ? | + | ADMI | Above-ground dry matter increase | CropSimulation | kg ha⁻¹ d⁻¹ | + | RFTRA | Reduction factor for transpiration (water & oxygen) | Y | - | + | RF_FROST | Reduction factor frost kill | FROSTOL (optional) | - | + + **Outputs** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|-------------| + | LAI | Leaf area index, including stem and pod area | Y | - | + | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | + + **Gradient mapping (which parameters have a gradient):** + + | Output | Parameters influencing it | + |--------|------------------------------------------| + | LAI | TDWI, SPAN, RGRLAI, TBASE, KDIFTB, SLATB | + | TWLV | TDWI, PERDL | + + [!NOTE] + Notice that the following gradients are zero: + - ∂SPAN/∂LAI + - ∂PERDL/∂TWLV + - ∂KDIFTB/∂LAI + """ # noqa: E501 + + # The following parameters are used to initialize and control the arrays that store information + # on the leaf classes during the time integration: leaf area, age, and biomass. + START_DATE = None # Start date of the simulation + MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) + params_shape = None # Shape of the parameters tensors + + # Default values that can be overridden before instantiation + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + dtype = torch.float64 + + class Parameters(ParamTemplate): + RGRLAI = Any() + SPAN = Any() + TBASE = Any() + PERDL = Any() + TDWI = Any() + SLATB = AfgenTrait() + KDIFTB = AfgenTrait() + + def __init__(self, parvalues, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device + self.RGRLAI = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.SPAN = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TBASE = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.PERDL = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TDWI = [torch.tensor(-99.0, dtype=dtype, device=device)] + + # Call parent init + super().__init__(parvalues) + + class StateVariables(StatesTemplate): + LV = Any() + SLA = Any() + LVAGE = Any() + LAIEM = Any() + LASUM = Any() + LAIEXP = Any() + LAIMAX = Any() + LAI = Any() + WLV = Any() + DWLV = Any() + TWLV = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device if not in kwargs + if "LV" not in kwargs: + self.LV = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "SLA" not in kwargs: + self.SLA = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "LVAGE" not in kwargs: + self.LVAGE = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "LAIEM" not in kwargs: + self.LAIEM = torch.tensor(-99.0, dtype=dtype, device=device) + if "LASUM" not in kwargs: + self.LASUM = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAIEXP" not in kwargs: + self.LAIEXP = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAIMAX" not in kwargs: + self.LAIMAX = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAI" not in kwargs: + self.LAI = torch.tensor(-99.0, dtype=dtype, device=device) + if "WLV" not in kwargs: + self.WLV = torch.tensor(-99.0, dtype=dtype, device=device) + if "DWLV" not in kwargs: + self.DWLV = torch.tensor(-99.0, dtype=dtype, device=device) + if "TWLV" not in kwargs: + self.TWLV = torch.tensor(-99.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish, **kwargs) + + class RateVariables(RatesTemplate): + GRLV = Any() + DSLV1 = Any() + DSLV2 = Any() + DSLV3 = Any() + DSLV = Any() + DALV = Any() + DRLV = Any() + SLAT = Any() + FYSAGE = Any() + GLAIEX = Any() + GLASOL = Any() + + def __init__(self, kiosk, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device + self.GRLV = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV1 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV2 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV3 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV = torch.tensor(0.0, dtype=dtype, device=device) + self.DALV = torch.tensor(0.0, dtype=dtype, device=device) + self.DRLV = torch.tensor(0.0, dtype=dtype, device=device) + self.SLAT = torch.tensor(0.0, dtype=dtype, device=device) + self.FYSAGE = torch.tensor(0.0, dtype=dtype, device=device) + self.GLAIEX = torch.tensor(0.0, dtype=dtype, device=device) + self.GLASOL = torch.tensor(0.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk) + + def initialize( + self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider + ) -> None: + """Initialize the WOFOST_Leaf_Dynamics simulation object. + + Args: + day (datetime.date): The starting date of the simulation. + kiosk (VariableKiosk): A container for registering and publishing + (internal and external) state variables. See PCSE documentation for + details. + parvalues (ParameterProvider): A dictionary-like container holding + all parameter sets (crop, soil, site) as key/value. The values are + arrays or scalars. See PCSE documentation for details. + """ + self.START_DATE = day + self.kiosk = kiosk + # TODO check if parvalues are already torch.nn.Parameters + self.params = self.Parameters(parvalues) + self.rates = self.RateVariables(kiosk) + + # Create scalar constants once to avoid numerical deviations + self._zero = torch.tensor(0.0, dtype=self.dtype, device=self.device) + self._epsilon = torch.tensor(1e-12, dtype=self.dtype, device=self.device) + self._sigmoid_sharpness = torch.tensor(1e-16, dtype=self.dtype, device=self.device) + self._sigmoid_epsilon = torch.tensor(1e-14, dtype=self.dtype, device=self.device) + + # CALCULATE INITIAL STATE VARIABLES + # check for required external variables + _exist_required_external_variables(self.kiosk) + # TODO check if external variables are already torch tensors + + FL = self.kiosk["FL"] + FR = self.kiosk["FR"] + DVS = self.kiosk["DVS"] + + params = self.params + self.params_shape = _get_params_shape(params) + + # Initial leaf biomass + WLV = (params.TDWI * (1 - FR)) * FL + DWLV = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) + TWLV = WLV + DWLV + + # Initialize leaf classes (SLA, age and weight) + SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) + LVAGE = torch.zeros( + (*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device + ) + LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) + SLA[..., 0] = params.SLATB(DVS) + LV[..., 0] = WLV + + # Initial values for leaf area + LAIEM = LV[..., 0] * SLA[..., 0] + LASUM = LAIEM + LAIEXP = LAIEM + LAIMAX = LAIEM + LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] + + # Initialize StateVariables object + self.states = self.StateVariables( + kiosk, + publish=["LAI", "TWLV", "WLV"], + LV=LV, + SLA=SLA, + LVAGE=LVAGE, + LAIEM=LAIEM, + LASUM=LASUM, + LAIEXP=LAIEXP, + LAIMAX=LAIMAX, + LAI=LAI, + WLV=WLV, + DWLV=DWLV, + TWLV=TWLV, + ) + + def _calc_LAI(self): + # Total leaf area Index as sum of leaf, pod and stem area + SAI = self.kiosk["SAI"] + PAI = self.kiosk["PAI"] + total_LAI = self.states.LASUM + SAI + PAI + return total_LAI + + @prepare_rates + def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: + """Calculate the rates of change for the leaf dynamics. + + Args: + day (datetime.date, optional): The current date of the simulation. + drv (WeatherDataContainer, optional): A dictionary-like container holding + weather data elements as key/value. The values are + arrays or scalars. See PCSE documentation for details. + """ + r = self.rates + s = self.states + p = self.params + k = self.kiosk + + # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask + # A mask (0 if DVS < 0, 1 if DVS >= 0) + DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) + dvs_mask = (DVS >= 0).to(dtype=self.dtype) + + # Growth rate leaves + # weight of new leaves + r.GRLV = dvs_mask * k.ADMI * k.FL + + # death of leaves due to water/oxygen stress + r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL + + # death due to self shading cause by high LAI + DVS = self.kiosk["DVS"] + LAICR = 3.2 / p.KDIFTB(DVS) + r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) + + # Death of leaves due to frost damage as determined by + # Reduction Factor Frost "RF_FROST" + if "RF_FROST" in self.kiosk: + r.DSLV3 = s.WLV * k.RF_FROST + else: + r.DSLV3 = torch.zeros_like(s.WLV, dtype=self.dtype) + + r.DSLV3 = dvs_mask * r.DSLV3 + + # leaf death equals maximum of water stress, shading and frost + r.DSLV = torch.maximum(torch.maximum(r.DSLV1, r.DSLV2), r.DSLV3) + r.DSLV = dvs_mask * r.DSLV + + # Determine how much leaf biomass classes have to die in states.LV, + # given the a life span > SPAN, these classes will be accumulated + # in DALV. + # Note that the actual leaf death is imposed on the array LV during the + # state integration step. + tSPAN = _broadcast_to( + p.SPAN, s.LVAGE.shape, dtype=self.dtype, device=self.device + ) # Broadcast to same shape + + # Using a sigmoid here instead of a conditional statement on the value of + # SPAN because the latter would not allow for the gradient to be tracked. + # the if statement `p.SPAN.requires_grad` to avoid unnecessary + # approximation when SPAN is not a learnable parameter. + # TODO: sharpness can be exposed as a parameter + if p.SPAN.requires_grad: + # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very + # small and mask should be 1 + # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is + # equal to zero and mask should be 0.0 + span_mask = torch.sigmoid( + (s.LVAGE - tSPAN - self._sigmoid_epsilon) / self._sigmoid_sharpness + ).to(dtype=self.dtype) + else: + span_mask = (s.LVAGE > tSPAN).to(dtype=self.dtype) + + r.DALV = torch.sum(span_mask * s.LV, dim=-1) + r.DALV = dvs_mask * r.DALV + + # Total death rate leaves + r.DRLV = torch.maximum(r.DSLV, r.DALV) + + # Get the temperature from the drv + TEMP = _get_drv(drv.TEMP, self.params_shape) + + # physiologic ageing of leaves per time step + TBASE = _broadcast_to(p.TBASE, self.params_shape, dtype=self.dtype, device=self.device) + FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) + r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) + + # specific leaf area of leaves per time step + r.SLAT = dvs_mask * p.SLATB(DVS) + + # leaf area not to exceed exponential growth curve + is_lai_exp = s.LAIEXP < 6.0 + DTEFF = torch.clamp(TEMP - TBASE, 0.0) + + # NOTE: conditional statements do not allow for the gradient to be + # tracked through the condition. Thus, the gradient with respect to + # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) + # are expected to be incorrect. + r.GLAIEX = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), + self._zero, + ) + + # source-limited increase in leaf area + r.GLASOL = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), + self._zero, + ) + + # sink-limited increase in leaf area + GLA = torch.minimum(r.GLAIEX, r.GLASOL) + + # adjustment of specific leaf area of youngest leaf class + r.SLAT = torch.where( + dvs_mask.bool(), + torch.where( + is_lai_exp & (r.GRLV > self._epsilon), GLA / (r.GRLV + self._epsilon), r.SLAT + ), + self._zero, + ) + + @prepare_states + def integrate(self, day: datetime.date, delt=1.0) -> None: + """Integrate the leaf dynamics state variables. + + Args: + day (datetime.date, optional): The current date of the simulation. + delt (float, optional): The time step for integration. Defaults to 1.0. + """ + # TODO check if DVS < 0 and skip integration needed + rates = self.rates + states = self.states + + # --------- leave death --------- + tLV = states.LV.clone() + tSLA = states.SLA.clone() + tLVAGE = states.LVAGE.clone() + tDRLV = _broadcast_to(rates.DRLV, tLV.shape, dtype=self.dtype, device=self.device) + + # Leaf death is imposed on leaves from the oldest ones. + # Calculate the cumulative sum of weights after leaf death, and + # find out which leaf classes are dead (negative weights) + weight_cumsum = tLV.cumsum(dim=-1) - tDRLV + is_alive = weight_cumsum >= 0 + + # Adjust value of oldest leaf class, i.e. the first non-zero + # weight along the time axis (the last dimension). + # Cast argument to int because torch.argmax requires it to be numeric + idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True).to( + device=self.device + ) + new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) + tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) + + # Integration of physiological age + # Zero out all dead leaf classes + # NOTE: conditional statements do not allow for the gradient to be + # tracked through the condition. Thus, the gradient with respect to + # parameters that contribute to `is_alive` are expected to be incorrect. + tLV = torch.where(is_alive, tLV, 0.0) + tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) + tLVAGE = torch.where(is_alive, tLVAGE, 0.0) + tSLA = torch.where(is_alive, tSLA, 0.0) + + # --------- leave growth --------- + idx = int((day - self.START_DATE).days / delt) + tLV[..., idx] = rates.GRLV + tSLA[..., idx] = rates.SLAT + tLVAGE[..., idx] = 0.0 + + # calculation of new leaf area + states.LASUM = torch.sum(tLV * tSLA, dim=-1) + states.LAI = self._calc_LAI() + states.LAIMAX = torch.maximum(states.LAI, states.LAIMAX) + + # exponential growth curve + states.LAIEXP = states.LAIEXP + rates.GLAIEX + + # Update leaf biomass states + states.WLV = torch.sum(tLV, dim=-1) + states.DWLV = states.DWLV + rates.DRLV + states.TWLV = states.WLV + states.DWLV + + # Store final leaf biomass deques + self.states.LV = tLV + self.states.SLA = tSLA + self.states.LVAGE = tLVAGE + + +def _exist_required_external_variables(kiosk): + """Check if all required external variables are available in the kiosk. + + Args: + kiosk (VariableKiosk): The variable kiosk to check. + + Raises: + ValueError: If any required external variable is missing. + + """ + required_external_vars_at_init = ["DVS", "FL", "FR", "SAI", "PAI"] + for var in required_external_vars_at_init: + if var not in kiosk: + raise ValueError( + f"Required external variables '{var}' is missing in the kiosk." + f" Ensure that all required variables {required_external_vars_at_init}" + " are provided." + ) diff --git a/old_leaf_dynamics.py b/old_leaf_dynamics.py new file mode 100644 index 0000000..4363670 --- /dev/null +++ b/old_leaf_dynamics.py @@ -0,0 +1,436 @@ +"""Leaf dynamics for the WOFOST crop model.""" + +import datetime +import torch +from pcse.base import ParamTemplate +from pcse.base import RatesTemplate +from pcse.base import SimulationObject +from pcse.base import StatesTemplate +from pcse.base.parameter_providers import ParameterProvider +from pcse.base.variablekiosk import VariableKiosk +from pcse.base.weather import WeatherDataContainer +from pcse.decorators import prepare_rates +from pcse.decorators import prepare_states +from pcse.traitlets import Any +from diffwofost.physical_models.utils import AfgenTrait +from diffwofost.physical_models.utils import _broadcast_to +from diffwofost.physical_models.utils import _get_drv +from diffwofost.physical_models.utils import _get_params_shape + +DTYPE = torch.float64 # Default data type for tensors in this module + + +class WOFOST_Leaf_Dynamics(SimulationObject): + """Leaf dynamics for the WOFOST crop model. + + Implementation of biomass partitioning to leaves, growth and senenscence + of leaves. WOFOST keeps track of the biomass that has been partitioned to + the leaves for each day (variable `LV`), which is called a leaf class). + For each leaf class the leaf age (variable 'LVAGE') and specific leaf area + (variable `SLA`) are also registered. Total living leaf biomass is + calculated by summing the biomass values for all leaf classes. Similarly, + leaf area is calculated by summing leaf biomass times specific leaf area + (`LV` * `SLA`). + + Senescense of the leaves can occur as a result of physiological age, + drought stress or self-shading. + + **Simulation parameters** (provide in cropdata dictionary) + + | Name | Description | Type | Unit | + |--------|------------------------------------------------------------------ |------|------------| + | RGRLAI | Maximum relative increase in LAI. |SCr | ha ha⁻¹ d⁻¹| + | SPAN | Life span of leaves growing at 35 Celsius |SCr | d | + | TBASE | Lower threshold temp. for ageing of leaves |SCr | C | + | PERDL | Max. relative death rate of leaves due to water stress |SCr | | + | TDWI | Initial total crop dry weight |SCr | kg ha⁻¹ | + | KDIFTB | Extinction coefficient for diffuse visible light as function of DVS|TCr | | + | SLATB | Specific leaf area as a function of DVS |TCr | ha kg⁻¹ | + + **State variables** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|-------------| + | LV | Leaf biomass per leaf class | N | kg ha⁻¹ | + | SLA | Specific leaf area per leaf class | N | ha kg⁻¹ | + | LVAGE | Leaf age per leaf class | N | d | + | LVSUM | Sum of LV | N | kg ha⁻¹ | + | LAIEM | LAI at emergence | N | - | + | LASUM | Total leaf area as sum of LV*SLA, not including stem and pod area | N | - | + | LAIEXP | LAI value under theoretical exponential growth | N | - | + | LAIMAX | Maximum LAI reached during growth cycle | N | - | + | LAI | Leaf area index, including stem and pod area | Y | - | + | WLV | Dry weight of living leaves | Y | kg ha⁻¹ | + | DWLV | Dry weight of dead leaves | N | kg ha⁻¹ | + | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | + + **Rate variables** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|---------------| + | GRLV | Growth rate leaves | N | kg ha⁻¹ d⁻¹ | + | DSLV1 | Death rate leaves due to water stress | N | kg ha⁻¹ d⁻¹ | + | DSLV2 | Death rate leaves due to self-shading | N | kg ha⁻¹ d⁻¹ | + | DSLV3 | Death rate leaves due to frost kill | N | kg ha⁻¹ d⁻¹ | + | DSLV | Maximum of DSLV1, DSLV2, DSLV3 | N | kg ha⁻¹ d⁻¹ | + | DALV | Death rate leaves due to aging | N | kg ha⁻¹ d⁻¹ | + | DRLV | Death rate leaves as a combination of DSLV and DALV | N | kg ha⁻¹ d⁻¹ | + | SLAT | Specific leaf area for current time step, adjusted for source/sink limited leaf expansion rate | N | ha kg⁻¹ | + | FYSAGE | Increase in physiological leaf age | N | - | + | GLAIEX | Sink-limited leaf expansion rate (exponential curve) | N | ha ha⁻¹ d⁻¹ | + | GLASOL | Source-limited leaf expansion rate (biomass increase) | N | ha ha⁻¹ d⁻¹ | + + **External dependencies** + + | Name | Description | Provided by | Unit | + |-----------|-----------------------------------|--------------------------------|----------------| + | DVS | Crop development stage | DVS_Phenology | - | + | FL | Fraction biomass to leaves | DVS_Partitioning | - | + | FR | Fraction biomass to roots | DVS_Partitioning | - | + | SAI | Stem area index | WOFOST_Stem_Dynamics | - | + | PAI | Pod area index | WOFOST_Storage_Organ_Dynamics | - | + | TRA | Transpiration rate | Evapotranspiration | cm day⁻¹ ? | + | TRAMX | Maximum transpiration rate | Evapotranspiration | cm day⁻¹ ? | + | ADMI | Above-ground dry matter increase | CropSimulation | kg ha⁻¹ d⁻¹ | + | RFTRA | Reduction factor for transpiration (water & oxygen) | Y | - | + | RF_FROST | Reduction factor frost kill | FROSTOL (optional) | - | + + **Outputs** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|-------------| + | LAI | Leaf area index, including stem and pod area | Y | - | + | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | + + **Gradient mapping (which parameters have a gradient):** + + | Output | Parameters influencing it | + |--------|------------------------------------------| + | LAI | TDWI, SPAN, RGRLAI, TBASE, KDIFTB, SLATB | + | TWLV | TDWI, PERDL | + + [!NOTE] + Notice that the following gradients are zero: + - ∂SPAN/∂LAI + - ∂PERDL/∂TWLV + - ∂KDIFTB/∂LAI + """ # noqa: E501 + + # The following parameters are used to initialize and control the arrays that store information + # on the leaf classes during the time integration: leaf area, age, and biomass. + START_DATE = None # Start date of the simulation + MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) + params_shape = None # Shape of the parameters tensors + + class Parameters(ParamTemplate): + RGRLAI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + SPAN = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + TBASE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + PERDL = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + TDWI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + SLATB = AfgenTrait() + KDIFTB = AfgenTrait() + + class StateVariables(StatesTemplate): + LV = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + SLA = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + LVAGE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + LAIEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LASUM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAIEXP = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAIMAX = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAI = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + WLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + DWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + TWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + + class RateVariables(RatesTemplate): + GRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV1 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV2 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV3 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DALV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + SLAT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + FYSAGE = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + GLAIEX = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + GLASOL = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + + def initialize( + self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider + ) -> None: + """Initialize the WOFOST_Leaf_Dynamics simulation object. + + Args: + day (datetime.date): The starting date of the simulation. + kiosk (VariableKiosk): A container for registering and publishing + (internal and external) state variables. See PCSE documentation for + details. + parvalues (ParameterProvider): A dictionary-like container holding + all parameter sets (crop, soil, site) as key/value. The values are + arrays or scalars. See PCSE documentation for details. + """ + self.START_DATE = day + self.kiosk = kiosk + # TODO check if parvalues are already torch.nn.Parameters + self.params = self.Parameters(parvalues) + self.rates = self.RateVariables(kiosk) + + # CALCULATE INITIAL STATE VARIABLES + # check for required external variables + _exist_required_external_variables(self.kiosk) + # TODO check if external variables are already torch tensors + + FL = self.kiosk["FL"] + FR = self.kiosk["FR"] + DVS = self.kiosk["DVS"] + + params = self.params + self.params_shape = _get_params_shape(params) + + # Initial leaf biomass + WLV = (params.TDWI * (1 - FR)) * FL + DWLV = torch.zeros(self.params_shape, dtype=DTYPE) + TWLV = WLV + DWLV + + # Initialize leaf classes (SLA, age and weight) + SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + LVAGE = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + SLA[..., 0] = params.SLATB(DVS) + LV[..., 0] = WLV + + # Initial values for leaf area + LAIEM = LV[..., 0] * SLA[..., 0] + LASUM = LAIEM + LAIEXP = LAIEM + LAIMAX = LAIEM + LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] + + # Initialize StateVariables object + self.states = self.StateVariables( + kiosk, + publish=["LAI", "TWLV", "WLV"], + LV=LV, + SLA=SLA, + LVAGE=LVAGE, + LAIEM=LAIEM, + LASUM=LASUM, + LAIEXP=LAIEXP, + LAIMAX=LAIMAX, + LAI=LAI, + WLV=WLV, + DWLV=DWLV, + TWLV=TWLV, + ) + + def _calc_LAI(self): + # Total leaf area Index as sum of leaf, pod and stem area + SAI = self.kiosk["SAI"] + PAI = self.kiosk["PAI"] + total_LAI = self.states.LASUM + SAI + PAI + return total_LAI + + @prepare_rates + def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: + """Calculate the rates of change for the leaf dynamics. + + Args: + day (datetime.date, optional): The current date of the simulation. + drv (WeatherDataContainer, optional): A dictionary-like container holding + weather data elements as key/value. The values are + arrays or scalars. See PCSE documentation for details. + """ + r = self.rates + s = self.states + p = self.params + k = self.kiosk + + # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask + # A mask (0 if DVS < 0, 1 if DVS >= 0) + DVS = torch.as_tensor(k["DVS"], dtype=DTYPE) + dvs_mask = (DVS >= 0).to(dtype=DTYPE) + + # Growth rate leaves + # weight of new leaves + r.GRLV = dvs_mask * k.ADMI * k.FL + + # death of leaves due to water/oxygen stress + r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL + + # death due to self shading cause by high LAI + DVS = self.kiosk["DVS"] + LAICR = 3.2 / p.KDIFTB(DVS) + r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) + + # Death of leaves due to frost damage as determined by + # Reduction Factor Frost "RF_FROST" + if "RF_FROST" in self.kiosk: + r.DSLV3 = s.WLV * k.RF_FROST + else: + r.DSLV3 = torch.zeros_like(s.WLV, dtype=DTYPE) + + r.DSLV3 = dvs_mask * r.DSLV3 + + # leaf death equals maximum of water stress, shading and frost + r.DSLV = torch.maximum(torch.maximum(r.DSLV1, r.DSLV2), r.DSLV3) + r.DSLV = dvs_mask * r.DSLV + + # Determine how much leaf biomass classes have to die in states.LV, + # given the a life span > SPAN, these classes will be accumulated + # in DALV. + # Note that the actual leaf death is imposed on the array LV during the + # state integration step. + tSPAN = _broadcast_to(p.SPAN, s.LVAGE.shape) # Broadcast to same shape + + # Using a sigmoid here instead of a conditional statement on the value of + # SPAN because the latter would not allow for the gradient to be tracked. + # the if statement `p.SPAN.requires_grad` to avoid unnecessary + # approximation when SPAN is not a learnable parameter. + # TODO: sharpness can be exposed as a parameter + if p.SPAN.requires_grad: + # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very + # small and mask should be 1 + sharpness = torch.tensor(1e-16, dtype=DTYPE) + + # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is + # equal to zero and mask should be 0.0 + epsilon = 1e-14 + span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=DTYPE) + else: + span_mask = (s.LVAGE > tSPAN).to(dtype=DTYPE) + + r.DALV = torch.sum(span_mask * s.LV, dim=-1) + r.DALV = dvs_mask * r.DALV + + # Total death rate leaves + r.DRLV = torch.maximum(r.DSLV, r.DALV) + + # Get the temperature from the drv + TEMP = _get_drv(drv.TEMP, self.params_shape) + + # physiologic ageing of leaves per time step + TBASE = _broadcast_to(p.TBASE, self.params_shape) + FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) + r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) + + # specific leaf area of leaves per time step + r.SLAT = dvs_mask * p.SLATB(DVS) + + # leaf area not to exceed exponential growth curve + is_lai_exp = s.LAIEXP < 6.0 + DTEFF = torch.clamp(TEMP - TBASE, 0.0) + + # NOTE: conditional statements do not allow for the gradient to be + # tracked through the condition. Thus, the gradient with respect to + # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) + # are expected to be incorrect. + r.GLAIEX = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), + torch.tensor(0.0, dtype=DTYPE), + ) + + # source-limited increase in leaf area + r.GLASOL = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), + torch.tensor(0.0, dtype=DTYPE), + ) + + # sink-limited increase in leaf area + GLA = torch.minimum(r.GLAIEX, r.GLASOL) + + # adjustment of specific leaf area of youngest leaf class + epsilon = 1e-10 # small value to avoid division by zero + r.SLAT = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp & (r.GRLV > epsilon), GLA / (r.GRLV + epsilon), r.SLAT), + torch.tensor(0.0, dtype=DTYPE), + ) + + @prepare_states + def integrate(self, day: datetime.date, delt=1.0) -> None: + """Integrate the leaf dynamics state variables. + + Args: + day (datetime.date, optional): The current date of the simulation. + delt (float, optional): The time step for integration. Defaults to 1.0. + """ + # TODO check if DVS < 0 and skip integration needed + rates = self.rates + states = self.states + + # --------- leave death --------- + tLV = states.LV.clone() + tSLA = states.SLA.clone() + tLVAGE = states.LVAGE.clone() + tDRLV = _broadcast_to(rates.DRLV, tLV.shape) + + # Leaf death is imposed on leaves from the oldest ones. + # Calculate the cumulative sum of weights after leaf death, and + # find out which leaf classes are dead (negative weights) + weight_cumsum = tLV.cumsum(dim=-1) - tDRLV + is_alive = weight_cumsum >= 0 + + # Adjust value of oldest leaf class, i.e. the first non-zero + # weight along the time axis (the last dimension). + # Cast argument to int because torch.argmax requires it to be numeric + idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True) + new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) + tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) + + # Integration of physiological age + # Zero out all dead leaf classes + # NOTE: conditional statements do not allow for the gradient to be + # tracked through the condition. Thus, the gradient with respect to + # parameters that contribute to `is_alive` are expected to be incorrect. + tLV = torch.where(is_alive, tLV, 0.0) + tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) + tLVAGE = torch.where(is_alive, tLVAGE, 0.0) + tSLA = torch.where(is_alive, tSLA, 0.0) + + # --------- leave growth --------- + idx = int((day - self.START_DATE).days / delt) + tLV[..., idx] = rates.GRLV + tSLA[..., idx] = rates.SLAT + tLVAGE[..., idx] = 0.0 + + # calculation of new leaf area + states.LASUM = torch.sum(tLV * tSLA, dim=-1) + states.LAI = self._calc_LAI() + states.LAIMAX = torch.maximum(states.LAI, states.LAIMAX) + + # exponential growth curve + states.LAIEXP = states.LAIEXP + rates.GLAIEX + + # Update leaf biomass states + states.WLV = torch.sum(tLV, dim=-1) + states.DWLV = states.DWLV + rates.DRLV + states.TWLV = states.WLV + states.DWLV + + # Store final leaf biomass deques + self.states.LV = tLV + self.states.SLA = tSLA + self.states.LVAGE = tLVAGE + + +def _exist_required_external_variables(kiosk): + """Check if all required external variables are available in the kiosk. + + Args: + kiosk (VariableKiosk): The variable kiosk to check. + + Raises: + ValueError: If any required external variable is missing. + + """ + required_external_vars_at_init = ["DVS", "FL", "FR", "SAI", "PAI"] + for var in required_external_vars_at_init: + if var not in kiosk: + raise ValueError( + f"Required external variables '{var}' is missing in the kiosk." + f" Ensure that all required variables {required_external_vars_at_init}" + " are provided." + ) diff --git a/src/diffwofost/physical_models/crop/leaf_dynamics.py b/src/diffwofost/physical_models/crop/leaf_dynamics.py index 0ed74e3..4363670 100644 --- a/src/diffwofost/physical_models/crop/leaf_dynamics.py +++ b/src/diffwofost/physical_models/crop/leaf_dynamics.py @@ -17,6 +17,8 @@ from diffwofost.physical_models.utils import _get_drv from diffwofost.physical_models.utils import _get_params_shape +DTYPE = torch.float64 # Default data type for tensors in this module + class WOFOST_Leaf_Dynamics(SimulationObject): """Leaf dynamics for the WOFOST crop model. @@ -120,118 +122,40 @@ class WOFOST_Leaf_Dynamics(SimulationObject): MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) params_shape = None # Shape of the parameters tensors - # Default values that can be overridden before instantiation - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - dtype = torch.float64 - class Parameters(ParamTemplate): - RGRLAI = Any() - SPAN = Any() - TBASE = Any() - PERDL = Any() - TDWI = Any() + RGRLAI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + SPAN = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + TBASE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + PERDL = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + TDWI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) SLATB = AfgenTrait() KDIFTB = AfgenTrait() - def __init__(self, parvalues, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device - self.RGRLAI = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.SPAN = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.TBASE = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.PERDL = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.TDWI = [torch.tensor(-99.0, dtype=dtype, device=device)] - - # Call parent init - super().__init__(parvalues) - class StateVariables(StatesTemplate): - LV = Any() - SLA = Any() - LVAGE = Any() - LAIEM = Any() - LASUM = Any() - LAIEXP = Any() - LAIMAX = Any() - LAI = Any() - WLV = Any() - DWLV = Any() - TWLV = Any() - - def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device if not in kwargs - if "LV" not in kwargs: - self.LV = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "SLA" not in kwargs: - self.SLA = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "LVAGE" not in kwargs: - self.LVAGE = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "LAIEM" not in kwargs: - self.LAIEM = torch.tensor(-99.0, dtype=dtype, device=device) - if "LASUM" not in kwargs: - self.LASUM = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAIEXP" not in kwargs: - self.LAIEXP = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAIMAX" not in kwargs: - self.LAIMAX = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAI" not in kwargs: - self.LAI = torch.tensor(-99.0, dtype=dtype, device=device) - if "WLV" not in kwargs: - self.WLV = torch.tensor(-99.0, dtype=dtype, device=device) - if "DWLV" not in kwargs: - self.DWLV = torch.tensor(-99.0, dtype=dtype, device=device) - if "TWLV" not in kwargs: - self.TWLV = torch.tensor(-99.0, dtype=dtype, device=device) - - # Call parent init - super().__init__(kiosk, publish=publish, **kwargs) + LV = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + SLA = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + LVAGE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + LAIEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LASUM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAIEXP = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAIMAX = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAI = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + WLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + DWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + TWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) class RateVariables(RatesTemplate): - GRLV = Any() - DSLV1 = Any() - DSLV2 = Any() - DSLV3 = Any() - DSLV = Any() - DALV = Any() - DRLV = Any() - SLAT = Any() - FYSAGE = Any() - GLAIEX = Any() - GLASOL = Any() - - def __init__(self, kiosk, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device - self.GRLV = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV1 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV2 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV3 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV = torch.tensor(0.0, dtype=dtype, device=device) - self.DALV = torch.tensor(0.0, dtype=dtype, device=device) - self.DRLV = torch.tensor(0.0, dtype=dtype, device=device) - self.SLAT = torch.tensor(0.0, dtype=dtype, device=device) - self.FYSAGE = torch.tensor(0.0, dtype=dtype, device=device) - self.GLAIEX = torch.tensor(0.0, dtype=dtype, device=device) - self.GLASOL = torch.tensor(0.0, dtype=dtype, device=device) - - # Call parent init - super().__init__(kiosk) + GRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV1 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV2 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV3 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DALV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + SLAT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + FYSAGE = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + GLAIEX = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + GLASOL = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) def initialize( self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider @@ -267,15 +191,13 @@ def initialize( # Initial leaf biomass WLV = (params.TDWI * (1 - FR)) * FL - DWLV = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) + DWLV = torch.zeros(self.params_shape, dtype=DTYPE) TWLV = WLV + DWLV # Initialize leaf classes (SLA, age and weight) - SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) - LVAGE = torch.zeros( - (*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device - ) - LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) + SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + LVAGE = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) SLA[..., 0] = params.SLATB(DVS) LV[..., 0] = WLV @@ -327,8 +249,8 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask # A mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) - dvs_mask = (DVS >= 0).to(dtype=self.dtype) + DVS = torch.as_tensor(k["DVS"], dtype=DTYPE) + dvs_mask = (DVS >= 0).to(dtype=DTYPE) # Growth rate leaves # weight of new leaves @@ -339,23 +261,15 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # death due to self shading cause by high LAI DVS = self.kiosk["DVS"] - LAICR = torch.tensor(3.2, dtype=self.dtype, device=self.device) / p.KDIFTB(DVS) - r.DSLV2 = ( - dvs_mask - * s.WLV - * torch.clamp( - torch.tensor(0.03, dtype=self.dtype, device=self.device) * (s.LAI - LAICR) / LAICR, - torch.tensor(0.0, dtype=self.dtype, device=self.device), - torch.tensor(0.03, dtype=self.dtype, device=self.device), - ) - ) + LAICR = 3.2 / p.KDIFTB(DVS) + r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) # Death of leaves due to frost damage as determined by # Reduction Factor Frost "RF_FROST" if "RF_FROST" in self.kiosk: r.DSLV3 = s.WLV * k.RF_FROST else: - r.DSLV3 = torch.zeros_like(s.WLV, dtype=self.dtype) + r.DSLV3 = torch.zeros_like(s.WLV, dtype=DTYPE) r.DSLV3 = dvs_mask * r.DSLV3 @@ -368,9 +282,7 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # in DALV. # Note that the actual leaf death is imposed on the array LV during the # state integration step. - tSPAN = _broadcast_to( - p.SPAN, s.LVAGE.shape, dtype=self.dtype, device=self.device - ) # Broadcast to same shape + tSPAN = _broadcast_to(p.SPAN, s.LVAGE.shape) # Broadcast to same shape # Using a sigmoid here instead of a conditional statement on the value of # SPAN because the latter would not allow for the gradient to be tracked. @@ -380,14 +292,14 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: if p.SPAN.requires_grad: # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very # small and mask should be 1 - sharpness = torch.tensor(1e-16, dtype=self.dtype, device=self.device) + sharpness = torch.tensor(1e-16, dtype=DTYPE) # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is # equal to zero and mask should be 0.0 - epsilon = torch.tensor(1e-14, dtype=self.dtype, device=self.device) - span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=self.dtype) + epsilon = 1e-14 + span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=DTYPE) else: - span_mask = (s.LVAGE > tSPAN).to(dtype=self.dtype) + span_mask = (s.LVAGE > tSPAN).to(dtype=DTYPE) r.DALV = torch.sum(span_mask * s.LV, dim=-1) r.DALV = dvs_mask * r.DALV @@ -399,18 +311,16 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: TEMP = _get_drv(drv.TEMP, self.params_shape) # physiologic ageing of leaves per time step - TBASE = _broadcast_to(p.TBASE, self.params_shape, dtype=self.dtype, device=self.device) - FYSAGE = (TEMP - TBASE) / (torch.tensor(35.0, dtype=self.dtype, device=self.device) - TBASE) - r.FYSAGE = dvs_mask * torch.clamp( - FYSAGE, torch.tensor(0.0, dtype=self.dtype, device=self.device) - ) + TBASE = _broadcast_to(p.TBASE, self.params_shape) + FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) + r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) # specific leaf area of leaves per time step r.SLAT = dvs_mask * p.SLATB(DVS) # leaf area not to exceed exponential growth curve - is_lai_exp = s.LAIEXP < torch.tensor(6.0, dtype=self.dtype, device=self.device) - DTEFF = torch.clamp(TEMP - TBASE, torch.tensor(0.0, dtype=self.dtype, device=self.device)) + is_lai_exp = s.LAIEXP < 6.0 + DTEFF = torch.clamp(TEMP - TBASE, 0.0) # NOTE: conditional statements do not allow for the gradient to be # tracked through the condition. Thus, the gradient with respect to @@ -419,27 +329,25 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: r.GLAIEX = torch.where( dvs_mask.bool(), torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), - torch.tensor(0.0, dtype=self.dtype, device=self.device), + torch.tensor(0.0, dtype=DTYPE), ) # source-limited increase in leaf area r.GLASOL = torch.where( dvs_mask.bool(), torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), - torch.tensor(0.0, dtype=self.dtype, device=self.device), + torch.tensor(0.0, dtype=DTYPE), ) # sink-limited increase in leaf area GLA = torch.minimum(r.GLAIEX, r.GLASOL) # adjustment of specific leaf area of youngest leaf class - epsilon = torch.tensor( - 1e-10, dtype=self.dtype, device=self.device - ) # small value to avoid division by zero + epsilon = 1e-10 # small value to avoid division by zero r.SLAT = torch.where( dvs_mask.bool(), torch.where(is_lai_exp & (r.GRLV > epsilon), GLA / (r.GRLV + epsilon), r.SLAT), - torch.tensor(0.0, dtype=self.dtype, device=self.device), + torch.tensor(0.0, dtype=DTYPE), ) @prepare_states @@ -458,7 +366,7 @@ def integrate(self, day: datetime.date, delt=1.0) -> None: tLV = states.LV.clone() tSLA = states.SLA.clone() tLVAGE = states.LVAGE.clone() - tDRLV = _broadcast_to(rates.DRLV, tLV.shape, dtype=self.dtype, device=self.device) + tDRLV = _broadcast_to(rates.DRLV, tLV.shape) # Leaf death is imposed on leaves from the oldest ones. # Calculate the cumulative sum of weights after leaf death, and @@ -469,9 +377,7 @@ def integrate(self, day: datetime.date, delt=1.0) -> None: # Adjust value of oldest leaf class, i.e. the first non-zero # weight along the time axis (the last dimension). # Cast argument to int because torch.argmax requires it to be numeric - idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True).to( - device=self.device - ) + idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True) new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) @@ -480,18 +386,16 @@ def integrate(self, day: datetime.date, delt=1.0) -> None: # NOTE: conditional statements do not allow for the gradient to be # tracked through the condition. Thus, the gradient with respect to # parameters that contribute to `is_alive` are expected to be incorrect. - tLV = torch.where(is_alive, tLV, torch.tensor(0.0, dtype=self.dtype, device=self.device)) + tLV = torch.where(is_alive, tLV, 0.0) tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) - tLVAGE = torch.where( - is_alive, tLVAGE, torch.tensor(0.0, dtype=self.dtype, device=self.device) - ) - tSLA = torch.where(is_alive, tSLA, torch.tensor(0.0, dtype=self.dtype, device=self.device)) + tLVAGE = torch.where(is_alive, tLVAGE, 0.0) + tSLA = torch.where(is_alive, tSLA, 0.0) # --------- leave growth --------- idx = int((day - self.START_DATE).days / delt) tLV[..., idx] = rates.GRLV tSLA[..., idx] = rates.SLAT - tLVAGE[..., idx] = torch.tensor(0.0, dtype=self.dtype, device=self.device) + tLVAGE[..., idx] = 0.0 # calculation of new leaf area states.LASUM = torch.sum(tLV * tSLA, dim=-1) diff --git a/src/diffwofost/physical_models/crop/phenology.py b/src/diffwofost/physical_models/crop/phenology.py index 262f0aa..e78f699 100644 --- a/src/diffwofost/physical_models/crop/phenology.py +++ b/src/diffwofost/physical_models/crop/phenology.py @@ -27,9 +27,6 @@ from diffwofost.physical_models.utils import _restore_state from diffwofost.physical_models.utils import _snapshot_state -DTYPE = torch.float64 # Default data type for tensors in this module -EPS = torch.tensor(1e-8, dtype=DTYPE) # Small epsilon to avoid div by zero - class Vernalisation(SimulationObject): """Modification of phenological development due to vernalisation. @@ -255,16 +252,21 @@ def calc_rates(self, day, drv): # VERNR only for vegetative elements self.rates.VERNR = torch.where( - vegetative_mask, params.VERNRTB(TEMP), torch.zeros(self.params_shape, dtype=DTYPE) + vegetative_mask, + params.VERNRTB(TEMP), + torch.zeros(self.params_shape, dtype=self.dtype, device=self.device), ) # compute VERNFAC from current VERN for vegetative elements; others = 1 safe_den = VERNSAT - VERNBASE + EPS = torch.tensor(1e-8, dtype=self.dtype, device=self.device) safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), EPS) r = (self.states.VERN - VERNBASE) / safe_den vernfac_computed = torch.clamp(r, 0.0, 1.0) self.rates.VERNFAC = torch.where( - vegetative_mask, vernfac_computed, torch.ones(self.params_shape, dtype=DTYPE) + vegetative_mask, + vernfac_computed, + torch.ones(self.params_shape, dtype=self.dtype, device=self.device), ) # mark per-element force flags for elements that passed VERNDVS but aren't vernalised @@ -597,26 +599,26 @@ def _get_initial_stage(self, day): STAGE (Tensor): Integer stage code (0=emerging, 1=vegetative). """ p = self.params - day_ordinal = torch.tensor(day.toordinal(), dtype=DTYPE) + day_ordinal = torch.tensor(day.toordinal(), dtype=self.dtype, device=self.device) # Define initial stage type (emergence/sowing) and fill the # respective day of sowing/emergence (DOS/DOE) if p.CROP_START_TYPE == "emergence": - STAGE = torch.tensor(1, dtype=torch.long) # 1 = vegetative + STAGE = torch.tensor(1, dtype=torch.long, device=self.device) # 1 = vegetative DOE = day_ordinal - DOS = torch.tensor(-1.0, dtype=DTYPE) # Not applicable + DOS = torch.tensor(-1.0, dtype=self.dtype, device=self.device) # Not applicable DVS = p.DVSI if not isinstance(DVS, torch.Tensor): - DVS = torch.tensor(DVS, dtype=DTYPE) + DVS = torch.tensor(DVS, dtype=self.dtype, device=self.device) # send signal to indicate crop emergence self._send_signal(signals.crop_emerged) elif p.CROP_START_TYPE == "sowing": - STAGE = torch.tensor(0, dtype=torch.long) # 0 = emerging + STAGE = torch.tensor(0, dtype=torch.long, device=self.device) # 0 = emerging DOS = day_ordinal - DOE = torch.tensor(-1.0, dtype=DTYPE) # Not yet occurred - DVS = torch.tensor(-0.1, dtype=DTYPE) + DOE = torch.tensor(-1.0, dtype=self.dtype, device=self.device) # Not yet occurred + DVS = torch.tensor(-0.1, dtype=self.dtype, device=self.device) else: msg = f"Unknown start type: {p.CROP_START_TYPE}" @@ -657,6 +659,7 @@ def calc_rates(self, day, drv): DAYLP = daylength(day, drv.LAT) DAYLP_t = _broadcast_to(DAYLP, shape, dtype=self.dtype, device=self.device) # Compute DVRED conditionally based on IDSL >= 1 + EPS = torch.tensor(1e-8, dtype=self.dtype, device=self.device) safe_den = p.DLO - p.DLC safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), EPS) dvred_active = torch.clamp((DAYLP_t - p.DLC) / safe_den, 0.0, 1.0) diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index d58df80..9834e55 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -126,18 +126,12 @@ def __init__( ): BaseEngine.__init__(self) - # Set device and dtype on crop modules if provided - if device is None: - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - if dtype is None: - dtype = torch.float64 - # Load the model configuration self.mconf = ConfigurationLoader(test_config) self.parameterprovider = parameterprovider # Configure device and dtype on crop module class if it supports them - if hasattr(self.mconf.CROP, "device"): + if hasattr(self.mconf.CROP, "device") and device is not None: self.mconf.CROP.device = device if hasattr(self.mconf.CROP, "dtype"): self.mconf.CROP.dtype = dtype diff --git a/tests/physical_models/crop/test_leaf_dynamics.py b/tests/physical_models/crop/test_leaf_dynamics.py index 3eab5a5..e62ad32 100644 --- a/tests/physical_models/crop/test_leaf_dynamics.py +++ b/tests/physical_models/crop/test_leaf_dynamics.py @@ -71,7 +71,8 @@ def forward(self, params_dict): class TestLeafDynamics: leafdynamics_data_urls = [ f"{phy_data_folder}/test_leafdynamics_wofost72_{i:02d}.yaml" - for i in range(1, 45) # there are 44 test files + # for i in range(1, 45) # there are 44 test files + for i in range(3, 4) # there are 44 test files ] wofost72_data_urls = [ @@ -109,6 +110,11 @@ def test_leaf_dynamics_with_testengine(self, test_data_url): assert len(actual_results) == len(expected_results) for reference, model in zip(expected_results, actual_results, strict=False): assert reference["DAY"] == model["day"] + for var in expected_precision.keys(): + print(f"Testing variable: {var} on day {model['day']}") + print(f"Difference: {abs(reference[var] - model[var])}") + print("precision: {expected_precision[var]}.") + print(f"{abs(reference[var] - model[var]) < expected_precision[var]}") assert all( abs(reference[var] - model[var]) < precision for var, precision in expected_precision.items() From ed15e83d86ee9260ced20b604bcbf721bc414a70 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Tue, 16 Dec 2025 13:01:11 +0100 Subject: [PATCH 04/17] clean --- docs/notebooks/WOFOST_Leaf_Dynamics.conf | 32 - docs/notebooks/WOFOST_Root_Dynamics.conf | 32 - .../test_leafdynamics_wofost72_01.yaml | 1593 ----------------- .../test_rootdynamics_wofost72_01.yaml | 1333 -------------- new_leaf.py | 524 ------ old_leaf_dynamics.py | 436 ----- .../physical_models/crop/leaf_dynamics.py | 188 +- src/diffwofost/physical_models/utils.py | 2 +- 8 files changed, 139 insertions(+), 4001 deletions(-) delete mode 100644 docs/notebooks/WOFOST_Leaf_Dynamics.conf delete mode 100644 docs/notebooks/WOFOST_Root_Dynamics.conf delete mode 100644 docs/notebooks/test_leafdynamics_wofost72_01.yaml delete mode 100644 docs/notebooks/test_rootdynamics_wofost72_01.yaml delete mode 100644 new_leaf.py delete mode 100644 old_leaf_dynamics.py diff --git a/docs/notebooks/WOFOST_Leaf_Dynamics.conf b/docs/notebooks/WOFOST_Leaf_Dynamics.conf deleted file mode 100644 index 23b8de6..0000000 --- a/docs/notebooks/WOFOST_Leaf_Dynamics.conf +++ /dev/null @@ -1,32 +0,0 @@ - -from diffwofost.physical_models.crop.leaf_dynamics import WOFOST_Leaf_Dynamics -from pcse.agromanager import AgroManager - -# Module to be used for water balance -SOIL = None - -# Module to be used for the crop simulation itself -CROP = WOFOST_Leaf_Dynamics - -# Module to use for AgroManagement actions -AGROMANAGEMENT = AgroManager - -# variables to save at OUTPUT signals -# Set to an empty list if you do not want any OUTPUT -OUTPUT_VARS = ["LAI", "TWLV"] -# interval for OUTPUT signals, either "daily"|"dekadal"|"monthly"|"weekly" -# For daily output you change the number of days between successive -# outputs using OUTPUT_INTERVAL_DAYS. For dekadal and monthly -# output this is ignored. -OUTPUT_INTERVAL = "daily" -OUTPUT_INTERVAL_DAYS = 1 -# Weekday: Monday is 0 and Sunday is 6 -OUTPUT_WEEKDAY = 0 - -# Summary variables to save at CROP_FINISH signals -# Set to an empty list if you do not want any SUMMARY_OUTPUT -SUMMARY_OUTPUT_VARS = [] - -# Summary variables to save at TERMINATE signals -# Set to an empty list if you do not want any TERMINAL_OUTPUT -TERMINAL_OUTPUT_VARS = [] diff --git a/docs/notebooks/WOFOST_Root_Dynamics.conf b/docs/notebooks/WOFOST_Root_Dynamics.conf deleted file mode 100644 index fc19795..0000000 --- a/docs/notebooks/WOFOST_Root_Dynamics.conf +++ /dev/null @@ -1,32 +0,0 @@ - -from diffwofost.physical_models.crop.root_dynamics import WOFOST_Root_Dynamics -from pcse.agromanager import AgroManager - -# Module to be used for water balance -SOIL = None - -# Module to be used for the crop simulation itself -CROP = WOFOST_Root_Dynamics - -# Module to use for AgroManagement actions -AGROMANAGEMENT = AgroManager - -# variables to save at OUTPUT signals -# Set to an empty list if you do not want any OUTPUT -OUTPUT_VARS = ["RD", "TWRT"] -# interval for OUTPUT signals, either "daily"|"dekadal"|"monthly"|"weekly" -# For daily output you change the number of days between successive -# outputs using OUTPUT_INTERVAL_DAYS. For dekadal and monthly -# output this is ignored. -OUTPUT_INTERVAL = "daily" -OUTPUT_INTERVAL_DAYS = 1 -# Weekday: Monday is 0 and Sunday is 6 -OUTPUT_WEEKDAY = 0 - -# Summary variables to save at CROP_FINISH signals -# Set to an empty list if you do not want any SUMMARY_OUTPUT -SUMMARY_OUTPUT_VARS = [] - -# Summary variables to save at TERMINATE signals -# Set to an empty list if you do not want any TERMINAL_OUTPUT -TERMINAL_OUTPUT_VARS = [] diff --git a/docs/notebooks/test_leafdynamics_wofost72_01.yaml b/docs/notebooks/test_leafdynamics_wofost72_01.yaml deleted file mode 100644 index cf2a335..0000000 --- a/docs/notebooks/test_leafdynamics_wofost72_01.yaml +++ /dev/null @@ -1,1593 +0,0 @@ -# Test file for testing the simulation of leaf dynamics in WOFOST 7.1 -# encoding: UTF-8 -# -# All parameter and variable names and their respective units refer to the -# WOFOST manual available from http://wageningenur.nl/wofost -# -# Test file generated with PCSE 5.3.3: https://doi.org/10.5281/zenodo.1252479 -# -# crop: Sugar beets -# latitude: 49.43613 -# longitude: 12.98528 -# -# Wageningen-UR 2018, allard.dewit@wur.nl -AgroManagement: -- 2010-04-16: - CropCalendar: {crop_end_date: 2010-12-31, crop_end_type: harvest, crop_name: Sugar - beets, crop_start_date: 2010-04-16, crop_start_type: sowing, max_duration: 260, - variety_name: Sugar beets_95118_2010} - StateEvents: null - TimedEvents: null -ExternalStates: -- {ADMI: 0.0, DAY: 2010-04-16, DVS: -0.1, FL: 0.85, FR: 0.2, PAI: 0.0, RFTRA: 0.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-17, DVS: -0.09294444444444445, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-18, DVS: -0.08805555555555557, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-19, DVS: -0.08200000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-20, DVS: -0.07333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-21, DVS: -0.06500000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-22, DVS: -0.05994444444444446, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-23, DVS: -0.057777777777777796, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-24, DVS: -0.05333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-25, DVS: -0.04600000000000001, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-26, DVS: -0.03472222222222224, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-27, DVS: -0.025000000000000015, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-28, DVS: -0.016722222222222236, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-29, DVS: -0.007555555555555569, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.06334614016373197, DAY: 2010-04-30, DVS: 0.0, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06955663516961932, DAY: 2010-05-01, DVS: 0.030023923444976078, FL: 0.8394916267942584, - FR: 0.20296939902203062, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06036795101242246, DAY: 2010-05-02, DVS: 0.05741626794258373, FL: 0.8299043062200957, - FR: 0.20567853199432148, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06904930123904608, DAY: 2010-05-03, DVS: 0.07882775119617225, FL: 0.8224102870813397, - FR: 0.20779615121720385, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.05888212870381866, DAY: 2010-05-04, DVS: 0.09868421052631579, FL: 0.8154605263157895, - FR: 0.20975997686524003, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06345060029463373, DAY: 2010-05-05, DVS: 0.11220095693779905, FL: 0.8107296650717704, - FR: 0.2110967979389032, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.07881135347334553, DAY: 2010-05-06, DVS: 0.12212918660287082, FL: 0.8072547846889951, - FR: 0.21207871076292129, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.09852481964261431, DAY: 2010-05-07, DVS: 0.13732057416267943, FL: 0.8019377990430622, - FR: 0.21358115568641886, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.15447577442412816, DAY: 2010-05-08, DVS: 0.14760765550239235, FL: 0.7983373205741626, - FR: 0.21459855933540145, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.18431729511837602, DAY: 2010-05-09, DVS: 0.16363636363636364, FL: 0.7927272727272727, - FR: 0.21618381618381619, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.140018980850247, DAY: 2010-05-10, DVS: 0.1812200956937799, FL: 0.786572966507177, - FR: 0.21792286660707713, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.2525109296012593, DAY: 2010-05-11, DVS: 0.20107655502392344, FL: 0.7796232057416268, - FR: 0.21988669225511331, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.2607790591371754, DAY: 2010-05-12, DVS: 0.22799043062200958, FL: 0.7702033492822966, - FR: 0.2225485041274515, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21051934478979178, DAY: 2010-05-13, DVS: 0.2508373205741627, FL: 0.762206937799043, - FR: 0.22480808665019192, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.18082952401394806, DAY: 2010-05-14, DVS: 0.2674641148325359, FL: 0.7563875598086124, - FR: 0.22645249487354752, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21216158586167716, DAY: 2010-05-15, DVS: 0.27763157894736845, FL: 0.752828947368421, - FR: 0.22745806824754194, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.3225925110304646, DAY: 2010-05-16, DVS: 0.28791866028708135, FL: 0.7492284688995215, - FR: 0.22847547189652453, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.48110564012108614, DAY: 2010-05-17, DVS: 0.3013157894736842, FL: 0.7445394736842105, - FR: 0.22980046269519955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.37044175559672554, DAY: 2010-05-18, DVS: 0.31830143540669853, FL: 0.7385944976076555, - FR: 0.23148036174351963, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21092861815085803, DAY: 2010-05-19, DVS: 0.33337320574162677, FL: 0.7333193779904306, - FR: 0.23297097639202902, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.30947565917826964, DAY: 2010-05-20, DVS: 0.3407894736842105, FL: 0.7307236842105264, - FR: 0.23370445344129553, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.5576143631475478, DAY: 2010-05-21, DVS: 0.35633971291866023, FL: 0.7252811004784689, - FR: 0.2352423891897576, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.8532546017550056, DAY: 2010-05-22, DVS: 0.3809808612440191, FL: 0.7166566985645932, - FR: 0.23767942583732057, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.1077369109143245, DAY: 2010-05-23, DVS: 0.40765550239234444, FL: 0.7073205741626795, - FR: 0.2403175771596824, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.345054359613823, DAY: 2010-05-24, DVS: 0.43540669856459324, FL: 0.6976076555023923, - FR: 0.24306220095693779, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5399857398800252, DAY: 2010-05-25, DVS: 0.46662679425837317, FL: 0.6866806220095694, - FR: 0.2461499027288501, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.1323384231071365, DAY: 2010-05-26, DVS: 0.49928229665071766, FL: 0.6752511961722488, - FR: 0.24937956780062043, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5606027420064925, DAY: 2010-05-27, DVS: 0.5257177033492823, FL: 0.6659988038277512, - FR: 0.25199405857300594, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.0711140915316895, DAY: 2010-05-28, DVS: 0.5544258373205742, FL: 0.655950956937799, - FR: 0.25483332457016666, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.7804869760516895, DAY: 2010-05-29, DVS: 0.5836124401913876, FL: 0.6457356459330144, - FR: 0.2577199116672801, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.241247492064963, DAY: 2010-05-30, DVS: 0.6105263157894737, FL: 0.6363157894736842, - FR: 0.26038172353961825, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.6631751947291513, DAY: 2010-05-31, DVS: 0.6368421052631579, FL: 0.6271052631578947, - FR: 0.26298438403701563, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5195245565028868, DAY: 2010-06-01, DVS: 0.6534688995215311, FL: 0.6212858851674641, - FR: 0.26462879226037117, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.6652932112744012, DAY: 2010-06-02, DVS: 0.6690191387559808, FL: 0.6158433014354067, - FR: 0.26616672800883323, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.9887086907856009, DAY: 2010-06-03, DVS: 0.6867224880382775, FL: 0.6096471291866028, - FR: 0.26791760870708237, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 5.883062026536403, DAY: 2010-06-04, DVS: 0.7076555023923445, FL: 0.6023205741626794, - FR: 0.26998790683001206, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 7.185506694825693, DAY: 2010-06-05, DVS: 0.7355263157894737, FL: 0.5925657894736842, - FR: 0.2727443609022556, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 8.398874147123157, DAY: 2010-06-06, DVS: 0.766866028708134, FL: 0.5815968899521531, - FR: 0.2758438929491561, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 8.460635199837757, DAY: 2010-06-07, DVS: 0.8037081339712919, FL: 0.5687021531100478, - FR: 0.2794876176455124, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 10.983494041245319, DAY: 2010-06-08, DVS: 0.8422248803827752, FL: 0.5552212918660286, - FR: 0.283296966191703, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 12.749950206041587, DAY: 2010-06-09, DVS: 0.8801435406698566, FL: 0.5419497607655501, - FR: 0.28704716336295283, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.529998478430059, DAY: 2010-06-10, DVS: 0.9232057416267944, FL: 0.526877990430622, - FR: 0.2914673046251994, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 18.17948474779467, DAY: 2010-06-11, DVS: 0.9662679425837322, FL: 0.5118062200956938, - FR: 0.29625199362041466, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 17.89920097929859, DAY: 2010-06-12, DVS: 1.0, FL: 0.5, FR: 0.3, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 16.927109068911655, DAY: 2010-06-13, DVS: 1.0110266159695818, FL: 0.48346007604562735, - FR: 0.2889733840304182, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 17.694733764726987, DAY: 2010-06-14, DVS: 1.0191381495564005, FL: 0.4712927756653993, - FR: 0.2808618504435995, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 20.307476232534015, DAY: 2010-06-15, DVS: 1.0269645120405577, FL: 0.4595532319391634, - FR: 0.27303548795944227, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 24.757657128862814, DAY: 2010-06-16, DVS: 1.0346958174904943, FL: 0.4479562737642585, - FR: 0.26530418250950566, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.81491074090979, DAY: 2010-06-17, DVS: 1.0418567807351078, FL: 0.4372148288973383, - FR: 0.25814321926489214, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 24.910834495096452, DAY: 2010-06-18, DVS: 1.049809885931559, FL: 0.4252851711026615, - FR: 0.25019011406844094, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 35.029238340180555, DAY: 2010-06-19, DVS: 1.0582699619771865, FL: 0.4125950570342203, - FR: 0.24173003802281345, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 27.14283941622052, DAY: 2010-06-20, DVS: 1.0640367553865655, FL: 0.40394486692015175, - FR: 0.23596324461343443, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 38.7517315160596, DAY: 2010-06-21, DVS: 1.0691064638783272, FL: 0.3963403041825092, - FR: 0.23089353612167274, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 49.303521645897334, DAY: 2010-06-22, DVS: 1.0750000000000002, FL: 0.38749999999999973, - FR: 0.22499999999999976, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 58.579142820894056, DAY: 2010-06-23, DVS: 1.0811153358681878, FL: 0.37832699619771837, - FR: 0.21888466413181218, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 63.87538124612525, DAY: 2010-06-24, DVS: 1.0874841571609635, FL: 0.3687737642585548, - FR: 0.21251584283903646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.58830761279373, DAY: 2010-06-25, DVS: 1.0964195183776935, FL: 0.3553707224334598, - FR: 0.20358048162230646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 81.61069863667417, DAY: 2010-06-26, DVS: 1.10532319391635, FL: 0.3420152091254751, - FR: 0.19467680608365, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 98.91460885559174, DAY: 2010-06-27, DVS: 1.1146704689480356, FL: 0.32799429657794665, - FR: 0.18532953105196434, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 110.71534392471503, DAY: 2010-06-28, DVS: 1.124746514575412, FL: 0.3128802281368819, - FR: 0.17525348542458782, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 116.76687428085175, DAY: 2010-06-29, DVS: 1.1349493029150826, FL: 0.29757604562737616, - FR: 0.16505069708491735, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 117.14319484688673, DAY: 2010-06-30, DVS: 1.1457224334600762, FL: 0.2814163498098857, - FR: 0.15427756653992372, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 136.4298986955567, DAY: 2010-07-01, DVS: 1.15712927756654, FL: 0.2643060836501899, - FR: 0.14694459532862567, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.0458082598484, DAY: 2010-07-02, DVS: 1.1683460076045629, FL: 0.24748098859315576, - FR: 0.14213742531233017, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 153.63543187877124, DAY: 2010-07-03, DVS: 1.1797528517110267, FL: 0.23037072243345996, - FR: 0.13724877783813136, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 148.53017524286903, DAY: 2010-07-04, DVS: 1.1911596958174906, FL: 0.21326045627376417, - FR: 0.13236013036393257, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.83841279006657, DAY: 2010-07-05, DVS: 1.2025665399239545, FL: 0.19615019011406837, - FR: 0.12747148288973378, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.68737582207044, DAY: 2010-07-06, DVS: 1.2139733840304183, FL: 0.17903992395437257, - FR: 0.12258283541553498, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 182.5758636940754, DAY: 2010-07-07, DVS: 1.223510773130545, FL: 0.16473384030418253, - FR: 0.11849538294405212, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.21274762347915, DAY: 2010-07-08, DVS: 1.2311787072243345, FL: 0.15323193916349825, - FR: 0.1152091254752852, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.06904746497915, DAY: 2010-07-09, DVS: 1.2406844106463877, FL: 0.13897338403041853, - FR: 0.11113525258011955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.81365365320397, DAY: 2010-07-10, DVS: 1.2520912547528515, FL: 0.12186311787072274, - FR: 0.10624660510592077, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 207.2796747505659, DAY: 2010-07-11, DVS: 1.2634980988593154, FL: 0.10475285171102694, - FR: 0.10135795763172198, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 210.2564099700119, DAY: 2010-07-12, DVS: 1.2749049429657793, FL: 0.08764258555133114, - FR: 0.09646931015752318, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.77144757441917, DAY: 2010-07-13, DVS: 1.2863117870722431, FL: 0.07053231939163535, - FR: 0.09158066268332438, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 218.218059543731, DAY: 2010-07-14, DVS: 1.297718631178707, FL: 0.05342205323193955, - FR: 0.09, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 172.34128595981582, DAY: 2010-07-15, DVS: 1.3091254752851709, FL: 0.05, FR: 0.08966201943388256, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 217.38049720124903, DAY: 2010-07-16, DVS: 1.3205323193916347, FL: 0.05, FR: 0.08923954372623574, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 170.3206034911828, DAY: 2010-07-17, DVS: 1.3319391634980986, FL: 0.05, FR: 0.08881706801858893, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 187.5446581745791, DAY: 2010-07-18, DVS: 1.3433460076045625, FL: 0.05, FR: 0.08839459231094213, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 224.14671689354523, DAY: 2010-07-19, DVS: 1.3523447401774396, FL: 0.05, FR: 0.08806130591935409, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 233.29231714903904, DAY: 2010-07-20, DVS: 1.3613434727503166, FL: 0.05, FR: 0.08772801952776604, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 222.37721579346007, DAY: 2010-07-21, DVS: 1.37148288973384, FL: 0.05, FR: 0.08735248556541333, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 212.9717345765432, DAY: 2010-07-22, DVS: 1.382889733840304, FL: 0.05, FR: 0.08693000985776653, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 106.44059255533156, DAY: 2010-07-23, DVS: 1.3942965779467678, FL: 0.05, FR: 0.08650753415011972, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 102.18170120678516, DAY: 2010-07-24, DVS: 1.4050697084917614, FL: 0.05, FR: 0.08610852931511995, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 220.2561264890109, DAY: 2010-07-25, DVS: 1.4132129277566536, FL: 0.05, FR: 0.08580692860160542, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 198.46020040119276, DAY: 2010-07-26, DVS: 1.4202154626108996, FL: 0.05, FR: 0.08554757545885557, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 200.55021107622272, DAY: 2010-07-27, DVS: 1.4277566539923952, FL: 0.05, FR: 0.08526827207435574, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 140.03325959094497, DAY: 2010-07-28, DVS: 1.4362167300380226, FL: 0.05, FR: 0.08495493592451768, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.3498324135558, DAY: 2010-07-29, DVS: 1.4450253485424587, FL: 0.05, FR: 0.08462869079472375, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 172.10898739755729, DAY: 2010-07-30, DVS: 1.4536121673003801, FL: 0.05, FR: 0.08431066047035629, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 239.00609791132996, DAY: 2010-07-31, DVS: 1.4618821292775663, FL: 0.05, FR: 0.08400436558231236, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 231.42562696137483, DAY: 2010-08-01, DVS: 1.4703422053231938, FL: 0.05, FR: 0.0836910294324743, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 155.96076995709458, DAY: 2010-08-02, DVS: 1.4803231939163497, FL: 0.05, FR: 0.08332136318828334, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.9912960157878, DAY: 2010-08-03, DVS: 1.4905576679340937, FL: 0.05, FR: 0.08294230859503357, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 225.87944658593784, DAY: 2010-08-04, DVS: 1.5001584283903675, FL: 0.05, FR: 0.08258672487443083, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 151.14300077473197, DAY: 2010-08-05, DVS: 1.508016476552598, FL: 0.05, FR: 0.08229568605360749, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 64.90608388145633, DAY: 2010-08-06, DVS: 1.5157477820025347, FL: 0.05, FR: 0.08200934140731353, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 89.22935957524096, DAY: 2010-08-07, DVS: 1.5236692015209123, FL: 0.05, FR: 0.08171595549922547, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 208.20159137335756, DAY: 2010-08-08, DVS: 1.531780735107731, FL: 0.05, FR: 0.0814155283293433, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.41906247758274, DAY: 2010-08-09, DVS: 1.5401774397972114, FL: 0.05, FR: 0.08110453926676994, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 205.60001859060077, DAY: 2010-08-10, DVS: 1.54946134347275, FL: 0.05, FR: 0.08076069098249075, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 193.46756914002214, DAY: 2010-08-11, DVS: 1.558333333333333, FL: 0.05, FR: 0.08043209876543211, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 169.18156119156453, DAY: 2010-08-12, DVS: 1.5679340937896067, FL: 0.05, FR: 0.08007651504482939, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 93.08974266331302, DAY: 2010-08-13, DVS: 1.5777883396704686, FL: 0.05, FR: 0.0784423320659063, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 160.937893254941, DAY: 2010-08-14, DVS: 1.5872623574144484, FL: 0.05, FR: 0.07654752851711033, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 186.76242029906928, DAY: 2010-08-15, DVS: 1.596546261089987, FL: 0.05, FR: 0.07469074778200262, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.26873717886699, DAY: 2010-08-16, DVS: 1.6078580481622304, FL: 0.05, FR: 0.07242839036755393, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 53.098070543751426, DAY: 2010-08-17, DVS: 1.6159695817490491, FL: 0.05, FR: 0.07080608365019019, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.23327561394287, DAY: 2010-08-18, DVS: 1.622782002534854, FL: 0.05, FR: 0.0694435994930292, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 199.91869360998516, DAY: 2010-08-19, DVS: 1.6301964512040557, FL: 0.05, FR: 0.06796070975918887, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 223.74667130958667, DAY: 2010-08-20, DVS: 1.6388466413181242, FL: 0.05, FR: 0.06623067173637517, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 213.71782243484523, DAY: 2010-08-21, DVS: 1.647401774397972, FL: 0.05, FR: 0.06451964512040559, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 204.92227270536407, DAY: 2010-08-22, DVS: 1.6576996197718632, FL: 0.05, FR: 0.062460076045627366, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 148.08498613058885, DAY: 2010-08-23, DVS: 1.669106463878327, FL: 0.05, FR: 0.06017870722433459, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 131.56663617540406, DAY: 2010-08-24, DVS: 1.6796261089987325, FL: 0.05, FR: 0.058074778200253495, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 208.14796378003513, DAY: 2010-08-25, DVS: 1.6903992395437262, FL: 0.05, FR: 0.05592015209125477, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.43741030541455, DAY: 2010-08-26, DVS: 1.697845373891001, FL: 0.05, FR: 0.05443092522179978, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 138.12218294509915, DAY: 2010-08-27, DVS: 1.707636248415716, FL: 0.05, FR: 0.05247275031685682, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 153.8085011163628, DAY: 2010-08-28, DVS: 1.717141951837769, FL: 0.05, FR: 0.05057160963244618, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 166.36786308607878, DAY: 2010-08-29, DVS: 1.7241128010139415, FL: 0.05, FR: 0.0491774397972117, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 128.9994856080207, DAY: 2010-08-30, DVS: 1.7297845373890999, FL: 0.05, FR: 0.048043092522180024, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.98852774320295, DAY: 2010-08-31, DVS: 1.7338403041825092, FL: 0.05, FR: 0.04723193916349815, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 131.51208699193373, DAY: 2010-09-01, DVS: 1.738973384030418, FL: 0.05, FR: 0.046205323193916396, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 133.52093244179918, DAY: 2010-09-02, DVS: 1.7434093789607095, FL: 0.05, FR: 0.04531812420785811, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 191.3675196695657, DAY: 2010-09-03, DVS: 1.7488910012674268, FL: 0.05, FR: 0.044221799746514634, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 142.11326427125846, DAY: 2010-09-04, DVS: 1.7548162230671733, FL: 0.05, FR: 0.04303675538656533, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.89142256251282, DAY: 2010-09-05, DVS: 1.761248415716096, FL: 0.05, FR: 0.041750316856780816, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 199.62648416769255, DAY: 2010-09-06, DVS: 1.7663814955640047, FL: 0.05, FR: 0.04072370088719906, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.64113933021284, DAY: 2010-09-07, DVS: 1.7712927756653989, FL: 0.05, FR: 0.03974144486692022, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 139.08471598465746, DAY: 2010-09-08, DVS: 1.7755703422053228, FL: 0.05, FR: 0.038885931558935424, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 82.67638414658957, DAY: 2010-09-09, DVS: 1.781780735107731, FL: 0.05, FR: 0.03764385297845378, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 152.03323101044322, DAY: 2010-09-10, DVS: 1.7885297845373889, FL: 0.05, FR: 0.03629404309252222, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 188.54073598348467, DAY: 2010-09-11, DVS: 1.7956273764258552, FL: 0.05, FR: 0.03487452471482894, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 184.05041333017076, DAY: 2010-09-12, DVS: 1.8026299112801012, FL: 0.05, FR: 0.033474017743979755, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 80.5742369039994, DAY: 2010-09-13, DVS: 1.8095690747782, FL: 0.05, FR: 0.03208618504435998, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 84.81301930060773, DAY: 2010-09-14, DVS: 1.8155259822560201, FL: 0.05, FR: 0.030894803548795965, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 49.372356921724915, DAY: 2010-09-15, DVS: 1.820722433460076, FL: 0.05, FR: 0.02985551330798479, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 141.38168873270675, DAY: 2010-09-16, DVS: 1.8274081115335867, FL: 0.05, FR: 0.028518377693282644, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.8674496140244, DAY: 2010-09-17, DVS: 1.8338403041825093, FL: 0.05, FR: 0.02723193916349813, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 161.59738610558637, DAY: 2010-09-18, DVS: 1.838593155893536, FL: 0.05, FR: 0.02628136882129279, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 160.71185556416103, DAY: 2010-09-19, DVS: 1.8419201520912547, FL: 0.05, FR: 0.025615969581749047, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 167.07029527454148, DAY: 2010-09-20, DVS: 1.8455640050697084, FL: 0.05, FR: 0.024887198986058304, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 167.44249755660599, DAY: 2010-09-21, DVS: 1.849873257287706, FL: 0.05, FR: 0.02402534854245881, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 161.66286186201958, DAY: 2010-09-22, DVS: 1.855830164765526, FL: 0.05, FR: 0.02283396704689479, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.87746836853117, DAY: 2010-09-23, DVS: 1.8624524714828898, FL: 0.05, FR: 0.02150950570342202, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 145.92499554293613, DAY: 2010-09-24, DVS: 1.869169835234474, FL: 0.05, FR: 0.020166032953105165, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 36.85993111833173, DAY: 2010-09-25, DVS: 1.8765209125475286, FL: 0.05, FR: 0.01869581749049426, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.50229901761877, DAY: 2010-09-26, DVS: 1.8823193916349812, FL: 0.05, FR: 0.017536121673003745, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 117.81966505006466, DAY: 2010-09-27, DVS: 1.886089987325729, FL: 0.05, FR: 0.016782002534854165, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 44.65653234518239, DAY: 2010-09-28, DVS: 1.889860583016477, FL: 0.05, FR: 0.016027883396704593, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 109.53680851036636, DAY: 2010-09-29, DVS: 1.8931875792141957, FL: 0.05, FR: 0.01536248415716085, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 101.08752630541781, DAY: 2010-09-30, DVS: 1.8975602027883403, FL: 0.05, FR: 0.01448795944233193, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 40.80050881178069, DAY: 2010-10-01, DVS: 1.9008555133079854, FL: 0.05, FR: 0.013828897338402896, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 79.8450266683765, DAY: 2010-10-02, DVS: 1.903738910012675, FL: 0.05, FR: 0.013252217997464996, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 118.6265113682002, DAY: 2010-10-03, DVS: 1.9084283903675545, FL: 0.05, FR: 0.012314321926489083, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 118.23375396361399, DAY: 2010-10-04, DVS: 1.9136565272496837, FL: 0.05, FR: 0.01126869455006324, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 82.43081801012632, DAY: 2010-10-05, DVS: 1.9184093789607104, FL: 0.05, FR: 0.010318124207857896, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 46.50841125589101, DAY: 2010-10-06, DVS: 1.9236692015209131, FL: 0.05, FR: 0.010458650190114152, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.96815156408577, DAY: 2010-10-07, DVS: 1.9287389100126748, FL: 0.05, FR: 0.011092363751584362, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 121.77727753718361, DAY: 2010-10-08, DVS: 1.9339353612167307, FL: 0.05, FR: 0.011741920152091346, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 119.4686953266058, DAY: 2010-10-09, DVS: 1.9394486692015216, FL: 0.05, FR: 0.012431083650190206, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 112.63420513906051, DAY: 2010-10-10, DVS: 1.9442648922686951, FL: 0.05, FR: 0.0130331115335869, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 112.72875569349394, DAY: 2010-10-11, DVS: 1.947972116603296, FL: 0.05, FR: 0.013496514575411999, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 108.04315231817708, DAY: 2010-10-12, DVS: 1.9517110266159703, FL: 0.05, FR: 0.013963878326996292, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 100.22700691884458, DAY: 2010-10-13, DVS: 1.9545310519645127, FL: 0.05, FR: 0.014316381495564095, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 95.2909499094097, DAY: 2010-10-14, DVS: 1.956970849176173, FL: 0.05, FR: 0.014621356147021633, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.539595870890874, DAY: 2010-10-15, DVS: 1.9585551330798485, FL: 0.05, FR: 0.014819391634981069, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.597831536425922, DAY: 2010-10-16, DVS: 1.9593155893536127, FL: 0.05, FR: 0.014914448669201594, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.96890058359237, DAY: 2010-10-17, DVS: 1.9616603295310526, FL: 0.05, FR: 0.015207541191381582, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 25.375332030621163, DAY: 2010-10-18, DVS: 1.9637515842839044, FL: 0.05, FR: 0.015468948035488053, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 23.259772421309517, DAY: 2010-10-19, DVS: 1.9649556400506978, FL: 0.05, FR: 0.015619455006337227, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 22.074458545299972, DAY: 2010-10-20, DVS: 1.9661913814955647, FL: 0.05, FR: 0.015773922686945593, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.66904408314212, DAY: 2010-10-21, DVS: 1.9677439797211667, FL: 0.05, FR: 0.015967997465145836, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 25.41711865536422, DAY: 2010-10-22, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 21.79726782047625, DAY: 2010-10-23, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 6.162785924356052, DAY: 2010-10-24, DVS: 1.9686628643852986, FL: 0.05, FR: 0.016082858048162327, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.619123014735839, DAY: 2010-10-25, DVS: 1.970785804816224, FL: 0.05, FR: 0.01634822560202799, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-26, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-27, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-28, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-29, DVS: 1.9728136882129288, FL: 0.05, FR: 0.016601711026616103, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-30, DVS: 1.9751267427122952, FL: 0.05, FR: 0.0168908428390369, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-31, DVS: 1.9769328263624852, FL: 0.05, FR: 0.01711660329531066, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-01, DVS: 1.9792458808618516, FL: 0.05, FR: 0.017405735107731454, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-02, DVS: 1.983555133079849, FL: 0.05, FR: 0.01794439163498114, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.61920187706796, DAY: 2010-11-03, DVS: 1.985107731305451, FL: 0.05, FR: 0.018138466413181384, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 10.228893739954652, DAY: 2010-11-04, DVS: 1.9885297845373902, FL: 0.05, FR: 0.018566223067173773, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 45.50321836194165, DAY: 2010-11-05, DVS: 1.9948035487959452, FL: 0.05, FR: 0.019350443599493155, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 5.839463393806534, DAY: 2010-11-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 15.254533744320435, DAY: 2010-11-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 15.049318336197585, DAY: 2010-11-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 43.25829726065667, DAY: 2010-11-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.626290896706164, DAY: 2010-11-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 23.742415471479614, DAY: 2010-11-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 37.48822680676657, DAY: 2010-11-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 42.06031750650069, DAY: 2010-11-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 67.08969220067297, DAY: 2010-11-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 45.329423579045425, DAY: 2010-11-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.8155572206520234, DAY: 2010-11-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 6.152076941584958, DAY: 2010-11-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 4.4505561136862735, DAY: 2010-11-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 4.783258811957177, DAY: 2010-11-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.2038529975166394, DAY: 2010-11-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.8364366655705052, DAY: 2010-11-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 12.744056136326153, DAY: 2010-11-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-01, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-02, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-03, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-04, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-05, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-31, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -ModelParameters: - KDIFTB: [0.0, 0.69, 2.0, 0.69] - PERDL: 0.03 - RGRLAI: 0.016 - SLATB: [0.0, 0.002, 2.0, 0.002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - SPAN: 35.0 - TBASE: 3.0 - TDWI: 0.51 -ModelResults: -- {DAY: 2010-04-16, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-17, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-18, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-19, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-20, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-21, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-22, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-23, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-24, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-25, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-26, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-27, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-28, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-29, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-30, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-05-01, LAI: 0.0008012884382783444, TWLV: 0.40064421913917214} -- {DAY: 2010-05-02, LAI: 0.0009180728639041013, TWLV: 0.4590364319520506} -- {DAY: 2010-05-03, LAI: 0.0010182721089098878, TWLV: 0.5091360544549438} -- {DAY: 2010-05-04, LAI: 0.0011318458202194273, TWLV: 0.5659229101097136} -- {DAY: 2010-05-05, LAI: 0.0012278779235462473, TWLV: 0.6139389617731237} -- {DAY: 2010-05-06, LAI: 0.0013202769303496714, TWLV: 0.6653802456985948} -- {DAY: 2010-05-07, LAI: 0.0014475186147080191, TWLV: 0.7290010878777686} -- {DAY: 2010-05-08, LAI: 0.0015599873277284634, TWLV: 0.8080118648930814} -- {DAY: 2010-05-09, LAI: 0.0017472859219589006, TWLV: 0.9313356407404586} -- {DAY: 2010-05-10, LAI: 0.0019747815900125966, TWLV: 1.0774489874161168} -- {DAY: 2010-05-11, LAI: 0.002195051880281977, TWLV: 1.1875841325508072} -- {DAY: 2010-05-12, LAI: 0.0025887786411230413, TWLV: 1.3844475129713394} -- {DAY: 2010-05-13, LAI: 0.002990484450663319, TWLV: 1.5853004177414776} -- {DAY: 2010-05-14, LAI: 0.003311403060942695, TWLV: 1.7457597228811657} -- {DAY: 2010-05-15, LAI: 0.0035631374590580646, TWLV: 1.8825369252914288} -- {DAY: 2010-05-16, LAI: 0.00383515276491807, TWLV: 2.04225830864769} -- {DAY: 2010-05-17, LAI: 0.004213777827675692, TWLV: 2.283953801765497} -- {DAY: 2010-05-18, LAI: 0.0047368321250869415, TWLV: 2.642155941847756} -- {DAY: 2010-05-19, LAI: 0.005253674600194289, TWLV: 2.9157621842156174} -- {DAY: 2010-05-20, LAI: 0.005533629300107672, TWLV: 3.0704402272783855} -- {DAY: 2010-05-21, LAI: 0.005985911687804124, TWLV: 3.296581421126612} -- {DAY: 2010-05-22, LAI: 0.006794766005696632, TWLV: 3.701008580072866} -- {DAY: 2010-05-23, LAI: 0.008017747257554211, TWLV: 4.312499206001656} -- {DAY: 2010-05-24, LAI: 0.00958479747325244, TWLV: 5.096024313850768} -- {DAY: 2010-05-25, LAI: 0.011461437909919379, TWLV: 6.034344532184239} -- {DAY: 2010-05-26, LAI: 0.01357639464141274, TWLV: 7.091822897930922} -- {DAY: 2010-05-27, LAI: 0.015105620390762525, TWLV: 7.856435772605814} -- {DAY: 2010-05-28, LAI: 0.01718433950961579, TWLV: 8.895795332032444} -- {DAY: 2010-05-29, LAI: 0.019901438050150936, TWLV: 10.254344602300018} -- {DAY: 2010-05-30, LAI: 0.023492357157129082, TWLV: 12.04980415578909} -- {DAY: 2010-05-31, LAI: 0.026344639491767546, TWLV: 13.475945323108323} -- {DAY: 2010-06-01, LAI: 0.02968482185441995, TWLV: 15.146036504434525} -- {DAY: 2010-06-02, LAI: 0.031572940172661136, TWLV: 16.090095663555118} -- {DAY: 2010-06-03, LAI: 0.033624059510839535, TWLV: 17.115655332644323} -- {DAY: 2010-06-04, LAI: 0.03604888059909132, TWLV: 18.328065876770204} -- {DAY: 2010-06-05, LAI: 0.04313585919440744, TWLV: 21.871555174428266} -- {DAY: 2010-06-06, LAI: 0.051651630089183116, TWLV: 26.129440621816094} -- {DAY: 2010-06-07, LAI: 0.061421148255315854, TWLV: 31.014199704882472} -- {DAY: 2010-06-08, LAI: 0.0710443111649686, TWLV: 35.82578115970886} -- {DAY: 2010-06-09, LAI: 0.0832408506665347, TWLV: 41.924050910491914} -- {DAY: 2010-06-10, LAI: 0.09706051559440852, TWLV: 48.83388337442883} -- {DAY: 2010-06-11, LAI: 0.11237158839295898, TWLV: 56.48941977370405} -- {DAY: 2010-06-12, LAI: 0.13098033513707127, TWLV: 65.79379314576016} -- {DAY: 2010-06-13, LAI: 0.14887953611636986, TWLV: 74.74339363540945} -- {DAY: 2010-06-14, LAI: 0.16524669899174718, TWLV: 82.9269750730981} -- {DAY: 2010-06-15, LAI: 0.18192549937302407, TWLV: 91.26637526373655} -- {DAY: 2010-06-16, LAI: 0.20059023204340157, TWLV: 100.59874159892532} -- {DAY: 2010-06-17, LAI: 0.2227709277125586, TWLV: 111.68908943350381} -- {DAY: 2010-06-18, LAI: 0.2514652588822952, TWLV: 126.03625501837213} -- {DAY: 2010-06-19, LAI: 0.27265367590340955, TWLV: 136.63046352892925} -- {DAY: 2010-06-20, LAI: 0.3015594570850738, TWLV: 151.08335411976137} -- {DAY: 2010-06-21, LAI: 0.3234878783967143, TWLV: 162.0475647755816} -- {DAY: 2010-06-22, LAI: 0.35420562451006227, TWLV: 177.4064378322556} -- {DAY: 2010-06-23, LAI: 0.39241585378563265, TWLV: 196.5115524700408} -- {DAY: 2010-06-24, LAI: 0.4367399960721646, TWLV: 218.67362361330683} -- {DAY: 2010-06-25, LAI: 0.48385112564333244, TWLV: 242.22918839889073} -- {DAY: 2010-06-26, LAI: 0.5340211613867598, TWLV: 267.3142062706045} -- {DAY: 2010-06-27, LAI: 0.5898453617089561, TWLV: 295.22630643170277} -- {DAY: 2010-06-28, LAI: 0.6547322168147012, TWLV: 327.6697339845752} -- {DAY: 2010-06-29, LAI: 0.7240135009455375, TWLV: 362.3103760499934} -- {DAY: 2010-06-30, LAI: 0.7935075503630673, TWLV: 397.0574007587582} -- {DAY: 2010-07-01, LAI: 0.8594395709608256, TWLV: 430.02341105763736} -- {DAY: 2010-07-02, LAI: 0.9315580753948549, TWLV: 466.08266327465213} -- {DAY: 2010-07-03, LAI: 1.0043401593881085, TWLV: 502.473705271279} -- {DAY: 2010-07-04, LAI: 1.0751263702546872, TWLV: 537.866810704568} -- {DAY: 2010-07-05, LAI: 1.1384775961401201, TWLV: 569.5424236472843} -- {DAY: 2010-07-06, LAI: 1.1964746616899873, TWLV: 598.540956422218} -- {DAY: 2010-07-07, LAI: 1.253297413089392, TWLV: 626.9523321219206} -- {DAY: 2010-07-08, LAI: 1.313450259435748, TWLV: 657.0287552950986} -- {DAY: 2010-07-09, LAI: 1.3754211623195973, TWLV: 688.0142067370235} -- {DAY: 2010-07-10, LAI: 1.431863547755681, TWLV: 716.2353994550654} -- {DAY: 2010-07-11, LAI: 1.481538282353287, TWLV: 741.0727667538684} -- {DAY: 2010-07-12, LAI: 1.5249645564169987, TWLV: 762.7859037857244} -- {DAY: 2010-07-13, LAI: 1.561819387214024, TWLV: 781.2133191842369} -- {DAY: 2010-07-14, LAI: 1.5905643328604533, TWLV: 795.5857920074517} -- {DAY: 2010-07-15, LAI: 1.6138796464466851, TWLV: 807.2434488005674} -- {DAY: 2010-07-16, LAI: 1.6311137750426667, TWLV: 815.8605130985583} -- {DAY: 2010-07-17, LAI: 1.6528518247627917, TWLV: 826.7295379586208} -- {DAY: 2010-07-18, LAI: 1.6698838851119098, TWLV: 835.2455681331799} -- {DAY: 2010-07-19, LAI: 1.6886383509293676, TWLV: 844.6228010419088} -- {DAY: 2010-07-20, LAI: 1.7110530226187224, TWLV: 855.830136886586} -- {DAY: 2010-07-21, LAI: 1.734382254333626, TWLV: 867.494752744038} -- {DAY: 2010-07-22, LAI: 1.7566199759129721, TWLV: 878.613613533711} -- {DAY: 2010-07-23, LAI: 1.7779171493706263, TWLV: 889.2622002625382} -- {DAY: 2010-07-24, LAI: 1.7885612086261597, TWLV: 894.5842298903048} -- {DAY: 2010-07-25, LAI: 1.7987793787468382, TWLV: 899.693314950644} -- {DAY: 2010-07-26, LAI: 1.8208049913957394, TWLV: 910.7061212750945} -- {DAY: 2010-07-27, LAI: 1.8406510114358585, TWLV: 920.629131295154} -- {DAY: 2010-07-28, LAI: 1.860012432543481, TWLV: 930.6566418489653} -- {DAY: 2010-07-29, LAI: 1.8737912856386716, TWLV: 937.6583048285124} -- {DAY: 2010-07-30, LAI: 1.888426069635021, TWLV: 945.0257964491902} -- {DAY: 2010-07-31, LAI: 1.9053349635533372, TWLV: 953.6312458190681} -- {DAY: 2010-08-01, LAI: 1.9289958629470914, TWLV: 965.5815507146347} -- {DAY: 2010-08-02, LAI: 1.951723631380945, TWLV: 977.1528320627035} -- {DAY: 2010-08-03, LAI: 1.9670994380863849, TWLV: 984.9508705605582} -- {DAY: 2010-08-04, LAI: 1.9822031351175824, TWLV: 992.9004353613476} -- {DAY: 2010-08-05, LAI: 2.003946411461921, TWLV: 1004.1944076906445} -- {DAY: 2010-08-06, LAI: 2.0181590321792258, TWLV: 1011.7515577293809} -- {DAY: 2010-08-07, LAI: 2.0234005610046544, TWLV: 1014.9968619234538} -- {DAY: 2010-08-08, LAI: 2.0315146426442854, TWLV: 1019.4583299022158} -- {DAY: 2010-08-09, LAI: 2.0511118205297634, TWLV: 1029.8684094708835} -- {DAY: 2010-08-10, LAI: 2.069786676561823, TWLV: 1039.989362594763} -- {DAY: 2010-08-11, LAI: 2.088470037984216, TWLV: 1050.269363524293} -- {DAY: 2010-08-12, LAI: 2.1057018381667243, TWLV: 1059.9427419812944} -- {DAY: 2010-08-13, LAI: 2.1190120494176776, TWLV: 1068.4018200408725} -- {DAY: 2010-08-14, LAI: 2.1256039251434737, TWLV: 1073.0563071740382} -- {DAY: 2010-08-15, LAI: 2.13810679536199, TWLV: 1081.1032018367853} -- {DAY: 2010-08-16, LAI: 2.1505905726946066, TWLV: 1090.4413228517385} -- {DAY: 2010-08-17, LAI: 2.164078208756074, TWLV: 1099.1547597106821} -- {DAY: 2010-08-18, LAI: 2.1598762161268814, TWLV: 1101.8096632378697} -- {DAY: 2010-08-19, LAI: 2.1668995436882756, TWLV: 1105.3213270185668} -- {DAY: 2010-08-20, LAI: 2.1783756421544984, TWLV: 1115.3172616990657} -- {DAY: 2010-08-21, LAI: 2.1909807911193253, TWLV: 1126.5045952645448} -- {DAY: 2010-08-22, LAI: 2.202729410453157, TWLV: 1137.1904863862871} -- {DAY: 2010-08-23, LAI: 2.2110250982221276, TWLV: 1147.4366000215553} -- {DAY: 2010-08-24, LAI: 2.2120139319073124, TWLV: 1154.8408493280847} -- {DAY: 2010-08-25, LAI: 2.2098595227263025, TWLV: 1161.4191811368548} -- {DAY: 2010-08-26, LAI: 2.2120655723601943, TWLV: 1171.8265793258568} -- {DAY: 2010-08-27, LAI: 2.2295093133907358, TWLV: 1180.5484498411276} -- {DAY: 2010-08-28, LAI: 2.225422330705947, TWLV: 1187.4545589883824} -- {DAY: 2010-08-29, LAI: 2.207757217560929, TWLV: 1195.1449840442008} -- {DAY: 2010-08-30, LAI: 2.224394003869537, TWLV: 1203.4633771985045} -- {DAY: 2010-08-31, LAI: 2.2186292197599613, TWLV: 1209.9133514789057} -- {DAY: 2010-09-01, LAI: 2.2112473768651246, TWLV: 1217.312777866066} -- {DAY: 2010-09-02, LAI: 2.224398585564318, TWLV: 1223.8883822156624} -- {DAY: 2010-09-03, LAI: 2.2090563476387612, TWLV: 1230.5644288377528} -- {DAY: 2010-09-04, LAI: 2.207004682584603, TWLV: 1240.132804821231} -- {DAY: 2010-09-05, LAI: 2.1923102278300646, TWLV: 1247.2384680347939} -- {DAY: 2010-09-06, LAI: 2.1906709487746756, TWLV: 1257.3830391629194} -- {DAY: 2010-09-07, LAI: 2.1799158510780967, TWLV: 1267.364363371304} -- {DAY: 2010-09-08, LAI: 2.1591697357355475, TWLV: 1276.0964203378148} -- {DAY: 2010-09-09, LAI: 2.1730782073340134, TWLV: 1283.0506561370478} -- {DAY: 2010-09-10, LAI: 2.1370217034621404, TWLV: 1287.184475344377} -- {DAY: 2010-09-11, LAI: 2.105113896992017, TWLV: 1294.786136894899} -- {DAY: 2010-09-12, LAI: 2.073797934846938, TWLV: 1304.2131736940735} -- {DAY: 2010-09-13, LAI: 2.0922029761799545, TWLV: 1313.415694360582} -- {DAY: 2010-09-14, LAI: 2.044436199548158, TWLV: 1317.444406205782} -- {DAY: 2010-09-15, LAI: 1.988030646372474, TWLV: 1321.6850571708123} -- {DAY: 2010-09-16, LAI: 1.9929678820646464, TWLV: 1324.1536750168984} -- {DAY: 2010-09-17, LAI: 1.937824766807081, TWLV: 1331.2227594535339} -- {DAY: 2010-09-18, LAI: 1.9526115117684832, TWLV: 1338.6161319342352} -- {DAY: 2010-09-19, LAI: 1.899277200961512, TWLV: 1346.6960012395143} -- {DAY: 2010-09-20, LAI: 1.9153483865179282, TWLV: 1354.7315940177225} -- {DAY: 2010-09-21, LAI: 1.9320554160453822, TWLV: 1363.0851087814494} -- {DAY: 2010-09-22, LAI: 1.8828676452032849, TWLV: 1371.4572336592796} -- {DAY: 2010-09-23, LAI: 1.8990339313894868, TWLV: 1379.5403767523808} -- {DAY: 2010-09-24, LAI: 1.8428031737923105, TWLV: 1387.4842501708072} -- {DAY: 2010-09-25, LAI: 1.8573956733466044, TWLV: 1394.780499947954} -- {DAY: 2010-09-26, LAI: 1.7882995824651837, TWLV: 1396.6234965038707} -- {DAY: 2010-09-27, LAI: 1.7953498123669454, TWLV: 1400.1486114547515} -- {DAY: 2010-09-28, LAI: 1.7363455680053737, TWLV: 1406.0395947072548} -- {DAY: 2010-09-29, LAI: 1.7408112212398918, TWLV: 1408.2724213245137} -- {DAY: 2010-09-30, LAI: 1.7517649020909287, TWLV: 1413.7492617500325} -- {DAY: 2010-10-01, LAI: 1.6985224288360379, TWLV: 1418.803638065303} -- {DAY: 2010-10-02, LAI: 1.702602479717216, TWLV: 1420.843663505892} -- {DAY: 2010-10-03, LAI: 1.7105869823840534, TWLV: 1424.835914839311} -- {DAY: 2010-10-04, LAI: 1.664452567971006, TWLV: 1430.7672404077211} -- {DAY: 2010-10-05, LAI: 1.6762759433673675, TWLV: 1436.6789281059018} -- {DAY: 2010-10-06, LAI: 1.6276962737689755, TWLV: 1440.800469006408} -- {DAY: 2010-10-07, LAI: 1.6323471148945645, TWLV: 1443.1258895692026} -- {DAY: 2010-10-08, LAI: 1.575491083704617, TWLV: 1444.7742971474072} -- {DAY: 2010-10-09, LAI: 1.5876688114583353, TWLV: 1450.8631610242664} -- {DAY: 2010-10-10, LAI: 1.5376447781071463, TWLV: 1456.8365957905967} -- {DAY: 2010-10-11, LAI: 1.5489081986210524, TWLV: 1462.4683060475495} -- {DAY: 2010-10-12, LAI: 1.503738688754318, TWLV: 1468.1047438322244} -- {DAY: 2010-10-13, LAI: 1.5145430039861358, TWLV: 1473.5069014481332} -- {DAY: 2010-10-14, LAI: 1.5245657046780203, TWLV: 1478.5182517940752} -- {DAY: 2010-10-15, LAI: 1.5340947996689613, TWLV: 1483.282799289546} -- {DAY: 2010-10-16, LAI: 1.5360487592560503, TWLV: 1484.2597790830905} -- {DAY: 2010-10-17, LAI: 1.487833807812087, TWLV: 1484.9896706599118} -- {DAY: 2010-10-18, LAI: 1.489830697870446, TWLV: 1485.9881156890915} -- {DAY: 2010-10-19, LAI: 1.4923682310735082, TWLV: 1487.2568822906223} -- {DAY: 2010-10-20, LAI: 1.4946942083156392, TWLV: 1488.419870911688} -- {DAY: 2010-10-21, LAI: 1.4969016541701692, TWLV: 1489.5235938389528} -- {DAY: 2010-10-22, LAI: 1.5001685585784834, TWLV: 1491.1570460431099} -- {DAY: 2010-10-23, LAI: 1.5027102704440198, TWLV: 1492.4279019758783} -- {DAY: 2010-10-24, LAI: 1.5048899972260672, TWLV: 1493.517765366902} -- {DAY: 2010-10-25, LAI: 1.505506275818503, TWLV: 1493.8259046631197} -- {DAY: 2010-10-26, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-27, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-28, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-29, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-30, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-10-31, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-01, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-02, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-03, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-04, LAI: 1.4644038342439714, TWLV: 1494.98782090771} -- {DAY: 2010-11-05, LAI: 1.4285718928209417, TWLV: 1495.4992655947076} -- {DAY: 2010-11-06, LAI: 1.4331222146571359, TWLV: 1497.7744265128047} -- {DAY: 2010-11-07, LAI: 1.4049612153500868, TWLV: 1498.066399682495} -- {DAY: 2010-11-08, LAI: 1.4064866687245188, TWLV: 1498.829126369711} -- {DAY: 2010-11-09, LAI: 1.4079916005581385, TWLV: 1499.5815922865208} -- {DAY: 2010-11-10, LAI: 1.4123174302842043, TWLV: 1501.7445071495538} -- {DAY: 2010-11-11, LAI: 1.3904647457876436, TWLV: 1502.4758216943892} -- {DAY: 2010-11-12, LAI: 1.3928389873347915, TWLV: 1503.6629424679631} -- {DAY: 2010-11-13, LAI: 1.396587810015468, TWLV: 1505.5373538083013} -- {DAY: 2010-11-14, LAI: 1.4007938417661183, TWLV: 1507.6403696836264} -- {DAY: 2010-11-15, LAI: 1.4075028109861856, TWLV: 1510.99485429366} -- {DAY: 2010-11-16, LAI: 1.3948016247481085, TWLV: 1513.2613254726125} -- {DAY: 2010-11-17, LAI: 1.3951831804701738, TWLV: 1513.452103333645} -- {DAY: 2010-11-18, LAI: 1.395798388164332, TWLV: 1513.7597071807243} -- {DAY: 2010-11-19, LAI: 1.3962434437757008, TWLV: 1513.9822349864085} -- {DAY: 2010-11-20, LAI: 1.3967217696568965, TWLV: 1514.2213979270064} -- {DAY: 2010-11-21, LAI: 1.397042154956648, TWLV: 1514.3815905768822} -- {DAY: 2010-11-22, LAI: 1.3971257986232053, TWLV: 1514.4234124101608} -- {DAY: 2010-11-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-01, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-02, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-03, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-04, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-05, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-06, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-07, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-08, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-09, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-10, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-11, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-12, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-13, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-14, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-15, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-16, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-17, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-18, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-19, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-20, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-21, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-22, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-31, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -Precision: {LAI: 0.01, TWLV: 0.1} -WeatherVariables: -- {DAY: 2010-04-16, E0: 0.292, ELEV: 440.0, ES0: 0.259, ET0: 0.254, IRRAD: 15048000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.35, TMAX: 14.5, - TMIN: 4.2, VAP: 7.45, WIND: 2.298643329164947} -- {DAY: 2010-04-17, E0: 0.307, ELEV: 440.0, ES0: 0.259, ET0: 0.29100000000000004, - IRRAD: 22799000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.3999999999999995, - TMAX: 14.6, TMIN: 0.2, VAP: 6.04, WIND: 1.6521498928373055} -- {DAY: 2010-04-18, E0: 0.303, ELEV: 440.0, ES0: 0.263, ET0: 0.28300000000000003, - IRRAD: 18735000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.450000000000001, - TMAX: 15.8, TMIN: 1.1, VAP: 6.95, WIND: 2.2268107251285425} -- {DAY: 2010-04-19, E0: 0.34500000000000003, ELEV: 440.0, ES0: 0.29700000000000004, - ET0: 0.337, IRRAD: 21025000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.8, TMAX: 18.6, TMIN: 3.0, VAP: 7.35, WIND: 1.939480308982924} -- {DAY: 2010-04-20, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.28900000000000003, - ET0: 0.319, IRRAD: 18687000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.5, TMAX: 16.9, TMIN: 4.1, VAP: 7.42, WIND: 2.442308537237756} -- {DAY: 2010-04-21, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.266, ET0: 0.262, - IRRAD: 14308000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.550000000000001, - TMAX: 10.4, TMIN: 4.7, VAP: 5.87, WIND: 3.0888019735653973} -- {DAY: 2010-04-22, E0: 0.288, ELEV: 440.0, ES0: 0.244, ET0: 0.28500000000000003, - IRRAD: 22864000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.95, - TMAX: 12.4, TMIN: -2.5, VAP: 4.42, WIND: 1.72398249687371} -- {DAY: 2010-04-23, E0: 0.333, ELEV: 440.0, ES0: 0.286, ET0: 0.331, IRRAD: 23148000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.0, TMAX: 15.0, - TMIN: -1.0, VAP: 5.13, WIND: 2.2268107251285425} -- {DAY: 2010-04-24, E0: 0.369, ELEV: 440.0, ES0: 0.316, ET0: 0.36, IRRAD: 24044000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.6, TMAX: 18.0, - TMIN: 1.2, VAP: 6.37, WIND: 1.8676477049465194} -- {DAY: 2010-04-25, E0: 0.43899999999999995, ELEV: 440.0, ES0: 0.381, ET0: 0.425, - IRRAD: 24020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.15, - TMAX: 20.6, TMIN: 5.7, VAP: 7.05, WIND: 2.154978121092138} -- {DAY: 2010-04-26, E0: 0.29700000000000004, ELEV: 440.0, ES0: 0.262, ET0: 0.286, - IRRAD: 15089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 11.75, - TMAX: 17.6, TMIN: 5.9, VAP: 8.63, WIND: 2.083145517055733} -- {DAY: 2010-04-27, E0: 0.3, ELEV: 440.0, ES0: 0.26, ET0: 0.286, IRRAD: 17661000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.45, TMAX: 17.9, - TMIN: 3.0, VAP: 8.23, WIND: 1.6521498928373055} -- {DAY: 2010-04-28, E0: 0.373, ELEV: 440.0, ES0: 0.317, ET0: 0.352, IRRAD: 24464000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 19.8, - TMIN: 2.7, VAP: 7.52, WIND: 1.077489060546069} -- {DAY: 2010-04-29, E0: 0.41100000000000003, ELEV: 440.0, ES0: 0.352, ET0: 0.41600000000000004, - IRRAD: 23615000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, - TMAX: 23.8, TMIN: 4.1, VAP: 8.26, WIND: 1.5084846847644964} -- {DAY: 2010-04-30, E0: 0.348, ELEV: 440.0, ES0: 0.311, ET0: 0.333, IRRAD: 14717000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 22.6, - TMIN: 8.5, VAP: 11.53, WIND: 2.2268107251285425} -- {DAY: 2010-05-01, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.26, ET0: 0.24900000000000003, - IRRAD: 12969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.58, SNOWDEPTH: .nan, TEMP: 14.45, - TMAX: 17.8, TMIN: 11.1, VAP: 12.04, WIND: 1.8676477049465194} -- {DAY: 2010-05-02, E0: 0.176, ELEV: 440.0, ES0: 0.158, ET0: 0.147, IRRAD: 7834000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.8, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 14.2, - TMIN: 9.7, VAP: 11.97, WIND: 1.4366520807280918} -- {DAY: 2010-05-03, E0: 0.189, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.161, - IRRAD: 8347000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 13.5, TMIN: 9.1, VAP: 10.82, WIND: 1.6521498928373055} -- {DAY: 2010-05-04, E0: 0.133, ELEV: 440.0, ES0: 0.121, ET0: 0.11699999999999999, - IRRAD: 5850000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.37, SNOWDEPTH: .nan, TEMP: 8.65, - TMAX: 10.6, TMIN: 6.7, VAP: 9.71, WIND: 2.9451367654925877} -- {DAY: 2010-05-05, E0: 0.176, ELEV: 440.0, ES0: 0.161, ET0: 0.125, IRRAD: 7550000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 7.15, TMAX: 8.9, - TMIN: 5.4, VAP: 8.77, WIND: 4.669119262366299} -- {DAY: 2010-05-06, E0: 0.159, ELEV: 440.0, ES0: 0.144, ET0: 0.145, IRRAD: 6844000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 9.350000000000001, - TMAX: 11.8, TMIN: 6.9, VAP: 9.74, WIND: 3.304299785674611} -- {DAY: 2010-05-07, E0: 0.213, ELEV: 440.0, ES0: 0.189, ET0: 0.175, IRRAD: 11585000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.300000000000001, - TMAX: 10.4, TMIN: 4.2, VAP: 8.06, WIND: 2.2268107251285425} -- {DAY: 2010-05-08, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.246, - IRRAD: 16249000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.7, - TMAX: 15.5, TMIN: 3.9, VAP: 8.4, WIND: 1.077489060546069} -- {DAY: 2010-05-09, E0: 0.29, ELEV: 440.0, ES0: 0.252, ET0: 0.261, IRRAD: 16930000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 10.35, TMAX: 17.3, - TMIN: 3.4, VAP: 9.58, WIND: 1.5803172888009012} -- {DAY: 2010-05-10, E0: 0.182, ELEV: 440.0, ES0: 0.16299999999999998, ET0: 0.152, - IRRAD: 8387000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 14.0, TMIN: 8.6, VAP: 11.36, WIND: 1.077489060546069} -- {DAY: 2010-05-11, E0: 0.39, ELEV: 440.0, ES0: 0.344, ET0: 0.317, IRRAD: 18611000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.3, - TMIN: 9.2, VAP: 12.27, WIND: 2.5859737453105653} -- {DAY: 2010-05-12, E0: 0.32599999999999996, ELEV: 440.0, ES0: 0.29100000000000004, - ET0: 0.269, IRRAD: 14823000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.55, TMAX: 15.5, TMIN: 9.6, VAP: 10.25, WIND: 2.154978121092138} -- {DAY: 2010-05-13, E0: 0.197, ELEV: 440.0, ES0: 0.178, ET0: 0.16699999999999998, - IRRAD: 8293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.44000000000000006, SNOWDEPTH: .nan, - TEMP: 9.95, TMAX: 12.7, TMIN: 7.2, VAP: 9.85, WIND: 2.7296389533833745} -- {DAY: 2010-05-14, E0: 0.149, ELEV: 440.0, ES0: 0.133, ET0: 0.12, IRRAD: 7517000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 7.25, TMAX: 8.6, - TMIN: 5.9, VAP: 8.94, WIND: 1.72398249687371} -- {DAY: 2010-05-15, E0: 0.177, ELEV: 440.0, ES0: 0.161, ET0: 0.148, IRRAD: 8182000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 7.300000000000001, - TMAX: 9.3, TMIN: 5.3, VAP: 8.06, WIND: 2.0113129130193284} -- {DAY: 2010-05-16, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.267, ET0: 0.23500000000000001, - IRRAD: 11902000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.600000000000001, - TMAX: 12.3, TMIN: 4.9, VAP: 7.59, WIND: 3.1606345776018023} -- {DAY: 2010-05-17, E0: 0.364, ELEV: 440.0, ES0: 0.323, ET0: 0.315, IRRAD: 18616000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 10.1, TMAX: 15.4, - TMIN: 4.8, VAP: 7.99, WIND: 2.801471557419779} -- {DAY: 2010-05-18, E0: 0.23900000000000002, ELEV: 440.0, ES0: 0.217, ET0: 0.20600000000000002, - IRRAD: 10082000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 9.3, - TMAX: 11.5, TMIN: 7.1, VAP: 8.29, WIND: 2.65780634934697} -- {DAY: 2010-05-19, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.096, ET0: 0.095, - IRRAD: 5446000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 6.1, - TMAX: 7.1, TMIN: 5.1, VAP: 8.46, WIND: 2.7296389533833745} -- {DAY: 2010-05-20, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.095, ET0: 0.10400000000000001, - IRRAD: 5694000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 9.5, - TMAX: 12.5, TMIN: 6.5, VAP: 11.3, WIND: 1.3648194766916872} -- {DAY: 2010-05-21, E0: 0.265, ELEV: 440.0, ES0: 0.23700000000000002, ET0: 0.21800000000000003, - IRRAD: 11531000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 13.3, - TMAX: 17.0, TMIN: 9.6, VAP: 12.21, WIND: 1.8676477049465194} -- {DAY: 2010-05-22, E0: 0.386, ELEV: 440.0, ES0: 0.339, ET0: 0.323, IRRAD: 19035000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.1, SNOWDEPTH: .nan, TEMP: 14.15, TMAX: 20.1, - TMIN: 8.2, VAP: 11.77, WIND: 1.5084846847644964} -- {DAY: 2010-05-23, E0: 0.45099999999999996, ELEV: 440.0, ES0: 0.395, ET0: 0.378, - IRRAD: 22815000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.6, - TMAX: 20.9, TMIN: 8.3, VAP: 11.7, WIND: 1.6521498928373055} -- {DAY: 2010-05-24, E0: 0.492, ELEV: 440.0, ES0: 0.433, ET0: 0.43600000000000005, - IRRAD: 23334000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 16.05, - TMAX: 23.5, TMIN: 8.6, VAP: 12.38, WIND: 2.5141411412741608} -- {DAY: 2010-05-25, E0: 0.458, ELEV: 440.0, ES0: 0.404, ET0: 0.39, IRRAD: 20822000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: .nan, TEMP: 16.65, - TMAX: 22.0, TMIN: 11.3, VAP: 13.18, WIND: 2.370475933201351} -- {DAY: 2010-05-26, E0: 0.215, ELEV: 440.0, ES0: 0.193, ET0: 0.187, IRRAD: 9210000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.93, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 17.5, - TMIN: 10.6, VAP: 13.39, WIND: 1.5084846847644964} -- {DAY: 2010-05-27, E0: 0.303, ELEV: 440.0, ES0: 0.27, ET0: 0.257, IRRAD: 13115000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 15.0, TMAX: 18.8, - TMIN: 11.2, VAP: 13.15, WIND: 2.083145517055733} -- {DAY: 2010-05-28, E0: 0.362, ELEV: 440.0, ES0: 0.321, ET0: 0.305, IRRAD: 16517000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.2, TMAX: 20.4, - TMIN: 10.0, VAP: 12.78, WIND: 1.72398249687371} -- {DAY: 2010-05-29, E0: 0.413, ELEV: 440.0, ES0: 0.362, ET0: 0.346, IRRAD: 20796000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.9, - TMIN: 8.6, VAP: 11.43, WIND: 1.5084846847644964} -- {DAY: 2010-05-30, E0: 0.277, ELEV: 440.0, ES0: 0.25, ET0: 0.233, IRRAD: 11117000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 3.6, SNOWDEPTH: .nan, TEMP: 14.0, TMAX: 17.8, - TMIN: 10.2, VAP: 12.48, WIND: 2.370475933201351} -- {DAY: 2010-05-31, E0: 0.307, ELEV: 440.0, ES0: 0.277, ET0: 0.21800000000000003, - IRRAD: 13569000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.32, SNOWDEPTH: .nan, TEMP: 9.95, - TMAX: 13.1, TMIN: 6.8, VAP: 9.74, WIND: 3.663462805856634} -- {DAY: 2010-06-01, E0: 0.10900000000000001, ELEV: 440.0, ES0: 0.098, ET0: 0.10300000000000001, - IRRAD: 5021000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 9.5, - TMAX: 11.0, TMIN: 8.0, VAP: 10.76, WIND: 2.7296389533833745} -- {DAY: 2010-06-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10300000000000001, - ET0: 0.10800000000000001, IRRAD: 5185000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.2, - SNOWDEPTH: .nan, TEMP: 10.4, TMAX: 11.5, TMIN: 9.3, VAP: 11.4, WIND: 2.65780634934697} -- {DAY: 2010-06-03, E0: 0.128, ELEV: 440.0, ES0: 0.11399999999999999, ET0: 0.118, - IRRAD: 5892000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.75, - TMAX: 13.2, TMIN: 10.3, VAP: 12.64, WIND: 1.7958151009101146} -- {DAY: 2010-06-04, E0: 0.528, ELEV: 440.0, ES0: 0.45899999999999996, ET0: 0.44000000000000006, - IRRAD: 27697000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.65, - TMAX: 21.1, TMIN: 8.2, VAP: 11.3, WIND: 1.5803172888009012} -- {DAY: 2010-06-05, E0: 0.564, ELEV: 440.0, ES0: 0.488, ET0: 0.497, IRRAD: 29724000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.1, TMAX: 24.8, - TMIN: 7.4, VAP: 11.5, WIND: 1.3648194766916872} -- {DAY: 2010-06-06, E0: 0.5900000000000001, ELEV: 440.0, ES0: 0.513, ET0: 0.525, IRRAD: 28294000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.4, TMAX: 27.0, - TMIN: 9.8, VAP: 13.35, WIND: 1.6521498928373055} -- {DAY: 2010-06-07, E0: 0.505, ELEV: 440.0, ES0: 0.45099999999999996, ET0: 0.42699999999999994, - IRRAD: 19774000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, - TMAX: 22.6, TMIN: 15.6, VAP: 14.43, WIND: 2.801471557419779} -- {DAY: 2010-06-08, E0: 0.538, ELEV: 440.0, ES0: 0.471, ET0: 0.465, IRRAD: 24452000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.85, TMAX: 26.9, - TMIN: 10.8, VAP: 14.7, WIND: 1.4366520807280918} -- {DAY: 2010-06-09, E0: 0.595, ELEV: 440.0, ES0: 0.525, ET0: 0.517, IRRAD: 24742000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, TMAX: 28.6, - TMIN: 14.4, VAP: 17.3, WIND: 2.083145517055733} -- {DAY: 2010-06-10, E0: 0.607, ELEV: 440.0, ES0: 0.536, ET0: 0.533, IRRAD: 24198000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.3, TMAX: 30.5, - TMIN: 16.1, VAP: 17.26, WIND: 1.5803172888009012} -- {DAY: 2010-06-11, E0: 0.653, ELEV: 440.0, ES0: 0.5740000000000001, ET0: 0.5650000000000001, - IRRAD: 27798000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, - TMAX: 27.1, TMIN: 15.9, VAP: 16.05, WIND: 2.298643329164947} -- {DAY: 2010-06-12, E0: 0.5, ELEV: 440.0, ES0: 0.44400000000000006, ET0: 0.437, IRRAD: 19853000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 20.4, TMAX: 26.5, - TMIN: 14.3, VAP: 15.11, WIND: 1.72398249687371} -- {DAY: 2010-06-13, E0: 0.371, ELEV: 440.0, ES0: 0.33399999999999996, ET0: 0.29900000000000004, - IRRAD: 14405000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 15.8, - TMAX: 19.3, TMIN: 12.3, VAP: 13.18, WIND: 2.442308537237756} -- {DAY: 2010-06-14, E0: 0.321, ELEV: 440.0, ES0: 0.288, ET0: 0.258, IRRAD: 12885000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.35, TMAX: 18.9, - TMIN: 11.8, VAP: 13.39, WIND: 2.0113129130193284} -- {DAY: 2010-06-15, E0: 0.369, ELEV: 440.0, ES0: 0.335, ET0: 0.288, IRRAD: 13535000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.200000000000001, - TMAX: 18.6, TMIN: 11.8, VAP: 12.91, WIND: 3.2324671816382065} -- {DAY: 2010-06-16, E0: 0.413, ELEV: 440.0, ES0: 0.374, ET0: 0.33999999999999997, - IRRAD: 15421000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.3, - TMAX: 17.3, TMIN: 11.3, VAP: 11.03, WIND: 4.309956242184276} -- {DAY: 2010-06-17, E0: 0.489, ELEV: 440.0, ES0: 0.438, ET0: 0.389, IRRAD: 20003000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.3, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 19.8, - TMIN: 11.3, VAP: 12.24, WIND: 3.735295409893039} -- {DAY: 2010-06-18, E0: 0.28700000000000003, ELEV: 440.0, ES0: 0.258, ET0: 0.242, - IRRAD: 11148000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 16.35, - TMAX: 18.7, TMIN: 14.0, VAP: 14.16, WIND: 1.5803172888009012} -- {DAY: 2010-06-19, E0: 0.346, ELEV: 440.0, ES0: 0.308, ET0: 0.275, IRRAD: 16133000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.1, TMAX: 15.6, - TMIN: 8.6, VAP: 10.12, WIND: 1.6521498928373055} -- {DAY: 2010-06-20, E0: 0.23199999999999998, ELEV: 440.0, ES0: 0.21000000000000002, - ET0: 0.19, IRRAD: 9754000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, - TEMP: 11.0, TMAX: 14.0, TMIN: 8.0, VAP: 10.05, WIND: 1.3648194766916872} -- {DAY: 2010-06-21, E0: 0.337, ELEV: 440.0, ES0: 0.303, ET0: 0.264, IRRAD: 14403000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.3, TMAX: 15.8, - TMIN: 8.8, VAP: 10.18, WIND: 1.72398249687371} -- {DAY: 2010-06-22, E0: 0.36, ELEV: 440.0, ES0: 0.318, ET0: 0.312, IRRAD: 17475000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.65, TMAX: 18.3, - TMIN: 7.0, VAP: 9.81, WIND: 1.5084846847644964} -- {DAY: 2010-06-23, E0: 0.383, ELEV: 440.0, ES0: 0.33599999999999997, ET0: 0.331, - IRRAD: 19579000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.05, - TMAX: 19.7, TMIN: 6.4, VAP: 10.42, WIND: 1.2929868726552827} -- {DAY: 2010-06-24, E0: 0.44800000000000006, ELEV: 440.0, ES0: 0.397, ET0: 0.383, - IRRAD: 19454000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.1, - TMAX: 22.5, TMIN: 11.7, VAP: 11.5, WIND: 1.2929868726552827} -- {DAY: 2010-06-25, E0: 0.418, ELEV: 440.0, ES0: 0.367, ET0: 0.378, IRRAD: 19342000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 17.05, TMAX: 24.0, - TMIN: 10.1, VAP: 13.52, WIND: 1.5803172888009012} -- {DAY: 2010-06-26, E0: 0.457, ELEV: 440.0, ES0: 0.4, ET0: 0.40499999999999997, IRRAD: 21119000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.75, TMAX: 24.3, - TMIN: 11.2, VAP: 13.96, WIND: 1.5084846847644964} -- {DAY: 2010-06-27, E0: 0.571, ELEV: 440.0, ES0: 0.49800000000000005, ET0: 0.506, - IRRAD: 26779000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.9, - TMAX: 24.8, TMIN: 13.0, VAP: 12.48, WIND: 1.6521498928373055} -- {DAY: 2010-06-28, E0: 0.585, ELEV: 440.0, ES0: 0.507, ET0: 0.519, IRRAD: 28562000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, TMAX: 26.6, - TMIN: 11.6, VAP: 12.38, WIND: 1.077489060546069} -- {DAY: 2010-06-29, E0: 0.538, ELEV: 440.0, ES0: 0.46799999999999997, ET0: 0.493, - IRRAD: 25202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.0, - TMAX: 28.1, TMIN: 11.9, VAP: 13.52, WIND: 1.1493216645824735} -- {DAY: 2010-06-30, E0: 0.515, ELEV: 440.0, ES0: 0.45499999999999996, ET0: 0.45099999999999996, - IRRAD: 21164000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 21.35, - TMAX: 27.5, TMIN: 15.2, VAP: 15.65, WIND: 1.3648194766916872} -- {DAY: 2010-07-01, E0: 0.533, ELEV: 440.0, ES0: 0.462, ET0: 0.47800000000000004, - IRRAD: 25266000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.7, - TMAX: 28.2, TMIN: 13.2, VAP: 14.63, WIND: 0.861991248436855} -- {DAY: 2010-07-02, E0: 0.597, ELEV: 440.0, ES0: 0.518, ET0: 0.5349999999999999, IRRAD: 27426000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.2, TMAX: 30.2, - TMIN: 14.2, VAP: 14.87, WIND: 0.9338238524732597} -- {DAY: 2010-07-03, E0: 0.614, ELEV: 440.0, ES0: 0.537, ET0: 0.5519999999999999, IRRAD: 26263000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.1, TMAX: 30.8, - TMIN: 15.4, VAP: 15.51, WIND: 1.2929868726552827} -- {DAY: 2010-07-04, E0: 0.509, ELEV: 440.0, ES0: 0.449, ET0: 0.457, IRRAD: 20494000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 22.45, TMAX: 28.9, - TMIN: 16.0, VAP: 17.26, WIND: 1.5084846847644964} -- {DAY: 2010-07-05, E0: 0.489, ELEV: 440.0, ES0: 0.43600000000000005, ET0: 0.409, - IRRAD: 18435000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 22.0, - TMAX: 26.7, TMIN: 17.3, VAP: 17.84, WIND: 1.6521498928373055} -- {DAY: 2010-07-06, E0: 0.454, ELEV: 440.0, ES0: 0.40499999999999997, ET0: 0.381, - IRRAD: 18109000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.049999999999997, - TMAX: 20.4, TMIN: 15.7, VAP: 13.45, WIND: 2.2268107251285425} -- {DAY: 2010-07-07, E0: 0.40499999999999997, ELEV: 440.0, ES0: 0.352, ET0: 0.377, - IRRAD: 21158000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.1, - TMAX: 22.4, TMIN: 7.8, VAP: 10.22, WIND: 1.077489060546069} -- {DAY: 2010-07-08, E0: 0.5599999999999999, ELEV: 440.0, ES0: 0.484, ET0: 0.505, IRRAD: 28373000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.0, TMAX: 27.4, - TMIN: 8.6, VAP: 11.33, WIND: 1.0056564565096642} -- {DAY: 2010-07-09, E0: 0.609, ELEV: 440.0, ES0: 0.5269999999999999, ET0: 0.55, IRRAD: 28929000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 30.9, - TMIN: 11.4, VAP: 13.69, WIND: 0.9338238524732597} -- {DAY: 2010-07-10, E0: 0.619, ELEV: 440.0, ES0: 0.5389999999999999, ET0: 0.5780000000000001, - IRRAD: 27293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.25, - TMAX: 32.1, TMIN: 14.4, VAP: 15.14, WIND: 1.2929868726552827} -- {DAY: 2010-07-11, E0: 0.671, ELEV: 440.0, ES0: 0.587, ET0: 0.628, IRRAD: 28557000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 24.1, TMAX: 33.7, - TMIN: 14.5, VAP: 13.93, WIND: 1.4366520807280918} -- {DAY: 2010-07-12, E0: 0.669, ELEV: 440.0, ES0: 0.589, ET0: 0.617, IRRAD: 27106000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 24.45, TMAX: 33.5, - TMIN: 15.4, VAP: 16.08, WIND: 1.5803172888009012} -- {DAY: 2010-07-13, E0: 0.5700000000000001, ELEV: 440.0, ES0: 0.506, ET0: 0.514, IRRAD: 21652000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 23.65, TMAX: 29.1, - TMIN: 18.2, VAP: 17.03, WIND: 1.939480308982924} -- {DAY: 2010-07-14, E0: 0.633, ELEV: 440.0, ES0: 0.5509999999999999, ET0: 0.579, IRRAD: 27607000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 24.0, TMAX: 32.9, - TMIN: 15.1, VAP: 16.42, WIND: 1.1493216645824735} -- {DAY: 2010-07-15, E0: 0.43499999999999994, ELEV: 440.0, ES0: 0.39, ET0: 0.376, IRRAD: 15587000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.75, TMAX: 26.0, - TMIN: 19.5, VAP: 17.94, WIND: 1.5803172888009012} -- {DAY: 2010-07-16, E0: 0.645, ELEV: 440.0, ES0: 0.5650000000000001, ET0: 0.585, IRRAD: 26895000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 24.25, TMAX: 33.4, - TMIN: 15.1, VAP: 18.14, WIND: 1.4366520807280918} -- {DAY: 2010-07-17, E0: 0.391, ELEV: 440.0, ES0: 0.35, ET0: 0.331, IRRAD: 14872000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.31, SNOWDEPTH: .nan, TEMP: 21.55, TMAX: 24.6, - TMIN: 18.5, VAP: 17.36, WIND: 1.8676477049465194} -- {DAY: 2010-07-18, E0: 0.371, ELEV: 440.0, ES0: 0.329, ET0: 0.316, IRRAD: 15735000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.200000000000003, - TMAX: 21.1, TMIN: 13.3, VAP: 14.0, WIND: 1.72398249687371} -- {DAY: 2010-07-19, E0: 0.45499999999999996, ELEV: 440.0, ES0: 0.399, ET0: 0.40099999999999997, - IRRAD: 21342000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.2, - TMAX: 23.4, TMIN: 11.0, VAP: 12.17, WIND: 1.939480308982924} -- {DAY: 2010-07-20, E0: 0.5469999999999999, ELEV: 440.0, ES0: 0.477, ET0: 0.485, IRRAD: 25767000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.0, TMAX: 25.9, - TMIN: 12.1, VAP: 14.23, WIND: 1.7958151009101146} -- {DAY: 2010-07-21, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.509, ET0: 0.517, IRRAD: 26623000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.85, TMAX: 31.2, - TMIN: 14.5, VAP: 16.25, WIND: 0.861991248436855} -- {DAY: 2010-07-22, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.516, ET0: 0.534, IRRAD: 23571000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 24.200000000000003, - TMAX: 31.8, TMIN: 16.6, VAP: 17.94, WIND: 1.5803172888009012} -- {DAY: 2010-07-23, E0: 0.266, ELEV: 440.0, ES0: 0.242, ET0: 0.23199999999999998, - IRRAD: 8448000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.6, SNOWDEPTH: .nan, TEMP: 20.0, - TMAX: 22.4, TMIN: 17.6, VAP: 18.07, WIND: 2.0113129130193284} -- {DAY: 2010-07-24, E0: 0.21800000000000003, ELEV: 440.0, ES0: 0.199, ET0: 0.197, - IRRAD: 7503000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 15.85, - TMAX: 18.0, TMIN: 13.7, VAP: 14.26, WIND: 2.442308537237756} -- {DAY: 2010-07-25, E0: 0.393, ELEV: 440.0, ES0: 0.346, ET0: 0.344, IRRAD: 18998000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 18.8, - TMIN: 9.3, VAP: 10.18, WIND: 1.939480308982924} -- {DAY: 2010-07-26, E0: 0.34700000000000003, ELEV: 440.0, ES0: 0.306, ET0: 0.301, - IRRAD: 16015000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.899999999999999, - TMAX: 20.7, TMIN: 9.1, VAP: 11.9, WIND: 1.3648194766916872} -- {DAY: 2010-07-27, E0: 0.367, ELEV: 440.0, ES0: 0.324, ET0: 0.305, IRRAD: 16530000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 16.35, TMAX: 21.3, - TMIN: 11.4, VAP: 13.79, WIND: 1.3648194766916872} -- {DAY: 2010-07-28, E0: 0.282, ELEV: 440.0, ES0: 0.254, ET0: 0.24300000000000002, - IRRAD: 10520000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16999999999999998, SNOWDEPTH: .nan, - TEMP: 16.9, TMAX: 20.4, TMIN: 13.4, VAP: 15.27, WIND: 2.65780634934697} -- {DAY: 2010-07-29, E0: 0.273, ELEV: 440.0, ES0: 0.244, ET0: 0.22999999999999998, - IRRAD: 11067000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 16.549999999999997, - TMAX: 18.9, TMIN: 14.2, VAP: 14.84, WIND: 1.7958151009101146} -- {DAY: 2010-07-30, E0: 0.312, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.258, - IRRAD: 13224000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.049999999999997, - TMAX: 19.4, TMIN: 12.7, VAP: 13.25, WIND: 1.221154268618878} -- {DAY: 2010-07-31, E0: 0.48200000000000004, ELEV: 440.0, ES0: 0.414, ET0: 0.42800000000000005, - IRRAD: 26033000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.35, - TMAX: 24.1, TMIN: 8.6, VAP: 12.21, WIND: 1.221154268618878} -- {DAY: 2010-08-01, E0: 0.511, ELEV: 440.0, ES0: 0.44000000000000006, ET0: 0.46699999999999997, - IRRAD: 25874000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.75, - TMAX: 27.3, TMIN: 10.2, VAP: 13.62, WIND: 1.221154268618878} -- {DAY: 2010-08-02, E0: 0.301, ELEV: 440.0, ES0: 0.268, ET0: 0.258, IRRAD: 12301000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.8699999999999999, SNOWDEPTH: .nan, TEMP: 19.15, - TMAX: 23.4, TMIN: 14.9, VAP: 17.5, WIND: 1.221154268618878} -- {DAY: 2010-08-03, E0: 0.315, ELEV: 440.0, ES0: 0.282, ET0: 0.263, IRRAD: 12311000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 20.0, - TMIN: 16.3, VAP: 15.81, WIND: 1.8676477049465194} -- {DAY: 2010-08-04, E0: 0.4, ELEV: 440.0, ES0: 0.34900000000000003, ET0: 0.333, IRRAD: 19963000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.4, TMAX: 21.6, - TMIN: 9.2, VAP: 12.34, WIND: 1.1493216645824735} -- {DAY: 2010-08-05, E0: 0.255, ELEV: 440.0, ES0: 0.227, ET0: 0.21800000000000003, - IRRAD: 10993000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.2, - TMAX: 20.4, TMIN: 10.0, VAP: 14.13, WIND: 1.5084846847644964} -- {DAY: 2010-08-06, E0: 0.121, ELEV: 440.0, ES0: 0.10800000000000001, ET0: 0.12, IRRAD: 4960000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.8, SNOWDEPTH: .nan, TEMP: 15.5, TMAX: 16.8, - TMIN: 14.2, VAP: 16.08, WIND: 1.7958151009101146} -- {DAY: 2010-08-07, E0: 0.17099999999999999, ELEV: 440.0, ES0: 0.154, ET0: 0.155, - IRRAD: 6510000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.8, - TMAX: 18.0, TMIN: 13.6, VAP: 15.27, WIND: 2.0113129130193284} -- {DAY: 2010-08-08, E0: 0.374, ELEV: 440.0, ES0: 0.32999999999999996, ET0: 0.314, - IRRAD: 17177000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 16.25, - TMAX: 22.0, TMIN: 10.5, VAP: 13.93, WIND: 1.72398249687371} -- {DAY: 2010-08-09, E0: 0.384, ELEV: 440.0, ES0: 0.339, ET0: 0.331, IRRAD: 16768000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, TMAX: 22.1, - TMIN: 13.2, VAP: 13.96, WIND: 1.7958151009101146} -- {DAY: 2010-08-10, E0: 0.34900000000000003, ELEV: 440.0, ES0: 0.304, ET0: 0.316, - IRRAD: 17022000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.0, - TMAX: 24.6, TMIN: 9.4, VAP: 13.59, WIND: 1.077489060546069} -- {DAY: 2010-08-11, E0: 0.35, ELEV: 440.0, ES0: 0.307, ET0: 0.3, IRRAD: 15774000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 25.0, - TMIN: 11.3, VAP: 15.41, WIND: 1.077489060546069} -- {DAY: 2010-08-12, E0: 0.311, ELEV: 440.0, ES0: 0.275, ET0: 0.262, IRRAD: 13152000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 18.55, TMAX: 22.8, - TMIN: 14.3, VAP: 17.13, WIND: 1.6521498928373055} -- {DAY: 2010-08-13, E0: 0.187, ELEV: 440.0, ES0: 0.16699999999999998, ET0: 0.16599999999999998, - IRRAD: 7020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.8, SNOWDEPTH: .nan, TEMP: 17.95, - TMAX: 20.0, TMIN: 15.9, VAP: 17.3, WIND: 1.221154268618878} -- {DAY: 2010-08-14, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.24500000000000002, - IRRAD: 12078000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, - TMAX: 20.7, TMIN: 14.6, VAP: 16.32, WIND: 2.298643329164947} -- {DAY: 2010-08-15, E0: 0.414, ELEV: 440.0, ES0: 0.369, ET0: 0.374, IRRAD: 15896000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 20.85, TMAX: 25.1, - TMIN: 16.6, VAP: 16.49, WIND: 2.442308537237756} -- {DAY: 2010-08-16, E0: 0.31, ELEV: 440.0, ES0: 0.277, ET0: 0.258, IRRAD: 12819000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 15.8, TMAX: 18.3, - TMIN: 13.3, VAP: 13.45, WIND: 2.5859737453105653} -- {DAY: 2010-08-17, E0: 0.127, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.132, - IRRAD: 4005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.76, SNOWDEPTH: .nan, TEMP: 13.75, - TMAX: 14.9, TMIN: 12.6, VAP: 13.49, WIND: 3.663462805856634} -- {DAY: 2010-08-18, E0: 0.154, ELEV: 440.0, ES0: 0.141, ET0: 0.155, IRRAD: 5067000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.700000000000001, - TMAX: 17.1, TMIN: 12.3, VAP: 13.89, WIND: 2.7296389533833745} -- {DAY: 2010-08-19, E0: 0.361, ELEV: 440.0, ES0: 0.319, ET0: 0.318, IRRAD: 15911000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.65, TMAX: 20.7, - TMIN: 12.6, VAP: 12.71, WIND: 2.154978121092138} -- {DAY: 2010-08-20, E0: 0.391, ELEV: 440.0, ES0: 0.33199999999999996, ET0: 0.361, - IRRAD: 22793000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.5, - TMAX: 25.3, TMIN: 7.7, VAP: 13.12, WIND: 0.861991248436855} -- {DAY: 2010-08-21, E0: 0.426, ELEV: 440.0, ES0: 0.364, ET0: 0.39, IRRAD: 22795000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.25, TMAX: 27.3, - TMIN: 11.2, VAP: 15.58, WIND: 1.0056564565096642} -- {DAY: 2010-08-22, E0: 0.437, ELEV: 440.0, ES0: 0.376, ET0: 0.39, IRRAD: 21331000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.1, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 29.1, - TMIN: 13.2, VAP: 17.94, WIND: 1.077489060546069} -- {DAY: 2010-08-23, E0: 0.262, ELEV: 440.0, ES0: 0.231, ET0: 0.24300000000000002, - IRRAD: 11294000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.11000000000000001, SNOWDEPTH: .nan, - TEMP: 19.6, TMAX: 24.1, TMIN: 15.1, VAP: 18.71, WIND: 1.939480308982924} -- {DAY: 2010-08-24, E0: 0.31, ELEV: 440.0, ES0: 0.282, ET0: 0.27799999999999997, IRRAD: 10039000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 20.0, TMAX: 22.2, - TMIN: 17.8, VAP: 16.79, WIND: 2.65780634934697} -- {DAY: 2010-08-25, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.29, ET0: 0.294, IRRAD: 16736000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.75, TMAX: 19.2, - TMIN: 10.3, VAP: 11.97, WIND: 2.298643329164947} -- {DAY: 2010-08-26, E0: 0.315, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.29300000000000004, - IRRAD: 13589000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 18.45, - TMAX: 26.0, TMIN: 10.9, VAP: 16.35, WIND: 1.939480308982924} -- {DAY: 2010-08-27, E0: 0.256, ELEV: 440.0, ES0: 0.229, ET0: 0.22599999999999998, - IRRAD: 10050000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.36, SNOWDEPTH: .nan, TEMP: 18.0, - TMAX: 21.1, TMIN: 14.9, VAP: 17.53, WIND: 3.663462805856634} -- {DAY: 2010-08-28, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.223, ET0: 0.22000000000000003, - IRRAD: 10561000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.0, - TMAX: 15.6, TMIN: 12.4, VAP: 11.9, WIND: 2.65780634934697} -- {DAY: 2010-08-29, E0: 0.252, ELEV: 440.0, ES0: 0.225, ET0: 0.209, IRRAD: 11595000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 15.5, - TMIN: 8.4, VAP: 10.76, WIND: 2.7296389533833745} -- {DAY: 2010-08-30, E0: 0.176, ELEV: 440.0, ES0: 0.157, ET0: 0.141, IRRAD: 8652000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.47000000000000003, SNOWDEPTH: .nan, TEMP: 9.399999999999999, - TMAX: 11.2, TMIN: 7.6, VAP: 9.95, WIND: 2.9451367654925877} -- {DAY: 2010-08-31, E0: 0.196, ELEV: 440.0, ES0: 0.174, ET0: 0.178, IRRAD: 10017000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 14.6, - TMIN: 7.6, VAP: 10.35, WIND: 2.083145517055733} -- {DAY: 2010-09-01, E0: 0.16799999999999998, ELEV: 440.0, ES0: 0.149, ET0: 0.142, - IRRAD: 8681000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 10.0, - TMAX: 14.4, TMIN: 5.6, VAP: 10.66, WIND: 1.72398249687371} -- {DAY: 2010-09-02, E0: 0.175, ELEV: 440.0, ES0: 0.154, ET0: 0.147, IRRAD: 8821000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 11.65, TMAX: 15.8, - TMIN: 7.5, VAP: 11.7, WIND: 1.0056564565096642} -- {DAY: 2010-09-03, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.21400000000000002, - ET0: 0.211, IRRAD: 14382000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.35, TMAX: 17.2, TMIN: 7.5, VAP: 11.33, WIND: 1.221154268618878} -- {DAY: 2010-09-04, E0: 0.225, ELEV: 440.0, ES0: 0.20099999999999998, ET0: 0.194, - IRRAD: 9609000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 13.15, - TMAX: 16.6, TMIN: 9.7, VAP: 10.66, WIND: 1.5084846847644964} -- {DAY: 2010-09-05, E0: 0.306, ELEV: 440.0, ES0: 0.262, ET0: 0.277, IRRAD: 19211000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 16.2, - TMIN: 6.0, VAP: 9.21, WIND: 2.65780634934697} -- {DAY: 2010-09-06, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.24900000000000003, - ET0: 0.272, IRRAD: 18341000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.75, TMAX: 15.9, TMIN: 5.6, VAP: 8.77, WIND: 2.5859737453105653} -- {DAY: 2010-09-07, E0: 0.24, ELEV: 440.0, ES0: 0.21000000000000002, ET0: 0.193, IRRAD: 13266000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 9.75, TMAX: 14.3, - TMIN: 5.2, VAP: 9.88, WIND: 3.663462805856634} -- {DAY: 2010-09-08, E0: 0.22000000000000003, ELEV: 440.0, ES0: 0.196, ET0: 0.152, - IRRAD: 9667000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 12.8, - TMAX: 14.9, TMIN: 10.7, VAP: 12.91, WIND: 3.2324671816382065} -- {DAY: 2010-09-09, E0: 0.131, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.131, - IRRAD: 5725000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 13.65, - TMAX: 15.8, TMIN: 11.5, VAP: 13.18, WIND: 1.7958151009101146} -- {DAY: 2010-09-10, E0: 0.211, ELEV: 440.0, ES0: 0.184, ET0: 0.185, IRRAD: 10961000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.200000000000001, - TMAX: 18.6, TMIN: 9.8, VAP: 12.95, WIND: 1.2929868726552827} -- {DAY: 2010-09-11, E0: 0.286, ELEV: 440.0, ES0: 0.242, ET0: 0.253, IRRAD: 17976000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 21.0, - TMIN: 7.1, VAP: 11.57, WIND: 1.0056564565096642} -- {DAY: 2010-09-12, E0: 0.246, ELEV: 440.0, ES0: 0.205, ET0: 0.238, IRRAD: 16699000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, TMAX: 21.7, - TMIN: 6.2, VAP: 11.67, WIND: 0.861991248436855} -- {DAY: 2010-09-13, E0: 0.101, ELEV: 440.0, ES0: 0.088, ET0: 0.11699999999999999, - IRRAD: 5574000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.4, - TMAX: 15.9, TMIN: 8.9, VAP: 12.58, WIND: 1.221154268618878} -- {DAY: 2010-09-14, E0: 0.12, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.10300000000000001, - IRRAD: 5860000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.2, - TMAX: 13.8, TMIN: 8.6, VAP: 12.17, WIND: 2.370475933201351} -- {DAY: 2010-09-15, E0: 0.124, ELEV: 440.0, ES0: 0.11499999999999999, ET0: 0.132, - IRRAD: 3950000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 13.55, - TMAX: 15.2, TMIN: 11.9, VAP: 12.81, WIND: 2.801471557419779} -- {DAY: 2010-09-16, E0: 0.24100000000000002, ELEV: 440.0, ES0: 0.21600000000000003, - ET0: 0.22400000000000003, IRRAD: 10417000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, - SNOWDEPTH: .nan, TEMP: 13.149999999999999, TMAX: 16.4, TMIN: 9.9, VAP: 10.32, WIND: 2.5859737453105653} -- {DAY: 2010-09-17, E0: 0.195, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.192, - IRRAD: 11312000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, - TMAX: 15.9, TMIN: 5.1, VAP: 9.17, WIND: 1.939480308982924} -- {DAY: 2010-09-18, E0: 0.182, ELEV: 440.0, ES0: 0.152, ET0: 0.176, IRRAD: 14229000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.25, TMAX: 14.7, - TMIN: 1.8, VAP: 8.29, WIND: 1.221154268618878} -- {DAY: 2010-09-19, E0: 0.20099999999999998, ELEV: 440.0, ES0: 0.16899999999999998, - ET0: 0.186, IRRAD: 14777000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 8.75, TMAX: 15.2, TMIN: 2.3, VAP: 7.79, WIND: 1.077489060546069} -- {DAY: 2010-09-20, E0: 0.176, ELEV: 440.0, ES0: 0.143, ET0: 0.19, IRRAD: 14819000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 18.3, - TMIN: 1.3, VAP: 9.21, WIND: 1.0056564565096642} -- {DAY: 2010-09-21, E0: 0.21000000000000002, ELEV: 440.0, ES0: 0.16999999999999998, - ET0: 0.225, IRRAD: 17280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.399999999999999, TMAX: 20.9, TMIN: 3.9, VAP: 9.85, WIND: 0.9338238524732597} -- {DAY: 2010-09-22, E0: 0.215, ELEV: 440.0, ES0: 0.174, ET0: 0.23500000000000001, - IRRAD: 16698000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.45, - TMAX: 20.8, TMIN: 6.1, VAP: 10.93, WIND: 1.3648194766916872} -- {DAY: 2010-09-23, E0: 0.191, ELEV: 440.0, ES0: 0.155, ET0: 0.198, IRRAD: 14630000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.600000000000001, - TMAX: 20.6, TMIN: 6.6, VAP: 12.24, WIND: 1.077489060546069} -- {DAY: 2010-09-24, E0: 0.20299999999999999, ELEV: 440.0, ES0: 0.17099999999999999, - ET0: 0.207, IRRAD: 12696000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, - TEMP: 14.600000000000001, TMAX: 21.3, TMIN: 7.9, VAP: 12.91, WIND: 1.6521498928373055} -- {DAY: 2010-09-25, E0: 0.072, ELEV: 440.0, ES0: 0.064, ET0: 0.08299999999999999, - IRRAD: 3235000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 12.15, - TMAX: 13.3, TMIN: 11.0, VAP: 12.81, WIND: 1.8676477049465194} -- {DAY: 2010-09-26, E0: 0.118, ELEV: 440.0, ES0: 0.10700000000000001, ET0: 0.11100000000000002, - IRRAD: 5247000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.95, - TMAX: 10.9, TMIN: 7.0, VAP: 9.37, WIND: 2.5859737453105653} -- {DAY: 2010-09-27, E0: 0.181, ELEV: 440.0, ES0: 0.16, ET0: 0.153, IRRAD: 9271000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 8.95, TMAX: 12.4, - TMIN: 5.5, VAP: 9.07, WIND: 3.44796499374742} -- {DAY: 2010-09-28, E0: 0.063, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.057999999999999996, - IRRAD: 3652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 8.25, - TMAX: 9.1, TMIN: 7.4, VAP: 10.45, WIND: 3.0169693695289928} -- {DAY: 2010-09-29, E0: 0.153, ELEV: 440.0, ES0: 0.134, ET0: 0.127, IRRAD: 8714000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.9, TMAX: 12.1, - TMIN: 7.7, VAP: 9.61, WIND: 1.4366520807280918} -- {DAY: 2010-09-30, E0: 0.13999999999999999, ELEV: 440.0, ES0: 0.123, ET0: 0.11299999999999999, - IRRAD: 7718000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.2, - TMAX: 12.3, TMIN: 4.1, VAP: 8.46, WIND: 1.0056564565096642} -- {DAY: 2010-10-01, E0: 0.06, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.071, - IRRAD: 3340000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: .nan, TEMP: 7.55, - TMAX: 10.2, TMIN: 4.9, VAP: 9.54, WIND: 1.221154268618878} -- {DAY: 2010-10-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10200000000000001, - ET0: 0.099, IRRAD: 6112000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, - TEMP: 10.4, TMAX: 13.8, TMIN: 7.0, VAP: 11.16, WIND: 1.5803172888009012} -- {DAY: 2010-10-03, E0: 0.152, ELEV: 440.0, ES0: 0.128, ET0: 0.134, IRRAD: 10165000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 12.9, - TMIN: 9.6, VAP: 11.19, WIND: 3.304299785674611} -- {DAY: 2010-10-04, E0: 0.142, ELEV: 440.0, ES0: 0.118, ET0: 0.125, IRRAD: 10677000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, TMAX: 12.3, - TMIN: 8.7, VAP: 10.96, WIND: 3.735295409893039} -- {DAY: 2010-10-05, E0: 0.121, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.092, - IRRAD: 6490000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 13.2, TMIN: 9.4, VAP: 12.07, WIND: 2.154978121092138} -- {DAY: 2010-10-06, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.074, ET0: 0.077, - IRRAD: 3969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.0, - TMAX: 12.2, TMIN: 9.8, VAP: 12.0, WIND: 2.0113129130193284} -- {DAY: 2010-10-07, E0: 0.072, ELEV: 440.0, ES0: 0.065, ET0: 0.079, IRRAD: 3115000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.2, TMAX: 11.9, - TMIN: 10.5, VAP: 11.94, WIND: 2.370475933201351} -- {DAY: 2010-10-08, E0: 0.178, ELEV: 440.0, ES0: 0.148, ET0: 0.21400000000000002, - IRRAD: 12854000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.700000000000001, - TMAX: 16.1, TMIN: 7.3, VAP: 9.58, WIND: 3.663462805856634} -- {DAY: 2010-10-09, E0: 0.20400000000000001, ELEV: 440.0, ES0: 0.175, ET0: 0.23700000000000002, - IRRAD: 12656000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.600000000000001, - TMAX: 15.3, TMIN: 5.9, VAP: 7.55, WIND: 3.44796499374742} -- {DAY: 2010-10-10, E0: 0.16399999999999998, ELEV: 440.0, ES0: 0.135, ET0: 0.213, - IRRAD: 13447000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.85, - TMAX: 14.0, TMIN: 3.7, VAP: 6.58, WIND: 2.8733041614561836} -- {DAY: 2010-10-11, E0: 0.16, ELEV: 440.0, ES0: 0.131, ET0: 0.21200000000000002, IRRAD: 13109000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.9, TMAX: 14.5, - TMIN: 3.3, VAP: 6.85, WIND: 3.0169693695289928} -- {DAY: 2010-10-12, E0: 0.123, ELEV: 440.0, ES0: 0.096, ET0: 0.16299999999999998, - IRRAD: 13005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.449999999999999, - TMAX: 14.2, TMIN: 0.7, VAP: 7.32, WIND: 2.5141411412741608} -- {DAY: 2010-10-13, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.092, ET0: 0.134, - IRRAD: 11311000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.85, - TMAX: 12.1, TMIN: 1.6, VAP: 7.62, WIND: 2.8733041614561836} -- {DAY: 2010-10-14, E0: 0.073, ELEV: 440.0, ES0: 0.052000000000000005, ET0: 0.10700000000000001, - IRRAD: 10652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.5, - TMAX: 12.4, TMIN: -1.4, VAP: 7.05, WIND: 1.2929868726552827} -- {DAY: 2010-10-15, E0: 0.052000000000000005, ELEV: 440.0, ES0: 0.045, ET0: 0.05, - IRRAD: 3788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.43, SNOWDEPTH: .nan, TEMP: 4.2, - TMAX: 8.6, TMIN: -0.2, VAP: 8.19, WIND: 0.9338238524732597} -- {DAY: 2010-10-16, E0: 0.054000000000000006, ELEV: 440.0, ES0: 0.047, ET0: 0.057999999999999996, - IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.31, SNOWDEPTH: .nan, TEMP: 6.7, - TMAX: 7.5, TMIN: 5.9, VAP: 8.94, WIND: 1.1493216645824735} -- {DAY: 2010-10-17, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.076, ET0: 0.08399999999999999, - IRRAD: 3537000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 6.3, - TMAX: 7.5, TMIN: 5.1, VAP: 7.72, WIND: 2.442308537237756} -- {DAY: 2010-10-18, E0: 0.08499999999999999, ELEV: 440.0, ES0: 0.075, ET0: 0.074, - IRRAD: 5197000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.9, - TMAX: 7.5, TMIN: 2.3, VAP: 7.05, WIND: 1.3648194766916872} -- {DAY: 2010-10-19, E0: 0.061, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.06999999999999999, - IRRAD: 3878000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 4.95, - TMAX: 7.2, TMIN: 2.7, VAP: 7.55, WIND: 2.5859737453105653} -- {DAY: 2010-10-20, E0: 0.068, ELEV: 440.0, ES0: 0.062, ET0: 0.072, IRRAD: 3005000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.52, SNOWDEPTH: .nan, TEMP: 5.449999999999999, - TMAX: 6.6, TMIN: 4.3, VAP: 7.72, WIND: 3.0169693695289928} -- {DAY: 2010-10-21, E0: 0.099, ELEV: 440.0, ES0: 0.089, ET0: 0.10200000000000001, - IRRAD: 5320000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 3.75, - TMAX: 6.1, TMIN: 1.4, VAP: 5.87, WIND: 2.8733041614561836} -- {DAY: 2010-10-22, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.04, ET0: 0.073, IRRAD: 8983000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.1, TMAX: 6.9, - TMIN: -2.7, VAP: 5.7, WIND: 1.5084846847644964} -- {DAY: 2010-10-23, E0: 0.037, ELEV: 440.0, ES0: 0.025, ET0: 0.06, IRRAD: 6012000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.21000000000000002, SNOWDEPTH: .nan, TEMP: 3.6999999999999997, - TMAX: 9.6, TMIN: -2.2, VAP: 7.35, WIND: 1.6521498928373055} -- {DAY: 2010-10-24, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.049, ET0: 0.066, - IRRAD: 2853000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 6.35, - TMAX: 7.6, TMIN: 5.1, VAP: 8.36, WIND: 2.370475933201351} -- {DAY: 2010-10-25, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.05, ET0: 0.05600000000000001, - IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 3.8, - TMAX: 5.6, TMIN: 2.0, VAP: 6.78, WIND: 1.1493216645824735} -- {DAY: 2010-10-26, E0: 0.051000000000000004, ELEV: 440.0, ES0: 0.040999999999999995, - ET0: 0.06, IRRAD: 5809000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, - TEMP: 2.4, TMAX: 6.8, TMIN: -2.0, VAP: 6.07, WIND: 1.1493216645824735} -- {DAY: 2010-10-27, E0: 0.047, ELEV: 440.0, ES0: 0.031, ET0: 0.061, IRRAD: 9014000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.5, TMAX: 8.1, - TMIN: -3.1, VAP: 5.87, WIND: 1.1493216645824735} -- {DAY: 2010-10-28, E0: 0.071, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.08399999999999999, - IRRAD: 7497000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.3999999999999995, - TMAX: 10.6, TMIN: 0.2, VAP: 6.58, WIND: 1.4366520807280918} -- {DAY: 2010-10-29, E0: 0.032, ELEV: 440.0, ES0: 0.012, ET0: 0.087, IRRAD: 9759000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.65, TMAX: 14.4, - TMIN: -1.1, VAP: 6.78, WIND: 1.077489060546069} -- {DAY: 2010-10-30, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.018, ET0: 0.075, - IRRAD: 8668000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.8500000000000005, - TMAX: 11.9, TMIN: -0.2, VAP: 7.01, WIND: 1.3648194766916872} -- {DAY: 2010-10-31, E0: 0.046, ELEV: 440.0, ES0: 0.033, ET0: 0.06899999999999999, - IRRAD: 6399000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.6499999999999995, - TMAX: 11.6, TMIN: 1.7, VAP: 8.06, WIND: 1.72398249687371} -- {DAY: 2010-11-01, E0: 0.073, ELEV: 440.0, ES0: 0.061, ET0: 0.071, IRRAD: 5266000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 14.3, - TMIN: 5.3, VAP: 9.64, WIND: 1.077489060546069} -- {DAY: 2010-11-02, E0: 0.019, ELEV: 440.0, ES0: 0.012, ET0: 0.04, IRRAD: 3367000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 5.45, TMAX: 8.3, - TMIN: 2.6, VAP: 8.87, WIND: 1.8676477049465194} -- {DAY: 2010-11-03, E0: 0.062, ELEV: 440.0, ES0: 0.054000000000000006, ET0: 0.074, - IRRAD: 3638000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 8.4, - TMAX: 11.8, TMIN: 5.0, VAP: 9.74, WIND: 3.1606345776018023} -- {DAY: 2010-11-04, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.11000000000000001, - ET0: 0.141, IRRAD: 1972000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.9, TMAX: 15.4, TMIN: 10.4, VAP: 11.9, WIND: 4.597286658329894} -- {DAY: 2010-11-05, E0: 0.154, ELEV: 440.0, ES0: 0.144, ET0: 0.177, IRRAD: 4424000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.5, TMAX: 14.7, - TMIN: 12.3, VAP: 10.86, WIND: 4.166291034111466} -- {DAY: 2010-11-06, E0: 0.10800000000000001, ELEV: 440.0, ES0: 0.10400000000000001, - ET0: 0.146, IRRAD: 1597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, - TEMP: 11.5, TMAX: 12.3, TMIN: 10.7, VAP: 9.88, WIND: 3.519797597783825} -- {DAY: 2010-11-07, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.03, ET0: 0.056999999999999995, - IRRAD: 1958000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 8.149999999999999, - TMAX: 10.2, TMIN: 6.1, VAP: 9.68, WIND: 1.5803172888009012} -- {DAY: 2010-11-08, E0: 0.037, ELEV: 440.0, ES0: 0.033, ET0: 0.045, IRRAD: 2280000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 4.6, TMAX: 5.6, - TMIN: 3.6, VAP: 7.62, WIND: 1.5084846847644964} -- {DAY: 2010-11-09, E0: 0.032, ELEV: 440.0, ES0: 0.020999999999999998, ET0: 0.048, - IRRAD: 5597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.0, - TMAX: 8.1, TMIN: 1.9, VAP: 7.28, WIND: 1.5084846847644964} -- {DAY: 2010-11-10, E0: 0.032, ELEV: 440.0, ES0: 0.026000000000000002, ET0: 0.03, - IRRAD: 3253000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 2.6999999999999997, - TMAX: 5.8, TMIN: -0.4, VAP: 7.18, WIND: 1.221154268618878} -- {DAY: 2010-11-11, E0: 0.046, ELEV: 440.0, ES0: 0.039, ET0: 0.05500000000000001, - IRRAD: 3562000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.01, SNOWDEPTH: .nan, TEMP: 4.0, - TMAX: 6.3, TMIN: 1.7, VAP: 7.11, WIND: 3.663462805856634} -- {DAY: 2010-11-12, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.02, ET0: 0.040999999999999995, - IRRAD: 3632000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 6.8, - TMAX: 10.0, TMIN: 3.6, VAP: 9.44, WIND: 4.956449678511917} -- {DAY: 2010-11-13, E0: 0.101, ELEV: 440.0, ES0: 0.092, ET0: 0.149, IRRAD: 4082000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.6, TMAX: 16.2, - TMIN: 9.0, VAP: 11.03, WIND: 4.094458430075062} -- {DAY: 2010-11-14, E0: 0.009, ELEV: 440.0, ES0: 0.004, ET0: 0.081, IRRAD: 7485000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 16.8, - TMIN: 5.7, VAP: 9.74, WIND: 1.6521498928373055} -- {DAY: 2010-11-15, E0: 0.040999999999999995, ELEV: 440.0, ES0: 0.032, ET0: 0.06, - IRRAD: 4089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: .nan, TEMP: 8.45, - TMAX: 12.2, TMIN: 4.7, VAP: 9.71, WIND: 2.083145517055733} -- {DAY: 2010-11-16, E0: 0.02, ELEV: 440.0, ES0: 0.018, ET0: 0.047, IRRAD: 1177000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.13, SNOWDEPTH: .nan, TEMP: 5.9, TMAX: 6.0, - TMIN: 5.8, VAP: 8.53, WIND: 2.298643329164947} -- {DAY: 2010-11-17, E0: 0.013000000000000001, ELEV: 440.0, ES0: 0.011, ET0: 0.033, - IRRAD: 1433000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 4.4, - TMAX: 5.2, TMIN: 3.6, VAP: 8.03, WIND: 1.7958151009101146} -- {DAY: 2010-11-18, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.040999999999999995, - IRRAD: 1288000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 4.800000000000001, - TMAX: 4.9, TMIN: 4.7, VAP: 7.89, WIND: 1.5803172888009012} -- {DAY: 2010-11-19, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.03, - IRRAD: 1611000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 3.1500000000000004, - TMAX: 4.9, TMIN: 1.4, VAP: 7.42, WIND: 1.0056564565096642} -- {DAY: 2010-11-20, E0: 0.024, ELEV: 440.0, ES0: 0.019, ET0: 0.03, IRRAD: 2629000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.95, TMAX: 4.3, - TMIN: 1.6, VAP: 6.88, WIND: 1.5084846847644964} -- {DAY: 2010-11-21, E0: 0.025, ELEV: 440.0, ES0: 0.02, ET0: 0.022, IRRAD: 2790000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 2.75, TMAX: 4.2, - TMIN: 1.3, VAP: 7.18, WIND: 3.376132389711016} -- {DAY: 2010-11-22, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.052000000000000005, - ET0: 0.056999999999999995, IRRAD: 1810000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, - SNOWDEPTH: .nan, TEMP: 5.4, TMAX: 7.0, TMIN: 3.8, VAP: 7.79, WIND: 2.8733041614561836} -- {DAY: 2010-11-23, E0: 0.033, ELEV: 440.0, ES0: 0.031, ET0: 0.036, IRRAD: 1270000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.18, SNOWDEPTH: 0.5, TEMP: 0.8500000000000001, - TMAX: 1.3, TMIN: 0.4, VAP: 6.0, WIND: 3.735295409893039} -- {DAY: 2010-11-24, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.032, ET0: 0.034, - IRRAD: 1628000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.12, SNOWDEPTH: 4.0, TEMP: 1.2, - TMAX: 1.9, TMIN: 0.5, VAP: 6.14, WIND: 3.878960617965848} -- {DAY: 2010-11-25, E0: 0.022, ELEV: 440.0, ES0: 0.016, ET0: 0.03, IRRAD: 3374000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 1.0, TEMP: 0.7499999999999999, - TMAX: 2.3, TMIN: -0.8, VAP: 5.66, WIND: 1.8676477049465194} -- {DAY: 2010-11-26, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.024, - IRRAD: 1677000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 2.0, TEMP: -1.3, - TMAX: -0.2, TMIN: -2.4, VAP: 5.23, WIND: 1.221154268618878} -- {DAY: 2010-11-27, E0: 0.024, ELEV: 440.0, ES0: 0.018, ET0: 0.026000000000000002, - IRRAD: 3588000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 2.0, TEMP: -2.0, - TMAX: -0.4, TMIN: -3.6, VAP: 4.28, WIND: 1.221154268618878} -- {DAY: 2010-11-28, E0: 0.024, ELEV: 440.0, ES0: 0.02, ET0: 0.013000000000000001, - IRRAD: 3194000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 2.0, TEMP: -3.85, - TMAX: -1.5, TMIN: -6.2, VAP: 4.35, WIND: 2.370475933201351} -- {DAY: 2010-11-29, E0: 0.028000000000000004, ELEV: 440.0, ES0: 0.024, ET0: 0.019, - IRRAD: 2553000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 16.0, TEMP: -1.95, - TMAX: -1.0, TMIN: -2.9, VAP: 4.96, WIND: 1.5803172888009012} -- {DAY: 2010-11-30, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.024, ET0: 0.03, - IRRAD: 2146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 19.0, TEMP: -3.8000000000000003, - TMAX: -3.2, TMIN: -4.4, VAP: 3.98, WIND: 2.370475933201351} -- {DAY: 2010-12-01, E0: 0.03, ELEV: 440.0, ES0: 0.028000000000000004, ET0: 0.036, - IRRAD: 1406000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 20.0, TEMP: -6.0, - TMAX: -4.8, TMIN: -7.2, VAP: 3.37, WIND: 4.453621450257085} -- {DAY: 2010-12-02, E0: 0.023, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, - IRRAD: 3010000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -7.95, - TMAX: -5.5, TMIN: -10.4, VAP: 2.87, WIND: 1.939480308982924} -- {DAY: 2010-12-03, E0: 0.019, ELEV: 440.0, ES0: 0.015, ET0: 0.015, IRRAD: 2926000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.100000000000001, - TMAX: -5.4, TMIN: -10.8, VAP: 2.83, WIND: 0.7901586444004506} -- {DAY: 2010-12-04, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.015, - IRRAD: 1788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.6, - TMAX: -5.1, TMIN: -12.1, VAP: 3.14, WIND: 2.0113129130193284} -- {DAY: 2010-12-05, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.01, - IRRAD: 2315000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: 18.0, TEMP: -7.35, - TMAX: -3.7, TMIN: -11.0, VAP: 3.61, WIND: 1.939480308982924} -- {DAY: 2010-12-06, E0: 0.008, ELEV: 440.0, ES0: 0.006, ET0: 0.017, IRRAD: 1609000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.0, SNOWDEPTH: 23.0, TEMP: -1.9999999999999998, - TMAX: 0.1, TMIN: -4.1, VAP: 5.26, WIND: 1.1493216645824735} -- {DAY: 2010-12-07, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.019, IRRAD: 1671000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 25.0, TEMP: 0.0, TMAX: 1.5, - TMIN: -1.5, VAP: 5.93, WIND: 1.0056564565096642} -- {DAY: 2010-12-08, E0: 0.02, ELEV: 440.0, ES0: 0.016, ET0: 0.022, IRRAD: 1933000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 21.0, TEMP: 2.6500000000000004, - TMAX: 4.9, TMIN: 0.4, VAP: 7.11, WIND: 1.5803172888009012} -- {DAY: 2010-12-09, E0: 0.020999999999999998, ELEV: 440.0, ES0: 0.018, ET0: 0.024, - IRRAD: 1529000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: 14.0, TEMP: -2.0, - TMAX: -1.2, TMIN: -2.8, VAP: 4.92, WIND: 4.597286658329894} -- {DAY: 2010-12-10, E0: 0.018, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.028999999999999998, - IRRAD: 3723000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: 14.0, - TEMP: -2.45, TMAX: -2.0, TMIN: -2.9, VAP: 4.28, WIND: 3.0888019735653973} -- {DAY: 2010-12-11, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, - IRRAD: 1355000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: 16.0, TEMP: -0.30000000000000004, - TMAX: 2.3, TMIN: -2.9, VAP: 6.07, WIND: 4.453621450257085} -- {DAY: 2010-12-12, E0: 0.039, ELEV: 440.0, ES0: 0.036, ET0: 0.043, IRRAD: 1668000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.24, SNOWDEPTH: 9.0, TEMP: 1.0499999999999998, - TMAX: 1.4, TMIN: 0.7, VAP: 5.8, WIND: 3.807128013929443} -- {DAY: 2010-12-13, E0: 0.006, ELEV: 440.0, ES0: 0.003, ET0: 0.022, IRRAD: 4070000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 9.0, TEMP: -5.9, TMAX: -5.6, - TMIN: -6.2, VAP: 3.17, WIND: 2.5141411412741608} -- {DAY: 2010-12-14, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.008, - IRRAD: 2280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: 9.0, TEMP: -8.25, - TMAX: -5.4, TMIN: -11.1, VAP: 3.27, WIND: 2.083145517055733} -- {DAY: 2010-12-15, E0: 0.022, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, - IRRAD: 1877000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 9.0, TEMP: -6.65, - TMAX: -6.3, TMIN: -7.0, VAP: 3.34, WIND: 2.801471557419779} -- {DAY: 2010-12-16, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.01, IRRAD: 3137000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 11.0, TEMP: -9.1, - TMAX: -6.2, TMIN: -12.0, VAP: 2.8, WIND: 2.154978121092138} -- {DAY: 2010-12-17, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.016, IRRAD: 1541000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 13.0, TEMP: -7.25, TMAX: -4.9, - TMIN: -9.6, VAP: 3.41, WIND: 1.939480308982924} -- {DAY: 2010-12-18, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, - IRRAD: 3633000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -7.3, - TMAX: -4.1, TMIN: -10.5, VAP: 3.03, WIND: 1.5084846847644964} -- {DAY: 2010-12-19, E0: 0.006, ELEV: 440.0, ES0: 0.004, ET0: 0.009, IRRAD: 1737000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.29, SNOWDEPTH: 13.0, TEMP: -6.75, TMAX: -0.6, - TMIN: -12.9, VAP: 4.01, WIND: 2.154978121092138} -- {DAY: 2010-12-20, E0: 0.036, ELEV: 440.0, ES0: 0.033, ET0: 0.048, IRRAD: 1538000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.41, SNOWDEPTH: 13.0, TEMP: 0.7, TMAX: 2.9, - TMIN: -1.5, VAP: 5.4, WIND: 2.65780634934697} -- {DAY: 2010-12-21, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.018, - IRRAD: 2103000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 13.0, TEMP: -0.19999999999999996, - TMAX: 3.5, TMIN: -3.9, VAP: 5.8, WIND: 1.2929868726552827} -- {DAY: 2010-12-22, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.014000000000000002, - IRRAD: 2105000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -0.44999999999999996, - TMAX: 1.5, TMIN: -2.4, VAP: 5.66, WIND: 1.221154268618878} -- {DAY: 2010-12-23, E0: 0.019, ELEV: 440.0, ES0: 0.016, ET0: 0.014000000000000002, - IRRAD: 2239000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 12.0, TEMP: -0.5, - TMAX: 2.1, TMIN: -3.1, VAP: 5.66, WIND: 1.2929868726552827} -- {DAY: 2010-12-24, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.028999999999999998, - IRRAD: 1140000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: 13.0, TEMP: 0.3, - TMAX: 1.5, TMIN: -0.9, VAP: 5.8, WIND: 2.442308537237756} -- {DAY: 2010-12-25, E0: 0.034, ELEV: 440.0, ES0: 0.032, ET0: 0.031, IRRAD: 2108000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 16.0, TEMP: -4.65, TMAX: -4.5, - TMIN: -4.8, VAP: 3.57, WIND: 2.298643329164947} -- {DAY: 2010-12-26, E0: 0.012, ELEV: 440.0, ES0: 0.009, ET0: 0.012, IRRAD: 2899000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: 16.0, TEMP: -9.95, TMAX: -7.9, - TMIN: -12.0, VAP: 2.6, WIND: 1.6521498928373055} -- {DAY: 2010-12-27, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.017, IRRAD: 1694000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: 16.0, TEMP: -6.5, TMAX: -4.2, - TMIN: -8.8, VAP: 3.54, WIND: 1.72398249687371} -- {DAY: 2010-12-28, E0: 0.016, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.023, - IRRAD: 3146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 16.0, TEMP: -4.65, - TMAX: -2.7, TMIN: -6.6, VAP: 3.41, WIND: 1.4366520807280918} -- {DAY: 2010-12-29, E0: 0.004, ELEV: 440.0, ES0: 0.004, ET0: 0.006, IRRAD: 3716000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 15.0, TEMP: -11.35, TMAX: -8.7, - TMIN: -14.0, VAP: 2.09, WIND: 0.6464934363276413} -- {DAY: 2010-12-30, E0: 0.0, ELEV: 440.0, ES0: 0.0, ET0: 0.0, IRRAD: 5266000.0, LAT: 49.43613, - LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -13.5, TMAX: -8.4, TMIN: -18.6, - VAP: 1.89, WIND: 0.6464934363276413} -- {DAY: 2010-12-31, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.002, - IRRAD: 1689000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 22.0, TEMP: -9.15, - TMAX: -3.4, TMIN: -14.9, VAP: 3.91, WIND: 1.72398249687371} diff --git a/docs/notebooks/test_rootdynamics_wofost72_01.yaml b/docs/notebooks/test_rootdynamics_wofost72_01.yaml deleted file mode 100644 index b0fc306..0000000 --- a/docs/notebooks/test_rootdynamics_wofost72_01.yaml +++ /dev/null @@ -1,1333 +0,0 @@ -# Test file for testing the simulation of root dynamics in WOFOST 7.1 -# encoding: UTF-8 -# -# All parameter and variable names and their respective units refer to the -# WOFOST manual available from http://wageningenur.nl/wofost -# -# Test file generated with PCSE 5.3.3: https://doi.org/10.5281/zenodo.1252479 -# -# crop: Sugar beets -# latitude: 49.43613 -# longitude: 12.98528 -# -# Wageningen-UR 2018, allard.dewit@wur.nl -AgroManagement: -- 2010-04-16: - CropCalendar: {crop_end_date: 2010-12-31, crop_end_type: harvest, crop_name: Sugar - beets, crop_start_date: 2010-04-16, crop_start_type: sowing, max_duration: 260, - variety_name: Sugar beets_95118_2010} - StateEvents: null - TimedEvents: null -ExternalStates: -- {DAY: 2010-04-16, DMI: 0.0, DVS: -0.1, FR: 0.2} -- {DAY: 2010-04-17, DMI: 0.0, DVS: -0.09294444444444445, FR: 0.2} -- {DAY: 2010-04-18, DMI: 0.0, DVS: -0.08805555555555557, FR: 0.2} -- {DAY: 2010-04-19, DMI: 0.0, DVS: -0.08200000000000002, FR: 0.2} -- {DAY: 2010-04-20, DMI: 0.0, DVS: -0.07333333333333335, FR: 0.2} -- {DAY: 2010-04-21, DMI: 0.0, DVS: -0.06500000000000002, FR: 0.2} -- {DAY: 2010-04-22, DMI: 0.0, DVS: -0.05994444444444446, FR: 0.2} -- {DAY: 2010-04-23, DMI: 0.0, DVS: -0.057777777777777796, FR: 0.2} -- {DAY: 2010-04-24, DMI: 0.0, DVS: -0.05333333333333335, FR: 0.2} -- {DAY: 2010-04-25, DMI: 0.0, DVS: -0.04600000000000001, FR: 0.2} -- {DAY: 2010-04-26, DMI: 0.0, DVS: -0.03472222222222224, FR: 0.2} -- {DAY: 2010-04-27, DMI: 0.0, DVS: -0.025000000000000015, FR: 0.2} -- {DAY: 2010-04-28, DMI: 0.0, DVS: -0.016722222222222236, FR: 0.2} -- {DAY: 2010-04-29, DMI: 0.0, DVS: -0.007555555555555569, FR: 0.2} -- {DAY: 2010-04-30, DMI: 0.07918267520466496, DVS: 0.0, FR: 0.2} -- {DAY: 2010-05-01, DMI: 0.08726971722826227, DVS: 0.030023923444976078, FR: 0.20296939902203062} -- {DAY: 2010-05-02, DMI: 0.07599939501067457, DVS: 0.05741626794258373, FR: 0.20567853199432148} -- {DAY: 2010-05-03, DMI: 0.08716102723451649, DVS: 0.07882775119617225, FR: 0.20779615121720385} -- {DAY: 2010-05-04, DMI: 0.07451170148310429, DVS: 0.09868421052631579, FR: 0.20975997686524003} -- {DAY: 2010-05-05, DMI: 0.08042887914367952, DVS: 0.11220095693779905, FR: 0.2110967979389032} -- {DAY: 2010-05-06, DMI: 0.10002439907374032, DVS: 0.12212918660287082, FR: 0.21207871076292129} -- {DAY: 2010-05-07, DMI: 0.1252828824678163, DVS: 0.13732057416267943, FR: 0.21358115568641886} -- {DAY: 2010-05-08, DMI: 0.19668384398863892, DVS: 0.14760765550239235, FR: 0.21459855933540145} -- {DAY: 2010-05-09, DMI: 0.23515372471768342, DVS: 0.16363636363636364, FR: 0.21618381618381619} -- {DAY: 2010-05-10, DMI: 0.17903474589877846, DVS: 0.1812200956937799, FR: 0.21792286660707713} -- {DAY: 2010-05-11, DMI: 0.32368494050076585, DVS: 0.20107655502392344, FR: 0.21988669225511331} -- {DAY: 2010-05-12, DMI: 0.3354280756055375, DVS: 0.22799043062200958, FR: 0.2225485041274515} -- {DAY: 2010-05-13, DMI: 0.27157061517848186, DVS: 0.2508373205741627, FR: 0.22480808665019192} -- {DAY: 2010-05-14, DMI: 0.23376654027781746, DVS: 0.2674641148325359, FR: 0.22645249487354752} -- {DAY: 2010-05-15, DMI: 0.2746279226299125, DVS: 0.27763157894736845, FR: 0.22745806824754194} -- {DAY: 2010-05-16, DMI: 0.41812346760179614, DVS: 0.28791866028708135, FR: 0.22847547189652453} -- {DAY: 2010-05-17, DMI: 0.6246506480705561, DVS: 0.3013157894736842, FR: 0.22980046269519955} -- {DAY: 2010-05-18, DMI: 0.48201989533687994, DVS: 0.31830143540669853, FR: 0.23148036174351963} -- {DAY: 2010-05-19, DMI: 0.27499431137388586, DVS: 0.33337320574162677, FR: 0.23297097639202902} -- {DAY: 2010-05-20, DMI: 0.4038593993767407, DVS: 0.3407894736842105, FR: 0.23370445344129553} -- {DAY: 2010-05-21, DMI: 0.7291386908288087, DVS: 0.35633971291866023, FR: 0.2352423891897576} -- {DAY: 2010-05-22, DMI: 1.1192858105557582, DVS: 0.3809808612440191, FR: 0.23767942583732057} -- {DAY: 2010-05-23, DMI: 1.458157879673842, DVS: 0.40765550239234444, FR: 0.2403175771596824} -- {DAY: 2010-05-24, DMI: 1.7769681489209164, DVS: 0.43540669856459324, FR: 0.24306220095693779} -- {DAY: 2010-05-25, DMI: 2.0428275401894824, DVS: 0.46662679425837317, FR: 0.2461499027288501} -- {DAY: 2010-05-26, DMI: 1.5085366378707437, DVS: 0.49928229665071766, FR: 0.24937956780062043} -- {DAY: 2010-05-27, DMI: 2.0863507300881627, DVS: 0.5257177033492823, FR: 0.25199405857300594} -- {DAY: 2010-05-28, DMI: 2.7793970930557403, DVS: 0.5544258373205742, FR: 0.25483332457016666} -- {DAY: 2010-05-29, DMI: 3.7458730467863006, DVS: 0.5836124401913876, FR: 0.2577199116672801} -- {DAY: 2010-05-30, DMI: 3.030275972615202, DVS: 0.6105263157894737, FR: 0.26038172353961825} -- {DAY: 2010-05-31, DMI: 3.6134582999974127, DVS: 0.6368421052631579, FR: 0.26298438403701563} -- {DAY: 2010-06-01, DMI: 2.0663367568789845, DVS: 0.6534688995215311, FR: 0.26462879226037117} -- {DAY: 2010-06-02, DMI: 2.269307313847779, DVS: 0.6690191387559808, FR: 0.26616672800883323} -- {DAY: 2010-06-03, DMI: 2.7165093907987297, DVS: 0.6867224880382775, FR: 0.26791760870708237} -- {DAY: 2010-06-04, DMI: 8.058855574556208, DVS: 0.7076555023923445, FR: 0.26998790683001206} -- {DAY: 2010-06-05, DMI: 9.88030385538193, DVS: 0.7355263157894737, FR: 0.2727443609022556} -- {DAY: 2010-06-06, DMI: 11.598154134649121, DVS: 0.766866028708134, FR: 0.2758438929491561} -- {DAY: 2010-06-07, DMI: 11.742525745623032, DVS: 0.8037081339712919, FR: 0.2794876176455124} -- {DAY: 2010-06-08, DMI: 15.325027972719834, DVS: 0.8422248803827752, FR: 0.283296966191703} -- {DAY: 2010-06-09, DMI: 17.883301041598045, DVS: 0.8801435406698566, FR: 0.28704716336295283} -- {DAY: 2010-06-10, DMI: 20.50716723911232, DVS: 0.9232057416267944, FR: 0.2914673046251994} -- {DAY: 2010-06-11, DMI: 25.832378327177924, DVS: 0.9662679425837322, FR: 0.29625199362041466} -- {DAY: 2010-06-12, DMI: 25.5702871132837, DVS: 1.0, FR: 0.3} -- {DAY: 2010-06-13, DMI: 23.80657585627682, DVS: 1.0110266159695818, FR: 0.2889733840304182} -- {DAY: 2010-06-14, DMI: 24.605472224831853, DVS: 1.0191381495564005, FR: 0.2808618504435995} -- {DAY: 2010-06-15, DMI: 27.934618397714924, DVS: 1.0269645120405577, FR: 0.27303548795944227} -- {DAY: 2010-06-16, DMI: 33.697833224949775, DVS: 1.0346958174904943, FR: 0.26530418250950566} -- {DAY: 2010-06-17, DMI: 44.23348494354046, DVS: 1.0418567807351078, FR: 0.25814321926489214} -- {DAY: 2010-06-18, DMI: 33.22286750613776, DVS: 1.049809885931559, FR: 0.25019011406844094} -- {DAY: 2010-06-19, DMI: 46.196262672520916, DVS: 1.0582699619771865, FR: 0.24173003802281345} -- {DAY: 2010-06-20, DMI: 35.52556761812795, DVS: 1.0640367553865655, FR: 0.23596324461343443} -- {DAY: 2010-06-21, DMI: 50.385393097138405, DVS: 1.0691064638783272, FR: 0.23089353612167274} -- {DAY: 2010-06-22, DMI: 63.617447285028796, DVS: 1.0750000000000002, FR: 0.22499999999999976} -- {DAY: 2010-06-23, DMI: 74.9942295727493, DVS: 1.0811153358681878, FR: 0.21888466413181218} -- {DAY: 2010-06-24, DMI: 81.1132270602226, DVS: 1.0874841571609635, FR: 0.21251584283903646} -- {DAY: 2010-06-25, DMI: 88.63206637198206, DVS: 1.0964195183776935, FR: 0.20358048162230646} -- {DAY: 2010-06-26, DMI: 101.33906393505809, DVS: 1.10532319391635, FR: 0.19467680608365} -- {DAY: 2010-06-27, DMI: 121.41671095960774, DVS: 1.1146704689480356, FR: 0.18532953105196434} -- {DAY: 2010-06-28, DMI: 134.2416633087712, DVS: 1.124746514575412, FR: 0.17525348542458782} -- {DAY: 2010-06-29, DMI: 139.8490589466692, DVS: 1.1349493029150826, FR: 0.16505069708491735} -- {DAY: 2010-06-30, DMI: 138.51257837352458, DVS: 1.1457224334600762, FR: 0.15427756653992372} -- {DAY: 2010-07-01, DMI: 159.93087664465835, DVS: 1.15712927756654, FR: 0.14694459532862567} -- {DAY: 2010-07-02, DMI: 171.40951546159334, DVS: 1.1683460076045629, FR: 0.14213742531233017} -- {DAY: 2010-07-03, DMI: 178.07616834641388, DVS: 1.1797528517110267, FR: 0.13724877783813136} -- {DAY: 2010-07-04, DMI: 171.18873906194537, DVS: 1.1911596958174906, FR: 0.13236013036393257} -- {DAY: 2010-07-05, DMI: 169.43676898916004, DVS: 1.2025665399239545, FR: 0.12747148288973378} -- {DAY: 2010-07-06, DMI: 180.85738714403087, DVS: 1.2139733840304183, FR: 0.12258283541553498} -- {DAY: 2010-07-07, DMI: 207.11844290032522, DVS: 1.223510773130545, FR: 0.11849538294405212} -- {DAY: 2010-07-08, DMI: 228.542985066502, DVS: 1.2311787072243345, FR: 0.1152091254752852} -- {DAY: 2010-07-09, DMI: 228.45888314777966, DVS: 1.2406844106463877, FR: 0.11113525258011955} -- {DAY: 2010-07-10, DMI: 228.04238262765804, DVS: 1.2520912547528515, FR: 0.10624660510592077} -- {DAY: 2010-07-11, DMI: 230.65877733062854, DVS: 1.2634980988593154, FR: 0.10135795763172198} -- {DAY: 2010-07-12, DMI: 232.7053329053697, DVS: 1.2749049429657793, FR: 0.09646931015752318} -- {DAY: 2010-07-13, DMI: 224.31429979939352, DVS: 1.2863117870722431, FR: 0.09158066268332438} -- {DAY: 2010-07-14, DMI: 239.8000654326714, DVS: 1.297718631178707, FR: 0.09} -- {DAY: 2010-07-15, DMI: 189.31571530459587, DVS: 1.3091254752851709, FR: 0.08966201943388256} -- {DAY: 2010-07-16, DMI: 238.6802102614641, DVS: 1.3205323193916347, FR: 0.08923954372623574} -- {DAY: 2010-07-17, DMI: 186.92251304665294, DVS: 1.3319391634980986, FR: 0.08881706801858893} -- {DAY: 2010-07-18, DMI: 205.73008518017616, DVS: 1.3433460076045625, FR: 0.08839459231094213} -- {DAY: 2010-07-19, DMI: 245.791431319311, DVS: 1.3523447401774396, FR: 0.08806130591935409} -- {DAY: 2010-07-20, DMI: 255.72671543444338, DVS: 1.3613434727503166, FR: 0.08772801952776604} -- {DAY: 2010-07-21, DMI: 243.6616681427436, DVS: 1.37148288973384, FR: 0.08735248556541333} -- {DAY: 2010-07-22, DMI: 233.24798413686509, DVS: 1.382889733840304, FR: 0.08693000985776653} -- {DAY: 2010-07-23, DMI: 116.52049309055121, DVS: 1.3942965779467678, FR: 0.08650753415011972} -- {DAY: 2010-07-24, DMI: 111.80944836940988, DVS: 1.4050697084917614, FR: 0.08610852931511995} -- {DAY: 2010-07-25, DMI: 240.9295512949976, DVS: 1.4132129277566536, FR: 0.08580692860160542} -- {DAY: 2010-07-26, DMI: 217.0262717612417, DVS: 1.4202154626108996, FR: 0.08554757545885557} -- {DAY: 2010-07-27, DMI: 219.24483972040034, DVS: 1.4277566539923952, FR: 0.08526827207435574} -- {DAY: 2010-07-28, DMI: 153.03427676802764, DVS: 1.4362167300380226, FR: 0.08495493592451768} -- {DAY: 2010-07-29, DMI: 160.97274508361494, DVS: 1.4450253485424587, FR: 0.08462869079472375} -- {DAY: 2010-07-30, DMI: 187.95565260808146, DVS: 1.4536121673003801, FR: 0.08431066047035629} -- {DAY: 2010-07-31, DMI: 260.9249312233565, DVS: 1.4618821292775663, FR: 0.08400436558231236} -- {DAY: 2010-08-01, DMI: 252.56287387216008, DVS: 1.4703422053231938, FR: 0.0836910294324743} -- {DAY: 2010-08-02, DMI: 170.13680006718482, DVS: 1.4803231939163497, FR: 0.08332136318828334} -- {DAY: 2010-08-03, DMI: 173.37109486776916, DVS: 1.4905576679340937, FR: 0.08294230859503357} -- {DAY: 2010-08-04, DMI: 246.21340535433285, DVS: 1.5001584283903675, FR: 0.08258672487443083} -- {DAY: 2010-08-05, DMI: 164.69684023252935, DVS: 1.508016476552598, FR: 0.08229568605360749} -- {DAY: 2010-08-06, DMI: 70.70451455460315, DVS: 1.5157477820025347, FR: 0.08200934140731353} -- {DAY: 2010-08-07, DMI: 97.16967218324102, DVS: 1.5236692015209123, FR: 0.08171595549922547} -- {DAY: 2010-08-08, DMI: 226.65481269751402, DVS: 1.531780735107731, FR: 0.0814155283293433} -- {DAY: 2010-08-09, DMI: 220.2851914363175, DVS: 1.5401774397972114, FR: 0.08110453926676994} -- {DAY: 2010-08-10, DMI: 223.66321432701545, DVS: 1.54946134347275, FR: 0.08076069098249075} -- {DAY: 2010-08-11, DMI: 210.38965026974282, DVS: 1.558333333333333, FR: 0.08043209876543211} -- {DAY: 2010-08-12, DMI: 183.90829667731444, DVS: 1.5679340937896067, FR: 0.08007651504482939} -- {DAY: 2010-08-13, DMI: 101.01347523047299, DVS: 1.5777883396704686, FR: 0.0784423320659063} -- {DAY: 2010-08-14, DMI: 174.27848018697188, DVS: 1.5872623574144484, FR: 0.07654752851711033} -- {DAY: 2010-08-15, DMI: 201.837839458963, DVS: 1.596546261089987, FR: 0.07469074778200262} -- {DAY: 2010-08-16, DMI: 187.87631636108574, DVS: 1.6078580481622304, FR: 0.07242839036755393} -- {DAY: 2010-08-17, DMI: 57.144229648358795, DVS: 1.6159695817490491, FR: 0.07080608365019019} -- {DAY: 2010-08-18, DMI: 75.47449630745594, DVS: 1.622782002534854, FR: 0.0694435994930292} -- {DAY: 2010-08-19, DMI: 214.49599357376033, DVS: 1.6301964512040557, FR: 0.06796070975918887} -- {DAY: 2010-08-20, DMI: 239.61664250168837, DVS: 1.6388466413181242, FR: 0.06623067173637517} -- {DAY: 2010-08-21, DMI: 228.45784127914993, DVS: 1.647401774397972, FR: 0.06451964512040559} -- {DAY: 2010-08-22, DMI: 218.57444943895214, DVS: 1.6576996197718632, FR: 0.062460076045627366} -- {DAY: 2010-08-23, DMI: 157.56717502455717, DVS: 1.669106463878327, FR: 0.06017870722433459} -- {DAY: 2010-08-24, DMI: 139.67843001806267, DVS: 1.6796261089987325, FR: 0.058074778200253495} -- {DAY: 2010-08-25, DMI: 220.47707536720424, DVS: 1.6903992395437262, FR: 0.05592015209125477} -- {DAY: 2010-08-26, DMI: 184.47875988999735, DVS: 1.697845373891001, FR: 0.05443092522179978} -- {DAY: 2010-08-27, DMI: 145.77119865554025, DVS: 1.707636248415716, FR: 0.05247275031685682} -- {DAY: 2010-08-28, DMI: 162.00116056864348, DVS: 1.717141951837769, FR: 0.05057160963244618} -- {DAY: 2010-08-29, DMI: 174.97256591239946, DVS: 1.7241128010139415, FR: 0.0491774397972117} -- {DAY: 2010-08-30, DMI: 135.50979523831683, DVS: 1.7297845373890999, FR: 0.048043092522180024} -- {DAY: 2010-08-31, DMI: 155.32482020154353, DVS: 1.7338403041825092, FR: 0.04723193916349815} -- {DAY: 2010-09-01, DMI: 137.8830163241428, DVS: 1.738973384030418, FR: 0.046205323193916396} -- {DAY: 2010-09-02, DMI: 139.85908377176526, DVS: 1.7434093789607095, FR: 0.04531812420785811} -- {DAY: 2010-09-03, DMI: 200.2216828327037, DVS: 1.7488910012674268, FR: 0.044221799746514634} -- {DAY: 2010-09-04, DMI: 148.50441233891394, DVS: 1.7548162230671733, FR: 0.04303675538656533} -- {DAY: 2010-09-05, DMI: 211.73127018106075, DVS: 1.761248415716096, FR: 0.041750316856780816} -- {DAY: 2010-09-06, DMI: 208.10113243944386, DVS: 1.7663814955640047, FR: 0.04072370088719906} -- {DAY: 2010-09-07, DMI: 181.86887104172663, DVS: 1.7712927756653989, FR: 0.03974144486692022} -- {DAY: 2010-09-08, DMI: 144.71197597830826, DVS: 1.7755703422053228, FR: 0.038885931558935424} -- {DAY: 2010-09-09, DMI: 85.9103819334138, DVS: 1.781780735107731, FR: 0.03764385297845378} -- {DAY: 2010-09-10, DMI: 157.75894080629766, DVS: 1.7885297845373889, FR: 0.03629404309252222} -- {DAY: 2010-09-11, DMI: 195.35359993246007, DVS: 1.7956273764258552, FR: 0.03487452471482894} -- {DAY: 2010-09-12, DMI: 190.42469287847678, DVS: 1.8026299112801012, FR: 0.033474017743979755} -- {DAY: 2010-09-13, DMI: 83.2452597111574, DVS: 1.8095690747782, FR: 0.03208618504435998} -- {DAY: 2010-09-14, DMI: 87.51683471638283, DVS: 1.8155259822560201, FR: 0.030894803548795965} -- {DAY: 2010-09-15, DMI: 50.891756433182515, DVS: 1.820722433460076, FR: 0.02985551330798479} -- {DAY: 2010-09-16, DMI: 145.53202601713195, DVS: 1.8274081115335867, FR: 0.028518377693282644} -- {DAY: 2010-09-17, DMI: 152.00689205078376, DVS: 1.8338403041825093, FR: 0.02723193916349813} -- {DAY: 2010-09-18, DMI: 165.95901622008535, DVS: 1.838593155893536, FR: 0.02628136882129279} -- {DAY: 2010-09-19, DMI: 164.93687349861023, DVS: 1.8419201520912547, FR: 0.025615969581749047} -- {DAY: 2010-09-20, DMI: 171.33432675770277, DVS: 1.8455640050697084, FR: 0.024887198986058304} -- {DAY: 2010-09-21, DMI: 171.56439186872714, DVS: 1.849873257287706, FR: 0.02402534854245881} -- {DAY: 2010-09-22, DMI: 165.44052536645825, DVS: 1.855830164765526, FR: 0.02283396704689479} -- {DAY: 2010-09-23, DMI: 162.36996607999322, DVS: 1.8624524714828898, FR: 0.02150950570342202} -- {DAY: 2010-09-24, DMI: 148.92828831269958, DVS: 1.869169835234474, FR: 0.020166032953105165} -- {DAY: 2010-09-25, DMI: 37.562186909332446, DVS: 1.8765209125475286, FR: 0.01869581749049426} -- {DAY: 2010-09-26, DMI: 71.76070344456296, DVS: 1.8823193916349812, FR: 0.017536121673003745} -- {DAY: 2010-09-27, DMI: 119.83066354950572, DVS: 1.886089987325729, FR: 0.016782002534854165} -- {DAY: 2010-09-28, DMI: 45.38394085732656, DVS: 1.889860583016477, FR: 0.016027883396704593} -- {DAY: 2010-09-29, DMI: 111.24582066792776, DVS: 1.8931875792141957, FR: 0.01536248415716085} -- {DAY: 2010-09-30, DMI: 102.57360858647225, DVS: 1.8975602027883403, FR: 0.01448795944233193} -- {DAY: 2010-10-01, DMI: 41.372646898356045, DVS: 1.9008555133079854, FR: 0.013828897338402896} -- {DAY: 2010-10-02, DMI: 80.91736117849351, DVS: 1.903738910012675, FR: 0.013252217997464996} -- {DAY: 2010-10-03, DMI: 120.10552952390906, DVS: 1.9084283903675545, FR: 0.012314321926489083} -- {DAY: 2010-10-04, DMI: 119.58127886909577, DVS: 1.9136565272496837, FR: 0.01126869455006324} -- {DAY: 2010-10-05, DMI: 83.29021681249708, DVS: 1.9184093789607104, FR: 0.010318124207857896} -- {DAY: 2010-10-06, DMI: 46.99996747465517, DVS: 1.9236692015209131, FR: 0.010458650190114152} -- {DAY: 2010-10-07, DMI: 33.33794821238907, DVS: 1.9287389100126748, FR: 0.011092363751584362} -- {DAY: 2010-10-08, DMI: 123.22416585344278, DVS: 1.9339353612167307, FR: 0.011741920152091346} -- {DAY: 2010-10-09, DMI: 120.97251477717472, DVS: 1.9394486692015216, FR: 0.012431083650190206} -- {DAY: 2010-10-10, DMI: 114.12156421384698, DVS: 1.9442648922686951, FR: 0.0130331115335869} -- {DAY: 2010-10-11, DMI: 114.27101612821554, DVS: 1.947972116603296, FR: 0.013496514575411999} -- {DAY: 2010-10-12, DMI: 109.57321942208434, DVS: 1.9517110266159703, FR: 0.013963878326996292} -- {DAY: 2010-10-13, DMI: 101.68273575543198, DVS: 1.9545310519645127, FR: 0.014316381495564095} -- {DAY: 2010-10-14, DMI: 96.70490679279165, DVS: 1.956970849176173, FR: 0.014621356147021633} -- {DAY: 2010-10-15, DMI: 19.833516519695102, DVS: 1.9585551330798485, FR: 0.014819391634981069} -- {DAY: 2010-10-16, DMI: 14.818846461309908, DVS: 1.9593155893536127, FR: 0.014914448669201594} -- {DAY: 2010-10-17, DMI: 20.277267971517908, DVS: 1.9616603295310526, FR: 0.015207541191381582} -- {DAY: 2010-10-18, DMI: 25.774029148179505, DVS: 1.9637515842839044, FR: 0.015468948035488053} -- {DAY: 2010-10-19, DMI: 23.62884205666545, DVS: 1.9649556400506978, FR: 0.015619455006337227} -- {DAY: 2010-10-20, DMI: 22.42823986696576, DVS: 1.9661913814955647, FR: 0.015773922686945593} -- {DAY: 2010-10-21, DMI: 33.199168318700075, DVS: 1.9677439797211667, FR: 0.015967997465145836} -- {DAY: 2010-10-22, DMI: 25.831124631818263, DVS: 1.9682192648922694, FR: 0.016027408111533678} -- {DAY: 2010-10-23, DMI: 22.152311964952556, DVS: 1.9682192648922694, FR: 0.016027408111533678} -- {DAY: 2010-10-24, DMI: 6.263521247460609, DVS: 1.9686628643852986, FR: 0.016082858048162327} -- {DAY: 2010-10-25, DMI: 3.6792725931398476, DVS: 1.970785804816224, FR: 0.01634822560202799} -- {DAY: 2010-10-26, DMI: 0.0, DVS: 1.9712927756654002, FR: 0.016411596958175026} -- {DAY: 2010-10-27, DMI: 0.0, DVS: 1.9712927756654002, FR: 0.016411596958175026} -- {DAY: 2010-10-28, DMI: 0.0, DVS: 1.9712927756654002, FR: 0.016411596958175026} -- {DAY: 2010-10-29, DMI: 0.0, DVS: 1.9728136882129288, FR: 0.016601711026616103} -- {DAY: 2010-10-30, DMI: 0.0, DVS: 1.9751267427122952, FR: 0.0168908428390369} -- {DAY: 2010-10-31, DMI: 0.0, DVS: 1.9769328263624852, FR: 0.01711660329531066} -- {DAY: 2010-11-01, DMI: 0.0, DVS: 1.9792458808618516, FR: 0.017405735107731454} -- {DAY: 2010-11-02, DMI: 0.0, DVS: 1.983555133079849, FR: 0.01794439163498114} -- {DAY: 2010-11-03, DMI: 19.981638149523437, DVS: 1.985107731305451, FR: 0.018138466413181384} -- {DAY: 2010-11-04, DMI: 10.42239831190848, DVS: 1.9885297845373902, FR: 0.018566223067173773} -- {DAY: 2010-11-05, DMI: 46.401100234993315, DVS: 1.9948035487959452, FR: 0.019350443599493155} -- {DAY: 2010-11-06, DMI: 5.958636116129116, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-07, DMI: 15.565850759510647, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-08, DMI: 15.35644728183427, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-09, DMI: 44.141119653731295, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-10, DMI: 14.924786629292004, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-11, DMI: 24.2269545627343, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-12, DMI: 38.25329265996589, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-13, DMI: 42.91869133316397, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-14, DMI: 68.45886959252344, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-15, DMI: 46.2545138561688, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-16, DMI: 3.8934257353592074, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-17, DMI: 6.277629532229549, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-18, DMI: 4.541383789475789, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-19, DMI: 4.880876338731813, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-20, DMI: 3.2692377525679994, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-21, DMI: 0.8535068016025563, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-22, DMI: 13.004138914618522, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-23, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-24, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-25, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-26, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-27, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-28, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-29, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-11-30, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-01, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-02, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-03, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-04, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-05, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-06, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-07, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-08, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-09, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-10, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-11, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-12, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-13, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-14, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-15, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-16, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-17, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-18, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-19, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-20, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-21, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-22, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-23, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-24, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-25, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-26, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-27, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-28, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-29, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-30, DMI: 0.0, DVS: 2.0, FR: 0.02} -- {DAY: 2010-12-31, DMI: 0.0, DVS: 2.0, FR: 0.02} -ModelParameters: - IAIRDU: 0.0 - RDI: 10.0 - RDMCR: 120.0 - RDMSOL: 120 - RDRRTB: [0.0, 0.0, 1.5, 0.0, 1.5001, 0.02, 2.0, 0.02, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - RRI: 1.2 - TDWI: 0.51 -ModelResults: -- {DAY: 2010-04-16, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-17, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-18, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-19, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-20, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-21, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-22, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-23, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-24, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-25, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-26, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-27, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-28, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-29, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-04-30, RD: 10.0, TWRT: 0.10200000000000001} -- {DAY: 2010-05-01, RD: 11.2, TWRT: 0.117836535040933} -- {DAY: 2010-05-02, RD: 12.399999999999999, TWRT: 0.13554961709957594} -- {DAY: 2010-05-03, RD: 13.599999999999998, TWRT: 0.15118106109782806} -- {DAY: 2010-05-04, RD: 14.799999999999997, TWRT: 0.16929278709329848} -- {DAY: 2010-05-05, RD: 15.999999999999996, TWRT: 0.1849223598725841} -- {DAY: 2010-05-06, RD: 17.199999999999996, TWRT: 0.2019006387216299} -- {DAY: 2010-05-07, RD: 18.399999999999995, TWRT: 0.22311368432202466} -- {DAY: 2010-05-08, RD: 19.599999999999994, TWRT: 0.24987174714722665} -- {DAY: 2010-05-09, RD: 20.799999999999994, TWRT: 0.29207981671173744} -- {DAY: 2010-05-10, RD: 21.999999999999993, TWRT: 0.34291624631104484} -- {DAY: 2010-05-11, RD: 23.199999999999992, TWRT: 0.3819320113595763} -- {DAY: 2010-05-12, RD: 24.39999999999999, TWRT: 0.4531060222590828} -- {DAY: 2010-05-13, RD: 25.59999999999999, TWRT: 0.5277550387274449} -- {DAY: 2010-05-14, RD: 26.79999999999999, TWRT: 0.588806309116135} -- {DAY: 2010-05-15, RD: 27.99999999999999, TWRT: 0.6417433253800043} -- {DAY: 2010-05-16, RD: 29.19999999999999, TWRT: 0.7042096621482397} -- {DAY: 2010-05-17, RD: 30.399999999999988, TWRT: 0.7997406187195713} -- {DAY: 2010-05-18, RD: 31.599999999999987, TWRT: 0.9432856266690413} -- {DAY: 2010-05-19, RD: 32.79999999999999, TWRT: 1.0548637664091958} -- {DAY: 2010-05-20, RD: 33.99999999999999, TWRT: 1.1189294596322237} -- {DAY: 2010-05-21, RD: 35.199999999999996, TWRT: 1.2133131998306947} -- {DAY: 2010-05-22, RD: 36.4, TWRT: 1.3848375275119558} -- {DAY: 2010-05-23, RD: 37.6, TWRT: 1.6508687363127084} -- {DAY: 2010-05-24, RD: 38.800000000000004, TWRT: 2.001289705072226} -- {DAY: 2010-05-25, RD: 40.00000000000001, TWRT: 2.4332034943793195} -- {DAY: 2010-05-26, RD: 41.20000000000001, TWRT: 2.9360452946887765} -- {DAY: 2010-05-27, RD: 42.40000000000001, TWRT: 3.3122435094523834} -- {DAY: 2010-05-28, RD: 43.600000000000016, TWRT: 3.8379914975340537} -- {DAY: 2010-05-29, RD: 44.80000000000002, TWRT: 4.5462744990581045} -- {DAY: 2010-05-30, RD: 46.00000000000002, TWRT: 5.511660569792715} -- {DAY: 2010-05-31, RD: 47.200000000000024, TWRT: 6.300689050342955} -- {DAY: 2010-06-01, RD: 48.40000000000003, TWRT: 7.250972155611216} -- {DAY: 2010-06-02, RD: 49.60000000000003, TWRT: 7.797784355987314} -- {DAY: 2010-06-03, RD: 50.80000000000003, TWRT: 8.401798458560693} -- {DAY: 2010-06-04, RD: 52.000000000000036, TWRT: 9.129599158573821} -- {DAY: 2010-06-05, RD: 53.20000000000004, TWRT: 11.305392706593626} -- {DAY: 2010-06-06, RD: 54.40000000000004, TWRT: 14.000189867149862} -- {DAY: 2010-06-07, RD: 55.600000000000044, TWRT: 17.199469854675826} -- {DAY: 2010-06-08, RD: 56.80000000000005, TWRT: 20.4813604004611} -- {DAY: 2010-06-09, RD: 58.00000000000005, TWRT: 24.822894331935615} -- {DAY: 2010-06-10, RD: 59.20000000000005, TWRT: 29.956245167492074} -- {DAY: 2010-06-11, RD: 60.400000000000055, TWRT: 35.93341392817433} -- {DAY: 2010-06-12, RD: 61.60000000000006, TWRT: 43.586307507557585} -- {DAY: 2010-06-13, RD: 62.80000000000006, TWRT: 51.25739364154269} -- {DAY: 2010-06-14, RD: 64.00000000000006, TWRT: 58.13686042890785} -- {DAY: 2010-06-15, RD: 65.20000000000006, TWRT: 65.04759888901272} -- {DAY: 2010-06-16, RD: 66.40000000000006, TWRT: 72.67474105419363} -- {DAY: 2010-06-17, RD: 67.60000000000007, TWRT: 81.61491715028059} -- {DAY: 2010-06-18, RD: 68.80000000000007, TWRT: 93.03349135291126} -- {DAY: 2010-06-19, RD: 70.00000000000007, TWRT: 101.34552436395256} -- {DAY: 2010-06-20, RD: 71.20000000000007, TWRT: 112.51254869629292} -- {DAY: 2010-06-21, RD: 72.40000000000008, TWRT: 120.89527689820035} -- {DAY: 2010-06-22, RD: 73.60000000000008, TWRT: 132.52893847927916} -- {DAY: 2010-06-23, RD: 74.80000000000008, TWRT: 146.84286411841063} -- {DAY: 2010-06-24, RD: 76.00000000000009, TWRT: 163.2579508702659} -- {DAY: 2010-06-25, RD: 77.20000000000009, TWRT: 180.49579668436323} -- {DAY: 2010-06-26, RD: 78.40000000000009, TWRT: 198.53955544355156} -- {DAY: 2010-06-27, RD: 79.6000000000001, TWRT: 218.26792074193548} -- {DAY: 2010-06-28, RD: 80.8000000000001, TWRT: 240.77002284595147} -- {DAY: 2010-06-29, RD: 82.0000000000001, TWRT: 264.2963422300076} -- {DAY: 2010-06-30, RD: 83.2000000000001, TWRT: 287.3785268958251} -- {DAY: 2010-07-01, RD: 84.4000000000001, TWRT: 308.7479104224629} -- {DAY: 2010-07-02, RD: 85.60000000000011, TWRT: 332.2488883715646} -- {DAY: 2010-07-03, RD: 86.80000000000011, TWRT: 356.61259557330953} -- {DAY: 2010-07-04, RD: 88.00000000000011, TWRT: 381.05333204095217} -- {DAY: 2010-07-05, RD: 89.20000000000012, TWRT: 403.7118958600285} -- {DAY: 2010-07-06, RD: 90.40000000000012, TWRT: 425.310252059122} -- {DAY: 2010-07-07, RD: 91.60000000000012, TWRT: 447.4802633810824} -- {DAY: 2010-07-08, RD: 92.80000000000013, TWRT: 472.02284258733226} -- {DAY: 2010-07-09, RD: 94.00000000000013, TWRT: 498.3530800303551} -- {DAY: 2010-07-10, RD: 95.20000000000013, TWRT: 523.7429157131556} -- {DAY: 2010-07-11, RD: 96.40000000000013, TWRT: 547.9716446876097} -- {DAY: 2010-07-12, RD: 97.60000000000014, TWRT: 571.3507472676723} -- {DAY: 2010-07-13, RD: 98.80000000000014, TWRT: 593.7996702030301} -- {DAY: 2010-07-14, RD: 100.00000000000014, TWRT: 614.3425224280045} -- {DAY: 2010-07-15, RD: 101.20000000000014, TWRT: 635.9245283169449} -- {DAY: 2010-07-16, RD: 102.40000000000015, TWRT: 652.898957661725} -- {DAY: 2010-07-17, RD: 103.60000000000015, TWRT: 674.1986707219401} -- {DAY: 2010-07-18, RD: 104.80000000000015, TWRT: 690.8005802774102} -- {DAY: 2010-07-19, RD: 106.00000000000016, TWRT: 708.9860072830072} -- {DAY: 2010-07-20, RD: 107.20000000000016, TWRT: 730.630721708773} -- {DAY: 2010-07-21, RD: 108.40000000000016, TWRT: 753.0651199941773} -- {DAY: 2010-07-22, RD: 109.60000000000016, TWRT: 774.3495723434609} -- {DAY: 2010-07-23, RD: 110.80000000000017, TWRT: 794.6258219037827} -- {DAY: 2010-07-24, RD: 112.00000000000017, TWRT: 804.7057224390023} -- {DAY: 2010-07-25, RD: 113.20000000000017, TWRT: 814.333469601627} -- {DAY: 2010-07-26, RD: 114.40000000000018, TWRT: 835.0068944076137} -- {DAY: 2010-07-27, RD: 115.60000000000018, TWRT: 853.5729657676626} -- {DAY: 2010-07-28, RD: 116.80000000000018, TWRT: 872.2675944118403} -- {DAY: 2010-07-29, RD: 118.00000000000018, TWRT: 885.2686115889229} -- {DAY: 2010-07-30, RD: 119.20000000000019, TWRT: 898.891524258982} -- {DAY: 2010-07-31, RD: 120.0, TWRT: 914.7381894695062} -- {DAY: 2010-08-01, RD: 120.0, TWRT: 936.6570227815328} -- {DAY: 2010-08-02, RD: 120.0, TWRT: 957.794269692318} -- {DAY: 2010-08-03, RD: 120.0, TWRT: 971.9702998024082} -- {DAY: 2010-08-04, RD: 120.0, TWRT: 986.3500986543896} -- {DAY: 2010-08-05, RD: 120.0, TWRT: 1006.6840574227846} -- {DAY: 2010-08-06, RD: 120.0, TWRT: 1020.237896880582} -- {DAY: 2010-08-07, RD: 120.0, TWRT: 1026.0363275537288} -- {DAY: 2010-08-08, RD: 120.0, TWRT: 1033.9766401617287} -- {DAY: 2010-08-09, RD: 120.0, TWRT: 1052.4298614858853} -- {DAY: 2010-08-10, RD: 120.0, TWRT: 1070.29599044462} -- {DAY: 2010-08-11, RD: 120.0, TWRT: 1088.3591861810346} -- {DAY: 2010-08-12, RD: 120.0, TWRT: 1105.2812673107553} -- {DAY: 2010-08-13, RD: 120.0, TWRT: 1120.0080027965053} -- {DAY: 2010-08-14, RD: 120.0, TWRT: 1127.9317353636652} -- {DAY: 2010-08-15, RD: 120.0, TWRT: 1141.272322295696} -- {DAY: 2010-08-16, RD: 120.0, TWRT: 1156.3477414555898} -- {DAY: 2010-08-17, RD: 120.0, TWRT: 1169.9553206378087} -- {DAY: 2010-08-18, RD: 120.0, TWRT: 1174.001479742416} -- {DAY: 2010-08-19, RD: 120.0, TWRT: 1179.242700435929} -- {DAY: 2010-08-20, RD: 120.0, TWRT: 1193.8200003997042} -- {DAY: 2010-08-21, RD: 120.0, TWRT: 1209.689971591806} -- {DAY: 2010-08-22, RD: 120.0, TWRT: 1224.4299904361105} -- {DAY: 2010-08-23, RD: 120.0, TWRT: 1238.0821671696986} -- {DAY: 2010-08-24, RD: 120.0, TWRT: 1247.564356063667} -- {DAY: 2010-08-25, RD: 120.0, TWRT: 1255.6761499063255} -- {DAY: 2010-08-26, RD: 120.0, TWRT: 1268.0052614934948} -- {DAY: 2010-08-27, RD: 120.0, TWRT: 1278.0466110780776} -- {DAY: 2010-08-28, RD: 120.0, TWRT: 1285.6956267885184} -- {DAY: 2010-08-29, RD: 120.0, TWRT: 1293.888286240799} -- {DAY: 2010-08-30, RD: 120.0, TWRT: 1302.4929890671199} -- {DAY: 2010-08-31, RD: 120.0, TWRT: 1309.003298697416} -- {DAY: 2010-09-01, RD: 120.0, TWRT: 1316.3395911557566} -- {DAY: 2010-09-02, RD: 120.0, TWRT: 1322.7105204879656} -- {DAY: 2010-09-03, RD: 120.0, TWRT: 1329.0486718179318} -- {DAY: 2010-09-04, RD: 120.0, TWRT: 1337.9028349810696} -- {DAY: 2010-09-05, RD: 120.0, TWRT: 1344.2939830487253} -- {DAY: 2010-09-06, RD: 120.0, TWRT: 1353.133830667273} -- {DAY: 2010-09-07, RD: 120.0, TWRT: 1361.6084789390243} -- {DAY: 2010-09-08, RD: 120.0, TWRT: 1368.836210650538} -- {DAY: 2010-09-09, RD: 120.0, TWRT: 1374.4634706441889} -- {DAY: 2010-09-10, RD: 120.0, TWRT: 1377.697468431013} -- {DAY: 2010-09-11, RD: 120.0, TWRT: 1383.4231782268675} -- {DAY: 2010-09-12, RD: 120.0, TWRT: 1390.2360421758428} -- {DAY: 2010-09-13, RD: 120.0, TWRT: 1396.610321724149} -- {DAY: 2010-09-14, RD: 120.0, TWRT: 1399.2813445313068} -- {DAY: 2010-09-15, RD: 120.0, TWRT: 1401.9851599470821} -- {DAY: 2010-09-16, RD: 120.0, TWRT: 1403.5045594585395} -- {DAY: 2010-09-17, RD: 120.0, TWRT: 1407.6548967429649} -- {DAY: 2010-09-18, RD: 120.0, TWRT: 1411.7943391797241} -- {DAY: 2010-09-19, RD: 120.0, TWRT: 1416.1559692942233} -- {DAY: 2010-09-20, RD: 120.0, TWRT: 1420.3809872286724} -- {DAY: 2010-09-21, RD: 120.0, TWRT: 1424.6450187118337} -- {DAY: 2010-09-22, RD: 120.0, TWRT: 1428.7669130239549} -- {DAY: 2010-09-23, RD: 120.0, TWRT: 1432.5445765283935} -- {DAY: 2010-09-24, RD: 120.0, TWRT: 1436.0370742398557} -- {DAY: 2010-09-25, RD: 120.0, TWRT: 1439.040367009619} -- {DAY: 2010-09-26, RD: 120.0, TWRT: 1439.7426228006198} -- {DAY: 2010-09-27, RD: 120.0, TWRT: 1441.001027227564} -- {DAY: 2010-09-28, RD: 120.0, TWRT: 1443.012025727005} -- {DAY: 2010-09-29, RD: 120.0, TWRT: 1443.7394342391492} -- {DAY: 2010-09-30, RD: 120.0, TWRT: 1445.4484463967106} -- {DAY: 2010-10-01, RD: 120.0, TWRT: 1446.934528677765} -- {DAY: 2010-10-02, RD: 120.0, TWRT: 1447.5066667643405} -- {DAY: 2010-10-03, RD: 120.0, TWRT: 1448.5790012744574} -- {DAY: 2010-10-04, RD: 120.0, TWRT: 1450.0580194301663} -- {DAY: 2010-10-05, RD: 120.0, TWRT: 1451.405544335648} -- {DAY: 2010-10-06, RD: 120.0, TWRT: 1452.2649431380187} -- {DAY: 2010-10-07, RD: 120.0, TWRT: 1452.756499356783} -- {DAY: 2010-10-08, RD: 120.0, TWRT: 1453.1262960050863} -- {DAY: 2010-10-09, RD: 120.0, TWRT: 1454.5731843213453} -- {DAY: 2010-10-10, RD: 120.0, TWRT: 1456.0770037719144} -- {DAY: 2010-10-11, RD: 120.0, TWRT: 1457.5643628467008} -- {DAY: 2010-10-12, RD: 120.0, TWRT: 1459.1066232814223} -- {DAY: 2010-10-13, RD: 120.0, TWRT: 1460.6366903853298} -- {DAY: 2010-10-14, RD: 120.0, TWRT: 1462.0924192219172} -- {DAY: 2010-10-15, RD: 120.0, TWRT: 1463.506376105299} -- {DAY: 2010-10-16, RD: 120.0, TWRT: 1463.8002967541033} -- {DAY: 2010-10-17, RD: 120.0, TWRT: 1464.0213116789873} -- {DAY: 2010-10-18, RD: 120.0, TWRT: 1464.3296790669128} -- {DAY: 2010-10-19, RD: 120.0, TWRT: 1464.728376184471} -- {DAY: 2010-10-20, RD: 120.0, TWRT: 1465.097445819827} -- {DAY: 2010-10-21, RD: 120.0, TWRT: 1465.4512271414928} -- {DAY: 2010-10-22, RD: 120.0, TWRT: 1465.981351377051} -- {DAY: 2010-10-23, RD: 120.0, TWRT: 1466.395357353505} -- {DAY: 2010-10-24, RD: 120.0, TWRT: 1466.750401497981} -- {DAY: 2010-10-25, RD: 120.0, TWRT: 1466.8511368210857} -- {DAY: 2010-10-26, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-10-27, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-10-28, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-10-29, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-10-30, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-10-31, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-11-01, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-11-02, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-11-03, RD: 120.0, TWRT: 1466.9112863994897} -- {DAY: 2010-11-04, RD: 120.0, TWRT: 1467.273722671945} -- {DAY: 2010-11-05, RD: 120.0, TWRT: 1467.467227243899} -- {DAY: 2010-11-06, RD: 120.0, TWRT: 1468.3651091169509} -- {DAY: 2010-11-07, RD: 120.0, TWRT: 1468.4842818392733} -- {DAY: 2010-11-08, RD: 120.0, TWRT: 1468.7955988544636} -- {DAY: 2010-11-09, RD: 120.0, TWRT: 1469.1027278001002} -- {DAY: 2010-11-10, RD: 120.0, TWRT: 1469.9855501931747} -- {DAY: 2010-11-11, RD: 120.0, TWRT: 1470.2840459257604} -- {DAY: 2010-11-12, RD: 120.0, TWRT: 1470.7685850170153} -- {DAY: 2010-11-13, RD: 120.0, TWRT: 1471.5336508702146} -- {DAY: 2010-11-14, RD: 120.0, TWRT: 1472.392024696878} -- {DAY: 2010-11-15, RD: 120.0, TWRT: 1473.7612020887284} -- {DAY: 2010-11-16, RD: 120.0, TWRT: 1474.6862923658518} -- {DAY: 2010-11-17, RD: 120.0, TWRT: 1474.764160880559} -- {DAY: 2010-11-18, RD: 120.0, TWRT: 1474.8897134712035} -- {DAY: 2010-11-19, RD: 120.0, TWRT: 1474.9805411469931} -- {DAY: 2010-11-20, RD: 120.0, TWRT: 1475.0781586737678} -- {DAY: 2010-11-21, RD: 120.0, TWRT: 1475.1435434288192} -- {DAY: 2010-11-22, RD: 120.0, TWRT: 1475.160613564851} -- {DAY: 2010-11-23, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-11-24, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-11-25, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-11-26, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-11-27, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-11-28, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-11-29, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-11-30, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-01, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-02, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-03, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-04, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-05, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-06, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-07, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-08, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-09, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-10, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-11, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-12, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-13, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-14, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-15, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-16, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-17, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-18, RD: 120.0, TWRT: 1475.4206963431436} -- {DAY: 2010-12-19, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-20, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-21, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-22, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-23, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-24, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-25, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-26, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-27, RD: 120.0, TWRT: 1475.4206963431438} -- {DAY: 2010-12-28, RD: 120.0, TWRT: 1475.420696343144} -- {DAY: 2010-12-29, RD: 120.0, TWRT: 1475.420696343144} -- {DAY: 2010-12-30, RD: 120.0, TWRT: 1475.420696343144} -- {DAY: 2010-12-31, RD: 120.0, TWRT: 1475.420696343144} -Precision: {RD: 0.01, TWRT: 0.1} -WeatherVariables: -- {DAY: 2010-04-16, E0: 0.292, ELEV: 440.0, ES0: 0.259, ET0: 0.254, IRRAD: 15048000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.35, TMAX: 14.5, - TMIN: 4.2, VAP: 7.45, WIND: 2.298643329164947} -- {DAY: 2010-04-17, E0: 0.307, ELEV: 440.0, ES0: 0.259, ET0: 0.29100000000000004, - IRRAD: 22799000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.3999999999999995, - TMAX: 14.6, TMIN: 0.2, VAP: 6.04, WIND: 1.6521498928373055} -- {DAY: 2010-04-18, E0: 0.303, ELEV: 440.0, ES0: 0.263, ET0: 0.28300000000000003, - IRRAD: 18735000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.450000000000001, - TMAX: 15.8, TMIN: 1.1, VAP: 6.95, WIND: 2.2268107251285425} -- {DAY: 2010-04-19, E0: 0.34500000000000003, ELEV: 440.0, ES0: 0.29700000000000004, - ET0: 0.337, IRRAD: 21025000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.8, TMAX: 18.6, TMIN: 3.0, VAP: 7.35, WIND: 1.939480308982924} -- {DAY: 2010-04-20, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.28900000000000003, - ET0: 0.319, IRRAD: 18687000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.5, TMAX: 16.9, TMIN: 4.1, VAP: 7.42, WIND: 2.442308537237756} -- {DAY: 2010-04-21, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.266, ET0: 0.262, - IRRAD: 14308000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.550000000000001, - TMAX: 10.4, TMIN: 4.7, VAP: 5.87, WIND: 3.0888019735653973} -- {DAY: 2010-04-22, E0: 0.288, ELEV: 440.0, ES0: 0.244, ET0: 0.28500000000000003, - IRRAD: 22864000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.95, - TMAX: 12.4, TMIN: -2.5, VAP: 4.42, WIND: 1.72398249687371} -- {DAY: 2010-04-23, E0: 0.333, ELEV: 440.0, ES0: 0.286, ET0: 0.331, IRRAD: 23148000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.0, TMAX: 15.0, - TMIN: -1.0, VAP: 5.13, WIND: 2.2268107251285425} -- {DAY: 2010-04-24, E0: 0.369, ELEV: 440.0, ES0: 0.316, ET0: 0.36, IRRAD: 24044000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.6, TMAX: 18.0, - TMIN: 1.2, VAP: 6.37, WIND: 1.8676477049465194} -- {DAY: 2010-04-25, E0: 0.43899999999999995, ELEV: 440.0, ES0: 0.381, ET0: 0.425, - IRRAD: 24020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.15, - TMAX: 20.6, TMIN: 5.7, VAP: 7.05, WIND: 2.154978121092138} -- {DAY: 2010-04-26, E0: 0.29700000000000004, ELEV: 440.0, ES0: 0.262, ET0: 0.286, - IRRAD: 15089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 11.75, - TMAX: 17.6, TMIN: 5.9, VAP: 8.63, WIND: 2.083145517055733} -- {DAY: 2010-04-27, E0: 0.3, ELEV: 440.0, ES0: 0.26, ET0: 0.286, IRRAD: 17661000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.45, TMAX: 17.9, - TMIN: 3.0, VAP: 8.23, WIND: 1.6521498928373055} -- {DAY: 2010-04-28, E0: 0.373, ELEV: 440.0, ES0: 0.317, ET0: 0.352, IRRAD: 24464000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 19.8, - TMIN: 2.7, VAP: 7.52, WIND: 1.077489060546069} -- {DAY: 2010-04-29, E0: 0.41100000000000003, ELEV: 440.0, ES0: 0.352, ET0: 0.41600000000000004, - IRRAD: 23615000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, - TMAX: 23.8, TMIN: 4.1, VAP: 8.26, WIND: 1.5084846847644964} -- {DAY: 2010-04-30, E0: 0.348, ELEV: 440.0, ES0: 0.311, ET0: 0.333, IRRAD: 14717000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 22.6, - TMIN: 8.5, VAP: 11.53, WIND: 2.2268107251285425} -- {DAY: 2010-05-01, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.26, ET0: 0.24900000000000003, - IRRAD: 12969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.58, SNOWDEPTH: .nan, TEMP: 14.45, - TMAX: 17.8, TMIN: 11.1, VAP: 12.04, WIND: 1.8676477049465194} -- {DAY: 2010-05-02, E0: 0.176, ELEV: 440.0, ES0: 0.158, ET0: 0.147, IRRAD: 7834000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.8, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 14.2, - TMIN: 9.7, VAP: 11.97, WIND: 1.4366520807280918} -- {DAY: 2010-05-03, E0: 0.189, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.161, - IRRAD: 8347000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 13.5, TMIN: 9.1, VAP: 10.82, WIND: 1.6521498928373055} -- {DAY: 2010-05-04, E0: 0.133, ELEV: 440.0, ES0: 0.121, ET0: 0.11699999999999999, - IRRAD: 5850000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.37, SNOWDEPTH: .nan, TEMP: 8.65, - TMAX: 10.6, TMIN: 6.7, VAP: 9.71, WIND: 2.9451367654925877} -- {DAY: 2010-05-05, E0: 0.176, ELEV: 440.0, ES0: 0.161, ET0: 0.125, IRRAD: 7550000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 7.15, TMAX: 8.9, - TMIN: 5.4, VAP: 8.77, WIND: 4.669119262366299} -- {DAY: 2010-05-06, E0: 0.159, ELEV: 440.0, ES0: 0.144, ET0: 0.145, IRRAD: 6844000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 9.350000000000001, - TMAX: 11.8, TMIN: 6.9, VAP: 9.74, WIND: 3.304299785674611} -- {DAY: 2010-05-07, E0: 0.213, ELEV: 440.0, ES0: 0.189, ET0: 0.175, IRRAD: 11585000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.300000000000001, - TMAX: 10.4, TMIN: 4.2, VAP: 8.06, WIND: 2.2268107251285425} -- {DAY: 2010-05-08, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.246, - IRRAD: 16249000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.7, - TMAX: 15.5, TMIN: 3.9, VAP: 8.4, WIND: 1.077489060546069} -- {DAY: 2010-05-09, E0: 0.29, ELEV: 440.0, ES0: 0.252, ET0: 0.261, IRRAD: 16930000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 10.35, TMAX: 17.3, - TMIN: 3.4, VAP: 9.58, WIND: 1.5803172888009012} -- {DAY: 2010-05-10, E0: 0.182, ELEV: 440.0, ES0: 0.16299999999999998, ET0: 0.152, - IRRAD: 8387000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 14.0, TMIN: 8.6, VAP: 11.36, WIND: 1.077489060546069} -- {DAY: 2010-05-11, E0: 0.39, ELEV: 440.0, ES0: 0.344, ET0: 0.317, IRRAD: 18611000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.3, - TMIN: 9.2, VAP: 12.27, WIND: 2.5859737453105653} -- {DAY: 2010-05-12, E0: 0.32599999999999996, ELEV: 440.0, ES0: 0.29100000000000004, - ET0: 0.269, IRRAD: 14823000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.55, TMAX: 15.5, TMIN: 9.6, VAP: 10.25, WIND: 2.154978121092138} -- {DAY: 2010-05-13, E0: 0.197, ELEV: 440.0, ES0: 0.178, ET0: 0.16699999999999998, - IRRAD: 8293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.44000000000000006, SNOWDEPTH: .nan, - TEMP: 9.95, TMAX: 12.7, TMIN: 7.2, VAP: 9.85, WIND: 2.7296389533833745} -- {DAY: 2010-05-14, E0: 0.149, ELEV: 440.0, ES0: 0.133, ET0: 0.12, IRRAD: 7517000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 7.25, TMAX: 8.6, - TMIN: 5.9, VAP: 8.94, WIND: 1.72398249687371} -- {DAY: 2010-05-15, E0: 0.177, ELEV: 440.0, ES0: 0.161, ET0: 0.148, IRRAD: 8182000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 7.300000000000001, - TMAX: 9.3, TMIN: 5.3, VAP: 8.06, WIND: 2.0113129130193284} -- {DAY: 2010-05-16, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.267, ET0: 0.23500000000000001, - IRRAD: 11902000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.600000000000001, - TMAX: 12.3, TMIN: 4.9, VAP: 7.59, WIND: 3.1606345776018023} -- {DAY: 2010-05-17, E0: 0.364, ELEV: 440.0, ES0: 0.323, ET0: 0.315, IRRAD: 18616000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 10.1, TMAX: 15.4, - TMIN: 4.8, VAP: 7.99, WIND: 2.801471557419779} -- {DAY: 2010-05-18, E0: 0.23900000000000002, ELEV: 440.0, ES0: 0.217, ET0: 0.20600000000000002, - IRRAD: 10082000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 9.3, - TMAX: 11.5, TMIN: 7.1, VAP: 8.29, WIND: 2.65780634934697} -- {DAY: 2010-05-19, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.096, ET0: 0.095, - IRRAD: 5446000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 6.1, - TMAX: 7.1, TMIN: 5.1, VAP: 8.46, WIND: 2.7296389533833745} -- {DAY: 2010-05-20, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.095, ET0: 0.10400000000000001, - IRRAD: 5694000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 9.5, - TMAX: 12.5, TMIN: 6.5, VAP: 11.3, WIND: 1.3648194766916872} -- {DAY: 2010-05-21, E0: 0.265, ELEV: 440.0, ES0: 0.23700000000000002, ET0: 0.21800000000000003, - IRRAD: 11531000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 13.3, - TMAX: 17.0, TMIN: 9.6, VAP: 12.21, WIND: 1.8676477049465194} -- {DAY: 2010-05-22, E0: 0.386, ELEV: 440.0, ES0: 0.339, ET0: 0.323, IRRAD: 19035000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.1, SNOWDEPTH: .nan, TEMP: 14.15, TMAX: 20.1, - TMIN: 8.2, VAP: 11.77, WIND: 1.5084846847644964} -- {DAY: 2010-05-23, E0: 0.45099999999999996, ELEV: 440.0, ES0: 0.395, ET0: 0.378, - IRRAD: 22815000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.6, - TMAX: 20.9, TMIN: 8.3, VAP: 11.7, WIND: 1.6521498928373055} -- {DAY: 2010-05-24, E0: 0.492, ELEV: 440.0, ES0: 0.433, ET0: 0.43600000000000005, - IRRAD: 23334000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 16.05, - TMAX: 23.5, TMIN: 8.6, VAP: 12.38, WIND: 2.5141411412741608} -- {DAY: 2010-05-25, E0: 0.458, ELEV: 440.0, ES0: 0.404, ET0: 0.39, IRRAD: 20822000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: .nan, TEMP: 16.65, - TMAX: 22.0, TMIN: 11.3, VAP: 13.18, WIND: 2.370475933201351} -- {DAY: 2010-05-26, E0: 0.215, ELEV: 440.0, ES0: 0.193, ET0: 0.187, IRRAD: 9210000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.93, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 17.5, - TMIN: 10.6, VAP: 13.39, WIND: 1.5084846847644964} -- {DAY: 2010-05-27, E0: 0.303, ELEV: 440.0, ES0: 0.27, ET0: 0.257, IRRAD: 13115000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 15.0, TMAX: 18.8, - TMIN: 11.2, VAP: 13.15, WIND: 2.083145517055733} -- {DAY: 2010-05-28, E0: 0.362, ELEV: 440.0, ES0: 0.321, ET0: 0.305, IRRAD: 16517000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.2, TMAX: 20.4, - TMIN: 10.0, VAP: 12.78, WIND: 1.72398249687371} -- {DAY: 2010-05-29, E0: 0.413, ELEV: 440.0, ES0: 0.362, ET0: 0.346, IRRAD: 20796000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.9, - TMIN: 8.6, VAP: 11.43, WIND: 1.5084846847644964} -- {DAY: 2010-05-30, E0: 0.277, ELEV: 440.0, ES0: 0.25, ET0: 0.233, IRRAD: 11117000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 3.6, SNOWDEPTH: .nan, TEMP: 14.0, TMAX: 17.8, - TMIN: 10.2, VAP: 12.48, WIND: 2.370475933201351} -- {DAY: 2010-05-31, E0: 0.307, ELEV: 440.0, ES0: 0.277, ET0: 0.21800000000000003, - IRRAD: 13569000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.32, SNOWDEPTH: .nan, TEMP: 9.95, - TMAX: 13.1, TMIN: 6.8, VAP: 9.74, WIND: 3.663462805856634} -- {DAY: 2010-06-01, E0: 0.10900000000000001, ELEV: 440.0, ES0: 0.098, ET0: 0.10300000000000001, - IRRAD: 5021000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 9.5, - TMAX: 11.0, TMIN: 8.0, VAP: 10.76, WIND: 2.7296389533833745} -- {DAY: 2010-06-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10300000000000001, - ET0: 0.10800000000000001, IRRAD: 5185000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.2, - SNOWDEPTH: .nan, TEMP: 10.4, TMAX: 11.5, TMIN: 9.3, VAP: 11.4, WIND: 2.65780634934697} -- {DAY: 2010-06-03, E0: 0.128, ELEV: 440.0, ES0: 0.11399999999999999, ET0: 0.118, - IRRAD: 5892000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.75, - TMAX: 13.2, TMIN: 10.3, VAP: 12.64, WIND: 1.7958151009101146} -- {DAY: 2010-06-04, E0: 0.528, ELEV: 440.0, ES0: 0.45899999999999996, ET0: 0.44000000000000006, - IRRAD: 27697000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.65, - TMAX: 21.1, TMIN: 8.2, VAP: 11.3, WIND: 1.5803172888009012} -- {DAY: 2010-06-05, E0: 0.564, ELEV: 440.0, ES0: 0.488, ET0: 0.497, IRRAD: 29724000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.1, TMAX: 24.8, - TMIN: 7.4, VAP: 11.5, WIND: 1.3648194766916872} -- {DAY: 2010-06-06, E0: 0.5900000000000001, ELEV: 440.0, ES0: 0.513, ET0: 0.525, IRRAD: 28294000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.4, TMAX: 27.0, - TMIN: 9.8, VAP: 13.35, WIND: 1.6521498928373055} -- {DAY: 2010-06-07, E0: 0.505, ELEV: 440.0, ES0: 0.45099999999999996, ET0: 0.42699999999999994, - IRRAD: 19774000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, - TMAX: 22.6, TMIN: 15.6, VAP: 14.43, WIND: 2.801471557419779} -- {DAY: 2010-06-08, E0: 0.538, ELEV: 440.0, ES0: 0.471, ET0: 0.465, IRRAD: 24452000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.85, TMAX: 26.9, - TMIN: 10.8, VAP: 14.7, WIND: 1.4366520807280918} -- {DAY: 2010-06-09, E0: 0.595, ELEV: 440.0, ES0: 0.525, ET0: 0.517, IRRAD: 24742000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, TMAX: 28.6, - TMIN: 14.4, VAP: 17.3, WIND: 2.083145517055733} -- {DAY: 2010-06-10, E0: 0.607, ELEV: 440.0, ES0: 0.536, ET0: 0.533, IRRAD: 24198000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.3, TMAX: 30.5, - TMIN: 16.1, VAP: 17.26, WIND: 1.5803172888009012} -- {DAY: 2010-06-11, E0: 0.653, ELEV: 440.0, ES0: 0.5740000000000001, ET0: 0.5650000000000001, - IRRAD: 27798000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, - TMAX: 27.1, TMIN: 15.9, VAP: 16.05, WIND: 2.298643329164947} -- {DAY: 2010-06-12, E0: 0.5, ELEV: 440.0, ES0: 0.44400000000000006, ET0: 0.437, IRRAD: 19853000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 20.4, TMAX: 26.5, - TMIN: 14.3, VAP: 15.11, WIND: 1.72398249687371} -- {DAY: 2010-06-13, E0: 0.371, ELEV: 440.0, ES0: 0.33399999999999996, ET0: 0.29900000000000004, - IRRAD: 14405000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 15.8, - TMAX: 19.3, TMIN: 12.3, VAP: 13.18, WIND: 2.442308537237756} -- {DAY: 2010-06-14, E0: 0.321, ELEV: 440.0, ES0: 0.288, ET0: 0.258, IRRAD: 12885000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.35, TMAX: 18.9, - TMIN: 11.8, VAP: 13.39, WIND: 2.0113129130193284} -- {DAY: 2010-06-15, E0: 0.369, ELEV: 440.0, ES0: 0.335, ET0: 0.288, IRRAD: 13535000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.200000000000001, - TMAX: 18.6, TMIN: 11.8, VAP: 12.91, WIND: 3.2324671816382065} -- {DAY: 2010-06-16, E0: 0.413, ELEV: 440.0, ES0: 0.374, ET0: 0.33999999999999997, - IRRAD: 15421000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.3, - TMAX: 17.3, TMIN: 11.3, VAP: 11.03, WIND: 4.309956242184276} -- {DAY: 2010-06-17, E0: 0.489, ELEV: 440.0, ES0: 0.438, ET0: 0.389, IRRAD: 20003000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.3, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 19.8, - TMIN: 11.3, VAP: 12.24, WIND: 3.735295409893039} -- {DAY: 2010-06-18, E0: 0.28700000000000003, ELEV: 440.0, ES0: 0.258, ET0: 0.242, - IRRAD: 11148000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 16.35, - TMAX: 18.7, TMIN: 14.0, VAP: 14.16, WIND: 1.5803172888009012} -- {DAY: 2010-06-19, E0: 0.346, ELEV: 440.0, ES0: 0.308, ET0: 0.275, IRRAD: 16133000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.1, TMAX: 15.6, - TMIN: 8.6, VAP: 10.12, WIND: 1.6521498928373055} -- {DAY: 2010-06-20, E0: 0.23199999999999998, ELEV: 440.0, ES0: 0.21000000000000002, - ET0: 0.19, IRRAD: 9754000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, - TEMP: 11.0, TMAX: 14.0, TMIN: 8.0, VAP: 10.05, WIND: 1.3648194766916872} -- {DAY: 2010-06-21, E0: 0.337, ELEV: 440.0, ES0: 0.303, ET0: 0.264, IRRAD: 14403000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.3, TMAX: 15.8, - TMIN: 8.8, VAP: 10.18, WIND: 1.72398249687371} -- {DAY: 2010-06-22, E0: 0.36, ELEV: 440.0, ES0: 0.318, ET0: 0.312, IRRAD: 17475000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.65, TMAX: 18.3, - TMIN: 7.0, VAP: 9.81, WIND: 1.5084846847644964} -- {DAY: 2010-06-23, E0: 0.383, ELEV: 440.0, ES0: 0.33599999999999997, ET0: 0.331, - IRRAD: 19579000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.05, - TMAX: 19.7, TMIN: 6.4, VAP: 10.42, WIND: 1.2929868726552827} -- {DAY: 2010-06-24, E0: 0.44800000000000006, ELEV: 440.0, ES0: 0.397, ET0: 0.383, - IRRAD: 19454000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.1, - TMAX: 22.5, TMIN: 11.7, VAP: 11.5, WIND: 1.2929868726552827} -- {DAY: 2010-06-25, E0: 0.418, ELEV: 440.0, ES0: 0.367, ET0: 0.378, IRRAD: 19342000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 17.05, TMAX: 24.0, - TMIN: 10.1, VAP: 13.52, WIND: 1.5803172888009012} -- {DAY: 2010-06-26, E0: 0.457, ELEV: 440.0, ES0: 0.4, ET0: 0.40499999999999997, IRRAD: 21119000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.75, TMAX: 24.3, - TMIN: 11.2, VAP: 13.96, WIND: 1.5084846847644964} -- {DAY: 2010-06-27, E0: 0.571, ELEV: 440.0, ES0: 0.49800000000000005, ET0: 0.506, - IRRAD: 26779000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.9, - TMAX: 24.8, TMIN: 13.0, VAP: 12.48, WIND: 1.6521498928373055} -- {DAY: 2010-06-28, E0: 0.585, ELEV: 440.0, ES0: 0.507, ET0: 0.519, IRRAD: 28562000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, TMAX: 26.6, - TMIN: 11.6, VAP: 12.38, WIND: 1.077489060546069} -- {DAY: 2010-06-29, E0: 0.538, ELEV: 440.0, ES0: 0.46799999999999997, ET0: 0.493, - IRRAD: 25202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.0, - TMAX: 28.1, TMIN: 11.9, VAP: 13.52, WIND: 1.1493216645824735} -- {DAY: 2010-06-30, E0: 0.515, ELEV: 440.0, ES0: 0.45499999999999996, ET0: 0.45099999999999996, - IRRAD: 21164000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 21.35, - TMAX: 27.5, TMIN: 15.2, VAP: 15.65, WIND: 1.3648194766916872} -- {DAY: 2010-07-01, E0: 0.533, ELEV: 440.0, ES0: 0.462, ET0: 0.47800000000000004, - IRRAD: 25266000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.7, - TMAX: 28.2, TMIN: 13.2, VAP: 14.63, WIND: 0.861991248436855} -- {DAY: 2010-07-02, E0: 0.597, ELEV: 440.0, ES0: 0.518, ET0: 0.5349999999999999, IRRAD: 27426000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.2, TMAX: 30.2, - TMIN: 14.2, VAP: 14.87, WIND: 0.9338238524732597} -- {DAY: 2010-07-03, E0: 0.614, ELEV: 440.0, ES0: 0.537, ET0: 0.5519999999999999, IRRAD: 26263000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.1, TMAX: 30.8, - TMIN: 15.4, VAP: 15.51, WIND: 1.2929868726552827} -- {DAY: 2010-07-04, E0: 0.509, ELEV: 440.0, ES0: 0.449, ET0: 0.457, IRRAD: 20494000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 22.45, TMAX: 28.9, - TMIN: 16.0, VAP: 17.26, WIND: 1.5084846847644964} -- {DAY: 2010-07-05, E0: 0.489, ELEV: 440.0, ES0: 0.43600000000000005, ET0: 0.409, - IRRAD: 18435000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 22.0, - TMAX: 26.7, TMIN: 17.3, VAP: 17.84, WIND: 1.6521498928373055} -- {DAY: 2010-07-06, E0: 0.454, ELEV: 440.0, ES0: 0.40499999999999997, ET0: 0.381, - IRRAD: 18109000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.049999999999997, - TMAX: 20.4, TMIN: 15.7, VAP: 13.45, WIND: 2.2268107251285425} -- {DAY: 2010-07-07, E0: 0.40499999999999997, ELEV: 440.0, ES0: 0.352, ET0: 0.377, - IRRAD: 21158000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.1, - TMAX: 22.4, TMIN: 7.8, VAP: 10.22, WIND: 1.077489060546069} -- {DAY: 2010-07-08, E0: 0.5599999999999999, ELEV: 440.0, ES0: 0.484, ET0: 0.505, IRRAD: 28373000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.0, TMAX: 27.4, - TMIN: 8.6, VAP: 11.33, WIND: 1.0056564565096642} -- {DAY: 2010-07-09, E0: 0.609, ELEV: 440.0, ES0: 0.5269999999999999, ET0: 0.55, IRRAD: 28929000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 30.9, - TMIN: 11.4, VAP: 13.69, WIND: 0.9338238524732597} -- {DAY: 2010-07-10, E0: 0.619, ELEV: 440.0, ES0: 0.5389999999999999, ET0: 0.5780000000000001, - IRRAD: 27293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.25, - TMAX: 32.1, TMIN: 14.4, VAP: 15.14, WIND: 1.2929868726552827} -- {DAY: 2010-07-11, E0: 0.671, ELEV: 440.0, ES0: 0.587, ET0: 0.628, IRRAD: 28557000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 24.1, TMAX: 33.7, - TMIN: 14.5, VAP: 13.93, WIND: 1.4366520807280918} -- {DAY: 2010-07-12, E0: 0.669, ELEV: 440.0, ES0: 0.589, ET0: 0.617, IRRAD: 27106000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 24.45, TMAX: 33.5, - TMIN: 15.4, VAP: 16.08, WIND: 1.5803172888009012} -- {DAY: 2010-07-13, E0: 0.5700000000000001, ELEV: 440.0, ES0: 0.506, ET0: 0.514, IRRAD: 21652000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 23.65, TMAX: 29.1, - TMIN: 18.2, VAP: 17.03, WIND: 1.939480308982924} -- {DAY: 2010-07-14, E0: 0.633, ELEV: 440.0, ES0: 0.5509999999999999, ET0: 0.579, IRRAD: 27607000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 24.0, TMAX: 32.9, - TMIN: 15.1, VAP: 16.42, WIND: 1.1493216645824735} -- {DAY: 2010-07-15, E0: 0.43499999999999994, ELEV: 440.0, ES0: 0.39, ET0: 0.376, IRRAD: 15587000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.75, TMAX: 26.0, - TMIN: 19.5, VAP: 17.94, WIND: 1.5803172888009012} -- {DAY: 2010-07-16, E0: 0.645, ELEV: 440.0, ES0: 0.5650000000000001, ET0: 0.585, IRRAD: 26895000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 24.25, TMAX: 33.4, - TMIN: 15.1, VAP: 18.14, WIND: 1.4366520807280918} -- {DAY: 2010-07-17, E0: 0.391, ELEV: 440.0, ES0: 0.35, ET0: 0.331, IRRAD: 14872000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.31, SNOWDEPTH: .nan, TEMP: 21.55, TMAX: 24.6, - TMIN: 18.5, VAP: 17.36, WIND: 1.8676477049465194} -- {DAY: 2010-07-18, E0: 0.371, ELEV: 440.0, ES0: 0.329, ET0: 0.316, IRRAD: 15735000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.200000000000003, - TMAX: 21.1, TMIN: 13.3, VAP: 14.0, WIND: 1.72398249687371} -- {DAY: 2010-07-19, E0: 0.45499999999999996, ELEV: 440.0, ES0: 0.399, ET0: 0.40099999999999997, - IRRAD: 21342000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.2, - TMAX: 23.4, TMIN: 11.0, VAP: 12.17, WIND: 1.939480308982924} -- {DAY: 2010-07-20, E0: 0.5469999999999999, ELEV: 440.0, ES0: 0.477, ET0: 0.485, IRRAD: 25767000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.0, TMAX: 25.9, - TMIN: 12.1, VAP: 14.23, WIND: 1.7958151009101146} -- {DAY: 2010-07-21, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.509, ET0: 0.517, IRRAD: 26623000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.85, TMAX: 31.2, - TMIN: 14.5, VAP: 16.25, WIND: 0.861991248436855} -- {DAY: 2010-07-22, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.516, ET0: 0.534, IRRAD: 23571000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 24.200000000000003, - TMAX: 31.8, TMIN: 16.6, VAP: 17.94, WIND: 1.5803172888009012} -- {DAY: 2010-07-23, E0: 0.266, ELEV: 440.0, ES0: 0.242, ET0: 0.23199999999999998, - IRRAD: 8448000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.6, SNOWDEPTH: .nan, TEMP: 20.0, - TMAX: 22.4, TMIN: 17.6, VAP: 18.07, WIND: 2.0113129130193284} -- {DAY: 2010-07-24, E0: 0.21800000000000003, ELEV: 440.0, ES0: 0.199, ET0: 0.197, - IRRAD: 7503000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 15.85, - TMAX: 18.0, TMIN: 13.7, VAP: 14.26, WIND: 2.442308537237756} -- {DAY: 2010-07-25, E0: 0.393, ELEV: 440.0, ES0: 0.346, ET0: 0.344, IRRAD: 18998000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 18.8, - TMIN: 9.3, VAP: 10.18, WIND: 1.939480308982924} -- {DAY: 2010-07-26, E0: 0.34700000000000003, ELEV: 440.0, ES0: 0.306, ET0: 0.301, - IRRAD: 16015000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.899999999999999, - TMAX: 20.7, TMIN: 9.1, VAP: 11.9, WIND: 1.3648194766916872} -- {DAY: 2010-07-27, E0: 0.367, ELEV: 440.0, ES0: 0.324, ET0: 0.305, IRRAD: 16530000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 16.35, TMAX: 21.3, - TMIN: 11.4, VAP: 13.79, WIND: 1.3648194766916872} -- {DAY: 2010-07-28, E0: 0.282, ELEV: 440.0, ES0: 0.254, ET0: 0.24300000000000002, - IRRAD: 10520000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16999999999999998, SNOWDEPTH: .nan, - TEMP: 16.9, TMAX: 20.4, TMIN: 13.4, VAP: 15.27, WIND: 2.65780634934697} -- {DAY: 2010-07-29, E0: 0.273, ELEV: 440.0, ES0: 0.244, ET0: 0.22999999999999998, - IRRAD: 11067000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 16.549999999999997, - TMAX: 18.9, TMIN: 14.2, VAP: 14.84, WIND: 1.7958151009101146} -- {DAY: 2010-07-30, E0: 0.312, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.258, - IRRAD: 13224000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.049999999999997, - TMAX: 19.4, TMIN: 12.7, VAP: 13.25, WIND: 1.221154268618878} -- {DAY: 2010-07-31, E0: 0.48200000000000004, ELEV: 440.0, ES0: 0.414, ET0: 0.42800000000000005, - IRRAD: 26033000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.35, - TMAX: 24.1, TMIN: 8.6, VAP: 12.21, WIND: 1.221154268618878} -- {DAY: 2010-08-01, E0: 0.511, ELEV: 440.0, ES0: 0.44000000000000006, ET0: 0.46699999999999997, - IRRAD: 25874000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.75, - TMAX: 27.3, TMIN: 10.2, VAP: 13.62, WIND: 1.221154268618878} -- {DAY: 2010-08-02, E0: 0.301, ELEV: 440.0, ES0: 0.268, ET0: 0.258, IRRAD: 12301000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.8699999999999999, SNOWDEPTH: .nan, TEMP: 19.15, - TMAX: 23.4, TMIN: 14.9, VAP: 17.5, WIND: 1.221154268618878} -- {DAY: 2010-08-03, E0: 0.315, ELEV: 440.0, ES0: 0.282, ET0: 0.263, IRRAD: 12311000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 20.0, - TMIN: 16.3, VAP: 15.81, WIND: 1.8676477049465194} -- {DAY: 2010-08-04, E0: 0.4, ELEV: 440.0, ES0: 0.34900000000000003, ET0: 0.333, IRRAD: 19963000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.4, TMAX: 21.6, - TMIN: 9.2, VAP: 12.34, WIND: 1.1493216645824735} -- {DAY: 2010-08-05, E0: 0.255, ELEV: 440.0, ES0: 0.227, ET0: 0.21800000000000003, - IRRAD: 10993000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.2, - TMAX: 20.4, TMIN: 10.0, VAP: 14.13, WIND: 1.5084846847644964} -- {DAY: 2010-08-06, E0: 0.121, ELEV: 440.0, ES0: 0.10800000000000001, ET0: 0.12, IRRAD: 4960000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.8, SNOWDEPTH: .nan, TEMP: 15.5, TMAX: 16.8, - TMIN: 14.2, VAP: 16.08, WIND: 1.7958151009101146} -- {DAY: 2010-08-07, E0: 0.17099999999999999, ELEV: 440.0, ES0: 0.154, ET0: 0.155, - IRRAD: 6510000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.8, - TMAX: 18.0, TMIN: 13.6, VAP: 15.27, WIND: 2.0113129130193284} -- {DAY: 2010-08-08, E0: 0.374, ELEV: 440.0, ES0: 0.32999999999999996, ET0: 0.314, - IRRAD: 17177000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 16.25, - TMAX: 22.0, TMIN: 10.5, VAP: 13.93, WIND: 1.72398249687371} -- {DAY: 2010-08-09, E0: 0.384, ELEV: 440.0, ES0: 0.339, ET0: 0.331, IRRAD: 16768000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, TMAX: 22.1, - TMIN: 13.2, VAP: 13.96, WIND: 1.7958151009101146} -- {DAY: 2010-08-10, E0: 0.34900000000000003, ELEV: 440.0, ES0: 0.304, ET0: 0.316, - IRRAD: 17022000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.0, - TMAX: 24.6, TMIN: 9.4, VAP: 13.59, WIND: 1.077489060546069} -- {DAY: 2010-08-11, E0: 0.35, ELEV: 440.0, ES0: 0.307, ET0: 0.3, IRRAD: 15774000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 25.0, - TMIN: 11.3, VAP: 15.41, WIND: 1.077489060546069} -- {DAY: 2010-08-12, E0: 0.311, ELEV: 440.0, ES0: 0.275, ET0: 0.262, IRRAD: 13152000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 18.55, TMAX: 22.8, - TMIN: 14.3, VAP: 17.13, WIND: 1.6521498928373055} -- {DAY: 2010-08-13, E0: 0.187, ELEV: 440.0, ES0: 0.16699999999999998, ET0: 0.16599999999999998, - IRRAD: 7020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.8, SNOWDEPTH: .nan, TEMP: 17.95, - TMAX: 20.0, TMIN: 15.9, VAP: 17.3, WIND: 1.221154268618878} -- {DAY: 2010-08-14, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.24500000000000002, - IRRAD: 12078000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, - TMAX: 20.7, TMIN: 14.6, VAP: 16.32, WIND: 2.298643329164947} -- {DAY: 2010-08-15, E0: 0.414, ELEV: 440.0, ES0: 0.369, ET0: 0.374, IRRAD: 15896000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 20.85, TMAX: 25.1, - TMIN: 16.6, VAP: 16.49, WIND: 2.442308537237756} -- {DAY: 2010-08-16, E0: 0.31, ELEV: 440.0, ES0: 0.277, ET0: 0.258, IRRAD: 12819000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 15.8, TMAX: 18.3, - TMIN: 13.3, VAP: 13.45, WIND: 2.5859737453105653} -- {DAY: 2010-08-17, E0: 0.127, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.132, - IRRAD: 4005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.76, SNOWDEPTH: .nan, TEMP: 13.75, - TMAX: 14.9, TMIN: 12.6, VAP: 13.49, WIND: 3.663462805856634} -- {DAY: 2010-08-18, E0: 0.154, ELEV: 440.0, ES0: 0.141, ET0: 0.155, IRRAD: 5067000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.700000000000001, - TMAX: 17.1, TMIN: 12.3, VAP: 13.89, WIND: 2.7296389533833745} -- {DAY: 2010-08-19, E0: 0.361, ELEV: 440.0, ES0: 0.319, ET0: 0.318, IRRAD: 15911000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.65, TMAX: 20.7, - TMIN: 12.6, VAP: 12.71, WIND: 2.154978121092138} -- {DAY: 2010-08-20, E0: 0.391, ELEV: 440.0, ES0: 0.33199999999999996, ET0: 0.361, - IRRAD: 22793000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.5, - TMAX: 25.3, TMIN: 7.7, VAP: 13.12, WIND: 0.861991248436855} -- {DAY: 2010-08-21, E0: 0.426, ELEV: 440.0, ES0: 0.364, ET0: 0.39, IRRAD: 22795000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.25, TMAX: 27.3, - TMIN: 11.2, VAP: 15.58, WIND: 1.0056564565096642} -- {DAY: 2010-08-22, E0: 0.437, ELEV: 440.0, ES0: 0.376, ET0: 0.39, IRRAD: 21331000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.1, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 29.1, - TMIN: 13.2, VAP: 17.94, WIND: 1.077489060546069} -- {DAY: 2010-08-23, E0: 0.262, ELEV: 440.0, ES0: 0.231, ET0: 0.24300000000000002, - IRRAD: 11294000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.11000000000000001, SNOWDEPTH: .nan, - TEMP: 19.6, TMAX: 24.1, TMIN: 15.1, VAP: 18.71, WIND: 1.939480308982924} -- {DAY: 2010-08-24, E0: 0.31, ELEV: 440.0, ES0: 0.282, ET0: 0.27799999999999997, IRRAD: 10039000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 20.0, TMAX: 22.2, - TMIN: 17.8, VAP: 16.79, WIND: 2.65780634934697} -- {DAY: 2010-08-25, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.29, ET0: 0.294, IRRAD: 16736000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.75, TMAX: 19.2, - TMIN: 10.3, VAP: 11.97, WIND: 2.298643329164947} -- {DAY: 2010-08-26, E0: 0.315, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.29300000000000004, - IRRAD: 13589000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 18.45, - TMAX: 26.0, TMIN: 10.9, VAP: 16.35, WIND: 1.939480308982924} -- {DAY: 2010-08-27, E0: 0.256, ELEV: 440.0, ES0: 0.229, ET0: 0.22599999999999998, - IRRAD: 10050000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.36, SNOWDEPTH: .nan, TEMP: 18.0, - TMAX: 21.1, TMIN: 14.9, VAP: 17.53, WIND: 3.663462805856634} -- {DAY: 2010-08-28, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.223, ET0: 0.22000000000000003, - IRRAD: 10561000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.0, - TMAX: 15.6, TMIN: 12.4, VAP: 11.9, WIND: 2.65780634934697} -- {DAY: 2010-08-29, E0: 0.252, ELEV: 440.0, ES0: 0.225, ET0: 0.209, IRRAD: 11595000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 15.5, - TMIN: 8.4, VAP: 10.76, WIND: 2.7296389533833745} -- {DAY: 2010-08-30, E0: 0.176, ELEV: 440.0, ES0: 0.157, ET0: 0.141, IRRAD: 8652000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.47000000000000003, SNOWDEPTH: .nan, TEMP: 9.399999999999999, - TMAX: 11.2, TMIN: 7.6, VAP: 9.95, WIND: 2.9451367654925877} -- {DAY: 2010-08-31, E0: 0.196, ELEV: 440.0, ES0: 0.174, ET0: 0.178, IRRAD: 10017000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 14.6, - TMIN: 7.6, VAP: 10.35, WIND: 2.083145517055733} -- {DAY: 2010-09-01, E0: 0.16799999999999998, ELEV: 440.0, ES0: 0.149, ET0: 0.142, - IRRAD: 8681000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 10.0, - TMAX: 14.4, TMIN: 5.6, VAP: 10.66, WIND: 1.72398249687371} -- {DAY: 2010-09-02, E0: 0.175, ELEV: 440.0, ES0: 0.154, ET0: 0.147, IRRAD: 8821000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 11.65, TMAX: 15.8, - TMIN: 7.5, VAP: 11.7, WIND: 1.0056564565096642} -- {DAY: 2010-09-03, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.21400000000000002, - ET0: 0.211, IRRAD: 14382000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.35, TMAX: 17.2, TMIN: 7.5, VAP: 11.33, WIND: 1.221154268618878} -- {DAY: 2010-09-04, E0: 0.225, ELEV: 440.0, ES0: 0.20099999999999998, ET0: 0.194, - IRRAD: 9609000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 13.15, - TMAX: 16.6, TMIN: 9.7, VAP: 10.66, WIND: 1.5084846847644964} -- {DAY: 2010-09-05, E0: 0.306, ELEV: 440.0, ES0: 0.262, ET0: 0.277, IRRAD: 19211000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 16.2, - TMIN: 6.0, VAP: 9.21, WIND: 2.65780634934697} -- {DAY: 2010-09-06, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.24900000000000003, - ET0: 0.272, IRRAD: 18341000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.75, TMAX: 15.9, TMIN: 5.6, VAP: 8.77, WIND: 2.5859737453105653} -- {DAY: 2010-09-07, E0: 0.24, ELEV: 440.0, ES0: 0.21000000000000002, ET0: 0.193, IRRAD: 13266000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 9.75, TMAX: 14.3, - TMIN: 5.2, VAP: 9.88, WIND: 3.663462805856634} -- {DAY: 2010-09-08, E0: 0.22000000000000003, ELEV: 440.0, ES0: 0.196, ET0: 0.152, - IRRAD: 9667000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 12.8, - TMAX: 14.9, TMIN: 10.7, VAP: 12.91, WIND: 3.2324671816382065} -- {DAY: 2010-09-09, E0: 0.131, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.131, - IRRAD: 5725000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 13.65, - TMAX: 15.8, TMIN: 11.5, VAP: 13.18, WIND: 1.7958151009101146} -- {DAY: 2010-09-10, E0: 0.211, ELEV: 440.0, ES0: 0.184, ET0: 0.185, IRRAD: 10961000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.200000000000001, - TMAX: 18.6, TMIN: 9.8, VAP: 12.95, WIND: 1.2929868726552827} -- {DAY: 2010-09-11, E0: 0.286, ELEV: 440.0, ES0: 0.242, ET0: 0.253, IRRAD: 17976000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 21.0, - TMIN: 7.1, VAP: 11.57, WIND: 1.0056564565096642} -- {DAY: 2010-09-12, E0: 0.246, ELEV: 440.0, ES0: 0.205, ET0: 0.238, IRRAD: 16699000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, TMAX: 21.7, - TMIN: 6.2, VAP: 11.67, WIND: 0.861991248436855} -- {DAY: 2010-09-13, E0: 0.101, ELEV: 440.0, ES0: 0.088, ET0: 0.11699999999999999, - IRRAD: 5574000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.4, - TMAX: 15.9, TMIN: 8.9, VAP: 12.58, WIND: 1.221154268618878} -- {DAY: 2010-09-14, E0: 0.12, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.10300000000000001, - IRRAD: 5860000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.2, - TMAX: 13.8, TMIN: 8.6, VAP: 12.17, WIND: 2.370475933201351} -- {DAY: 2010-09-15, E0: 0.124, ELEV: 440.0, ES0: 0.11499999999999999, ET0: 0.132, - IRRAD: 3950000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 13.55, - TMAX: 15.2, TMIN: 11.9, VAP: 12.81, WIND: 2.801471557419779} -- {DAY: 2010-09-16, E0: 0.24100000000000002, ELEV: 440.0, ES0: 0.21600000000000003, - ET0: 0.22400000000000003, IRRAD: 10417000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, - SNOWDEPTH: .nan, TEMP: 13.149999999999999, TMAX: 16.4, TMIN: 9.9, VAP: 10.32, WIND: 2.5859737453105653} -- {DAY: 2010-09-17, E0: 0.195, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.192, - IRRAD: 11312000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, - TMAX: 15.9, TMIN: 5.1, VAP: 9.17, WIND: 1.939480308982924} -- {DAY: 2010-09-18, E0: 0.182, ELEV: 440.0, ES0: 0.152, ET0: 0.176, IRRAD: 14229000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.25, TMAX: 14.7, - TMIN: 1.8, VAP: 8.29, WIND: 1.221154268618878} -- {DAY: 2010-09-19, E0: 0.20099999999999998, ELEV: 440.0, ES0: 0.16899999999999998, - ET0: 0.186, IRRAD: 14777000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 8.75, TMAX: 15.2, TMIN: 2.3, VAP: 7.79, WIND: 1.077489060546069} -- {DAY: 2010-09-20, E0: 0.176, ELEV: 440.0, ES0: 0.143, ET0: 0.19, IRRAD: 14819000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 18.3, - TMIN: 1.3, VAP: 9.21, WIND: 1.0056564565096642} -- {DAY: 2010-09-21, E0: 0.21000000000000002, ELEV: 440.0, ES0: 0.16999999999999998, - ET0: 0.225, IRRAD: 17280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.399999999999999, TMAX: 20.9, TMIN: 3.9, VAP: 9.85, WIND: 0.9338238524732597} -- {DAY: 2010-09-22, E0: 0.215, ELEV: 440.0, ES0: 0.174, ET0: 0.23500000000000001, - IRRAD: 16698000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.45, - TMAX: 20.8, TMIN: 6.1, VAP: 10.93, WIND: 1.3648194766916872} -- {DAY: 2010-09-23, E0: 0.191, ELEV: 440.0, ES0: 0.155, ET0: 0.198, IRRAD: 14630000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.600000000000001, - TMAX: 20.6, TMIN: 6.6, VAP: 12.24, WIND: 1.077489060546069} -- {DAY: 2010-09-24, E0: 0.20299999999999999, ELEV: 440.0, ES0: 0.17099999999999999, - ET0: 0.207, IRRAD: 12696000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, - TEMP: 14.600000000000001, TMAX: 21.3, TMIN: 7.9, VAP: 12.91, WIND: 1.6521498928373055} -- {DAY: 2010-09-25, E0: 0.072, ELEV: 440.0, ES0: 0.064, ET0: 0.08299999999999999, - IRRAD: 3235000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 12.15, - TMAX: 13.3, TMIN: 11.0, VAP: 12.81, WIND: 1.8676477049465194} -- {DAY: 2010-09-26, E0: 0.118, ELEV: 440.0, ES0: 0.10700000000000001, ET0: 0.11100000000000002, - IRRAD: 5247000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.95, - TMAX: 10.9, TMIN: 7.0, VAP: 9.37, WIND: 2.5859737453105653} -- {DAY: 2010-09-27, E0: 0.181, ELEV: 440.0, ES0: 0.16, ET0: 0.153, IRRAD: 9271000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 8.95, TMAX: 12.4, - TMIN: 5.5, VAP: 9.07, WIND: 3.44796499374742} -- {DAY: 2010-09-28, E0: 0.063, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.057999999999999996, - IRRAD: 3652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 8.25, - TMAX: 9.1, TMIN: 7.4, VAP: 10.45, WIND: 3.0169693695289928} -- {DAY: 2010-09-29, E0: 0.153, ELEV: 440.0, ES0: 0.134, ET0: 0.127, IRRAD: 8714000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.9, TMAX: 12.1, - TMIN: 7.7, VAP: 9.61, WIND: 1.4366520807280918} -- {DAY: 2010-09-30, E0: 0.13999999999999999, ELEV: 440.0, ES0: 0.123, ET0: 0.11299999999999999, - IRRAD: 7718000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.2, - TMAX: 12.3, TMIN: 4.1, VAP: 8.46, WIND: 1.0056564565096642} -- {DAY: 2010-10-01, E0: 0.06, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.071, - IRRAD: 3340000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: .nan, TEMP: 7.55, - TMAX: 10.2, TMIN: 4.9, VAP: 9.54, WIND: 1.221154268618878} -- {DAY: 2010-10-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10200000000000001, - ET0: 0.099, IRRAD: 6112000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, - TEMP: 10.4, TMAX: 13.8, TMIN: 7.0, VAP: 11.16, WIND: 1.5803172888009012} -- {DAY: 2010-10-03, E0: 0.152, ELEV: 440.0, ES0: 0.128, ET0: 0.134, IRRAD: 10165000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 12.9, - TMIN: 9.6, VAP: 11.19, WIND: 3.304299785674611} -- {DAY: 2010-10-04, E0: 0.142, ELEV: 440.0, ES0: 0.118, ET0: 0.125, IRRAD: 10677000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, TMAX: 12.3, - TMIN: 8.7, VAP: 10.96, WIND: 3.735295409893039} -- {DAY: 2010-10-05, E0: 0.121, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.092, - IRRAD: 6490000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 13.2, TMIN: 9.4, VAP: 12.07, WIND: 2.154978121092138} -- {DAY: 2010-10-06, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.074, ET0: 0.077, - IRRAD: 3969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.0, - TMAX: 12.2, TMIN: 9.8, VAP: 12.0, WIND: 2.0113129130193284} -- {DAY: 2010-10-07, E0: 0.072, ELEV: 440.0, ES0: 0.065, ET0: 0.079, IRRAD: 3115000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.2, TMAX: 11.9, - TMIN: 10.5, VAP: 11.94, WIND: 2.370475933201351} -- {DAY: 2010-10-08, E0: 0.178, ELEV: 440.0, ES0: 0.148, ET0: 0.21400000000000002, - IRRAD: 12854000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.700000000000001, - TMAX: 16.1, TMIN: 7.3, VAP: 9.58, WIND: 3.663462805856634} -- {DAY: 2010-10-09, E0: 0.20400000000000001, ELEV: 440.0, ES0: 0.175, ET0: 0.23700000000000002, - IRRAD: 12656000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.600000000000001, - TMAX: 15.3, TMIN: 5.9, VAP: 7.55, WIND: 3.44796499374742} -- {DAY: 2010-10-10, E0: 0.16399999999999998, ELEV: 440.0, ES0: 0.135, ET0: 0.213, - IRRAD: 13447000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.85, - TMAX: 14.0, TMIN: 3.7, VAP: 6.58, WIND: 2.8733041614561836} -- {DAY: 2010-10-11, E0: 0.16, ELEV: 440.0, ES0: 0.131, ET0: 0.21200000000000002, IRRAD: 13109000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.9, TMAX: 14.5, - TMIN: 3.3, VAP: 6.85, WIND: 3.0169693695289928} -- {DAY: 2010-10-12, E0: 0.123, ELEV: 440.0, ES0: 0.096, ET0: 0.16299999999999998, - IRRAD: 13005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.449999999999999, - TMAX: 14.2, TMIN: 0.7, VAP: 7.32, WIND: 2.5141411412741608} -- {DAY: 2010-10-13, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.092, ET0: 0.134, - IRRAD: 11311000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.85, - TMAX: 12.1, TMIN: 1.6, VAP: 7.62, WIND: 2.8733041614561836} -- {DAY: 2010-10-14, E0: 0.073, ELEV: 440.0, ES0: 0.052000000000000005, ET0: 0.10700000000000001, - IRRAD: 10652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.5, - TMAX: 12.4, TMIN: -1.4, VAP: 7.05, WIND: 1.2929868726552827} -- {DAY: 2010-10-15, E0: 0.052000000000000005, ELEV: 440.0, ES0: 0.045, ET0: 0.05, - IRRAD: 3788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.43, SNOWDEPTH: .nan, TEMP: 4.2, - TMAX: 8.6, TMIN: -0.2, VAP: 8.19, WIND: 0.9338238524732597} -- {DAY: 2010-10-16, E0: 0.054000000000000006, ELEV: 440.0, ES0: 0.047, ET0: 0.057999999999999996, - IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.31, SNOWDEPTH: .nan, TEMP: 6.7, - TMAX: 7.5, TMIN: 5.9, VAP: 8.94, WIND: 1.1493216645824735} -- {DAY: 2010-10-17, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.076, ET0: 0.08399999999999999, - IRRAD: 3537000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 6.3, - TMAX: 7.5, TMIN: 5.1, VAP: 7.72, WIND: 2.442308537237756} -- {DAY: 2010-10-18, E0: 0.08499999999999999, ELEV: 440.0, ES0: 0.075, ET0: 0.074, - IRRAD: 5197000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.9, - TMAX: 7.5, TMIN: 2.3, VAP: 7.05, WIND: 1.3648194766916872} -- {DAY: 2010-10-19, E0: 0.061, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.06999999999999999, - IRRAD: 3878000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 4.95, - TMAX: 7.2, TMIN: 2.7, VAP: 7.55, WIND: 2.5859737453105653} -- {DAY: 2010-10-20, E0: 0.068, ELEV: 440.0, ES0: 0.062, ET0: 0.072, IRRAD: 3005000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.52, SNOWDEPTH: .nan, TEMP: 5.449999999999999, - TMAX: 6.6, TMIN: 4.3, VAP: 7.72, WIND: 3.0169693695289928} -- {DAY: 2010-10-21, E0: 0.099, ELEV: 440.0, ES0: 0.089, ET0: 0.10200000000000001, - IRRAD: 5320000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 3.75, - TMAX: 6.1, TMIN: 1.4, VAP: 5.87, WIND: 2.8733041614561836} -- {DAY: 2010-10-22, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.04, ET0: 0.073, IRRAD: 8983000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.1, TMAX: 6.9, - TMIN: -2.7, VAP: 5.7, WIND: 1.5084846847644964} -- {DAY: 2010-10-23, E0: 0.037, ELEV: 440.0, ES0: 0.025, ET0: 0.06, IRRAD: 6012000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.21000000000000002, SNOWDEPTH: .nan, TEMP: 3.6999999999999997, - TMAX: 9.6, TMIN: -2.2, VAP: 7.35, WIND: 1.6521498928373055} -- {DAY: 2010-10-24, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.049, ET0: 0.066, - IRRAD: 2853000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 6.35, - TMAX: 7.6, TMIN: 5.1, VAP: 8.36, WIND: 2.370475933201351} -- {DAY: 2010-10-25, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.05, ET0: 0.05600000000000001, - IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 3.8, - TMAX: 5.6, TMIN: 2.0, VAP: 6.78, WIND: 1.1493216645824735} -- {DAY: 2010-10-26, E0: 0.051000000000000004, ELEV: 440.0, ES0: 0.040999999999999995, - ET0: 0.06, IRRAD: 5809000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, - TEMP: 2.4, TMAX: 6.8, TMIN: -2.0, VAP: 6.07, WIND: 1.1493216645824735} -- {DAY: 2010-10-27, E0: 0.047, ELEV: 440.0, ES0: 0.031, ET0: 0.061, IRRAD: 9014000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.5, TMAX: 8.1, - TMIN: -3.1, VAP: 5.87, WIND: 1.1493216645824735} -- {DAY: 2010-10-28, E0: 0.071, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.08399999999999999, - IRRAD: 7497000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.3999999999999995, - TMAX: 10.6, TMIN: 0.2, VAP: 6.58, WIND: 1.4366520807280918} -- {DAY: 2010-10-29, E0: 0.032, ELEV: 440.0, ES0: 0.012, ET0: 0.087, IRRAD: 9759000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.65, TMAX: 14.4, - TMIN: -1.1, VAP: 6.78, WIND: 1.077489060546069} -- {DAY: 2010-10-30, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.018, ET0: 0.075, - IRRAD: 8668000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.8500000000000005, - TMAX: 11.9, TMIN: -0.2, VAP: 7.01, WIND: 1.3648194766916872} -- {DAY: 2010-10-31, E0: 0.046, ELEV: 440.0, ES0: 0.033, ET0: 0.06899999999999999, - IRRAD: 6399000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.6499999999999995, - TMAX: 11.6, TMIN: 1.7, VAP: 8.06, WIND: 1.72398249687371} -- {DAY: 2010-11-01, E0: 0.073, ELEV: 440.0, ES0: 0.061, ET0: 0.071, IRRAD: 5266000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 14.3, - TMIN: 5.3, VAP: 9.64, WIND: 1.077489060546069} -- {DAY: 2010-11-02, E0: 0.019, ELEV: 440.0, ES0: 0.012, ET0: 0.04, IRRAD: 3367000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 5.45, TMAX: 8.3, - TMIN: 2.6, VAP: 8.87, WIND: 1.8676477049465194} -- {DAY: 2010-11-03, E0: 0.062, ELEV: 440.0, ES0: 0.054000000000000006, ET0: 0.074, - IRRAD: 3638000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 8.4, - TMAX: 11.8, TMIN: 5.0, VAP: 9.74, WIND: 3.1606345776018023} -- {DAY: 2010-11-04, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.11000000000000001, - ET0: 0.141, IRRAD: 1972000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.9, TMAX: 15.4, TMIN: 10.4, VAP: 11.9, WIND: 4.597286658329894} -- {DAY: 2010-11-05, E0: 0.154, ELEV: 440.0, ES0: 0.144, ET0: 0.177, IRRAD: 4424000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.5, TMAX: 14.7, - TMIN: 12.3, VAP: 10.86, WIND: 4.166291034111466} -- {DAY: 2010-11-06, E0: 0.10800000000000001, ELEV: 440.0, ES0: 0.10400000000000001, - ET0: 0.146, IRRAD: 1597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, - TEMP: 11.5, TMAX: 12.3, TMIN: 10.7, VAP: 9.88, WIND: 3.519797597783825} -- {DAY: 2010-11-07, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.03, ET0: 0.056999999999999995, - IRRAD: 1958000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 8.149999999999999, - TMAX: 10.2, TMIN: 6.1, VAP: 9.68, WIND: 1.5803172888009012} -- {DAY: 2010-11-08, E0: 0.037, ELEV: 440.0, ES0: 0.033, ET0: 0.045, IRRAD: 2280000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 4.6, TMAX: 5.6, - TMIN: 3.6, VAP: 7.62, WIND: 1.5084846847644964} -- {DAY: 2010-11-09, E0: 0.032, ELEV: 440.0, ES0: 0.020999999999999998, ET0: 0.048, - IRRAD: 5597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.0, - TMAX: 8.1, TMIN: 1.9, VAP: 7.28, WIND: 1.5084846847644964} -- {DAY: 2010-11-10, E0: 0.032, ELEV: 440.0, ES0: 0.026000000000000002, ET0: 0.03, - IRRAD: 3253000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 2.6999999999999997, - TMAX: 5.8, TMIN: -0.4, VAP: 7.18, WIND: 1.221154268618878} -- {DAY: 2010-11-11, E0: 0.046, ELEV: 440.0, ES0: 0.039, ET0: 0.05500000000000001, - IRRAD: 3562000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.01, SNOWDEPTH: .nan, TEMP: 4.0, - TMAX: 6.3, TMIN: 1.7, VAP: 7.11, WIND: 3.663462805856634} -- {DAY: 2010-11-12, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.02, ET0: 0.040999999999999995, - IRRAD: 3632000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 6.8, - TMAX: 10.0, TMIN: 3.6, VAP: 9.44, WIND: 4.956449678511917} -- {DAY: 2010-11-13, E0: 0.101, ELEV: 440.0, ES0: 0.092, ET0: 0.149, IRRAD: 4082000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.6, TMAX: 16.2, - TMIN: 9.0, VAP: 11.03, WIND: 4.094458430075062} -- {DAY: 2010-11-14, E0: 0.009, ELEV: 440.0, ES0: 0.004, ET0: 0.081, IRRAD: 7485000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 16.8, - TMIN: 5.7, VAP: 9.74, WIND: 1.6521498928373055} -- {DAY: 2010-11-15, E0: 0.040999999999999995, ELEV: 440.0, ES0: 0.032, ET0: 0.06, - IRRAD: 4089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: .nan, TEMP: 8.45, - TMAX: 12.2, TMIN: 4.7, VAP: 9.71, WIND: 2.083145517055733} -- {DAY: 2010-11-16, E0: 0.02, ELEV: 440.0, ES0: 0.018, ET0: 0.047, IRRAD: 1177000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.13, SNOWDEPTH: .nan, TEMP: 5.9, TMAX: 6.0, - TMIN: 5.8, VAP: 8.53, WIND: 2.298643329164947} -- {DAY: 2010-11-17, E0: 0.013000000000000001, ELEV: 440.0, ES0: 0.011, ET0: 0.033, - IRRAD: 1433000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 4.4, - TMAX: 5.2, TMIN: 3.6, VAP: 8.03, WIND: 1.7958151009101146} -- {DAY: 2010-11-18, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.040999999999999995, - IRRAD: 1288000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 4.800000000000001, - TMAX: 4.9, TMIN: 4.7, VAP: 7.89, WIND: 1.5803172888009012} -- {DAY: 2010-11-19, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.03, - IRRAD: 1611000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 3.1500000000000004, - TMAX: 4.9, TMIN: 1.4, VAP: 7.42, WIND: 1.0056564565096642} -- {DAY: 2010-11-20, E0: 0.024, ELEV: 440.0, ES0: 0.019, ET0: 0.03, IRRAD: 2629000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.95, TMAX: 4.3, - TMIN: 1.6, VAP: 6.88, WIND: 1.5084846847644964} -- {DAY: 2010-11-21, E0: 0.025, ELEV: 440.0, ES0: 0.02, ET0: 0.022, IRRAD: 2790000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 2.75, TMAX: 4.2, - TMIN: 1.3, VAP: 7.18, WIND: 3.376132389711016} -- {DAY: 2010-11-22, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.052000000000000005, - ET0: 0.056999999999999995, IRRAD: 1810000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, - SNOWDEPTH: .nan, TEMP: 5.4, TMAX: 7.0, TMIN: 3.8, VAP: 7.79, WIND: 2.8733041614561836} -- {DAY: 2010-11-23, E0: 0.033, ELEV: 440.0, ES0: 0.031, ET0: 0.036, IRRAD: 1270000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.18, SNOWDEPTH: 0.5, TEMP: 0.8500000000000001, - TMAX: 1.3, TMIN: 0.4, VAP: 6.0, WIND: 3.735295409893039} -- {DAY: 2010-11-24, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.032, ET0: 0.034, - IRRAD: 1628000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.12, SNOWDEPTH: 4.0, TEMP: 1.2, - TMAX: 1.9, TMIN: 0.5, VAP: 6.14, WIND: 3.878960617965848} -- {DAY: 2010-11-25, E0: 0.022, ELEV: 440.0, ES0: 0.016, ET0: 0.03, IRRAD: 3374000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 1.0, TEMP: 0.7499999999999999, - TMAX: 2.3, TMIN: -0.8, VAP: 5.66, WIND: 1.8676477049465194} -- {DAY: 2010-11-26, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.024, - IRRAD: 1677000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 2.0, TEMP: -1.3, - TMAX: -0.2, TMIN: -2.4, VAP: 5.23, WIND: 1.221154268618878} -- {DAY: 2010-11-27, E0: 0.024, ELEV: 440.0, ES0: 0.018, ET0: 0.026000000000000002, - IRRAD: 3588000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 2.0, TEMP: -2.0, - TMAX: -0.4, TMIN: -3.6, VAP: 4.28, WIND: 1.221154268618878} -- {DAY: 2010-11-28, E0: 0.024, ELEV: 440.0, ES0: 0.02, ET0: 0.013000000000000001, - IRRAD: 3194000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 2.0, TEMP: -3.85, - TMAX: -1.5, TMIN: -6.2, VAP: 4.35, WIND: 2.370475933201351} -- {DAY: 2010-11-29, E0: 0.028000000000000004, ELEV: 440.0, ES0: 0.024, ET0: 0.019, - IRRAD: 2553000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 16.0, TEMP: -1.95, - TMAX: -1.0, TMIN: -2.9, VAP: 4.96, WIND: 1.5803172888009012} -- {DAY: 2010-11-30, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.024, ET0: 0.03, - IRRAD: 2146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 19.0, TEMP: -3.8000000000000003, - TMAX: -3.2, TMIN: -4.4, VAP: 3.98, WIND: 2.370475933201351} -- {DAY: 2010-12-01, E0: 0.03, ELEV: 440.0, ES0: 0.028000000000000004, ET0: 0.036, - IRRAD: 1406000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 20.0, TEMP: -6.0, - TMAX: -4.8, TMIN: -7.2, VAP: 3.37, WIND: 4.453621450257085} -- {DAY: 2010-12-02, E0: 0.023, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, - IRRAD: 3010000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -7.95, - TMAX: -5.5, TMIN: -10.4, VAP: 2.87, WIND: 1.939480308982924} -- {DAY: 2010-12-03, E0: 0.019, ELEV: 440.0, ES0: 0.015, ET0: 0.015, IRRAD: 2926000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.100000000000001, - TMAX: -5.4, TMIN: -10.8, VAP: 2.83, WIND: 0.7901586444004506} -- {DAY: 2010-12-04, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.015, - IRRAD: 1788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.6, - TMAX: -5.1, TMIN: -12.1, VAP: 3.14, WIND: 2.0113129130193284} -- {DAY: 2010-12-05, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.01, - IRRAD: 2315000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: 18.0, TEMP: -7.35, - TMAX: -3.7, TMIN: -11.0, VAP: 3.61, WIND: 1.939480308982924} -- {DAY: 2010-12-06, E0: 0.008, ELEV: 440.0, ES0: 0.006, ET0: 0.017, IRRAD: 1609000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.0, SNOWDEPTH: 23.0, TEMP: -1.9999999999999998, - TMAX: 0.1, TMIN: -4.1, VAP: 5.26, WIND: 1.1493216645824735} -- {DAY: 2010-12-07, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.019, IRRAD: 1671000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 25.0, TEMP: 0.0, TMAX: 1.5, - TMIN: -1.5, VAP: 5.93, WIND: 1.0056564565096642} -- {DAY: 2010-12-08, E0: 0.02, ELEV: 440.0, ES0: 0.016, ET0: 0.022, IRRAD: 1933000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 21.0, TEMP: 2.6500000000000004, - TMAX: 4.9, TMIN: 0.4, VAP: 7.11, WIND: 1.5803172888009012} -- {DAY: 2010-12-09, E0: 0.020999999999999998, ELEV: 440.0, ES0: 0.018, ET0: 0.024, - IRRAD: 1529000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: 14.0, TEMP: -2.0, - TMAX: -1.2, TMIN: -2.8, VAP: 4.92, WIND: 4.597286658329894} -- {DAY: 2010-12-10, E0: 0.018, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.028999999999999998, - IRRAD: 3723000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: 14.0, - TEMP: -2.45, TMAX: -2.0, TMIN: -2.9, VAP: 4.28, WIND: 3.0888019735653973} -- {DAY: 2010-12-11, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, - IRRAD: 1355000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: 16.0, TEMP: -0.30000000000000004, - TMAX: 2.3, TMIN: -2.9, VAP: 6.07, WIND: 4.453621450257085} -- {DAY: 2010-12-12, E0: 0.039, ELEV: 440.0, ES0: 0.036, ET0: 0.043, IRRAD: 1668000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.24, SNOWDEPTH: 9.0, TEMP: 1.0499999999999998, - TMAX: 1.4, TMIN: 0.7, VAP: 5.8, WIND: 3.807128013929443} -- {DAY: 2010-12-13, E0: 0.006, ELEV: 440.0, ES0: 0.003, ET0: 0.022, IRRAD: 4070000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 9.0, TEMP: -5.9, TMAX: -5.6, - TMIN: -6.2, VAP: 3.17, WIND: 2.5141411412741608} -- {DAY: 2010-12-14, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.008, - IRRAD: 2280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: 9.0, TEMP: -8.25, - TMAX: -5.4, TMIN: -11.1, VAP: 3.27, WIND: 2.083145517055733} -- {DAY: 2010-12-15, E0: 0.022, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, - IRRAD: 1877000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 9.0, TEMP: -6.65, - TMAX: -6.3, TMIN: -7.0, VAP: 3.34, WIND: 2.801471557419779} -- {DAY: 2010-12-16, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.01, IRRAD: 3137000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 11.0, TEMP: -9.1, - TMAX: -6.2, TMIN: -12.0, VAP: 2.8, WIND: 2.154978121092138} -- {DAY: 2010-12-17, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.016, IRRAD: 1541000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 13.0, TEMP: -7.25, TMAX: -4.9, - TMIN: -9.6, VAP: 3.41, WIND: 1.939480308982924} -- {DAY: 2010-12-18, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, - IRRAD: 3633000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -7.3, - TMAX: -4.1, TMIN: -10.5, VAP: 3.03, WIND: 1.5084846847644964} -- {DAY: 2010-12-19, E0: 0.006, ELEV: 440.0, ES0: 0.004, ET0: 0.009, IRRAD: 1737000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.29, SNOWDEPTH: 13.0, TEMP: -6.75, TMAX: -0.6, - TMIN: -12.9, VAP: 4.01, WIND: 2.154978121092138} -- {DAY: 2010-12-20, E0: 0.036, ELEV: 440.0, ES0: 0.033, ET0: 0.048, IRRAD: 1538000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.41, SNOWDEPTH: 13.0, TEMP: 0.7, TMAX: 2.9, - TMIN: -1.5, VAP: 5.4, WIND: 2.65780634934697} -- {DAY: 2010-12-21, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.018, - IRRAD: 2103000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 13.0, TEMP: -0.19999999999999996, - TMAX: 3.5, TMIN: -3.9, VAP: 5.8, WIND: 1.2929868726552827} -- {DAY: 2010-12-22, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.014000000000000002, - IRRAD: 2105000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -0.44999999999999996, - TMAX: 1.5, TMIN: -2.4, VAP: 5.66, WIND: 1.221154268618878} -- {DAY: 2010-12-23, E0: 0.019, ELEV: 440.0, ES0: 0.016, ET0: 0.014000000000000002, - IRRAD: 2239000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 12.0, TEMP: -0.5, - TMAX: 2.1, TMIN: -3.1, VAP: 5.66, WIND: 1.2929868726552827} -- {DAY: 2010-12-24, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.028999999999999998, - IRRAD: 1140000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: 13.0, TEMP: 0.3, - TMAX: 1.5, TMIN: -0.9, VAP: 5.8, WIND: 2.442308537237756} -- {DAY: 2010-12-25, E0: 0.034, ELEV: 440.0, ES0: 0.032, ET0: 0.031, IRRAD: 2108000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 16.0, TEMP: -4.65, TMAX: -4.5, - TMIN: -4.8, VAP: 3.57, WIND: 2.298643329164947} -- {DAY: 2010-12-26, E0: 0.012, ELEV: 440.0, ES0: 0.009, ET0: 0.012, IRRAD: 2899000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: 16.0, TEMP: -9.95, TMAX: -7.9, - TMIN: -12.0, VAP: 2.6, WIND: 1.6521498928373055} -- {DAY: 2010-12-27, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.017, IRRAD: 1694000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: 16.0, TEMP: -6.5, TMAX: -4.2, - TMIN: -8.8, VAP: 3.54, WIND: 1.72398249687371} -- {DAY: 2010-12-28, E0: 0.016, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.023, - IRRAD: 3146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 16.0, TEMP: -4.65, - TMAX: -2.7, TMIN: -6.6, VAP: 3.41, WIND: 1.4366520807280918} -- {DAY: 2010-12-29, E0: 0.004, ELEV: 440.0, ES0: 0.004, ET0: 0.006, IRRAD: 3716000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 15.0, TEMP: -11.35, TMAX: -8.7, - TMIN: -14.0, VAP: 2.09, WIND: 0.6464934363276413} -- {DAY: 2010-12-30, E0: 0.0, ELEV: 440.0, ES0: 0.0, ET0: 0.0, IRRAD: 5266000.0, LAT: 49.43613, - LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -13.5, TMAX: -8.4, TMIN: -18.6, - VAP: 1.89, WIND: 0.6464934363276413} -- {DAY: 2010-12-31, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.002, - IRRAD: 1689000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 22.0, TEMP: -9.15, - TMAX: -3.4, TMIN: -14.9, VAP: 3.91, WIND: 1.72398249687371} diff --git a/new_leaf.py b/new_leaf.py deleted file mode 100644 index ca8f8bb..0000000 --- a/new_leaf.py +++ /dev/null @@ -1,524 +0,0 @@ -"""Leaf dynamics for the WOFOST crop model.""" - -import datetime -import torch -from pcse.base import ParamTemplate -from pcse.base import RatesTemplate -from pcse.base import SimulationObject -from pcse.base import StatesTemplate -from pcse.base.parameter_providers import ParameterProvider -from pcse.base.variablekiosk import VariableKiosk -from pcse.base.weather import WeatherDataContainer -from pcse.decorators import prepare_rates -from pcse.decorators import prepare_states -from pcse.traitlets import Any -from diffwofost.physical_models.utils import AfgenTrait -from diffwofost.physical_models.utils import _broadcast_to -from diffwofost.physical_models.utils import _get_drv -from diffwofost.physical_models.utils import _get_params_shape - - -class WOFOST_Leaf_Dynamics(SimulationObject): - """Leaf dynamics for the WOFOST crop model. - - Implementation of biomass partitioning to leaves, growth and senenscence - of leaves. WOFOST keeps track of the biomass that has been partitioned to - the leaves for each day (variable `LV`), which is called a leaf class). - For each leaf class the leaf age (variable 'LVAGE') and specific leaf area - (variable `SLA`) are also registered. Total living leaf biomass is - calculated by summing the biomass values for all leaf classes. Similarly, - leaf area is calculated by summing leaf biomass times specific leaf area - (`LV` * `SLA`). - - Senescense of the leaves can occur as a result of physiological age, - drought stress or self-shading. - - **Simulation parameters** (provide in cropdata dictionary) - - | Name | Description | Type | Unit | - |--------|------------------------------------------------------------------ |------|------------| - | RGRLAI | Maximum relative increase in LAI. |SCr | ha ha⁻¹ d⁻¹| - | SPAN | Life span of leaves growing at 35 Celsius |SCr | d | - | TBASE | Lower threshold temp. for ageing of leaves |SCr | C | - | PERDL | Max. relative death rate of leaves due to water stress |SCr | | - | TDWI | Initial total crop dry weight |SCr | kg ha⁻¹ | - | KDIFTB | Extinction coefficient for diffuse visible light as function of DVS|TCr | | - | SLATB | Specific leaf area as a function of DVS |TCr | ha kg⁻¹ | - - **State variables** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|-------------| - | LV | Leaf biomass per leaf class | N | kg ha⁻¹ | - | SLA | Specific leaf area per leaf class | N | ha kg⁻¹ | - | LVAGE | Leaf age per leaf class | N | d | - | LVSUM | Sum of LV | N | kg ha⁻¹ | - | LAIEM | LAI at emergence | N | - | - | LASUM | Total leaf area as sum of LV*SLA, not including stem and pod area | N | - | - | LAIEXP | LAI value under theoretical exponential growth | N | - | - | LAIMAX | Maximum LAI reached during growth cycle | N | - | - | LAI | Leaf area index, including stem and pod area | Y | - | - | WLV | Dry weight of living leaves | Y | kg ha⁻¹ | - | DWLV | Dry weight of dead leaves | N | kg ha⁻¹ | - | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | - - **Rate variables** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|---------------| - | GRLV | Growth rate leaves | N | kg ha⁻¹ d⁻¹ | - | DSLV1 | Death rate leaves due to water stress | N | kg ha⁻¹ d⁻¹ | - | DSLV2 | Death rate leaves due to self-shading | N | kg ha⁻¹ d⁻¹ | - | DSLV3 | Death rate leaves due to frost kill | N | kg ha⁻¹ d⁻¹ | - | DSLV | Maximum of DSLV1, DSLV2, DSLV3 | N | kg ha⁻¹ d⁻¹ | - | DALV | Death rate leaves due to aging | N | kg ha⁻¹ d⁻¹ | - | DRLV | Death rate leaves as a combination of DSLV and DALV | N | kg ha⁻¹ d⁻¹ | - | SLAT | Specific leaf area for current time step, adjusted for source/sink limited leaf expansion rate | N | ha kg⁻¹ | - | FYSAGE | Increase in physiological leaf age | N | - | - | GLAIEX | Sink-limited leaf expansion rate (exponential curve) | N | ha ha⁻¹ d⁻¹ | - | GLASOL | Source-limited leaf expansion rate (biomass increase) | N | ha ha⁻¹ d⁻¹ | - - **External dependencies** - - | Name | Description | Provided by | Unit | - |-----------|-----------------------------------|--------------------------------|----------------| - | DVS | Crop development stage | DVS_Phenology | - | - | FL | Fraction biomass to leaves | DVS_Partitioning | - | - | FR | Fraction biomass to roots | DVS_Partitioning | - | - | SAI | Stem area index | WOFOST_Stem_Dynamics | - | - | PAI | Pod area index | WOFOST_Storage_Organ_Dynamics | - | - | TRA | Transpiration rate | Evapotranspiration | cm day⁻¹ ? | - | TRAMX | Maximum transpiration rate | Evapotranspiration | cm day⁻¹ ? | - | ADMI | Above-ground dry matter increase | CropSimulation | kg ha⁻¹ d⁻¹ | - | RFTRA | Reduction factor for transpiration (water & oxygen) | Y | - | - | RF_FROST | Reduction factor frost kill | FROSTOL (optional) | - | - - **Outputs** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|-------------| - | LAI | Leaf area index, including stem and pod area | Y | - | - | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | - - **Gradient mapping (which parameters have a gradient):** - - | Output | Parameters influencing it | - |--------|------------------------------------------| - | LAI | TDWI, SPAN, RGRLAI, TBASE, KDIFTB, SLATB | - | TWLV | TDWI, PERDL | - - [!NOTE] - Notice that the following gradients are zero: - - ∂SPAN/∂LAI - - ∂PERDL/∂TWLV - - ∂KDIFTB/∂LAI - """ # noqa: E501 - - # The following parameters are used to initialize and control the arrays that store information - # on the leaf classes during the time integration: leaf area, age, and biomass. - START_DATE = None # Start date of the simulation - MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) - params_shape = None # Shape of the parameters tensors - - # Default values that can be overridden before instantiation - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - dtype = torch.float64 - - class Parameters(ParamTemplate): - RGRLAI = Any() - SPAN = Any() - TBASE = Any() - PERDL = Any() - TDWI = Any() - SLATB = AfgenTrait() - KDIFTB = AfgenTrait() - - def __init__(self, parvalues, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device - self.RGRLAI = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.SPAN = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.TBASE = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.PERDL = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.TDWI = [torch.tensor(-99.0, dtype=dtype, device=device)] - - # Call parent init - super().__init__(parvalues) - - class StateVariables(StatesTemplate): - LV = Any() - SLA = Any() - LVAGE = Any() - LAIEM = Any() - LASUM = Any() - LAIEXP = Any() - LAIMAX = Any() - LAI = Any() - WLV = Any() - DWLV = Any() - TWLV = Any() - - def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device if not in kwargs - if "LV" not in kwargs: - self.LV = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "SLA" not in kwargs: - self.SLA = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "LVAGE" not in kwargs: - self.LVAGE = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "LAIEM" not in kwargs: - self.LAIEM = torch.tensor(-99.0, dtype=dtype, device=device) - if "LASUM" not in kwargs: - self.LASUM = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAIEXP" not in kwargs: - self.LAIEXP = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAIMAX" not in kwargs: - self.LAIMAX = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAI" not in kwargs: - self.LAI = torch.tensor(-99.0, dtype=dtype, device=device) - if "WLV" not in kwargs: - self.WLV = torch.tensor(-99.0, dtype=dtype, device=device) - if "DWLV" not in kwargs: - self.DWLV = torch.tensor(-99.0, dtype=dtype, device=device) - if "TWLV" not in kwargs: - self.TWLV = torch.tensor(-99.0, dtype=dtype, device=device) - - # Call parent init - super().__init__(kiosk, publish=publish, **kwargs) - - class RateVariables(RatesTemplate): - GRLV = Any() - DSLV1 = Any() - DSLV2 = Any() - DSLV3 = Any() - DSLV = Any() - DALV = Any() - DRLV = Any() - SLAT = Any() - FYSAGE = Any() - GLAIEX = Any() - GLASOL = Any() - - def __init__(self, kiosk, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device - self.GRLV = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV1 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV2 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV3 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV = torch.tensor(0.0, dtype=dtype, device=device) - self.DALV = torch.tensor(0.0, dtype=dtype, device=device) - self.DRLV = torch.tensor(0.0, dtype=dtype, device=device) - self.SLAT = torch.tensor(0.0, dtype=dtype, device=device) - self.FYSAGE = torch.tensor(0.0, dtype=dtype, device=device) - self.GLAIEX = torch.tensor(0.0, dtype=dtype, device=device) - self.GLASOL = torch.tensor(0.0, dtype=dtype, device=device) - - # Call parent init - super().__init__(kiosk) - - def initialize( - self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider - ) -> None: - """Initialize the WOFOST_Leaf_Dynamics simulation object. - - Args: - day (datetime.date): The starting date of the simulation. - kiosk (VariableKiosk): A container for registering and publishing - (internal and external) state variables. See PCSE documentation for - details. - parvalues (ParameterProvider): A dictionary-like container holding - all parameter sets (crop, soil, site) as key/value. The values are - arrays or scalars. See PCSE documentation for details. - """ - self.START_DATE = day - self.kiosk = kiosk - # TODO check if parvalues are already torch.nn.Parameters - self.params = self.Parameters(parvalues) - self.rates = self.RateVariables(kiosk) - - # Create scalar constants once to avoid numerical deviations - self._zero = torch.tensor(0.0, dtype=self.dtype, device=self.device) - self._epsilon = torch.tensor(1e-12, dtype=self.dtype, device=self.device) - self._sigmoid_sharpness = torch.tensor(1e-16, dtype=self.dtype, device=self.device) - self._sigmoid_epsilon = torch.tensor(1e-14, dtype=self.dtype, device=self.device) - - # CALCULATE INITIAL STATE VARIABLES - # check for required external variables - _exist_required_external_variables(self.kiosk) - # TODO check if external variables are already torch tensors - - FL = self.kiosk["FL"] - FR = self.kiosk["FR"] - DVS = self.kiosk["DVS"] - - params = self.params - self.params_shape = _get_params_shape(params) - - # Initial leaf biomass - WLV = (params.TDWI * (1 - FR)) * FL - DWLV = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) - TWLV = WLV + DWLV - - # Initialize leaf classes (SLA, age and weight) - SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) - LVAGE = torch.zeros( - (*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device - ) - LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) - SLA[..., 0] = params.SLATB(DVS) - LV[..., 0] = WLV - - # Initial values for leaf area - LAIEM = LV[..., 0] * SLA[..., 0] - LASUM = LAIEM - LAIEXP = LAIEM - LAIMAX = LAIEM - LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] - - # Initialize StateVariables object - self.states = self.StateVariables( - kiosk, - publish=["LAI", "TWLV", "WLV"], - LV=LV, - SLA=SLA, - LVAGE=LVAGE, - LAIEM=LAIEM, - LASUM=LASUM, - LAIEXP=LAIEXP, - LAIMAX=LAIMAX, - LAI=LAI, - WLV=WLV, - DWLV=DWLV, - TWLV=TWLV, - ) - - def _calc_LAI(self): - # Total leaf area Index as sum of leaf, pod and stem area - SAI = self.kiosk["SAI"] - PAI = self.kiosk["PAI"] - total_LAI = self.states.LASUM + SAI + PAI - return total_LAI - - @prepare_rates - def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: - """Calculate the rates of change for the leaf dynamics. - - Args: - day (datetime.date, optional): The current date of the simulation. - drv (WeatherDataContainer, optional): A dictionary-like container holding - weather data elements as key/value. The values are - arrays or scalars. See PCSE documentation for details. - """ - r = self.rates - s = self.states - p = self.params - k = self.kiosk - - # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask - # A mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) - dvs_mask = (DVS >= 0).to(dtype=self.dtype) - - # Growth rate leaves - # weight of new leaves - r.GRLV = dvs_mask * k.ADMI * k.FL - - # death of leaves due to water/oxygen stress - r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL - - # death due to self shading cause by high LAI - DVS = self.kiosk["DVS"] - LAICR = 3.2 / p.KDIFTB(DVS) - r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) - - # Death of leaves due to frost damage as determined by - # Reduction Factor Frost "RF_FROST" - if "RF_FROST" in self.kiosk: - r.DSLV3 = s.WLV * k.RF_FROST - else: - r.DSLV3 = torch.zeros_like(s.WLV, dtype=self.dtype) - - r.DSLV3 = dvs_mask * r.DSLV3 - - # leaf death equals maximum of water stress, shading and frost - r.DSLV = torch.maximum(torch.maximum(r.DSLV1, r.DSLV2), r.DSLV3) - r.DSLV = dvs_mask * r.DSLV - - # Determine how much leaf biomass classes have to die in states.LV, - # given the a life span > SPAN, these classes will be accumulated - # in DALV. - # Note that the actual leaf death is imposed on the array LV during the - # state integration step. - tSPAN = _broadcast_to( - p.SPAN, s.LVAGE.shape, dtype=self.dtype, device=self.device - ) # Broadcast to same shape - - # Using a sigmoid here instead of a conditional statement on the value of - # SPAN because the latter would not allow for the gradient to be tracked. - # the if statement `p.SPAN.requires_grad` to avoid unnecessary - # approximation when SPAN is not a learnable parameter. - # TODO: sharpness can be exposed as a parameter - if p.SPAN.requires_grad: - # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very - # small and mask should be 1 - # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is - # equal to zero and mask should be 0.0 - span_mask = torch.sigmoid( - (s.LVAGE - tSPAN - self._sigmoid_epsilon) / self._sigmoid_sharpness - ).to(dtype=self.dtype) - else: - span_mask = (s.LVAGE > tSPAN).to(dtype=self.dtype) - - r.DALV = torch.sum(span_mask * s.LV, dim=-1) - r.DALV = dvs_mask * r.DALV - - # Total death rate leaves - r.DRLV = torch.maximum(r.DSLV, r.DALV) - - # Get the temperature from the drv - TEMP = _get_drv(drv.TEMP, self.params_shape) - - # physiologic ageing of leaves per time step - TBASE = _broadcast_to(p.TBASE, self.params_shape, dtype=self.dtype, device=self.device) - FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) - r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) - - # specific leaf area of leaves per time step - r.SLAT = dvs_mask * p.SLATB(DVS) - - # leaf area not to exceed exponential growth curve - is_lai_exp = s.LAIEXP < 6.0 - DTEFF = torch.clamp(TEMP - TBASE, 0.0) - - # NOTE: conditional statements do not allow for the gradient to be - # tracked through the condition. Thus, the gradient with respect to - # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) - # are expected to be incorrect. - r.GLAIEX = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), - self._zero, - ) - - # source-limited increase in leaf area - r.GLASOL = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), - self._zero, - ) - - # sink-limited increase in leaf area - GLA = torch.minimum(r.GLAIEX, r.GLASOL) - - # adjustment of specific leaf area of youngest leaf class - r.SLAT = torch.where( - dvs_mask.bool(), - torch.where( - is_lai_exp & (r.GRLV > self._epsilon), GLA / (r.GRLV + self._epsilon), r.SLAT - ), - self._zero, - ) - - @prepare_states - def integrate(self, day: datetime.date, delt=1.0) -> None: - """Integrate the leaf dynamics state variables. - - Args: - day (datetime.date, optional): The current date of the simulation. - delt (float, optional): The time step for integration. Defaults to 1.0. - """ - # TODO check if DVS < 0 and skip integration needed - rates = self.rates - states = self.states - - # --------- leave death --------- - tLV = states.LV.clone() - tSLA = states.SLA.clone() - tLVAGE = states.LVAGE.clone() - tDRLV = _broadcast_to(rates.DRLV, tLV.shape, dtype=self.dtype, device=self.device) - - # Leaf death is imposed on leaves from the oldest ones. - # Calculate the cumulative sum of weights after leaf death, and - # find out which leaf classes are dead (negative weights) - weight_cumsum = tLV.cumsum(dim=-1) - tDRLV - is_alive = weight_cumsum >= 0 - - # Adjust value of oldest leaf class, i.e. the first non-zero - # weight along the time axis (the last dimension). - # Cast argument to int because torch.argmax requires it to be numeric - idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True).to( - device=self.device - ) - new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) - tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) - - # Integration of physiological age - # Zero out all dead leaf classes - # NOTE: conditional statements do not allow for the gradient to be - # tracked through the condition. Thus, the gradient with respect to - # parameters that contribute to `is_alive` are expected to be incorrect. - tLV = torch.where(is_alive, tLV, 0.0) - tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) - tLVAGE = torch.where(is_alive, tLVAGE, 0.0) - tSLA = torch.where(is_alive, tSLA, 0.0) - - # --------- leave growth --------- - idx = int((day - self.START_DATE).days / delt) - tLV[..., idx] = rates.GRLV - tSLA[..., idx] = rates.SLAT - tLVAGE[..., idx] = 0.0 - - # calculation of new leaf area - states.LASUM = torch.sum(tLV * tSLA, dim=-1) - states.LAI = self._calc_LAI() - states.LAIMAX = torch.maximum(states.LAI, states.LAIMAX) - - # exponential growth curve - states.LAIEXP = states.LAIEXP + rates.GLAIEX - - # Update leaf biomass states - states.WLV = torch.sum(tLV, dim=-1) - states.DWLV = states.DWLV + rates.DRLV - states.TWLV = states.WLV + states.DWLV - - # Store final leaf biomass deques - self.states.LV = tLV - self.states.SLA = tSLA - self.states.LVAGE = tLVAGE - - -def _exist_required_external_variables(kiosk): - """Check if all required external variables are available in the kiosk. - - Args: - kiosk (VariableKiosk): The variable kiosk to check. - - Raises: - ValueError: If any required external variable is missing. - - """ - required_external_vars_at_init = ["DVS", "FL", "FR", "SAI", "PAI"] - for var in required_external_vars_at_init: - if var not in kiosk: - raise ValueError( - f"Required external variables '{var}' is missing in the kiosk." - f" Ensure that all required variables {required_external_vars_at_init}" - " are provided." - ) diff --git a/old_leaf_dynamics.py b/old_leaf_dynamics.py deleted file mode 100644 index 4363670..0000000 --- a/old_leaf_dynamics.py +++ /dev/null @@ -1,436 +0,0 @@ -"""Leaf dynamics for the WOFOST crop model.""" - -import datetime -import torch -from pcse.base import ParamTemplate -from pcse.base import RatesTemplate -from pcse.base import SimulationObject -from pcse.base import StatesTemplate -from pcse.base.parameter_providers import ParameterProvider -from pcse.base.variablekiosk import VariableKiosk -from pcse.base.weather import WeatherDataContainer -from pcse.decorators import prepare_rates -from pcse.decorators import prepare_states -from pcse.traitlets import Any -from diffwofost.physical_models.utils import AfgenTrait -from diffwofost.physical_models.utils import _broadcast_to -from diffwofost.physical_models.utils import _get_drv -from diffwofost.physical_models.utils import _get_params_shape - -DTYPE = torch.float64 # Default data type for tensors in this module - - -class WOFOST_Leaf_Dynamics(SimulationObject): - """Leaf dynamics for the WOFOST crop model. - - Implementation of biomass partitioning to leaves, growth and senenscence - of leaves. WOFOST keeps track of the biomass that has been partitioned to - the leaves for each day (variable `LV`), which is called a leaf class). - For each leaf class the leaf age (variable 'LVAGE') and specific leaf area - (variable `SLA`) are also registered. Total living leaf biomass is - calculated by summing the biomass values for all leaf classes. Similarly, - leaf area is calculated by summing leaf biomass times specific leaf area - (`LV` * `SLA`). - - Senescense of the leaves can occur as a result of physiological age, - drought stress or self-shading. - - **Simulation parameters** (provide in cropdata dictionary) - - | Name | Description | Type | Unit | - |--------|------------------------------------------------------------------ |------|------------| - | RGRLAI | Maximum relative increase in LAI. |SCr | ha ha⁻¹ d⁻¹| - | SPAN | Life span of leaves growing at 35 Celsius |SCr | d | - | TBASE | Lower threshold temp. for ageing of leaves |SCr | C | - | PERDL | Max. relative death rate of leaves due to water stress |SCr | | - | TDWI | Initial total crop dry weight |SCr | kg ha⁻¹ | - | KDIFTB | Extinction coefficient for diffuse visible light as function of DVS|TCr | | - | SLATB | Specific leaf area as a function of DVS |TCr | ha kg⁻¹ | - - **State variables** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|-------------| - | LV | Leaf biomass per leaf class | N | kg ha⁻¹ | - | SLA | Specific leaf area per leaf class | N | ha kg⁻¹ | - | LVAGE | Leaf age per leaf class | N | d | - | LVSUM | Sum of LV | N | kg ha⁻¹ | - | LAIEM | LAI at emergence | N | - | - | LASUM | Total leaf area as sum of LV*SLA, not including stem and pod area | N | - | - | LAIEXP | LAI value under theoretical exponential growth | N | - | - | LAIMAX | Maximum LAI reached during growth cycle | N | - | - | LAI | Leaf area index, including stem and pod area | Y | - | - | WLV | Dry weight of living leaves | Y | kg ha⁻¹ | - | DWLV | Dry weight of dead leaves | N | kg ha⁻¹ | - | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | - - **Rate variables** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|---------------| - | GRLV | Growth rate leaves | N | kg ha⁻¹ d⁻¹ | - | DSLV1 | Death rate leaves due to water stress | N | kg ha⁻¹ d⁻¹ | - | DSLV2 | Death rate leaves due to self-shading | N | kg ha⁻¹ d⁻¹ | - | DSLV3 | Death rate leaves due to frost kill | N | kg ha⁻¹ d⁻¹ | - | DSLV | Maximum of DSLV1, DSLV2, DSLV3 | N | kg ha⁻¹ d⁻¹ | - | DALV | Death rate leaves due to aging | N | kg ha⁻¹ d⁻¹ | - | DRLV | Death rate leaves as a combination of DSLV and DALV | N | kg ha⁻¹ d⁻¹ | - | SLAT | Specific leaf area for current time step, adjusted for source/sink limited leaf expansion rate | N | ha kg⁻¹ | - | FYSAGE | Increase in physiological leaf age | N | - | - | GLAIEX | Sink-limited leaf expansion rate (exponential curve) | N | ha ha⁻¹ d⁻¹ | - | GLASOL | Source-limited leaf expansion rate (biomass increase) | N | ha ha⁻¹ d⁻¹ | - - **External dependencies** - - | Name | Description | Provided by | Unit | - |-----------|-----------------------------------|--------------------------------|----------------| - | DVS | Crop development stage | DVS_Phenology | - | - | FL | Fraction biomass to leaves | DVS_Partitioning | - | - | FR | Fraction biomass to roots | DVS_Partitioning | - | - | SAI | Stem area index | WOFOST_Stem_Dynamics | - | - | PAI | Pod area index | WOFOST_Storage_Organ_Dynamics | - | - | TRA | Transpiration rate | Evapotranspiration | cm day⁻¹ ? | - | TRAMX | Maximum transpiration rate | Evapotranspiration | cm day⁻¹ ? | - | ADMI | Above-ground dry matter increase | CropSimulation | kg ha⁻¹ d⁻¹ | - | RFTRA | Reduction factor for transpiration (water & oxygen) | Y | - | - | RF_FROST | Reduction factor frost kill | FROSTOL (optional) | - | - - **Outputs** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|-------------| - | LAI | Leaf area index, including stem and pod area | Y | - | - | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | - - **Gradient mapping (which parameters have a gradient):** - - | Output | Parameters influencing it | - |--------|------------------------------------------| - | LAI | TDWI, SPAN, RGRLAI, TBASE, KDIFTB, SLATB | - | TWLV | TDWI, PERDL | - - [!NOTE] - Notice that the following gradients are zero: - - ∂SPAN/∂LAI - - ∂PERDL/∂TWLV - - ∂KDIFTB/∂LAI - """ # noqa: E501 - - # The following parameters are used to initialize and control the arrays that store information - # on the leaf classes during the time integration: leaf area, age, and biomass. - START_DATE = None # Start date of the simulation - MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) - params_shape = None # Shape of the parameters tensors - - class Parameters(ParamTemplate): - RGRLAI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SPAN = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TBASE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - PERDL = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TDWI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SLATB = AfgenTrait() - KDIFTB = AfgenTrait() - - class StateVariables(StatesTemplate): - LV = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SLA = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - LVAGE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - LAIEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LASUM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAIEXP = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAIMAX = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAI = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - WLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - DWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - TWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - - class RateVariables(RatesTemplate): - GRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV1 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV2 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV3 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DALV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - SLAT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - FYSAGE = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GLAIEX = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GLASOL = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - - def initialize( - self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider - ) -> None: - """Initialize the WOFOST_Leaf_Dynamics simulation object. - - Args: - day (datetime.date): The starting date of the simulation. - kiosk (VariableKiosk): A container for registering and publishing - (internal and external) state variables. See PCSE documentation for - details. - parvalues (ParameterProvider): A dictionary-like container holding - all parameter sets (crop, soil, site) as key/value. The values are - arrays or scalars. See PCSE documentation for details. - """ - self.START_DATE = day - self.kiosk = kiosk - # TODO check if parvalues are already torch.nn.Parameters - self.params = self.Parameters(parvalues) - self.rates = self.RateVariables(kiosk) - - # CALCULATE INITIAL STATE VARIABLES - # check for required external variables - _exist_required_external_variables(self.kiosk) - # TODO check if external variables are already torch tensors - - FL = self.kiosk["FL"] - FR = self.kiosk["FR"] - DVS = self.kiosk["DVS"] - - params = self.params - self.params_shape = _get_params_shape(params) - - # Initial leaf biomass - WLV = (params.TDWI * (1 - FR)) * FL - DWLV = torch.zeros(self.params_shape, dtype=DTYPE) - TWLV = WLV + DWLV - - # Initialize leaf classes (SLA, age and weight) - SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - LVAGE = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - SLA[..., 0] = params.SLATB(DVS) - LV[..., 0] = WLV - - # Initial values for leaf area - LAIEM = LV[..., 0] * SLA[..., 0] - LASUM = LAIEM - LAIEXP = LAIEM - LAIMAX = LAIEM - LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] - - # Initialize StateVariables object - self.states = self.StateVariables( - kiosk, - publish=["LAI", "TWLV", "WLV"], - LV=LV, - SLA=SLA, - LVAGE=LVAGE, - LAIEM=LAIEM, - LASUM=LASUM, - LAIEXP=LAIEXP, - LAIMAX=LAIMAX, - LAI=LAI, - WLV=WLV, - DWLV=DWLV, - TWLV=TWLV, - ) - - def _calc_LAI(self): - # Total leaf area Index as sum of leaf, pod and stem area - SAI = self.kiosk["SAI"] - PAI = self.kiosk["PAI"] - total_LAI = self.states.LASUM + SAI + PAI - return total_LAI - - @prepare_rates - def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: - """Calculate the rates of change for the leaf dynamics. - - Args: - day (datetime.date, optional): The current date of the simulation. - drv (WeatherDataContainer, optional): A dictionary-like container holding - weather data elements as key/value. The values are - arrays or scalars. See PCSE documentation for details. - """ - r = self.rates - s = self.states - p = self.params - k = self.kiosk - - # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask - # A mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=DTYPE) - dvs_mask = (DVS >= 0).to(dtype=DTYPE) - - # Growth rate leaves - # weight of new leaves - r.GRLV = dvs_mask * k.ADMI * k.FL - - # death of leaves due to water/oxygen stress - r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL - - # death due to self shading cause by high LAI - DVS = self.kiosk["DVS"] - LAICR = 3.2 / p.KDIFTB(DVS) - r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) - - # Death of leaves due to frost damage as determined by - # Reduction Factor Frost "RF_FROST" - if "RF_FROST" in self.kiosk: - r.DSLV3 = s.WLV * k.RF_FROST - else: - r.DSLV3 = torch.zeros_like(s.WLV, dtype=DTYPE) - - r.DSLV3 = dvs_mask * r.DSLV3 - - # leaf death equals maximum of water stress, shading and frost - r.DSLV = torch.maximum(torch.maximum(r.DSLV1, r.DSLV2), r.DSLV3) - r.DSLV = dvs_mask * r.DSLV - - # Determine how much leaf biomass classes have to die in states.LV, - # given the a life span > SPAN, these classes will be accumulated - # in DALV. - # Note that the actual leaf death is imposed on the array LV during the - # state integration step. - tSPAN = _broadcast_to(p.SPAN, s.LVAGE.shape) # Broadcast to same shape - - # Using a sigmoid here instead of a conditional statement on the value of - # SPAN because the latter would not allow for the gradient to be tracked. - # the if statement `p.SPAN.requires_grad` to avoid unnecessary - # approximation when SPAN is not a learnable parameter. - # TODO: sharpness can be exposed as a parameter - if p.SPAN.requires_grad: - # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very - # small and mask should be 1 - sharpness = torch.tensor(1e-16, dtype=DTYPE) - - # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is - # equal to zero and mask should be 0.0 - epsilon = 1e-14 - span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=DTYPE) - else: - span_mask = (s.LVAGE > tSPAN).to(dtype=DTYPE) - - r.DALV = torch.sum(span_mask * s.LV, dim=-1) - r.DALV = dvs_mask * r.DALV - - # Total death rate leaves - r.DRLV = torch.maximum(r.DSLV, r.DALV) - - # Get the temperature from the drv - TEMP = _get_drv(drv.TEMP, self.params_shape) - - # physiologic ageing of leaves per time step - TBASE = _broadcast_to(p.TBASE, self.params_shape) - FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) - r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) - - # specific leaf area of leaves per time step - r.SLAT = dvs_mask * p.SLATB(DVS) - - # leaf area not to exceed exponential growth curve - is_lai_exp = s.LAIEXP < 6.0 - DTEFF = torch.clamp(TEMP - TBASE, 0.0) - - # NOTE: conditional statements do not allow for the gradient to be - # tracked through the condition. Thus, the gradient with respect to - # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) - # are expected to be incorrect. - r.GLAIEX = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), - torch.tensor(0.0, dtype=DTYPE), - ) - - # source-limited increase in leaf area - r.GLASOL = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), - torch.tensor(0.0, dtype=DTYPE), - ) - - # sink-limited increase in leaf area - GLA = torch.minimum(r.GLAIEX, r.GLASOL) - - # adjustment of specific leaf area of youngest leaf class - epsilon = 1e-10 # small value to avoid division by zero - r.SLAT = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp & (r.GRLV > epsilon), GLA / (r.GRLV + epsilon), r.SLAT), - torch.tensor(0.0, dtype=DTYPE), - ) - - @prepare_states - def integrate(self, day: datetime.date, delt=1.0) -> None: - """Integrate the leaf dynamics state variables. - - Args: - day (datetime.date, optional): The current date of the simulation. - delt (float, optional): The time step for integration. Defaults to 1.0. - """ - # TODO check if DVS < 0 and skip integration needed - rates = self.rates - states = self.states - - # --------- leave death --------- - tLV = states.LV.clone() - tSLA = states.SLA.clone() - tLVAGE = states.LVAGE.clone() - tDRLV = _broadcast_to(rates.DRLV, tLV.shape) - - # Leaf death is imposed on leaves from the oldest ones. - # Calculate the cumulative sum of weights after leaf death, and - # find out which leaf classes are dead (negative weights) - weight_cumsum = tLV.cumsum(dim=-1) - tDRLV - is_alive = weight_cumsum >= 0 - - # Adjust value of oldest leaf class, i.e. the first non-zero - # weight along the time axis (the last dimension). - # Cast argument to int because torch.argmax requires it to be numeric - idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True) - new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) - tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) - - # Integration of physiological age - # Zero out all dead leaf classes - # NOTE: conditional statements do not allow for the gradient to be - # tracked through the condition. Thus, the gradient with respect to - # parameters that contribute to `is_alive` are expected to be incorrect. - tLV = torch.where(is_alive, tLV, 0.0) - tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) - tLVAGE = torch.where(is_alive, tLVAGE, 0.0) - tSLA = torch.where(is_alive, tSLA, 0.0) - - # --------- leave growth --------- - idx = int((day - self.START_DATE).days / delt) - tLV[..., idx] = rates.GRLV - tSLA[..., idx] = rates.SLAT - tLVAGE[..., idx] = 0.0 - - # calculation of new leaf area - states.LASUM = torch.sum(tLV * tSLA, dim=-1) - states.LAI = self._calc_LAI() - states.LAIMAX = torch.maximum(states.LAI, states.LAIMAX) - - # exponential growth curve - states.LAIEXP = states.LAIEXP + rates.GLAIEX - - # Update leaf biomass states - states.WLV = torch.sum(tLV, dim=-1) - states.DWLV = states.DWLV + rates.DRLV - states.TWLV = states.WLV + states.DWLV - - # Store final leaf biomass deques - self.states.LV = tLV - self.states.SLA = tSLA - self.states.LVAGE = tLVAGE - - -def _exist_required_external_variables(kiosk): - """Check if all required external variables are available in the kiosk. - - Args: - kiosk (VariableKiosk): The variable kiosk to check. - - Raises: - ValueError: If any required external variable is missing. - - """ - required_external_vars_at_init = ["DVS", "FL", "FR", "SAI", "PAI"] - for var in required_external_vars_at_init: - if var not in kiosk: - raise ValueError( - f"Required external variables '{var}' is missing in the kiosk." - f" Ensure that all required variables {required_external_vars_at_init}" - " are provided." - ) diff --git a/src/diffwofost/physical_models/crop/leaf_dynamics.py b/src/diffwofost/physical_models/crop/leaf_dynamics.py index 4363670..ca8f8bb 100644 --- a/src/diffwofost/physical_models/crop/leaf_dynamics.py +++ b/src/diffwofost/physical_models/crop/leaf_dynamics.py @@ -17,8 +17,6 @@ from diffwofost.physical_models.utils import _get_drv from diffwofost.physical_models.utils import _get_params_shape -DTYPE = torch.float64 # Default data type for tensors in this module - class WOFOST_Leaf_Dynamics(SimulationObject): """Leaf dynamics for the WOFOST crop model. @@ -122,40 +120,118 @@ class WOFOST_Leaf_Dynamics(SimulationObject): MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) params_shape = None # Shape of the parameters tensors + # Default values that can be overridden before instantiation + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + dtype = torch.float64 + class Parameters(ParamTemplate): - RGRLAI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SPAN = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TBASE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - PERDL = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TDWI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + RGRLAI = Any() + SPAN = Any() + TBASE = Any() + PERDL = Any() + TDWI = Any() SLATB = AfgenTrait() KDIFTB = AfgenTrait() + def __init__(self, parvalues, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device + self.RGRLAI = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.SPAN = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TBASE = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.PERDL = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TDWI = [torch.tensor(-99.0, dtype=dtype, device=device)] + + # Call parent init + super().__init__(parvalues) + class StateVariables(StatesTemplate): - LV = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SLA = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - LVAGE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - LAIEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LASUM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAIEXP = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAIMAX = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAI = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - WLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - DWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - TWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LV = Any() + SLA = Any() + LVAGE = Any() + LAIEM = Any() + LASUM = Any() + LAIEXP = Any() + LAIMAX = Any() + LAI = Any() + WLV = Any() + DWLV = Any() + TWLV = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device if not in kwargs + if "LV" not in kwargs: + self.LV = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "SLA" not in kwargs: + self.SLA = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "LVAGE" not in kwargs: + self.LVAGE = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "LAIEM" not in kwargs: + self.LAIEM = torch.tensor(-99.0, dtype=dtype, device=device) + if "LASUM" not in kwargs: + self.LASUM = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAIEXP" not in kwargs: + self.LAIEXP = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAIMAX" not in kwargs: + self.LAIMAX = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAI" not in kwargs: + self.LAI = torch.tensor(-99.0, dtype=dtype, device=device) + if "WLV" not in kwargs: + self.WLV = torch.tensor(-99.0, dtype=dtype, device=device) + if "DWLV" not in kwargs: + self.DWLV = torch.tensor(-99.0, dtype=dtype, device=device) + if "TWLV" not in kwargs: + self.TWLV = torch.tensor(-99.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish, **kwargs) class RateVariables(RatesTemplate): - GRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV1 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV2 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV3 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DALV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - SLAT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - FYSAGE = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GLAIEX = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GLASOL = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + GRLV = Any() + DSLV1 = Any() + DSLV2 = Any() + DSLV3 = Any() + DSLV = Any() + DALV = Any() + DRLV = Any() + SLAT = Any() + FYSAGE = Any() + GLAIEX = Any() + GLASOL = Any() + + def __init__(self, kiosk, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device + self.GRLV = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV1 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV2 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV3 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV = torch.tensor(0.0, dtype=dtype, device=device) + self.DALV = torch.tensor(0.0, dtype=dtype, device=device) + self.DRLV = torch.tensor(0.0, dtype=dtype, device=device) + self.SLAT = torch.tensor(0.0, dtype=dtype, device=device) + self.FYSAGE = torch.tensor(0.0, dtype=dtype, device=device) + self.GLAIEX = torch.tensor(0.0, dtype=dtype, device=device) + self.GLASOL = torch.tensor(0.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk) def initialize( self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider @@ -177,6 +253,12 @@ def initialize( self.params = self.Parameters(parvalues) self.rates = self.RateVariables(kiosk) + # Create scalar constants once to avoid numerical deviations + self._zero = torch.tensor(0.0, dtype=self.dtype, device=self.device) + self._epsilon = torch.tensor(1e-12, dtype=self.dtype, device=self.device) + self._sigmoid_sharpness = torch.tensor(1e-16, dtype=self.dtype, device=self.device) + self._sigmoid_epsilon = torch.tensor(1e-14, dtype=self.dtype, device=self.device) + # CALCULATE INITIAL STATE VARIABLES # check for required external variables _exist_required_external_variables(self.kiosk) @@ -191,13 +273,15 @@ def initialize( # Initial leaf biomass WLV = (params.TDWI * (1 - FR)) * FL - DWLV = torch.zeros(self.params_shape, dtype=DTYPE) + DWLV = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) TWLV = WLV + DWLV # Initialize leaf classes (SLA, age and weight) - SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - LVAGE = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) + LVAGE = torch.zeros( + (*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device + ) + LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) SLA[..., 0] = params.SLATB(DVS) LV[..., 0] = WLV @@ -249,8 +333,8 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask # A mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=DTYPE) - dvs_mask = (DVS >= 0).to(dtype=DTYPE) + DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) + dvs_mask = (DVS >= 0).to(dtype=self.dtype) # Growth rate leaves # weight of new leaves @@ -269,7 +353,7 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: if "RF_FROST" in self.kiosk: r.DSLV3 = s.WLV * k.RF_FROST else: - r.DSLV3 = torch.zeros_like(s.WLV, dtype=DTYPE) + r.DSLV3 = torch.zeros_like(s.WLV, dtype=self.dtype) r.DSLV3 = dvs_mask * r.DSLV3 @@ -282,7 +366,9 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # in DALV. # Note that the actual leaf death is imposed on the array LV during the # state integration step. - tSPAN = _broadcast_to(p.SPAN, s.LVAGE.shape) # Broadcast to same shape + tSPAN = _broadcast_to( + p.SPAN, s.LVAGE.shape, dtype=self.dtype, device=self.device + ) # Broadcast to same shape # Using a sigmoid here instead of a conditional statement on the value of # SPAN because the latter would not allow for the gradient to be tracked. @@ -292,14 +378,13 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: if p.SPAN.requires_grad: # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very # small and mask should be 1 - sharpness = torch.tensor(1e-16, dtype=DTYPE) - # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is # equal to zero and mask should be 0.0 - epsilon = 1e-14 - span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=DTYPE) + span_mask = torch.sigmoid( + (s.LVAGE - tSPAN - self._sigmoid_epsilon) / self._sigmoid_sharpness + ).to(dtype=self.dtype) else: - span_mask = (s.LVAGE > tSPAN).to(dtype=DTYPE) + span_mask = (s.LVAGE > tSPAN).to(dtype=self.dtype) r.DALV = torch.sum(span_mask * s.LV, dim=-1) r.DALV = dvs_mask * r.DALV @@ -311,7 +396,7 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: TEMP = _get_drv(drv.TEMP, self.params_shape) # physiologic ageing of leaves per time step - TBASE = _broadcast_to(p.TBASE, self.params_shape) + TBASE = _broadcast_to(p.TBASE, self.params_shape, dtype=self.dtype, device=self.device) FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) @@ -329,25 +414,26 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: r.GLAIEX = torch.where( dvs_mask.bool(), torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), - torch.tensor(0.0, dtype=DTYPE), + self._zero, ) # source-limited increase in leaf area r.GLASOL = torch.where( dvs_mask.bool(), torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), - torch.tensor(0.0, dtype=DTYPE), + self._zero, ) # sink-limited increase in leaf area GLA = torch.minimum(r.GLAIEX, r.GLASOL) # adjustment of specific leaf area of youngest leaf class - epsilon = 1e-10 # small value to avoid division by zero r.SLAT = torch.where( dvs_mask.bool(), - torch.where(is_lai_exp & (r.GRLV > epsilon), GLA / (r.GRLV + epsilon), r.SLAT), - torch.tensor(0.0, dtype=DTYPE), + torch.where( + is_lai_exp & (r.GRLV > self._epsilon), GLA / (r.GRLV + self._epsilon), r.SLAT + ), + self._zero, ) @prepare_states @@ -366,7 +452,7 @@ def integrate(self, day: datetime.date, delt=1.0) -> None: tLV = states.LV.clone() tSLA = states.SLA.clone() tLVAGE = states.LVAGE.clone() - tDRLV = _broadcast_to(rates.DRLV, tLV.shape) + tDRLV = _broadcast_to(rates.DRLV, tLV.shape, dtype=self.dtype, device=self.device) # Leaf death is imposed on leaves from the oldest ones. # Calculate the cumulative sum of weights after leaf death, and @@ -377,7 +463,9 @@ def integrate(self, day: datetime.date, delt=1.0) -> None: # Adjust value of oldest leaf class, i.e. the first non-zero # weight along the time axis (the last dimension). # Cast argument to int because torch.argmax requires it to be numeric - idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True) + idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True).to( + device=self.device + ) new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index 9834e55..1c2a36f 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -133,7 +133,7 @@ def __init__( # Configure device and dtype on crop module class if it supports them if hasattr(self.mconf.CROP, "device") and device is not None: self.mconf.CROP.device = device - if hasattr(self.mconf.CROP, "dtype"): + if hasattr(self.mconf.CROP, "dtype") and dtype is not None: self.mconf.CROP.dtype = dtype # Variable kiosk for registering and publishing variables From 1e9e30046cff9494b4d98ceee7de51193bd75aa1 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Wed, 17 Dec 2025 14:34:59 +0100 Subject: [PATCH 05/17] . --- new_leaf.py | 524 ++++++++++++++ new_utils.py | 666 ++++++++++++++++++ old_leaf.py | 436 ++++++++++++ old_utils.py | 648 +++++++++++++++++ .../physical_models/crop/leaf_dynamics.py | 17 +- .../physical_models/crop/phenology.py | 4 +- src/diffwofost/physical_models/utils.py | 43 +- .../crop/test_leaf_dynamics.py | 60 +- .../crop/test_root_dynamics.py | 7 + tests/physical_models/test_utils.py | 13 +- 10 files changed, 2373 insertions(+), 45 deletions(-) create mode 100644 new_leaf.py create mode 100644 new_utils.py create mode 100644 old_leaf.py create mode 100644 old_utils.py diff --git a/new_leaf.py b/new_leaf.py new file mode 100644 index 0000000..ca8f8bb --- /dev/null +++ b/new_leaf.py @@ -0,0 +1,524 @@ +"""Leaf dynamics for the WOFOST crop model.""" + +import datetime +import torch +from pcse.base import ParamTemplate +from pcse.base import RatesTemplate +from pcse.base import SimulationObject +from pcse.base import StatesTemplate +from pcse.base.parameter_providers import ParameterProvider +from pcse.base.variablekiosk import VariableKiosk +from pcse.base.weather import WeatherDataContainer +from pcse.decorators import prepare_rates +from pcse.decorators import prepare_states +from pcse.traitlets import Any +from diffwofost.physical_models.utils import AfgenTrait +from diffwofost.physical_models.utils import _broadcast_to +from diffwofost.physical_models.utils import _get_drv +from diffwofost.physical_models.utils import _get_params_shape + + +class WOFOST_Leaf_Dynamics(SimulationObject): + """Leaf dynamics for the WOFOST crop model. + + Implementation of biomass partitioning to leaves, growth and senenscence + of leaves. WOFOST keeps track of the biomass that has been partitioned to + the leaves for each day (variable `LV`), which is called a leaf class). + For each leaf class the leaf age (variable 'LVAGE') and specific leaf area + (variable `SLA`) are also registered. Total living leaf biomass is + calculated by summing the biomass values for all leaf classes. Similarly, + leaf area is calculated by summing leaf biomass times specific leaf area + (`LV` * `SLA`). + + Senescense of the leaves can occur as a result of physiological age, + drought stress or self-shading. + + **Simulation parameters** (provide in cropdata dictionary) + + | Name | Description | Type | Unit | + |--------|------------------------------------------------------------------ |------|------------| + | RGRLAI | Maximum relative increase in LAI. |SCr | ha ha⁻¹ d⁻¹| + | SPAN | Life span of leaves growing at 35 Celsius |SCr | d | + | TBASE | Lower threshold temp. for ageing of leaves |SCr | C | + | PERDL | Max. relative death rate of leaves due to water stress |SCr | | + | TDWI | Initial total crop dry weight |SCr | kg ha⁻¹ | + | KDIFTB | Extinction coefficient for diffuse visible light as function of DVS|TCr | | + | SLATB | Specific leaf area as a function of DVS |TCr | ha kg⁻¹ | + + **State variables** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|-------------| + | LV | Leaf biomass per leaf class | N | kg ha⁻¹ | + | SLA | Specific leaf area per leaf class | N | ha kg⁻¹ | + | LVAGE | Leaf age per leaf class | N | d | + | LVSUM | Sum of LV | N | kg ha⁻¹ | + | LAIEM | LAI at emergence | N | - | + | LASUM | Total leaf area as sum of LV*SLA, not including stem and pod area | N | - | + | LAIEXP | LAI value under theoretical exponential growth | N | - | + | LAIMAX | Maximum LAI reached during growth cycle | N | - | + | LAI | Leaf area index, including stem and pod area | Y | - | + | WLV | Dry weight of living leaves | Y | kg ha⁻¹ | + | DWLV | Dry weight of dead leaves | N | kg ha⁻¹ | + | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | + + **Rate variables** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|---------------| + | GRLV | Growth rate leaves | N | kg ha⁻¹ d⁻¹ | + | DSLV1 | Death rate leaves due to water stress | N | kg ha⁻¹ d⁻¹ | + | DSLV2 | Death rate leaves due to self-shading | N | kg ha⁻¹ d⁻¹ | + | DSLV3 | Death rate leaves due to frost kill | N | kg ha⁻¹ d⁻¹ | + | DSLV | Maximum of DSLV1, DSLV2, DSLV3 | N | kg ha⁻¹ d⁻¹ | + | DALV | Death rate leaves due to aging | N | kg ha⁻¹ d⁻¹ | + | DRLV | Death rate leaves as a combination of DSLV and DALV | N | kg ha⁻¹ d⁻¹ | + | SLAT | Specific leaf area for current time step, adjusted for source/sink limited leaf expansion rate | N | ha kg⁻¹ | + | FYSAGE | Increase in physiological leaf age | N | - | + | GLAIEX | Sink-limited leaf expansion rate (exponential curve) | N | ha ha⁻¹ d⁻¹ | + | GLASOL | Source-limited leaf expansion rate (biomass increase) | N | ha ha⁻¹ d⁻¹ | + + **External dependencies** + + | Name | Description | Provided by | Unit | + |-----------|-----------------------------------|--------------------------------|----------------| + | DVS | Crop development stage | DVS_Phenology | - | + | FL | Fraction biomass to leaves | DVS_Partitioning | - | + | FR | Fraction biomass to roots | DVS_Partitioning | - | + | SAI | Stem area index | WOFOST_Stem_Dynamics | - | + | PAI | Pod area index | WOFOST_Storage_Organ_Dynamics | - | + | TRA | Transpiration rate | Evapotranspiration | cm day⁻¹ ? | + | TRAMX | Maximum transpiration rate | Evapotranspiration | cm day⁻¹ ? | + | ADMI | Above-ground dry matter increase | CropSimulation | kg ha⁻¹ d⁻¹ | + | RFTRA | Reduction factor for transpiration (water & oxygen) | Y | - | + | RF_FROST | Reduction factor frost kill | FROSTOL (optional) | - | + + **Outputs** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|-------------| + | LAI | Leaf area index, including stem and pod area | Y | - | + | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | + + **Gradient mapping (which parameters have a gradient):** + + | Output | Parameters influencing it | + |--------|------------------------------------------| + | LAI | TDWI, SPAN, RGRLAI, TBASE, KDIFTB, SLATB | + | TWLV | TDWI, PERDL | + + [!NOTE] + Notice that the following gradients are zero: + - ∂SPAN/∂LAI + - ∂PERDL/∂TWLV + - ∂KDIFTB/∂LAI + """ # noqa: E501 + + # The following parameters are used to initialize and control the arrays that store information + # on the leaf classes during the time integration: leaf area, age, and biomass. + START_DATE = None # Start date of the simulation + MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) + params_shape = None # Shape of the parameters tensors + + # Default values that can be overridden before instantiation + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + dtype = torch.float64 + + class Parameters(ParamTemplate): + RGRLAI = Any() + SPAN = Any() + TBASE = Any() + PERDL = Any() + TDWI = Any() + SLATB = AfgenTrait() + KDIFTB = AfgenTrait() + + def __init__(self, parvalues, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device + self.RGRLAI = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.SPAN = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TBASE = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.PERDL = [torch.tensor(-99.0, dtype=dtype, device=device)] + self.TDWI = [torch.tensor(-99.0, dtype=dtype, device=device)] + + # Call parent init + super().__init__(parvalues) + + class StateVariables(StatesTemplate): + LV = Any() + SLA = Any() + LVAGE = Any() + LAIEM = Any() + LASUM = Any() + LAIEXP = Any() + LAIMAX = Any() + LAI = Any() + WLV = Any() + DWLV = Any() + TWLV = Any() + + def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device if not in kwargs + if "LV" not in kwargs: + self.LV = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "SLA" not in kwargs: + self.SLA = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "LVAGE" not in kwargs: + self.LVAGE = [torch.tensor(-99.0, dtype=dtype, device=device)] + if "LAIEM" not in kwargs: + self.LAIEM = torch.tensor(-99.0, dtype=dtype, device=device) + if "LASUM" not in kwargs: + self.LASUM = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAIEXP" not in kwargs: + self.LAIEXP = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAIMAX" not in kwargs: + self.LAIMAX = torch.tensor(-99.0, dtype=dtype, device=device) + if "LAI" not in kwargs: + self.LAI = torch.tensor(-99.0, dtype=dtype, device=device) + if "WLV" not in kwargs: + self.WLV = torch.tensor(-99.0, dtype=dtype, device=device) + if "DWLV" not in kwargs: + self.DWLV = torch.tensor(-99.0, dtype=dtype, device=device) + if "TWLV" not in kwargs: + self.TWLV = torch.tensor(-99.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk, publish=publish, **kwargs) + + class RateVariables(RatesTemplate): + GRLV = Any() + DSLV1 = Any() + DSLV2 = Any() + DSLV3 = Any() + DSLV = Any() + DALV = Any() + DRLV = Any() + SLAT = Any() + FYSAGE = Any() + GLAIEX = Any() + GLASOL = Any() + + def __init__(self, kiosk, dtype=None, device=None): + # Get dtype and device from parent class if not provided + if dtype is None: + dtype = WOFOST_Leaf_Dynamics.dtype + if device is None: + device = WOFOST_Leaf_Dynamics.device + + # Set default values using the provided dtype and device + self.GRLV = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV1 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV2 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV3 = torch.tensor(0.0, dtype=dtype, device=device) + self.DSLV = torch.tensor(0.0, dtype=dtype, device=device) + self.DALV = torch.tensor(0.0, dtype=dtype, device=device) + self.DRLV = torch.tensor(0.0, dtype=dtype, device=device) + self.SLAT = torch.tensor(0.0, dtype=dtype, device=device) + self.FYSAGE = torch.tensor(0.0, dtype=dtype, device=device) + self.GLAIEX = torch.tensor(0.0, dtype=dtype, device=device) + self.GLASOL = torch.tensor(0.0, dtype=dtype, device=device) + + # Call parent init + super().__init__(kiosk) + + def initialize( + self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider + ) -> None: + """Initialize the WOFOST_Leaf_Dynamics simulation object. + + Args: + day (datetime.date): The starting date of the simulation. + kiosk (VariableKiosk): A container for registering and publishing + (internal and external) state variables. See PCSE documentation for + details. + parvalues (ParameterProvider): A dictionary-like container holding + all parameter sets (crop, soil, site) as key/value. The values are + arrays or scalars. See PCSE documentation for details. + """ + self.START_DATE = day + self.kiosk = kiosk + # TODO check if parvalues are already torch.nn.Parameters + self.params = self.Parameters(parvalues) + self.rates = self.RateVariables(kiosk) + + # Create scalar constants once to avoid numerical deviations + self._zero = torch.tensor(0.0, dtype=self.dtype, device=self.device) + self._epsilon = torch.tensor(1e-12, dtype=self.dtype, device=self.device) + self._sigmoid_sharpness = torch.tensor(1e-16, dtype=self.dtype, device=self.device) + self._sigmoid_epsilon = torch.tensor(1e-14, dtype=self.dtype, device=self.device) + + # CALCULATE INITIAL STATE VARIABLES + # check for required external variables + _exist_required_external_variables(self.kiosk) + # TODO check if external variables are already torch tensors + + FL = self.kiosk["FL"] + FR = self.kiosk["FR"] + DVS = self.kiosk["DVS"] + + params = self.params + self.params_shape = _get_params_shape(params) + + # Initial leaf biomass + WLV = (params.TDWI * (1 - FR)) * FL + DWLV = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) + TWLV = WLV + DWLV + + # Initialize leaf classes (SLA, age and weight) + SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) + LVAGE = torch.zeros( + (*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device + ) + LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) + SLA[..., 0] = params.SLATB(DVS) + LV[..., 0] = WLV + + # Initial values for leaf area + LAIEM = LV[..., 0] * SLA[..., 0] + LASUM = LAIEM + LAIEXP = LAIEM + LAIMAX = LAIEM + LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] + + # Initialize StateVariables object + self.states = self.StateVariables( + kiosk, + publish=["LAI", "TWLV", "WLV"], + LV=LV, + SLA=SLA, + LVAGE=LVAGE, + LAIEM=LAIEM, + LASUM=LASUM, + LAIEXP=LAIEXP, + LAIMAX=LAIMAX, + LAI=LAI, + WLV=WLV, + DWLV=DWLV, + TWLV=TWLV, + ) + + def _calc_LAI(self): + # Total leaf area Index as sum of leaf, pod and stem area + SAI = self.kiosk["SAI"] + PAI = self.kiosk["PAI"] + total_LAI = self.states.LASUM + SAI + PAI + return total_LAI + + @prepare_rates + def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: + """Calculate the rates of change for the leaf dynamics. + + Args: + day (datetime.date, optional): The current date of the simulation. + drv (WeatherDataContainer, optional): A dictionary-like container holding + weather data elements as key/value. The values are + arrays or scalars. See PCSE documentation for details. + """ + r = self.rates + s = self.states + p = self.params + k = self.kiosk + + # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask + # A mask (0 if DVS < 0, 1 if DVS >= 0) + DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) + dvs_mask = (DVS >= 0).to(dtype=self.dtype) + + # Growth rate leaves + # weight of new leaves + r.GRLV = dvs_mask * k.ADMI * k.FL + + # death of leaves due to water/oxygen stress + r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL + + # death due to self shading cause by high LAI + DVS = self.kiosk["DVS"] + LAICR = 3.2 / p.KDIFTB(DVS) + r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) + + # Death of leaves due to frost damage as determined by + # Reduction Factor Frost "RF_FROST" + if "RF_FROST" in self.kiosk: + r.DSLV3 = s.WLV * k.RF_FROST + else: + r.DSLV3 = torch.zeros_like(s.WLV, dtype=self.dtype) + + r.DSLV3 = dvs_mask * r.DSLV3 + + # leaf death equals maximum of water stress, shading and frost + r.DSLV = torch.maximum(torch.maximum(r.DSLV1, r.DSLV2), r.DSLV3) + r.DSLV = dvs_mask * r.DSLV + + # Determine how much leaf biomass classes have to die in states.LV, + # given the a life span > SPAN, these classes will be accumulated + # in DALV. + # Note that the actual leaf death is imposed on the array LV during the + # state integration step. + tSPAN = _broadcast_to( + p.SPAN, s.LVAGE.shape, dtype=self.dtype, device=self.device + ) # Broadcast to same shape + + # Using a sigmoid here instead of a conditional statement on the value of + # SPAN because the latter would not allow for the gradient to be tracked. + # the if statement `p.SPAN.requires_grad` to avoid unnecessary + # approximation when SPAN is not a learnable parameter. + # TODO: sharpness can be exposed as a parameter + if p.SPAN.requires_grad: + # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very + # small and mask should be 1 + # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is + # equal to zero and mask should be 0.0 + span_mask = torch.sigmoid( + (s.LVAGE - tSPAN - self._sigmoid_epsilon) / self._sigmoid_sharpness + ).to(dtype=self.dtype) + else: + span_mask = (s.LVAGE > tSPAN).to(dtype=self.dtype) + + r.DALV = torch.sum(span_mask * s.LV, dim=-1) + r.DALV = dvs_mask * r.DALV + + # Total death rate leaves + r.DRLV = torch.maximum(r.DSLV, r.DALV) + + # Get the temperature from the drv + TEMP = _get_drv(drv.TEMP, self.params_shape) + + # physiologic ageing of leaves per time step + TBASE = _broadcast_to(p.TBASE, self.params_shape, dtype=self.dtype, device=self.device) + FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) + r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) + + # specific leaf area of leaves per time step + r.SLAT = dvs_mask * p.SLATB(DVS) + + # leaf area not to exceed exponential growth curve + is_lai_exp = s.LAIEXP < 6.0 + DTEFF = torch.clamp(TEMP - TBASE, 0.0) + + # NOTE: conditional statements do not allow for the gradient to be + # tracked through the condition. Thus, the gradient with respect to + # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) + # are expected to be incorrect. + r.GLAIEX = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), + self._zero, + ) + + # source-limited increase in leaf area + r.GLASOL = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), + self._zero, + ) + + # sink-limited increase in leaf area + GLA = torch.minimum(r.GLAIEX, r.GLASOL) + + # adjustment of specific leaf area of youngest leaf class + r.SLAT = torch.where( + dvs_mask.bool(), + torch.where( + is_lai_exp & (r.GRLV > self._epsilon), GLA / (r.GRLV + self._epsilon), r.SLAT + ), + self._zero, + ) + + @prepare_states + def integrate(self, day: datetime.date, delt=1.0) -> None: + """Integrate the leaf dynamics state variables. + + Args: + day (datetime.date, optional): The current date of the simulation. + delt (float, optional): The time step for integration. Defaults to 1.0. + """ + # TODO check if DVS < 0 and skip integration needed + rates = self.rates + states = self.states + + # --------- leave death --------- + tLV = states.LV.clone() + tSLA = states.SLA.clone() + tLVAGE = states.LVAGE.clone() + tDRLV = _broadcast_to(rates.DRLV, tLV.shape, dtype=self.dtype, device=self.device) + + # Leaf death is imposed on leaves from the oldest ones. + # Calculate the cumulative sum of weights after leaf death, and + # find out which leaf classes are dead (negative weights) + weight_cumsum = tLV.cumsum(dim=-1) - tDRLV + is_alive = weight_cumsum >= 0 + + # Adjust value of oldest leaf class, i.e. the first non-zero + # weight along the time axis (the last dimension). + # Cast argument to int because torch.argmax requires it to be numeric + idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True).to( + device=self.device + ) + new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) + tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) + + # Integration of physiological age + # Zero out all dead leaf classes + # NOTE: conditional statements do not allow for the gradient to be + # tracked through the condition. Thus, the gradient with respect to + # parameters that contribute to `is_alive` are expected to be incorrect. + tLV = torch.where(is_alive, tLV, 0.0) + tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) + tLVAGE = torch.where(is_alive, tLVAGE, 0.0) + tSLA = torch.where(is_alive, tSLA, 0.0) + + # --------- leave growth --------- + idx = int((day - self.START_DATE).days / delt) + tLV[..., idx] = rates.GRLV + tSLA[..., idx] = rates.SLAT + tLVAGE[..., idx] = 0.0 + + # calculation of new leaf area + states.LASUM = torch.sum(tLV * tSLA, dim=-1) + states.LAI = self._calc_LAI() + states.LAIMAX = torch.maximum(states.LAI, states.LAIMAX) + + # exponential growth curve + states.LAIEXP = states.LAIEXP + rates.GLAIEX + + # Update leaf biomass states + states.WLV = torch.sum(tLV, dim=-1) + states.DWLV = states.DWLV + rates.DRLV + states.TWLV = states.WLV + states.DWLV + + # Store final leaf biomass deques + self.states.LV = tLV + self.states.SLA = tSLA + self.states.LVAGE = tLVAGE + + +def _exist_required_external_variables(kiosk): + """Check if all required external variables are available in the kiosk. + + Args: + kiosk (VariableKiosk): The variable kiosk to check. + + Raises: + ValueError: If any required external variable is missing. + + """ + required_external_vars_at_init = ["DVS", "FL", "FR", "SAI", "PAI"] + for var in required_external_vars_at_init: + if var not in kiosk: + raise ValueError( + f"Required external variables '{var}' is missing in the kiosk." + f" Ensure that all required variables {required_external_vars_at_init}" + " are provided." + ) diff --git a/new_utils.py b/new_utils.py new file mode 100644 index 0000000..aa90cfb --- /dev/null +++ b/new_utils.py @@ -0,0 +1,666 @@ +"""This file contains code that is required to run the YAML unit tests. + +It contains: + - VariableKioskTestHelper: A subclass of the VariableKiosk that can use externally + forced states/rates + - ConfigurationLoaderTestHelper: An subclass of ConfigurationLoader that allows to + specify the simbojects to be test dynamically + - EngineTestHelper: engine specifically for running the YAML tests. + - WeatherDataProviderTestHelper: a weatherdata provides that takes the weather + inputs from the YAML file. + +Note that the code here is *not* python2 compatible. +""" + +import logging +import os +from collections.abc import Iterable +import torch +import yaml +from pcse import signals +from pcse.agromanager import AgroManager +from pcse.base import ConfigurationLoader +from pcse.base.parameter_providers import ParameterProvider +from pcse.base.variablekiosk import VariableKiosk +from pcse.base.weather import WeatherDataContainer +from pcse.base.weather import WeatherDataProvider +from pcse.engine import BaseEngine +from pcse.engine import Engine +from pcse.settings import settings +from pcse.timer import Timer +from pcse.traitlets import Enum +from pcse.traitlets import TraitType + +logging.disable(logging.CRITICAL) + +this_dir = os.path.dirname(__file__) + + +def nothing(*args, **kwargs): + """A function that does nothing.""" + pass + + +class VariableKioskTestHelper(VariableKiosk): + """Variable Kiosk for testing purposes which allows to use external states.""" + + external_state_list = None + + def __init__(self, external_state_list): + super().__init__() + self.current_externals = {} + if external_state_list: + self.external_state_list = external_state_list + + def __call__(self, day): + """Sets the external state/rate variables for the current day. + + Returns True if the list of external state/rate variables is exhausted, + otherwise False. + """ + if self.external_state_list: + current_externals = self.external_state_list.pop(0) + forcing_day = current_externals.pop("DAY") + msg = "Failure updating VariableKiosk with external states: days are not matching!" + assert forcing_day == day, msg + self.current_externals.clear() + self.current_externals.update(current_externals) + if len(self.external_state_list) == 0: + return True + + return False + + def is_external_state(self, item): + """Returns True if the item is an external state.""" + return item in self.current_externals + + def __getattr__(self, item): + """Allow use of attribute notation. + + eg "kiosk.LAI" on published rates or states. + """ + if item in self.current_externals: + return self.current_externals[item] + else: + return dict.__getitem__(self, item) + + def __getitem__(self, item): + """Override __getitem__ to first look in external states.""" + if item in self.current_externals: + return self.current_externals[item] + else: + return dict.__getitem__(self, item) + + def __contains__(self, key): + """Override __contains__ to first look in external states.""" + return key in self.current_externals or dict.__contains__(self, key) + + +class ConfigurationLoaderTestHelper(ConfigurationLoader): + def __init__(self, YAML_test_inputs, simobject, waterbalance=None): + self.model_config_file = "Test config" + self.description = "Configuration loader for running YAML tests" + self.CROP = simobject + self.SOIL = waterbalance + self.AGROMANAGEMENT = AgroManager + self.OUTPUT_INTERVAL = "daily" + self.OUTPUT_INTERVAL_DAYS = 1 + self.OUTPUT_WEEKDAY = 0 + self.OUTPUT_VARS = list(YAML_test_inputs["Precision"].keys()) + self.SUMMARY_OUTPUT_VARS = [] + self.TERMINAL_OUTPUT_VARS = [] + + +class EngineTestHelper(Engine): + """An engine which is purely for running the YAML unit tests.""" + + def __init__( + self, + parameterprovider, + weatherdataprovider, + agromanagement, + test_config, + external_states=None, + device=None, + dtype=None, + ): + BaseEngine.__init__(self) + + # Load the model configuration + self.mconf = ConfigurationLoader(test_config) + self.parameterprovider = parameterprovider + + # Configure device and dtype on crop module class if it supports them + if hasattr(self.mconf.CROP, "device") and device is not None: + self.mconf.CROP.device = device + if hasattr(self.mconf.CROP, "dtype") and dtype is not None: + self.mconf.CROP.dtype = dtype + + # Variable kiosk for registering and publishing variables + self.kiosk = VariableKioskTestHelper(external_states) + + # Placeholder for variables to be saved during a model run + self._saved_output = list() + self._saved_summary_output = list() + self._saved_terminal_output = dict() + + # register handlers for starting/finishing the crop simulation, for + # handling output and terminating the system + self._connect_signal(self._on_CROP_START, signal=signals.crop_start) + self._connect_signal(self._on_CROP_FINISH, signal=signals.crop_finish) + self._connect_signal(self._on_OUTPUT, signal=signals.output) + self._connect_signal(self._on_TERMINATE, signal=signals.terminate) + + # Component for agromanagement + self.agromanager = self.mconf.AGROMANAGEMENT(self.kiosk, agromanagement) + start_date = self.agromanager.start_date + end_date = self.agromanager.end_date + + # Timer: starting day, final day and model output + self.timer = Timer(self.kiosk, start_date, end_date, self.mconf) + self.day, delt = self.timer() + # Update external states in the kiosk + self.kiosk(self.day) + + # Driving variables + self.weatherdataprovider = weatherdataprovider + self.drv = self._get_driving_variables(self.day) + + # Component for simulation of soil processes + if self.mconf.SOIL is not None: + self.soil = self.mconf.SOIL(self.day, self.kiosk, parameterprovider) + + # Call AgroManagement module for management actions at initialization + self.agromanager(self.day, self.drv) + + # Calculate initial rates + self.calc_rates(self.day, self.drv) + + def _run(self): + """Make one time step of the simulation.""" + # Update timer + self.day, delt = self.timer() + + # When the list of external states is exhausted the VariableKioskTestHelper will + # return True signalling the end of the test + stop_test = self.kiosk(self.day) + if stop_test: + self._send_signal( + signal=signals.crop_finish, day=self.day, finish_type="maturity", crop_delete=False + ) + + # State integration and update to forced variables + self.integrate(self.day, delt) + + # Driving variables + self.drv = self._get_driving_variables(self.day) + + # Agromanagement decisions + self.agromanager(self.day, self.drv) + + # Rate calculation + self.calc_rates(self.day, self.drv) + + if self.flag_terminate is True: + self._terminate_simulation(self.day) + + +class WeatherDataProviderTestHelper(WeatherDataProvider): + """It stores the weatherdata contained within the YAML tests.""" + + def __init__(self, yaml_weather, meteo_range_checks=True): + super().__init__() + # This is a temporary workaround. The `METEO_RANGE_CHECKS` logic in + # `__setattr__` method in `WeatherDataContainer` is not vector compatible + # yet. So we can disable it here when creating the `WeatherDataContainer` + # instances with arrays. + settings.METEO_RANGE_CHECKS = meteo_range_checks + for weather in yaml_weather: + if "SNOWDEPTH" in weather: + weather.pop("SNOWDEPTH") + wdc = WeatherDataContainer(**weather) + self._store_WeatherDataContainer(wdc, wdc.DAY) + + +def prepare_engine_input( + test_data, crop_model_params, meteo_range_checks=True, dtype=torch.float64 +): + """Prepare the inputs for the engine from the YAML file.""" + agro_management_inputs = test_data["AgroManagement"] + cropd = test_data["ModelParameters"] + + weather_data_provider = WeatherDataProviderTestHelper( + test_data["WeatherVariables"], meteo_range_checks=meteo_range_checks + ) + crop_model_params_provider = ParameterProvider(cropdata=cropd) + external_states = test_data.get("ExternalStates") or [] + + # convert parameters to tensors + crop_model_params_provider.clear_override() + for name in crop_model_params: + # if name is missing in the YAML, skip it + if name in crop_model_params_provider: + value = torch.tensor(crop_model_params_provider[name], dtype=dtype) + crop_model_params_provider.set_override(name, value, check=False) + + # convert external states to tensors + tensor_external_states = [ + {k: v if k == "DAY" else torch.tensor(v, dtype=dtype) for k, v in item.items()} + for item in external_states + ] + return ( + crop_model_params_provider, + weather_data_provider, + agro_management_inputs, + tensor_external_states, + ) + + +def get_test_data(test_data_path): + """Get the test data from the YAML file.""" + with open(test_data_path) as f: + return yaml.safe_load(f) + + +def calculate_numerical_grad(get_model_fn, param_name, param_value, out_name): + """Calculate the numerical gradient of output with respect to a parameter.""" + delta = 1e-6 + + # Parameters like RDRRTB are batched tables, so we need to compute + # the gradient for each table element separately + # So, we flatten the parameter for easier indexing + param_flat = param_value.reshape(-1) + grad_flat = torch.zeros_like(param_flat) + + for i in range(param_flat.numel()): + p_plus = param_flat.clone() + p_plus[i] += delta + p_minus = param_flat.clone() + p_minus[i] -= delta + + p_plus = p_plus.view_as(param_value) + p_minus = p_minus.view_as(param_value) + + model = get_model_fn() + out_plus = model({param_name: p_plus})[out_name] + loss_plus = out_plus.sum() + + model = get_model_fn() + out_minus = model({param_name: p_minus})[out_name] + loss_minus = out_minus.sum() + + grad_flat[i] = (loss_plus - loss_minus) / (2 * delta) + + return grad_flat.view_as(param_value) + + +class Afgen: + """Differentiable AFGEN function, expanded from pcse. + + AFGEN is a linear interpolation function based on a table of XY pairs. + Now supports batched tables (tensor of lists) for vectorized operations. + """ + + def _check_x_ascending(self, tbl_xy): + """Checks that the x values are strictly ascending. + + Also truncates any trailing (0.,0.) pairs as a result of data coming + from a CGMS database. + + Args: + tbl_xy: Table of XY pairs as a tensor or array-like object. + Can be 1D (single table) or ND (vectorized tables). + + Returns: + list or tensor: List of valid indices (for 1D) or tensor of valid counts (for ND). + + Raises: + ValueError: If x values are not strictly ascending. + """ + # Handle batched tables (>1D tensors) + if tbl_xy.dim() > 1: + batch_shape = tbl_xy.shape[:-1] + table_len = tbl_xy.shape[-1] + + # Flatten batch dimensions for processing + flat_tables = tbl_xy.reshape(-1, table_len) + num_tables = flat_tables.shape[0] + + valid_counts = [] + for idx in range(num_tables): + table = flat_tables[idx] + x_list = table[0::2] + y_list = table[1::2] + n = len(x_list) + + # Find trailing (0, 0) pairs to truncate + valid_n = n + for i in range(n - 1, 0, -1): + if x_list[i] == 0 and y_list[i] == 0: + valid_n = i + else: + break + + # Check if x range is strictly ascending + valid_x_list = x_list[:valid_n] + for i in range(1, len(valid_x_list)): + if valid_x_list[i] <= valid_x_list[i - 1]: + msg = ( + "X values for AFGEN input list" + + " not strictly ascending: {x_list.tolist()}" + ) + raise ValueError(msg) + + valid_counts.append(valid_n) + + return torch.tensor(valid_counts).reshape(batch_shape) + + # Original 1D logic from pcse + x_list = tbl_xy[0::2] + y_list = tbl_xy[1::2] + n = len(x_list) + + # Find trailing (0, 0) pairs to truncate + valid_n = n + for i in range(n - 1, 0, -1): + if x_list[i] == 0 and y_list[i] == 0: + valid_n = i + else: + break + + # Check only the valid (non-trailing-zero) portion + valid_x_list = x_list[:valid_n] + + # Check if x range is strictly ascending + for i in range(1, len(valid_x_list)): + if valid_x_list[i] <= valid_x_list[i - 1]: + msg = f"X values for AFGEN input list not strictly ascending: {x_list.tolist()}" + raise ValueError(msg) + + return list(range(valid_n)) + + def __init__(self, tbl_xy): + # Convert to tensor if needed + tbl_xy = torch.as_tensor(tbl_xy) + + # Detect if we have batched tables (>1D) + self.is_batched = tbl_xy.dim() > 1 + + if self.is_batched: + self.batch_shape = tbl_xy.shape[:-1] + table_len = tbl_xy.shape[-1] + + # Store the full batched tables + self.tbl_xy = tbl_xy + + # Get valid counts for each table + valid_counts = self._check_x_ascending(tbl_xy) + self.valid_counts = valid_counts + + # Extract x and y for all tables + flat_tables = tbl_xy.reshape(-1, table_len) + num_tables = flat_tables.shape[0] + + x_list_batch = [] + y_list_batch = [] + slopes_batch = [] + + for idx in range(num_tables): + table = flat_tables[idx] + valid_n = valid_counts.flatten()[idx].item() + + x_indices = torch.tensor([2 * i for i in range(valid_n)]) + y_indices = torch.tensor([2 * i + 1 for i in range(valid_n)]) + + x_vals = table[x_indices] + y_vals = table[y_indices] + + # Calculate slopes + if len(x_vals) > 1: + slopes = (y_vals[1:] - y_vals[:-1]) / (x_vals[1:] - x_vals[:-1]) + else: + slopes = torch.tensor([], dtype=torch.float64) + + x_list_batch.append(x_vals) + y_list_batch.append(y_vals) + slopes_batch.append(slopes) + + # Store as lists - don't reshape, just keep the flat structure + self.x_list_batch = x_list_batch + self.y_list_batch = y_list_batch + self.slopes_batch = slopes_batch + + else: + # Original 1D logic from pcse + self.batch_shape = None + indices = self._check_x_ascending(tbl_xy) + + # Extract x and y values using indices + x_indices = torch.tensor([2 * i for i in indices]) + y_indices = torch.tensor([2 * i + 1 for i in indices]) + self.x_list = tbl_xy[x_indices] + self.y_list = tbl_xy[y_indices] + + # Calculate slopes + x1 = self.x_list[:-1] + x2 = self.x_list[1:] + y1 = self.y_list[:-1] + y2 = self.y_list[1:] + self.slopes = (y2 - y1) / (x2 - x1) + + def __call__(self, x): + """Returns the interpolated value at abscissa x. + + Args: + x (torch.Tensor): The abscissa value at which to interpolate. + Can be scalar or batched to match table dimensions. + + Returns: + torch.Tensor: The interpolated value, preserving batch dimensions. + """ + x = torch.as_tensor(x) + + if self.is_batched: + # Ensure x has compatible shape for broadcasting + # x can be scalar or have batch dimensions + + # Flatten batch dimensions for processing + flat_x = x.reshape(-1) if x.dim() > 0 else x.unsqueeze(0) + num_queries = flat_x.shape[0] if flat_x.dim() > 0 else 1 + + results = [] + + # Process each table + for idx in range(len(self.x_list_batch)): + x_list = self.x_list_batch[idx] + y_list = self.y_list_batch[idx] + slopes = self.slopes_batch[idx] + + # Get the query value (broadcast if needed) + if num_queries == 1: + x_val = flat_x[0] if flat_x.dim() > 0 else flat_x + elif idx < num_queries: + x_val = flat_x[idx] + else: + x_val = flat_x[0] # Broadcast first value + + # Ensure contiguous memory layout for searchsorted + x_list_contig = x_list.contiguous() + x_val_contig = ( + x_val.contiguous() + if isinstance(x_val, torch.Tensor) and x_val.dim() > 0 + else x_val + ) + + # Find interval and interpolate using torch.where for differentiability + i = torch.searchsorted(x_list_contig, x_val_contig, right=False) - 1 + i = torch.clamp(i, 0, len(x_list) - 2) + + # Calculate interpolated value + interp_result = y_list[i] + slopes[i] * (x_val - x_list[i]) + + # Apply boundary conditions using torch.where + result = torch.where( + x_val <= x_list[0], + y_list[0], + torch.where(x_val >= x_list[-1], y_list[-1], interp_result), + ) + + results.append(result) + + # Reshape to original batch shape + output = torch.stack(results).reshape(self.batch_shape) + return output + + # Ensure contiguous memory layout for searchsorted + x_list_contig = self.x_list.contiguous() + x_contig = x.contiguous() if isinstance(x, torch.Tensor) and x.dim() > 0 else x + + # Find interval index using torch.searchsorted for differentiability + i = torch.searchsorted(x_list_contig, x_contig, right=False) - 1 + i = torch.clamp(i, 0, len(self.x_list) - 2) + + # Calculate interpolated value + interp_value = self.y_list[i] + self.slopes[i] * (x - self.x_list[i]) + + # Apply boundary conditions using torch.where + result = torch.where( + x <= self.x_list[0], + self.y_list[0], + torch.where(x >= self.x_list[-1], self.y_list[-1], interp_value), + ) + + return result + + @property + def shape(self): + """Returns the shape of the Afgen table.""" + return self.batch_shape + + +class AfgenTrait(TraitType): + """An AFGEN table trait. + + Attributes: + default_value: Default Afgen instance with identity mapping. + into_text: Description of the trait type. + """ + + default_value = Afgen([0, 0, 1, 1]) + into_text = "An AFGEN table of XY pairs" + + def validate(self, obj, value): + """Validate that the value is an Afgen instance or an iterable to create one. + + Args: + obj: The object instance containing this trait. + value: The value to validate (either an Afgen instance or an iterable). + + Returns: + Afgen: A validated Afgen instance. + + Raises: + TraitError: If the value cannot be validated as an Afgen instance. + """ + if isinstance(value, Afgen): + return value + elif isinstance(value, Iterable): + return Afgen(value) + self.error(obj, value) + + +def _get_params_shape(params): + """Get the parameters shape. + + Parameters can have arbitrary number of dimensions, but all parameters that are not zero- + dimensional should have the same shape. + + This check if fundamental for vectorized operations in the physical models. + """ + shape = () + for parname in params.trait_names(): + # Skip special traitlets attributes + if parname.startswith("trait"): + continue + param = getattr(params, parname) + # Skip Enum and str parameters + if isinstance(param, Enum) or isinstance(param, str): + continue + # Parameters that are not zero dimensional should all have the same shape + if param.shape and not shape: + shape = param.shape + elif param.shape: + assert param.shape == shape, ( + "All parameters should have the same shape (or have no dimensions)" + ) + return shape + + +def _get_drv(drv_var, expected_shape): + """Check that the driving variables have the expected shape and fetch them. + + Driving variables can be scalars (0-dimensional) or match the expected shape. + Scalars will be broadcast during operations. + + [!] This function will be redundant once weathercontainer supports batched variables. + + Args: + drv_var: driving variable in WeatherDataContainer + expected_shape: Expected shape tuple for non-scalar variables + + Raises: + ValueError: If any variable has incompatible shape + + Returns: + torch.Tensor: The validated variable, either as-is or broadcasted to expected shape. + """ + # Check shape: must be scalar (0-d) or match expected_shape + if not isinstance(drv_var, torch.Tensor) or drv_var.dim() == 0: + # Scalar is valid, will be broadcast + return _broadcast_to(drv_var, expected_shape) + elif drv_var.shape == expected_shape: + # Matches expected shape + return drv_var + else: + raise ValueError( + f"Requested weather variable has incompatible shape {drv_var.shape}. " + f"Expected scalar (0-dimensional) or shape {expected_shape}." + ) + + +def _broadcast_to(x, shape, dtype=None, device=None): + """Create a view of tensor X with the given shape. + + Args: + x: The tensor or value to broadcast + shape: The target shape + dtype: Optional dtype for the tensor (inferred from x if not provided) + device: Optional device for the tensor (inferred from x if not provided) + """ + # If x is not a tensor, convert it + if not isinstance(x, torch.Tensor): + x = torch.tensor(x) + # Ensure correct dtype and device + if dtype is not None: + x = x.to(dtype=dtype) + if device is not None: + x = x.to(device=device) + # If already the correct shape, return as-is + if x.shape == shape: + return x + if x.dim() == 0: + # For 0-d tensors, we simply broadcast to the given shape + return torch.broadcast_to(x, shape) + # The given shape should match x in all but the last axis, which represents + # the dimension along which the time integration is carried out. + # We first append an axis to x, then expand to the given shape + return x.unsqueeze(-1).expand(shape) + + +def _snapshot_state(obj): + return {name: val.clone() for name, val in obj.__dict__.items() if torch.is_tensor(val)} + + +def _restore_state(obj, snapshot): + for name, val in snapshot.items(): + setattr(obj, name, val) diff --git a/old_leaf.py b/old_leaf.py new file mode 100644 index 0000000..4363670 --- /dev/null +++ b/old_leaf.py @@ -0,0 +1,436 @@ +"""Leaf dynamics for the WOFOST crop model.""" + +import datetime +import torch +from pcse.base import ParamTemplate +from pcse.base import RatesTemplate +from pcse.base import SimulationObject +from pcse.base import StatesTemplate +from pcse.base.parameter_providers import ParameterProvider +from pcse.base.variablekiosk import VariableKiosk +from pcse.base.weather import WeatherDataContainer +from pcse.decorators import prepare_rates +from pcse.decorators import prepare_states +from pcse.traitlets import Any +from diffwofost.physical_models.utils import AfgenTrait +from diffwofost.physical_models.utils import _broadcast_to +from diffwofost.physical_models.utils import _get_drv +from diffwofost.physical_models.utils import _get_params_shape + +DTYPE = torch.float64 # Default data type for tensors in this module + + +class WOFOST_Leaf_Dynamics(SimulationObject): + """Leaf dynamics for the WOFOST crop model. + + Implementation of biomass partitioning to leaves, growth and senenscence + of leaves. WOFOST keeps track of the biomass that has been partitioned to + the leaves for each day (variable `LV`), which is called a leaf class). + For each leaf class the leaf age (variable 'LVAGE') and specific leaf area + (variable `SLA`) are also registered. Total living leaf biomass is + calculated by summing the biomass values for all leaf classes. Similarly, + leaf area is calculated by summing leaf biomass times specific leaf area + (`LV` * `SLA`). + + Senescense of the leaves can occur as a result of physiological age, + drought stress or self-shading. + + **Simulation parameters** (provide in cropdata dictionary) + + | Name | Description | Type | Unit | + |--------|------------------------------------------------------------------ |------|------------| + | RGRLAI | Maximum relative increase in LAI. |SCr | ha ha⁻¹ d⁻¹| + | SPAN | Life span of leaves growing at 35 Celsius |SCr | d | + | TBASE | Lower threshold temp. for ageing of leaves |SCr | C | + | PERDL | Max. relative death rate of leaves due to water stress |SCr | | + | TDWI | Initial total crop dry weight |SCr | kg ha⁻¹ | + | KDIFTB | Extinction coefficient for diffuse visible light as function of DVS|TCr | | + | SLATB | Specific leaf area as a function of DVS |TCr | ha kg⁻¹ | + + **State variables** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|-------------| + | LV | Leaf biomass per leaf class | N | kg ha⁻¹ | + | SLA | Specific leaf area per leaf class | N | ha kg⁻¹ | + | LVAGE | Leaf age per leaf class | N | d | + | LVSUM | Sum of LV | N | kg ha⁻¹ | + | LAIEM | LAI at emergence | N | - | + | LASUM | Total leaf area as sum of LV*SLA, not including stem and pod area | N | - | + | LAIEXP | LAI value under theoretical exponential growth | N | - | + | LAIMAX | Maximum LAI reached during growth cycle | N | - | + | LAI | Leaf area index, including stem and pod area | Y | - | + | WLV | Dry weight of living leaves | Y | kg ha⁻¹ | + | DWLV | Dry weight of dead leaves | N | kg ha⁻¹ | + | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | + + **Rate variables** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|---------------| + | GRLV | Growth rate leaves | N | kg ha⁻¹ d⁻¹ | + | DSLV1 | Death rate leaves due to water stress | N | kg ha⁻¹ d⁻¹ | + | DSLV2 | Death rate leaves due to self-shading | N | kg ha⁻¹ d⁻¹ | + | DSLV3 | Death rate leaves due to frost kill | N | kg ha⁻¹ d⁻¹ | + | DSLV | Maximum of DSLV1, DSLV2, DSLV3 | N | kg ha⁻¹ d⁻¹ | + | DALV | Death rate leaves due to aging | N | kg ha⁻¹ d⁻¹ | + | DRLV | Death rate leaves as a combination of DSLV and DALV | N | kg ha⁻¹ d⁻¹ | + | SLAT | Specific leaf area for current time step, adjusted for source/sink limited leaf expansion rate | N | ha kg⁻¹ | + | FYSAGE | Increase in physiological leaf age | N | - | + | GLAIEX | Sink-limited leaf expansion rate (exponential curve) | N | ha ha⁻¹ d⁻¹ | + | GLASOL | Source-limited leaf expansion rate (biomass increase) | N | ha ha⁻¹ d⁻¹ | + + **External dependencies** + + | Name | Description | Provided by | Unit | + |-----------|-----------------------------------|--------------------------------|----------------| + | DVS | Crop development stage | DVS_Phenology | - | + | FL | Fraction biomass to leaves | DVS_Partitioning | - | + | FR | Fraction biomass to roots | DVS_Partitioning | - | + | SAI | Stem area index | WOFOST_Stem_Dynamics | - | + | PAI | Pod area index | WOFOST_Storage_Organ_Dynamics | - | + | TRA | Transpiration rate | Evapotranspiration | cm day⁻¹ ? | + | TRAMX | Maximum transpiration rate | Evapotranspiration | cm day⁻¹ ? | + | ADMI | Above-ground dry matter increase | CropSimulation | kg ha⁻¹ d⁻¹ | + | RFTRA | Reduction factor for transpiration (water & oxygen) | Y | - | + | RF_FROST | Reduction factor frost kill | FROSTOL (optional) | - | + + **Outputs** + + | Name | Description | Pbl | Unit | + |--------|-------------------------------------------------------|------|-------------| + | LAI | Leaf area index, including stem and pod area | Y | - | + | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | + + **Gradient mapping (which parameters have a gradient):** + + | Output | Parameters influencing it | + |--------|------------------------------------------| + | LAI | TDWI, SPAN, RGRLAI, TBASE, KDIFTB, SLATB | + | TWLV | TDWI, PERDL | + + [!NOTE] + Notice that the following gradients are zero: + - ∂SPAN/∂LAI + - ∂PERDL/∂TWLV + - ∂KDIFTB/∂LAI + """ # noqa: E501 + + # The following parameters are used to initialize and control the arrays that store information + # on the leaf classes during the time integration: leaf area, age, and biomass. + START_DATE = None # Start date of the simulation + MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) + params_shape = None # Shape of the parameters tensors + + class Parameters(ParamTemplate): + RGRLAI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + SPAN = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + TBASE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + PERDL = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + TDWI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + SLATB = AfgenTrait() + KDIFTB = AfgenTrait() + + class StateVariables(StatesTemplate): + LV = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + SLA = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + LVAGE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) + LAIEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LASUM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAIEXP = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAIMAX = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + LAI = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + WLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + DWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + TWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) + + class RateVariables(RatesTemplate): + GRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV1 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV2 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV3 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DSLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DALV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + DRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + SLAT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + FYSAGE = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + GLAIEX = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + GLASOL = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) + + def initialize( + self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider + ) -> None: + """Initialize the WOFOST_Leaf_Dynamics simulation object. + + Args: + day (datetime.date): The starting date of the simulation. + kiosk (VariableKiosk): A container for registering and publishing + (internal and external) state variables. See PCSE documentation for + details. + parvalues (ParameterProvider): A dictionary-like container holding + all parameter sets (crop, soil, site) as key/value. The values are + arrays or scalars. See PCSE documentation for details. + """ + self.START_DATE = day + self.kiosk = kiosk + # TODO check if parvalues are already torch.nn.Parameters + self.params = self.Parameters(parvalues) + self.rates = self.RateVariables(kiosk) + + # CALCULATE INITIAL STATE VARIABLES + # check for required external variables + _exist_required_external_variables(self.kiosk) + # TODO check if external variables are already torch tensors + + FL = self.kiosk["FL"] + FR = self.kiosk["FR"] + DVS = self.kiosk["DVS"] + + params = self.params + self.params_shape = _get_params_shape(params) + + # Initial leaf biomass + WLV = (params.TDWI * (1 - FR)) * FL + DWLV = torch.zeros(self.params_shape, dtype=DTYPE) + TWLV = WLV + DWLV + + # Initialize leaf classes (SLA, age and weight) + SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + LVAGE = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) + SLA[..., 0] = params.SLATB(DVS) + LV[..., 0] = WLV + + # Initial values for leaf area + LAIEM = LV[..., 0] * SLA[..., 0] + LASUM = LAIEM + LAIEXP = LAIEM + LAIMAX = LAIEM + LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] + + # Initialize StateVariables object + self.states = self.StateVariables( + kiosk, + publish=["LAI", "TWLV", "WLV"], + LV=LV, + SLA=SLA, + LVAGE=LVAGE, + LAIEM=LAIEM, + LASUM=LASUM, + LAIEXP=LAIEXP, + LAIMAX=LAIMAX, + LAI=LAI, + WLV=WLV, + DWLV=DWLV, + TWLV=TWLV, + ) + + def _calc_LAI(self): + # Total leaf area Index as sum of leaf, pod and stem area + SAI = self.kiosk["SAI"] + PAI = self.kiosk["PAI"] + total_LAI = self.states.LASUM + SAI + PAI + return total_LAI + + @prepare_rates + def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: + """Calculate the rates of change for the leaf dynamics. + + Args: + day (datetime.date, optional): The current date of the simulation. + drv (WeatherDataContainer, optional): A dictionary-like container holding + weather data elements as key/value. The values are + arrays or scalars. See PCSE documentation for details. + """ + r = self.rates + s = self.states + p = self.params + k = self.kiosk + + # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask + # A mask (0 if DVS < 0, 1 if DVS >= 0) + DVS = torch.as_tensor(k["DVS"], dtype=DTYPE) + dvs_mask = (DVS >= 0).to(dtype=DTYPE) + + # Growth rate leaves + # weight of new leaves + r.GRLV = dvs_mask * k.ADMI * k.FL + + # death of leaves due to water/oxygen stress + r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL + + # death due to self shading cause by high LAI + DVS = self.kiosk["DVS"] + LAICR = 3.2 / p.KDIFTB(DVS) + r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) + + # Death of leaves due to frost damage as determined by + # Reduction Factor Frost "RF_FROST" + if "RF_FROST" in self.kiosk: + r.DSLV3 = s.WLV * k.RF_FROST + else: + r.DSLV3 = torch.zeros_like(s.WLV, dtype=DTYPE) + + r.DSLV3 = dvs_mask * r.DSLV3 + + # leaf death equals maximum of water stress, shading and frost + r.DSLV = torch.maximum(torch.maximum(r.DSLV1, r.DSLV2), r.DSLV3) + r.DSLV = dvs_mask * r.DSLV + + # Determine how much leaf biomass classes have to die in states.LV, + # given the a life span > SPAN, these classes will be accumulated + # in DALV. + # Note that the actual leaf death is imposed on the array LV during the + # state integration step. + tSPAN = _broadcast_to(p.SPAN, s.LVAGE.shape) # Broadcast to same shape + + # Using a sigmoid here instead of a conditional statement on the value of + # SPAN because the latter would not allow for the gradient to be tracked. + # the if statement `p.SPAN.requires_grad` to avoid unnecessary + # approximation when SPAN is not a learnable parameter. + # TODO: sharpness can be exposed as a parameter + if p.SPAN.requires_grad: + # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very + # small and mask should be 1 + sharpness = torch.tensor(1e-16, dtype=DTYPE) + + # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is + # equal to zero and mask should be 0.0 + epsilon = 1e-14 + span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=DTYPE) + else: + span_mask = (s.LVAGE > tSPAN).to(dtype=DTYPE) + + r.DALV = torch.sum(span_mask * s.LV, dim=-1) + r.DALV = dvs_mask * r.DALV + + # Total death rate leaves + r.DRLV = torch.maximum(r.DSLV, r.DALV) + + # Get the temperature from the drv + TEMP = _get_drv(drv.TEMP, self.params_shape) + + # physiologic ageing of leaves per time step + TBASE = _broadcast_to(p.TBASE, self.params_shape) + FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) + r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) + + # specific leaf area of leaves per time step + r.SLAT = dvs_mask * p.SLATB(DVS) + + # leaf area not to exceed exponential growth curve + is_lai_exp = s.LAIEXP < 6.0 + DTEFF = torch.clamp(TEMP - TBASE, 0.0) + + # NOTE: conditional statements do not allow for the gradient to be + # tracked through the condition. Thus, the gradient with respect to + # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) + # are expected to be incorrect. + r.GLAIEX = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), + torch.tensor(0.0, dtype=DTYPE), + ) + + # source-limited increase in leaf area + r.GLASOL = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), + torch.tensor(0.0, dtype=DTYPE), + ) + + # sink-limited increase in leaf area + GLA = torch.minimum(r.GLAIEX, r.GLASOL) + + # adjustment of specific leaf area of youngest leaf class + epsilon = 1e-10 # small value to avoid division by zero + r.SLAT = torch.where( + dvs_mask.bool(), + torch.where(is_lai_exp & (r.GRLV > epsilon), GLA / (r.GRLV + epsilon), r.SLAT), + torch.tensor(0.0, dtype=DTYPE), + ) + + @prepare_states + def integrate(self, day: datetime.date, delt=1.0) -> None: + """Integrate the leaf dynamics state variables. + + Args: + day (datetime.date, optional): The current date of the simulation. + delt (float, optional): The time step for integration. Defaults to 1.0. + """ + # TODO check if DVS < 0 and skip integration needed + rates = self.rates + states = self.states + + # --------- leave death --------- + tLV = states.LV.clone() + tSLA = states.SLA.clone() + tLVAGE = states.LVAGE.clone() + tDRLV = _broadcast_to(rates.DRLV, tLV.shape) + + # Leaf death is imposed on leaves from the oldest ones. + # Calculate the cumulative sum of weights after leaf death, and + # find out which leaf classes are dead (negative weights) + weight_cumsum = tLV.cumsum(dim=-1) - tDRLV + is_alive = weight_cumsum >= 0 + + # Adjust value of oldest leaf class, i.e. the first non-zero + # weight along the time axis (the last dimension). + # Cast argument to int because torch.argmax requires it to be numeric + idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True) + new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) + tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) + + # Integration of physiological age + # Zero out all dead leaf classes + # NOTE: conditional statements do not allow for the gradient to be + # tracked through the condition. Thus, the gradient with respect to + # parameters that contribute to `is_alive` are expected to be incorrect. + tLV = torch.where(is_alive, tLV, 0.0) + tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) + tLVAGE = torch.where(is_alive, tLVAGE, 0.0) + tSLA = torch.where(is_alive, tSLA, 0.0) + + # --------- leave growth --------- + idx = int((day - self.START_DATE).days / delt) + tLV[..., idx] = rates.GRLV + tSLA[..., idx] = rates.SLAT + tLVAGE[..., idx] = 0.0 + + # calculation of new leaf area + states.LASUM = torch.sum(tLV * tSLA, dim=-1) + states.LAI = self._calc_LAI() + states.LAIMAX = torch.maximum(states.LAI, states.LAIMAX) + + # exponential growth curve + states.LAIEXP = states.LAIEXP + rates.GLAIEX + + # Update leaf biomass states + states.WLV = torch.sum(tLV, dim=-1) + states.DWLV = states.DWLV + rates.DRLV + states.TWLV = states.WLV + states.DWLV + + # Store final leaf biomass deques + self.states.LV = tLV + self.states.SLA = tSLA + self.states.LVAGE = tLVAGE + + +def _exist_required_external_variables(kiosk): + """Check if all required external variables are available in the kiosk. + + Args: + kiosk (VariableKiosk): The variable kiosk to check. + + Raises: + ValueError: If any required external variable is missing. + + """ + required_external_vars_at_init = ["DVS", "FL", "FR", "SAI", "PAI"] + for var in required_external_vars_at_init: + if var not in kiosk: + raise ValueError( + f"Required external variables '{var}' is missing in the kiosk." + f" Ensure that all required variables {required_external_vars_at_init}" + " are provided." + ) diff --git a/old_utils.py b/old_utils.py new file mode 100644 index 0000000..5195526 --- /dev/null +++ b/old_utils.py @@ -0,0 +1,648 @@ +"""This file contains code that is required to run the YAML unit tests. + +It contains: + - VariableKioskTestHelper: A subclass of the VariableKiosk that can use externally + forced states/rates + - ConfigurationLoaderTestHelper: An subclass of ConfigurationLoader that allows to + specify the simbojects to be test dynamically + - EngineTestHelper: engine specifically for running the YAML tests. + - WeatherDataProviderTestHelper: a weatherdata provides that takes the weather + inputs from the YAML file. + +Note that the code here is *not* python2 compatible. +""" + +import logging +import os +from collections.abc import Iterable +import torch +import yaml +from pcse import signals +from pcse.agromanager import AgroManager +from pcse.base import ConfigurationLoader +from pcse.base.parameter_providers import ParameterProvider +from pcse.base.variablekiosk import VariableKiosk +from pcse.base.weather import WeatherDataContainer +from pcse.base.weather import WeatherDataProvider +from pcse.engine import BaseEngine +from pcse.engine import Engine +from pcse.settings import settings +from pcse.timer import Timer +from pcse.traitlets import Enum +from pcse.traitlets import TraitType + +DTYPE = torch.float64 # Default data type for tensors in this module + +logging.disable(logging.CRITICAL) + +this_dir = os.path.dirname(__file__) + + +def nothing(*args, **kwargs): + """A function that does nothing.""" + pass + + +class VariableKioskTestHelper(VariableKiosk): + """Variable Kiosk for testing purposes which allows to use external states.""" + + external_state_list = None + + def __init__(self, external_state_list): + super().__init__() + self.current_externals = {} + if external_state_list: + self.external_state_list = external_state_list + + def __call__(self, day): + """Sets the external state/rate variables for the current day. + + Returns True if the list of external state/rate variables is exhausted, + otherwise False. + """ + if self.external_state_list: + current_externals = self.external_state_list.pop(0) + forcing_day = current_externals.pop("DAY") + msg = "Failure updating VariableKiosk with external states: days are not matching!" + assert forcing_day == day, msg + self.current_externals.clear() + self.current_externals.update(current_externals) + if len(self.external_state_list) == 0: + return True + + return False + + def is_external_state(self, item): + """Returns True if the item is an external state.""" + return item in self.current_externals + + def __getattr__(self, item): + """Allow use of attribute notation. + + eg "kiosk.LAI" on published rates or states. + """ + if item in self.current_externals: + return self.current_externals[item] + else: + return dict.__getitem__(self, item) + + def __getitem__(self, item): + """Override __getitem__ to first look in external states.""" + if item in self.current_externals: + return self.current_externals[item] + else: + return dict.__getitem__(self, item) + + def __contains__(self, key): + """Override __contains__ to first look in external states.""" + return key in self.current_externals or dict.__contains__(self, key) + + +class ConfigurationLoaderTestHelper(ConfigurationLoader): + def __init__(self, YAML_test_inputs, simobject, waterbalance=None): + self.model_config_file = "Test config" + self.description = "Configuration loader for running YAML tests" + self.CROP = simobject + self.SOIL = waterbalance + self.AGROMANAGEMENT = AgroManager + self.OUTPUT_INTERVAL = "daily" + self.OUTPUT_INTERVAL_DAYS = 1 + self.OUTPUT_WEEKDAY = 0 + self.OUTPUT_VARS = list(YAML_test_inputs["Precision"].keys()) + self.SUMMARY_OUTPUT_VARS = [] + self.TERMINAL_OUTPUT_VARS = [] + + +class EngineTestHelper(Engine): + """An engine which is purely for running the YAML unit tests.""" + + def __init__( + self, + parameterprovider, + weatherdataprovider, + agromanagement, + test_config, + external_states=None, + ): + BaseEngine.__init__(self) + + # Load the model configuration + self.mconf = ConfigurationLoader(test_config) + self.parameterprovider = parameterprovider + + # Variable kiosk for registering and publishing variables + self.kiosk = VariableKioskTestHelper(external_states) + + # Placeholder for variables to be saved during a model run + self._saved_output = list() + self._saved_summary_output = list() + self._saved_terminal_output = dict() + + # register handlers for starting/finishing the crop simulation, for + # handling output and terminating the system + self._connect_signal(self._on_CROP_START, signal=signals.crop_start) + self._connect_signal(self._on_CROP_FINISH, signal=signals.crop_finish) + self._connect_signal(self._on_OUTPUT, signal=signals.output) + self._connect_signal(self._on_TERMINATE, signal=signals.terminate) + + # Component for agromanagement + self.agromanager = self.mconf.AGROMANAGEMENT(self.kiosk, agromanagement) + start_date = self.agromanager.start_date + end_date = self.agromanager.end_date + + # Timer: starting day, final day and model output + self.timer = Timer(self.kiosk, start_date, end_date, self.mconf) + self.day, delt = self.timer() + # Update external states in the kiosk + self.kiosk(self.day) + + # Driving variables + self.weatherdataprovider = weatherdataprovider + self.drv = self._get_driving_variables(self.day) + + # Component for simulation of soil processes + if self.mconf.SOIL is not None: + self.soil = self.mconf.SOIL(self.day, self.kiosk, parameterprovider) + + # Call AgroManagement module for management actions at initialization + self.agromanager(self.day, self.drv) + + # Calculate initial rates + self.calc_rates(self.day, self.drv) + + def _run(self): + """Make one time step of the simulation.""" + # Update timer + self.day, delt = self.timer() + + # When the list of external states is exhausted the VariableKioskTestHelper will + # return True signalling the end of the test + stop_test = self.kiosk(self.day) + if stop_test: + self._send_signal( + signal=signals.crop_finish, day=self.day, finish_type="maturity", crop_delete=False + ) + + # State integration and update to forced variables + self.integrate(self.day, delt) + + # Driving variables + self.drv = self._get_driving_variables(self.day) + + # Agromanagement decisions + self.agromanager(self.day, self.drv) + + # Rate calculation + self.calc_rates(self.day, self.drv) + + if self.flag_terminate is True: + self._terminate_simulation(self.day) + + +class WeatherDataProviderTestHelper(WeatherDataProvider): + """It stores the weatherdata contained within the YAML tests.""" + + def __init__(self, yaml_weather, meteo_range_checks=True): + super().__init__() + # This is a temporary workaround. The `METEO_RANGE_CHECKS` logic in + # `__setattr__` method in `WeatherDataContainer` is not vector compatible + # yet. So we can disable it here when creating the `WeatherDataContainer` + # instances with arrays. + settings.METEO_RANGE_CHECKS = meteo_range_checks + for weather in yaml_weather: + if "SNOWDEPTH" in weather: + weather.pop("SNOWDEPTH") + wdc = WeatherDataContainer(**weather) + self._store_WeatherDataContainer(wdc, wdc.DAY) + + +def prepare_engine_input( + test_data, crop_model_params, meteo_range_checks=True, dtype=torch.float64 +): + """Prepare the inputs for the engine from the YAML file.""" + agro_management_inputs = test_data["AgroManagement"] + cropd = test_data["ModelParameters"] + + weather_data_provider = WeatherDataProviderTestHelper( + test_data["WeatherVariables"], meteo_range_checks=meteo_range_checks + ) + crop_model_params_provider = ParameterProvider(cropdata=cropd) + external_states = test_data.get("ExternalStates") or [] + + # convert parameters to tensors + crop_model_params_provider.clear_override() + for name in crop_model_params: + # if name is missing in the YAML, skip it + if name in crop_model_params_provider: + value = torch.tensor(crop_model_params_provider[name], dtype=dtype) + crop_model_params_provider.set_override(name, value, check=False) + + # convert external states to tensors + tensor_external_states = [ + {k: v if k == "DAY" else torch.tensor(v, dtype=dtype) for k, v in item.items()} + for item in external_states + ] + return ( + crop_model_params_provider, + weather_data_provider, + agro_management_inputs, + tensor_external_states, + ) + + +def get_test_data(test_data_path): + """Get the test data from the YAML file.""" + with open(test_data_path) as f: + return yaml.safe_load(f) + + +def calculate_numerical_grad(get_model_fn, param_name, param_value, out_name): + """Calculate the numerical gradient of output with respect to a parameter.""" + delta = 1e-6 + + # Parameters like RDRRTB are batched tables, so we need to compute + # the gradient for each table element separately + # So, we flatten the parameter for easier indexing + param_flat = param_value.reshape(-1) + grad_flat = torch.zeros_like(param_flat) + + for i in range(param_flat.numel()): + p_plus = param_flat.clone() + p_plus[i] += delta + p_minus = param_flat.clone() + p_minus[i] -= delta + + p_plus = p_plus.view_as(param_value) + p_minus = p_minus.view_as(param_value) + + model = get_model_fn() + out_plus = model({param_name: p_plus})[out_name] + loss_plus = out_plus.sum() + + model = get_model_fn() + out_minus = model({param_name: p_minus})[out_name] + loss_minus = out_minus.sum() + + grad_flat[i] = (loss_plus - loss_minus) / (2 * delta) + + return grad_flat.view_as(param_value) + + +class Afgen: + """Differentiable AFGEN function, expanded from pcse. + + AFGEN is a linear interpolation function based on a table of XY pairs. + Now supports batched tables (tensor of lists) for vectorized operations. + """ + + def _check_x_ascending(self, tbl_xy): + """Checks that the x values are strictly ascending. + + Also truncates any trailing (0.,0.) pairs as a result of data coming + from a CGMS database. + + Args: + tbl_xy: Table of XY pairs as a tensor or array-like object. + Can be 1D (single table) or ND (vectorized tables). + + Returns: + list or tensor: List of valid indices (for 1D) or tensor of valid counts (for ND). + + Raises: + ValueError: If x values are not strictly ascending. + """ + # Handle batched tables (>1D tensors) + if tbl_xy.dim() > 1: + batch_shape = tbl_xy.shape[:-1] + table_len = tbl_xy.shape[-1] + + # Flatten batch dimensions for processing + flat_tables = tbl_xy.reshape(-1, table_len) + num_tables = flat_tables.shape[0] + + valid_counts = [] + for idx in range(num_tables): + table = flat_tables[idx] + x_list = table[0::2] + y_list = table[1::2] + n = len(x_list) + + # Find trailing (0, 0) pairs to truncate + valid_n = n + for i in range(n - 1, 0, -1): + if x_list[i] == 0 and y_list[i] == 0: + valid_n = i + else: + break + + # Check if x range is strictly ascending + valid_x_list = x_list[:valid_n] + for i in range(1, len(valid_x_list)): + if valid_x_list[i] <= valid_x_list[i - 1]: + msg = ( + "X values for AFGEN input list" + + " not strictly ascending: {x_list.tolist()}" + ) + raise ValueError(msg) + + valid_counts.append(valid_n) + + return torch.tensor(valid_counts).reshape(batch_shape) + + # Original 1D logic from pcse + x_list = tbl_xy[0::2] + y_list = tbl_xy[1::2] + n = len(x_list) + + # Find trailing (0, 0) pairs to truncate + valid_n = n + for i in range(n - 1, 0, -1): + if x_list[i] == 0 and y_list[i] == 0: + valid_n = i + else: + break + + # Check only the valid (non-trailing-zero) portion + valid_x_list = x_list[:valid_n] + + # Check if x range is strictly ascending + for i in range(1, len(valid_x_list)): + if valid_x_list[i] <= valid_x_list[i - 1]: + msg = f"X values for AFGEN input list not strictly ascending: {x_list.tolist()}" + raise ValueError(msg) + + return list(range(valid_n)) + + def __init__(self, tbl_xy): + # Convert to tensor if needed + tbl_xy = torch.as_tensor(tbl_xy, dtype=DTYPE) + + # Detect if we have batched tables (>1D) + self.is_batched = tbl_xy.dim() > 1 + + if self.is_batched: + self.batch_shape = tbl_xy.shape[:-1] + table_len = tbl_xy.shape[-1] + + # Store the full batched tables + self.tbl_xy = tbl_xy + + # Get valid counts for each table + valid_counts = self._check_x_ascending(tbl_xy) + self.valid_counts = valid_counts + + # Extract x and y for all tables + flat_tables = tbl_xy.reshape(-1, table_len) + num_tables = flat_tables.shape[0] + + x_list_batch = [] + y_list_batch = [] + slopes_batch = [] + + for idx in range(num_tables): + table = flat_tables[idx] + valid_n = valid_counts.flatten()[idx].item() + + x_indices = torch.tensor([2 * i for i in range(valid_n)]) + y_indices = torch.tensor([2 * i + 1 for i in range(valid_n)]) + + x_vals = table[x_indices] + y_vals = table[y_indices] + + # Calculate slopes + if len(x_vals) > 1: + slopes = (y_vals[1:] - y_vals[:-1]) / (x_vals[1:] - x_vals[:-1]) + else: + slopes = torch.tensor([], dtype=DTYPE) + + x_list_batch.append(x_vals) + y_list_batch.append(y_vals) + slopes_batch.append(slopes) + + # Store as lists - don't reshape, just keep the flat structure + self.x_list_batch = x_list_batch + self.y_list_batch = y_list_batch + self.slopes_batch = slopes_batch + + else: + # Original 1D logic from pcse + self.batch_shape = None + indices = self._check_x_ascending(tbl_xy) + + # Extract x and y values using indices + x_indices = torch.tensor([2 * i for i in indices]) + y_indices = torch.tensor([2 * i + 1 for i in indices]) + self.x_list = tbl_xy[x_indices] + self.y_list = tbl_xy[y_indices] + + # Calculate slopes + x1 = self.x_list[:-1] + x2 = self.x_list[1:] + y1 = self.y_list[:-1] + y2 = self.y_list[1:] + self.slopes = (y2 - y1) / (x2 - x1) + + def __call__(self, x): + """Returns the interpolated value at abscissa x. + + Args: + x (torch.Tensor): The abscissa value at which to interpolate. + Can be scalar or batched to match table dimensions. + + Returns: + torch.Tensor: The interpolated value, preserving batch dimensions. + """ + x = torch.as_tensor(x, dtype=DTYPE) + + if self.is_batched: + # Ensure x has compatible shape for broadcasting + # x can be scalar or have batch dimensions + + # Flatten batch dimensions for processing + flat_x = x.reshape(-1) if x.dim() > 0 else x.unsqueeze(0) + num_queries = flat_x.shape[0] if flat_x.dim() > 0 else 1 + + results = [] + + # Process each table + for idx in range(len(self.x_list_batch)): + x_list = self.x_list_batch[idx] + y_list = self.y_list_batch[idx] + slopes = self.slopes_batch[idx] + + # Get the query value (broadcast if needed) + if num_queries == 1: + x_val = flat_x[0] if flat_x.dim() > 0 else flat_x + elif idx < num_queries: + x_val = flat_x[idx] + else: + x_val = flat_x[0] # Broadcast first value + + # Ensure contiguous memory layout for searchsorted + x_list_contig = x_list.contiguous() + x_val_contig = ( + x_val.contiguous() + if isinstance(x_val, torch.Tensor) and x_val.dim() > 0 + else x_val + ) + + # Find interval and interpolate using torch.where for differentiability + i = torch.searchsorted(x_list_contig, x_val_contig, right=False) - 1 + i = torch.clamp(i, 0, len(x_list) - 2) + + # Calculate interpolated value + interp_result = y_list[i] + slopes[i] * (x_val - x_list[i]) + + # Apply boundary conditions using torch.where + result = torch.where( + x_val <= x_list[0], + y_list[0], + torch.where(x_val >= x_list[-1], y_list[-1], interp_result), + ) + + results.append(result) + + # Reshape to original batch shape + output = torch.stack(results).reshape(self.batch_shape) + return output + + # Ensure contiguous memory layout for searchsorted + x_list_contig = self.x_list.contiguous() + x_contig = x.contiguous() if isinstance(x, torch.Tensor) and x.dim() > 0 else x + + # Find interval index using torch.searchsorted for differentiability + i = torch.searchsorted(x_list_contig, x_contig, right=False) - 1 + i = torch.clamp(i, 0, len(self.x_list) - 2) + + # Calculate interpolated value + interp_value = self.y_list[i] + self.slopes[i] * (x - self.x_list[i]) + + # Apply boundary conditions using torch.where + result = torch.where( + x <= self.x_list[0], + self.y_list[0], + torch.where(x >= self.x_list[-1], self.y_list[-1], interp_value), + ) + + return result + + @property + def shape(self): + """Returns the shape of the Afgen table.""" + return self.batch_shape + + +class AfgenTrait(TraitType): + """An AFGEN table trait. + + Attributes: + default_value: Default Afgen instance with identity mapping. + into_text: Description of the trait type. + """ + + default_value = Afgen([0, 0, 1, 1]) + into_text = "An AFGEN table of XY pairs" + + def validate(self, obj, value): + """Validate that the value is an Afgen instance or an iterable to create one. + + Args: + obj: The object instance containing this trait. + value: The value to validate (either an Afgen instance or an iterable). + + Returns: + Afgen: A validated Afgen instance. + + Raises: + TraitError: If the value cannot be validated as an Afgen instance. + """ + if isinstance(value, Afgen): + return value + elif isinstance(value, Iterable): + return Afgen(value) + self.error(obj, value) + + +def _get_params_shape(params): + """Get the parameters shape. + + Parameters can have arbitrary number of dimensions, but all parameters that are not zero- + dimensional should have the same shape. + + This check if fundamental for vectorized operations in the physical models. + """ + shape = () + for parname in params.trait_names(): + # Skip special traitlets attributes + if parname.startswith("trait"): + continue + param = getattr(params, parname) + # Skip Enum and str parameters + if isinstance(param, Enum) or isinstance(param, str): + continue + # Parameters that are not zero dimensional should all have the same shape + if param.shape and not shape: + shape = param.shape + elif param.shape: + assert param.shape == shape, ( + "All parameters should have the same shape (or have no dimensions)" + ) + return shape + + +def _get_drv(drv_var, expected_shape): + """Check that the driving variables have the expected shape and fetch them. + + Driving variables can be scalars (0-dimensional) or match the expected shape. + Scalars will be broadcast during operations. + + [!] This function will be redundant once weathercontainer supports batched variables. + + Args: + drv_var: driving variable in WeatherDataContainer + expected_shape: Expected shape tuple for non-scalar variables + + Raises: + ValueError: If any variable has incompatible shape + + Returns: + torch.Tensor: The validated variable, either as-is or broadcasted to expected shape. + """ + # Check shape: must be scalar (0-d) or match expected_shape + if not isinstance(drv_var, torch.Tensor) or drv_var.dim() == 0: + # Scalar is valid, will be broadcast + return _broadcast_to(drv_var, expected_shape) + elif drv_var.shape == expected_shape: + # Matches expected shape + return drv_var + else: + raise ValueError( + f"Requested weather variable has incompatible shape {drv_var.shape}. " + f"Expected scalar (0-dimensional) or shape {expected_shape}." + ) + + +def _broadcast_to(x, shape): + """Create a view of tensor X with the given shape.""" + # If x is not a tensor, convert it + if not isinstance(x, torch.Tensor): + x = torch.tensor(x, dtype=DTYPE) + # If already the correct shape, return as-is + if x.shape == shape: + return x + if x.dim() == 0: + # For 0-d tensors, we simply broadcast to the given shape + return torch.broadcast_to(x, shape) + # The given shape should match x in all but the last axis, which represents + # the dimension along which the time integration is carried out. + # We first append an axis to x, then expand to the given shape + return x.unsqueeze(-1).expand(shape) + + +def _snapshot_state(obj): + return {name: val.clone() for name, val in obj.__dict__.items() if torch.is_tensor(val)} + + +def _restore_state(obj, snapshot): + for name, val in snapshot.items(): + setattr(obj, name, val) diff --git a/src/diffwofost/physical_models/crop/leaf_dynamics.py b/src/diffwofost/physical_models/crop/leaf_dynamics.py index ca8f8bb..ddd4c5e 100644 --- a/src/diffwofost/physical_models/crop/leaf_dynamics.py +++ b/src/diffwofost/physical_models/crop/leaf_dynamics.py @@ -264,9 +264,10 @@ def initialize( _exist_required_external_variables(self.kiosk) # TODO check if external variables are already torch tensors - FL = self.kiosk["FL"] - FR = self.kiosk["FR"] - DVS = self.kiosk["DVS"] + # Get kiosk values and ensure they're on the correct device + FL = torch.as_tensor(self.kiosk["FL"], dtype=self.dtype, device=self.device) + FR = torch.as_tensor(self.kiosk["FR"], dtype=self.dtype, device=self.device) + DVS = torch.as_tensor(self.kiosk["DVS"], dtype=self.dtype, device=self.device) params = self.params self.params_shape = _get_params_shape(params) @@ -282,7 +283,7 @@ def initialize( (*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device ) LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) - SLA[..., 0] = params.SLATB(DVS) + SLA[..., 0] = params.SLATB(DVS).to(dtype=self.dtype, device=self.device) LV[..., 0] = WLV # Initial values for leaf area @@ -290,7 +291,9 @@ def initialize( LASUM = LAIEM LAIEXP = LAIEM LAIMAX = LAIEM - LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] + SAI = torch.as_tensor(self.kiosk["SAI"], dtype=self.dtype, device=self.device) + PAI = torch.as_tensor(self.kiosk["PAI"], dtype=self.dtype, device=self.device) + LAI = LASUM + SAI + PAI # Initialize StateVariables object self.states = self.StateVariables( @@ -334,7 +337,7 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask # A mask (0 if DVS < 0, 1 if DVS >= 0) DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) - dvs_mask = (DVS >= 0).to(dtype=self.dtype) + dvs_mask = (DVS >= 0).to(dtype=self.dtype).to(device=self.device) # Growth rate leaves # weight of new leaves @@ -393,7 +396,7 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: r.DRLV = torch.maximum(r.DSLV, r.DALV) # Get the temperature from the drv - TEMP = _get_drv(drv.TEMP, self.params_shape) + TEMP = _get_drv(drv.TEMP, self.params_shape, self.dtype, self.device) # physiologic ageing of leaves per time step TBASE = _broadcast_to(p.TBASE, self.params_shape, dtype=self.dtype, device=self.device) diff --git a/src/diffwofost/physical_models/crop/phenology.py b/src/diffwofost/physical_models/crop/phenology.py index e78f699..04b6c9f 100644 --- a/src/diffwofost/physical_models/crop/phenology.py +++ b/src/diffwofost/physical_models/crop/phenology.py @@ -243,7 +243,7 @@ def calc_rates(self, day, drv): VERNBASE = params.VERNBASE DVS = self.kiosk["DVS"] - TEMP = _get_drv(drv.TEMP, self.params_shape) + TEMP = _get_drv(drv.TEMP, self.params_shape, self.dtype, self.device) # Operate elementwise only on elements not yet vernalised not_vernalised = ~self.states.ISVERNALISED @@ -680,7 +680,7 @@ def calc_rates(self, day, drv): torch.ones(shape, dtype=self.dtype, device=self.device), ) - TEMP = _get_drv(drv.TEMP, shape) + TEMP = _get_drv(drv.TEMP, shape, self.dtype, self.device) # Initialize all rate variables r.DTSUME = torch.zeros(shape, dtype=self.dtype, device=self.device) diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index 1c2a36f..340098d 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -223,7 +223,7 @@ def __init__(self, yaml_weather, meteo_range_checks=True): def prepare_engine_input( - test_data, crop_model_params, meteo_range_checks=True, dtype=torch.float64 + test_data, crop_model_params, meteo_range_checks=True, dtype=torch.float64, device="cpu" ): """Prepare the inputs for the engine from the YAML file.""" agro_management_inputs = test_data["AgroManagement"] @@ -240,7 +240,7 @@ def prepare_engine_input( for name in crop_model_params: # if name is missing in the YAML, skip it if name in crop_model_params_provider: - value = torch.tensor(crop_model_params_provider[name], dtype=dtype) + value = torch.tensor(crop_model_params_provider[name], dtype=dtype, device=device) crop_model_params_provider.set_override(name, value, check=False) # convert external states to tensors @@ -379,13 +379,9 @@ def _check_x_ascending(self, tbl_xy): return list(range(valid_n)) - def __init__(self, tbl_xy, dtype=torch.float64): + def __init__(self, tbl_xy): # Convert to tensor if needed - tbl_xy = torch.as_tensor(tbl_xy, dtype=dtype) - - # Store dtype and device from the input table - self.dtype = tbl_xy.dtype - self.device = tbl_xy.device + tbl_xy = torch.as_tensor(tbl_xy) # Detect if we have batched tables (>1D) self.is_batched = tbl_xy.dim() > 1 @@ -423,7 +419,7 @@ def __init__(self, tbl_xy, dtype=torch.float64): if len(x_vals) > 1: slopes = (y_vals[1:] - y_vals[:-1]) / (x_vals[1:] - x_vals[:-1]) else: - slopes = torch.tensor([], dtype=self.dtype, device=self.device) + slopes = torch.tensor([], dtype=torch.float64) x_list_batch.append(x_vals) y_list_batch.append(y_vals) @@ -462,7 +458,16 @@ def __call__(self, x): Returns: torch.Tensor: The interpolated value, preserving batch dimensions. """ - x = torch.as_tensor(x, dtype=self.dtype, device=self.device) + # Convert to tensor and ensure it's on the same device as the tables + if self.is_batched: + # Get device and dtype from the first table + target_device = self.x_list_batch[0].device + target_dtype = self.x_list_batch[0].dtype + else: + # Get device and dtype from the tables + target_device = self.x_list.device + target_dtype = self.x_list.dtype + x = torch.as_tensor(x, dtype=target_dtype, device=target_device) if self.is_batched: # Ensure x has compatible shape for broadcasting @@ -600,7 +605,7 @@ def _get_params_shape(params): return shape -def _get_drv(drv_var, expected_shape): +def _get_drv(drv_var, expected_shape, dtype, device=None): """Check that the driving variables have the expected shape and fetch them. Driving variables can be scalars (0-dimensional) or match the expected shape. @@ -611,6 +616,8 @@ def _get_drv(drv_var, expected_shape): Args: drv_var: driving variable in WeatherDataContainer expected_shape: Expected shape tuple for non-scalar variables + dtype: dtype for the tensor + device: Optional device for the tensor Raises: ValueError: If any variable has incompatible shape @@ -621,9 +628,13 @@ def _get_drv(drv_var, expected_shape): # Check shape: must be scalar (0-d) or match expected_shape if not isinstance(drv_var, torch.Tensor) or drv_var.dim() == 0: # Scalar is valid, will be broadcast - return _broadcast_to(drv_var, expected_shape) + return _broadcast_to(drv_var, expected_shape, dtype, device) elif drv_var.shape == expected_shape: # Matches expected shape + if dtype is not None: + drv_var = drv_var.to(dtype=dtype) + if device is not None: + drv_var = drv_var.to(device=device) return drv_var else: raise ValueError( @@ -632,18 +643,18 @@ def _get_drv(drv_var, expected_shape): ) -def _broadcast_to(x, shape, dtype=None, device=None): +def _broadcast_to(x, shape, dtype, device=None): """Create a view of tensor X with the given shape. Args: x: The tensor or value to broadcast shape: The target shape - dtype: Optional dtype for the tensor (inferred from x if not provided) - device: Optional device for the tensor (inferred from x if not provided) + dtype: dtype for the tensor + device: Optional device for the tensor """ # If x is not a tensor, convert it if not isinstance(x, torch.Tensor): - x = torch.tensor(x) + x = torch.tensor(x, dtype=dtype) # Ensure correct dtype and device if dtype is not None: x = x.to(dtype=dtype) diff --git a/tests/physical_models/crop/test_leaf_dynamics.py b/tests/physical_models/crop/test_leaf_dynamics.py index e62ad32..3137049 100644 --- a/tests/physical_models/crop/test_leaf_dynamics.py +++ b/tests/physical_models/crop/test_leaf_dynamics.py @@ -17,6 +17,15 @@ pytestmark = pytest.mark.filterwarnings("ignore::DeprecationWarning:pcse.base.simulationobject") +@pytest.fixture(params=["cpu", "cuda"]) +def device(request): + """Fixture to parametrize tests over CPU and GPU devices.""" + device_name = request.param + if device_name == "cuda" and not torch.cuda.is_available(): + pytest.skip("CUDA not available") + return device_name + + def get_test_diff_leaf_model(): test_data_url = f"{phy_data_folder}/test_leafdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -61,6 +70,7 @@ def forward(self, params_dict): self.agro_management_inputs, self.config_path, self.external_states, + device="cpu", ) engine.run_till_terminate() results = engine.get_output() @@ -71,8 +81,7 @@ def forward(self, params_dict): class TestLeafDynamics: leafdynamics_data_urls = [ f"{phy_data_folder}/test_leafdynamics_wofost72_{i:02d}.yaml" - # for i in range(1, 45) # there are 44 test files - for i in range(3, 4) # there are 44 test files + for i in range(1, 45) # there are 44 test files ] wofost72_data_urls = [ @@ -80,8 +89,8 @@ class TestLeafDynamics: for i in range(1, 45) # there are 44 test files ] - @pytest.mark.parametrize("test_data_url", leafdynamics_data_urls) - def test_leaf_dynamics_with_testengine(self, test_data_url): + @pytest.mark.parametrize("test_data_url", leafdynamics_data_urls[:3]) # Test subset for GPU + def test_leaf_dynamics_with_testengine(self, test_data_url, device): """EngineTestHelper and not Engine because it allows to specify `external_states`.""" # prepare model input test_data = get_test_data(test_data_url) @@ -100,6 +109,7 @@ def test_leaf_dynamics_with_testengine(self, test_data_url): agro_management_inputs, config_path, external_states, + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -110,13 +120,13 @@ def test_leaf_dynamics_with_testengine(self, test_data_url): assert len(actual_results) == len(expected_results) for reference, model in zip(expected_results, actual_results, strict=False): assert reference["DAY"] == model["day"] + # Verify output is on the correct device for var in expected_precision.keys(): - print(f"Testing variable: {var} on day {model['day']}") - print(f"Difference: {abs(reference[var] - model[var])}") - print("precision: {expected_precision[var]}.") - print(f"{abs(reference[var] - model[var]) < expected_precision[var]}") + assert model[var].device.type == device, f"{var} should be on {device}" + # Move to CPU for comparison if needed + model_cpu = {k: v.cpu() if isinstance(v, torch.Tensor) else v for k, v in model.items()} assert all( - abs(reference[var] - model[var]) < precision + abs(reference[var] - model_cpu[var]) < precision for var, precision in expected_precision.items() ) @@ -143,7 +153,7 @@ def test_leaf_dynamics_with_engine(self): @pytest.mark.parametrize( "param", ["TDWI", "SPAN", "RGRLAI", "TBASE", "PERDL", "KDIFTB", "SLATB", "TEMP"] ) - def test_leaf_dynamics_with_one_parameter_vector(self, param): + def test_leaf_dynamics_with_one_parameter_vector(self, param, device): # prepare model input test_data_url = f"{phy_data_folder}/test_leafdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -153,7 +163,9 @@ def test_leaf_dynamics_with_one_parameter_vector(self, param): weather_data_provider, agro_management_inputs, external_states, - ) = prepare_engine_input(test_data, crop_model_params, meteo_range_checks=False) + ) = prepare_engine_input( + test_data, crop_model_params, meteo_range_checks=False, device=device + ) config_path = str(phy_data_folder / "WOFOST_Leaf_Dynamics.conf") # Setting a vector (with one value) for the selected parameter @@ -179,6 +191,7 @@ def test_leaf_dynamics_with_one_parameter_vector(self, param): agro_management_inputs, config_path, external_states, + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -189,6 +202,7 @@ def test_leaf_dynamics_with_one_parameter_vector(self, param): agro_management_inputs, config_path, external_states, + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -200,8 +214,15 @@ def test_leaf_dynamics_with_one_parameter_vector(self, param): for reference, model in zip(expected_results, actual_results, strict=False): assert reference["DAY"] == model["day"] + # Verify output is on the correct device + for var in expected_precision.keys(): + assert model[var].device.type == device, f"{var} should be on {device}" + # Move to CPU for comparison + model_cpu = { + k: v.cpu() if isinstance(v, torch.Tensor) else v for k, v in model.items() + } assert all( - all(abs(reference[var] - model[var]) < precision) + all(abs(reference[var] - model_cpu[var]) < precision) for var, precision in expected_precision.items() ) @@ -217,7 +238,7 @@ def test_leaf_dynamics_with_one_parameter_vector(self, param): ("SLATB", 0.0005), ], ) - def test_leaf_dynamics_with_different_parameter_values(self, param, delta): + def test_leaf_dynamics_with_different_parameter_values(self, param, delta, device): # prepare model input test_data_url = f"{phy_data_folder}/test_leafdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -247,6 +268,7 @@ def test_leaf_dynamics_with_different_parameter_values(self, param, delta): agro_management_inputs, config_path, external_states, + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -258,9 +280,14 @@ def test_leaf_dynamics_with_different_parameter_values(self, param, delta): for reference, model in zip(expected_results, actual_results, strict=False): assert reference["DAY"] == model["day"] + # Verify output is on the correct device + for var in expected_precision.keys(): + assert model[var].device.type == device, f"{var} should be on {device}" + # Move to CPU for comparison + model_cpu = {k: v.cpu() if isinstance(v, torch.Tensor) else v for k, v in model.items()} assert all( # The value for which test data are available is the last element - abs(reference[var] - model[var][-1]) < precision + abs(reference[var] - model_cpu[var][-1]) < precision for var, precision in expected_precision.items() ) @@ -292,6 +319,7 @@ def test_leaf_dynamics_with_multiple_parameter_vectors(self): agro_management_inputs, config_path, external_states, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -339,6 +367,7 @@ def test_leaf_dynamics_with_multiple_parameter_arrays(self): agro_management_inputs, config_path, external_states, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -387,6 +416,7 @@ def test_leaf_dynamics_with_incompatible_parameter_vectors(self): agro_management_inputs, config_path, external_states, + device="cpu", ) def test_leaf_dynamics_with_incompatible_weather_parameter_vectors(self): @@ -416,6 +446,7 @@ def test_leaf_dynamics_with_incompatible_weather_parameter_vectors(self): agro_management_inputs, config_path, external_states, + device="cpu", ) @pytest.mark.parametrize("test_data_url", wofost72_data_urls) @@ -470,6 +501,7 @@ def test_leaf_dynamics_with_sigmoid_approx(self, test_data_url): agro_management_inputs, config_path, external_states, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() diff --git a/tests/physical_models/crop/test_root_dynamics.py b/tests/physical_models/crop/test_root_dynamics.py index 9e2423e..1b042e2 100644 --- a/tests/physical_models/crop/test_root_dynamics.py +++ b/tests/physical_models/crop/test_root_dynamics.py @@ -61,6 +61,7 @@ def forward(self, params_dict): self.agro_management_inputs, self.config_path, self.external_states, + device="cpu", ) engine.run_till_terminate() results = engine.get_output() @@ -99,6 +100,7 @@ def test_root_dynamics_with_testengine(self, test_data_url): agro_management_inputs, config_path, external_states, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -164,6 +166,7 @@ def test_root_dynamics_with_one_parameter_vector(self, param): agro_management_inputs, config_path, external_states, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -222,6 +225,7 @@ def test_root_dynamics_with_different_parameter_values(self, param, delta): agro_management_inputs, config_path, external_states, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -268,6 +272,7 @@ def test_root_dynamics_with_multiple_parameter_vectors(self): agro_management_inputs, config_path, external_states, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -311,6 +316,7 @@ def test_root_dynamics_with_multiple_parameter_arrays(self): agro_management_inputs, config_path, external_states, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -359,6 +365,7 @@ def test_root_dynamics_with_incompatible_parameter_vectors(self): agro_management_inputs, config_path, external_states, + device="cpu", ) @pytest.mark.parametrize("test_data_url", wofost72_data_urls) diff --git a/tests/physical_models/test_utils.py b/tests/physical_models/test_utils.py index cc4503b..1fcac7f 100644 --- a/tests/physical_models/test_utils.py +++ b/tests/physical_models/test_utils.py @@ -2,7 +2,6 @@ import pytest import torch -from diffwofost.physical_models.utils import DTYPE from diffwofost.physical_models.utils import Afgen from diffwofost.physical_models.utils import AfgenTrait from diffwofost.physical_models.utils import WeatherDataProviderTestHelper @@ -10,6 +9,8 @@ from diffwofost.physical_models.utils import get_test_data from . import phy_data_folder +DTYPE = torch.float32 # Default dtype for tests + class TestAfgen: """Tests for the Afgen class.""" @@ -633,7 +634,7 @@ def test_float_broadcast(self): provider = WeatherDataProviderTestHelper(test_data["WeatherVariables"]) wdc = provider(provider.first_date) scalar = wdc.TEMP - out = _get_drv(scalar, expected_shape) + out = _get_drv(scalar, expected_shape, dtype=DTYPE) assert out.shape == expected_shape assert torch.allclose(out, torch.full(expected_shape, scalar, dtype=DTYPE)) @@ -644,7 +645,7 @@ def test_scalar_broadcast(self): provider = WeatherDataProviderTestHelper(test_data["WeatherVariables"]) wdc = provider(provider.first_date) scalar = torch.tensor(wdc.IRRAD, dtype=DTYPE) # 0-d tensor - out = _get_drv(scalar, expected_shape) + out = _get_drv(scalar, expected_shape, dtype=DTYPE) assert out.shape == expected_shape assert torch.allclose(out, torch.full(expected_shape, scalar.item(), dtype=DTYPE)) @@ -652,7 +653,7 @@ def test_matching_shape_pass_through(self): expected_shape = (3, 2) base_val = torch.tensor(12.34, dtype=DTYPE) var = torch.ones(expected_shape, dtype=DTYPE) * base_val - out = _get_drv(var, expected_shape) + out = _get_drv(var, expected_shape, dtype=DTYPE) assert out.shape == expected_shape # Should be the same object (no copy) assert out.data_ptr() == var.data_ptr() @@ -661,10 +662,10 @@ def test_wrong_shape_raises(self): expected_shape = (3, 2) wrong = torch.ones(2, 3, dtype=DTYPE) with pytest.raises(ValueError, match="incompatible shape"): - _get_drv(wrong, expected_shape) + _get_drv(wrong, expected_shape, dtype=DTYPE) def test_one_dim_shape_raises(self): expected_shape = (3, 2) one_dim = torch.ones(3, dtype=DTYPE) with pytest.raises(ValueError, match="incompatible shape"): - _get_drv(one_dim, expected_shape) + _get_drv(one_dim, expected_shape, dtype=DTYPE) From fec7ffa273421482df096e268ef929d4a06cd327 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Thu, 18 Dec 2025 16:10:12 +0100 Subject: [PATCH 06/17] Finalize leaf module --- .gitignore | 1 + .../test_leafdynamics_wofost72_01.yaml | 1593 ----------------- new_leaf.py | 524 ------ new_utils.py | 666 ------- old_leaf.py | 436 ----- old_utils.py | 648 ------- .../physical_models/crop/leaf_dynamics.py | 20 +- src/diffwofost/physical_models/utils.py | 282 ++- .../crop/test_leaf_dynamics.py | 35 +- tests/physical_models/test_utils.py | 19 + 10 files changed, 183 insertions(+), 4041 deletions(-) delete mode 100644 docs/notebooks/test_leafdynamics_wofost72_01.yaml delete mode 100644 new_leaf.py delete mode 100644 new_utils.py delete mode 100644 old_leaf.py delete mode 100644 old_utils.py diff --git a/.gitignore b/.gitignore index 1706fbf..984fdbf 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ share/python-wheels/ # jupyter notebook .ipynb_checkpoints +docs/notebooks/test* # Unit test / coverage reports htmlcov/ diff --git a/docs/notebooks/test_leafdynamics_wofost72_01.yaml b/docs/notebooks/test_leafdynamics_wofost72_01.yaml deleted file mode 100644 index cf2a335..0000000 --- a/docs/notebooks/test_leafdynamics_wofost72_01.yaml +++ /dev/null @@ -1,1593 +0,0 @@ -# Test file for testing the simulation of leaf dynamics in WOFOST 7.1 -# encoding: UTF-8 -# -# All parameter and variable names and their respective units refer to the -# WOFOST manual available from http://wageningenur.nl/wofost -# -# Test file generated with PCSE 5.3.3: https://doi.org/10.5281/zenodo.1252479 -# -# crop: Sugar beets -# latitude: 49.43613 -# longitude: 12.98528 -# -# Wageningen-UR 2018, allard.dewit@wur.nl -AgroManagement: -- 2010-04-16: - CropCalendar: {crop_end_date: 2010-12-31, crop_end_type: harvest, crop_name: Sugar - beets, crop_start_date: 2010-04-16, crop_start_type: sowing, max_duration: 260, - variety_name: Sugar beets_95118_2010} - StateEvents: null - TimedEvents: null -ExternalStates: -- {ADMI: 0.0, DAY: 2010-04-16, DVS: -0.1, FL: 0.85, FR: 0.2, PAI: 0.0, RFTRA: 0.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-17, DVS: -0.09294444444444445, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-18, DVS: -0.08805555555555557, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-19, DVS: -0.08200000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-20, DVS: -0.07333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-21, DVS: -0.06500000000000002, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-22, DVS: -0.05994444444444446, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-23, DVS: -0.057777777777777796, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-24, DVS: -0.05333333333333335, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-25, DVS: -0.04600000000000001, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-26, DVS: -0.03472222222222224, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-27, DVS: -0.025000000000000015, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-28, DVS: -0.016722222222222236, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-04-29, DVS: -0.007555555555555569, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 0.0, SAI: 0.0} -- {ADMI: 0.06334614016373197, DAY: 2010-04-30, DVS: 0.0, FL: 0.85, FR: 0.2, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06955663516961932, DAY: 2010-05-01, DVS: 0.030023923444976078, FL: 0.8394916267942584, - FR: 0.20296939902203062, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06036795101242246, DAY: 2010-05-02, DVS: 0.05741626794258373, FL: 0.8299043062200957, - FR: 0.20567853199432148, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06904930123904608, DAY: 2010-05-03, DVS: 0.07882775119617225, FL: 0.8224102870813397, - FR: 0.20779615121720385, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.05888212870381866, DAY: 2010-05-04, DVS: 0.09868421052631579, FL: 0.8154605263157895, - FR: 0.20975997686524003, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.06345060029463373, DAY: 2010-05-05, DVS: 0.11220095693779905, FL: 0.8107296650717704, - FR: 0.2110967979389032, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.07881135347334553, DAY: 2010-05-06, DVS: 0.12212918660287082, FL: 0.8072547846889951, - FR: 0.21207871076292129, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.09852481964261431, DAY: 2010-05-07, DVS: 0.13732057416267943, FL: 0.8019377990430622, - FR: 0.21358115568641886, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.15447577442412816, DAY: 2010-05-08, DVS: 0.14760765550239235, FL: 0.7983373205741626, - FR: 0.21459855933540145, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.18431729511837602, DAY: 2010-05-09, DVS: 0.16363636363636364, FL: 0.7927272727272727, - FR: 0.21618381618381619, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.140018980850247, DAY: 2010-05-10, DVS: 0.1812200956937799, FL: 0.786572966507177, - FR: 0.21792286660707713, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.2525109296012593, DAY: 2010-05-11, DVS: 0.20107655502392344, FL: 0.7796232057416268, - FR: 0.21988669225511331, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.2607790591371754, DAY: 2010-05-12, DVS: 0.22799043062200958, FL: 0.7702033492822966, - FR: 0.2225485041274515, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21051934478979178, DAY: 2010-05-13, DVS: 0.2508373205741627, FL: 0.762206937799043, - FR: 0.22480808665019192, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.18082952401394806, DAY: 2010-05-14, DVS: 0.2674641148325359, FL: 0.7563875598086124, - FR: 0.22645249487354752, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21216158586167716, DAY: 2010-05-15, DVS: 0.27763157894736845, FL: 0.752828947368421, - FR: 0.22745806824754194, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.3225925110304646, DAY: 2010-05-16, DVS: 0.28791866028708135, FL: 0.7492284688995215, - FR: 0.22847547189652453, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.48110564012108614, DAY: 2010-05-17, DVS: 0.3013157894736842, FL: 0.7445394736842105, - FR: 0.22980046269519955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.37044175559672554, DAY: 2010-05-18, DVS: 0.31830143540669853, FL: 0.7385944976076555, - FR: 0.23148036174351963, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.21092861815085803, DAY: 2010-05-19, DVS: 0.33337320574162677, FL: 0.7333193779904306, - FR: 0.23297097639202902, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.30947565917826964, DAY: 2010-05-20, DVS: 0.3407894736842105, FL: 0.7307236842105264, - FR: 0.23370445344129553, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.5576143631475478, DAY: 2010-05-21, DVS: 0.35633971291866023, FL: 0.7252811004784689, - FR: 0.2352423891897576, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.8532546017550056, DAY: 2010-05-22, DVS: 0.3809808612440191, FL: 0.7166566985645932, - FR: 0.23767942583732057, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.1077369109143245, DAY: 2010-05-23, DVS: 0.40765550239234444, FL: 0.7073205741626795, - FR: 0.2403175771596824, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.345054359613823, DAY: 2010-05-24, DVS: 0.43540669856459324, FL: 0.6976076555023923, - FR: 0.24306220095693779, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5399857398800252, DAY: 2010-05-25, DVS: 0.46662679425837317, FL: 0.6866806220095694, - FR: 0.2461499027288501, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.1323384231071365, DAY: 2010-05-26, DVS: 0.49928229665071766, FL: 0.6752511961722488, - FR: 0.24937956780062043, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5606027420064925, DAY: 2010-05-27, DVS: 0.5257177033492823, FL: 0.6659988038277512, - FR: 0.25199405857300594, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.0711140915316895, DAY: 2010-05-28, DVS: 0.5544258373205742, FL: 0.655950956937799, - FR: 0.25483332457016666, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.7804869760516895, DAY: 2010-05-29, DVS: 0.5836124401913876, FL: 0.6457356459330144, - FR: 0.2577199116672801, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.241247492064963, DAY: 2010-05-30, DVS: 0.6105263157894737, FL: 0.6363157894736842, - FR: 0.26038172353961825, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 2.6631751947291513, DAY: 2010-05-31, DVS: 0.6368421052631579, FL: 0.6271052631578947, - FR: 0.26298438403701563, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.5195245565028868, DAY: 2010-06-01, DVS: 0.6534688995215311, FL: 0.6212858851674641, - FR: 0.26462879226037117, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.6652932112744012, DAY: 2010-06-02, DVS: 0.6690191387559808, FL: 0.6158433014354067, - FR: 0.26616672800883323, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 1.9887086907856009, DAY: 2010-06-03, DVS: 0.6867224880382775, FL: 0.6096471291866028, - FR: 0.26791760870708237, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 5.883062026536403, DAY: 2010-06-04, DVS: 0.7076555023923445, FL: 0.6023205741626794, - FR: 0.26998790683001206, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 7.185506694825693, DAY: 2010-06-05, DVS: 0.7355263157894737, FL: 0.5925657894736842, - FR: 0.2727443609022556, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 8.398874147123157, DAY: 2010-06-06, DVS: 0.766866028708134, FL: 0.5815968899521531, - FR: 0.2758438929491561, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 8.460635199837757, DAY: 2010-06-07, DVS: 0.8037081339712919, FL: 0.5687021531100478, - FR: 0.2794876176455124, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 10.983494041245319, DAY: 2010-06-08, DVS: 0.8422248803827752, FL: 0.5552212918660286, - FR: 0.283296966191703, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 12.749950206041587, DAY: 2010-06-09, DVS: 0.8801435406698566, FL: 0.5419497607655501, - FR: 0.28704716336295283, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.529998478430059, DAY: 2010-06-10, DVS: 0.9232057416267944, FL: 0.526877990430622, - FR: 0.2914673046251994, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 18.17948474779467, DAY: 2010-06-11, DVS: 0.9662679425837322, FL: 0.5118062200956938, - FR: 0.29625199362041466, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 17.89920097929859, DAY: 2010-06-12, DVS: 1.0, FL: 0.5, FR: 0.3, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 16.927109068911655, DAY: 2010-06-13, DVS: 1.0110266159695818, FL: 0.48346007604562735, - FR: 0.2889733840304182, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 17.694733764726987, DAY: 2010-06-14, DVS: 1.0191381495564005, FL: 0.4712927756653993, - FR: 0.2808618504435995, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 20.307476232534015, DAY: 2010-06-15, DVS: 1.0269645120405577, FL: 0.4595532319391634, - FR: 0.27303548795944227, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 24.757657128862814, DAY: 2010-06-16, DVS: 1.0346958174904943, FL: 0.4479562737642585, - FR: 0.26530418250950566, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.81491074090979, DAY: 2010-06-17, DVS: 1.0418567807351078, FL: 0.4372148288973383, - FR: 0.25814321926489214, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 24.910834495096452, DAY: 2010-06-18, DVS: 1.049809885931559, FL: 0.4252851711026615, - FR: 0.25019011406844094, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 35.029238340180555, DAY: 2010-06-19, DVS: 1.0582699619771865, FL: 0.4125950570342203, - FR: 0.24173003802281345, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 27.14283941622052, DAY: 2010-06-20, DVS: 1.0640367553865655, FL: 0.40394486692015175, - FR: 0.23596324461343443, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 38.7517315160596, DAY: 2010-06-21, DVS: 1.0691064638783272, FL: 0.3963403041825092, - FR: 0.23089353612167274, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 49.303521645897334, DAY: 2010-06-22, DVS: 1.0750000000000002, FL: 0.38749999999999973, - FR: 0.22499999999999976, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 58.579142820894056, DAY: 2010-06-23, DVS: 1.0811153358681878, FL: 0.37832699619771837, - FR: 0.21888466413181218, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 63.87538124612525, DAY: 2010-06-24, DVS: 1.0874841571609635, FL: 0.3687737642585548, - FR: 0.21251584283903646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.58830761279373, DAY: 2010-06-25, DVS: 1.0964195183776935, FL: 0.3553707224334598, - FR: 0.20358048162230646, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 81.61069863667417, DAY: 2010-06-26, DVS: 1.10532319391635, FL: 0.3420152091254751, - FR: 0.19467680608365, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 98.91460885559174, DAY: 2010-06-27, DVS: 1.1146704689480356, FL: 0.32799429657794665, - FR: 0.18532953105196434, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 110.71534392471503, DAY: 2010-06-28, DVS: 1.124746514575412, FL: 0.3128802281368819, - FR: 0.17525348542458782, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 116.76687428085175, DAY: 2010-06-29, DVS: 1.1349493029150826, FL: 0.29757604562737616, - FR: 0.16505069708491735, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 117.14319484688673, DAY: 2010-06-30, DVS: 1.1457224334600762, FL: 0.2814163498098857, - FR: 0.15427756653992372, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 136.4298986955567, DAY: 2010-07-01, DVS: 1.15712927756654, FL: 0.2643060836501899, - FR: 0.14694459532862567, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.0458082598484, DAY: 2010-07-02, DVS: 1.1683460076045629, FL: 0.24748098859315576, - FR: 0.14213742531233017, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 153.63543187877124, DAY: 2010-07-03, DVS: 1.1797528517110267, FL: 0.23037072243345996, - FR: 0.13724877783813136, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 148.53017524286903, DAY: 2010-07-04, DVS: 1.1911596958174906, FL: 0.21326045627376417, - FR: 0.13236013036393257, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.83841279006657, DAY: 2010-07-05, DVS: 1.2025665399239545, FL: 0.19615019011406837, - FR: 0.12747148288973378, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.68737582207044, DAY: 2010-07-06, DVS: 1.2139733840304183, FL: 0.17903992395437257, - FR: 0.12258283541553498, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 182.5758636940754, DAY: 2010-07-07, DVS: 1.223510773130545, FL: 0.16473384030418253, - FR: 0.11849538294405212, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.21274762347915, DAY: 2010-07-08, DVS: 1.2311787072243345, FL: 0.15323193916349825, - FR: 0.1152091254752852, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.06904746497915, DAY: 2010-07-09, DVS: 1.2406844106463877, FL: 0.13897338403041853, - FR: 0.11113525258011955, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.81365365320397, DAY: 2010-07-10, DVS: 1.2520912547528515, FL: 0.12186311787072274, - FR: 0.10624660510592077, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 207.2796747505659, DAY: 2010-07-11, DVS: 1.2634980988593154, FL: 0.10475285171102694, - FR: 0.10135795763172198, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 210.2564099700119, DAY: 2010-07-12, DVS: 1.2749049429657793, FL: 0.08764258555133114, - FR: 0.09646931015752318, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 203.77144757441917, DAY: 2010-07-13, DVS: 1.2863117870722431, FL: 0.07053231939163535, - FR: 0.09158066268332438, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 218.218059543731, DAY: 2010-07-14, DVS: 1.297718631178707, FL: 0.05342205323193955, - FR: 0.09, PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 172.34128595981582, DAY: 2010-07-15, DVS: 1.3091254752851709, FL: 0.05, FR: 0.08966201943388256, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 217.38049720124903, DAY: 2010-07-16, DVS: 1.3205323193916347, FL: 0.05, FR: 0.08923954372623574, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 170.3206034911828, DAY: 2010-07-17, DVS: 1.3319391634980986, FL: 0.05, FR: 0.08881706801858893, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 187.5446581745791, DAY: 2010-07-18, DVS: 1.3433460076045625, FL: 0.05, FR: 0.08839459231094213, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 224.14671689354523, DAY: 2010-07-19, DVS: 1.3523447401774396, FL: 0.05, FR: 0.08806130591935409, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 233.29231714903904, DAY: 2010-07-20, DVS: 1.3613434727503166, FL: 0.05, FR: 0.08772801952776604, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 222.37721579346007, DAY: 2010-07-21, DVS: 1.37148288973384, FL: 0.05, FR: 0.08735248556541333, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 212.9717345765432, DAY: 2010-07-22, DVS: 1.382889733840304, FL: 0.05, FR: 0.08693000985776653, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 106.44059255533156, DAY: 2010-07-23, DVS: 1.3942965779467678, FL: 0.05, FR: 0.08650753415011972, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 102.18170120678516, DAY: 2010-07-24, DVS: 1.4050697084917614, FL: 0.05, FR: 0.08610852931511995, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 220.2561264890109, DAY: 2010-07-25, DVS: 1.4132129277566536, FL: 0.05, FR: 0.08580692860160542, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 198.46020040119276, DAY: 2010-07-26, DVS: 1.4202154626108996, FL: 0.05, FR: 0.08554757545885557, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 200.55021107622272, DAY: 2010-07-27, DVS: 1.4277566539923952, FL: 0.05, FR: 0.08526827207435574, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 140.03325959094497, DAY: 2010-07-28, DVS: 1.4362167300380226, FL: 0.05, FR: 0.08495493592451768, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.3498324135558, DAY: 2010-07-29, DVS: 1.4450253485424587, FL: 0.05, FR: 0.08462869079472375, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 172.10898739755729, DAY: 2010-07-30, DVS: 1.4536121673003801, FL: 0.05, FR: 0.08431066047035629, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 239.00609791132996, DAY: 2010-07-31, DVS: 1.4618821292775663, FL: 0.05, FR: 0.08400436558231236, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 231.42562696137483, DAY: 2010-08-01, DVS: 1.4703422053231938, FL: 0.05, FR: 0.0836910294324743, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 155.96076995709458, DAY: 2010-08-02, DVS: 1.4803231939163497, FL: 0.05, FR: 0.08332136318828334, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.9912960157878, DAY: 2010-08-03, DVS: 1.4905576679340937, FL: 0.05, FR: 0.08294230859503357, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 225.87944658593784, DAY: 2010-08-04, DVS: 1.5001584283903675, FL: 0.05, FR: 0.08258672487443083, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 151.14300077473197, DAY: 2010-08-05, DVS: 1.508016476552598, FL: 0.05, FR: 0.08229568605360749, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 64.90608388145633, DAY: 2010-08-06, DVS: 1.5157477820025347, FL: 0.05, FR: 0.08200934140731353, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 89.22935957524096, DAY: 2010-08-07, DVS: 1.5236692015209123, FL: 0.05, FR: 0.08171595549922547, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 208.20159137335756, DAY: 2010-08-08, DVS: 1.531780735107731, FL: 0.05, FR: 0.0814155283293433, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.41906247758274, DAY: 2010-08-09, DVS: 1.5401774397972114, FL: 0.05, FR: 0.08110453926676994, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 205.60001859060077, DAY: 2010-08-10, DVS: 1.54946134347275, FL: 0.05, FR: 0.08076069098249075, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 193.46756914002214, DAY: 2010-08-11, DVS: 1.558333333333333, FL: 0.05, FR: 0.08043209876543211, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 169.18156119156453, DAY: 2010-08-12, DVS: 1.5679340937896067, FL: 0.05, FR: 0.08007651504482939, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 93.08974266331302, DAY: 2010-08-13, DVS: 1.5777883396704686, FL: 0.05, FR: 0.0784423320659063, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 160.937893254941, DAY: 2010-08-14, DVS: 1.5872623574144484, FL: 0.05, FR: 0.07654752851711033, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 186.76242029906928, DAY: 2010-08-15, DVS: 1.596546261089987, FL: 0.05, FR: 0.07469074778200262, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.26873717886699, DAY: 2010-08-16, DVS: 1.6078580481622304, FL: 0.05, FR: 0.07242839036755393, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 53.098070543751426, DAY: 2010-08-17, DVS: 1.6159695817490491, FL: 0.05, FR: 0.07080608365019019, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.23327561394287, DAY: 2010-08-18, DVS: 1.622782002534854, FL: 0.05, FR: 0.0694435994930292, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 199.91869360998516, DAY: 2010-08-19, DVS: 1.6301964512040557, FL: 0.05, FR: 0.06796070975918887, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 223.74667130958667, DAY: 2010-08-20, DVS: 1.6388466413181242, FL: 0.05, FR: 0.06623067173637517, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 213.71782243484523, DAY: 2010-08-21, DVS: 1.647401774397972, FL: 0.05, FR: 0.06451964512040559, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 204.92227270536407, DAY: 2010-08-22, DVS: 1.6576996197718632, FL: 0.05, FR: 0.062460076045627366, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 148.08498613058885, DAY: 2010-08-23, DVS: 1.669106463878327, FL: 0.05, FR: 0.06017870722433459, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 131.56663617540406, DAY: 2010-08-24, DVS: 1.6796261089987325, FL: 0.05, FR: 0.058074778200253495, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 208.14796378003513, DAY: 2010-08-25, DVS: 1.6903992395437262, FL: 0.05, FR: 0.05592015209125477, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.43741030541455, DAY: 2010-08-26, DVS: 1.697845373891001, FL: 0.05, FR: 0.05443092522179978, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 138.12218294509915, DAY: 2010-08-27, DVS: 1.707636248415716, FL: 0.05, FR: 0.05247275031685682, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 153.8085011163628, DAY: 2010-08-28, DVS: 1.717141951837769, FL: 0.05, FR: 0.05057160963244618, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 166.36786308607878, DAY: 2010-08-29, DVS: 1.7241128010139415, FL: 0.05, FR: 0.0491774397972117, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 128.9994856080207, DAY: 2010-08-30, DVS: 1.7297845373890999, FL: 0.05, FR: 0.048043092522180024, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.98852774320295, DAY: 2010-08-31, DVS: 1.7338403041825092, FL: 0.05, FR: 0.04723193916349815, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 131.51208699193373, DAY: 2010-09-01, DVS: 1.738973384030418, FL: 0.05, FR: 0.046205323193916396, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 133.52093244179918, DAY: 2010-09-02, DVS: 1.7434093789607095, FL: 0.05, FR: 0.04531812420785811, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 191.3675196695657, DAY: 2010-09-03, DVS: 1.7488910012674268, FL: 0.05, FR: 0.044221799746514634, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 142.11326427125846, DAY: 2010-09-04, DVS: 1.7548162230671733, FL: 0.05, FR: 0.04303675538656533, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 202.89142256251282, DAY: 2010-09-05, DVS: 1.761248415716096, FL: 0.05, FR: 0.041750316856780816, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 199.62648416769255, DAY: 2010-09-06, DVS: 1.7663814955640047, FL: 0.05, FR: 0.04072370088719906, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 174.64113933021284, DAY: 2010-09-07, DVS: 1.7712927756653989, FL: 0.05, FR: 0.03974144486692022, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 139.08471598465746, DAY: 2010-09-08, DVS: 1.7755703422053228, FL: 0.05, FR: 0.038885931558935424, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 82.67638414658957, DAY: 2010-09-09, DVS: 1.781780735107731, FL: 0.05, FR: 0.03764385297845378, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 152.03323101044322, DAY: 2010-09-10, DVS: 1.7885297845373889, FL: 0.05, FR: 0.03629404309252222, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 188.54073598348467, DAY: 2010-09-11, DVS: 1.7956273764258552, FL: 0.05, FR: 0.03487452471482894, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 184.05041333017076, DAY: 2010-09-12, DVS: 1.8026299112801012, FL: 0.05, FR: 0.033474017743979755, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 80.5742369039994, DAY: 2010-09-13, DVS: 1.8095690747782, FL: 0.05, FR: 0.03208618504435998, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 84.81301930060773, DAY: 2010-09-14, DVS: 1.8155259822560201, FL: 0.05, FR: 0.030894803548795965, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 49.372356921724915, DAY: 2010-09-15, DVS: 1.820722433460076, FL: 0.05, FR: 0.02985551330798479, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 141.38168873270675, DAY: 2010-09-16, DVS: 1.8274081115335867, FL: 0.05, FR: 0.028518377693282644, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 147.8674496140244, DAY: 2010-09-17, DVS: 1.8338403041825093, FL: 0.05, FR: 0.02723193916349813, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 161.59738610558637, DAY: 2010-09-18, DVS: 1.838593155893536, FL: 0.05, FR: 0.02628136882129279, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 160.71185556416103, DAY: 2010-09-19, DVS: 1.8419201520912547, FL: 0.05, FR: 0.025615969581749047, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 167.07029527454148, DAY: 2010-09-20, DVS: 1.8455640050697084, FL: 0.05, FR: 0.024887198986058304, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 167.44249755660599, DAY: 2010-09-21, DVS: 1.849873257287706, FL: 0.05, FR: 0.02402534854245881, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 161.66286186201958, DAY: 2010-09-22, DVS: 1.855830164765526, FL: 0.05, FR: 0.02283396704689479, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 158.87746836853117, DAY: 2010-09-23, DVS: 1.8624524714828898, FL: 0.05, FR: 0.02150950570342202, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 145.92499554293613, DAY: 2010-09-24, DVS: 1.869169835234474, FL: 0.05, FR: 0.020166032953105165, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 36.85993111833173, DAY: 2010-09-25, DVS: 1.8765209125475286, FL: 0.05, FR: 0.01869581749049426, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 70.50229901761877, DAY: 2010-09-26, DVS: 1.8823193916349812, FL: 0.05, FR: 0.017536121673003745, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 117.81966505006466, DAY: 2010-09-27, DVS: 1.886089987325729, FL: 0.05, FR: 0.016782002534854165, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 44.65653234518239, DAY: 2010-09-28, DVS: 1.889860583016477, FL: 0.05, FR: 0.016027883396704593, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 109.53680851036636, DAY: 2010-09-29, DVS: 1.8931875792141957, FL: 0.05, FR: 0.01536248415716085, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 101.08752630541781, DAY: 2010-09-30, DVS: 1.8975602027883403, FL: 0.05, FR: 0.01448795944233193, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 40.80050881178069, DAY: 2010-10-01, DVS: 1.9008555133079854, FL: 0.05, FR: 0.013828897338402896, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 79.8450266683765, DAY: 2010-10-02, DVS: 1.903738910012675, FL: 0.05, FR: 0.013252217997464996, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 118.6265113682002, DAY: 2010-10-03, DVS: 1.9084283903675545, FL: 0.05, FR: 0.012314321926489083, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 118.23375396361399, DAY: 2010-10-04, DVS: 1.9136565272496837, FL: 0.05, FR: 0.01126869455006324, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 82.43081801012632, DAY: 2010-10-05, DVS: 1.9184093789607104, FL: 0.05, FR: 0.010318124207857896, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 46.50841125589101, DAY: 2010-10-06, DVS: 1.9236692015209131, FL: 0.05, FR: 0.010458650190114152, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.96815156408577, DAY: 2010-10-07, DVS: 1.9287389100126748, FL: 0.05, FR: 0.011092363751584362, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 121.77727753718361, DAY: 2010-10-08, DVS: 1.9339353612167307, FL: 0.05, FR: 0.011741920152091346, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 119.4686953266058, DAY: 2010-10-09, DVS: 1.9394486692015216, FL: 0.05, FR: 0.012431083650190206, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 112.63420513906051, DAY: 2010-10-10, DVS: 1.9442648922686951, FL: 0.05, FR: 0.0130331115335869, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 112.72875569349394, DAY: 2010-10-11, DVS: 1.947972116603296, FL: 0.05, FR: 0.013496514575411999, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 108.04315231817708, DAY: 2010-10-12, DVS: 1.9517110266159703, FL: 0.05, FR: 0.013963878326996292, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 100.22700691884458, DAY: 2010-10-13, DVS: 1.9545310519645127, FL: 0.05, FR: 0.014316381495564095, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 95.2909499094097, DAY: 2010-10-14, DVS: 1.956970849176173, FL: 0.05, FR: 0.014621356147021633, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.539595870890874, DAY: 2010-10-15, DVS: 1.9585551330798485, FL: 0.05, FR: 0.014819391634981069, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.597831536425922, DAY: 2010-10-16, DVS: 1.9593155893536127, FL: 0.05, FR: 0.014914448669201594, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.96890058359237, DAY: 2010-10-17, DVS: 1.9616603295310526, FL: 0.05, FR: 0.015207541191381582, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 25.375332030621163, DAY: 2010-10-18, DVS: 1.9637515842839044, FL: 0.05, FR: 0.015468948035488053, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 23.259772421309517, DAY: 2010-10-19, DVS: 1.9649556400506978, FL: 0.05, FR: 0.015619455006337227, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 22.074458545299972, DAY: 2010-10-20, DVS: 1.9661913814955647, FL: 0.05, FR: 0.015773922686945593, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 32.66904408314212, DAY: 2010-10-21, DVS: 1.9677439797211667, FL: 0.05, FR: 0.015967997465145836, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 25.41711865536422, DAY: 2010-10-22, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 21.79726782047625, DAY: 2010-10-23, DVS: 1.9682192648922694, FL: 0.05, FR: 0.016027408111533678, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 6.162785924356052, DAY: 2010-10-24, DVS: 1.9686628643852986, FL: 0.05, FR: 0.016082858048162327, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.619123014735839, DAY: 2010-10-25, DVS: 1.970785804816224, FL: 0.05, FR: 0.01634822560202799, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-26, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-27, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-28, DVS: 1.9712927756654002, FL: 0.05, FR: 0.016411596958175026, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-29, DVS: 1.9728136882129288, FL: 0.05, FR: 0.016601711026616103, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-30, DVS: 1.9751267427122952, FL: 0.05, FR: 0.0168908428390369, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-10-31, DVS: 1.9769328263624852, FL: 0.05, FR: 0.01711660329531066, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-01, DVS: 1.9792458808618516, FL: 0.05, FR: 0.017405735107731454, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-02, DVS: 1.983555133079849, FL: 0.05, FR: 0.01794439163498114, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 19.61920187706796, DAY: 2010-11-03, DVS: 1.985107731305451, FL: 0.05, FR: 0.018138466413181384, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 10.228893739954652, DAY: 2010-11-04, DVS: 1.9885297845373902, FL: 0.05, FR: 0.018566223067173773, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 45.50321836194165, DAY: 2010-11-05, DVS: 1.9948035487959452, FL: 0.05, FR: 0.019350443599493155, - PAI: 0.0, RFTRA: 1.0, SAI: 0.0} -- {ADMI: 5.839463393806534, DAY: 2010-11-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 15.254533744320435, DAY: 2010-11-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 15.049318336197585, DAY: 2010-11-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 43.25829726065667, DAY: 2010-11-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 14.626290896706164, DAY: 2010-11-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 23.742415471479614, DAY: 2010-11-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 37.48822680676657, DAY: 2010-11-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 42.06031750650069, DAY: 2010-11-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 67.08969220067297, DAY: 2010-11-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 45.329423579045425, DAY: 2010-11-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.8155572206520234, DAY: 2010-11-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 6.152076941584958, DAY: 2010-11-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 4.4505561136862735, DAY: 2010-11-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 4.783258811957177, DAY: 2010-11-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 3.2038529975166394, DAY: 2010-11-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.8364366655705052, DAY: 2010-11-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 12.744056136326153, DAY: 2010-11-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, - RFTRA: 1.0, SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-11-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-01, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-02, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-03, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-04, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-05, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-06, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-07, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-08, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-09, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-10, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-11, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-12, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-13, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-14, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-15, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-16, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-17, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-18, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-19, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-20, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-21, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-22, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-23, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-24, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-25, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-26, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-27, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-28, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-29, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-30, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -- {ADMI: 0.0, DAY: 2010-12-31, DVS: 2.0, FL: 0.05, FR: 0.02, PAI: 0.0, RFTRA: 1.0, - SAI: 0.0} -ModelParameters: - KDIFTB: [0.0, 0.69, 2.0, 0.69] - PERDL: 0.03 - RGRLAI: 0.016 - SLATB: [0.0, 0.002, 2.0, 0.002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - SPAN: 35.0 - TBASE: 3.0 - TDWI: 0.51 -ModelResults: -- {DAY: 2010-04-16, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-17, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-18, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-19, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-20, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-21, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-22, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-23, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-24, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-25, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-26, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-27, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-28, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-29, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-04-30, LAI: 0.0006936, TWLV: 0.3468} -- {DAY: 2010-05-01, LAI: 0.0008012884382783444, TWLV: 0.40064421913917214} -- {DAY: 2010-05-02, LAI: 0.0009180728639041013, TWLV: 0.4590364319520506} -- {DAY: 2010-05-03, LAI: 0.0010182721089098878, TWLV: 0.5091360544549438} -- {DAY: 2010-05-04, LAI: 0.0011318458202194273, TWLV: 0.5659229101097136} -- {DAY: 2010-05-05, LAI: 0.0012278779235462473, TWLV: 0.6139389617731237} -- {DAY: 2010-05-06, LAI: 0.0013202769303496714, TWLV: 0.6653802456985948} -- {DAY: 2010-05-07, LAI: 0.0014475186147080191, TWLV: 0.7290010878777686} -- {DAY: 2010-05-08, LAI: 0.0015599873277284634, TWLV: 0.8080118648930814} -- {DAY: 2010-05-09, LAI: 0.0017472859219589006, TWLV: 0.9313356407404586} -- {DAY: 2010-05-10, LAI: 0.0019747815900125966, TWLV: 1.0774489874161168} -- {DAY: 2010-05-11, LAI: 0.002195051880281977, TWLV: 1.1875841325508072} -- {DAY: 2010-05-12, LAI: 0.0025887786411230413, TWLV: 1.3844475129713394} -- {DAY: 2010-05-13, LAI: 0.002990484450663319, TWLV: 1.5853004177414776} -- {DAY: 2010-05-14, LAI: 0.003311403060942695, TWLV: 1.7457597228811657} -- {DAY: 2010-05-15, LAI: 0.0035631374590580646, TWLV: 1.8825369252914288} -- {DAY: 2010-05-16, LAI: 0.00383515276491807, TWLV: 2.04225830864769} -- {DAY: 2010-05-17, LAI: 0.004213777827675692, TWLV: 2.283953801765497} -- {DAY: 2010-05-18, LAI: 0.0047368321250869415, TWLV: 2.642155941847756} -- {DAY: 2010-05-19, LAI: 0.005253674600194289, TWLV: 2.9157621842156174} -- {DAY: 2010-05-20, LAI: 0.005533629300107672, TWLV: 3.0704402272783855} -- {DAY: 2010-05-21, LAI: 0.005985911687804124, TWLV: 3.296581421126612} -- {DAY: 2010-05-22, LAI: 0.006794766005696632, TWLV: 3.701008580072866} -- {DAY: 2010-05-23, LAI: 0.008017747257554211, TWLV: 4.312499206001656} -- {DAY: 2010-05-24, LAI: 0.00958479747325244, TWLV: 5.096024313850768} -- {DAY: 2010-05-25, LAI: 0.011461437909919379, TWLV: 6.034344532184239} -- {DAY: 2010-05-26, LAI: 0.01357639464141274, TWLV: 7.091822897930922} -- {DAY: 2010-05-27, LAI: 0.015105620390762525, TWLV: 7.856435772605814} -- {DAY: 2010-05-28, LAI: 0.01718433950961579, TWLV: 8.895795332032444} -- {DAY: 2010-05-29, LAI: 0.019901438050150936, TWLV: 10.254344602300018} -- {DAY: 2010-05-30, LAI: 0.023492357157129082, TWLV: 12.04980415578909} -- {DAY: 2010-05-31, LAI: 0.026344639491767546, TWLV: 13.475945323108323} -- {DAY: 2010-06-01, LAI: 0.02968482185441995, TWLV: 15.146036504434525} -- {DAY: 2010-06-02, LAI: 0.031572940172661136, TWLV: 16.090095663555118} -- {DAY: 2010-06-03, LAI: 0.033624059510839535, TWLV: 17.115655332644323} -- {DAY: 2010-06-04, LAI: 0.03604888059909132, TWLV: 18.328065876770204} -- {DAY: 2010-06-05, LAI: 0.04313585919440744, TWLV: 21.871555174428266} -- {DAY: 2010-06-06, LAI: 0.051651630089183116, TWLV: 26.129440621816094} -- {DAY: 2010-06-07, LAI: 0.061421148255315854, TWLV: 31.014199704882472} -- {DAY: 2010-06-08, LAI: 0.0710443111649686, TWLV: 35.82578115970886} -- {DAY: 2010-06-09, LAI: 0.0832408506665347, TWLV: 41.924050910491914} -- {DAY: 2010-06-10, LAI: 0.09706051559440852, TWLV: 48.83388337442883} -- {DAY: 2010-06-11, LAI: 0.11237158839295898, TWLV: 56.48941977370405} -- {DAY: 2010-06-12, LAI: 0.13098033513707127, TWLV: 65.79379314576016} -- {DAY: 2010-06-13, LAI: 0.14887953611636986, TWLV: 74.74339363540945} -- {DAY: 2010-06-14, LAI: 0.16524669899174718, TWLV: 82.9269750730981} -- {DAY: 2010-06-15, LAI: 0.18192549937302407, TWLV: 91.26637526373655} -- {DAY: 2010-06-16, LAI: 0.20059023204340157, TWLV: 100.59874159892532} -- {DAY: 2010-06-17, LAI: 0.2227709277125586, TWLV: 111.68908943350381} -- {DAY: 2010-06-18, LAI: 0.2514652588822952, TWLV: 126.03625501837213} -- {DAY: 2010-06-19, LAI: 0.27265367590340955, TWLV: 136.63046352892925} -- {DAY: 2010-06-20, LAI: 0.3015594570850738, TWLV: 151.08335411976137} -- {DAY: 2010-06-21, LAI: 0.3234878783967143, TWLV: 162.0475647755816} -- {DAY: 2010-06-22, LAI: 0.35420562451006227, TWLV: 177.4064378322556} -- {DAY: 2010-06-23, LAI: 0.39241585378563265, TWLV: 196.5115524700408} -- {DAY: 2010-06-24, LAI: 0.4367399960721646, TWLV: 218.67362361330683} -- {DAY: 2010-06-25, LAI: 0.48385112564333244, TWLV: 242.22918839889073} -- {DAY: 2010-06-26, LAI: 0.5340211613867598, TWLV: 267.3142062706045} -- {DAY: 2010-06-27, LAI: 0.5898453617089561, TWLV: 295.22630643170277} -- {DAY: 2010-06-28, LAI: 0.6547322168147012, TWLV: 327.6697339845752} -- {DAY: 2010-06-29, LAI: 0.7240135009455375, TWLV: 362.3103760499934} -- {DAY: 2010-06-30, LAI: 0.7935075503630673, TWLV: 397.0574007587582} -- {DAY: 2010-07-01, LAI: 0.8594395709608256, TWLV: 430.02341105763736} -- {DAY: 2010-07-02, LAI: 0.9315580753948549, TWLV: 466.08266327465213} -- {DAY: 2010-07-03, LAI: 1.0043401593881085, TWLV: 502.473705271279} -- {DAY: 2010-07-04, LAI: 1.0751263702546872, TWLV: 537.866810704568} -- {DAY: 2010-07-05, LAI: 1.1384775961401201, TWLV: 569.5424236472843} -- {DAY: 2010-07-06, LAI: 1.1964746616899873, TWLV: 598.540956422218} -- {DAY: 2010-07-07, LAI: 1.253297413089392, TWLV: 626.9523321219206} -- {DAY: 2010-07-08, LAI: 1.313450259435748, TWLV: 657.0287552950986} -- {DAY: 2010-07-09, LAI: 1.3754211623195973, TWLV: 688.0142067370235} -- {DAY: 2010-07-10, LAI: 1.431863547755681, TWLV: 716.2353994550654} -- {DAY: 2010-07-11, LAI: 1.481538282353287, TWLV: 741.0727667538684} -- {DAY: 2010-07-12, LAI: 1.5249645564169987, TWLV: 762.7859037857244} -- {DAY: 2010-07-13, LAI: 1.561819387214024, TWLV: 781.2133191842369} -- {DAY: 2010-07-14, LAI: 1.5905643328604533, TWLV: 795.5857920074517} -- {DAY: 2010-07-15, LAI: 1.6138796464466851, TWLV: 807.2434488005674} -- {DAY: 2010-07-16, LAI: 1.6311137750426667, TWLV: 815.8605130985583} -- {DAY: 2010-07-17, LAI: 1.6528518247627917, TWLV: 826.7295379586208} -- {DAY: 2010-07-18, LAI: 1.6698838851119098, TWLV: 835.2455681331799} -- {DAY: 2010-07-19, LAI: 1.6886383509293676, TWLV: 844.6228010419088} -- {DAY: 2010-07-20, LAI: 1.7110530226187224, TWLV: 855.830136886586} -- {DAY: 2010-07-21, LAI: 1.734382254333626, TWLV: 867.494752744038} -- {DAY: 2010-07-22, LAI: 1.7566199759129721, TWLV: 878.613613533711} -- {DAY: 2010-07-23, LAI: 1.7779171493706263, TWLV: 889.2622002625382} -- {DAY: 2010-07-24, LAI: 1.7885612086261597, TWLV: 894.5842298903048} -- {DAY: 2010-07-25, LAI: 1.7987793787468382, TWLV: 899.693314950644} -- {DAY: 2010-07-26, LAI: 1.8208049913957394, TWLV: 910.7061212750945} -- {DAY: 2010-07-27, LAI: 1.8406510114358585, TWLV: 920.629131295154} -- {DAY: 2010-07-28, LAI: 1.860012432543481, TWLV: 930.6566418489653} -- {DAY: 2010-07-29, LAI: 1.8737912856386716, TWLV: 937.6583048285124} -- {DAY: 2010-07-30, LAI: 1.888426069635021, TWLV: 945.0257964491902} -- {DAY: 2010-07-31, LAI: 1.9053349635533372, TWLV: 953.6312458190681} -- {DAY: 2010-08-01, LAI: 1.9289958629470914, TWLV: 965.5815507146347} -- {DAY: 2010-08-02, LAI: 1.951723631380945, TWLV: 977.1528320627035} -- {DAY: 2010-08-03, LAI: 1.9670994380863849, TWLV: 984.9508705605582} -- {DAY: 2010-08-04, LAI: 1.9822031351175824, TWLV: 992.9004353613476} -- {DAY: 2010-08-05, LAI: 2.003946411461921, TWLV: 1004.1944076906445} -- {DAY: 2010-08-06, LAI: 2.0181590321792258, TWLV: 1011.7515577293809} -- {DAY: 2010-08-07, LAI: 2.0234005610046544, TWLV: 1014.9968619234538} -- {DAY: 2010-08-08, LAI: 2.0315146426442854, TWLV: 1019.4583299022158} -- {DAY: 2010-08-09, LAI: 2.0511118205297634, TWLV: 1029.8684094708835} -- {DAY: 2010-08-10, LAI: 2.069786676561823, TWLV: 1039.989362594763} -- {DAY: 2010-08-11, LAI: 2.088470037984216, TWLV: 1050.269363524293} -- {DAY: 2010-08-12, LAI: 2.1057018381667243, TWLV: 1059.9427419812944} -- {DAY: 2010-08-13, LAI: 2.1190120494176776, TWLV: 1068.4018200408725} -- {DAY: 2010-08-14, LAI: 2.1256039251434737, TWLV: 1073.0563071740382} -- {DAY: 2010-08-15, LAI: 2.13810679536199, TWLV: 1081.1032018367853} -- {DAY: 2010-08-16, LAI: 2.1505905726946066, TWLV: 1090.4413228517385} -- {DAY: 2010-08-17, LAI: 2.164078208756074, TWLV: 1099.1547597106821} -- {DAY: 2010-08-18, LAI: 2.1598762161268814, TWLV: 1101.8096632378697} -- {DAY: 2010-08-19, LAI: 2.1668995436882756, TWLV: 1105.3213270185668} -- {DAY: 2010-08-20, LAI: 2.1783756421544984, TWLV: 1115.3172616990657} -- {DAY: 2010-08-21, LAI: 2.1909807911193253, TWLV: 1126.5045952645448} -- {DAY: 2010-08-22, LAI: 2.202729410453157, TWLV: 1137.1904863862871} -- {DAY: 2010-08-23, LAI: 2.2110250982221276, TWLV: 1147.4366000215553} -- {DAY: 2010-08-24, LAI: 2.2120139319073124, TWLV: 1154.8408493280847} -- {DAY: 2010-08-25, LAI: 2.2098595227263025, TWLV: 1161.4191811368548} -- {DAY: 2010-08-26, LAI: 2.2120655723601943, TWLV: 1171.8265793258568} -- {DAY: 2010-08-27, LAI: 2.2295093133907358, TWLV: 1180.5484498411276} -- {DAY: 2010-08-28, LAI: 2.225422330705947, TWLV: 1187.4545589883824} -- {DAY: 2010-08-29, LAI: 2.207757217560929, TWLV: 1195.1449840442008} -- {DAY: 2010-08-30, LAI: 2.224394003869537, TWLV: 1203.4633771985045} -- {DAY: 2010-08-31, LAI: 2.2186292197599613, TWLV: 1209.9133514789057} -- {DAY: 2010-09-01, LAI: 2.2112473768651246, TWLV: 1217.312777866066} -- {DAY: 2010-09-02, LAI: 2.224398585564318, TWLV: 1223.8883822156624} -- {DAY: 2010-09-03, LAI: 2.2090563476387612, TWLV: 1230.5644288377528} -- {DAY: 2010-09-04, LAI: 2.207004682584603, TWLV: 1240.132804821231} -- {DAY: 2010-09-05, LAI: 2.1923102278300646, TWLV: 1247.2384680347939} -- {DAY: 2010-09-06, LAI: 2.1906709487746756, TWLV: 1257.3830391629194} -- {DAY: 2010-09-07, LAI: 2.1799158510780967, TWLV: 1267.364363371304} -- {DAY: 2010-09-08, LAI: 2.1591697357355475, TWLV: 1276.0964203378148} -- {DAY: 2010-09-09, LAI: 2.1730782073340134, TWLV: 1283.0506561370478} -- {DAY: 2010-09-10, LAI: 2.1370217034621404, TWLV: 1287.184475344377} -- {DAY: 2010-09-11, LAI: 2.105113896992017, TWLV: 1294.786136894899} -- {DAY: 2010-09-12, LAI: 2.073797934846938, TWLV: 1304.2131736940735} -- {DAY: 2010-09-13, LAI: 2.0922029761799545, TWLV: 1313.415694360582} -- {DAY: 2010-09-14, LAI: 2.044436199548158, TWLV: 1317.444406205782} -- {DAY: 2010-09-15, LAI: 1.988030646372474, TWLV: 1321.6850571708123} -- {DAY: 2010-09-16, LAI: 1.9929678820646464, TWLV: 1324.1536750168984} -- {DAY: 2010-09-17, LAI: 1.937824766807081, TWLV: 1331.2227594535339} -- {DAY: 2010-09-18, LAI: 1.9526115117684832, TWLV: 1338.6161319342352} -- {DAY: 2010-09-19, LAI: 1.899277200961512, TWLV: 1346.6960012395143} -- {DAY: 2010-09-20, LAI: 1.9153483865179282, TWLV: 1354.7315940177225} -- {DAY: 2010-09-21, LAI: 1.9320554160453822, TWLV: 1363.0851087814494} -- {DAY: 2010-09-22, LAI: 1.8828676452032849, TWLV: 1371.4572336592796} -- {DAY: 2010-09-23, LAI: 1.8990339313894868, TWLV: 1379.5403767523808} -- {DAY: 2010-09-24, LAI: 1.8428031737923105, TWLV: 1387.4842501708072} -- {DAY: 2010-09-25, LAI: 1.8573956733466044, TWLV: 1394.780499947954} -- {DAY: 2010-09-26, LAI: 1.7882995824651837, TWLV: 1396.6234965038707} -- {DAY: 2010-09-27, LAI: 1.7953498123669454, TWLV: 1400.1486114547515} -- {DAY: 2010-09-28, LAI: 1.7363455680053737, TWLV: 1406.0395947072548} -- {DAY: 2010-09-29, LAI: 1.7408112212398918, TWLV: 1408.2724213245137} -- {DAY: 2010-09-30, LAI: 1.7517649020909287, TWLV: 1413.7492617500325} -- {DAY: 2010-10-01, LAI: 1.6985224288360379, TWLV: 1418.803638065303} -- {DAY: 2010-10-02, LAI: 1.702602479717216, TWLV: 1420.843663505892} -- {DAY: 2010-10-03, LAI: 1.7105869823840534, TWLV: 1424.835914839311} -- {DAY: 2010-10-04, LAI: 1.664452567971006, TWLV: 1430.7672404077211} -- {DAY: 2010-10-05, LAI: 1.6762759433673675, TWLV: 1436.6789281059018} -- {DAY: 2010-10-06, LAI: 1.6276962737689755, TWLV: 1440.800469006408} -- {DAY: 2010-10-07, LAI: 1.6323471148945645, TWLV: 1443.1258895692026} -- {DAY: 2010-10-08, LAI: 1.575491083704617, TWLV: 1444.7742971474072} -- {DAY: 2010-10-09, LAI: 1.5876688114583353, TWLV: 1450.8631610242664} -- {DAY: 2010-10-10, LAI: 1.5376447781071463, TWLV: 1456.8365957905967} -- {DAY: 2010-10-11, LAI: 1.5489081986210524, TWLV: 1462.4683060475495} -- {DAY: 2010-10-12, LAI: 1.503738688754318, TWLV: 1468.1047438322244} -- {DAY: 2010-10-13, LAI: 1.5145430039861358, TWLV: 1473.5069014481332} -- {DAY: 2010-10-14, LAI: 1.5245657046780203, TWLV: 1478.5182517940752} -- {DAY: 2010-10-15, LAI: 1.5340947996689613, TWLV: 1483.282799289546} -- {DAY: 2010-10-16, LAI: 1.5360487592560503, TWLV: 1484.2597790830905} -- {DAY: 2010-10-17, LAI: 1.487833807812087, TWLV: 1484.9896706599118} -- {DAY: 2010-10-18, LAI: 1.489830697870446, TWLV: 1485.9881156890915} -- {DAY: 2010-10-19, LAI: 1.4923682310735082, TWLV: 1487.2568822906223} -- {DAY: 2010-10-20, LAI: 1.4946942083156392, TWLV: 1488.419870911688} -- {DAY: 2010-10-21, LAI: 1.4969016541701692, TWLV: 1489.5235938389528} -- {DAY: 2010-10-22, LAI: 1.5001685585784834, TWLV: 1491.1570460431099} -- {DAY: 2010-10-23, LAI: 1.5027102704440198, TWLV: 1492.4279019758783} -- {DAY: 2010-10-24, LAI: 1.5048899972260672, TWLV: 1493.517765366902} -- {DAY: 2010-10-25, LAI: 1.505506275818503, TWLV: 1493.8259046631197} -- {DAY: 2010-10-26, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-27, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-28, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-29, LAI: 1.5058681881199765, TWLV: 1494.0068608138565} -- {DAY: 2010-10-30, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-10-31, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-01, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-02, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-03, LAI: 1.4624419140562646, TWLV: 1494.0068608138565} -- {DAY: 2010-11-04, LAI: 1.4644038342439714, TWLV: 1494.98782090771} -- {DAY: 2010-11-05, LAI: 1.4285718928209417, TWLV: 1495.4992655947076} -- {DAY: 2010-11-06, LAI: 1.4331222146571359, TWLV: 1497.7744265128047} -- {DAY: 2010-11-07, LAI: 1.4049612153500868, TWLV: 1498.066399682495} -- {DAY: 2010-11-08, LAI: 1.4064866687245188, TWLV: 1498.829126369711} -- {DAY: 2010-11-09, LAI: 1.4079916005581385, TWLV: 1499.5815922865208} -- {DAY: 2010-11-10, LAI: 1.4123174302842043, TWLV: 1501.7445071495538} -- {DAY: 2010-11-11, LAI: 1.3904647457876436, TWLV: 1502.4758216943892} -- {DAY: 2010-11-12, LAI: 1.3928389873347915, TWLV: 1503.6629424679631} -- {DAY: 2010-11-13, LAI: 1.396587810015468, TWLV: 1505.5373538083013} -- {DAY: 2010-11-14, LAI: 1.4007938417661183, TWLV: 1507.6403696836264} -- {DAY: 2010-11-15, LAI: 1.4075028109861856, TWLV: 1510.99485429366} -- {DAY: 2010-11-16, LAI: 1.3948016247481085, TWLV: 1513.2613254726125} -- {DAY: 2010-11-17, LAI: 1.3951831804701738, TWLV: 1513.452103333645} -- {DAY: 2010-11-18, LAI: 1.395798388164332, TWLV: 1513.7597071807243} -- {DAY: 2010-11-19, LAI: 1.3962434437757008, TWLV: 1513.9822349864085} -- {DAY: 2010-11-20, LAI: 1.3967217696568965, TWLV: 1514.2213979270064} -- {DAY: 2010-11-21, LAI: 1.397042154956648, TWLV: 1514.3815905768822} -- {DAY: 2010-11-22, LAI: 1.3971257986232053, TWLV: 1514.4234124101608} -- {DAY: 2010-11-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-11-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-01, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-02, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-03, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-04, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-05, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-06, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-07, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-08, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-09, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-10, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-11, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-12, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-13, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-14, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-15, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-16, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-17, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-18, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-19, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-20, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-21, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-22, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-23, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-24, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-25, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-26, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-27, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-28, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-29, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-30, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -- {DAY: 2010-12-31, LAI: 1.3984002042368375, TWLV: 1515.060615216977} -Precision: {LAI: 0.01, TWLV: 0.1} -WeatherVariables: -- {DAY: 2010-04-16, E0: 0.292, ELEV: 440.0, ES0: 0.259, ET0: 0.254, IRRAD: 15048000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.35, TMAX: 14.5, - TMIN: 4.2, VAP: 7.45, WIND: 2.298643329164947} -- {DAY: 2010-04-17, E0: 0.307, ELEV: 440.0, ES0: 0.259, ET0: 0.29100000000000004, - IRRAD: 22799000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.3999999999999995, - TMAX: 14.6, TMIN: 0.2, VAP: 6.04, WIND: 1.6521498928373055} -- {DAY: 2010-04-18, E0: 0.303, ELEV: 440.0, ES0: 0.263, ET0: 0.28300000000000003, - IRRAD: 18735000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.450000000000001, - TMAX: 15.8, TMIN: 1.1, VAP: 6.95, WIND: 2.2268107251285425} -- {DAY: 2010-04-19, E0: 0.34500000000000003, ELEV: 440.0, ES0: 0.29700000000000004, - ET0: 0.337, IRRAD: 21025000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.8, TMAX: 18.6, TMIN: 3.0, VAP: 7.35, WIND: 1.939480308982924} -- {DAY: 2010-04-20, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.28900000000000003, - ET0: 0.319, IRRAD: 18687000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.5, TMAX: 16.9, TMIN: 4.1, VAP: 7.42, WIND: 2.442308537237756} -- {DAY: 2010-04-21, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.266, ET0: 0.262, - IRRAD: 14308000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.550000000000001, - TMAX: 10.4, TMIN: 4.7, VAP: 5.87, WIND: 3.0888019735653973} -- {DAY: 2010-04-22, E0: 0.288, ELEV: 440.0, ES0: 0.244, ET0: 0.28500000000000003, - IRRAD: 22864000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.95, - TMAX: 12.4, TMIN: -2.5, VAP: 4.42, WIND: 1.72398249687371} -- {DAY: 2010-04-23, E0: 0.333, ELEV: 440.0, ES0: 0.286, ET0: 0.331, IRRAD: 23148000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.0, TMAX: 15.0, - TMIN: -1.0, VAP: 5.13, WIND: 2.2268107251285425} -- {DAY: 2010-04-24, E0: 0.369, ELEV: 440.0, ES0: 0.316, ET0: 0.36, IRRAD: 24044000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.6, TMAX: 18.0, - TMIN: 1.2, VAP: 6.37, WIND: 1.8676477049465194} -- {DAY: 2010-04-25, E0: 0.43899999999999995, ELEV: 440.0, ES0: 0.381, ET0: 0.425, - IRRAD: 24020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.15, - TMAX: 20.6, TMIN: 5.7, VAP: 7.05, WIND: 2.154978121092138} -- {DAY: 2010-04-26, E0: 0.29700000000000004, ELEV: 440.0, ES0: 0.262, ET0: 0.286, - IRRAD: 15089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 11.75, - TMAX: 17.6, TMIN: 5.9, VAP: 8.63, WIND: 2.083145517055733} -- {DAY: 2010-04-27, E0: 0.3, ELEV: 440.0, ES0: 0.26, ET0: 0.286, IRRAD: 17661000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.45, TMAX: 17.9, - TMIN: 3.0, VAP: 8.23, WIND: 1.6521498928373055} -- {DAY: 2010-04-28, E0: 0.373, ELEV: 440.0, ES0: 0.317, ET0: 0.352, IRRAD: 24464000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 19.8, - TMIN: 2.7, VAP: 7.52, WIND: 1.077489060546069} -- {DAY: 2010-04-29, E0: 0.41100000000000003, ELEV: 440.0, ES0: 0.352, ET0: 0.41600000000000004, - IRRAD: 23615000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, - TMAX: 23.8, TMIN: 4.1, VAP: 8.26, WIND: 1.5084846847644964} -- {DAY: 2010-04-30, E0: 0.348, ELEV: 440.0, ES0: 0.311, ET0: 0.333, IRRAD: 14717000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 22.6, - TMIN: 8.5, VAP: 11.53, WIND: 2.2268107251285425} -- {DAY: 2010-05-01, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.26, ET0: 0.24900000000000003, - IRRAD: 12969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.58, SNOWDEPTH: .nan, TEMP: 14.45, - TMAX: 17.8, TMIN: 11.1, VAP: 12.04, WIND: 1.8676477049465194} -- {DAY: 2010-05-02, E0: 0.176, ELEV: 440.0, ES0: 0.158, ET0: 0.147, IRRAD: 7834000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.8, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 14.2, - TMIN: 9.7, VAP: 11.97, WIND: 1.4366520807280918} -- {DAY: 2010-05-03, E0: 0.189, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.161, - IRRAD: 8347000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 13.5, TMIN: 9.1, VAP: 10.82, WIND: 1.6521498928373055} -- {DAY: 2010-05-04, E0: 0.133, ELEV: 440.0, ES0: 0.121, ET0: 0.11699999999999999, - IRRAD: 5850000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.37, SNOWDEPTH: .nan, TEMP: 8.65, - TMAX: 10.6, TMIN: 6.7, VAP: 9.71, WIND: 2.9451367654925877} -- {DAY: 2010-05-05, E0: 0.176, ELEV: 440.0, ES0: 0.161, ET0: 0.125, IRRAD: 7550000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 7.15, TMAX: 8.9, - TMIN: 5.4, VAP: 8.77, WIND: 4.669119262366299} -- {DAY: 2010-05-06, E0: 0.159, ELEV: 440.0, ES0: 0.144, ET0: 0.145, IRRAD: 6844000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 9.350000000000001, - TMAX: 11.8, TMIN: 6.9, VAP: 9.74, WIND: 3.304299785674611} -- {DAY: 2010-05-07, E0: 0.213, ELEV: 440.0, ES0: 0.189, ET0: 0.175, IRRAD: 11585000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.300000000000001, - TMAX: 10.4, TMIN: 4.2, VAP: 8.06, WIND: 2.2268107251285425} -- {DAY: 2010-05-08, E0: 0.29500000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.246, - IRRAD: 16249000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.7, - TMAX: 15.5, TMIN: 3.9, VAP: 8.4, WIND: 1.077489060546069} -- {DAY: 2010-05-09, E0: 0.29, ELEV: 440.0, ES0: 0.252, ET0: 0.261, IRRAD: 16930000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 10.35, TMAX: 17.3, - TMIN: 3.4, VAP: 9.58, WIND: 1.5803172888009012} -- {DAY: 2010-05-10, E0: 0.182, ELEV: 440.0, ES0: 0.16299999999999998, ET0: 0.152, - IRRAD: 8387000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 14.0, TMIN: 8.6, VAP: 11.36, WIND: 1.077489060546069} -- {DAY: 2010-05-11, E0: 0.39, ELEV: 440.0, ES0: 0.344, ET0: 0.317, IRRAD: 18611000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.3, - TMIN: 9.2, VAP: 12.27, WIND: 2.5859737453105653} -- {DAY: 2010-05-12, E0: 0.32599999999999996, ELEV: 440.0, ES0: 0.29100000000000004, - ET0: 0.269, IRRAD: 14823000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.55, TMAX: 15.5, TMIN: 9.6, VAP: 10.25, WIND: 2.154978121092138} -- {DAY: 2010-05-13, E0: 0.197, ELEV: 440.0, ES0: 0.178, ET0: 0.16699999999999998, - IRRAD: 8293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.44000000000000006, SNOWDEPTH: .nan, - TEMP: 9.95, TMAX: 12.7, TMIN: 7.2, VAP: 9.85, WIND: 2.7296389533833745} -- {DAY: 2010-05-14, E0: 0.149, ELEV: 440.0, ES0: 0.133, ET0: 0.12, IRRAD: 7517000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 7.25, TMAX: 8.6, - TMIN: 5.9, VAP: 8.94, WIND: 1.72398249687371} -- {DAY: 2010-05-15, E0: 0.177, ELEV: 440.0, ES0: 0.161, ET0: 0.148, IRRAD: 8182000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 7.300000000000001, - TMAX: 9.3, TMIN: 5.3, VAP: 8.06, WIND: 2.0113129130193284} -- {DAY: 2010-05-16, E0: 0.29300000000000004, ELEV: 440.0, ES0: 0.267, ET0: 0.23500000000000001, - IRRAD: 11902000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.600000000000001, - TMAX: 12.3, TMIN: 4.9, VAP: 7.59, WIND: 3.1606345776018023} -- {DAY: 2010-05-17, E0: 0.364, ELEV: 440.0, ES0: 0.323, ET0: 0.315, IRRAD: 18616000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 10.1, TMAX: 15.4, - TMIN: 4.8, VAP: 7.99, WIND: 2.801471557419779} -- {DAY: 2010-05-18, E0: 0.23900000000000002, ELEV: 440.0, ES0: 0.217, ET0: 0.20600000000000002, - IRRAD: 10082000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 9.3, - TMAX: 11.5, TMIN: 7.1, VAP: 8.29, WIND: 2.65780634934697} -- {DAY: 2010-05-19, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.096, ET0: 0.095, - IRRAD: 5446000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 6.1, - TMAX: 7.1, TMIN: 5.1, VAP: 8.46, WIND: 2.7296389533833745} -- {DAY: 2010-05-20, E0: 0.10700000000000001, ELEV: 440.0, ES0: 0.095, ET0: 0.10400000000000001, - IRRAD: 5694000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 9.5, - TMAX: 12.5, TMIN: 6.5, VAP: 11.3, WIND: 1.3648194766916872} -- {DAY: 2010-05-21, E0: 0.265, ELEV: 440.0, ES0: 0.23700000000000002, ET0: 0.21800000000000003, - IRRAD: 11531000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.71, SNOWDEPTH: .nan, TEMP: 13.3, - TMAX: 17.0, TMIN: 9.6, VAP: 12.21, WIND: 1.8676477049465194} -- {DAY: 2010-05-22, E0: 0.386, ELEV: 440.0, ES0: 0.339, ET0: 0.323, IRRAD: 19035000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.1, SNOWDEPTH: .nan, TEMP: 14.15, TMAX: 20.1, - TMIN: 8.2, VAP: 11.77, WIND: 1.5084846847644964} -- {DAY: 2010-05-23, E0: 0.45099999999999996, ELEV: 440.0, ES0: 0.395, ET0: 0.378, - IRRAD: 22815000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.6, - TMAX: 20.9, TMIN: 8.3, VAP: 11.7, WIND: 1.6521498928373055} -- {DAY: 2010-05-24, E0: 0.492, ELEV: 440.0, ES0: 0.433, ET0: 0.43600000000000005, - IRRAD: 23334000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 16.05, - TMAX: 23.5, TMIN: 8.6, VAP: 12.38, WIND: 2.5141411412741608} -- {DAY: 2010-05-25, E0: 0.458, ELEV: 440.0, ES0: 0.404, ET0: 0.39, IRRAD: 20822000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: .nan, TEMP: 16.65, - TMAX: 22.0, TMIN: 11.3, VAP: 13.18, WIND: 2.370475933201351} -- {DAY: 2010-05-26, E0: 0.215, ELEV: 440.0, ES0: 0.193, ET0: 0.187, IRRAD: 9210000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.93, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 17.5, - TMIN: 10.6, VAP: 13.39, WIND: 1.5084846847644964} -- {DAY: 2010-05-27, E0: 0.303, ELEV: 440.0, ES0: 0.27, ET0: 0.257, IRRAD: 13115000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 15.0, TMAX: 18.8, - TMIN: 11.2, VAP: 13.15, WIND: 2.083145517055733} -- {DAY: 2010-05-28, E0: 0.362, ELEV: 440.0, ES0: 0.321, ET0: 0.305, IRRAD: 16517000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.2, TMAX: 20.4, - TMIN: 10.0, VAP: 12.78, WIND: 1.72398249687371} -- {DAY: 2010-05-29, E0: 0.413, ELEV: 440.0, ES0: 0.362, ET0: 0.346, IRRAD: 20796000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 14.25, TMAX: 19.9, - TMIN: 8.6, VAP: 11.43, WIND: 1.5084846847644964} -- {DAY: 2010-05-30, E0: 0.277, ELEV: 440.0, ES0: 0.25, ET0: 0.233, IRRAD: 11117000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 3.6, SNOWDEPTH: .nan, TEMP: 14.0, TMAX: 17.8, - TMIN: 10.2, VAP: 12.48, WIND: 2.370475933201351} -- {DAY: 2010-05-31, E0: 0.307, ELEV: 440.0, ES0: 0.277, ET0: 0.21800000000000003, - IRRAD: 13569000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.32, SNOWDEPTH: .nan, TEMP: 9.95, - TMAX: 13.1, TMIN: 6.8, VAP: 9.74, WIND: 3.663462805856634} -- {DAY: 2010-06-01, E0: 0.10900000000000001, ELEV: 440.0, ES0: 0.098, ET0: 0.10300000000000001, - IRRAD: 5021000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 9.5, - TMAX: 11.0, TMIN: 8.0, VAP: 10.76, WIND: 2.7296389533833745} -- {DAY: 2010-06-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10300000000000001, - ET0: 0.10800000000000001, IRRAD: 5185000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.2, - SNOWDEPTH: .nan, TEMP: 10.4, TMAX: 11.5, TMIN: 9.3, VAP: 11.4, WIND: 2.65780634934697} -- {DAY: 2010-06-03, E0: 0.128, ELEV: 440.0, ES0: 0.11399999999999999, ET0: 0.118, - IRRAD: 5892000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.75, - TMAX: 13.2, TMIN: 10.3, VAP: 12.64, WIND: 1.7958151009101146} -- {DAY: 2010-06-04, E0: 0.528, ELEV: 440.0, ES0: 0.45899999999999996, ET0: 0.44000000000000006, - IRRAD: 27697000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.65, - TMAX: 21.1, TMIN: 8.2, VAP: 11.3, WIND: 1.5803172888009012} -- {DAY: 2010-06-05, E0: 0.564, ELEV: 440.0, ES0: 0.488, ET0: 0.497, IRRAD: 29724000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.1, TMAX: 24.8, - TMIN: 7.4, VAP: 11.5, WIND: 1.3648194766916872} -- {DAY: 2010-06-06, E0: 0.5900000000000001, ELEV: 440.0, ES0: 0.513, ET0: 0.525, IRRAD: 28294000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.4, TMAX: 27.0, - TMIN: 9.8, VAP: 13.35, WIND: 1.6521498928373055} -- {DAY: 2010-06-07, E0: 0.505, ELEV: 440.0, ES0: 0.45099999999999996, ET0: 0.42699999999999994, - IRRAD: 19774000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, - TMAX: 22.6, TMIN: 15.6, VAP: 14.43, WIND: 2.801471557419779} -- {DAY: 2010-06-08, E0: 0.538, ELEV: 440.0, ES0: 0.471, ET0: 0.465, IRRAD: 24452000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.85, TMAX: 26.9, - TMIN: 10.8, VAP: 14.7, WIND: 1.4366520807280918} -- {DAY: 2010-06-09, E0: 0.595, ELEV: 440.0, ES0: 0.525, ET0: 0.517, IRRAD: 24742000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, TMAX: 28.6, - TMIN: 14.4, VAP: 17.3, WIND: 2.083145517055733} -- {DAY: 2010-06-10, E0: 0.607, ELEV: 440.0, ES0: 0.536, ET0: 0.533, IRRAD: 24198000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.3, TMAX: 30.5, - TMIN: 16.1, VAP: 17.26, WIND: 1.5803172888009012} -- {DAY: 2010-06-11, E0: 0.653, ELEV: 440.0, ES0: 0.5740000000000001, ET0: 0.5650000000000001, - IRRAD: 27798000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.5, - TMAX: 27.1, TMIN: 15.9, VAP: 16.05, WIND: 2.298643329164947} -- {DAY: 2010-06-12, E0: 0.5, ELEV: 440.0, ES0: 0.44400000000000006, ET0: 0.437, IRRAD: 19853000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 20.4, TMAX: 26.5, - TMIN: 14.3, VAP: 15.11, WIND: 1.72398249687371} -- {DAY: 2010-06-13, E0: 0.371, ELEV: 440.0, ES0: 0.33399999999999996, ET0: 0.29900000000000004, - IRRAD: 14405000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 15.8, - TMAX: 19.3, TMIN: 12.3, VAP: 13.18, WIND: 2.442308537237756} -- {DAY: 2010-06-14, E0: 0.321, ELEV: 440.0, ES0: 0.288, ET0: 0.258, IRRAD: 12885000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.35, TMAX: 18.9, - TMIN: 11.8, VAP: 13.39, WIND: 2.0113129130193284} -- {DAY: 2010-06-15, E0: 0.369, ELEV: 440.0, ES0: 0.335, ET0: 0.288, IRRAD: 13535000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.200000000000001, - TMAX: 18.6, TMIN: 11.8, VAP: 12.91, WIND: 3.2324671816382065} -- {DAY: 2010-06-16, E0: 0.413, ELEV: 440.0, ES0: 0.374, ET0: 0.33999999999999997, - IRRAD: 15421000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.3, - TMAX: 17.3, TMIN: 11.3, VAP: 11.03, WIND: 4.309956242184276} -- {DAY: 2010-06-17, E0: 0.489, ELEV: 440.0, ES0: 0.438, ET0: 0.389, IRRAD: 20003000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.3, SNOWDEPTH: .nan, TEMP: 15.55, TMAX: 19.8, - TMIN: 11.3, VAP: 12.24, WIND: 3.735295409893039} -- {DAY: 2010-06-18, E0: 0.28700000000000003, ELEV: 440.0, ES0: 0.258, ET0: 0.242, - IRRAD: 11148000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 16.35, - TMAX: 18.7, TMIN: 14.0, VAP: 14.16, WIND: 1.5803172888009012} -- {DAY: 2010-06-19, E0: 0.346, ELEV: 440.0, ES0: 0.308, ET0: 0.275, IRRAD: 16133000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.1, TMAX: 15.6, - TMIN: 8.6, VAP: 10.12, WIND: 1.6521498928373055} -- {DAY: 2010-06-20, E0: 0.23199999999999998, ELEV: 440.0, ES0: 0.21000000000000002, - ET0: 0.19, IRRAD: 9754000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, - TEMP: 11.0, TMAX: 14.0, TMIN: 8.0, VAP: 10.05, WIND: 1.3648194766916872} -- {DAY: 2010-06-21, E0: 0.337, ELEV: 440.0, ES0: 0.303, ET0: 0.264, IRRAD: 14403000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.3, TMAX: 15.8, - TMIN: 8.8, VAP: 10.18, WIND: 1.72398249687371} -- {DAY: 2010-06-22, E0: 0.36, ELEV: 440.0, ES0: 0.318, ET0: 0.312, IRRAD: 17475000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.65, TMAX: 18.3, - TMIN: 7.0, VAP: 9.81, WIND: 1.5084846847644964} -- {DAY: 2010-06-23, E0: 0.383, ELEV: 440.0, ES0: 0.33599999999999997, ET0: 0.331, - IRRAD: 19579000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.05, - TMAX: 19.7, TMIN: 6.4, VAP: 10.42, WIND: 1.2929868726552827} -- {DAY: 2010-06-24, E0: 0.44800000000000006, ELEV: 440.0, ES0: 0.397, ET0: 0.383, - IRRAD: 19454000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.1, - TMAX: 22.5, TMIN: 11.7, VAP: 11.5, WIND: 1.2929868726552827} -- {DAY: 2010-06-25, E0: 0.418, ELEV: 440.0, ES0: 0.367, ET0: 0.378, IRRAD: 19342000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 17.05, TMAX: 24.0, - TMIN: 10.1, VAP: 13.52, WIND: 1.5803172888009012} -- {DAY: 2010-06-26, E0: 0.457, ELEV: 440.0, ES0: 0.4, ET0: 0.40499999999999997, IRRAD: 21119000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.75, TMAX: 24.3, - TMIN: 11.2, VAP: 13.96, WIND: 1.5084846847644964} -- {DAY: 2010-06-27, E0: 0.571, ELEV: 440.0, ES0: 0.49800000000000005, ET0: 0.506, - IRRAD: 26779000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.9, - TMAX: 24.8, TMIN: 13.0, VAP: 12.48, WIND: 1.6521498928373055} -- {DAY: 2010-06-28, E0: 0.585, ELEV: 440.0, ES0: 0.507, ET0: 0.519, IRRAD: 28562000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.1, TMAX: 26.6, - TMIN: 11.6, VAP: 12.38, WIND: 1.077489060546069} -- {DAY: 2010-06-29, E0: 0.538, ELEV: 440.0, ES0: 0.46799999999999997, ET0: 0.493, - IRRAD: 25202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.0, - TMAX: 28.1, TMIN: 11.9, VAP: 13.52, WIND: 1.1493216645824735} -- {DAY: 2010-06-30, E0: 0.515, ELEV: 440.0, ES0: 0.45499999999999996, ET0: 0.45099999999999996, - IRRAD: 21164000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 21.35, - TMAX: 27.5, TMIN: 15.2, VAP: 15.65, WIND: 1.3648194766916872} -- {DAY: 2010-07-01, E0: 0.533, ELEV: 440.0, ES0: 0.462, ET0: 0.47800000000000004, - IRRAD: 25266000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 20.7, - TMAX: 28.2, TMIN: 13.2, VAP: 14.63, WIND: 0.861991248436855} -- {DAY: 2010-07-02, E0: 0.597, ELEV: 440.0, ES0: 0.518, ET0: 0.5349999999999999, IRRAD: 27426000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.2, TMAX: 30.2, - TMIN: 14.2, VAP: 14.87, WIND: 0.9338238524732597} -- {DAY: 2010-07-03, E0: 0.614, ELEV: 440.0, ES0: 0.537, ET0: 0.5519999999999999, IRRAD: 26263000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.1, TMAX: 30.8, - TMIN: 15.4, VAP: 15.51, WIND: 1.2929868726552827} -- {DAY: 2010-07-04, E0: 0.509, ELEV: 440.0, ES0: 0.449, ET0: 0.457, IRRAD: 20494000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 22.45, TMAX: 28.9, - TMIN: 16.0, VAP: 17.26, WIND: 1.5084846847644964} -- {DAY: 2010-07-05, E0: 0.489, ELEV: 440.0, ES0: 0.43600000000000005, ET0: 0.409, - IRRAD: 18435000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 22.0, - TMAX: 26.7, TMIN: 17.3, VAP: 17.84, WIND: 1.6521498928373055} -- {DAY: 2010-07-06, E0: 0.454, ELEV: 440.0, ES0: 0.40499999999999997, ET0: 0.381, - IRRAD: 18109000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.049999999999997, - TMAX: 20.4, TMIN: 15.7, VAP: 13.45, WIND: 2.2268107251285425} -- {DAY: 2010-07-07, E0: 0.40499999999999997, ELEV: 440.0, ES0: 0.352, ET0: 0.377, - IRRAD: 21158000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.1, - TMAX: 22.4, TMIN: 7.8, VAP: 10.22, WIND: 1.077489060546069} -- {DAY: 2010-07-08, E0: 0.5599999999999999, ELEV: 440.0, ES0: 0.484, ET0: 0.505, IRRAD: 28373000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.0, TMAX: 27.4, - TMIN: 8.6, VAP: 11.33, WIND: 1.0056564565096642} -- {DAY: 2010-07-09, E0: 0.609, ELEV: 440.0, ES0: 0.5269999999999999, ET0: 0.55, IRRAD: 28929000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 30.9, - TMIN: 11.4, VAP: 13.69, WIND: 0.9338238524732597} -- {DAY: 2010-07-10, E0: 0.619, ELEV: 440.0, ES0: 0.5389999999999999, ET0: 0.5780000000000001, - IRRAD: 27293000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 23.25, - TMAX: 32.1, TMIN: 14.4, VAP: 15.14, WIND: 1.2929868726552827} -- {DAY: 2010-07-11, E0: 0.671, ELEV: 440.0, ES0: 0.587, ET0: 0.628, IRRAD: 28557000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 24.1, TMAX: 33.7, - TMIN: 14.5, VAP: 13.93, WIND: 1.4366520807280918} -- {DAY: 2010-07-12, E0: 0.669, ELEV: 440.0, ES0: 0.589, ET0: 0.617, IRRAD: 27106000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 24.45, TMAX: 33.5, - TMIN: 15.4, VAP: 16.08, WIND: 1.5803172888009012} -- {DAY: 2010-07-13, E0: 0.5700000000000001, ELEV: 440.0, ES0: 0.506, ET0: 0.514, IRRAD: 21652000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 23.65, TMAX: 29.1, - TMIN: 18.2, VAP: 17.03, WIND: 1.939480308982924} -- {DAY: 2010-07-14, E0: 0.633, ELEV: 440.0, ES0: 0.5509999999999999, ET0: 0.579, IRRAD: 27607000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 24.0, TMAX: 32.9, - TMIN: 15.1, VAP: 16.42, WIND: 1.1493216645824735} -- {DAY: 2010-07-15, E0: 0.43499999999999994, ELEV: 440.0, ES0: 0.39, ET0: 0.376, IRRAD: 15587000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.75, TMAX: 26.0, - TMIN: 19.5, VAP: 17.94, WIND: 1.5803172888009012} -- {DAY: 2010-07-16, E0: 0.645, ELEV: 440.0, ES0: 0.5650000000000001, ET0: 0.585, IRRAD: 26895000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 24.25, TMAX: 33.4, - TMIN: 15.1, VAP: 18.14, WIND: 1.4366520807280918} -- {DAY: 2010-07-17, E0: 0.391, ELEV: 440.0, ES0: 0.35, ET0: 0.331, IRRAD: 14872000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.31, SNOWDEPTH: .nan, TEMP: 21.55, TMAX: 24.6, - TMIN: 18.5, VAP: 17.36, WIND: 1.8676477049465194} -- {DAY: 2010-07-18, E0: 0.371, ELEV: 440.0, ES0: 0.329, ET0: 0.316, IRRAD: 15735000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.200000000000003, - TMAX: 21.1, TMIN: 13.3, VAP: 14.0, WIND: 1.72398249687371} -- {DAY: 2010-07-19, E0: 0.45499999999999996, ELEV: 440.0, ES0: 0.399, ET0: 0.40099999999999997, - IRRAD: 21342000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.2, - TMAX: 23.4, TMIN: 11.0, VAP: 12.17, WIND: 1.939480308982924} -- {DAY: 2010-07-20, E0: 0.5469999999999999, ELEV: 440.0, ES0: 0.477, ET0: 0.485, IRRAD: 25767000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.0, TMAX: 25.9, - TMIN: 12.1, VAP: 14.23, WIND: 1.7958151009101146} -- {DAY: 2010-07-21, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.509, ET0: 0.517, IRRAD: 26623000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 22.85, TMAX: 31.2, - TMIN: 14.5, VAP: 16.25, WIND: 0.861991248436855} -- {DAY: 2010-07-22, E0: 0.5860000000000001, ELEV: 440.0, ES0: 0.516, ET0: 0.534, IRRAD: 23571000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 24.200000000000003, - TMAX: 31.8, TMIN: 16.6, VAP: 17.94, WIND: 1.5803172888009012} -- {DAY: 2010-07-23, E0: 0.266, ELEV: 440.0, ES0: 0.242, ET0: 0.23199999999999998, - IRRAD: 8448000.0, LAT: 49.43613, LON: 12.98528, RAIN: 2.6, SNOWDEPTH: .nan, TEMP: 20.0, - TMAX: 22.4, TMIN: 17.6, VAP: 18.07, WIND: 2.0113129130193284} -- {DAY: 2010-07-24, E0: 0.21800000000000003, ELEV: 440.0, ES0: 0.199, ET0: 0.197, - IRRAD: 7503000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 15.85, - TMAX: 18.0, TMIN: 13.7, VAP: 14.26, WIND: 2.442308537237756} -- {DAY: 2010-07-25, E0: 0.393, ELEV: 440.0, ES0: 0.346, ET0: 0.344, IRRAD: 18998000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 18.8, - TMIN: 9.3, VAP: 10.18, WIND: 1.939480308982924} -- {DAY: 2010-07-26, E0: 0.34700000000000003, ELEV: 440.0, ES0: 0.306, ET0: 0.301, - IRRAD: 16015000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.899999999999999, - TMAX: 20.7, TMIN: 9.1, VAP: 11.9, WIND: 1.3648194766916872} -- {DAY: 2010-07-27, E0: 0.367, ELEV: 440.0, ES0: 0.324, ET0: 0.305, IRRAD: 16530000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 16.35, TMAX: 21.3, - TMIN: 11.4, VAP: 13.79, WIND: 1.3648194766916872} -- {DAY: 2010-07-28, E0: 0.282, ELEV: 440.0, ES0: 0.254, ET0: 0.24300000000000002, - IRRAD: 10520000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16999999999999998, SNOWDEPTH: .nan, - TEMP: 16.9, TMAX: 20.4, TMIN: 13.4, VAP: 15.27, WIND: 2.65780634934697} -- {DAY: 2010-07-29, E0: 0.273, ELEV: 440.0, ES0: 0.244, ET0: 0.22999999999999998, - IRRAD: 11067000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 16.549999999999997, - TMAX: 18.9, TMIN: 14.2, VAP: 14.84, WIND: 1.7958151009101146} -- {DAY: 2010-07-30, E0: 0.312, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.258, - IRRAD: 13224000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.049999999999997, - TMAX: 19.4, TMIN: 12.7, VAP: 13.25, WIND: 1.221154268618878} -- {DAY: 2010-07-31, E0: 0.48200000000000004, ELEV: 440.0, ES0: 0.414, ET0: 0.42800000000000005, - IRRAD: 26033000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.35, - TMAX: 24.1, TMIN: 8.6, VAP: 12.21, WIND: 1.221154268618878} -- {DAY: 2010-08-01, E0: 0.511, ELEV: 440.0, ES0: 0.44000000000000006, ET0: 0.46699999999999997, - IRRAD: 25874000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 18.75, - TMAX: 27.3, TMIN: 10.2, VAP: 13.62, WIND: 1.221154268618878} -- {DAY: 2010-08-02, E0: 0.301, ELEV: 440.0, ES0: 0.268, ET0: 0.258, IRRAD: 12301000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.8699999999999999, SNOWDEPTH: .nan, TEMP: 19.15, - TMAX: 23.4, TMIN: 14.9, VAP: 17.5, WIND: 1.221154268618878} -- {DAY: 2010-08-03, E0: 0.315, ELEV: 440.0, ES0: 0.282, ET0: 0.263, IRRAD: 12311000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 20.0, - TMIN: 16.3, VAP: 15.81, WIND: 1.8676477049465194} -- {DAY: 2010-08-04, E0: 0.4, ELEV: 440.0, ES0: 0.34900000000000003, ET0: 0.333, IRRAD: 19963000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 15.4, TMAX: 21.6, - TMIN: 9.2, VAP: 12.34, WIND: 1.1493216645824735} -- {DAY: 2010-08-05, E0: 0.255, ELEV: 440.0, ES0: 0.227, ET0: 0.21800000000000003, - IRRAD: 10993000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.2, - TMAX: 20.4, TMIN: 10.0, VAP: 14.13, WIND: 1.5084846847644964} -- {DAY: 2010-08-06, E0: 0.121, ELEV: 440.0, ES0: 0.10800000000000001, ET0: 0.12, IRRAD: 4960000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.8, SNOWDEPTH: .nan, TEMP: 15.5, TMAX: 16.8, - TMIN: 14.2, VAP: 16.08, WIND: 1.7958151009101146} -- {DAY: 2010-08-07, E0: 0.17099999999999999, ELEV: 440.0, ES0: 0.154, ET0: 0.155, - IRRAD: 6510000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 15.8, - TMAX: 18.0, TMIN: 13.6, VAP: 15.27, WIND: 2.0113129130193284} -- {DAY: 2010-08-08, E0: 0.374, ELEV: 440.0, ES0: 0.32999999999999996, ET0: 0.314, - IRRAD: 17177000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 16.25, - TMAX: 22.0, TMIN: 10.5, VAP: 13.93, WIND: 1.72398249687371} -- {DAY: 2010-08-09, E0: 0.384, ELEV: 440.0, ES0: 0.339, ET0: 0.331, IRRAD: 16768000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, TMAX: 22.1, - TMIN: 13.2, VAP: 13.96, WIND: 1.7958151009101146} -- {DAY: 2010-08-10, E0: 0.34900000000000003, ELEV: 440.0, ES0: 0.304, ET0: 0.316, - IRRAD: 17022000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.0, - TMAX: 24.6, TMIN: 9.4, VAP: 13.59, WIND: 1.077489060546069} -- {DAY: 2010-08-11, E0: 0.35, ELEV: 440.0, ES0: 0.307, ET0: 0.3, IRRAD: 15774000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 18.15, TMAX: 25.0, - TMIN: 11.3, VAP: 15.41, WIND: 1.077489060546069} -- {DAY: 2010-08-12, E0: 0.311, ELEV: 440.0, ES0: 0.275, ET0: 0.262, IRRAD: 13152000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 18.55, TMAX: 22.8, - TMIN: 14.3, VAP: 17.13, WIND: 1.6521498928373055} -- {DAY: 2010-08-13, E0: 0.187, ELEV: 440.0, ES0: 0.16699999999999998, ET0: 0.16599999999999998, - IRRAD: 7020000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.8, SNOWDEPTH: .nan, TEMP: 17.95, - TMAX: 20.0, TMIN: 15.9, VAP: 17.3, WIND: 1.221154268618878} -- {DAY: 2010-08-14, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.259, ET0: 0.24500000000000002, - IRRAD: 12078000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 17.65, - TMAX: 20.7, TMIN: 14.6, VAP: 16.32, WIND: 2.298643329164947} -- {DAY: 2010-08-15, E0: 0.414, ELEV: 440.0, ES0: 0.369, ET0: 0.374, IRRAD: 15896000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 20.85, TMAX: 25.1, - TMIN: 16.6, VAP: 16.49, WIND: 2.442308537237756} -- {DAY: 2010-08-16, E0: 0.31, ELEV: 440.0, ES0: 0.277, ET0: 0.258, IRRAD: 12819000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: .nan, TEMP: 15.8, TMAX: 18.3, - TMIN: 13.3, VAP: 13.45, WIND: 2.5859737453105653} -- {DAY: 2010-08-17, E0: 0.127, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.132, - IRRAD: 4005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.76, SNOWDEPTH: .nan, TEMP: 13.75, - TMAX: 14.9, TMIN: 12.6, VAP: 13.49, WIND: 3.663462805856634} -- {DAY: 2010-08-18, E0: 0.154, ELEV: 440.0, ES0: 0.141, ET0: 0.155, IRRAD: 5067000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.700000000000001, - TMAX: 17.1, TMIN: 12.3, VAP: 13.89, WIND: 2.7296389533833745} -- {DAY: 2010-08-19, E0: 0.361, ELEV: 440.0, ES0: 0.319, ET0: 0.318, IRRAD: 15911000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.65, TMAX: 20.7, - TMIN: 12.6, VAP: 12.71, WIND: 2.154978121092138} -- {DAY: 2010-08-20, E0: 0.391, ELEV: 440.0, ES0: 0.33199999999999996, ET0: 0.361, - IRRAD: 22793000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 16.5, - TMAX: 25.3, TMIN: 7.7, VAP: 13.12, WIND: 0.861991248436855} -- {DAY: 2010-08-21, E0: 0.426, ELEV: 440.0, ES0: 0.364, ET0: 0.39, IRRAD: 22795000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 19.25, TMAX: 27.3, - TMIN: 11.2, VAP: 15.58, WIND: 1.0056564565096642} -- {DAY: 2010-08-22, E0: 0.437, ELEV: 440.0, ES0: 0.376, ET0: 0.39, IRRAD: 21331000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.1, SNOWDEPTH: .nan, TEMP: 21.15, TMAX: 29.1, - TMIN: 13.2, VAP: 17.94, WIND: 1.077489060546069} -- {DAY: 2010-08-23, E0: 0.262, ELEV: 440.0, ES0: 0.231, ET0: 0.24300000000000002, - IRRAD: 11294000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.11000000000000001, SNOWDEPTH: .nan, - TEMP: 19.6, TMAX: 24.1, TMIN: 15.1, VAP: 18.71, WIND: 1.939480308982924} -- {DAY: 2010-08-24, E0: 0.31, ELEV: 440.0, ES0: 0.282, ET0: 0.27799999999999997, IRRAD: 10039000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, TEMP: 20.0, TMAX: 22.2, - TMIN: 17.8, VAP: 16.79, WIND: 2.65780634934697} -- {DAY: 2010-08-25, E0: 0.33199999999999996, ELEV: 440.0, ES0: 0.29, ET0: 0.294, IRRAD: 16736000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.75, TMAX: 19.2, - TMIN: 10.3, VAP: 11.97, WIND: 2.298643329164947} -- {DAY: 2010-08-26, E0: 0.315, ELEV: 440.0, ES0: 0.27799999999999997, ET0: 0.29300000000000004, - IRRAD: 13589000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 18.45, - TMAX: 26.0, TMIN: 10.9, VAP: 16.35, WIND: 1.939480308982924} -- {DAY: 2010-08-27, E0: 0.256, ELEV: 440.0, ES0: 0.229, ET0: 0.22599999999999998, - IRRAD: 10050000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.36, SNOWDEPTH: .nan, TEMP: 18.0, - TMAX: 21.1, TMIN: 14.9, VAP: 17.53, WIND: 3.663462805856634} -- {DAY: 2010-08-28, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.223, ET0: 0.22000000000000003, - IRRAD: 10561000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 14.0, - TMAX: 15.6, TMIN: 12.4, VAP: 11.9, WIND: 2.65780634934697} -- {DAY: 2010-08-29, E0: 0.252, ELEV: 440.0, ES0: 0.225, ET0: 0.209, IRRAD: 11595000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 11.95, TMAX: 15.5, - TMIN: 8.4, VAP: 10.76, WIND: 2.7296389533833745} -- {DAY: 2010-08-30, E0: 0.176, ELEV: 440.0, ES0: 0.157, ET0: 0.141, IRRAD: 8652000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.47000000000000003, SNOWDEPTH: .nan, TEMP: 9.399999999999999, - TMAX: 11.2, TMIN: 7.6, VAP: 9.95, WIND: 2.9451367654925877} -- {DAY: 2010-08-31, E0: 0.196, ELEV: 440.0, ES0: 0.174, ET0: 0.178, IRRAD: 10017000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 14.6, - TMIN: 7.6, VAP: 10.35, WIND: 2.083145517055733} -- {DAY: 2010-09-01, E0: 0.16799999999999998, ELEV: 440.0, ES0: 0.149, ET0: 0.142, - IRRAD: 8681000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 10.0, - TMAX: 14.4, TMIN: 5.6, VAP: 10.66, WIND: 1.72398249687371} -- {DAY: 2010-09-02, E0: 0.175, ELEV: 440.0, ES0: 0.154, ET0: 0.147, IRRAD: 8821000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 11.65, TMAX: 15.8, - TMIN: 7.5, VAP: 11.7, WIND: 1.0056564565096642} -- {DAY: 2010-09-03, E0: 0.24900000000000003, ELEV: 440.0, ES0: 0.21400000000000002, - ET0: 0.211, IRRAD: 14382000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.35, TMAX: 17.2, TMIN: 7.5, VAP: 11.33, WIND: 1.221154268618878} -- {DAY: 2010-09-04, E0: 0.225, ELEV: 440.0, ES0: 0.20099999999999998, ET0: 0.194, - IRRAD: 9609000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 13.15, - TMAX: 16.6, TMIN: 9.7, VAP: 10.66, WIND: 1.5084846847644964} -- {DAY: 2010-09-05, E0: 0.306, ELEV: 440.0, ES0: 0.262, ET0: 0.277, IRRAD: 19211000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.1, TMAX: 16.2, - TMIN: 6.0, VAP: 9.21, WIND: 2.65780634934697} -- {DAY: 2010-09-06, E0: 0.29100000000000004, ELEV: 440.0, ES0: 0.24900000000000003, - ET0: 0.272, IRRAD: 18341000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 10.75, TMAX: 15.9, TMIN: 5.6, VAP: 8.77, WIND: 2.5859737453105653} -- {DAY: 2010-09-07, E0: 0.24, ELEV: 440.0, ES0: 0.21000000000000002, ET0: 0.193, IRRAD: 13266000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.03, SNOWDEPTH: .nan, TEMP: 9.75, TMAX: 14.3, - TMIN: 5.2, VAP: 9.88, WIND: 3.663462805856634} -- {DAY: 2010-09-08, E0: 0.22000000000000003, ELEV: 440.0, ES0: 0.196, ET0: 0.152, - IRRAD: 9667000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: .nan, TEMP: 12.8, - TMAX: 14.9, TMIN: 10.7, VAP: 12.91, WIND: 3.2324671816382065} -- {DAY: 2010-09-09, E0: 0.131, ELEV: 440.0, ES0: 0.11699999999999999, ET0: 0.131, - IRRAD: 5725000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 13.65, - TMAX: 15.8, TMIN: 11.5, VAP: 13.18, WIND: 1.7958151009101146} -- {DAY: 2010-09-10, E0: 0.211, ELEV: 440.0, ES0: 0.184, ET0: 0.185, IRRAD: 10961000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.200000000000001, - TMAX: 18.6, TMIN: 9.8, VAP: 12.95, WIND: 1.2929868726552827} -- {DAY: 2010-09-11, E0: 0.286, ELEV: 440.0, ES0: 0.242, ET0: 0.253, IRRAD: 17976000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 14.05, TMAX: 21.0, - TMIN: 7.1, VAP: 11.57, WIND: 1.0056564565096642} -- {DAY: 2010-09-12, E0: 0.246, ELEV: 440.0, ES0: 0.205, ET0: 0.238, IRRAD: 16699000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.95, TMAX: 21.7, - TMIN: 6.2, VAP: 11.67, WIND: 0.861991248436855} -- {DAY: 2010-09-13, E0: 0.101, ELEV: 440.0, ES0: 0.088, ET0: 0.11699999999999999, - IRRAD: 5574000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.02, SNOWDEPTH: .nan, TEMP: 12.4, - TMAX: 15.9, TMIN: 8.9, VAP: 12.58, WIND: 1.221154268618878} -- {DAY: 2010-09-14, E0: 0.12, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.10300000000000001, - IRRAD: 5860000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.2, - TMAX: 13.8, TMIN: 8.6, VAP: 12.17, WIND: 2.370475933201351} -- {DAY: 2010-09-15, E0: 0.124, ELEV: 440.0, ES0: 0.11499999999999999, ET0: 0.132, - IRRAD: 3950000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.7, SNOWDEPTH: .nan, TEMP: 13.55, - TMAX: 15.2, TMIN: 11.9, VAP: 12.81, WIND: 2.801471557419779} -- {DAY: 2010-09-16, E0: 0.24100000000000002, ELEV: 440.0, ES0: 0.21600000000000003, - ET0: 0.22400000000000003, IRRAD: 10417000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, - SNOWDEPTH: .nan, TEMP: 13.149999999999999, TMAX: 16.4, TMIN: 9.9, VAP: 10.32, WIND: 2.5859737453105653} -- {DAY: 2010-09-17, E0: 0.195, ELEV: 440.0, ES0: 0.16899999999999998, ET0: 0.192, - IRRAD: 11312000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, - TMAX: 15.9, TMIN: 5.1, VAP: 9.17, WIND: 1.939480308982924} -- {DAY: 2010-09-18, E0: 0.182, ELEV: 440.0, ES0: 0.152, ET0: 0.176, IRRAD: 14229000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.25, TMAX: 14.7, - TMIN: 1.8, VAP: 8.29, WIND: 1.221154268618878} -- {DAY: 2010-09-19, E0: 0.20099999999999998, ELEV: 440.0, ES0: 0.16899999999999998, - ET0: 0.186, IRRAD: 14777000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 8.75, TMAX: 15.2, TMIN: 2.3, VAP: 7.79, WIND: 1.077489060546069} -- {DAY: 2010-09-20, E0: 0.176, ELEV: 440.0, ES0: 0.143, ET0: 0.19, IRRAD: 14819000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 18.3, - TMIN: 1.3, VAP: 9.21, WIND: 1.0056564565096642} -- {DAY: 2010-09-21, E0: 0.21000000000000002, ELEV: 440.0, ES0: 0.16999999999999998, - ET0: 0.225, IRRAD: 17280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.399999999999999, TMAX: 20.9, TMIN: 3.9, VAP: 9.85, WIND: 0.9338238524732597} -- {DAY: 2010-09-22, E0: 0.215, ELEV: 440.0, ES0: 0.174, ET0: 0.23500000000000001, - IRRAD: 16698000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.45, - TMAX: 20.8, TMIN: 6.1, VAP: 10.93, WIND: 1.3648194766916872} -- {DAY: 2010-09-23, E0: 0.191, ELEV: 440.0, ES0: 0.155, ET0: 0.198, IRRAD: 14630000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.600000000000001, - TMAX: 20.6, TMIN: 6.6, VAP: 12.24, WIND: 1.077489060546069} -- {DAY: 2010-09-24, E0: 0.20299999999999999, ELEV: 440.0, ES0: 0.17099999999999999, - ET0: 0.207, IRRAD: 12696000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, - TEMP: 14.600000000000001, TMAX: 21.3, TMIN: 7.9, VAP: 12.91, WIND: 1.6521498928373055} -- {DAY: 2010-09-25, E0: 0.072, ELEV: 440.0, ES0: 0.064, ET0: 0.08299999999999999, - IRRAD: 3235000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 12.15, - TMAX: 13.3, TMIN: 11.0, VAP: 12.81, WIND: 1.8676477049465194} -- {DAY: 2010-09-26, E0: 0.118, ELEV: 440.0, ES0: 0.10700000000000001, ET0: 0.11100000000000002, - IRRAD: 5247000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.95, - TMAX: 10.9, TMIN: 7.0, VAP: 9.37, WIND: 2.5859737453105653} -- {DAY: 2010-09-27, E0: 0.181, ELEV: 440.0, ES0: 0.16, ET0: 0.153, IRRAD: 9271000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: .nan, TEMP: 8.95, TMAX: 12.4, - TMIN: 5.5, VAP: 9.07, WIND: 3.44796499374742} -- {DAY: 2010-09-28, E0: 0.063, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.057999999999999996, - IRRAD: 3652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: .nan, TEMP: 8.25, - TMAX: 9.1, TMIN: 7.4, VAP: 10.45, WIND: 3.0169693695289928} -- {DAY: 2010-09-29, E0: 0.153, ELEV: 440.0, ES0: 0.134, ET0: 0.127, IRRAD: 8714000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.9, TMAX: 12.1, - TMIN: 7.7, VAP: 9.61, WIND: 1.4366520807280918} -- {DAY: 2010-09-30, E0: 0.13999999999999999, ELEV: 440.0, ES0: 0.123, ET0: 0.11299999999999999, - IRRAD: 7718000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.2, - TMAX: 12.3, TMIN: 4.1, VAP: 8.46, WIND: 1.0056564565096642} -- {DAY: 2010-10-01, E0: 0.06, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.071, - IRRAD: 3340000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: .nan, TEMP: 7.55, - TMAX: 10.2, TMIN: 4.9, VAP: 9.54, WIND: 1.221154268618878} -- {DAY: 2010-10-02, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.10200000000000001, - ET0: 0.099, IRRAD: 6112000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, - TEMP: 10.4, TMAX: 13.8, TMIN: 7.0, VAP: 11.16, WIND: 1.5803172888009012} -- {DAY: 2010-10-03, E0: 0.152, ELEV: 440.0, ES0: 0.128, ET0: 0.134, IRRAD: 10165000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 12.9, - TMIN: 9.6, VAP: 11.19, WIND: 3.304299785674611} -- {DAY: 2010-10-04, E0: 0.142, ELEV: 440.0, ES0: 0.118, ET0: 0.125, IRRAD: 10677000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.5, TMAX: 12.3, - TMIN: 8.7, VAP: 10.96, WIND: 3.735295409893039} -- {DAY: 2010-10-05, E0: 0.121, ELEV: 440.0, ES0: 0.10600000000000001, ET0: 0.092, - IRRAD: 6490000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 11.3, - TMAX: 13.2, TMIN: 9.4, VAP: 12.07, WIND: 2.154978121092138} -- {DAY: 2010-10-06, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.074, ET0: 0.077, - IRRAD: 3969000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.0, - TMAX: 12.2, TMIN: 9.8, VAP: 12.0, WIND: 2.0113129130193284} -- {DAY: 2010-10-07, E0: 0.072, ELEV: 440.0, ES0: 0.065, ET0: 0.079, IRRAD: 3115000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.2, TMAX: 11.9, - TMIN: 10.5, VAP: 11.94, WIND: 2.370475933201351} -- {DAY: 2010-10-08, E0: 0.178, ELEV: 440.0, ES0: 0.148, ET0: 0.21400000000000002, - IRRAD: 12854000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.700000000000001, - TMAX: 16.1, TMIN: 7.3, VAP: 9.58, WIND: 3.663462805856634} -- {DAY: 2010-10-09, E0: 0.20400000000000001, ELEV: 440.0, ES0: 0.175, ET0: 0.23700000000000002, - IRRAD: 12656000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 10.600000000000001, - TMAX: 15.3, TMIN: 5.9, VAP: 7.55, WIND: 3.44796499374742} -- {DAY: 2010-10-10, E0: 0.16399999999999998, ELEV: 440.0, ES0: 0.135, ET0: 0.213, - IRRAD: 13447000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.85, - TMAX: 14.0, TMIN: 3.7, VAP: 6.58, WIND: 2.8733041614561836} -- {DAY: 2010-10-11, E0: 0.16, ELEV: 440.0, ES0: 0.131, ET0: 0.21200000000000002, IRRAD: 13109000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 8.9, TMAX: 14.5, - TMIN: 3.3, VAP: 6.85, WIND: 3.0169693695289928} -- {DAY: 2010-10-12, E0: 0.123, ELEV: 440.0, ES0: 0.096, ET0: 0.16299999999999998, - IRRAD: 13005000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 7.449999999999999, - TMAX: 14.2, TMIN: 0.7, VAP: 7.32, WIND: 2.5141411412741608} -- {DAY: 2010-10-13, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.092, ET0: 0.134, - IRRAD: 11311000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.85, - TMAX: 12.1, TMIN: 1.6, VAP: 7.62, WIND: 2.8733041614561836} -- {DAY: 2010-10-14, E0: 0.073, ELEV: 440.0, ES0: 0.052000000000000005, ET0: 0.10700000000000001, - IRRAD: 10652000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.5, - TMAX: 12.4, TMIN: -1.4, VAP: 7.05, WIND: 1.2929868726552827} -- {DAY: 2010-10-15, E0: 0.052000000000000005, ELEV: 440.0, ES0: 0.045, ET0: 0.05, - IRRAD: 3788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.43, SNOWDEPTH: .nan, TEMP: 4.2, - TMAX: 8.6, TMIN: -0.2, VAP: 8.19, WIND: 0.9338238524732597} -- {DAY: 2010-10-16, E0: 0.054000000000000006, ELEV: 440.0, ES0: 0.047, ET0: 0.057999999999999996, - IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.31, SNOWDEPTH: .nan, TEMP: 6.7, - TMAX: 7.5, TMIN: 5.9, VAP: 8.94, WIND: 1.1493216645824735} -- {DAY: 2010-10-17, E0: 0.08299999999999999, ELEV: 440.0, ES0: 0.076, ET0: 0.08399999999999999, - IRRAD: 3537000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 6.3, - TMAX: 7.5, TMIN: 5.1, VAP: 7.72, WIND: 2.442308537237756} -- {DAY: 2010-10-18, E0: 0.08499999999999999, ELEV: 440.0, ES0: 0.075, ET0: 0.074, - IRRAD: 5197000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 4.9, - TMAX: 7.5, TMIN: 2.3, VAP: 7.05, WIND: 1.3648194766916872} -- {DAY: 2010-10-19, E0: 0.061, ELEV: 440.0, ES0: 0.053000000000000005, ET0: 0.06999999999999999, - IRRAD: 3878000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: .nan, TEMP: 4.95, - TMAX: 7.2, TMIN: 2.7, VAP: 7.55, WIND: 2.5859737453105653} -- {DAY: 2010-10-20, E0: 0.068, ELEV: 440.0, ES0: 0.062, ET0: 0.072, IRRAD: 3005000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.52, SNOWDEPTH: .nan, TEMP: 5.449999999999999, - TMAX: 6.6, TMIN: 4.3, VAP: 7.72, WIND: 3.0169693695289928} -- {DAY: 2010-10-21, E0: 0.099, ELEV: 440.0, ES0: 0.089, ET0: 0.10200000000000001, - IRRAD: 5320000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 3.75, - TMAX: 6.1, TMIN: 1.4, VAP: 5.87, WIND: 2.8733041614561836} -- {DAY: 2010-10-22, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.04, ET0: 0.073, IRRAD: 8983000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.1, TMAX: 6.9, - TMIN: -2.7, VAP: 5.7, WIND: 1.5084846847644964} -- {DAY: 2010-10-23, E0: 0.037, ELEV: 440.0, ES0: 0.025, ET0: 0.06, IRRAD: 6012000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.21000000000000002, SNOWDEPTH: .nan, TEMP: 3.6999999999999997, - TMAX: 9.6, TMIN: -2.2, VAP: 7.35, WIND: 1.6521498928373055} -- {DAY: 2010-10-24, E0: 0.05500000000000001, ELEV: 440.0, ES0: 0.049, ET0: 0.066, - IRRAD: 2853000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 6.35, - TMAX: 7.6, TMIN: 5.1, VAP: 8.36, WIND: 2.370475933201351} -- {DAY: 2010-10-25, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.05, ET0: 0.05600000000000001, - IRRAD: 3202000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 3.8, - TMAX: 5.6, TMIN: 2.0, VAP: 6.78, WIND: 1.1493216645824735} -- {DAY: 2010-10-26, E0: 0.051000000000000004, ELEV: 440.0, ES0: 0.040999999999999995, - ET0: 0.06, IRRAD: 5809000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, - TEMP: 2.4, TMAX: 6.8, TMIN: -2.0, VAP: 6.07, WIND: 1.1493216645824735} -- {DAY: 2010-10-27, E0: 0.047, ELEV: 440.0, ES0: 0.031, ET0: 0.061, IRRAD: 9014000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.5, TMAX: 8.1, - TMIN: -3.1, VAP: 5.87, WIND: 1.1493216645824735} -- {DAY: 2010-10-28, E0: 0.071, ELEV: 440.0, ES0: 0.05600000000000001, ET0: 0.08399999999999999, - IRRAD: 7497000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.3999999999999995, - TMAX: 10.6, TMIN: 0.2, VAP: 6.58, WIND: 1.4366520807280918} -- {DAY: 2010-10-29, E0: 0.032, ELEV: 440.0, ES0: 0.012, ET0: 0.087, IRRAD: 9759000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.65, TMAX: 14.4, - TMIN: -1.1, VAP: 6.78, WIND: 1.077489060546069} -- {DAY: 2010-10-30, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.018, ET0: 0.075, - IRRAD: 8668000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.8500000000000005, - TMAX: 11.9, TMIN: -0.2, VAP: 7.01, WIND: 1.3648194766916872} -- {DAY: 2010-10-31, E0: 0.046, ELEV: 440.0, ES0: 0.033, ET0: 0.06899999999999999, - IRRAD: 6399000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 6.6499999999999995, - TMAX: 11.6, TMIN: 1.7, VAP: 8.06, WIND: 1.72398249687371} -- {DAY: 2010-11-01, E0: 0.073, ELEV: 440.0, ES0: 0.061, ET0: 0.071, IRRAD: 5266000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 9.8, TMAX: 14.3, - TMIN: 5.3, VAP: 9.64, WIND: 1.077489060546069} -- {DAY: 2010-11-02, E0: 0.019, ELEV: 440.0, ES0: 0.012, ET0: 0.04, IRRAD: 3367000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 5.45, TMAX: 8.3, - TMIN: 2.6, VAP: 8.87, WIND: 1.8676477049465194} -- {DAY: 2010-11-03, E0: 0.062, ELEV: 440.0, ES0: 0.054000000000000006, ET0: 0.074, - IRRAD: 3638000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.06, SNOWDEPTH: .nan, TEMP: 8.4, - TMAX: 11.8, TMIN: 5.0, VAP: 9.74, WIND: 3.1606345776018023} -- {DAY: 2010-11-04, E0: 0.11499999999999999, ELEV: 440.0, ES0: 0.11000000000000001, - ET0: 0.141, IRRAD: 1972000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, - TEMP: 12.9, TMAX: 15.4, TMIN: 10.4, VAP: 11.9, WIND: 4.597286658329894} -- {DAY: 2010-11-05, E0: 0.154, ELEV: 440.0, ES0: 0.144, ET0: 0.177, IRRAD: 4424000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 13.5, TMAX: 14.7, - TMIN: 12.3, VAP: 10.86, WIND: 4.166291034111466} -- {DAY: 2010-11-06, E0: 0.10800000000000001, ELEV: 440.0, ES0: 0.10400000000000001, - ET0: 0.146, IRRAD: 1597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: .nan, - TEMP: 11.5, TMAX: 12.3, TMIN: 10.7, VAP: 9.88, WIND: 3.519797597783825} -- {DAY: 2010-11-07, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.03, ET0: 0.056999999999999995, - IRRAD: 1958000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.2, SNOWDEPTH: .nan, TEMP: 8.149999999999999, - TMAX: 10.2, TMIN: 6.1, VAP: 9.68, WIND: 1.5803172888009012} -- {DAY: 2010-11-08, E0: 0.037, ELEV: 440.0, ES0: 0.033, ET0: 0.045, IRRAD: 2280000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: .nan, TEMP: 4.6, TMAX: 5.6, - TMIN: 3.6, VAP: 7.62, WIND: 1.5084846847644964} -- {DAY: 2010-11-09, E0: 0.032, ELEV: 440.0, ES0: 0.020999999999999998, ET0: 0.048, - IRRAD: 5597000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 5.0, - TMAX: 8.1, TMIN: 1.9, VAP: 7.28, WIND: 1.5084846847644964} -- {DAY: 2010-11-10, E0: 0.032, ELEV: 440.0, ES0: 0.026000000000000002, ET0: 0.03, - IRRAD: 3253000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: .nan, TEMP: 2.6999999999999997, - TMAX: 5.8, TMIN: -0.4, VAP: 7.18, WIND: 1.221154268618878} -- {DAY: 2010-11-11, E0: 0.046, ELEV: 440.0, ES0: 0.039, ET0: 0.05500000000000001, - IRRAD: 3562000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.01, SNOWDEPTH: .nan, TEMP: 4.0, - TMAX: 6.3, TMIN: 1.7, VAP: 7.11, WIND: 3.663462805856634} -- {DAY: 2010-11-12, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.02, ET0: 0.040999999999999995, - IRRAD: 3632000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: .nan, TEMP: 6.8, - TMAX: 10.0, TMIN: 3.6, VAP: 9.44, WIND: 4.956449678511917} -- {DAY: 2010-11-13, E0: 0.101, ELEV: 440.0, ES0: 0.092, ET0: 0.149, IRRAD: 4082000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 12.6, TMAX: 16.2, - TMIN: 9.0, VAP: 11.03, WIND: 4.094458430075062} -- {DAY: 2010-11-14, E0: 0.009, ELEV: 440.0, ES0: 0.004, ET0: 0.081, IRRAD: 7485000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 11.25, TMAX: 16.8, - TMIN: 5.7, VAP: 9.74, WIND: 1.6521498928373055} -- {DAY: 2010-11-15, E0: 0.040999999999999995, ELEV: 440.0, ES0: 0.032, ET0: 0.06, - IRRAD: 4089000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: .nan, TEMP: 8.45, - TMAX: 12.2, TMIN: 4.7, VAP: 9.71, WIND: 2.083145517055733} -- {DAY: 2010-11-16, E0: 0.02, ELEV: 440.0, ES0: 0.018, ET0: 0.047, IRRAD: 1177000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.13, SNOWDEPTH: .nan, TEMP: 5.9, TMAX: 6.0, - TMIN: 5.8, VAP: 8.53, WIND: 2.298643329164947} -- {DAY: 2010-11-17, E0: 0.013000000000000001, ELEV: 440.0, ES0: 0.011, ET0: 0.033, - IRRAD: 1433000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.2, SNOWDEPTH: .nan, TEMP: 4.4, - TMAX: 5.2, TMIN: 3.6, VAP: 8.03, WIND: 1.7958151009101146} -- {DAY: 2010-11-18, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.040999999999999995, - IRRAD: 1288000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 4.800000000000001, - TMAX: 4.9, TMIN: 4.7, VAP: 7.89, WIND: 1.5803172888009012} -- {DAY: 2010-11-19, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.03, - IRRAD: 1611000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.04, SNOWDEPTH: .nan, TEMP: 3.1500000000000004, - TMAX: 4.9, TMIN: 1.4, VAP: 7.42, WIND: 1.0056564565096642} -- {DAY: 2010-11-20, E0: 0.024, ELEV: 440.0, ES0: 0.019, ET0: 0.03, IRRAD: 2629000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: .nan, TEMP: 2.95, TMAX: 4.3, - TMIN: 1.6, VAP: 6.88, WIND: 1.5084846847644964} -- {DAY: 2010-11-21, E0: 0.025, ELEV: 440.0, ES0: 0.02, ET0: 0.022, IRRAD: 2790000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: .nan, TEMP: 2.75, TMAX: 4.2, - TMIN: 1.3, VAP: 7.18, WIND: 3.376132389711016} -- {DAY: 2010-11-22, E0: 0.05600000000000001, ELEV: 440.0, ES0: 0.052000000000000005, - ET0: 0.056999999999999995, IRRAD: 1810000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, - SNOWDEPTH: .nan, TEMP: 5.4, TMAX: 7.0, TMIN: 3.8, VAP: 7.79, WIND: 2.8733041614561836} -- {DAY: 2010-11-23, E0: 0.033, ELEV: 440.0, ES0: 0.031, ET0: 0.036, IRRAD: 1270000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.18, SNOWDEPTH: 0.5, TEMP: 0.8500000000000001, - TMAX: 1.3, TMIN: 0.4, VAP: 6.0, WIND: 3.735295409893039} -- {DAY: 2010-11-24, E0: 0.034999999999999996, ELEV: 440.0, ES0: 0.032, ET0: 0.034, - IRRAD: 1628000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.12, SNOWDEPTH: 4.0, TEMP: 1.2, - TMAX: 1.9, TMIN: 0.5, VAP: 6.14, WIND: 3.878960617965848} -- {DAY: 2010-11-25, E0: 0.022, ELEV: 440.0, ES0: 0.016, ET0: 0.03, IRRAD: 3374000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 1.0, TEMP: 0.7499999999999999, - TMAX: 2.3, TMIN: -0.8, VAP: 5.66, WIND: 1.8676477049465194} -- {DAY: 2010-11-26, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.024, - IRRAD: 1677000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 2.0, TEMP: -1.3, - TMAX: -0.2, TMIN: -2.4, VAP: 5.23, WIND: 1.221154268618878} -- {DAY: 2010-11-27, E0: 0.024, ELEV: 440.0, ES0: 0.018, ET0: 0.026000000000000002, - IRRAD: 3588000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 2.0, TEMP: -2.0, - TMAX: -0.4, TMIN: -3.6, VAP: 4.28, WIND: 1.221154268618878} -- {DAY: 2010-11-28, E0: 0.024, ELEV: 440.0, ES0: 0.02, ET0: 0.013000000000000001, - IRRAD: 3194000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 2.0, TEMP: -3.85, - TMAX: -1.5, TMIN: -6.2, VAP: 4.35, WIND: 2.370475933201351} -- {DAY: 2010-11-29, E0: 0.028000000000000004, ELEV: 440.0, ES0: 0.024, ET0: 0.019, - IRRAD: 2553000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 16.0, TEMP: -1.95, - TMAX: -1.0, TMIN: -2.9, VAP: 4.96, WIND: 1.5803172888009012} -- {DAY: 2010-11-30, E0: 0.027000000000000003, ELEV: 440.0, ES0: 0.024, ET0: 0.03, - IRRAD: 2146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 19.0, TEMP: -3.8000000000000003, - TMAX: -3.2, TMIN: -4.4, VAP: 3.98, WIND: 2.370475933201351} -- {DAY: 2010-12-01, E0: 0.03, ELEV: 440.0, ES0: 0.028000000000000004, ET0: 0.036, - IRRAD: 1406000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.4, SNOWDEPTH: 20.0, TEMP: -6.0, - TMAX: -4.8, TMIN: -7.2, VAP: 3.37, WIND: 4.453621450257085} -- {DAY: 2010-12-02, E0: 0.023, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, - IRRAD: 3010000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -7.95, - TMAX: -5.5, TMIN: -10.4, VAP: 2.87, WIND: 1.939480308982924} -- {DAY: 2010-12-03, E0: 0.019, ELEV: 440.0, ES0: 0.015, ET0: 0.015, IRRAD: 2926000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.100000000000001, - TMAX: -5.4, TMIN: -10.8, VAP: 2.83, WIND: 0.7901586444004506} -- {DAY: 2010-12-04, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.012, ET0: 0.015, - IRRAD: 1788000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 20.0, TEMP: -8.6, - TMAX: -5.1, TMIN: -12.1, VAP: 3.14, WIND: 2.0113129130193284} -- {DAY: 2010-12-05, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.01, - IRRAD: 2315000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.9, SNOWDEPTH: 18.0, TEMP: -7.35, - TMAX: -3.7, TMIN: -11.0, VAP: 3.61, WIND: 1.939480308982924} -- {DAY: 2010-12-06, E0: 0.008, ELEV: 440.0, ES0: 0.006, ET0: 0.017, IRRAD: 1609000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 2.0, SNOWDEPTH: 23.0, TEMP: -1.9999999999999998, - TMAX: 0.1, TMIN: -4.1, VAP: 5.26, WIND: 1.1493216645824735} -- {DAY: 2010-12-07, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.019, IRRAD: 1671000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.5, SNOWDEPTH: 25.0, TEMP: 0.0, TMAX: 1.5, - TMIN: -1.5, VAP: 5.93, WIND: 1.0056564565096642} -- {DAY: 2010-12-08, E0: 0.02, ELEV: 440.0, ES0: 0.016, ET0: 0.022, IRRAD: 1933000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 21.0, TEMP: 2.6500000000000004, - TMAX: 4.9, TMIN: 0.4, VAP: 7.11, WIND: 1.5803172888009012} -- {DAY: 2010-12-09, E0: 0.020999999999999998, ELEV: 440.0, ES0: 0.018, ET0: 0.024, - IRRAD: 1529000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.09, SNOWDEPTH: 14.0, TEMP: -2.0, - TMAX: -1.2, TMIN: -2.8, VAP: 4.92, WIND: 4.597286658329894} -- {DAY: 2010-12-10, E0: 0.018, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.028999999999999998, - IRRAD: 3723000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.42000000000000004, SNOWDEPTH: 14.0, - TEMP: -2.45, TMAX: -2.0, TMIN: -2.9, VAP: 4.28, WIND: 3.0888019735653973} -- {DAY: 2010-12-11, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, - IRRAD: 1355000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.6, SNOWDEPTH: 16.0, TEMP: -0.30000000000000004, - TMAX: 2.3, TMIN: -2.9, VAP: 6.07, WIND: 4.453621450257085} -- {DAY: 2010-12-12, E0: 0.039, ELEV: 440.0, ES0: 0.036, ET0: 0.043, IRRAD: 1668000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.24, SNOWDEPTH: 9.0, TEMP: 1.0499999999999998, - TMAX: 1.4, TMIN: 0.7, VAP: 5.8, WIND: 3.807128013929443} -- {DAY: 2010-12-13, E0: 0.006, ELEV: 440.0, ES0: 0.003, ET0: 0.022, IRRAD: 4070000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 9.0, TEMP: -5.9, TMAX: -5.6, - TMIN: -6.2, VAP: 3.17, WIND: 2.5141411412741608} -- {DAY: 2010-12-14, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.008, - IRRAD: 2280000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.27, SNOWDEPTH: 9.0, TEMP: -8.25, - TMAX: -5.4, TMIN: -11.1, VAP: 3.27, WIND: 2.083145517055733} -- {DAY: 2010-12-15, E0: 0.022, ELEV: 440.0, ES0: 0.019, ET0: 0.020999999999999998, - IRRAD: 1877000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.16, SNOWDEPTH: 9.0, TEMP: -6.65, - TMAX: -6.3, TMIN: -7.0, VAP: 3.34, WIND: 2.801471557419779} -- {DAY: 2010-12-16, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.01, IRRAD: 3137000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.06999999999999999, SNOWDEPTH: 11.0, TEMP: -9.1, - TMAX: -6.2, TMIN: -12.0, VAP: 2.8, WIND: 2.154978121092138} -- {DAY: 2010-12-17, E0: 0.011, ELEV: 440.0, ES0: 0.009, ET0: 0.016, IRRAD: 1541000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.3, SNOWDEPTH: 13.0, TEMP: -7.25, TMAX: -4.9, - TMIN: -9.6, VAP: 3.41, WIND: 1.939480308982924} -- {DAY: 2010-12-18, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.01, - IRRAD: 3633000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -7.3, - TMAX: -4.1, TMIN: -10.5, VAP: 3.03, WIND: 1.5084846847644964} -- {DAY: 2010-12-19, E0: 0.006, ELEV: 440.0, ES0: 0.004, ET0: 0.009, IRRAD: 1737000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.29, SNOWDEPTH: 13.0, TEMP: -6.75, TMAX: -0.6, - TMIN: -12.9, VAP: 4.01, WIND: 2.154978121092138} -- {DAY: 2010-12-20, E0: 0.036, ELEV: 440.0, ES0: 0.033, ET0: 0.048, IRRAD: 1538000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.41, SNOWDEPTH: 13.0, TEMP: 0.7, TMAX: 2.9, - TMIN: -1.5, VAP: 5.4, WIND: 2.65780634934697} -- {DAY: 2010-12-21, E0: 0.014000000000000002, ELEV: 440.0, ES0: 0.011, ET0: 0.018, - IRRAD: 2103000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 13.0, TEMP: -0.19999999999999996, - TMAX: 3.5, TMIN: -3.9, VAP: 5.8, WIND: 1.2929868726552827} -- {DAY: 2010-12-22, E0: 0.017, ELEV: 440.0, ES0: 0.014000000000000002, ET0: 0.014000000000000002, - IRRAD: 2105000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 13.0, TEMP: -0.44999999999999996, - TMAX: 1.5, TMIN: -2.4, VAP: 5.66, WIND: 1.221154268618878} -- {DAY: 2010-12-23, E0: 0.019, ELEV: 440.0, ES0: 0.016, ET0: 0.014000000000000002, - IRRAD: 2239000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 12.0, TEMP: -0.5, - TMAX: 2.1, TMIN: -3.1, VAP: 5.66, WIND: 1.2929868726552827} -- {DAY: 2010-12-24, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.028999999999999998, - IRRAD: 1140000.0, LAT: 49.43613, LON: 12.98528, RAIN: 1.0, SNOWDEPTH: 13.0, TEMP: 0.3, - TMAX: 1.5, TMIN: -0.9, VAP: 5.8, WIND: 2.442308537237756} -- {DAY: 2010-12-25, E0: 0.034, ELEV: 440.0, ES0: 0.032, ET0: 0.031, IRRAD: 2108000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.01, SNOWDEPTH: 16.0, TEMP: -4.65, TMAX: -4.5, - TMIN: -4.8, VAP: 3.57, WIND: 2.298643329164947} -- {DAY: 2010-12-26, E0: 0.012, ELEV: 440.0, ES0: 0.009, ET0: 0.012, IRRAD: 2899000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.08, SNOWDEPTH: 16.0, TEMP: -9.95, TMAX: -7.9, - TMIN: -12.0, VAP: 2.6, WIND: 1.6521498928373055} -- {DAY: 2010-12-27, E0: 0.012, ELEV: 440.0, ES0: 0.01, ET0: 0.017, IRRAD: 1694000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.1, SNOWDEPTH: 16.0, TEMP: -6.5, TMAX: -4.2, - TMIN: -8.8, VAP: 3.54, WIND: 1.72398249687371} -- {DAY: 2010-12-28, E0: 0.016, ELEV: 440.0, ES0: 0.013000000000000001, ET0: 0.023, - IRRAD: 3146000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 16.0, TEMP: -4.65, - TMAX: -2.7, TMIN: -6.6, VAP: 3.41, WIND: 1.4366520807280918} -- {DAY: 2010-12-29, E0: 0.004, ELEV: 440.0, ES0: 0.004, ET0: 0.006, IRRAD: 3716000.0, - LAT: 49.43613, LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 15.0, TEMP: -11.35, TMAX: -8.7, - TMIN: -14.0, VAP: 2.09, WIND: 0.6464934363276413} -- {DAY: 2010-12-30, E0: 0.0, ELEV: 440.0, ES0: 0.0, ET0: 0.0, IRRAD: 5266000.0, LAT: 49.43613, - LON: 12.98528, RAIN: 0.0, SNOWDEPTH: 24.0, TEMP: -13.5, TMAX: -8.4, TMIN: -18.6, - VAP: 1.89, WIND: 0.6464934363276413} -- {DAY: 2010-12-31, E0: 0.007000000000000001, ELEV: 440.0, ES0: 0.005, ET0: 0.002, - IRRAD: 1689000.0, LAT: 49.43613, LON: 12.98528, RAIN: 0.05, SNOWDEPTH: 22.0, TEMP: -9.15, - TMAX: -3.4, TMIN: -14.9, VAP: 3.91, WIND: 1.72398249687371} diff --git a/new_leaf.py b/new_leaf.py deleted file mode 100644 index ca8f8bb..0000000 --- a/new_leaf.py +++ /dev/null @@ -1,524 +0,0 @@ -"""Leaf dynamics for the WOFOST crop model.""" - -import datetime -import torch -from pcse.base import ParamTemplate -from pcse.base import RatesTemplate -from pcse.base import SimulationObject -from pcse.base import StatesTemplate -from pcse.base.parameter_providers import ParameterProvider -from pcse.base.variablekiosk import VariableKiosk -from pcse.base.weather import WeatherDataContainer -from pcse.decorators import prepare_rates -from pcse.decorators import prepare_states -from pcse.traitlets import Any -from diffwofost.physical_models.utils import AfgenTrait -from diffwofost.physical_models.utils import _broadcast_to -from diffwofost.physical_models.utils import _get_drv -from diffwofost.physical_models.utils import _get_params_shape - - -class WOFOST_Leaf_Dynamics(SimulationObject): - """Leaf dynamics for the WOFOST crop model. - - Implementation of biomass partitioning to leaves, growth and senenscence - of leaves. WOFOST keeps track of the biomass that has been partitioned to - the leaves for each day (variable `LV`), which is called a leaf class). - For each leaf class the leaf age (variable 'LVAGE') and specific leaf area - (variable `SLA`) are also registered. Total living leaf biomass is - calculated by summing the biomass values for all leaf classes. Similarly, - leaf area is calculated by summing leaf biomass times specific leaf area - (`LV` * `SLA`). - - Senescense of the leaves can occur as a result of physiological age, - drought stress or self-shading. - - **Simulation parameters** (provide in cropdata dictionary) - - | Name | Description | Type | Unit | - |--------|------------------------------------------------------------------ |------|------------| - | RGRLAI | Maximum relative increase in LAI. |SCr | ha ha⁻¹ d⁻¹| - | SPAN | Life span of leaves growing at 35 Celsius |SCr | d | - | TBASE | Lower threshold temp. for ageing of leaves |SCr | C | - | PERDL | Max. relative death rate of leaves due to water stress |SCr | | - | TDWI | Initial total crop dry weight |SCr | kg ha⁻¹ | - | KDIFTB | Extinction coefficient for diffuse visible light as function of DVS|TCr | | - | SLATB | Specific leaf area as a function of DVS |TCr | ha kg⁻¹ | - - **State variables** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|-------------| - | LV | Leaf biomass per leaf class | N | kg ha⁻¹ | - | SLA | Specific leaf area per leaf class | N | ha kg⁻¹ | - | LVAGE | Leaf age per leaf class | N | d | - | LVSUM | Sum of LV | N | kg ha⁻¹ | - | LAIEM | LAI at emergence | N | - | - | LASUM | Total leaf area as sum of LV*SLA, not including stem and pod area | N | - | - | LAIEXP | LAI value under theoretical exponential growth | N | - | - | LAIMAX | Maximum LAI reached during growth cycle | N | - | - | LAI | Leaf area index, including stem and pod area | Y | - | - | WLV | Dry weight of living leaves | Y | kg ha⁻¹ | - | DWLV | Dry weight of dead leaves | N | kg ha⁻¹ | - | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | - - **Rate variables** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|---------------| - | GRLV | Growth rate leaves | N | kg ha⁻¹ d⁻¹ | - | DSLV1 | Death rate leaves due to water stress | N | kg ha⁻¹ d⁻¹ | - | DSLV2 | Death rate leaves due to self-shading | N | kg ha⁻¹ d⁻¹ | - | DSLV3 | Death rate leaves due to frost kill | N | kg ha⁻¹ d⁻¹ | - | DSLV | Maximum of DSLV1, DSLV2, DSLV3 | N | kg ha⁻¹ d⁻¹ | - | DALV | Death rate leaves due to aging | N | kg ha⁻¹ d⁻¹ | - | DRLV | Death rate leaves as a combination of DSLV and DALV | N | kg ha⁻¹ d⁻¹ | - | SLAT | Specific leaf area for current time step, adjusted for source/sink limited leaf expansion rate | N | ha kg⁻¹ | - | FYSAGE | Increase in physiological leaf age | N | - | - | GLAIEX | Sink-limited leaf expansion rate (exponential curve) | N | ha ha⁻¹ d⁻¹ | - | GLASOL | Source-limited leaf expansion rate (biomass increase) | N | ha ha⁻¹ d⁻¹ | - - **External dependencies** - - | Name | Description | Provided by | Unit | - |-----------|-----------------------------------|--------------------------------|----------------| - | DVS | Crop development stage | DVS_Phenology | - | - | FL | Fraction biomass to leaves | DVS_Partitioning | - | - | FR | Fraction biomass to roots | DVS_Partitioning | - | - | SAI | Stem area index | WOFOST_Stem_Dynamics | - | - | PAI | Pod area index | WOFOST_Storage_Organ_Dynamics | - | - | TRA | Transpiration rate | Evapotranspiration | cm day⁻¹ ? | - | TRAMX | Maximum transpiration rate | Evapotranspiration | cm day⁻¹ ? | - | ADMI | Above-ground dry matter increase | CropSimulation | kg ha⁻¹ d⁻¹ | - | RFTRA | Reduction factor for transpiration (water & oxygen) | Y | - | - | RF_FROST | Reduction factor frost kill | FROSTOL (optional) | - | - - **Outputs** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|-------------| - | LAI | Leaf area index, including stem and pod area | Y | - | - | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | - - **Gradient mapping (which parameters have a gradient):** - - | Output | Parameters influencing it | - |--------|------------------------------------------| - | LAI | TDWI, SPAN, RGRLAI, TBASE, KDIFTB, SLATB | - | TWLV | TDWI, PERDL | - - [!NOTE] - Notice that the following gradients are zero: - - ∂SPAN/∂LAI - - ∂PERDL/∂TWLV - - ∂KDIFTB/∂LAI - """ # noqa: E501 - - # The following parameters are used to initialize and control the arrays that store information - # on the leaf classes during the time integration: leaf area, age, and biomass. - START_DATE = None # Start date of the simulation - MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) - params_shape = None # Shape of the parameters tensors - - # Default values that can be overridden before instantiation - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - dtype = torch.float64 - - class Parameters(ParamTemplate): - RGRLAI = Any() - SPAN = Any() - TBASE = Any() - PERDL = Any() - TDWI = Any() - SLATB = AfgenTrait() - KDIFTB = AfgenTrait() - - def __init__(self, parvalues, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device - self.RGRLAI = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.SPAN = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.TBASE = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.PERDL = [torch.tensor(-99.0, dtype=dtype, device=device)] - self.TDWI = [torch.tensor(-99.0, dtype=dtype, device=device)] - - # Call parent init - super().__init__(parvalues) - - class StateVariables(StatesTemplate): - LV = Any() - SLA = Any() - LVAGE = Any() - LAIEM = Any() - LASUM = Any() - LAIEXP = Any() - LAIMAX = Any() - LAI = Any() - WLV = Any() - DWLV = Any() - TWLV = Any() - - def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device if not in kwargs - if "LV" not in kwargs: - self.LV = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "SLA" not in kwargs: - self.SLA = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "LVAGE" not in kwargs: - self.LVAGE = [torch.tensor(-99.0, dtype=dtype, device=device)] - if "LAIEM" not in kwargs: - self.LAIEM = torch.tensor(-99.0, dtype=dtype, device=device) - if "LASUM" not in kwargs: - self.LASUM = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAIEXP" not in kwargs: - self.LAIEXP = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAIMAX" not in kwargs: - self.LAIMAX = torch.tensor(-99.0, dtype=dtype, device=device) - if "LAI" not in kwargs: - self.LAI = torch.tensor(-99.0, dtype=dtype, device=device) - if "WLV" not in kwargs: - self.WLV = torch.tensor(-99.0, dtype=dtype, device=device) - if "DWLV" not in kwargs: - self.DWLV = torch.tensor(-99.0, dtype=dtype, device=device) - if "TWLV" not in kwargs: - self.TWLV = torch.tensor(-99.0, dtype=dtype, device=device) - - # Call parent init - super().__init__(kiosk, publish=publish, **kwargs) - - class RateVariables(RatesTemplate): - GRLV = Any() - DSLV1 = Any() - DSLV2 = Any() - DSLV3 = Any() - DSLV = Any() - DALV = Any() - DRLV = Any() - SLAT = Any() - FYSAGE = Any() - GLAIEX = Any() - GLASOL = Any() - - def __init__(self, kiosk, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device - - # Set default values using the provided dtype and device - self.GRLV = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV1 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV2 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV3 = torch.tensor(0.0, dtype=dtype, device=device) - self.DSLV = torch.tensor(0.0, dtype=dtype, device=device) - self.DALV = torch.tensor(0.0, dtype=dtype, device=device) - self.DRLV = torch.tensor(0.0, dtype=dtype, device=device) - self.SLAT = torch.tensor(0.0, dtype=dtype, device=device) - self.FYSAGE = torch.tensor(0.0, dtype=dtype, device=device) - self.GLAIEX = torch.tensor(0.0, dtype=dtype, device=device) - self.GLASOL = torch.tensor(0.0, dtype=dtype, device=device) - - # Call parent init - super().__init__(kiosk) - - def initialize( - self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider - ) -> None: - """Initialize the WOFOST_Leaf_Dynamics simulation object. - - Args: - day (datetime.date): The starting date of the simulation. - kiosk (VariableKiosk): A container for registering and publishing - (internal and external) state variables. See PCSE documentation for - details. - parvalues (ParameterProvider): A dictionary-like container holding - all parameter sets (crop, soil, site) as key/value. The values are - arrays or scalars. See PCSE documentation for details. - """ - self.START_DATE = day - self.kiosk = kiosk - # TODO check if parvalues are already torch.nn.Parameters - self.params = self.Parameters(parvalues) - self.rates = self.RateVariables(kiosk) - - # Create scalar constants once to avoid numerical deviations - self._zero = torch.tensor(0.0, dtype=self.dtype, device=self.device) - self._epsilon = torch.tensor(1e-12, dtype=self.dtype, device=self.device) - self._sigmoid_sharpness = torch.tensor(1e-16, dtype=self.dtype, device=self.device) - self._sigmoid_epsilon = torch.tensor(1e-14, dtype=self.dtype, device=self.device) - - # CALCULATE INITIAL STATE VARIABLES - # check for required external variables - _exist_required_external_variables(self.kiosk) - # TODO check if external variables are already torch tensors - - FL = self.kiosk["FL"] - FR = self.kiosk["FR"] - DVS = self.kiosk["DVS"] - - params = self.params - self.params_shape = _get_params_shape(params) - - # Initial leaf biomass - WLV = (params.TDWI * (1 - FR)) * FL - DWLV = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) - TWLV = WLV + DWLV - - # Initialize leaf classes (SLA, age and weight) - SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) - LVAGE = torch.zeros( - (*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device - ) - LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=self.dtype, device=self.device) - SLA[..., 0] = params.SLATB(DVS) - LV[..., 0] = WLV - - # Initial values for leaf area - LAIEM = LV[..., 0] * SLA[..., 0] - LASUM = LAIEM - LAIEXP = LAIEM - LAIMAX = LAIEM - LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] - - # Initialize StateVariables object - self.states = self.StateVariables( - kiosk, - publish=["LAI", "TWLV", "WLV"], - LV=LV, - SLA=SLA, - LVAGE=LVAGE, - LAIEM=LAIEM, - LASUM=LASUM, - LAIEXP=LAIEXP, - LAIMAX=LAIMAX, - LAI=LAI, - WLV=WLV, - DWLV=DWLV, - TWLV=TWLV, - ) - - def _calc_LAI(self): - # Total leaf area Index as sum of leaf, pod and stem area - SAI = self.kiosk["SAI"] - PAI = self.kiosk["PAI"] - total_LAI = self.states.LASUM + SAI + PAI - return total_LAI - - @prepare_rates - def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: - """Calculate the rates of change for the leaf dynamics. - - Args: - day (datetime.date, optional): The current date of the simulation. - drv (WeatherDataContainer, optional): A dictionary-like container holding - weather data elements as key/value. The values are - arrays or scalars. See PCSE documentation for details. - """ - r = self.rates - s = self.states - p = self.params - k = self.kiosk - - # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask - # A mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) - dvs_mask = (DVS >= 0).to(dtype=self.dtype) - - # Growth rate leaves - # weight of new leaves - r.GRLV = dvs_mask * k.ADMI * k.FL - - # death of leaves due to water/oxygen stress - r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL - - # death due to self shading cause by high LAI - DVS = self.kiosk["DVS"] - LAICR = 3.2 / p.KDIFTB(DVS) - r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) - - # Death of leaves due to frost damage as determined by - # Reduction Factor Frost "RF_FROST" - if "RF_FROST" in self.kiosk: - r.DSLV3 = s.WLV * k.RF_FROST - else: - r.DSLV3 = torch.zeros_like(s.WLV, dtype=self.dtype) - - r.DSLV3 = dvs_mask * r.DSLV3 - - # leaf death equals maximum of water stress, shading and frost - r.DSLV = torch.maximum(torch.maximum(r.DSLV1, r.DSLV2), r.DSLV3) - r.DSLV = dvs_mask * r.DSLV - - # Determine how much leaf biomass classes have to die in states.LV, - # given the a life span > SPAN, these classes will be accumulated - # in DALV. - # Note that the actual leaf death is imposed on the array LV during the - # state integration step. - tSPAN = _broadcast_to( - p.SPAN, s.LVAGE.shape, dtype=self.dtype, device=self.device - ) # Broadcast to same shape - - # Using a sigmoid here instead of a conditional statement on the value of - # SPAN because the latter would not allow for the gradient to be tracked. - # the if statement `p.SPAN.requires_grad` to avoid unnecessary - # approximation when SPAN is not a learnable parameter. - # TODO: sharpness can be exposed as a parameter - if p.SPAN.requires_grad: - # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very - # small and mask should be 1 - # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is - # equal to zero and mask should be 0.0 - span_mask = torch.sigmoid( - (s.LVAGE - tSPAN - self._sigmoid_epsilon) / self._sigmoid_sharpness - ).to(dtype=self.dtype) - else: - span_mask = (s.LVAGE > tSPAN).to(dtype=self.dtype) - - r.DALV = torch.sum(span_mask * s.LV, dim=-1) - r.DALV = dvs_mask * r.DALV - - # Total death rate leaves - r.DRLV = torch.maximum(r.DSLV, r.DALV) - - # Get the temperature from the drv - TEMP = _get_drv(drv.TEMP, self.params_shape) - - # physiologic ageing of leaves per time step - TBASE = _broadcast_to(p.TBASE, self.params_shape, dtype=self.dtype, device=self.device) - FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) - r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) - - # specific leaf area of leaves per time step - r.SLAT = dvs_mask * p.SLATB(DVS) - - # leaf area not to exceed exponential growth curve - is_lai_exp = s.LAIEXP < 6.0 - DTEFF = torch.clamp(TEMP - TBASE, 0.0) - - # NOTE: conditional statements do not allow for the gradient to be - # tracked through the condition. Thus, the gradient with respect to - # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) - # are expected to be incorrect. - r.GLAIEX = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), - self._zero, - ) - - # source-limited increase in leaf area - r.GLASOL = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), - self._zero, - ) - - # sink-limited increase in leaf area - GLA = torch.minimum(r.GLAIEX, r.GLASOL) - - # adjustment of specific leaf area of youngest leaf class - r.SLAT = torch.where( - dvs_mask.bool(), - torch.where( - is_lai_exp & (r.GRLV > self._epsilon), GLA / (r.GRLV + self._epsilon), r.SLAT - ), - self._zero, - ) - - @prepare_states - def integrate(self, day: datetime.date, delt=1.0) -> None: - """Integrate the leaf dynamics state variables. - - Args: - day (datetime.date, optional): The current date of the simulation. - delt (float, optional): The time step for integration. Defaults to 1.0. - """ - # TODO check if DVS < 0 and skip integration needed - rates = self.rates - states = self.states - - # --------- leave death --------- - tLV = states.LV.clone() - tSLA = states.SLA.clone() - tLVAGE = states.LVAGE.clone() - tDRLV = _broadcast_to(rates.DRLV, tLV.shape, dtype=self.dtype, device=self.device) - - # Leaf death is imposed on leaves from the oldest ones. - # Calculate the cumulative sum of weights after leaf death, and - # find out which leaf classes are dead (negative weights) - weight_cumsum = tLV.cumsum(dim=-1) - tDRLV - is_alive = weight_cumsum >= 0 - - # Adjust value of oldest leaf class, i.e. the first non-zero - # weight along the time axis (the last dimension). - # Cast argument to int because torch.argmax requires it to be numeric - idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True).to( - device=self.device - ) - new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) - tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) - - # Integration of physiological age - # Zero out all dead leaf classes - # NOTE: conditional statements do not allow for the gradient to be - # tracked through the condition. Thus, the gradient with respect to - # parameters that contribute to `is_alive` are expected to be incorrect. - tLV = torch.where(is_alive, tLV, 0.0) - tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) - tLVAGE = torch.where(is_alive, tLVAGE, 0.0) - tSLA = torch.where(is_alive, tSLA, 0.0) - - # --------- leave growth --------- - idx = int((day - self.START_DATE).days / delt) - tLV[..., idx] = rates.GRLV - tSLA[..., idx] = rates.SLAT - tLVAGE[..., idx] = 0.0 - - # calculation of new leaf area - states.LASUM = torch.sum(tLV * tSLA, dim=-1) - states.LAI = self._calc_LAI() - states.LAIMAX = torch.maximum(states.LAI, states.LAIMAX) - - # exponential growth curve - states.LAIEXP = states.LAIEXP + rates.GLAIEX - - # Update leaf biomass states - states.WLV = torch.sum(tLV, dim=-1) - states.DWLV = states.DWLV + rates.DRLV - states.TWLV = states.WLV + states.DWLV - - # Store final leaf biomass deques - self.states.LV = tLV - self.states.SLA = tSLA - self.states.LVAGE = tLVAGE - - -def _exist_required_external_variables(kiosk): - """Check if all required external variables are available in the kiosk. - - Args: - kiosk (VariableKiosk): The variable kiosk to check. - - Raises: - ValueError: If any required external variable is missing. - - """ - required_external_vars_at_init = ["DVS", "FL", "FR", "SAI", "PAI"] - for var in required_external_vars_at_init: - if var not in kiosk: - raise ValueError( - f"Required external variables '{var}' is missing in the kiosk." - f" Ensure that all required variables {required_external_vars_at_init}" - " are provided." - ) diff --git a/new_utils.py b/new_utils.py deleted file mode 100644 index aa90cfb..0000000 --- a/new_utils.py +++ /dev/null @@ -1,666 +0,0 @@ -"""This file contains code that is required to run the YAML unit tests. - -It contains: - - VariableKioskTestHelper: A subclass of the VariableKiosk that can use externally - forced states/rates - - ConfigurationLoaderTestHelper: An subclass of ConfigurationLoader that allows to - specify the simbojects to be test dynamically - - EngineTestHelper: engine specifically for running the YAML tests. - - WeatherDataProviderTestHelper: a weatherdata provides that takes the weather - inputs from the YAML file. - -Note that the code here is *not* python2 compatible. -""" - -import logging -import os -from collections.abc import Iterable -import torch -import yaml -from pcse import signals -from pcse.agromanager import AgroManager -from pcse.base import ConfigurationLoader -from pcse.base.parameter_providers import ParameterProvider -from pcse.base.variablekiosk import VariableKiosk -from pcse.base.weather import WeatherDataContainer -from pcse.base.weather import WeatherDataProvider -from pcse.engine import BaseEngine -from pcse.engine import Engine -from pcse.settings import settings -from pcse.timer import Timer -from pcse.traitlets import Enum -from pcse.traitlets import TraitType - -logging.disable(logging.CRITICAL) - -this_dir = os.path.dirname(__file__) - - -def nothing(*args, **kwargs): - """A function that does nothing.""" - pass - - -class VariableKioskTestHelper(VariableKiosk): - """Variable Kiosk for testing purposes which allows to use external states.""" - - external_state_list = None - - def __init__(self, external_state_list): - super().__init__() - self.current_externals = {} - if external_state_list: - self.external_state_list = external_state_list - - def __call__(self, day): - """Sets the external state/rate variables for the current day. - - Returns True if the list of external state/rate variables is exhausted, - otherwise False. - """ - if self.external_state_list: - current_externals = self.external_state_list.pop(0) - forcing_day = current_externals.pop("DAY") - msg = "Failure updating VariableKiosk with external states: days are not matching!" - assert forcing_day == day, msg - self.current_externals.clear() - self.current_externals.update(current_externals) - if len(self.external_state_list) == 0: - return True - - return False - - def is_external_state(self, item): - """Returns True if the item is an external state.""" - return item in self.current_externals - - def __getattr__(self, item): - """Allow use of attribute notation. - - eg "kiosk.LAI" on published rates or states. - """ - if item in self.current_externals: - return self.current_externals[item] - else: - return dict.__getitem__(self, item) - - def __getitem__(self, item): - """Override __getitem__ to first look in external states.""" - if item in self.current_externals: - return self.current_externals[item] - else: - return dict.__getitem__(self, item) - - def __contains__(self, key): - """Override __contains__ to first look in external states.""" - return key in self.current_externals or dict.__contains__(self, key) - - -class ConfigurationLoaderTestHelper(ConfigurationLoader): - def __init__(self, YAML_test_inputs, simobject, waterbalance=None): - self.model_config_file = "Test config" - self.description = "Configuration loader for running YAML tests" - self.CROP = simobject - self.SOIL = waterbalance - self.AGROMANAGEMENT = AgroManager - self.OUTPUT_INTERVAL = "daily" - self.OUTPUT_INTERVAL_DAYS = 1 - self.OUTPUT_WEEKDAY = 0 - self.OUTPUT_VARS = list(YAML_test_inputs["Precision"].keys()) - self.SUMMARY_OUTPUT_VARS = [] - self.TERMINAL_OUTPUT_VARS = [] - - -class EngineTestHelper(Engine): - """An engine which is purely for running the YAML unit tests.""" - - def __init__( - self, - parameterprovider, - weatherdataprovider, - agromanagement, - test_config, - external_states=None, - device=None, - dtype=None, - ): - BaseEngine.__init__(self) - - # Load the model configuration - self.mconf = ConfigurationLoader(test_config) - self.parameterprovider = parameterprovider - - # Configure device and dtype on crop module class if it supports them - if hasattr(self.mconf.CROP, "device") and device is not None: - self.mconf.CROP.device = device - if hasattr(self.mconf.CROP, "dtype") and dtype is not None: - self.mconf.CROP.dtype = dtype - - # Variable kiosk for registering and publishing variables - self.kiosk = VariableKioskTestHelper(external_states) - - # Placeholder for variables to be saved during a model run - self._saved_output = list() - self._saved_summary_output = list() - self._saved_terminal_output = dict() - - # register handlers for starting/finishing the crop simulation, for - # handling output and terminating the system - self._connect_signal(self._on_CROP_START, signal=signals.crop_start) - self._connect_signal(self._on_CROP_FINISH, signal=signals.crop_finish) - self._connect_signal(self._on_OUTPUT, signal=signals.output) - self._connect_signal(self._on_TERMINATE, signal=signals.terminate) - - # Component for agromanagement - self.agromanager = self.mconf.AGROMANAGEMENT(self.kiosk, agromanagement) - start_date = self.agromanager.start_date - end_date = self.agromanager.end_date - - # Timer: starting day, final day and model output - self.timer = Timer(self.kiosk, start_date, end_date, self.mconf) - self.day, delt = self.timer() - # Update external states in the kiosk - self.kiosk(self.day) - - # Driving variables - self.weatherdataprovider = weatherdataprovider - self.drv = self._get_driving_variables(self.day) - - # Component for simulation of soil processes - if self.mconf.SOIL is not None: - self.soil = self.mconf.SOIL(self.day, self.kiosk, parameterprovider) - - # Call AgroManagement module for management actions at initialization - self.agromanager(self.day, self.drv) - - # Calculate initial rates - self.calc_rates(self.day, self.drv) - - def _run(self): - """Make one time step of the simulation.""" - # Update timer - self.day, delt = self.timer() - - # When the list of external states is exhausted the VariableKioskTestHelper will - # return True signalling the end of the test - stop_test = self.kiosk(self.day) - if stop_test: - self._send_signal( - signal=signals.crop_finish, day=self.day, finish_type="maturity", crop_delete=False - ) - - # State integration and update to forced variables - self.integrate(self.day, delt) - - # Driving variables - self.drv = self._get_driving_variables(self.day) - - # Agromanagement decisions - self.agromanager(self.day, self.drv) - - # Rate calculation - self.calc_rates(self.day, self.drv) - - if self.flag_terminate is True: - self._terminate_simulation(self.day) - - -class WeatherDataProviderTestHelper(WeatherDataProvider): - """It stores the weatherdata contained within the YAML tests.""" - - def __init__(self, yaml_weather, meteo_range_checks=True): - super().__init__() - # This is a temporary workaround. The `METEO_RANGE_CHECKS` logic in - # `__setattr__` method in `WeatherDataContainer` is not vector compatible - # yet. So we can disable it here when creating the `WeatherDataContainer` - # instances with arrays. - settings.METEO_RANGE_CHECKS = meteo_range_checks - for weather in yaml_weather: - if "SNOWDEPTH" in weather: - weather.pop("SNOWDEPTH") - wdc = WeatherDataContainer(**weather) - self._store_WeatherDataContainer(wdc, wdc.DAY) - - -def prepare_engine_input( - test_data, crop_model_params, meteo_range_checks=True, dtype=torch.float64 -): - """Prepare the inputs for the engine from the YAML file.""" - agro_management_inputs = test_data["AgroManagement"] - cropd = test_data["ModelParameters"] - - weather_data_provider = WeatherDataProviderTestHelper( - test_data["WeatherVariables"], meteo_range_checks=meteo_range_checks - ) - crop_model_params_provider = ParameterProvider(cropdata=cropd) - external_states = test_data.get("ExternalStates") or [] - - # convert parameters to tensors - crop_model_params_provider.clear_override() - for name in crop_model_params: - # if name is missing in the YAML, skip it - if name in crop_model_params_provider: - value = torch.tensor(crop_model_params_provider[name], dtype=dtype) - crop_model_params_provider.set_override(name, value, check=False) - - # convert external states to tensors - tensor_external_states = [ - {k: v if k == "DAY" else torch.tensor(v, dtype=dtype) for k, v in item.items()} - for item in external_states - ] - return ( - crop_model_params_provider, - weather_data_provider, - agro_management_inputs, - tensor_external_states, - ) - - -def get_test_data(test_data_path): - """Get the test data from the YAML file.""" - with open(test_data_path) as f: - return yaml.safe_load(f) - - -def calculate_numerical_grad(get_model_fn, param_name, param_value, out_name): - """Calculate the numerical gradient of output with respect to a parameter.""" - delta = 1e-6 - - # Parameters like RDRRTB are batched tables, so we need to compute - # the gradient for each table element separately - # So, we flatten the parameter for easier indexing - param_flat = param_value.reshape(-1) - grad_flat = torch.zeros_like(param_flat) - - for i in range(param_flat.numel()): - p_plus = param_flat.clone() - p_plus[i] += delta - p_minus = param_flat.clone() - p_minus[i] -= delta - - p_plus = p_plus.view_as(param_value) - p_minus = p_minus.view_as(param_value) - - model = get_model_fn() - out_plus = model({param_name: p_plus})[out_name] - loss_plus = out_plus.sum() - - model = get_model_fn() - out_minus = model({param_name: p_minus})[out_name] - loss_minus = out_minus.sum() - - grad_flat[i] = (loss_plus - loss_minus) / (2 * delta) - - return grad_flat.view_as(param_value) - - -class Afgen: - """Differentiable AFGEN function, expanded from pcse. - - AFGEN is a linear interpolation function based on a table of XY pairs. - Now supports batched tables (tensor of lists) for vectorized operations. - """ - - def _check_x_ascending(self, tbl_xy): - """Checks that the x values are strictly ascending. - - Also truncates any trailing (0.,0.) pairs as a result of data coming - from a CGMS database. - - Args: - tbl_xy: Table of XY pairs as a tensor or array-like object. - Can be 1D (single table) or ND (vectorized tables). - - Returns: - list or tensor: List of valid indices (for 1D) or tensor of valid counts (for ND). - - Raises: - ValueError: If x values are not strictly ascending. - """ - # Handle batched tables (>1D tensors) - if tbl_xy.dim() > 1: - batch_shape = tbl_xy.shape[:-1] - table_len = tbl_xy.shape[-1] - - # Flatten batch dimensions for processing - flat_tables = tbl_xy.reshape(-1, table_len) - num_tables = flat_tables.shape[0] - - valid_counts = [] - for idx in range(num_tables): - table = flat_tables[idx] - x_list = table[0::2] - y_list = table[1::2] - n = len(x_list) - - # Find trailing (0, 0) pairs to truncate - valid_n = n - for i in range(n - 1, 0, -1): - if x_list[i] == 0 and y_list[i] == 0: - valid_n = i - else: - break - - # Check if x range is strictly ascending - valid_x_list = x_list[:valid_n] - for i in range(1, len(valid_x_list)): - if valid_x_list[i] <= valid_x_list[i - 1]: - msg = ( - "X values for AFGEN input list" - + " not strictly ascending: {x_list.tolist()}" - ) - raise ValueError(msg) - - valid_counts.append(valid_n) - - return torch.tensor(valid_counts).reshape(batch_shape) - - # Original 1D logic from pcse - x_list = tbl_xy[0::2] - y_list = tbl_xy[1::2] - n = len(x_list) - - # Find trailing (0, 0) pairs to truncate - valid_n = n - for i in range(n - 1, 0, -1): - if x_list[i] == 0 and y_list[i] == 0: - valid_n = i - else: - break - - # Check only the valid (non-trailing-zero) portion - valid_x_list = x_list[:valid_n] - - # Check if x range is strictly ascending - for i in range(1, len(valid_x_list)): - if valid_x_list[i] <= valid_x_list[i - 1]: - msg = f"X values for AFGEN input list not strictly ascending: {x_list.tolist()}" - raise ValueError(msg) - - return list(range(valid_n)) - - def __init__(self, tbl_xy): - # Convert to tensor if needed - tbl_xy = torch.as_tensor(tbl_xy) - - # Detect if we have batched tables (>1D) - self.is_batched = tbl_xy.dim() > 1 - - if self.is_batched: - self.batch_shape = tbl_xy.shape[:-1] - table_len = tbl_xy.shape[-1] - - # Store the full batched tables - self.tbl_xy = tbl_xy - - # Get valid counts for each table - valid_counts = self._check_x_ascending(tbl_xy) - self.valid_counts = valid_counts - - # Extract x and y for all tables - flat_tables = tbl_xy.reshape(-1, table_len) - num_tables = flat_tables.shape[0] - - x_list_batch = [] - y_list_batch = [] - slopes_batch = [] - - for idx in range(num_tables): - table = flat_tables[idx] - valid_n = valid_counts.flatten()[idx].item() - - x_indices = torch.tensor([2 * i for i in range(valid_n)]) - y_indices = torch.tensor([2 * i + 1 for i in range(valid_n)]) - - x_vals = table[x_indices] - y_vals = table[y_indices] - - # Calculate slopes - if len(x_vals) > 1: - slopes = (y_vals[1:] - y_vals[:-1]) / (x_vals[1:] - x_vals[:-1]) - else: - slopes = torch.tensor([], dtype=torch.float64) - - x_list_batch.append(x_vals) - y_list_batch.append(y_vals) - slopes_batch.append(slopes) - - # Store as lists - don't reshape, just keep the flat structure - self.x_list_batch = x_list_batch - self.y_list_batch = y_list_batch - self.slopes_batch = slopes_batch - - else: - # Original 1D logic from pcse - self.batch_shape = None - indices = self._check_x_ascending(tbl_xy) - - # Extract x and y values using indices - x_indices = torch.tensor([2 * i for i in indices]) - y_indices = torch.tensor([2 * i + 1 for i in indices]) - self.x_list = tbl_xy[x_indices] - self.y_list = tbl_xy[y_indices] - - # Calculate slopes - x1 = self.x_list[:-1] - x2 = self.x_list[1:] - y1 = self.y_list[:-1] - y2 = self.y_list[1:] - self.slopes = (y2 - y1) / (x2 - x1) - - def __call__(self, x): - """Returns the interpolated value at abscissa x. - - Args: - x (torch.Tensor): The abscissa value at which to interpolate. - Can be scalar or batched to match table dimensions. - - Returns: - torch.Tensor: The interpolated value, preserving batch dimensions. - """ - x = torch.as_tensor(x) - - if self.is_batched: - # Ensure x has compatible shape for broadcasting - # x can be scalar or have batch dimensions - - # Flatten batch dimensions for processing - flat_x = x.reshape(-1) if x.dim() > 0 else x.unsqueeze(0) - num_queries = flat_x.shape[0] if flat_x.dim() > 0 else 1 - - results = [] - - # Process each table - for idx in range(len(self.x_list_batch)): - x_list = self.x_list_batch[idx] - y_list = self.y_list_batch[idx] - slopes = self.slopes_batch[idx] - - # Get the query value (broadcast if needed) - if num_queries == 1: - x_val = flat_x[0] if flat_x.dim() > 0 else flat_x - elif idx < num_queries: - x_val = flat_x[idx] - else: - x_val = flat_x[0] # Broadcast first value - - # Ensure contiguous memory layout for searchsorted - x_list_contig = x_list.contiguous() - x_val_contig = ( - x_val.contiguous() - if isinstance(x_val, torch.Tensor) and x_val.dim() > 0 - else x_val - ) - - # Find interval and interpolate using torch.where for differentiability - i = torch.searchsorted(x_list_contig, x_val_contig, right=False) - 1 - i = torch.clamp(i, 0, len(x_list) - 2) - - # Calculate interpolated value - interp_result = y_list[i] + slopes[i] * (x_val - x_list[i]) - - # Apply boundary conditions using torch.where - result = torch.where( - x_val <= x_list[0], - y_list[0], - torch.where(x_val >= x_list[-1], y_list[-1], interp_result), - ) - - results.append(result) - - # Reshape to original batch shape - output = torch.stack(results).reshape(self.batch_shape) - return output - - # Ensure contiguous memory layout for searchsorted - x_list_contig = self.x_list.contiguous() - x_contig = x.contiguous() if isinstance(x, torch.Tensor) and x.dim() > 0 else x - - # Find interval index using torch.searchsorted for differentiability - i = torch.searchsorted(x_list_contig, x_contig, right=False) - 1 - i = torch.clamp(i, 0, len(self.x_list) - 2) - - # Calculate interpolated value - interp_value = self.y_list[i] + self.slopes[i] * (x - self.x_list[i]) - - # Apply boundary conditions using torch.where - result = torch.where( - x <= self.x_list[0], - self.y_list[0], - torch.where(x >= self.x_list[-1], self.y_list[-1], interp_value), - ) - - return result - - @property - def shape(self): - """Returns the shape of the Afgen table.""" - return self.batch_shape - - -class AfgenTrait(TraitType): - """An AFGEN table trait. - - Attributes: - default_value: Default Afgen instance with identity mapping. - into_text: Description of the trait type. - """ - - default_value = Afgen([0, 0, 1, 1]) - into_text = "An AFGEN table of XY pairs" - - def validate(self, obj, value): - """Validate that the value is an Afgen instance or an iterable to create one. - - Args: - obj: The object instance containing this trait. - value: The value to validate (either an Afgen instance or an iterable). - - Returns: - Afgen: A validated Afgen instance. - - Raises: - TraitError: If the value cannot be validated as an Afgen instance. - """ - if isinstance(value, Afgen): - return value - elif isinstance(value, Iterable): - return Afgen(value) - self.error(obj, value) - - -def _get_params_shape(params): - """Get the parameters shape. - - Parameters can have arbitrary number of dimensions, but all parameters that are not zero- - dimensional should have the same shape. - - This check if fundamental for vectorized operations in the physical models. - """ - shape = () - for parname in params.trait_names(): - # Skip special traitlets attributes - if parname.startswith("trait"): - continue - param = getattr(params, parname) - # Skip Enum and str parameters - if isinstance(param, Enum) or isinstance(param, str): - continue - # Parameters that are not zero dimensional should all have the same shape - if param.shape and not shape: - shape = param.shape - elif param.shape: - assert param.shape == shape, ( - "All parameters should have the same shape (or have no dimensions)" - ) - return shape - - -def _get_drv(drv_var, expected_shape): - """Check that the driving variables have the expected shape and fetch them. - - Driving variables can be scalars (0-dimensional) or match the expected shape. - Scalars will be broadcast during operations. - - [!] This function will be redundant once weathercontainer supports batched variables. - - Args: - drv_var: driving variable in WeatherDataContainer - expected_shape: Expected shape tuple for non-scalar variables - - Raises: - ValueError: If any variable has incompatible shape - - Returns: - torch.Tensor: The validated variable, either as-is or broadcasted to expected shape. - """ - # Check shape: must be scalar (0-d) or match expected_shape - if not isinstance(drv_var, torch.Tensor) or drv_var.dim() == 0: - # Scalar is valid, will be broadcast - return _broadcast_to(drv_var, expected_shape) - elif drv_var.shape == expected_shape: - # Matches expected shape - return drv_var - else: - raise ValueError( - f"Requested weather variable has incompatible shape {drv_var.shape}. " - f"Expected scalar (0-dimensional) or shape {expected_shape}." - ) - - -def _broadcast_to(x, shape, dtype=None, device=None): - """Create a view of tensor X with the given shape. - - Args: - x: The tensor or value to broadcast - shape: The target shape - dtype: Optional dtype for the tensor (inferred from x if not provided) - device: Optional device for the tensor (inferred from x if not provided) - """ - # If x is not a tensor, convert it - if not isinstance(x, torch.Tensor): - x = torch.tensor(x) - # Ensure correct dtype and device - if dtype is not None: - x = x.to(dtype=dtype) - if device is not None: - x = x.to(device=device) - # If already the correct shape, return as-is - if x.shape == shape: - return x - if x.dim() == 0: - # For 0-d tensors, we simply broadcast to the given shape - return torch.broadcast_to(x, shape) - # The given shape should match x in all but the last axis, which represents - # the dimension along which the time integration is carried out. - # We first append an axis to x, then expand to the given shape - return x.unsqueeze(-1).expand(shape) - - -def _snapshot_state(obj): - return {name: val.clone() for name, val in obj.__dict__.items() if torch.is_tensor(val)} - - -def _restore_state(obj, snapshot): - for name, val in snapshot.items(): - setattr(obj, name, val) diff --git a/old_leaf.py b/old_leaf.py deleted file mode 100644 index 4363670..0000000 --- a/old_leaf.py +++ /dev/null @@ -1,436 +0,0 @@ -"""Leaf dynamics for the WOFOST crop model.""" - -import datetime -import torch -from pcse.base import ParamTemplate -from pcse.base import RatesTemplate -from pcse.base import SimulationObject -from pcse.base import StatesTemplate -from pcse.base.parameter_providers import ParameterProvider -from pcse.base.variablekiosk import VariableKiosk -from pcse.base.weather import WeatherDataContainer -from pcse.decorators import prepare_rates -from pcse.decorators import prepare_states -from pcse.traitlets import Any -from diffwofost.physical_models.utils import AfgenTrait -from diffwofost.physical_models.utils import _broadcast_to -from diffwofost.physical_models.utils import _get_drv -from diffwofost.physical_models.utils import _get_params_shape - -DTYPE = torch.float64 # Default data type for tensors in this module - - -class WOFOST_Leaf_Dynamics(SimulationObject): - """Leaf dynamics for the WOFOST crop model. - - Implementation of biomass partitioning to leaves, growth and senenscence - of leaves. WOFOST keeps track of the biomass that has been partitioned to - the leaves for each day (variable `LV`), which is called a leaf class). - For each leaf class the leaf age (variable 'LVAGE') and specific leaf area - (variable `SLA`) are also registered. Total living leaf biomass is - calculated by summing the biomass values for all leaf classes. Similarly, - leaf area is calculated by summing leaf biomass times specific leaf area - (`LV` * `SLA`). - - Senescense of the leaves can occur as a result of physiological age, - drought stress or self-shading. - - **Simulation parameters** (provide in cropdata dictionary) - - | Name | Description | Type | Unit | - |--------|------------------------------------------------------------------ |------|------------| - | RGRLAI | Maximum relative increase in LAI. |SCr | ha ha⁻¹ d⁻¹| - | SPAN | Life span of leaves growing at 35 Celsius |SCr | d | - | TBASE | Lower threshold temp. for ageing of leaves |SCr | C | - | PERDL | Max. relative death rate of leaves due to water stress |SCr | | - | TDWI | Initial total crop dry weight |SCr | kg ha⁻¹ | - | KDIFTB | Extinction coefficient for diffuse visible light as function of DVS|TCr | | - | SLATB | Specific leaf area as a function of DVS |TCr | ha kg⁻¹ | - - **State variables** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|-------------| - | LV | Leaf biomass per leaf class | N | kg ha⁻¹ | - | SLA | Specific leaf area per leaf class | N | ha kg⁻¹ | - | LVAGE | Leaf age per leaf class | N | d | - | LVSUM | Sum of LV | N | kg ha⁻¹ | - | LAIEM | LAI at emergence | N | - | - | LASUM | Total leaf area as sum of LV*SLA, not including stem and pod area | N | - | - | LAIEXP | LAI value under theoretical exponential growth | N | - | - | LAIMAX | Maximum LAI reached during growth cycle | N | - | - | LAI | Leaf area index, including stem and pod area | Y | - | - | WLV | Dry weight of living leaves | Y | kg ha⁻¹ | - | DWLV | Dry weight of dead leaves | N | kg ha⁻¹ | - | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | - - **Rate variables** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|---------------| - | GRLV | Growth rate leaves | N | kg ha⁻¹ d⁻¹ | - | DSLV1 | Death rate leaves due to water stress | N | kg ha⁻¹ d⁻¹ | - | DSLV2 | Death rate leaves due to self-shading | N | kg ha⁻¹ d⁻¹ | - | DSLV3 | Death rate leaves due to frost kill | N | kg ha⁻¹ d⁻¹ | - | DSLV | Maximum of DSLV1, DSLV2, DSLV3 | N | kg ha⁻¹ d⁻¹ | - | DALV | Death rate leaves due to aging | N | kg ha⁻¹ d⁻¹ | - | DRLV | Death rate leaves as a combination of DSLV and DALV | N | kg ha⁻¹ d⁻¹ | - | SLAT | Specific leaf area for current time step, adjusted for source/sink limited leaf expansion rate | N | ha kg⁻¹ | - | FYSAGE | Increase in physiological leaf age | N | - | - | GLAIEX | Sink-limited leaf expansion rate (exponential curve) | N | ha ha⁻¹ d⁻¹ | - | GLASOL | Source-limited leaf expansion rate (biomass increase) | N | ha ha⁻¹ d⁻¹ | - - **External dependencies** - - | Name | Description | Provided by | Unit | - |-----------|-----------------------------------|--------------------------------|----------------| - | DVS | Crop development stage | DVS_Phenology | - | - | FL | Fraction biomass to leaves | DVS_Partitioning | - | - | FR | Fraction biomass to roots | DVS_Partitioning | - | - | SAI | Stem area index | WOFOST_Stem_Dynamics | - | - | PAI | Pod area index | WOFOST_Storage_Organ_Dynamics | - | - | TRA | Transpiration rate | Evapotranspiration | cm day⁻¹ ? | - | TRAMX | Maximum transpiration rate | Evapotranspiration | cm day⁻¹ ? | - | ADMI | Above-ground dry matter increase | CropSimulation | kg ha⁻¹ d⁻¹ | - | RFTRA | Reduction factor for transpiration (water & oxygen) | Y | - | - | RF_FROST | Reduction factor frost kill | FROSTOL (optional) | - | - - **Outputs** - - | Name | Description | Pbl | Unit | - |--------|-------------------------------------------------------|------|-------------| - | LAI | Leaf area index, including stem and pod area | Y | - | - | TWLV | Dry weight of total leaves (living + dead) | Y | kg ha⁻¹ | - - **Gradient mapping (which parameters have a gradient):** - - | Output | Parameters influencing it | - |--------|------------------------------------------| - | LAI | TDWI, SPAN, RGRLAI, TBASE, KDIFTB, SLATB | - | TWLV | TDWI, PERDL | - - [!NOTE] - Notice that the following gradients are zero: - - ∂SPAN/∂LAI - - ∂PERDL/∂TWLV - - ∂KDIFTB/∂LAI - """ # noqa: E501 - - # The following parameters are used to initialize and control the arrays that store information - # on the leaf classes during the time integration: leaf area, age, and biomass. - START_DATE = None # Start date of the simulation - MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) - params_shape = None # Shape of the parameters tensors - - class Parameters(ParamTemplate): - RGRLAI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SPAN = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TBASE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - PERDL = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - TDWI = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SLATB = AfgenTrait() - KDIFTB = AfgenTrait() - - class StateVariables(StatesTemplate): - LV = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - SLA = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - LVAGE = Any(default_value=[torch.tensor(-99.0, dtype=DTYPE)]) - LAIEM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LASUM = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAIEXP = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAIMAX = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - LAI = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - WLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - DWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - TWLV = Any(default_value=torch.tensor(-99.0, dtype=DTYPE)) - - class RateVariables(RatesTemplate): - GRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV1 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV2 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV3 = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DSLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DALV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - DRLV = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - SLAT = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - FYSAGE = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GLAIEX = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - GLASOL = Any(default_value=torch.tensor(0.0, dtype=DTYPE)) - - def initialize( - self, day: datetime.date, kiosk: VariableKiosk, parvalues: ParameterProvider - ) -> None: - """Initialize the WOFOST_Leaf_Dynamics simulation object. - - Args: - day (datetime.date): The starting date of the simulation. - kiosk (VariableKiosk): A container for registering and publishing - (internal and external) state variables. See PCSE documentation for - details. - parvalues (ParameterProvider): A dictionary-like container holding - all parameter sets (crop, soil, site) as key/value. The values are - arrays or scalars. See PCSE documentation for details. - """ - self.START_DATE = day - self.kiosk = kiosk - # TODO check if parvalues are already torch.nn.Parameters - self.params = self.Parameters(parvalues) - self.rates = self.RateVariables(kiosk) - - # CALCULATE INITIAL STATE VARIABLES - # check for required external variables - _exist_required_external_variables(self.kiosk) - # TODO check if external variables are already torch tensors - - FL = self.kiosk["FL"] - FR = self.kiosk["FR"] - DVS = self.kiosk["DVS"] - - params = self.params - self.params_shape = _get_params_shape(params) - - # Initial leaf biomass - WLV = (params.TDWI * (1 - FR)) * FL - DWLV = torch.zeros(self.params_shape, dtype=DTYPE) - TWLV = WLV + DWLV - - # Initialize leaf classes (SLA, age and weight) - SLA = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - LVAGE = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - LV = torch.zeros((*self.params_shape, self.MAX_DAYS), dtype=DTYPE) - SLA[..., 0] = params.SLATB(DVS) - LV[..., 0] = WLV - - # Initial values for leaf area - LAIEM = LV[..., 0] * SLA[..., 0] - LASUM = LAIEM - LAIEXP = LAIEM - LAIMAX = LAIEM - LAI = LASUM + self.kiosk["SAI"] + self.kiosk["PAI"] - - # Initialize StateVariables object - self.states = self.StateVariables( - kiosk, - publish=["LAI", "TWLV", "WLV"], - LV=LV, - SLA=SLA, - LVAGE=LVAGE, - LAIEM=LAIEM, - LASUM=LASUM, - LAIEXP=LAIEXP, - LAIMAX=LAIMAX, - LAI=LAI, - WLV=WLV, - DWLV=DWLV, - TWLV=TWLV, - ) - - def _calc_LAI(self): - # Total leaf area Index as sum of leaf, pod and stem area - SAI = self.kiosk["SAI"] - PAI = self.kiosk["PAI"] - total_LAI = self.states.LASUM + SAI + PAI - return total_LAI - - @prepare_rates - def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: - """Calculate the rates of change for the leaf dynamics. - - Args: - day (datetime.date, optional): The current date of the simulation. - drv (WeatherDataContainer, optional): A dictionary-like container holding - weather data elements as key/value. The values are - arrays or scalars. See PCSE documentation for details. - """ - r = self.rates - s = self.states - p = self.params - k = self.kiosk - - # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask - # A mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=DTYPE) - dvs_mask = (DVS >= 0).to(dtype=DTYPE) - - # Growth rate leaves - # weight of new leaves - r.GRLV = dvs_mask * k.ADMI * k.FL - - # death of leaves due to water/oxygen stress - r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL - - # death due to self shading cause by high LAI - DVS = self.kiosk["DVS"] - LAICR = 3.2 / p.KDIFTB(DVS) - r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) - - # Death of leaves due to frost damage as determined by - # Reduction Factor Frost "RF_FROST" - if "RF_FROST" in self.kiosk: - r.DSLV3 = s.WLV * k.RF_FROST - else: - r.DSLV3 = torch.zeros_like(s.WLV, dtype=DTYPE) - - r.DSLV3 = dvs_mask * r.DSLV3 - - # leaf death equals maximum of water stress, shading and frost - r.DSLV = torch.maximum(torch.maximum(r.DSLV1, r.DSLV2), r.DSLV3) - r.DSLV = dvs_mask * r.DSLV - - # Determine how much leaf biomass classes have to die in states.LV, - # given the a life span > SPAN, these classes will be accumulated - # in DALV. - # Note that the actual leaf death is imposed on the array LV during the - # state integration step. - tSPAN = _broadcast_to(p.SPAN, s.LVAGE.shape) # Broadcast to same shape - - # Using a sigmoid here instead of a conditional statement on the value of - # SPAN because the latter would not allow for the gradient to be tracked. - # the if statement `p.SPAN.requires_grad` to avoid unnecessary - # approximation when SPAN is not a learnable parameter. - # TODO: sharpness can be exposed as a parameter - if p.SPAN.requires_grad: - # 1e-16 is chosen empirically for cases when s.LVAGE - tSPAN is very - # small and mask should be 1 - sharpness = torch.tensor(1e-16, dtype=DTYPE) - - # 1e-14 is chosen empirically for cases when s.LVAGE - tSPAN is - # equal to zero and mask should be 0.0 - epsilon = 1e-14 - span_mask = torch.sigmoid((s.LVAGE - tSPAN - epsilon) / sharpness).to(dtype=DTYPE) - else: - span_mask = (s.LVAGE > tSPAN).to(dtype=DTYPE) - - r.DALV = torch.sum(span_mask * s.LV, dim=-1) - r.DALV = dvs_mask * r.DALV - - # Total death rate leaves - r.DRLV = torch.maximum(r.DSLV, r.DALV) - - # Get the temperature from the drv - TEMP = _get_drv(drv.TEMP, self.params_shape) - - # physiologic ageing of leaves per time step - TBASE = _broadcast_to(p.TBASE, self.params_shape) - FYSAGE = (TEMP - TBASE) / (35.0 - TBASE) - r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) - - # specific leaf area of leaves per time step - r.SLAT = dvs_mask * p.SLATB(DVS) - - # leaf area not to exceed exponential growth curve - is_lai_exp = s.LAIEXP < 6.0 - DTEFF = torch.clamp(TEMP - TBASE, 0.0) - - # NOTE: conditional statements do not allow for the gradient to be - # tracked through the condition. Thus, the gradient with respect to - # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) - # are expected to be incorrect. - r.GLAIEX = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), - torch.tensor(0.0, dtype=DTYPE), - ) - - # source-limited increase in leaf area - r.GLASOL = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp, r.GRLV * r.SLAT, r.GLASOL), - torch.tensor(0.0, dtype=DTYPE), - ) - - # sink-limited increase in leaf area - GLA = torch.minimum(r.GLAIEX, r.GLASOL) - - # adjustment of specific leaf area of youngest leaf class - epsilon = 1e-10 # small value to avoid division by zero - r.SLAT = torch.where( - dvs_mask.bool(), - torch.where(is_lai_exp & (r.GRLV > epsilon), GLA / (r.GRLV + epsilon), r.SLAT), - torch.tensor(0.0, dtype=DTYPE), - ) - - @prepare_states - def integrate(self, day: datetime.date, delt=1.0) -> None: - """Integrate the leaf dynamics state variables. - - Args: - day (datetime.date, optional): The current date of the simulation. - delt (float, optional): The time step for integration. Defaults to 1.0. - """ - # TODO check if DVS < 0 and skip integration needed - rates = self.rates - states = self.states - - # --------- leave death --------- - tLV = states.LV.clone() - tSLA = states.SLA.clone() - tLVAGE = states.LVAGE.clone() - tDRLV = _broadcast_to(rates.DRLV, tLV.shape) - - # Leaf death is imposed on leaves from the oldest ones. - # Calculate the cumulative sum of weights after leaf death, and - # find out which leaf classes are dead (negative weights) - weight_cumsum = tLV.cumsum(dim=-1) - tDRLV - is_alive = weight_cumsum >= 0 - - # Adjust value of oldest leaf class, i.e. the first non-zero - # weight along the time axis (the last dimension). - # Cast argument to int because torch.argmax requires it to be numeric - idx_oldest = torch.argmax(is_alive.type(torch.int), dim=-1, keepdim=True) - new_biomass = torch.take_along_dim(weight_cumsum, indices=idx_oldest, dim=-1) - tLV = torch.scatter(tLV, dim=-1, index=idx_oldest, src=new_biomass) - - # Integration of physiological age - # Zero out all dead leaf classes - # NOTE: conditional statements do not allow for the gradient to be - # tracked through the condition. Thus, the gradient with respect to - # parameters that contribute to `is_alive` are expected to be incorrect. - tLV = torch.where(is_alive, tLV, 0.0) - tLVAGE = tLVAGE + rates.FYSAGE.unsqueeze(-1) - tLVAGE = torch.where(is_alive, tLVAGE, 0.0) - tSLA = torch.where(is_alive, tSLA, 0.0) - - # --------- leave growth --------- - idx = int((day - self.START_DATE).days / delt) - tLV[..., idx] = rates.GRLV - tSLA[..., idx] = rates.SLAT - tLVAGE[..., idx] = 0.0 - - # calculation of new leaf area - states.LASUM = torch.sum(tLV * tSLA, dim=-1) - states.LAI = self._calc_LAI() - states.LAIMAX = torch.maximum(states.LAI, states.LAIMAX) - - # exponential growth curve - states.LAIEXP = states.LAIEXP + rates.GLAIEX - - # Update leaf biomass states - states.WLV = torch.sum(tLV, dim=-1) - states.DWLV = states.DWLV + rates.DRLV - states.TWLV = states.WLV + states.DWLV - - # Store final leaf biomass deques - self.states.LV = tLV - self.states.SLA = tSLA - self.states.LVAGE = tLVAGE - - -def _exist_required_external_variables(kiosk): - """Check if all required external variables are available in the kiosk. - - Args: - kiosk (VariableKiosk): The variable kiosk to check. - - Raises: - ValueError: If any required external variable is missing. - - """ - required_external_vars_at_init = ["DVS", "FL", "FR", "SAI", "PAI"] - for var in required_external_vars_at_init: - if var not in kiosk: - raise ValueError( - f"Required external variables '{var}' is missing in the kiosk." - f" Ensure that all required variables {required_external_vars_at_init}" - " are provided." - ) diff --git a/old_utils.py b/old_utils.py deleted file mode 100644 index 5195526..0000000 --- a/old_utils.py +++ /dev/null @@ -1,648 +0,0 @@ -"""This file contains code that is required to run the YAML unit tests. - -It contains: - - VariableKioskTestHelper: A subclass of the VariableKiosk that can use externally - forced states/rates - - ConfigurationLoaderTestHelper: An subclass of ConfigurationLoader that allows to - specify the simbojects to be test dynamically - - EngineTestHelper: engine specifically for running the YAML tests. - - WeatherDataProviderTestHelper: a weatherdata provides that takes the weather - inputs from the YAML file. - -Note that the code here is *not* python2 compatible. -""" - -import logging -import os -from collections.abc import Iterable -import torch -import yaml -from pcse import signals -from pcse.agromanager import AgroManager -from pcse.base import ConfigurationLoader -from pcse.base.parameter_providers import ParameterProvider -from pcse.base.variablekiosk import VariableKiosk -from pcse.base.weather import WeatherDataContainer -from pcse.base.weather import WeatherDataProvider -from pcse.engine import BaseEngine -from pcse.engine import Engine -from pcse.settings import settings -from pcse.timer import Timer -from pcse.traitlets import Enum -from pcse.traitlets import TraitType - -DTYPE = torch.float64 # Default data type for tensors in this module - -logging.disable(logging.CRITICAL) - -this_dir = os.path.dirname(__file__) - - -def nothing(*args, **kwargs): - """A function that does nothing.""" - pass - - -class VariableKioskTestHelper(VariableKiosk): - """Variable Kiosk for testing purposes which allows to use external states.""" - - external_state_list = None - - def __init__(self, external_state_list): - super().__init__() - self.current_externals = {} - if external_state_list: - self.external_state_list = external_state_list - - def __call__(self, day): - """Sets the external state/rate variables for the current day. - - Returns True if the list of external state/rate variables is exhausted, - otherwise False. - """ - if self.external_state_list: - current_externals = self.external_state_list.pop(0) - forcing_day = current_externals.pop("DAY") - msg = "Failure updating VariableKiosk with external states: days are not matching!" - assert forcing_day == day, msg - self.current_externals.clear() - self.current_externals.update(current_externals) - if len(self.external_state_list) == 0: - return True - - return False - - def is_external_state(self, item): - """Returns True if the item is an external state.""" - return item in self.current_externals - - def __getattr__(self, item): - """Allow use of attribute notation. - - eg "kiosk.LAI" on published rates or states. - """ - if item in self.current_externals: - return self.current_externals[item] - else: - return dict.__getitem__(self, item) - - def __getitem__(self, item): - """Override __getitem__ to first look in external states.""" - if item in self.current_externals: - return self.current_externals[item] - else: - return dict.__getitem__(self, item) - - def __contains__(self, key): - """Override __contains__ to first look in external states.""" - return key in self.current_externals or dict.__contains__(self, key) - - -class ConfigurationLoaderTestHelper(ConfigurationLoader): - def __init__(self, YAML_test_inputs, simobject, waterbalance=None): - self.model_config_file = "Test config" - self.description = "Configuration loader for running YAML tests" - self.CROP = simobject - self.SOIL = waterbalance - self.AGROMANAGEMENT = AgroManager - self.OUTPUT_INTERVAL = "daily" - self.OUTPUT_INTERVAL_DAYS = 1 - self.OUTPUT_WEEKDAY = 0 - self.OUTPUT_VARS = list(YAML_test_inputs["Precision"].keys()) - self.SUMMARY_OUTPUT_VARS = [] - self.TERMINAL_OUTPUT_VARS = [] - - -class EngineTestHelper(Engine): - """An engine which is purely for running the YAML unit tests.""" - - def __init__( - self, - parameterprovider, - weatherdataprovider, - agromanagement, - test_config, - external_states=None, - ): - BaseEngine.__init__(self) - - # Load the model configuration - self.mconf = ConfigurationLoader(test_config) - self.parameterprovider = parameterprovider - - # Variable kiosk for registering and publishing variables - self.kiosk = VariableKioskTestHelper(external_states) - - # Placeholder for variables to be saved during a model run - self._saved_output = list() - self._saved_summary_output = list() - self._saved_terminal_output = dict() - - # register handlers for starting/finishing the crop simulation, for - # handling output and terminating the system - self._connect_signal(self._on_CROP_START, signal=signals.crop_start) - self._connect_signal(self._on_CROP_FINISH, signal=signals.crop_finish) - self._connect_signal(self._on_OUTPUT, signal=signals.output) - self._connect_signal(self._on_TERMINATE, signal=signals.terminate) - - # Component for agromanagement - self.agromanager = self.mconf.AGROMANAGEMENT(self.kiosk, agromanagement) - start_date = self.agromanager.start_date - end_date = self.agromanager.end_date - - # Timer: starting day, final day and model output - self.timer = Timer(self.kiosk, start_date, end_date, self.mconf) - self.day, delt = self.timer() - # Update external states in the kiosk - self.kiosk(self.day) - - # Driving variables - self.weatherdataprovider = weatherdataprovider - self.drv = self._get_driving_variables(self.day) - - # Component for simulation of soil processes - if self.mconf.SOIL is not None: - self.soil = self.mconf.SOIL(self.day, self.kiosk, parameterprovider) - - # Call AgroManagement module for management actions at initialization - self.agromanager(self.day, self.drv) - - # Calculate initial rates - self.calc_rates(self.day, self.drv) - - def _run(self): - """Make one time step of the simulation.""" - # Update timer - self.day, delt = self.timer() - - # When the list of external states is exhausted the VariableKioskTestHelper will - # return True signalling the end of the test - stop_test = self.kiosk(self.day) - if stop_test: - self._send_signal( - signal=signals.crop_finish, day=self.day, finish_type="maturity", crop_delete=False - ) - - # State integration and update to forced variables - self.integrate(self.day, delt) - - # Driving variables - self.drv = self._get_driving_variables(self.day) - - # Agromanagement decisions - self.agromanager(self.day, self.drv) - - # Rate calculation - self.calc_rates(self.day, self.drv) - - if self.flag_terminate is True: - self._terminate_simulation(self.day) - - -class WeatherDataProviderTestHelper(WeatherDataProvider): - """It stores the weatherdata contained within the YAML tests.""" - - def __init__(self, yaml_weather, meteo_range_checks=True): - super().__init__() - # This is a temporary workaround. The `METEO_RANGE_CHECKS` logic in - # `__setattr__` method in `WeatherDataContainer` is not vector compatible - # yet. So we can disable it here when creating the `WeatherDataContainer` - # instances with arrays. - settings.METEO_RANGE_CHECKS = meteo_range_checks - for weather in yaml_weather: - if "SNOWDEPTH" in weather: - weather.pop("SNOWDEPTH") - wdc = WeatherDataContainer(**weather) - self._store_WeatherDataContainer(wdc, wdc.DAY) - - -def prepare_engine_input( - test_data, crop_model_params, meteo_range_checks=True, dtype=torch.float64 -): - """Prepare the inputs for the engine from the YAML file.""" - agro_management_inputs = test_data["AgroManagement"] - cropd = test_data["ModelParameters"] - - weather_data_provider = WeatherDataProviderTestHelper( - test_data["WeatherVariables"], meteo_range_checks=meteo_range_checks - ) - crop_model_params_provider = ParameterProvider(cropdata=cropd) - external_states = test_data.get("ExternalStates") or [] - - # convert parameters to tensors - crop_model_params_provider.clear_override() - for name in crop_model_params: - # if name is missing in the YAML, skip it - if name in crop_model_params_provider: - value = torch.tensor(crop_model_params_provider[name], dtype=dtype) - crop_model_params_provider.set_override(name, value, check=False) - - # convert external states to tensors - tensor_external_states = [ - {k: v if k == "DAY" else torch.tensor(v, dtype=dtype) for k, v in item.items()} - for item in external_states - ] - return ( - crop_model_params_provider, - weather_data_provider, - agro_management_inputs, - tensor_external_states, - ) - - -def get_test_data(test_data_path): - """Get the test data from the YAML file.""" - with open(test_data_path) as f: - return yaml.safe_load(f) - - -def calculate_numerical_grad(get_model_fn, param_name, param_value, out_name): - """Calculate the numerical gradient of output with respect to a parameter.""" - delta = 1e-6 - - # Parameters like RDRRTB are batched tables, so we need to compute - # the gradient for each table element separately - # So, we flatten the parameter for easier indexing - param_flat = param_value.reshape(-1) - grad_flat = torch.zeros_like(param_flat) - - for i in range(param_flat.numel()): - p_plus = param_flat.clone() - p_plus[i] += delta - p_minus = param_flat.clone() - p_minus[i] -= delta - - p_plus = p_plus.view_as(param_value) - p_minus = p_minus.view_as(param_value) - - model = get_model_fn() - out_plus = model({param_name: p_plus})[out_name] - loss_plus = out_plus.sum() - - model = get_model_fn() - out_minus = model({param_name: p_minus})[out_name] - loss_minus = out_minus.sum() - - grad_flat[i] = (loss_plus - loss_minus) / (2 * delta) - - return grad_flat.view_as(param_value) - - -class Afgen: - """Differentiable AFGEN function, expanded from pcse. - - AFGEN is a linear interpolation function based on a table of XY pairs. - Now supports batched tables (tensor of lists) for vectorized operations. - """ - - def _check_x_ascending(self, tbl_xy): - """Checks that the x values are strictly ascending. - - Also truncates any trailing (0.,0.) pairs as a result of data coming - from a CGMS database. - - Args: - tbl_xy: Table of XY pairs as a tensor or array-like object. - Can be 1D (single table) or ND (vectorized tables). - - Returns: - list or tensor: List of valid indices (for 1D) or tensor of valid counts (for ND). - - Raises: - ValueError: If x values are not strictly ascending. - """ - # Handle batched tables (>1D tensors) - if tbl_xy.dim() > 1: - batch_shape = tbl_xy.shape[:-1] - table_len = tbl_xy.shape[-1] - - # Flatten batch dimensions for processing - flat_tables = tbl_xy.reshape(-1, table_len) - num_tables = flat_tables.shape[0] - - valid_counts = [] - for idx in range(num_tables): - table = flat_tables[idx] - x_list = table[0::2] - y_list = table[1::2] - n = len(x_list) - - # Find trailing (0, 0) pairs to truncate - valid_n = n - for i in range(n - 1, 0, -1): - if x_list[i] == 0 and y_list[i] == 0: - valid_n = i - else: - break - - # Check if x range is strictly ascending - valid_x_list = x_list[:valid_n] - for i in range(1, len(valid_x_list)): - if valid_x_list[i] <= valid_x_list[i - 1]: - msg = ( - "X values for AFGEN input list" - + " not strictly ascending: {x_list.tolist()}" - ) - raise ValueError(msg) - - valid_counts.append(valid_n) - - return torch.tensor(valid_counts).reshape(batch_shape) - - # Original 1D logic from pcse - x_list = tbl_xy[0::2] - y_list = tbl_xy[1::2] - n = len(x_list) - - # Find trailing (0, 0) pairs to truncate - valid_n = n - for i in range(n - 1, 0, -1): - if x_list[i] == 0 and y_list[i] == 0: - valid_n = i - else: - break - - # Check only the valid (non-trailing-zero) portion - valid_x_list = x_list[:valid_n] - - # Check if x range is strictly ascending - for i in range(1, len(valid_x_list)): - if valid_x_list[i] <= valid_x_list[i - 1]: - msg = f"X values for AFGEN input list not strictly ascending: {x_list.tolist()}" - raise ValueError(msg) - - return list(range(valid_n)) - - def __init__(self, tbl_xy): - # Convert to tensor if needed - tbl_xy = torch.as_tensor(tbl_xy, dtype=DTYPE) - - # Detect if we have batched tables (>1D) - self.is_batched = tbl_xy.dim() > 1 - - if self.is_batched: - self.batch_shape = tbl_xy.shape[:-1] - table_len = tbl_xy.shape[-1] - - # Store the full batched tables - self.tbl_xy = tbl_xy - - # Get valid counts for each table - valid_counts = self._check_x_ascending(tbl_xy) - self.valid_counts = valid_counts - - # Extract x and y for all tables - flat_tables = tbl_xy.reshape(-1, table_len) - num_tables = flat_tables.shape[0] - - x_list_batch = [] - y_list_batch = [] - slopes_batch = [] - - for idx in range(num_tables): - table = flat_tables[idx] - valid_n = valid_counts.flatten()[idx].item() - - x_indices = torch.tensor([2 * i for i in range(valid_n)]) - y_indices = torch.tensor([2 * i + 1 for i in range(valid_n)]) - - x_vals = table[x_indices] - y_vals = table[y_indices] - - # Calculate slopes - if len(x_vals) > 1: - slopes = (y_vals[1:] - y_vals[:-1]) / (x_vals[1:] - x_vals[:-1]) - else: - slopes = torch.tensor([], dtype=DTYPE) - - x_list_batch.append(x_vals) - y_list_batch.append(y_vals) - slopes_batch.append(slopes) - - # Store as lists - don't reshape, just keep the flat structure - self.x_list_batch = x_list_batch - self.y_list_batch = y_list_batch - self.slopes_batch = slopes_batch - - else: - # Original 1D logic from pcse - self.batch_shape = None - indices = self._check_x_ascending(tbl_xy) - - # Extract x and y values using indices - x_indices = torch.tensor([2 * i for i in indices]) - y_indices = torch.tensor([2 * i + 1 for i in indices]) - self.x_list = tbl_xy[x_indices] - self.y_list = tbl_xy[y_indices] - - # Calculate slopes - x1 = self.x_list[:-1] - x2 = self.x_list[1:] - y1 = self.y_list[:-1] - y2 = self.y_list[1:] - self.slopes = (y2 - y1) / (x2 - x1) - - def __call__(self, x): - """Returns the interpolated value at abscissa x. - - Args: - x (torch.Tensor): The abscissa value at which to interpolate. - Can be scalar or batched to match table dimensions. - - Returns: - torch.Tensor: The interpolated value, preserving batch dimensions. - """ - x = torch.as_tensor(x, dtype=DTYPE) - - if self.is_batched: - # Ensure x has compatible shape for broadcasting - # x can be scalar or have batch dimensions - - # Flatten batch dimensions for processing - flat_x = x.reshape(-1) if x.dim() > 0 else x.unsqueeze(0) - num_queries = flat_x.shape[0] if flat_x.dim() > 0 else 1 - - results = [] - - # Process each table - for idx in range(len(self.x_list_batch)): - x_list = self.x_list_batch[idx] - y_list = self.y_list_batch[idx] - slopes = self.slopes_batch[idx] - - # Get the query value (broadcast if needed) - if num_queries == 1: - x_val = flat_x[0] if flat_x.dim() > 0 else flat_x - elif idx < num_queries: - x_val = flat_x[idx] - else: - x_val = flat_x[0] # Broadcast first value - - # Ensure contiguous memory layout for searchsorted - x_list_contig = x_list.contiguous() - x_val_contig = ( - x_val.contiguous() - if isinstance(x_val, torch.Tensor) and x_val.dim() > 0 - else x_val - ) - - # Find interval and interpolate using torch.where for differentiability - i = torch.searchsorted(x_list_contig, x_val_contig, right=False) - 1 - i = torch.clamp(i, 0, len(x_list) - 2) - - # Calculate interpolated value - interp_result = y_list[i] + slopes[i] * (x_val - x_list[i]) - - # Apply boundary conditions using torch.where - result = torch.where( - x_val <= x_list[0], - y_list[0], - torch.where(x_val >= x_list[-1], y_list[-1], interp_result), - ) - - results.append(result) - - # Reshape to original batch shape - output = torch.stack(results).reshape(self.batch_shape) - return output - - # Ensure contiguous memory layout for searchsorted - x_list_contig = self.x_list.contiguous() - x_contig = x.contiguous() if isinstance(x, torch.Tensor) and x.dim() > 0 else x - - # Find interval index using torch.searchsorted for differentiability - i = torch.searchsorted(x_list_contig, x_contig, right=False) - 1 - i = torch.clamp(i, 0, len(self.x_list) - 2) - - # Calculate interpolated value - interp_value = self.y_list[i] + self.slopes[i] * (x - self.x_list[i]) - - # Apply boundary conditions using torch.where - result = torch.where( - x <= self.x_list[0], - self.y_list[0], - torch.where(x >= self.x_list[-1], self.y_list[-1], interp_value), - ) - - return result - - @property - def shape(self): - """Returns the shape of the Afgen table.""" - return self.batch_shape - - -class AfgenTrait(TraitType): - """An AFGEN table trait. - - Attributes: - default_value: Default Afgen instance with identity mapping. - into_text: Description of the trait type. - """ - - default_value = Afgen([0, 0, 1, 1]) - into_text = "An AFGEN table of XY pairs" - - def validate(self, obj, value): - """Validate that the value is an Afgen instance or an iterable to create one. - - Args: - obj: The object instance containing this trait. - value: The value to validate (either an Afgen instance or an iterable). - - Returns: - Afgen: A validated Afgen instance. - - Raises: - TraitError: If the value cannot be validated as an Afgen instance. - """ - if isinstance(value, Afgen): - return value - elif isinstance(value, Iterable): - return Afgen(value) - self.error(obj, value) - - -def _get_params_shape(params): - """Get the parameters shape. - - Parameters can have arbitrary number of dimensions, but all parameters that are not zero- - dimensional should have the same shape. - - This check if fundamental for vectorized operations in the physical models. - """ - shape = () - for parname in params.trait_names(): - # Skip special traitlets attributes - if parname.startswith("trait"): - continue - param = getattr(params, parname) - # Skip Enum and str parameters - if isinstance(param, Enum) or isinstance(param, str): - continue - # Parameters that are not zero dimensional should all have the same shape - if param.shape and not shape: - shape = param.shape - elif param.shape: - assert param.shape == shape, ( - "All parameters should have the same shape (or have no dimensions)" - ) - return shape - - -def _get_drv(drv_var, expected_shape): - """Check that the driving variables have the expected shape and fetch them. - - Driving variables can be scalars (0-dimensional) or match the expected shape. - Scalars will be broadcast during operations. - - [!] This function will be redundant once weathercontainer supports batched variables. - - Args: - drv_var: driving variable in WeatherDataContainer - expected_shape: Expected shape tuple for non-scalar variables - - Raises: - ValueError: If any variable has incompatible shape - - Returns: - torch.Tensor: The validated variable, either as-is or broadcasted to expected shape. - """ - # Check shape: must be scalar (0-d) or match expected_shape - if not isinstance(drv_var, torch.Tensor) or drv_var.dim() == 0: - # Scalar is valid, will be broadcast - return _broadcast_to(drv_var, expected_shape) - elif drv_var.shape == expected_shape: - # Matches expected shape - return drv_var - else: - raise ValueError( - f"Requested weather variable has incompatible shape {drv_var.shape}. " - f"Expected scalar (0-dimensional) or shape {expected_shape}." - ) - - -def _broadcast_to(x, shape): - """Create a view of tensor X with the given shape.""" - # If x is not a tensor, convert it - if not isinstance(x, torch.Tensor): - x = torch.tensor(x, dtype=DTYPE) - # If already the correct shape, return as-is - if x.shape == shape: - return x - if x.dim() == 0: - # For 0-d tensors, we simply broadcast to the given shape - return torch.broadcast_to(x, shape) - # The given shape should match x in all but the last axis, which represents - # the dimension along which the time integration is carried out. - # We first append an axis to x, then expand to the given shape - return x.unsqueeze(-1).expand(shape) - - -def _snapshot_state(obj): - return {name: val.clone() for name, val in obj.__dict__.items() if torch.is_tensor(val)} - - -def _restore_state(obj, snapshot): - for name, val in snapshot.items(): - setattr(obj, name, val) diff --git a/src/diffwofost/physical_models/crop/leaf_dynamics.py b/src/diffwofost/physical_models/crop/leaf_dynamics.py index ddd4c5e..be2add0 100644 --- a/src/diffwofost/physical_models/crop/leaf_dynamics.py +++ b/src/diffwofost/physical_models/crop/leaf_dynamics.py @@ -273,7 +273,8 @@ def initialize( self.params_shape = _get_params_shape(params) # Initial leaf biomass - WLV = (params.TDWI * (1 - FR)) * FL + TDWI = _broadcast_to(params.TDWI, self.params_shape, dtype=self.dtype, device=self.device) + WLV = (TDWI * (1 - FR)) * FL DWLV = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) TWLV = WLV + DWLV @@ -344,11 +345,16 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: r.GRLV = dvs_mask * k.ADMI * k.FL # death of leaves due to water/oxygen stress - r.DSLV1 = dvs_mask * s.WLV * (1.0 - k.RFTRA) * p.PERDL + RFTRA = _broadcast_to(k.RFTRA, self.params_shape, dtype=self.dtype, device=self.device) + PERDL = _broadcast_to(p.PERDL, self.params_shape, dtype=self.dtype, device=self.device) + r.DSLV1 = dvs_mask * s.WLV * (1.0 - RFTRA) * PERDL # death due to self shading cause by high LAI - DVS = self.kiosk["DVS"] - LAICR = 3.2 / p.KDIFTB(DVS) + DVS = _broadcast_to( + self.kiosk["DVS"], self.params_shape, dtype=self.dtype, device=self.device + ) + KDIFTB = p.KDIFTB.to(device=self.device, dtype=self.dtype) + LAICR = 3.2 / KDIFTB(DVS) r.DSLV2 = dvs_mask * s.WLV * torch.clamp(0.03 * (s.LAI - LAICR) / LAICR, 0.0, 0.03) # Death of leaves due to frost damage as determined by @@ -404,7 +410,8 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: r.FYSAGE = dvs_mask * torch.clamp(FYSAGE, 0.0) # specific leaf area of leaves per time step - r.SLAT = dvs_mask * p.SLATB(DVS) + SLATB = p.SLATB.to(device=self.device, dtype=self.dtype) + r.SLAT = dvs_mask * SLATB(DVS) # leaf area not to exceed exponential growth curve is_lai_exp = s.LAIEXP < 6.0 @@ -414,9 +421,10 @@ def calc_rates(self, day: datetime.date, drv: WeatherDataContainer) -> None: # tracked through the condition. Thus, the gradient with respect to # parameters that contribute to `is_lai_exp` (e.g. RGRLAI and TBASE) # are expected to be incorrect. + RGRLAI = _broadcast_to(p.RGRLAI, self.params_shape, dtype=self.dtype, device=self.device) r.GLAIEX = torch.where( dvs_mask.bool(), - torch.where(is_lai_exp, s.LAIEXP * p.RGRLAI * DTEFF, r.GLAIEX), + torch.where(is_lai_exp, s.LAIEXP * RGRLAI * DTEFF, r.GLAIEX), self._zero, ) diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index 2a7204b..8ec4c97 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -296,71 +296,37 @@ def _check_x_ascending(self, tbl_xy): Raises: ValueError: If x values are not strictly ascending. """ - # Handle batched tables (>1D tensors) - if tbl_xy.dim() > 1: - batch_shape = tbl_xy.shape[:-1] - table_len = tbl_xy.shape[-1] - - # Flatten batch dimensions for processing - flat_tables = tbl_xy.reshape(-1, table_len) - num_tables = flat_tables.shape[0] - valid_counts = [] - for idx in range(num_tables): - table = flat_tables[idx] - x_list = table[0::2] - y_list = table[1::2] - n = len(x_list) - - # Find trailing (0, 0) pairs to truncate - valid_n = n - for i in range(n - 1, 0, -1): - if x_list[i] == 0 and y_list[i] == 0: - valid_n = i - else: - break - - # Check if x range is strictly ascending - valid_x_list = x_list[:valid_n] - for i in range(1, len(valid_x_list)): - if valid_x_list[i] <= valid_x_list[i - 1]: - msg = ( - "X values for AFGEN input list" - + " not strictly ascending: {x_list.tolist()}" - ) - raise ValueError(msg) - - valid_counts.append(valid_n) - - return torch.tensor(valid_counts).reshape(batch_shape) - - # Original 1D logic from pcse - x_list = tbl_xy[0::2] - y_list = tbl_xy[1::2] - n = len(x_list) - - # Find trailing (0, 0) pairs to truncate - valid_n = n - for i in range(n - 1, 0, -1): - if x_list[i] == 0 and y_list[i] == 0: - valid_n = i - else: - break + def _valid_n_and_check(x_list: torch.Tensor, y_list: torch.Tensor) -> int: + # Truncate trailing (0,0) pairs. If all pairs are (0,0), keep first pair. + nonzero = ~(x_list.eq(0) & y_list.eq(0)) + last_valid = int(nonzero.nonzero()[-1].item()) if bool(nonzero.any()) else 0 + valid_n = last_valid + 1 - # Check only the valid (non-trailing-zero) portion - valid_x_list = x_list[:valid_n] + x_valid = x_list[:valid_n] + if x_valid.numel() > 1 and not bool(torch.all(torch.diff(x_valid) > 0)): + raise ValueError( + f"X values for AFGEN input list not strictly ascending: {x_list.tolist()}" + ) + return valid_n - # Check if x range is strictly ascending - for i in range(1, len(valid_x_list)): - if valid_x_list[i] <= valid_x_list[i - 1]: - msg = f"X values for AFGEN input list not strictly ascending: {x_list.tolist()}" - raise ValueError(msg) + if tbl_xy.dim() > 1: + batch_shape = tbl_xy.shape[:-1] + table_len = tbl_xy.shape[-1] + flat = tbl_xy.reshape(-1, table_len) + counts = [_valid_n_and_check(t[0::2], t[1::2]) for t in flat] + return torch.tensor(counts, device=tbl_xy.device).reshape(batch_shape) + valid_n = _valid_n_and_check(tbl_xy[0::2], tbl_xy[1::2]) return list(range(valid_n)) def __init__(self, tbl_xy): # Convert to tensor if needed tbl_xy = torch.as_tensor(tbl_xy) + # If the table was provided as ints, promote to float so interpolation + # doesn't truncate query points (e.g. 2.5 -> 2) and autograd works. + if not tbl_xy.is_floating_point(): + tbl_xy = tbl_xy.to(dtype=torch.get_default_dtype()) # Detect if we have batched tables (>1D) self.is_batched = tbl_xy.dim() > 1 @@ -369,63 +335,62 @@ def __init__(self, tbl_xy): self.batch_shape = tbl_xy.shape[:-1] table_len = tbl_xy.shape[-1] - # Store the full batched tables + # Keep the full batched tables for debugging/inspection self.tbl_xy = tbl_xy - # Get valid counts for each table + # Validate and compute how many (x,y) pairs are valid per table valid_counts = self._check_x_ascending(tbl_xy) self.valid_counts = valid_counts - # Extract x and y for all tables flat_tables = tbl_xy.reshape(-1, table_len) + flat_valid = valid_counts.reshape(-1).to(device=tbl_xy.device) num_tables = flat_tables.shape[0] + max_n = int(flat_valid.max().item()) if num_tables > 0 else 0 - x_list_batch = [] - y_list_batch = [] - slopes_batch = [] + # Store padded tensors so we can vectorize __call__. + pad_x = torch.finfo(tbl_xy.dtype).max + x_flat = torch.full( + (num_tables, max_n), pad_x, dtype=tbl_xy.dtype, device=tbl_xy.device + ) + y_flat = torch.zeros((num_tables, max_n), dtype=tbl_xy.dtype, device=tbl_xy.device) + slopes_flat = torch.zeros( + (num_tables, max(0, max_n - 1)), dtype=tbl_xy.dtype, device=tbl_xy.device + ) for idx in range(num_tables): + n = int(flat_valid[idx].item()) table = flat_tables[idx] - valid_n = valid_counts.flatten()[idx].item() - - x_indices = torch.tensor([2 * i for i in range(valid_n)]) - y_indices = torch.tensor([2 * i + 1 for i in range(valid_n)]) - - x_vals = table[x_indices] - y_vals = table[y_indices] - - # Calculate slopes - if len(x_vals) > 1: - slopes = (y_vals[1:] - y_vals[:-1]) / (x_vals[1:] - x_vals[:-1]) - else: - slopes = torch.tensor([], dtype=torch.float64) - - x_list_batch.append(x_vals) - y_list_batch.append(y_vals) - slopes_batch.append(slopes) - - # Store as lists - don't reshape, just keep the flat structure - self.x_list_batch = x_list_batch - self.y_list_batch = y_list_batch - self.slopes_batch = slopes_batch + x_vals = table[0::2][:n] + y_vals = table[1::2][:n] + + x_flat[idx, :n] = x_vals + y_flat[idx, :n] = y_vals + if n < max_n: + y_flat[idx, n:] = y_vals[-1] + if n > 1: + slopes_flat[idx, : n - 1] = (y_vals[1:] - y_vals[:-1]) / ( + x_vals[1:] - x_vals[:-1] + ) + + self._x_flat = x_flat + self._y_flat = y_flat + self._slopes_flat = slopes_flat + self._valid_counts_flat = flat_valid else: # Original 1D logic from pcse self.batch_shape = None indices = self._check_x_ascending(tbl_xy) + valid_n = len(indices) - # Extract x and y values using indices - x_indices = torch.tensor([2 * i for i in indices]) - y_indices = torch.tensor([2 * i + 1 for i in indices]) - self.x_list = tbl_xy[x_indices] - self.y_list = tbl_xy[y_indices] - - # Calculate slopes - x1 = self.x_list[:-1] - x2 = self.x_list[1:] - y1 = self.y_list[:-1] - y2 = self.y_list[1:] - self.slopes = (y2 - y1) / (x2 - x1) + self.x_list = tbl_xy[0::2][:valid_n] + self.y_list = tbl_xy[1::2][:valid_n] + if valid_n > 1: + self.slopes = (self.y_list[1:] - self.y_list[:-1]) / ( + self.x_list[1:] - self.x_list[:-1] + ) + else: + self.slopes = torch.tensor([], dtype=tbl_xy.dtype, device=tbl_xy.device) def __call__(self, x): """Returns the interpolated value at abscissa x. @@ -437,68 +402,45 @@ def __call__(self, x): Returns: torch.Tensor: The interpolated value, preserving batch dimensions. """ - # Convert to tensor and ensure it's on the same device as the tables - if self.is_batched: - # Get device and dtype from the first table - target_device = self.x_list_batch[0].device - target_dtype = self.x_list_batch[0].dtype - else: - # Get device and dtype from the tables - target_device = self.x_list.device - target_dtype = self.x_list.dtype - x = torch.as_tensor(x, dtype=target_dtype, device=target_device) - if self.is_batched: - # Ensure x has compatible shape for broadcasting - # x can be scalar or have batch dimensions - - # Flatten batch dimensions for processing + x = torch.as_tensor(x, dtype=self._x_flat.dtype, device=self._x_flat.device) flat_x = x.reshape(-1) if x.dim() > 0 else x.unsqueeze(0) - num_queries = flat_x.shape[0] if flat_x.dim() > 0 else 1 - - results = [] - - # Process each table - for idx in range(len(self.x_list_batch)): - x_list = self.x_list_batch[idx] - y_list = self.y_list_batch[idx] - slopes = self.slopes_batch[idx] - - # Get the query value (broadcast if needed) - if num_queries == 1: - x_val = flat_x[0] if flat_x.dim() > 0 else flat_x - elif idx < num_queries: - x_val = flat_x[idx] - else: - x_val = flat_x[0] # Broadcast first value - - # Ensure contiguous memory layout for searchsorted - x_list_contig = x_list.contiguous() - x_val_contig = ( - x_val.contiguous() - if isinstance(x_val, torch.Tensor) and x_val.dim() > 0 - else x_val - ) - - # Find interval and interpolate using torch.where for differentiability - i = torch.searchsorted(x_list_contig, x_val_contig, right=False) - 1 - i = torch.clamp(i, 0, len(x_list) - 2) - - # Calculate interpolated value - interp_result = y_list[i] + slopes[i] * (x_val - x_list[i]) + num_tables = self._x_flat.shape[0] - # Apply boundary conditions using torch.where - result = torch.where( - x_val <= x_list[0], - y_list[0], - torch.where(x_val >= x_list[-1], y_list[-1], interp_result), - ) - - results.append(result) + if flat_x.numel() == 1: + x_vals = flat_x.expand(num_tables) + elif flat_x.numel() == num_tables: + x_vals = flat_x + else: + x_vals = flat_x[0].expand(num_tables) + + # Find interval index per table + i = torch.searchsorted(self._x_flat, x_vals.unsqueeze(1), right=False) - 1 + i = i.squeeze(1) + upper = torch.clamp(self._valid_counts_flat - 2, min=0) + i = torch.clamp(i, min=0) + i = torch.minimum(i, upper) + + idx = i.unsqueeze(1) + x_i = self._x_flat.gather(1, idx).squeeze(1) + y_i = self._y_flat.gather(1, idx).squeeze(1) + slope_i = self._slopes_flat.gather(1, idx).squeeze(1) + interp = y_i + slope_i * (x_vals - x_i) + + x0 = self._x_flat[:, 0] + y0 = self._y_flat[:, 0] + last_idx = (self._valid_counts_flat - 1).to(dtype=torch.long).unsqueeze(1) + x_last = self._x_flat.gather(1, last_idx).squeeze(1) + y_last = self._y_flat.gather(1, last_idx).squeeze(1) + + out = torch.where( + x_vals <= x0, + y0, + torch.where(x_vals >= x_last, y_last, interp), + ) + return out.reshape(self.batch_shape) - # Reshape to original batch shape - output = torch.stack(results).reshape(self.batch_shape) - return output + x = torch.as_tensor(x, dtype=self.x_list.dtype, device=self.x_list.device) # Ensure contiguous memory layout for searchsorted x_list_contig = self.x_list.contiguous() @@ -520,6 +462,38 @@ def __call__(self, x): return result + def to(self, device=None, dtype=None): + """Move internal tensors to a different device/dtype (PyTorch-style). + + This is an in-place operation and returns ``self`` for chaining. + """ + if device is None and dtype is None: + return self + + for name in ( + "tbl_xy", + "x_list", + "y_list", + "slopes", + "_x_flat", + "_y_flat", + "_slopes_flat", + "valid_counts", + "_valid_counts_flat", + ): + if not hasattr(self, name): + continue + t = getattr(self, name) + if not isinstance(t, torch.Tensor): + continue + # Keep integer tensors as integers; only move device for them. + if t.is_floating_point(): + setattr(self, name, t.to(device=device, dtype=dtype)) + else: + setattr(self, name, t.to(device=device)) + + return self + @property def shape(self): """Returns the shape of the Afgen table.""" diff --git a/tests/physical_models/crop/test_leaf_dynamics.py b/tests/physical_models/crop/test_leaf_dynamics.py index 13d8e81..5566f11 100644 --- a/tests/physical_models/crop/test_leaf_dynamics.py +++ b/tests/physical_models/crop/test_leaf_dynamics.py @@ -31,12 +31,12 @@ def device(request): return device_name -def get_test_diff_leaf_model(): +def get_test_diff_leaf_model(device: str = "cpu"): test_data_url = f"{phy_data_folder}/test_leafdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) crop_model_params = ["SPAN", "TDWI", "TBASE", "PERDL", "RGRLAI"] (crop_model_params_provider, weather_data_provider, agro_management_inputs, external_states) = ( - prepare_engine_input(test_data, crop_model_params) + prepare_engine_input(test_data, crop_model_params, device=device) ) return DiffLeafDynamics( copy.deepcopy(crop_model_params_provider), @@ -44,6 +44,7 @@ def get_test_diff_leaf_model(): agro_management_inputs, leaf_dynamics_config, copy.deepcopy(external_states), + device=device, ) @@ -55,6 +56,7 @@ def __init__( agro_management_inputs, config, external_states, + device: str = "cpu", ): super().__init__() self.crop_model_params_provider = crop_model_params_provider @@ -62,10 +64,13 @@ def __init__( self.agro_management_inputs = agro_management_inputs self.config = config self.external_states = external_states + self.device = device def forward(self, params_dict): # pass new value of parameters to the model for name, value in params_dict.items(): + if isinstance(value, torch.Tensor) and value.device.type != self.device: + value = value.to(self.device) self.crop_model_params_provider.set_override(name, value, check=False) engine = EngineTestHelper( @@ -74,7 +79,7 @@ def forward(self, params_dict): self.agro_management_inputs, self.config, self.external_states, - device="cpu", + device=self.device, ) engine.run_till_terminate() results = engine.get_output() @@ -557,11 +562,11 @@ class TestDiffLeafDynamicsGradients: @pytest.mark.parametrize("param_name,output_name", no_gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_no_gradients(self, param_name, output_name, config_type): + def test_no_gradients(self, param_name, output_name, config_type, device): """Test cases where parameters should not have gradients for specific outputs.""" - model = get_test_diff_leaf_model() + model = get_test_diff_leaf_model(device=device) value, dtype = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=dtype)) + param = torch.nn.Parameter(torch.tensor(value, dtype=dtype, device=device)) output = model({param_name: param}) loss = output[output_name].sum() @@ -573,11 +578,11 @@ def test_no_gradients(self, param_name, output_name, config_type): @pytest.mark.parametrize("param_name,output_name", gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_gradients_forward_backward_match(self, param_name, output_name, config_type): + def test_gradients_forward_backward_match(self, param_name, output_name, config_type, device): """Test that forward and backward gradients match for parameter-output pairs.""" - model = get_test_diff_leaf_model() + model = get_test_diff_leaf_model(device=device) value, dtype = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=dtype)) + param = torch.nn.Parameter(torch.tensor(value, dtype=dtype, device=device)) output = model({param_name: param}) loss = output[output_name].sum() @@ -600,22 +605,24 @@ def test_gradients_forward_backward_match(self, param_name, output_name, config_ @pytest.mark.parametrize("param_name,output_name", gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_gradients_numerical(self, param_name, output_name, config_type): + def test_gradients_numerical(self, param_name, output_name, config_type, device): """Test that analytical gradients match numerical gradients.""" value, _ = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=torch.float64)) + param = torch.nn.Parameter(torch.tensor(value, dtype=torch.float64, device=device)) numerical_grad = calculate_numerical_grad( - get_test_diff_leaf_model, param_name, param.data, output_name + lambda: get_test_diff_leaf_model(device=device), param_name, param.data, output_name ) - model = get_test_diff_leaf_model() + model = get_test_diff_leaf_model(device=device) output = model({param_name: param}) loss = output[output_name].sum() # this is ∂loss/∂param, for comparison with numerical gradient grads = torch.autograd.grad(loss, param, retain_graph=True)[0] - assert_array_almost_equal(numerical_grad, grads.data, decimal=3) + assert_array_almost_equal( + numerical_grad.detach().cpu().numpy(), grads.detach().cpu().numpy(), decimal=3 + ) # Warn if gradient is zero (but this shouldn't happen for gradient_params) if torch.all(grads == 0): diff --git a/tests/physical_models/test_utils.py b/tests/physical_models/test_utils.py index 1fcac7f..cae2853 100644 --- a/tests/physical_models/test_utils.py +++ b/tests/physical_models/test_utils.py @@ -163,6 +163,25 @@ def test_complex_table(self): expected = torch.tensor(1.25, dtype=DTYPE) # Linear interpolation assert torch.isclose(result, expected) + def test_to_moves_dtype_and_device(self): + afgen = Afgen([0, 0, 10, 10]) + returned = afgen.to(dtype=torch.float64) + assert returned is afgen + out = afgen(torch.tensor(5.0)) + assert out.dtype == torch.float64 + + # Batched tables + tbl = torch.tensor([[0.0, 0.0, 10.0, 10.0], [0.0, 0.0, 10.0, 20.0]], dtype=torch.float32) + afgen_batched = Afgen(tbl) + afgen_batched.to(dtype=torch.float64) + out_batched = afgen_batched(torch.tensor([5.0, 5.0])) + assert out_batched.dtype == torch.float64 + + if torch.cuda.is_available(): + afgen_cuda = Afgen([0, 0, 10, 10]).to(device="cuda") + out_cuda = afgen_cuda(torch.tensor(5.0, device="cuda")) + assert out_cuda.device.type == "cuda" + class TestAfgenTrait: """Tests for the AfgenTrait class.""" From 2db4946dfa15c9818f73b414d6582928d3646be7 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Thu, 18 Dec 2025 17:05:47 +0100 Subject: [PATCH 07/17] Finalize root module --- .../physical_models/crop/root_dynamics.py | 50 ++++++----- .../crop/test_root_dynamics.py | 86 +++++++++++++------ 2 files changed, 89 insertions(+), 47 deletions(-) diff --git a/src/diffwofost/physical_models/crop/root_dynamics.py b/src/diffwofost/physical_models/crop/root_dynamics.py index 24e6765..72a151f 100644 --- a/src/diffwofost/physical_models/crop/root_dynamics.py +++ b/src/diffwofost/physical_models/crop/root_dynamics.py @@ -1,4 +1,4 @@ -from datetime import datetime +import datetime import torch from pcse.base import ParamTemplate from pcse.base import RatesTemplate @@ -119,6 +119,8 @@ class WOFOST_Root_Dynamics(SimulationObject): device = torch.device("cuda" if torch.cuda.is_available() else "cpu") dtype = torch.float64 + params_shape = None # Shape of the parameters tensors + class Parameters(ParamTemplate): RDI = Any() RRI = Any() @@ -211,28 +213,29 @@ def initialize( all parameter sets (crop, soil, site) as key/value. The values are arrays or scalars. See PCSE documentation for details. """ + self.kiosk = kiosk self.params = self.Parameters(parvalues) self.rates = self.RateVariables(kiosk, publish=["DRRT", "GRRT"]) - self.kiosk = kiosk # INITIAL STATES params = self.params - shape = _get_params_shape(params) + self.params_shape = _get_params_shape(params) + shape = self.params_shape # Initial root depth states - rdmax = torch.max(params.RDI, torch.min(params.RDMCR, params.RDMSOL)) - RDM = _broadcast_to(rdmax, shape, dtype=self.dtype, device=self.device) - RD = _broadcast_to(params.RDI, shape, dtype=self.dtype, device=self.device) + RDI = _broadcast_to(params.RDI, shape, dtype=self.dtype, device=self.device) + RDMCR = _broadcast_to(params.RDMCR, shape, dtype=self.dtype, device=self.device) + RDMSOL = _broadcast_to(params.RDMSOL, shape, dtype=self.dtype, device=self.device) + + rdmax = torch.maximum(RDI, torch.minimum(RDMCR, RDMSOL)) + RDM = rdmax + RD = RDI # Initial root biomass states - WRT = _broadcast_to( - params.TDWI * self.kiosk.FR, shape, dtype=self.dtype, device=self.device - ) - DWRT = ( - torch.zeros_like(WRT) - if shape - else torch.zeros((), dtype=self.dtype, device=self.device) - ) + TDWI = _broadcast_to(params.TDWI, shape, dtype=self.dtype, device=self.device) + FR = _broadcast_to(self.kiosk["FR"], shape, dtype=self.dtype, device=self.device) + WRT = TDWI * FR + DWRT = torch.zeros(shape, dtype=self.dtype, device=self.device) TWRT = WRT + DWRT self.states = self.StateVariables( @@ -254,22 +257,29 @@ def calc_rates(self, day: datetime.date = None, drv: WeatherDataContainer = None s = self.states k = self.kiosk - # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask + if self.params_shape is None: + self.params_shape = _get_params_shape(p) + + # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask. # Make a mask (0 if DVS < 0, 1 if DVS >= 0) - DVS = torch.as_tensor(k["DVS"], dtype=self.dtype, device=self.device) + DVS = _broadcast_to(k["DVS"], self.params_shape, dtype=self.dtype, device=self.device) dvs_mask = (DVS >= 0).to(dtype=self.dtype) # Increase in root biomass - r.GRRT = dvs_mask * k.FR * k.DMI - r.DRRT = dvs_mask * s.WRT * p.RDRRTB(k.DVS) + FR = _broadcast_to(k["FR"], self.params_shape, dtype=self.dtype, device=self.device) + DMI = _broadcast_to(k["DMI"], self.params_shape, dtype=self.dtype, device=self.device) + RDRRTB = p.RDRRTB.to(device=self.device, dtype=self.dtype) + + r.GRRT = dvs_mask * FR * DMI + r.DRRT = dvs_mask * s.WRT * RDRRTB(DVS) r.GWRT = r.GRRT - r.DRRT # Increase in root depth - r.RR = dvs_mask * torch.min((s.RDM - s.RD), p.RRI) + RRI = _broadcast_to(p.RRI, self.params_shape, dtype=self.dtype, device=self.device) + r.RR = dvs_mask * torch.minimum((s.RDM - s.RD), RRI) # Do not let the roots growth if partioning to the roots # (variable FR) is zero. - FR = torch.as_tensor(k["FR"], dtype=self.dtype, device=self.device) mask = (FR > 0.0).to(dtype=self.dtype) r.RR = r.RR * mask * dvs_mask diff --git a/tests/physical_models/crop/test_root_dynamics.py b/tests/physical_models/crop/test_root_dynamics.py index 64ad04c..5e8d594 100644 --- a/tests/physical_models/crop/test_root_dynamics.py +++ b/tests/physical_models/crop/test_root_dynamics.py @@ -22,12 +22,21 @@ ) -def get_test_diff_root_model(): +@pytest.fixture(params=["cpu", "cuda"]) +def device(request): + """Fixture to parametrize tests over CPU and GPU devices.""" + device_name = request.param + if device_name == "cuda" and not torch.cuda.is_available(): + pytest.skip("CUDA not available") + return device_name + + +def get_test_diff_root_model(device: str = "cpu"): test_data_url = f"{phy_data_folder}/test_rootdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) crop_model_params = ["RDI", "RRI", "RDMCR", "RDMSOL", "TDWI", "IAIRDU"] (crop_model_params_provider, weather_data_provider, agro_management_inputs, external_states) = ( - prepare_engine_input(test_data, crop_model_params) + prepare_engine_input(test_data, crop_model_params, device=device) ) return DiffRootDynamics( copy.deepcopy(crop_model_params_provider), @@ -35,6 +44,7 @@ def get_test_diff_root_model(): agro_management_inputs, root_dynamics_config, copy.deepcopy(external_states), + device=device, ) @@ -46,6 +56,7 @@ def __init__( agro_management_inputs, config, external_states, + device: str = "cpu", ): super().__init__() self.crop_model_params_provider = crop_model_params_provider @@ -53,10 +64,13 @@ def __init__( self.agro_management_inputs = agro_management_inputs self.config = config self.external_states = external_states + self.device = device def forward(self, params_dict): # pass new value of parameters to the model for name, value in params_dict.items(): + if isinstance(value, torch.Tensor) and value.device.type != self.device: + value = value.to(self.device) self.crop_model_params_provider.set_override(name, value, check=False) engine = EngineTestHelper( @@ -65,7 +79,7 @@ def forward(self, params_dict): self.agro_management_inputs, self.config, self.external_states, - device="cpu", + device=self.device, ) engine.run_till_terminate() results = engine.get_output() @@ -84,8 +98,8 @@ class TestRootDynamics: for i in range(1, 45) # there are 44 test files ] - @pytest.mark.parametrize("test_data_url", rootdynamics_data_urls) - def test_root_dynamics_with_testengine(self, test_data_url): + @pytest.mark.parametrize("test_data_url", rootdynamics_data_urls[:3]) # Test subset for GPU + def test_root_dynamics_with_testengine(self, test_data_url, device): """EngineTestHelper and not Engine because it allows to specify `external_states`.""" # prepare model input test_data = get_test_data(test_data_url) @@ -103,7 +117,7 @@ def test_root_dynamics_with_testengine(self, test_data_url): agro_management_inputs, root_dynamics_config, external_states, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -115,13 +129,16 @@ def test_root_dynamics_with_testengine(self, test_data_url): for reference, model in zip(expected_results, actual_results, strict=False): assert reference["DAY"] == model["day"] + for var in expected_precision.keys(): + assert model[var].device.type == device, f"{var} should be on {device}" + model_cpu = {k: v.cpu() if isinstance(v, torch.Tensor) else v for k, v in model.items()} assert all( - abs(reference[var] - model[var]) < precision + abs(reference[var] - model_cpu[var]) < precision for var, precision in expected_precision.items() ) @pytest.mark.parametrize("param", ["RDI", "RRI", "RDMCR", "RDMSOL", "TDWI", "IAIRDU", "RDRRTB"]) - def test_root_dynamics_with_one_parameter_vector(self, param): + def test_root_dynamics_with_one_parameter_vector(self, param, device): # prepare model input test_data_url = phy_data_folder / "test_rootdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -148,7 +165,7 @@ def test_root_dynamics_with_one_parameter_vector(self, param): agro_management_inputs, root_dynamics_config, external_states, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -160,8 +177,11 @@ def test_root_dynamics_with_one_parameter_vector(self, param): for reference, model in zip(expected_results, actual_results, strict=False): assert reference["DAY"] == model["day"] + for var in expected_precision.keys(): + assert model[var].device.type == device, f"{var} should be on {device}" + model_cpu = {k: v.cpu() if isinstance(v, torch.Tensor) else v for k, v in model.items()} assert all( - all(abs(reference[var] - model[var]) < precision) + all(abs(reference[var] - model_cpu[var]) < precision) for var, precision in expected_precision.items() ) @@ -177,7 +197,7 @@ def test_root_dynamics_with_one_parameter_vector(self, param): ("RDRRTB", 0.01), ], ) - def test_root_dynamics_with_different_parameter_values(self, param, delta): + def test_root_dynamics_with_different_parameter_values(self, param, delta, device): # prepare model input test_data_url = phy_data_folder / "test_rootdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -206,7 +226,7 @@ def test_root_dynamics_with_different_parameter_values(self, param, delta): agro_management_inputs, root_dynamics_config, external_states, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -218,9 +238,12 @@ def test_root_dynamics_with_different_parameter_values(self, param, delta): for reference, model in zip(expected_results, actual_results, strict=False): assert reference["DAY"] == model["day"] + for var in expected_precision.keys(): + assert model[var].device.type == device, f"{var} should be on {device}" + model_cpu = {k: v.cpu() if isinstance(v, torch.Tensor) else v for k, v in model.items()} assert all( # The value for which test data are available is the last element - abs(reference[var] - model[var][-1]) < precision + abs(reference[var] - model_cpu[var][-1]) < precision for var, precision in expected_precision.items() ) @@ -412,7 +435,6 @@ class TestDiffRootDynamicsGradients: "RRI": ["RD"], "RDMCR": ["RD"], "RDMSOL": ["RD"], - "RDRRTB": ["TWRT"], } # Generate all combinations @@ -427,23 +449,31 @@ class TestDiffRootDynamicsGradients: @pytest.mark.parametrize("param_name,output_name", no_gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_no_gradients(self, param_name, output_name, config_type): + def test_no_gradients(self, param_name, output_name, config_type, device): """Test cases where parameters should not have gradients for specific outputs.""" - model = get_test_diff_root_model() + model = get_test_diff_root_model(device=device) value, dtype = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=dtype)) + param = torch.nn.Parameter(torch.tensor(value, dtype=dtype, device=device)) output = model({param_name: param}) loss = output[output_name].sum() - assert loss.grad_fn is None + # If there is no graph at all, then there is no gradient by definition. + if not loss.requires_grad: + return + + grads = torch.autograd.grad(loss, param, retain_graph=True, allow_unused=True)[0] + if grads is not None: + assert torch.all((grads == 0) | torch.isnan(grads)), ( + f"Gradient for {param_name} w.r.t. {output_name} should be zero or NaN" + ) @pytest.mark.parametrize("param_name,output_name", gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_gradients_forward_backward_match(self, param_name, output_name, config_type): + def test_gradients_forward_backward_match(self, param_name, output_name, config_type, device): """Test that forward and backward gradients match for parameter-output pairs.""" - model = get_test_diff_root_model() + model = get_test_diff_root_model(device=device) value, dtype = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=dtype)) + param = torch.nn.Parameter(torch.tensor(value, dtype=dtype, device=device)) output = model({param_name: param}) loss = output[output_name].sum() @@ -466,27 +496,29 @@ def test_gradients_forward_backward_match(self, param_name, output_name, config_ @pytest.mark.parametrize("param_name,output_name", gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_gradients_numerical(self, param_name, output_name, config_type): + def test_gradients_numerical(self, param_name, output_name, config_type, device): """Test that analytical gradients match numerical gradients.""" value, _ = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=torch.float64)) + param = torch.nn.Parameter(torch.tensor(value, dtype=torch.float64, device=device)) numerical_grad = calculate_numerical_grad( - get_test_diff_root_model, param_name, param.data, output_name + lambda: get_test_diff_root_model(device=device), param_name, param.data, output_name ) - model = get_test_diff_root_model() + model = get_test_diff_root_model(device=device) output = model({param_name: param}) loss = output[output_name].sum() # this is ∂loss/∂param, for comparison with numerical gradient grads = torch.autograd.grad(loss, param, retain_graph=True)[0] - assert_array_almost_equal(numerical_grad, grads.detach().numpy(), decimal=3) + assert_array_almost_equal( + numerical_grad.detach().cpu().numpy(), grads.detach().cpu().numpy(), decimal=3 + ) # Warn if gradient is zero if torch.all(grads == 0): warnings.warn( f"Gradient for parameter '{param_name}' with respect to output" - + f"'{output_name}' is zero: {grads.detach().numpy()}", + + f"'{output_name}' is zero: {grads.detach().cpu().numpy()}", UserWarning, ) From 9f81330a5ae38089f071e6854096e4a33cc34357 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Fri, 19 Dec 2025 09:52:41 +0100 Subject: [PATCH 08/17] Phenology --- pyproject.toml | 3 + .../physical_models/crop/phenology.py | 35 ++++++ src/diffwofost/physical_models/utils.py | 4 +- tests/physical_models/conftest.py | 2 + .../crop/test_leaf_dynamics.py | 12 -- tests/physical_models/crop/test_phenology.py | 111 +++++++++++++----- .../crop/test_root_dynamics.py | 13 +- tests/physical_models/fixtures.py | 15 +++ 8 files changed, 139 insertions(+), 56 deletions(-) create mode 100644 tests/physical_models/fixtures.py diff --git a/pyproject.toml b/pyproject.toml index 51301e8..e167d54 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,6 +61,9 @@ Issues = "https://github.com/WUR-AI/diffwofost/issues" [tool.pytest.ini_options] testpaths = ["tests"] +filterwarnings = [ + "ignore::DeprecationWarning:pcse.base.simulationobject", +] [tool.coverage.run] diff --git a/src/diffwofost/physical_models/crop/phenology.py b/src/diffwofost/physical_models/crop/phenology.py index 04b6c9f..2d4cef7 100644 --- a/src/diffwofost/physical_models/crop/phenology.py +++ b/src/diffwofost/physical_models/crop/phenology.py @@ -527,11 +527,43 @@ def initialize(self, day, kiosk, parvalues): self.params = self.Parameters(parvalues) self.params_shape = _get_params_shape(self.params) + # Ensure the Vernalisation submodule (if created) uses the same dtype/device + # as this phenology instance. Vernalisation defaults to CUDA when available, + # which can otherwise cause device mismatches in CPU runs. + Vernalisation.device = self.device + Vernalisation.dtype = self.dtype + + def _cast_and_broadcast_params(): + p = self.params + # Broadcast numeric parameters to the final params_shape and ensure dtype/device. + for name in ( + "TSUMEM", + "TBASEM", + "TEFFMX", + "TSUM1", + "TSUM2", + "IDSL", + "DLO", + "DLC", + "DVSI", + "DVSEND", + ): + setattr( + p, + name, + _broadcast_to(getattr(p, name), self.params_shape, self.dtype, self.device), + ) + + # Move AFGEN table buffers, if present. + if hasattr(p, "DTSMTB") and hasattr(p.DTSMTB, "to"): + p.DTSMTB.to(device=self.device, dtype=self.dtype) + # Initialize vernalisation for IDSL>=2 # It has to be done in advance to get the correct params_shape IDSL = _broadcast_to( self.params.IDSL, self.params_shape, dtype=self.dtype, device=self.device ) + self.params.IDSL = IDSL if torch.any(IDSL >= 2): if self.params_shape != (): self.vernalisation = Vernalisation( @@ -544,6 +576,9 @@ def initialize(self, day, kiosk, parvalues): else: self.vernalisation = None + # After Vernalisation initialization the final params_shape may have changed. + _cast_and_broadcast_params() + # Initialize rates and kiosk self.rates = self.RateVariables(kiosk) self.kiosk = kiosk diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index 8ec4c97..242d3d8 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -415,7 +415,9 @@ def __call__(self, x): x_vals = flat_x[0].expand(num_tables) # Find interval index per table - i = torch.searchsorted(self._x_flat, x_vals.unsqueeze(1), right=False) - 1 + # Ensure contiguous query tensor to avoid internal copies in searchsorted + x_query = x_vals.unsqueeze(1).contiguous() + i = torch.searchsorted(self._x_flat, x_query, right=False) - 1 i = i.squeeze(1) upper = torch.clamp(self._valid_counts_flat - 2, min=0) i = torch.clamp(i, min=0) diff --git a/tests/physical_models/conftest.py b/tests/physical_models/conftest.py index 3605e93..312b193 100644 --- a/tests/physical_models/conftest.py +++ b/tests/physical_models/conftest.py @@ -2,6 +2,8 @@ import pytest import requests +# Shared fixtures (e.g. cpu/cuda parametrization) + LOCAL_TEST_DIR = Path(__file__).parent / "test_data" BASE_PCSE_URL = "https://raw.githubusercontent.com/ajwdewit/pcse/refs/heads/master/tests/test_data" diff --git a/tests/physical_models/crop/test_leaf_dynamics.py b/tests/physical_models/crop/test_leaf_dynamics.py index 5566f11..1e12503 100644 --- a/tests/physical_models/crop/test_leaf_dynamics.py +++ b/tests/physical_models/crop/test_leaf_dynamics.py @@ -13,24 +13,12 @@ from diffwofost.physical_models.utils import prepare_engine_input from .. import phy_data_folder -# Ignore deprecation warnings from pcse.base.simulationobject -pytestmark = pytest.mark.filterwarnings("ignore::DeprecationWarning:pcse.base.simulationobject") - leaf_dynamics_config = Configuration( CROP=WOFOST_Leaf_Dynamics, OUTPUT_VARS=["LAI", "TWLV"], ) -@pytest.fixture(params=["cpu", "cuda"]) -def device(request): - """Fixture to parametrize tests over CPU and GPU devices.""" - device_name = request.param - if device_name == "cuda" and not torch.cuda.is_available(): - pytest.skip("CUDA not available") - return device_name - - def get_test_diff_leaf_model(device: str = "cpu"): test_data_url = f"{phy_data_folder}/test_leafdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) diff --git a/tests/physical_models/crop/test_phenology.py b/tests/physical_models/crop/test_phenology.py index 6e16cf0..bc597d0 100644 --- a/tests/physical_models/crop/test_phenology.py +++ b/tests/physical_models/crop/test_phenology.py @@ -12,9 +12,6 @@ from diffwofost.physical_models.utils import prepare_engine_input from .. import phy_data_folder -# Ignore deprecation warnings from pcse.base.simulationobject -pytestmark = pytest.mark.filterwarnings("ignore::DeprecationWarning:pcse.base.simulationobject") - phenology_config = Configuration( CROP=DVS_Phenology, OUTPUT_VARS=["DVR", "DVS", "TSUM", "TSUME", "VERN"], @@ -31,12 +28,17 @@ def assert_reference_match(reference, model, expected_precision): # for some data tests, both reference and model can have None values if reference[var] is None and model[var] is None: continue - assert torch.all( - torch.abs(torch.as_tensor(reference[var]) - torch.as_tensor(model[var])) < precision + ref_t = torch.as_tensor(reference[var]) + model_v = model[var] + model_t = ( + model_v.detach().cpu() + if isinstance(model_v, torch.Tensor) + else torch.as_tensor(model_v) ) + assert torch.all(torch.abs(ref_t - model_t) < precision) -def get_test_diff_phenology_model(): +def get_test_diff_phenology_model(device: str = "cpu"): test_data_url = f"{phy_data_folder}/test_phenology_wofost72_01.yaml" test_data = get_test_data(test_data_url) # Phenology-related crop model parameters @@ -52,18 +54,20 @@ def get_test_diff_phenology_model(): "DVSI", "DVSEND", "DTSMTB", + "VERNRTB", "VERNSAT", "VERNBASE", "VERNDVS", ] (crop_model_params_provider, weather_data_provider, agro_management_inputs, _) = ( - prepare_engine_input(test_data, crop_model_params) + prepare_engine_input(test_data, crop_model_params, device=device) ) return DiffPhenologyDynamics( copy.deepcopy(crop_model_params_provider), weather_data_provider, agro_management_inputs, phenology_config, + device=device, ) @@ -74,16 +78,20 @@ def __init__( weather_data_provider, agro_management_inputs, config, + device: str = "cpu", ): super().__init__() self.crop_model_params_provider = crop_model_params_provider self.weather_data_provider = weather_data_provider self.agro_management_inputs = agro_management_inputs self.config = config + self.device = device def forward(self, params_dict): # pass new value of parameters to the model for name, value in params_dict.items(): + if isinstance(value, torch.Tensor) and value.device.type != self.device: + value = value.to(self.device) self.crop_model_params_provider.set_override(name, value, check=False) engine = EngineTestHelper( @@ -91,6 +99,7 @@ def forward(self, params_dict): self.weather_data_provider, self.agro_management_inputs, self.config, + device=self.device, ) engine.run_till_terminate() results = engine.get_output() @@ -108,8 +117,8 @@ class TestPhenologyDynamics: f"{phy_data_folder}/test_potentialproduction_wofost72_{i:02d}.yaml" for i in range(1, 45) ] - @pytest.mark.parametrize("test_data_url", phenology_data_urls) - def test_phenology_with_testengine(self, test_data_url): + @pytest.mark.parametrize("test_data_url", phenology_data_urls[:3]) # Test subset for GPU + def test_phenology_with_testengine(self, test_data_url, device): test_data = get_test_data(test_data_url) crop_model_params = [ "TSUMEM", @@ -123,6 +132,7 @@ def test_phenology_with_testengine(self, test_data_url): "DVSI", "DVSEND", "DTSMTB", + "VERNRTB", "VERNSAT", "VERNBASE", "VERNDVS", @@ -132,13 +142,14 @@ def test_phenology_with_testengine(self, test_data_url): weather_data_provider, agro_management_inputs, _, - ) = prepare_engine_input(test_data, crop_model_params) + ) = prepare_engine_input(test_data, crop_model_params, device=device) engine = EngineTestHelper( crop_model_params_provider, weather_data_provider, agro_management_inputs, phenology_config, + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -147,7 +158,18 @@ def test_phenology_with_testengine(self, test_data_url): assert len(actual_results) == len(expected_results) for reference, model in zip(expected_results, actual_results, strict=False): - assert_reference_match(reference, model, expected_precision) + for var in expected_precision.keys(): + if var in ["VERNFAC", "VERNR"]: + continue + # Some outputs (e.g. VERN) can be None for test cases without vernalisation. + # Only check device placement for actual tensors. + value = model.get(var) + if value is None: + continue + if isinstance(value, torch.Tensor): + assert value.device.type == device, f"{var} should be on {device}" + model_cpu = {k: v.cpu() if isinstance(v, torch.Tensor) else v for k, v in model.items()} + assert_reference_match(reference, model_cpu, expected_precision) @pytest.mark.parametrize( "param", @@ -169,7 +191,7 @@ def test_phenology_with_testengine(self, test_data_url): "TEMP", ], ) - def test_phenology_with_one_parameter_vector(self, param): + def test_phenology_with_one_parameter_vector(self, param, device): # pick a test case with vernalisation to have all the parameters test_data_url = f"{phy_data_folder}/test_phenology_wofost72_17.yaml" test_data = get_test_data(test_data_url) @@ -185,6 +207,7 @@ def test_phenology_with_one_parameter_vector(self, param): "DVSI", "DVSEND", "DTSMTB", + "VERNRTB", "VERNSAT", "VERNBASE", "VERNDVS", @@ -194,11 +217,17 @@ def test_phenology_with_one_parameter_vector(self, param): weather_data_provider, agro_management_inputs, _, - ) = prepare_engine_input(test_data, crop_model_params, meteo_range_checks=False) + ) = prepare_engine_input( + test_data, crop_model_params, meteo_range_checks=False, device=device + ) if param == "TEMP": + if device == "cuda": + pytest.skip("Weather parameter vector tests are CPU-only") for (_, _), wdc in weather_data_provider.store.items(): - wdc.TEMP = torch.ones(10, dtype=torch.float64) * wdc.TEMP + wdc.TEMP = torch.ones(10, dtype=torch.float64, device=device) * torch.as_tensor( + wdc.TEMP, dtype=torch.float64, device=device + ) elif param == "DTSMTB": repeated = crop_model_params_provider[param].repeat(10, 1) crop_model_params_provider.set_override(param, repeated, check=False) @@ -213,6 +242,7 @@ def test_phenology_with_one_parameter_vector(self, param): weather_data_provider, agro_management_inputs, phenology_config, + device=device, ) engine.run_till_terminate() _ = engine.get_output() @@ -222,6 +252,7 @@ def test_phenology_with_one_parameter_vector(self, param): weather_data_provider, agro_management_inputs, phenology_config, + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -246,7 +277,7 @@ def test_phenology_with_one_parameter_vector(self, param): ("VERNDVS", 0.1), ], ) - def test_phenology_with_different_parameter_values(self, param, delta): + def test_phenology_with_different_parameter_values(self, param, delta, device): # we dont test IDSL,DLO, DLC, DVSEND because these paramaters controls the # simulation duration # TODO: revisit this choice when Engine is fixed @@ -264,6 +295,7 @@ def test_phenology_with_different_parameter_values(self, param, delta): "DVSI", "DVSEND", "DTSMTB", + "VERNRTB", "VERNSAT", "VERNBASE", "VERNDVS", @@ -273,7 +305,7 @@ def test_phenology_with_different_parameter_values(self, param, delta): weather_data_provider, agro_management_inputs, _, - ) = prepare_engine_input(test_data, crop_model_params) + ) = prepare_engine_input(test_data, crop_model_params, device=device) test_value = crop_model_params_provider[param] if param == "DTSMTB": @@ -282,7 +314,7 @@ def test_phenology_with_different_parameter_values(self, param, delta): non_zeros_mask = test_value != 0 param_vec = torch.stack([test_value + non_zeros_mask * delta, test_value]) else: - param_vec = torch.tensor([test_value - delta, test_value + delta, test_value]) + param_vec = torch.stack([test_value - delta, test_value + delta, test_value]) crop_model_params_provider.set_override(param, param_vec, check=False) engine = EngineTestHelper( @@ -290,6 +322,7 @@ def test_phenology_with_different_parameter_values(self, param, delta): weather_data_provider, agro_management_inputs, phenology_config, + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -347,6 +380,7 @@ def test_phenology_with_multiple_parameter_vectors(self): weather_data_provider, agro_management_inputs, phenology_config, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -412,6 +446,7 @@ def test_phenology_with_multiple_parameter_arrays(self): weather_data_provider, agro_management_inputs, phenology_config, + device="cpu", ) engine.run_till_terminate() actual_results = engine.get_output() @@ -465,6 +500,7 @@ def test_phenology_with_incompatible_parameter_vectors(self): weather_data_provider, agro_management_inputs, phenology_config, + device="cpu", ) def test_phenology_with_incompatible_weather_parameter_vectors(self): @@ -505,10 +541,11 @@ def test_phenology_with_incompatible_weather_parameter_vectors(self): weather_data_provider, agro_management_inputs, phenology_config, + device="cpu", ) @pytest.mark.parametrize("test_data_url", wofost72_data_urls) - def test_wofost_pp_with_phenology(self, test_data_url): + def test_wofost_pp_with_phenology(self, test_data_url, monkeypatch): test_data = get_test_data(test_data_url) crop_model_params = [ "TSUMEM", @@ -527,10 +564,14 @@ def test_wofost_pp_with_phenology(self, test_data_url): "VERNDVS", ] (crop_model_params_provider, weather_data_provider, agro_management_inputs, _) = ( - prepare_engine_input(test_data, crop_model_params) + prepare_engine_input(test_data, crop_model_params, device="cpu") ) expected_results, expected_precision = test_data["ModelResults"], test_data["Precision"] + # Keep this integration test on CPU. + monkeypatch.setattr(DVS_Phenology, "device", "cpu") + monkeypatch.setattr(DVS_Phenology, "dtype", torch.float64) + with patch("pcse.crop.wofost72.Phenology", DVS_Phenology): model = Wofost72_PP( crop_model_params_provider, weather_data_provider, agro_management_inputs @@ -624,12 +665,14 @@ class TestDiffPhenologyDynamicsGradients: @pytest.mark.parametrize("param_name,output_name", no_gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_no_gradients(self, param_name, output_name, config_type): - model = get_test_diff_phenology_model() + def test_no_gradients(self, param_name, output_name, config_type, device): + model = get_test_diff_phenology_model(device=device) value, dtype = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=dtype)) + param = torch.nn.Parameter(torch.tensor(value, dtype=dtype, device=device)) output = model({param_name: param}) loss = output[output_name].sum() + if not loss.requires_grad: + return grads = torch.autograd.grad(loss, param, retain_graph=True, allow_unused=True)[0] if grads is not None: assert torch.all((grads == 0) | torch.isnan(grads)), ( @@ -638,10 +681,10 @@ def test_no_gradients(self, param_name, output_name, config_type): @pytest.mark.parametrize("param_name,output_name", gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_gradients_forward_backward_match(self, param_name, output_name, config_type): - model = get_test_diff_phenology_model() + def test_gradients_forward_backward_match(self, param_name, output_name, config_type, device): + model = get_test_diff_phenology_model(device=device) value, dtype = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=dtype)) + param = torch.nn.Parameter(torch.tensor(value, dtype=dtype, device=device)) output = model({param_name: param}) loss = output[output_name].sum() grads = torch.autograd.grad(loss, param, retain_graph=True)[0] @@ -650,17 +693,20 @@ def test_gradients_forward_backward_match(self, param_name, output_name, config_ loss.backward() grad_backward = param.grad assert grad_backward is not None - assert torch.all(grad_backward == grads) + assert torch.allclose(grad_backward, grads) @pytest.mark.parametrize("param_name,output_name", gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) - def test_gradients_numerical(self, param_name, output_name, config_type): + def test_gradients_numerical(self, param_name, output_name, config_type, device): value, _ = self.param_configs[config_type][param_name] - param = torch.nn.Parameter(torch.tensor(value, dtype=torch.float64)) + param = torch.nn.Parameter(torch.tensor(value, dtype=torch.float64, device=device)) numerical_grad = calculate_numerical_grad( - get_test_diff_phenology_model, param_name, param.data, output_name + lambda: get_test_diff_phenology_model(device=device), + param_name, + param.data, + output_name, ) - model = get_test_diff_phenology_model() + model = get_test_diff_phenology_model(device=device) output = model({param_name: param}) loss = output[output_name].sum() grads = torch.autograd.grad(loss, param, retain_graph=True)[0] @@ -670,6 +716,9 @@ def test_gradients_numerical(self, param_name, output_name, config_type): ) if torch.all(grads == 0): warnings.warn( - f"Gradient for par '{param_name}' wrt out '{output_name}' is zero: {grads.data}", + ( + f"Gradient for par '{param_name}' wrt out '{output_name}' is zero: " + f"{grads.data.detach().cpu().numpy()}" + ), UserWarning, ) diff --git a/tests/physical_models/crop/test_root_dynamics.py b/tests/physical_models/crop/test_root_dynamics.py index 5e8d594..fb8d620 100644 --- a/tests/physical_models/crop/test_root_dynamics.py +++ b/tests/physical_models/crop/test_root_dynamics.py @@ -13,24 +13,12 @@ from diffwofost.physical_models.utils import prepare_engine_input from .. import phy_data_folder -# Ignore deprecation warnings from pcse.base.simulationobject -pytestmark = pytest.mark.filterwarnings("ignore::DeprecationWarning:pcse.base.simulationobject") - root_dynamics_config = Configuration( CROP=WOFOST_Root_Dynamics, OUTPUT_VARS=["RD", "TWRT"], ) -@pytest.fixture(params=["cpu", "cuda"]) -def device(request): - """Fixture to parametrize tests over CPU and GPU devices.""" - device_name = request.param - if device_name == "cuda" and not torch.cuda.is_available(): - pytest.skip("CUDA not available") - return device_name - - def get_test_diff_root_model(device: str = "cpu"): test_data_url = f"{phy_data_folder}/test_rootdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -435,6 +423,7 @@ class TestDiffRootDynamicsGradients: "RRI": ["RD"], "RDMCR": ["RD"], "RDMSOL": ["RD"], + "RDRRTB": ["TWRT"], } # Generate all combinations diff --git a/tests/physical_models/fixtures.py b/tests/physical_models/fixtures.py new file mode 100644 index 0000000..59cf932 --- /dev/null +++ b/tests/physical_models/fixtures.py @@ -0,0 +1,15 @@ +import pytest +import torch + + +@pytest.fixture(params=["cpu", "cuda"]) +def device(request): + """Parametrize tests over CPU and GPU devices. + + Skips CUDA runs when CUDA isn't available. + """ + + device_name = request.param + if device_name == "cuda" and not torch.cuda.is_available(): + pytest.skip("CUDA not available") + return device_name From 04ec0fd0676fcc90ea02991bf323baf706d0550c Mon Sep 17 00:00:00 2001 From: SCiarella Date: Fri, 19 Dec 2025 10:10:14 +0100 Subject: [PATCH 09/17] Add fixture --- tests/physical_models/conftest.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/physical_models/conftest.py b/tests/physical_models/conftest.py index 312b193..e44ed44 100644 --- a/tests/physical_models/conftest.py +++ b/tests/physical_models/conftest.py @@ -2,7 +2,8 @@ import pytest import requests -# Shared fixtures (e.g. cpu/cuda parametrization) +# Load shared fixtures (e.g. cpu/cuda parametrization) +pytest_plugins = ["tests.physical_models.fixtures"] LOCAL_TEST_DIR = Path(__file__).parent / "test_data" BASE_PCSE_URL = "https://raw.githubusercontent.com/ajwdewit/pcse/refs/heads/master/tests/test_data" From 9f8e4ca1d390df35144a27aa734fc295dc613292 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Fri, 19 Dec 2025 10:37:03 +0100 Subject: [PATCH 10/17] Lint --- .../physical_models/crop/leaf_dynamics.py | 4 +- .../physical_models/crop/phenology.py | 50 +++++++++++-------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/diffwofost/physical_models/crop/leaf_dynamics.py b/src/diffwofost/physical_models/crop/leaf_dynamics.py index be2add0..70b9c81 100644 --- a/src/diffwofost/physical_models/crop/leaf_dynamics.py +++ b/src/diffwofost/physical_models/crop/leaf_dynamics.py @@ -253,7 +253,7 @@ def initialize( self.params = self.Parameters(parvalues) self.rates = self.RateVariables(kiosk) - # Create scalar constants once to avoid numerical deviations + # Create scalar constants once at the beginning to avoid recreating them self._zero = torch.tensor(0.0, dtype=self.dtype, device=self.device) self._epsilon = torch.tensor(1e-12, dtype=self.dtype, device=self.device) self._sigmoid_sharpness = torch.tensor(1e-16, dtype=self.dtype, device=self.device) @@ -264,7 +264,7 @@ def initialize( _exist_required_external_variables(self.kiosk) # TODO check if external variables are already torch tensors - # Get kiosk values and ensure they're on the correct device + # Get kiosk values and ensure they are on the correct device FL = torch.as_tensor(self.kiosk["FL"], dtype=self.dtype, device=self.device) FR = torch.as_tensor(self.kiosk["FR"], dtype=self.dtype, device=self.device) DVS = torch.as_tensor(self.kiosk["DVS"], dtype=self.dtype, device=self.device) diff --git a/src/diffwofost/physical_models/crop/phenology.py b/src/diffwofost/physical_models/crop/phenology.py index 2d4cef7..f84f1b4 100644 --- a/src/diffwofost/physical_models/crop/phenology.py +++ b/src/diffwofost/physical_models/crop/phenology.py @@ -179,6 +179,9 @@ def initialize(self, day, kiosk, parvalues, dvs_shape=None): """ self.params = self.Parameters(parvalues) self.params_shape = _get_params_shape(self.params) + + # Small epsilon tensor reused in multiple safe divisions. + self._epsilon = torch.tensor(1e-8, dtype=self.dtype, device=self.device) if dvs_shape is not None: if self.params_shape == (): self.params_shape = dvs_shape @@ -187,6 +190,10 @@ def initialize(self, day, kiosk, parvalues, dvs_shape=None): f"Vernalisation params shape {self.params_shape}" + " incompatible with dvs_shape {dvs_shape}" ) + + # Common constant tensors (same shape/dtype/device as this module). + self._ones = torch.ones(self.params_shape, dtype=self.dtype, device=self.device) + self._zeros = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) # Explicitly initialize rates self.rates = self.RateVariables(kiosk, publish=["VERNFAC"]) self.rates.VERNR = _broadcast_to( @@ -254,19 +261,18 @@ def calc_rates(self, day, drv): self.rates.VERNR = torch.where( vegetative_mask, params.VERNRTB(TEMP), - torch.zeros(self.params_shape, dtype=self.dtype, device=self.device), + self._zeros, ) # compute VERNFAC from current VERN for vegetative elements; others = 1 safe_den = VERNSAT - VERNBASE - EPS = torch.tensor(1e-8, dtype=self.dtype, device=self.device) - safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), EPS) + safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), self._epsilon) r = (self.states.VERN - VERNBASE) / safe_den vernfac_computed = torch.clamp(r, 0.0, 1.0) self.rates.VERNFAC = torch.where( vegetative_mask, vernfac_computed, - torch.ones(self.params_shape, dtype=self.dtype, device=self.device), + self._ones, ) # mark per-element force flags for elements that passed VERNDVS but aren't vernalised @@ -527,12 +533,15 @@ def initialize(self, day, kiosk, parvalues): self.params = self.Parameters(parvalues) self.params_shape = _get_params_shape(self.params) - # Ensure the Vernalisation submodule (if created) uses the same dtype/device - # as this phenology instance. Vernalisation defaults to CUDA when available, - # which can otherwise cause device mismatches in CPU runs. + # Small epsilon tensor reused in multiple safe divisions. + self._epsilon = torch.tensor(1e-8, dtype=self.dtype, device=self.device) + + # Ensure the Vernalisation submodule uses the same dtype/device as this phenology instance Vernalisation.device = self.device Vernalisation.dtype = self.dtype + # Helpler function to cast and broadcast all parameters to params_shape. + # Necessary if Vernalisation changes the params_shape during initialization. def _cast_and_broadcast_params(): p = self.params # Broadcast numeric parameters to the final params_shape and ensure dtype/device. @@ -579,6 +588,10 @@ def _cast_and_broadcast_params(): # After Vernalisation initialization the final params_shape may have changed. _cast_and_broadcast_params() + # Create scalar constants once at the beginning to avoid recreating them + self._ones = torch.ones(self.params_shape, dtype=self.dtype, device=self.device) + self._zeros = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) + # Initialize rates and kiosk self.rates = self.RateVariables(kiosk) self.kiosk = kiosk @@ -694,16 +707,13 @@ def calc_rates(self, day, drv): DAYLP = daylength(day, drv.LAT) DAYLP_t = _broadcast_to(DAYLP, shape, dtype=self.dtype, device=self.device) # Compute DVRED conditionally based on IDSL >= 1 - EPS = torch.tensor(1e-8, dtype=self.dtype, device=self.device) safe_den = p.DLO - p.DLC - safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), EPS) + safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), self._epsilon) dvred_active = torch.clamp((DAYLP_t - p.DLC) / safe_den, 0.0, 1.0) - DVRED = torch.where( - p.IDSL >= 1, dvred_active, torch.ones(shape, dtype=self.dtype, device=self.device) - ) + DVRED = torch.where(p.IDSL >= 1, dvred_active, self._ones) # Vernalisation factor - always compute if module exists - VERNFAC = torch.ones(shape, dtype=self.dtype, device=self.device) + VERNFAC = self._ones if hasattr(self, "vernalisation") and self.vernalisation is not None: # Always call calc_rates (it handles stage internally now) self.vernalisation.calc_rates(day, drv) @@ -712,15 +722,15 @@ def calc_rates(self, day, drv): VERNFAC = torch.where( (p.IDSL >= 2) & is_vegetative, self.kiosk["VERNFAC"], - torch.ones(shape, dtype=self.dtype, device=self.device), + self._ones, ) TEMP = _get_drv(drv.TEMP, shape, self.dtype, self.device) # Initialize all rate variables - r.DTSUME = torch.zeros(shape, dtype=self.dtype, device=self.device) - r.DTSUM = torch.zeros(shape, dtype=self.dtype, device=self.device) - r.DVR = torch.zeros(shape, dtype=self.dtype, device=self.device) + r.DTSUME = self._zeros + r.DTSUM = self._zeros + r.DVR = self._zeros # Compute rates for emerging stage (STAGE == 0) is_emerging = s.STAGE == 0 @@ -731,7 +741,7 @@ def calc_rates(self, day, drv): dtsume_emerging = torch.clamp(temp_diff, min=0.0) dtsume_emerging = torch.minimum(dtsume_emerging, max_diff) safe_den = p.TSUMEM - safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), EPS) + safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), self._epsilon) dvr_emerging = 0.1 * dtsume_emerging / safe_den r.DTSUME = torch.where(is_emerging, dtsume_emerging, r.DTSUME) @@ -742,7 +752,7 @@ def calc_rates(self, day, drv): if torch.any(is_vegetative): dtsum_vegetative = p.DTSMTB(TEMP) * VERNFAC * DVRED safe_den = p.TSUM1 - safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), EPS) + safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), self._epsilon) dvr_vegetative = dtsum_vegetative / safe_den r.DTSUM = torch.where(is_vegetative, dtsum_vegetative, r.DTSUM) @@ -753,7 +763,7 @@ def calc_rates(self, day, drv): if torch.any(is_reproductive): dtsum_reproductive = p.DTSMTB(TEMP) safe_den = p.TSUM2 - safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), EPS) + safe_den = safe_den.sign() * torch.maximum(torch.abs(safe_den), self._epsilon) dvr_reproductive = dtsum_reproductive / safe_den r.DTSUM = torch.where(is_reproductive, dtsum_reproductive, r.DTSUM) From b266af33122d26ed798d62cd9acaed71954c6306 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Fri, 19 Dec 2025 10:50:06 +0100 Subject: [PATCH 11/17] Lint --- tests/physical_models/conftest.py | 17 ++++++++++++++--- tests/physical_models/fixtures.py | 15 --------------- 2 files changed, 14 insertions(+), 18 deletions(-) delete mode 100644 tests/physical_models/fixtures.py diff --git a/tests/physical_models/conftest.py b/tests/physical_models/conftest.py index e44ed44..b9d317d 100644 --- a/tests/physical_models/conftest.py +++ b/tests/physical_models/conftest.py @@ -1,9 +1,7 @@ from pathlib import Path import pytest import requests - -# Load shared fixtures (e.g. cpu/cuda parametrization) -pytest_plugins = ["tests.physical_models.fixtures"] +import torch LOCAL_TEST_DIR = Path(__file__).parent / "test_data" BASE_PCSE_URL = "https://raw.githubusercontent.com/ajwdewit/pcse/refs/heads/master/tests/test_data" @@ -40,3 +38,16 @@ def download_test_files(): """Download all required test files before running tests.""" for file_name in FILE_NAMES: download_file(file_name) + + +@pytest.fixture(params=["cpu", "cuda"]) +def device(request): + """Parametrize tests over CPU and GPU devices. + + Skips CUDA runs when CUDA isn't available. + """ + + device_name = request.param + if device_name == "cuda" and not torch.cuda.is_available(): + pytest.skip("CUDA not available") + return device_name diff --git a/tests/physical_models/fixtures.py b/tests/physical_models/fixtures.py deleted file mode 100644 index 59cf932..0000000 --- a/tests/physical_models/fixtures.py +++ /dev/null @@ -1,15 +0,0 @@ -import pytest -import torch - - -@pytest.fixture(params=["cpu", "cuda"]) -def device(request): - """Parametrize tests over CPU and GPU devices. - - Skips CUDA runs when CUDA isn't available. - """ - - device_name = request.param - if device_name == "cuda" and not torch.cuda.is_available(): - pytest.skip("CUDA not available") - return device_name From cf8dd83d7272c53a6e677dc538c71c1e9f801164 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Wed, 7 Jan 2026 14:18:54 +0100 Subject: [PATCH 12/17] Ignore optimizaion.ipynb --- docs/notebooks/optimization.ipynb | 122 +++++++----------------------- 1 file changed, 28 insertions(+), 94 deletions(-) diff --git a/docs/notebooks/optimization.ipynb b/docs/notebooks/optimization.ipynb index 789a0e8..48fe890 100644 --- a/docs/notebooks/optimization.ipynb +++ b/docs/notebooks/optimization.ipynb @@ -56,65 +56,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "e4049fea-1d05-41f1-bf9d-f030ae83a324", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: diffwofost in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (0.2.0)\n", - "Requirement already satisfied: torch in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from diffwofost) (2.9.0)\n", - "Requirement already satisfied: pcse in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from diffwofost) (6.0.9)\n", - "Requirement already satisfied: SQLAlchemy<2.0,>=1.3.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (1.4.54)\n", - "Requirement already satisfied: PyYAML>=5.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (6.0.3)\n", - "Requirement already satisfied: openpyxl>=3.0.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (3.1.5)\n", - "Requirement already satisfied: requests>=2.0.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (2.32.5)\n", - "Requirement already satisfied: pandas>=0.25 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (2.3.3)\n", - "Requirement already satisfied: traitlets-pcse==5.0.0.dev in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (5.0.0.dev0)\n", - "Requirement already satisfied: dotmap>=1.3 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pcse->diffwofost) (1.3.30)\n", - "Requirement already satisfied: ipython_genutils in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from traitlets-pcse==5.0.0.dev->pcse->diffwofost) (0.2.0)\n", - "Requirement already satisfied: six in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from traitlets-pcse==5.0.0.dev->pcse->diffwofost) (1.17.0)\n", - "Requirement already satisfied: decorator in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from traitlets-pcse==5.0.0.dev->pcse->diffwofost) (5.2.1)\n", - "Requirement already satisfied: filelock in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.20.0)\n", - "Requirement already satisfied: typing-extensions>=4.10.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (4.15.0)\n", - "Requirement already satisfied: setuptools in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (80.9.0)\n", - "Requirement already satisfied: sympy>=1.13.3 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (1.14.0)\n", - "Requirement already satisfied: networkx>=2.5.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.5)\n", - "Requirement already satisfied: jinja2 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.1.6)\n", - "Requirement already satisfied: fsspec>=0.8.5 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (2025.9.0)\n", - "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.8.93 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.93)\n", - "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.8.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.90)\n", - "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.8.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.90)\n", - "Requirement already satisfied: nvidia-cudnn-cu12==9.10.2.21 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (9.10.2.21)\n", - "Requirement already satisfied: nvidia-cublas-cu12==12.8.4.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.4.1)\n", - "Requirement already satisfied: nvidia-cufft-cu12==11.3.3.83 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (11.3.3.83)\n", - "Requirement already satisfied: nvidia-curand-cu12==10.3.9.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (10.3.9.90)\n", - "Requirement already satisfied: nvidia-cusolver-cu12==11.7.3.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (11.7.3.90)\n", - "Requirement already satisfied: nvidia-cusparse-cu12==12.5.8.93 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.5.8.93)\n", - "Requirement already satisfied: nvidia-cusparselt-cu12==0.7.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (0.7.1)\n", - "Requirement already satisfied: nvidia-nccl-cu12==2.27.5 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (2.27.5)\n", - "Requirement already satisfied: nvidia-nvshmem-cu12==3.3.20 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.3.20)\n", - "Requirement already satisfied: nvidia-nvtx-cu12==12.8.90 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.90)\n", - "Requirement already satisfied: nvidia-nvjitlink-cu12==12.8.93 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (12.8.93)\n", - "Requirement already satisfied: nvidia-cufile-cu12==1.13.1.3 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (1.13.1.3)\n", - "Requirement already satisfied: triton==3.5.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from torch->diffwofost) (3.5.0)\n", - "Requirement already satisfied: et-xmlfile in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from openpyxl>=3.0.0->pcse->diffwofost) (2.0.0)\n", - "Requirement already satisfied: numpy>=1.26.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pandas>=0.25->pcse->diffwofost) (2.3.4)\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pandas>=0.25->pcse->diffwofost) (2.9.0.post0)\n", - "Requirement already satisfied: pytz>=2020.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pandas>=0.25->pcse->diffwofost) (2025.2)\n", - "Requirement already satisfied: tzdata>=2022.7 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from pandas>=0.25->pcse->diffwofost) (2025.2)\n", - "Requirement already satisfied: charset_normalizer<4,>=2 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from requests>=2.0.0->pcse->diffwofost) (3.4.4)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from requests>=2.0.0->pcse->diffwofost) (3.11)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from requests>=2.0.0->pcse->diffwofost) (2.5.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from requests>=2.0.0->pcse->diffwofost) (2025.10.5)\n", - "Requirement already satisfied: greenlet!=0.4.17 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from SQLAlchemy<2.0,>=1.3.0->pcse->diffwofost) (3.2.4)\n", - "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from sympy>=1.13.3->torch->diffwofost) (1.3.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/simone/.virtualenvs/dwof/lib/python3.12/site-packages (from jinja2->torch->diffwofost) (3.0.3)\n" - ] - } - ], + "outputs": [], "source": [ "# install diffwofost\n", "!pip install diffwofost" @@ -122,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "21731653-3976-4bb9-b83b-b11d78211700", "metadata": {}, "outputs": [], @@ -139,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "82a1ef6b-336e-4902-8bd1-2a1ed2020f9d", "metadata": {}, "outputs": [], @@ -169,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "id": "0233a048-e5a2-4249-887d-35a37284769c", "metadata": {}, "outputs": [ @@ -201,26 +146,15 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "id": "b4a24f1c-77e4-4b05-bde9-229dd497f09e", "metadata": {}, "outputs": [ { - "ename": "HTTPError", - "evalue": "HTTP Error 404: Not Found", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mHTTPError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[5]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m 1\u001b[39m url = \u001b[33m\"\u001b[39m\u001b[33mhttps://raw.githubusercontent.com/WUR-AI/diffWOFOST/refs/heads/main/tests/physical_models/test_data/WOFOST_Leaf_Dynamics.conf\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 2\u001b[39m filename = \u001b[33m\"\u001b[39m\u001b[33mWOFOST_Leaf_Dynamics.conf\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m \u001b[43murllib\u001b[49m\u001b[43m.\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m.\u001b[49m\u001b[43murlretrieve\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfilename\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 5\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mDownloaded: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfilename\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n", - "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/urllib/request.py:240\u001b[39m, in \u001b[36murlretrieve\u001b[39m\u001b[34m(url, filename, reporthook, data)\u001b[39m\n\u001b[32m 223\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m 224\u001b[39m \u001b[33;03mRetrieve a URL into a temporary location on disk.\u001b[39;00m\n\u001b[32m 225\u001b[39m \n\u001b[32m (...)\u001b[39m\u001b[32m 236\u001b[39m \u001b[33;03mdata file as well as the resulting HTTPMessage object.\u001b[39;00m\n\u001b[32m 237\u001b[39m \u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m 238\u001b[39m url_type, path = _splittype(url)\n\u001b[32m--> \u001b[39m\u001b[32m240\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m contextlib.closing(\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m) \u001b[38;5;28;01mas\u001b[39;00m fp:\n\u001b[32m 241\u001b[39m headers = fp.info()\n\u001b[32m 243\u001b[39m \u001b[38;5;66;03m# Just return the local path and the \"headers\" for file://\u001b[39;00m\n\u001b[32m 244\u001b[39m \u001b[38;5;66;03m# URLs. No sense in performing a copy unless requested.\u001b[39;00m\n", - "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/urllib/request.py:215\u001b[39m, in \u001b[36murlopen\u001b[39m\u001b[34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[39m\n\u001b[32m 213\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 214\u001b[39m opener = _opener\n\u001b[32m--> \u001b[39m\u001b[32m215\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mopener\u001b[49m\u001b[43m.\u001b[49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/urllib/request.py:521\u001b[39m, in \u001b[36mOpenerDirector.open\u001b[39m\u001b[34m(self, fullurl, data, timeout)\u001b[39m\n\u001b[32m 519\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m processor \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m.process_response.get(protocol, []):\n\u001b[32m 520\u001b[39m meth = \u001b[38;5;28mgetattr\u001b[39m(processor, meth_name)\n\u001b[32m--> \u001b[39m\u001b[32m521\u001b[39m response = \u001b[43mmeth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 523\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", - "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/urllib/request.py:630\u001b[39m, in \u001b[36mHTTPErrorProcessor.http_response\u001b[39m\u001b[34m(self, request, response)\u001b[39m\n\u001b[32m 627\u001b[39m \u001b[38;5;66;03m# According to RFC 2616, \"2xx\" code indicates that the client's\u001b[39;00m\n\u001b[32m 628\u001b[39m \u001b[38;5;66;03m# request was successfully received, understood, and accepted.\u001b[39;00m\n\u001b[32m 629\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[32m200\u001b[39m <= code < \u001b[32m300\u001b[39m):\n\u001b[32m--> \u001b[39m\u001b[32m630\u001b[39m response = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mparent\u001b[49m\u001b[43m.\u001b[49m\u001b[43merror\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 631\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mhttp\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhdrs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 633\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", - "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/urllib/request.py:559\u001b[39m, in \u001b[36mOpenerDirector.error\u001b[39m\u001b[34m(self, proto, *args)\u001b[39m\n\u001b[32m 557\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m http_err:\n\u001b[32m 558\u001b[39m args = (\u001b[38;5;28mdict\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mdefault\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mhttp_error_default\u001b[39m\u001b[33m'\u001b[39m) + orig_args\n\u001b[32m--> \u001b[39m\u001b[32m559\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/urllib/request.py:492\u001b[39m, in \u001b[36mOpenerDirector._call_chain\u001b[39m\u001b[34m(self, chain, kind, meth_name, *args)\u001b[39m\n\u001b[32m 490\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[32m 491\u001b[39m func = \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[32m--> \u001b[39m\u001b[32m492\u001b[39m result = \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 493\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m 494\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", - "\u001b[36mFile \u001b[39m\u001b[32m/usr/lib/python3.12/urllib/request.py:639\u001b[39m, in \u001b[36mHTTPDefaultErrorHandler.http_error_default\u001b[39m\u001b[34m(self, req, fp, code, msg, hdrs)\u001b[39m\n\u001b[32m 638\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mhttp_error_default\u001b[39m(\u001b[38;5;28mself\u001b[39m, req, fp, code, msg, hdrs):\n\u001b[32m--> \u001b[39m\u001b[32m639\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m HTTPError(req.full_url, code, msg, hdrs, fp)\n", - "\u001b[31mHTTPError\u001b[39m: HTTP Error 404: Not Found" + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloaded: WOFOST_Leaf_Dynamics.conf\n" ] } ], @@ -246,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "9f3105fb-4fbe-4405-9fd4-e8255b4b119e", "metadata": {}, "outputs": [], @@ -281,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "e4610238-de0d-42cf-9689-3c074eb2cc0e", "metadata": {}, "outputs": [], @@ -318,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "36dd6463-4812-41c0-b2bf-d4769df1136f", "metadata": {}, "outputs": [], @@ -366,7 +300,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "0dcd85c8-624c-4b58-a7c9-893316110d98", "metadata": {}, "outputs": [ @@ -420,7 +354,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "c2d3a463-43a4-4b29-a71f-696c019343d3", "metadata": {}, "outputs": [ @@ -468,7 +402,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "eaa4c172-9719-4a79-b2f2-d37ea5b6f11d", "metadata": {}, "outputs": [], @@ -485,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "26437aed-755d-4ee3-b7b6-82caf8c30ec5", "metadata": {}, "outputs": [], @@ -513,7 +447,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "22000922-68be-47ed-8afa-2e97c56bb502", "metadata": {}, "outputs": [ @@ -545,7 +479,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "ae2de6dc-1294-4a5a-91d0-3e83f28dc892", "metadata": {}, "outputs": [ @@ -567,7 +501,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "a69e9279-49eb-4136-8f15-7cff8bb4af52", "metadata": {}, "outputs": [], @@ -579,7 +513,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "d560476b-64f9-422c-9722-8d0778cfc574", "metadata": {}, "outputs": [], @@ -614,7 +548,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "cbfc9e28-3233-4808-b658-36d6f7d18d75", "metadata": {}, "outputs": [], @@ -650,7 +584,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "90296352-4817-4586-842c-12ac6d97d779", "metadata": {}, "outputs": [], @@ -693,7 +627,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "f2a1a612-f33c-48a0-a3d4-31318d78b9f4", "metadata": {}, "outputs": [], @@ -710,7 +644,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "6c09d1ce-db66-46f3-93d2-1b16f8196e49", "metadata": {}, "outputs": [ @@ -754,7 +688,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "2029e2dd-7460-4c71-85a9-b1030a43167b", "metadata": {}, "outputs": [ @@ -782,7 +716,7 @@ ], "metadata": { "kernelspec": { - "display_name": "dwof", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -796,7 +730,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.12.11" } }, "nbformat": 4, From dde431b243b0c2bf932e723e47c50e7521c421df Mon Sep 17 00:00:00 2001 From: SCiarella Date: Wed, 7 Jan 2026 15:16:26 +0100 Subject: [PATCH 13/17] Centralized control of device and dtype --- src/diffwofost/physical_models/config.py | 135 ++++++++++++++++++ .../physical_models/crop/leaf_dynamics.py | 49 +++---- .../physical_models/crop/phenology.py | 97 ++++++------- .../physical_models/crop/root_dynamics.py | 51 +++---- tests/physical_models/conftest.py | 11 +- .../crop/test_leaf_dynamics.py | 8 +- tests/physical_models/test_config.py | 40 ++++++ 7 files changed, 288 insertions(+), 103 deletions(-) diff --git a/src/diffwofost/physical_models/config.py b/src/diffwofost/physical_models/config.py index 3a36c76..ed348bb 100644 --- a/src/diffwofost/physical_models/config.py +++ b/src/diffwofost/physical_models/config.py @@ -3,11 +3,146 @@ from pathlib import Path from typing import Self import pcse +import torch from pcse.agromanager import AgroManager from pcse.base import AncillaryObject from pcse.base import SimulationObject +class ComputeConfig: + """Central configuration for device and dtype settings. + + This class provides a centralized way to control PyTorch device and dtype + settings across all simulation objects in diffWOFOST. Instead of setting + device and dtype individually for each class, use this central configuration + to apply settings globally. + + **Default Behavior:** + + - **Device**: Automatically defaults to 'cuda' if available, otherwise 'cpu' + - **Dtype**: Defaults to torch.float64 + + **Basic Usage:** + + >>> from diffwofost.physical_models.config import ComputeConfig + >>> import torch + >>> + >>> # Set device to CPU + >>> ComputeConfig.set_device('cpu') + >>> + >>> # Or use a torch.device object + >>> ComputeConfig.set_device(torch.device('cuda')) + >>> + >>> # Set dtype to float32 + >>> ComputeConfig.set_dtype(torch.float32) + >>> + >>> # Get current settings + >>> device = ComputeConfig.get_device() # Returns: torch.device('cpu') + >>> dtype = ComputeConfig.get_dtype() # Returns: torch.float32 + + **Using with Simulation Objects:** + + All simulation objects (e.g., WOFOST_Leaf_Dynamics, WOFOST_Phenology) + automatically use the settings from ComputeConfig. No changes needed to + instantiation code: + + >>> from diffwofost.physical_models.config import ComputeConfig + >>> from diffwofost.physical_models.crop.leaf_dynamics import WOFOST_Leaf_Dynamics + >>> + >>> # Set global compute settings + >>> ComputeConfig.set_device('cuda') + >>> ComputeConfig.set_dtype(torch.float32) + >>> + >>> # Instantiate objects - they automatically use global settings + >>> leaf_dynamics = WOFOST_Leaf_Dynamics() + + **Switching Between Devices:** + + Useful for switching between GPU training and CPU evaluation: + + >>> # Train on GPU + >>> ComputeConfig.set_device('cuda') + >>> ComputeConfig.set_dtype(torch.float32) + >>> # ... run training ... + >>> + >>> # Evaluate on CPU + >>> ComputeConfig.set_device('cpu') + >>> ComputeConfig.set_dtype(torch.float64) + >>> # ... run evaluation ... + + **Resetting to Defaults:** + + >>> ComputeConfig.reset_to_defaults() + + """ + + _device: torch.device = None + _dtype: torch.dtype = None + + @classmethod + def _initialize_defaults(cls): + """Initialize default device and dtype if not already set.""" + if cls._device is None: + cls._device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + if cls._dtype is None: + cls._dtype = torch.float64 + + @classmethod + def get_device(cls) -> torch.device: + """Get the current device setting. + + Returns: + torch.device: The current device (cuda or cpu) + """ + cls._initialize_defaults() + return cls._device + + @classmethod + def set_device(cls, device: str | torch.device) -> None: + """Set the device to use for tensor operations. + + Args: + device (str | torch.device): Device to use ('cuda', 'cpu', or torch.device object) + + Example: + >>> ComputeConfig.set_device('cuda') + >>> ComputeConfig.set_device(torch.device('cpu')) + """ + if isinstance(device, str): + cls._device = torch.device(device) + else: + cls._device = device + + @classmethod + def get_dtype(cls) -> torch.dtype: + """Get the current dtype setting. + + Returns: + torch.dtype: The current dtype (e.g., torch.float32, torch.float64) + """ + cls._initialize_defaults() + return cls._dtype + + @classmethod + def set_dtype(cls, dtype: torch.dtype) -> None: + """Set the dtype to use for tensor creation. + + Args: + dtype (torch.dtype): PyTorch dtype (torch.float32, torch.float64, etc.) + + Example: + >>> ComputeConfig.set_dtype(torch.float32) + """ + cls._dtype = dtype + + @classmethod + def reset_to_defaults(cls) -> None: + """Reset device and dtype to their default values.""" + cls._device = None + cls._dtype = None + cls._initialize_defaults() + + @dataclass(frozen=True) class Configuration: """Class to store model configuration from a PCSE configuration files.""" diff --git a/src/diffwofost/physical_models/crop/leaf_dynamics.py b/src/diffwofost/physical_models/crop/leaf_dynamics.py index 70b9c81..75d68b6 100644 --- a/src/diffwofost/physical_models/crop/leaf_dynamics.py +++ b/src/diffwofost/physical_models/crop/leaf_dynamics.py @@ -12,6 +12,7 @@ from pcse.decorators import prepare_rates from pcse.decorators import prepare_states from pcse.traitlets import Any +from diffwofost.physical_models.config import ComputeConfig from diffwofost.physical_models.utils import AfgenTrait from diffwofost.physical_models.utils import _broadcast_to from diffwofost.physical_models.utils import _get_drv @@ -120,9 +121,15 @@ class WOFOST_Leaf_Dynamics(SimulationObject): MAX_DAYS = 365 # Maximum number of days that can be simulated in one run (i.e. array lenghts) params_shape = None # Shape of the parameters tensors - # Default values that can be overridden before instantiation - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - dtype = torch.float64 + @property + def device(self): + """Get device from ComputeConfig.""" + return ComputeConfig.get_device() + + @property + def dtype(self): + """Get dtype from ComputeConfig.""" + return ComputeConfig.get_dtype() class Parameters(ParamTemplate): RGRLAI = Any() @@ -133,14 +140,12 @@ class Parameters(ParamTemplate): SLATB = AfgenTrait() KDIFTB = AfgenTrait() - def __init__(self, parvalues, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device + def __init__(self, parvalues): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device + # Set default values self.RGRLAI = [torch.tensor(-99.0, dtype=dtype, device=device)] self.SPAN = [torch.tensor(-99.0, dtype=dtype, device=device)] self.TBASE = [torch.tensor(-99.0, dtype=dtype, device=device)] @@ -163,14 +168,12 @@ class StateVariables(StatesTemplate): DWLV = Any() TWLV = Any() - def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device + def __init__(self, kiosk, publish=None, **kwargs): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device if not in kwargs + # Set default values if "LV" not in kwargs: self.LV = [torch.tensor(-99.0, dtype=dtype, device=device)] if "SLA" not in kwargs: @@ -210,14 +213,12 @@ class RateVariables(RatesTemplate): GLAIEX = Any() GLASOL = Any() - def __init__(self, kiosk, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Leaf_Dynamics.dtype - if device is None: - device = WOFOST_Leaf_Dynamics.device + def __init__(self, kiosk): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device + # Set default values self.GRLV = torch.tensor(0.0, dtype=dtype, device=device) self.DSLV1 = torch.tensor(0.0, dtype=dtype, device=device) self.DSLV2 = torch.tensor(0.0, dtype=dtype, device=device) diff --git a/src/diffwofost/physical_models/crop/phenology.py b/src/diffwofost/physical_models/crop/phenology.py index f84f1b4..d62c4a9 100644 --- a/src/diffwofost/physical_models/crop/phenology.py +++ b/src/diffwofost/physical_models/crop/phenology.py @@ -20,6 +20,7 @@ from pcse.traitlets import Enum from pcse.traitlets import Instance from pcse.util import daylength +from diffwofost.physical_models.config import ComputeConfig from diffwofost.physical_models.utils import AfgenTrait from diffwofost.physical_models.utils import _broadcast_to from diffwofost.physical_models.utils import _get_drv @@ -91,9 +92,15 @@ class Vernalisation(SimulationObject): params_shape = None # Shape of the parameters tensors - # Default values that can be overridden before instantiation - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - dtype = torch.float64 + @property + def device(self): + """Get device from ComputeConfig.""" + return ComputeConfig.get_device() + + @property + def dtype(self): + """Get dtype from ComputeConfig.""" + return ComputeConfig.get_dtype() class Parameters(ParamTemplate): VERNSAT = Any() @@ -101,14 +108,12 @@ class Parameters(ParamTemplate): VERNRTB = AfgenTrait() VERNDVS = Any() - def __init__(self, parvalues, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = Vernalisation.dtype - if device is None: - device = Vernalisation.device + def __init__(self, parvalues): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device + # Set default values using the ComputeConfig dtype and device self.VERNSAT = torch.tensor(-99.0, dtype=dtype, device=device) self.VERNBASE = torch.tensor(-99.0, dtype=dtype, device=device) self.VERNDVS = torch.tensor(-99.0, dtype=dtype, device=device) @@ -120,14 +125,12 @@ class RateVariables(RatesTemplate): VERNR = Any() VERNFAC = Any() - def __init__(self, kiosk, publish=None, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = Vernalisation.dtype - if device is None: - device = Vernalisation.device + def __init__(self, kiosk, publish=None): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device + # Set default values using the ComputeConfig dtype and device self.VERNR = torch.tensor(0.0, dtype=dtype, device=device) self.VERNFAC = torch.tensor(0.0, dtype=dtype, device=device) @@ -139,14 +142,12 @@ class StateVariables(StatesTemplate): DOV = Any() ISVERNALISED = Any() - def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = Vernalisation.dtype - if device is None: - device = Vernalisation.device + def __init__(self, kiosk, publish=None, **kwargs): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device if not in kwargs + # Set default values using the ComputeConfig dtype and device if not in kwargs if "VERN" not in kwargs: self.VERN = torch.tensor(-99.0, dtype=dtype, device=device) if "DOV" not in kwargs: @@ -421,9 +422,15 @@ class DVS_Phenology(SimulationObject): params_shape = None # Shape of the parameters tensors - # Default values that can be overridden before instantiation - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - dtype = torch.float64 + @property + def device(self): + """Get device from ComputeConfig.""" + return ComputeConfig.get_device() + + @property + def dtype(self): + """Get dtype from ComputeConfig.""" + return ComputeConfig.get_dtype() class Parameters(ParamTemplate): TSUMEM = Any() @@ -440,14 +447,12 @@ class Parameters(ParamTemplate): CROP_START_TYPE = Enum(["sowing", "emergence"]) CROP_END_TYPE = Enum(["maturity", "harvest", "earliest"]) - def __init__(self, parvalues, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = DVS_Phenology.dtype - if device is None: - device = DVS_Phenology.device + def __init__(self, parvalues): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device + # Set default values using the ComputeConfig dtype and device self.TSUMEM = torch.tensor(-99.0, dtype=dtype, device=device) self.TBASEM = torch.tensor(-99.0, dtype=dtype, device=device) self.TEFFMX = torch.tensor(-99.0, dtype=dtype, device=device) @@ -467,14 +472,12 @@ class RateVariables(RatesTemplate): DTSUM = Any() DVR = Any() - def __init__(self, kiosk, publish=None, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = DVS_Phenology.dtype - if device is None: - device = DVS_Phenology.device + def __init__(self, kiosk, publish=None): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device + # Set default values self.DTSUME = torch.tensor(0.0, dtype=dtype, device=device) self.DTSUM = torch.tensor(0.0, dtype=dtype, device=device) self.DVR = torch.tensor(0.0, dtype=dtype, device=device) @@ -493,14 +496,12 @@ class StateVariables(StatesTemplate): DOH = Any() STAGE = Any() - def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = DVS_Phenology.dtype - if device is None: - device = DVS_Phenology.device + def __init__(self, kiosk, publish=None, **kwargs): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device if not in kwargs + # Set default values if "DVS" not in kwargs: self.DVS = torch.tensor(-99.0, dtype=dtype, device=device) if "TSUM" not in kwargs: diff --git a/src/diffwofost/physical_models/crop/root_dynamics.py b/src/diffwofost/physical_models/crop/root_dynamics.py index 72a151f..018b65b 100644 --- a/src/diffwofost/physical_models/crop/root_dynamics.py +++ b/src/diffwofost/physical_models/crop/root_dynamics.py @@ -10,6 +10,7 @@ from pcse.decorators import prepare_rates from pcse.decorators import prepare_states from pcse.traitlets import Any +from diffwofost.physical_models.config import ComputeConfig from diffwofost.physical_models.utils import AfgenTrait from diffwofost.physical_models.utils import _broadcast_to from diffwofost.physical_models.utils import _get_params_shape @@ -115,12 +116,18 @@ class WOFOST_Root_Dynamics(SimulationObject): better and more biophysical approach to root development in WOFOST. """ # noqa: E501 - # Default values that can be overridden before instantiation - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - dtype = torch.float64 - params_shape = None # Shape of the parameters tensors + @property + def device(self): + """Get device from ComputeConfig.""" + return ComputeConfig.get_device() + + @property + def dtype(self): + """Get dtype from ComputeConfig.""" + return ComputeConfig.get_dtype() + class Parameters(ParamTemplate): RDI = Any() RRI = Any() @@ -130,14 +137,12 @@ class Parameters(ParamTemplate): IAIRDU = Any() RDRRTB = AfgenTrait() - def __init__(self, parvalues, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Root_Dynamics.dtype - if device is None: - device = WOFOST_Root_Dynamics.device + def __init__(self, parvalues): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device + # Set default values self.RDI = [torch.tensor(-99.0, dtype=dtype, device=device)] self.RRI = [torch.tensor(-99.0, dtype=dtype, device=device)] self.RDMCR = [torch.tensor(-99.0, dtype=dtype, device=device)] @@ -154,14 +159,12 @@ class RateVariables(RatesTemplate): DRRT = Any() GWRT = Any() - def __init__(self, kiosk, publish=None, dtype=None, device=None): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Root_Dynamics.dtype - if device is None: - device = WOFOST_Root_Dynamics.device + def __init__(self, kiosk, publish=None): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device + # Set default values self.RR = torch.tensor(0.0, dtype=dtype, device=device) self.GRRT = torch.tensor(0.0, dtype=dtype, device=device) self.DRRT = torch.tensor(0.0, dtype=dtype, device=device) @@ -177,14 +180,12 @@ class StateVariables(StatesTemplate): DWRT = Any() TWRT = Any() - def __init__(self, kiosk, publish=None, dtype=None, device=None, **kwargs): - # Get dtype and device from parent class if not provided - if dtype is None: - dtype = WOFOST_Root_Dynamics.dtype - if device is None: - device = WOFOST_Root_Dynamics.device + def __init__(self, kiosk, publish=None, **kwargs): + # Get dtype and device from ComputeConfig + dtype = ComputeConfig.get_dtype() + device = ComputeConfig.get_device() - # Set default values using the provided dtype and device if not in kwargs + # Set default values if "RD" not in kwargs: self.RD = [torch.tensor(-99.0, dtype=dtype, device=device)] if "RDM" not in kwargs: diff --git a/tests/physical_models/conftest.py b/tests/physical_models/conftest.py index b9d317d..dba659f 100644 --- a/tests/physical_models/conftest.py +++ b/tests/physical_models/conftest.py @@ -2,6 +2,7 @@ import pytest import requests import torch +from diffwofost.physical_models.config import ComputeConfig LOCAL_TEST_DIR = Path(__file__).parent / "test_data" BASE_PCSE_URL = "https://raw.githubusercontent.com/ajwdewit/pcse/refs/heads/master/tests/test_data" @@ -44,10 +45,18 @@ def download_test_files(): def device(request): """Parametrize tests over CPU and GPU devices. + Sets the global ComputeConfig to use the specified device. Skips CUDA runs when CUDA isn't available. """ device_name = request.param if device_name == "cuda" and not torch.cuda.is_available(): pytest.skip("CUDA not available") - return device_name + + # Set the global ComputeConfig to use the specified device + ComputeConfig.set_device(device_name) + + yield device_name + + # Reset to defaults after the test + ComputeConfig.reset_to_defaults() diff --git a/tests/physical_models/crop/test_leaf_dynamics.py b/tests/physical_models/crop/test_leaf_dynamics.py index 1e12503..396fde8 100644 --- a/tests/physical_models/crop/test_leaf_dynamics.py +++ b/tests/physical_models/crop/test_leaf_dynamics.py @@ -57,8 +57,6 @@ def __init__( def forward(self, params_dict): # pass new value of parameters to the model for name, value in params_dict.items(): - if isinstance(value, torch.Tensor) and value.device.type != self.device: - value = value.to(self.device) self.crop_model_params_provider.set_override(name, value, check=False) engine = EngineTestHelper( @@ -86,7 +84,7 @@ class TestLeafDynamics: for i in range(1, 45) # there are 44 test files ] - @pytest.mark.parametrize("test_data_url", leafdynamics_data_urls[:3]) # Test subset for GPU + @pytest.mark.parametrize("test_data_url", leafdynamics_data_urls) # Test subset for GPU def test_leaf_dynamics_with_testengine(self, test_data_url, device): """EngineTestHelper and not Engine because it allows to specify `external_states`.""" # prepare model input @@ -310,7 +308,7 @@ def test_leaf_dynamics_with_multiple_parameter_vectors(self): for var, precision in expected_precision.items() ) - def test_leaf_dynamics_with_multiple_parameter_arrays(self): + def test_leaf_dynamics_with_multiple_parameter_arrays(self, device): # prepare model input test_data_url = f"{phy_data_folder}/test_leafdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -340,7 +338,7 @@ def test_leaf_dynamics_with_multiple_parameter_arrays(self): agro_management_inputs, leaf_dynamics_config, external_states, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() diff --git a/tests/physical_models/test_config.py b/tests/physical_models/test_config.py index b7efe2d..397d1b4 100644 --- a/tests/physical_models/test_config.py +++ b/tests/physical_models/test_config.py @@ -1,6 +1,8 @@ +import torch from pcse.agromanager import AgroManager from pcse.crop.phenology import DVS_Phenology from pcse.soil.classic_waterbalance import WaterbalancePP +from diffwofost.physical_models.config import ComputeConfig from diffwofost.physical_models.config import Configuration from diffwofost.physical_models.crop.leaf_dynamics import WOFOST_Leaf_Dynamics from . import phy_data_folder @@ -54,3 +56,41 @@ def test_output_variables_can_be_updated(self): assert config.OUTPUT_VARS == ["DVS", "LAI"] assert config.SUMMARY_OUTPUT_VARS == ["LAI"] assert config.TERMINAL_OUTPUT_VARS == ["DVS"] + + +class TestComputeConfig: + def test_default_device_is_cuda_or_cpu(self): + ComputeConfig.reset_to_defaults() + device = ComputeConfig.get_device() + assert device.type in ["cpu", "cuda"] + + def test_default_dtype_is_float64(self): + ComputeConfig.reset_to_defaults() + dtype = ComputeConfig.get_dtype() + assert dtype == torch.float64 + + def test_set_device_with_string(self): + ComputeConfig.set_device("cpu") + device = ComputeConfig.get_device() + assert device.type == "cpu" + + def test_set_device_with_torch_device(self): + ComputeConfig.set_device(torch.device("cpu")) + device = ComputeConfig.get_device() + assert device.type == "cpu" + + def test_set_dtype(self): + ComputeConfig.set_dtype(torch.float32) + dtype = ComputeConfig.get_dtype() + assert dtype == torch.float32 + + def test_reset_to_defaults(self): + ComputeConfig.set_device("cpu") + ComputeConfig.set_dtype(torch.float32) + ComputeConfig.reset_to_defaults() + + device = ComputeConfig.get_device() + dtype = ComputeConfig.get_dtype() + + assert device.type in ["cpu", "cuda"] + assert dtype == torch.float64 From c600b7e44284811b02077f3d0b2cba5edc5c5fd3 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Wed, 7 Jan 2026 16:29:09 +0100 Subject: [PATCH 14/17] Reformat --- .../physical_models/crop/phenology.py | 69 +++++++++---------- .../physical_models/crop/root_dynamics.py | 3 - .../crop/test_leaf_dynamics.py | 5 +- tests/physical_models/crop/test_phenology.py | 18 ++--- .../crop/test_root_dynamics.py | 38 +++++++--- 5 files changed, 68 insertions(+), 65 deletions(-) diff --git a/src/diffwofost/physical_models/crop/phenology.py b/src/diffwofost/physical_models/crop/phenology.py index d62c4a9..bc30b64 100644 --- a/src/diffwofost/physical_models/crop/phenology.py +++ b/src/diffwofost/physical_models/crop/phenology.py @@ -117,6 +117,7 @@ def __init__(self, parvalues): self.VERNSAT = torch.tensor(-99.0, dtype=dtype, device=device) self.VERNBASE = torch.tensor(-99.0, dtype=dtype, device=device) self.VERNDVS = torch.tensor(-99.0, dtype=dtype, device=device) + self.VERNRTB = self.VERNRTB.to(device=device, dtype=dtype) # Call parent init super().__init__(parvalues) @@ -215,6 +216,7 @@ def initialize(self, day, kiosk, parvalues, dvs_shape=None): self.params.VERNDVS = _broadcast_to( self.params.VERNDVS, self.params_shape, dtype=self.dtype, device=self.device ) + self.params.VERNRTB = self.params.VERNRTB.to(device=self.device, dtype=self.dtype) # Define initial states self.states = self.StateVariables( @@ -524,6 +526,36 @@ def __init__(self, kiosk, publish=None, **kwargs): # Call parent init super().__init__(kiosk, publish=publish, **kwargs) + def _cast_and_broadcast_params(self): + """Cast and broadcast all parameters to params_shape with correct dtype/device. + + This ensures all parameters have consistent shape, dtype, and device. + Necessary if Vernalisation changes the params_shape during initialization. + """ + p = self.params + # Broadcast numeric parameters to the final params_shape and ensure dtype/device. + for name in ( + "TSUMEM", + "TBASEM", + "TEFFMX", + "TSUM1", + "TSUM2", + "IDSL", + "DLO", + "DLC", + "DVSI", + "DVSEND", + ): + setattr( + p, + name, + _broadcast_to(getattr(p, name), self.params_shape, self.dtype, self.device), + ) + + # Move AFGEN table buffers, if present. + if hasattr(p, "DTSMTB") and hasattr(p.DTSMTB, "to"): + p.DTSMTB.to(device=self.device, dtype=self.dtype) + def initialize(self, day, kiosk, parvalues): """:param day: start date of the simulation @@ -534,40 +566,6 @@ def initialize(self, day, kiosk, parvalues): self.params = self.Parameters(parvalues) self.params_shape = _get_params_shape(self.params) - # Small epsilon tensor reused in multiple safe divisions. - self._epsilon = torch.tensor(1e-8, dtype=self.dtype, device=self.device) - - # Ensure the Vernalisation submodule uses the same dtype/device as this phenology instance - Vernalisation.device = self.device - Vernalisation.dtype = self.dtype - - # Helpler function to cast and broadcast all parameters to params_shape. - # Necessary if Vernalisation changes the params_shape during initialization. - def _cast_and_broadcast_params(): - p = self.params - # Broadcast numeric parameters to the final params_shape and ensure dtype/device. - for name in ( - "TSUMEM", - "TBASEM", - "TEFFMX", - "TSUM1", - "TSUM2", - "IDSL", - "DLO", - "DLC", - "DVSI", - "DVSEND", - ): - setattr( - p, - name, - _broadcast_to(getattr(p, name), self.params_shape, self.dtype, self.device), - ) - - # Move AFGEN table buffers, if present. - if hasattr(p, "DTSMTB") and hasattr(p.DTSMTB, "to"): - p.DTSMTB.to(device=self.device, dtype=self.dtype) - # Initialize vernalisation for IDSL>=2 # It has to be done in advance to get the correct params_shape IDSL = _broadcast_to( @@ -587,11 +585,12 @@ def _cast_and_broadcast_params(): self.vernalisation = None # After Vernalisation initialization the final params_shape may have changed. - _cast_and_broadcast_params() + self._cast_and_broadcast_params() # Create scalar constants once at the beginning to avoid recreating them self._ones = torch.ones(self.params_shape, dtype=self.dtype, device=self.device) self._zeros = torch.zeros(self.params_shape, dtype=self.dtype, device=self.device) + self._epsilon = torch.tensor(1e-8, dtype=self.dtype, device=self.device) # Initialize rates and kiosk self.rates = self.RateVariables(kiosk) diff --git a/src/diffwofost/physical_models/crop/root_dynamics.py b/src/diffwofost/physical_models/crop/root_dynamics.py index 018b65b..b38604f 100644 --- a/src/diffwofost/physical_models/crop/root_dynamics.py +++ b/src/diffwofost/physical_models/crop/root_dynamics.py @@ -258,9 +258,6 @@ def calc_rates(self, day: datetime.date = None, drv: WeatherDataContainer = None s = self.states k = self.kiosk - if self.params_shape is None: - self.params_shape = _get_params_shape(p) - # If DVS < 0, the crop has not yet emerged, so we zerofy the rates using mask. # Make a mask (0 if DVS < 0, 1 if DVS >= 0) DVS = _broadcast_to(k["DVS"], self.params_shape, dtype=self.dtype, device=self.device) diff --git a/tests/physical_models/crop/test_leaf_dynamics.py b/tests/physical_models/crop/test_leaf_dynamics.py index 396fde8..6002dce 100644 --- a/tests/physical_models/crop/test_leaf_dynamics.py +++ b/tests/physical_models/crop/test_leaf_dynamics.py @@ -140,7 +140,6 @@ def test_leaf_dynamics_with_one_parameter_vector(self, param, device): ) = prepare_engine_input( test_data, crop_model_params, meteo_range_checks=False, device=device ) - # config_path = str(phy_data_folder / "WOFOST_Leaf_Dynamics.conf") # Setting a vector (with one value) for the selected parameter if param == "TEMP": @@ -264,7 +263,7 @@ def test_leaf_dynamics_with_different_parameter_values(self, param, delta, devic for var, precision in expected_precision.items() ) - def test_leaf_dynamics_with_multiple_parameter_vectors(self): + def test_leaf_dynamics_with_multiple_parameter_vectors(self, device): # prepare model input test_data_url = f"{phy_data_folder}/test_leafdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -291,7 +290,7 @@ def test_leaf_dynamics_with_multiple_parameter_vectors(self): agro_management_inputs, leaf_dynamics_config, external_states, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() diff --git a/tests/physical_models/crop/test_phenology.py b/tests/physical_models/crop/test_phenology.py index bc597d0..78ed856 100644 --- a/tests/physical_models/crop/test_phenology.py +++ b/tests/physical_models/crop/test_phenology.py @@ -90,8 +90,6 @@ def __init__( def forward(self, params_dict): # pass new value of parameters to the model for name, value in params_dict.items(): - if isinstance(value, torch.Tensor) and value.device.type != self.device: - value = value.to(self.device) self.crop_model_params_provider.set_override(name, value, check=False) engine = EngineTestHelper( @@ -117,7 +115,7 @@ class TestPhenologyDynamics: f"{phy_data_folder}/test_potentialproduction_wofost72_{i:02d}.yaml" for i in range(1, 45) ] - @pytest.mark.parametrize("test_data_url", phenology_data_urls[:3]) # Test subset for GPU + @pytest.mark.parametrize("test_data_url", phenology_data_urls) def test_phenology_with_testengine(self, test_data_url, device): test_data = get_test_data(test_data_url) crop_model_params = [ @@ -159,13 +157,7 @@ def test_phenology_with_testengine(self, test_data_url, device): assert len(actual_results) == len(expected_results) for reference, model in zip(expected_results, actual_results, strict=False): for var in expected_precision.keys(): - if var in ["VERNFAC", "VERNR"]: - continue - # Some outputs (e.g. VERN) can be None for test cases without vernalisation. - # Only check device placement for actual tensors. value = model.get(var) - if value is None: - continue if isinstance(value, torch.Tensor): assert value.device.type == device, f"{var} should be on {device}" model_cpu = {k: v.cpu() if isinstance(v, torch.Tensor) else v for k, v in model.items()} @@ -342,7 +334,7 @@ def test_phenology_with_different_parameter_values(self, param, delta, device): continue assert torch.all(torch.abs(reference[var] - model[var][-1]) < precision) - def test_phenology_with_multiple_parameter_vectors(self): + def test_phenology_with_multiple_parameter_vectors(self, device): test_data_url = f"{phy_data_folder}/test_phenology_wofost72_17.yaml" test_data = get_test_data(test_data_url) crop_model_params = [ @@ -380,7 +372,7 @@ def test_phenology_with_multiple_parameter_vectors(self): weather_data_provider, agro_management_inputs, phenology_config, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -390,7 +382,7 @@ def test_phenology_with_multiple_parameter_vectors(self): for reference, model in zip(expected_results, actual_results, strict=False): assert_reference_match(reference, model, expected_precision) - def test_phenology_with_multiple_parameter_arrays(self): + def test_phenology_with_multiple_parameter_arrays(self, device): test_data_url = f"{phy_data_folder}/test_phenology_wofost72_17.yaml" test_data = get_test_data(test_data_url) crop_model_params = [ @@ -446,7 +438,7 @@ def test_phenology_with_multiple_parameter_arrays(self): weather_data_provider, agro_management_inputs, phenology_config, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() diff --git a/tests/physical_models/crop/test_root_dynamics.py b/tests/physical_models/crop/test_root_dynamics.py index fb8d620..69b7c50 100644 --- a/tests/physical_models/crop/test_root_dynamics.py +++ b/tests/physical_models/crop/test_root_dynamics.py @@ -57,8 +57,6 @@ def __init__( def forward(self, params_dict): # pass new value of parameters to the model for name, value in params_dict.items(): - if isinstance(value, torch.Tensor) and value.device.type != self.device: - value = value.to(self.device) self.crop_model_params_provider.set_override(name, value, check=False) engine = EngineTestHelper( @@ -86,7 +84,7 @@ class TestRootDynamics: for i in range(1, 45) # there are 44 test files ] - @pytest.mark.parametrize("test_data_url", rootdynamics_data_urls[:3]) # Test subset for GPU + @pytest.mark.parametrize("test_data_url", rootdynamics_data_urls) def test_root_dynamics_with_testengine(self, test_data_url, device): """EngineTestHelper and not Engine because it allows to specify `external_states`.""" # prepare model input @@ -235,7 +233,7 @@ def test_root_dynamics_with_different_parameter_values(self, param, delta, devic for var, precision in expected_precision.items() ) - def test_root_dynamics_with_multiple_parameter_vectors(self): + def test_root_dynamics_with_multiple_parameter_vectors(self, device): # prepare model input test_data_url = phy_data_folder / "test_rootdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -263,7 +261,7 @@ def test_root_dynamics_with_multiple_parameter_vectors(self): agro_management_inputs, root_dynamics_config, external_states, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -280,7 +278,7 @@ def test_root_dynamics_with_multiple_parameter_vectors(self): for var, precision in expected_precision.items() ) - def test_root_dynamics_with_multiple_parameter_arrays(self): + def test_root_dynamics_with_multiple_parameter_arrays(self, device): # prepare model input test_data_url = phy_data_folder / "test_rootdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -306,7 +304,7 @@ def test_root_dynamics_with_multiple_parameter_arrays(self): agro_management_inputs, root_dynamics_config, external_states, - device="cpu", + device=device, ) engine.run_till_terminate() actual_results = engine.get_output() @@ -326,7 +324,7 @@ def test_root_dynamics_with_multiple_parameter_arrays(self): model[var].shape == (30, 5) for var in expected_precision.keys() ) # check the output shapes - def test_root_dynamics_with_incompatible_parameter_vectors(self): + def test_root_dynamics_with_incompatible_parameter_vectors(self, device): # prepare model input test_data_url = phy_data_folder / "test_rootdynamics_wofost72_01.yaml" test_data = get_test_data(test_data_url) @@ -354,7 +352,7 @@ def test_root_dynamics_with_incompatible_parameter_vectors(self): agro_management_inputs, root_dynamics_config, external_states, - device="cpu", + device=device, ) @pytest.mark.parametrize("test_data_url", wofost72_data_urls) @@ -426,15 +424,20 @@ class TestDiffRootDynamicsGradients: "RDRRTB": ["TWRT"], } - # Generate all combinations + # Generate all combinations and no_graph_mapping gradient_params = [] no_gradient_params = [] + no_graph_mapping = {} for param_name in param_names: + no_graph_outputs = [] for output_name in output_names: if output_name in gradient_mapping.get(param_name, []): gradient_params.append((param_name, output_name)) else: no_gradient_params.append((param_name, output_name)) + no_graph_outputs.append(output_name) + if no_graph_outputs: + no_graph_mapping[param_name] = no_graph_outputs @pytest.mark.parametrize("param_name,output_name", no_gradient_params) @pytest.mark.parametrize("config_type", ["single", "tensor"]) @@ -446,10 +449,23 @@ def test_no_gradients(self, param_name, output_name, config_type, device): output = model({param_name: param}) loss = output[output_name].sum() - # If there is no graph at all, then there is no gradient by definition. + # Check if this parameter-output pair should have no graph at all + should_have_no_graph = output_name in self.no_graph_mapping.get(param_name, []) + if not loss.requires_grad: + # If there is no graph, assert that this is expected + assert should_have_no_graph, ( + f"Expected graph for {param_name} w.r.t. {output_name}, " + f"but loss.requires_grad is False" + ) return + # If we get here, there should be a graph + assert not should_have_no_graph, ( + f"Expected no graph for {param_name} w.r.t. {output_name}, " + f"but loss.requires_grad is True" + ) + grads = torch.autograd.grad(loss, param, retain_graph=True, allow_unused=True)[0] if grads is not None: assert torch.all((grads == 0) | torch.isnan(grads)), ( From 64d4a3e4efd96c1866892c87caf71f788c3ff57d Mon Sep 17 00:00:00 2001 From: SCiarella Date: Wed, 7 Jan 2026 16:49:02 +0100 Subject: [PATCH 15/17] Fix test github --- src/diffwofost/physical_models/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index 242d3d8..b1c3dac 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -510,7 +510,7 @@ class AfgenTrait(TraitType): into_text: Description of the trait type. """ - default_value = Afgen([0, 0, 1, 1]) + default_value = Afgen(torch.tensor([0, 0, 1, 1], dtype=torch.float32)) into_text = "An AFGEN table of XY pairs" def validate(self, obj, value): From 3df777ff9c621fec9e3fa77dbbc205ae58078fc2 Mon Sep 17 00:00:00 2001 From: SCiarella Date: Wed, 7 Jan 2026 17:06:50 +0100 Subject: [PATCH 16/17] Fix test github --- src/diffwofost/physical_models/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index b1c3dac..242d3d8 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -510,7 +510,7 @@ class AfgenTrait(TraitType): into_text: Description of the trait type. """ - default_value = Afgen(torch.tensor([0, 0, 1, 1], dtype=torch.float32)) + default_value = Afgen([0, 0, 1, 1]) into_text = "An AFGEN table of XY pairs" def validate(self, obj, value): From 3bbf431e9762c98d57225b8dd75710638a813e5e Mon Sep 17 00:00:00 2001 From: SCiarella Date: Thu, 8 Jan 2026 10:17:19 +0100 Subject: [PATCH 17/17] Make Afgen ComputeConfig --- src/diffwofost/physical_models/utils.py | 30 +++++++++++++++++-------- tests/physical_models/test_utils.py | 3 ++- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/diffwofost/physical_models/utils.py b/src/diffwofost/physical_models/utils.py index 242d3d8..4324587 100644 --- a/src/diffwofost/physical_models/utils.py +++ b/src/diffwofost/physical_models/utils.py @@ -280,6 +280,20 @@ class Afgen: Now supports batched tables (tensor of lists) for vectorized operations. """ + @property + def device(self): + """Get device from ComputeConfig.""" + from diffwofost.physical_models.config import ComputeConfig + + return ComputeConfig.get_device() + + @property + def dtype(self): + """Get dtype from ComputeConfig.""" + from diffwofost.physical_models.config import ComputeConfig + + return ComputeConfig.get_dtype() + def _check_x_ascending(self, tbl_xy): """Checks that the x values are strictly ascending. @@ -322,11 +336,11 @@ def _valid_n_and_check(x_list: torch.Tensor, y_list: torch.Tensor) -> int: def __init__(self, tbl_xy): # Convert to tensor if needed - tbl_xy = torch.as_tensor(tbl_xy) + tbl_xy = torch.as_tensor(tbl_xy, dtype=self.dtype, device=self.device) # If the table was provided as ints, promote to float so interpolation # doesn't truncate query points (e.g. 2.5 -> 2) and autograd works. if not tbl_xy.is_floating_point(): - tbl_xy = tbl_xy.to(dtype=torch.get_default_dtype()) + tbl_xy = tbl_xy.to(dtype=self.dtype) # Detect if we have batched tables (>1D) self.is_batched = tbl_xy.dim() > 1 @@ -343,18 +357,16 @@ def __init__(self, tbl_xy): self.valid_counts = valid_counts flat_tables = tbl_xy.reshape(-1, table_len) - flat_valid = valid_counts.reshape(-1).to(device=tbl_xy.device) + flat_valid = valid_counts.reshape(-1).to(device=self.device) num_tables = flat_tables.shape[0] max_n = int(flat_valid.max().item()) if num_tables > 0 else 0 # Store padded tensors so we can vectorize __call__. pad_x = torch.finfo(tbl_xy.dtype).max - x_flat = torch.full( - (num_tables, max_n), pad_x, dtype=tbl_xy.dtype, device=tbl_xy.device - ) - y_flat = torch.zeros((num_tables, max_n), dtype=tbl_xy.dtype, device=tbl_xy.device) + x_flat = torch.full((num_tables, max_n), pad_x, dtype=self.dtype, device=self.device) + y_flat = torch.zeros((num_tables, max_n), dtype=self.dtype, device=self.device) slopes_flat = torch.zeros( - (num_tables, max(0, max_n - 1)), dtype=tbl_xy.dtype, device=tbl_xy.device + (num_tables, max(0, max_n - 1)), dtype=self.dtype, device=self.device ) for idx in range(num_tables): @@ -390,7 +402,7 @@ def __init__(self, tbl_xy): self.x_list[1:] - self.x_list[:-1] ) else: - self.slopes = torch.tensor([], dtype=tbl_xy.dtype, device=tbl_xy.device) + self.slopes = torch.tensor([], dtype=self.dtype, device=self.device) def __call__(self, x): """Returns the interpolated value at abscissa x. diff --git a/tests/physical_models/test_utils.py b/tests/physical_models/test_utils.py index cae2853..0f28153 100644 --- a/tests/physical_models/test_utils.py +++ b/tests/physical_models/test_utils.py @@ -2,6 +2,7 @@ import pytest import torch +from diffwofost.physical_models.config import ComputeConfig from diffwofost.physical_models.utils import Afgen from diffwofost.physical_models.utils import AfgenTrait from diffwofost.physical_models.utils import WeatherDataProviderTestHelper @@ -9,7 +10,7 @@ from diffwofost.physical_models.utils import get_test_data from . import phy_data_folder -DTYPE = torch.float32 # Default dtype for tests +DTYPE = ComputeConfig.get_dtype() class TestAfgen: