This repository hosts source code of LISFLOOD model. Go to Lisflood OS page for more information.
Other useful resources
Project | Documentation | Source code |
---|---|---|
Lisflood | Model docs | https://github.com/ec-jrc/lisflood-code (this repository) |
User guide | ||
Lisvap | Docs | https://github.com/ec-jrc/lisflood-lisvap |
Calibration tool | Docs | https://github.com/ec-jrc/lisflood-calibration |
Lisflood Utilities | https://github.com/ec-jrc/lisflood-utilities | |
Lisflood Usecases | https://github.com/ec-jrc/lisflood-usecases |
You can download code and datasets for testing the model. Follow this instruction for a basic test (included in this repository under tests/data/TestCatchment1)
git clone --single-branch --branch master https://github.com/ec-jrc/lisflood-code.git
cd lisflood-code # move into lisflood-code project directory
pip install -r requirements.txt
If you already have GDAL installed in your computer, make sure that the GDAL and the python gdal library have the same version.
You need to install PCRaster (4.2.x is first version which works with Python3) and include its python interface in PYTHONPATH environment variable. For details, please follow instruction on official docs.
To compile this Cython module to enable OpenMP multithreading (parallel kinematic wave):
Delete the files *.so (if any) in directory hydrological-modules
Inside the hydrological_modules folder, execute "python compile_kinematic_wave_parallel_tools.py build_ext --inplace"
Important: the module has to be compiled on the machine where the model is run - the resulting binary is not portable.
Then in the settings file the option "numberParallelThreadsKinematicWave" may take the following values:
<textvar name="numCPUs_parallelKinematicWave" value="3"/>
Now your environment should be set up to run lisflood. Try with a prepared settings file for one of the two test catchments:
python src/lisf1.py tests/data/TestCatchment/settings/cold_day_base.xml
If the command above successed without errors, producing dis.nc into tests/data/TestCatchment1/outputs folder, your lisflood installation was correct.
You can use the updated docker image to run lisflood, so without taking care to install dependencies on your system.
docker pull efas/lisflood:latest
docker run -v /absolute_path/to/my/local/folder:/usecases efas/lisflood:latest usecases
docker run -v /absolute_path/to/my/local/folder:/usecases efas/lisflood:latest usecases
After this command, you can find all files to run a test against a catchment under the directory you mapped: /absolute_path/to/my/local/folder/TestCatchment1
Now, you can run LISFLOOD as a docker container to test included catchments. Only thing you need to do is to map the TestCatchment1 folder to the container folder input
, by using -v option.
In the XML settings file, all paths are adjusted to be relative to the very same settings file, so you don't need to edit paths, as long as you keep same folders structure.
docker run -v /absolute_path/to/my/local/folder/TestCatchment:/input efas/lisflood /input/settings/cold_day_base.xml
Once LISFLOOD finished, you find reported maps in /absolute_path/to/my/local/folder/TestCatchment/outputs/
folder.
LISFLOOD is also distributed as a standard python package. You can install the pip package in your Python 3 virtualenv:
pip install lisflood-model
Command above will also install the executable lisflood
in the virtualenv, so that you can run LISFLOOD with the following:
lisflood /absolute_path/to/my/local/folder/TestCatchment/settings/cold_day_base.xml
If you find an issue in our code, please follow the GitHub flow to propose your changes (Fork, commit your changes and ask for a Pull Request).
When you develop, you need to run our unit tests before to propose a pull request.
Simply execute tox
or pytest
on command line from project folder.
Tox tests can last minutes. You can also just use pytest and run tests in a single environment (e.g. Python 3.7). This is often enough and will save you some time if you need to run tests frequently.
pytest tests/ -x -l -ra
See official website for more info about pytest.