Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,32 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 4,
"id": "721ed32e-d335-4cbb-b9d3-b0b6afff5d2c",
"metadata": {},
"outputs": [],
"outputs": [
{
"ename": "Exception",
"evalue": "File `'analyse_annual_deficits_MW.ipynb'` not found.",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)",
"File \u001b[0;32m/opt/conda/envs/ewatercycle2/lib/python3.12/site-packages/IPython/core/magics/execution.py:720\u001b[0m, in \u001b[0;36mExecutionMagics.run\u001b[0;34m(self, parameter_s, runner, file_finder)\u001b[0m\n\u001b[1;32m 719\u001b[0m fpath \u001b[38;5;241m=\u001b[39m arg_lst[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m--> 720\u001b[0m filename \u001b[38;5;241m=\u001b[39m \u001b[43mfile_finder\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 721\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n",
"File \u001b[0;32m/opt/conda/envs/ewatercycle2/lib/python3.12/site-packages/IPython/utils/path.py:91\u001b[0m, in \u001b[0;36mget_py_filename\u001b[0;34m(name)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m py_name\n\u001b[0;32m---> 91\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIOError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFile `\u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m` not found.\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m name)\n",
"\u001b[0;31mOSError\u001b[0m: File `'analyse_annual_deficits_MW.ipynb'` not found.",
"\nThe above exception was the direct cause of the following exception:\n",
"\u001b[0;31mException\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[4], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# import drought analyser function\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[43mget_ipython\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_line_magic\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mrun\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43manalyse_annual_deficits_MW.ipynb\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m/opt/conda/envs/ewatercycle2/lib/python3.12/site-packages/IPython/core/interactiveshell.py:2482\u001b[0m, in \u001b[0;36mInteractiveShell.run_line_magic\u001b[0;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[1;32m 2480\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlocal_ns\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_local_scope(stack_depth)\n\u001b[1;32m 2481\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[0;32m-> 2482\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2484\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[1;32m 2485\u001b[0m \u001b[38;5;66;03m# when using magics with decorator @output_can_be_silenced\u001b[39;00m\n\u001b[1;32m 2486\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[1;32m 2487\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n",
"File \u001b[0;32m/opt/conda/envs/ewatercycle2/lib/python3.12/site-packages/IPython/core/magics/execution.py:731\u001b[0m, in \u001b[0;36mExecutionMagics.run\u001b[0;34m(self, parameter_s, runner, file_finder)\u001b[0m\n\u001b[1;32m 729\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m os\u001b[38;5;241m.\u001b[39mname \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnt\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m re\u001b[38;5;241m.\u001b[39mmatch(\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m^\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.*\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m$\u001b[39m\u001b[38;5;124m\"\u001b[39m,fpath):\n\u001b[1;32m 730\u001b[0m warn(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFor Windows, use double quotes to wrap a filename: \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124mun \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmypath\u001b[39m\u001b[38;5;130;01m\\\\\u001b[39;00m\u001b[38;5;124mmyfile.py\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m--> 731\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(msg) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 732\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 733\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fpath \u001b[38;5;129;01min\u001b[39;00m sys\u001b[38;5;241m.\u001b[39mmeta_path:\n",
"\u001b[0;31mException\u001b[0m: File `'analyse_annual_deficits_MW.ipynb'` not found."
]
}
],
"source": [
"# import drought analyser function\n",
"%run Drought_analyser.ipynb"
"from Drought_analysis import f, g"
]
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 3,
"id": "dc5c046f-4599-46b1-b39c-7f5a071e2d37",
"metadata": {},
"outputs": [],
Expand Down Expand Up @@ -50,7 +50,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 4,
"id": "6fadba2a-feba-423a-8f17-8d2cf72cb122",
"metadata": {},
"outputs": [],
Expand All @@ -63,7 +63,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 5,
"id": "8980a1eb-8fe7-44dc-9c93-5c648fd8c868",
"metadata": {},
"outputs": [],
Expand All @@ -83,10 +83,23 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 6,
"id": "6c3ec199-406e-4cf1-a5e3-4681a61af98b",
"metadata": {},
"outputs": [],
"outputs": [
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: '/home/zoe/forcing/loire_river/ERA5-90-19'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[6], line 13\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# defining destination path for ERA5 data\u001b[39;00m\n\u001b[1;32m 12\u001b[0m forcing_path_ERA5 \u001b[38;5;241m=\u001b[39m Path\u001b[38;5;241m.\u001b[39mhome() \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mforcing\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mloire_river\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mERA5-90-19\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m---> 13\u001b[0m \u001b[43mforcing_path_ERA5\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;66;03m# model HBV destination path\u001b[39;00m\n\u001b[1;32m 16\u001b[0m model_path_HBV \u001b[38;5;241m=\u001b[39m Path\u001b[38;5;241m.\u001b[39mhome() \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtmp\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHBV_model\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
"File \u001b[0;32m/opt/conda/envs/ewatercycle2/lib/python3.12/pathlib.py:1311\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m 1307\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1308\u001b[0m \u001b[38;5;124;03mCreate a new directory at this given path.\u001b[39;00m\n\u001b[1;32m 1309\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1310\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1311\u001b[0m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1312\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n\u001b[1;32m 1313\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m parents \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparent \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m:\n",
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/home/zoe/forcing/loire_river/ERA5-90-19'"
]
}
],
"source": [
"# name of the catchment\n",
"basin_name = \"FR003882\"\n",
Expand Down Expand Up @@ -123,10 +136,23 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 7,
"id": "573bd3dc-bab4-49c8-98c7-531ef1aab32a",
"metadata": {},
"outputs": [],
"outputs": [
{
"ename": "FileNotFoundError",
"evalue": "Forcing file /home/zoe/forcing/loire_river/ERA5-90-19/ewatercycle_forcing.yaml not found. Perhaps you want to use LumpedMakkinkForcing(...)?",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[7], line 15\u001b[0m\n\u001b[1;32m 2\u001b[0m ERA5_end_date \u001b[38;5;241m=\u001b[39m experiment_end_date\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mT00:00:00Z\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Option 1: Generate forcings\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;66;03m#ERA5_forcing = ewatercycle.forcing.sources[\"LumpedMakkinkForcing\"].generate(\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# dataset=\"ERA5\",\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;66;03m# Option 2: Load forcings\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;66;03m# get data from stored location \u001b[39;00m\n\u001b[0;32m---> 15\u001b[0m ERA5_forcing \u001b[38;5;241m=\u001b[39m \u001b[43mewatercycle\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mforcing\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msources\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mLumpedMakkinkForcing\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdirectory\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mforcing_path_ERA5\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m/opt/conda/envs/ewatercycle2/lib/python3.12/site-packages/ewatercycle/base/forcing.py:276\u001b[0m, in \u001b[0;36mDefaultForcing.load\u001b[0;34m(cls, directory)\u001b[0m\n\u001b[1;32m 271\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m meta\u001b[38;5;241m.\u001b[39mexists():\n\u001b[1;32m 272\u001b[0m msg \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 273\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mForcing file \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmeta\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not found. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPerhaps you want to use \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m(...)?\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 275\u001b[0m )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(msg)\n\u001b[1;32m 277\u001b[0m metadata \u001b[38;5;241m=\u001b[39m meta\u001b[38;5;241m.\u001b[39mread_text()\n\u001b[1;32m 278\u001b[0m \u001b[38;5;66;03m# Workaround for legacy forcing files having !PythonClass tag.\u001b[39;00m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;66;03m# Remove it so ewatercycle.forcing.source[<forcing name>].load(dir) works.\u001b[39;00m\n",
"\u001b[0;31mFileNotFoundError\u001b[0m: Forcing file /home/zoe/forcing/loire_river/ERA5-90-19/ewatercycle_forcing.yaml not found. Perhaps you want to use LumpedMakkinkForcing(...)?"
]
}
],
"source": [
"ERA5_start_date = experiment_start_date+'T00:00:00Z'\n",
"ERA5_end_date = experiment_end_date+'T00:00:00Z'\n",
Expand Down Expand Up @@ -157,7 +183,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 8,
"id": "e4c0d812-b024-4535-9baf-84c95492fb9e",
"metadata": {},
"outputs": [],
Expand Down Expand Up @@ -187,7 +213,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 9,
"id": "6e22c5ab-19d2-458b-8994-0723d010a51b",
"metadata": {},
"outputs": [],
Expand Down Expand Up @@ -227,7 +253,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 10,
"id": "3b532a8a-12cd-428c-8372-5754013207ba",
"metadata": {},
"outputs": [],
Expand Down Expand Up @@ -281,7 +307,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 11,
"id": "657170c8-8d50-431a-a610-91ef2a68455d",
"metadata": {},
"outputs": [],
Expand Down Expand Up @@ -342,7 +368,7 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 12,
"id": "47b2379e-f7c8-4113-8c75-f9d9227be320",
"metadata": {},
"outputs": [],
Expand Down Expand Up @@ -370,10 +396,22 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 13,
"id": "94acd1a8-c3e7-4e25-a1c4-0266531e3a8d",
"metadata": {},
"outputs": [],
"outputs": [
{
"ename": "NameError",
"evalue": "name 'ERA5_forcing' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[13], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m ensemble \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m counter \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(N): \n\u001b[0;32m----> 4\u001b[0m ensemble\u001b[38;5;241m.\u001b[39mappend(ewatercycle\u001b[38;5;241m.\u001b[39mmodels\u001b[38;5;241m.\u001b[39mHBVLocal(forcing\u001b[38;5;241m=\u001b[39m\u001b[43mERA5_forcing\u001b[49m))\n\u001b[1;32m 5\u001b[0m config_file, _ \u001b[38;5;241m=\u001b[39m ensemble[counter]\u001b[38;5;241m.\u001b[39msetup(\n\u001b[1;32m 6\u001b[0m parameters \u001b[38;5;241m=\u001b[39m parameters[counter],\n\u001b[1;32m 7\u001b[0m initial_storage\u001b[38;5;241m=\u001b[39ms_0,\n\u001b[1;32m 8\u001b[0m cfg_dir \u001b[38;5;241m=\u001b[39m model_path_HBV,\n\u001b[1;32m 9\u001b[0m )\n\u001b[1;32m 10\u001b[0m ensemble[counter]\u001b[38;5;241m.\u001b[39minitialize(config_file)\n",
"\u001b[0;31mNameError\u001b[0m: name 'ERA5_forcing' is not defined"
]
}
],
"source": [
"ensemble = []\n",
"\n",
Expand All @@ -389,14 +427,14 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 14,
"id": "61ea4f0c-0f0f-4e7f-be21-484c3322cc23",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0e44652df34244279dd92ef01d9b22cb",
"model_id": "02113884dd8042128d408abe3e816415",
"version_major": 2,
"version_minor": 0
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "59205ccb-d972-4197-8d16-28f2a76f78ff",
"metadata": {},
"source": [
"# Preface"
]
},
{
"cell_type": "markdown",
"id": "e6c691c0-653d-40c0-8ca5-dd40d7492335",
"metadata": {},
"source": [
"This report is a bachelor thesis project for the BSc in Civil Engineering at the Delft University of Technology. The thesis topic is to explore the impact of climate change on a river of choice. The topic was then narrowed down to issues the Kariba dam is facing due to the current drought in Southern Africa. The dam is situated on the border of Zambia and Zimbabwe. Record-low levels of the Zambezi river have meant a significant reduction in power output of the Kariba dam, with as effect, prolonged power outages in both countries. The economic impact is significant and the lack of electricity has severe implications for the livelihoods of both populations.\n",
"\n",
"I would like to thank my supervisors Dr. Ir. R.W. Hut, V. Hoogelander, MSc and Ir. M. Melotto, for their guidance throughout the project. I would also like to thank my friends and family for their support throughout the project's timeline.\n",
"\n",
"<br>\n",
"\n",
"Zoë Lucius\n",
"\n",
"Delft, April 2025"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e1876faf-4cdc-4ca0-a3e2-c77bf8f90c86",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading