[TOC]
-
Meteo Coupling (!161)
- added coupling capabilities for meteo data to mHM
- new namelist
coupling
inmhm.nml
with the following entries:case
: 0 or 1 to dis-/enable coupling, 0 by defaultmeteo_timestep
: 1 or 24 to set the coupling meteo time-step in hours, 0 by defaultmeteo_time_ref_endpoint
: bool, whether the time-stamp of the coupled meteo data refers to the endpoint of the time interval, .false. by defaultmeteo_expect_pre
: bool, whether precipitation is expected from the coupling, .false. by defaultmeteo_expect_temp
: bool, whether temperature is expected from the coupling, .false. by defaultmeteo_expect_pet
: bool, whether PET is expected from the coupling, .false. by defaultmeteo_expect_tmin
: bool, whether daily min. temperature is expected from the coupling, .false. by defaultmeteo_expect_tmax
: bool, whether daily max. temperature is expected from the coupling, .false. by defaultmeteo_expect_netrad
: bool, whether net radiation is expected from the coupling, .false. by defaultmeteo_expect_absvappress
: bool, whether absolute vapour pressure is expected from the coupling, .false. by defaultmeteo_expect_windspeed
: bool, whether windspeed is expected from the coupling, .false. by defaultmeteo_expect_ssrd
: bool, whether short wave radiation is expected from the coupling, .false. by defaultmeteo_expect_strd
: bool, whether long wave radiation is expected from the coupling, .false. by defaultmeteo_expect_tann
: bool, whether annual mean air temperature is expected from the coupling, .false. by default
- new namelist entry in
directories_mHM
:dir_meteo_header
: folder containing the ascii header for level2, to be used when precipitation is coupled and not present, by default<dir_Precipitation>
-
Python bindings (!161)
- added unit-tests for coupling meteo data
- added
get_mask
to get domain mask for selected level - added
compressed
argument toget_variable
to get flat array - added
set_meteo
routine to set meteo-data for current time-step (uses newmhm.set.meteo
low level function) - added
mhm.model.config_coupling
to set coupling configuration as an alternative to thecoupling
namelist - added
mhm.get.number_of_horizons
to get the number of horizons of the current setup
-
Python setup (!163)
- switching to scikit-build-core als build backend to be future-prove
- force using the Ninja build system, fixing the conda feedstock ninja patch
- mhm console script now always included
- slightly restructured python package to separate python files from wrapper for clean wheels
- editable installs more stable now
- cleaned up env-var configs for python installation
- reset verbosity level when finalizing model
- Cmake: fixed compiling issue with Python bindings on MacOS using clang (see conda feedstock patch)
- Documentation: now built with doxygen 1.9.7 for better type documentations and some minor fixes (!167)
- added simple namelists in each test-domain folder for single domain run (!144)
- can be run by
mhm ./test_domain
- can be run by
- Python bindings and wheel distribution for mHM (!138)
- updated FORCES to v0.5 (!141, !157)
- added silent mode (
--quiet / -q
) (!141) - Output: unification, selectable time reference point and bounds for all coordinates (!139)
- added option
output_time_reference[_mrm]
tom[h|r]m_outputs.nml
where users can now select the reference time stamp for the current time interval:location of reference time point in outputs: 0: start of the time interval (i.e. 1990-01-01 00:00 for daily output on 1990-01-01) 1: center of the time interval (i.e. 1990-01-01 12:00 for daily output on 1990-01-01) 2: end of the time interval (i.e. 1990-01-02 00:00 for daily output on 1990-01-01)
- This will be
0
by default. Before it was always the end of the time interval -1h (that is why we always had 23h as timestamp) - When using the start of the time interval we actually match the time-stamps of the gauge time-series (that was shifted in
discharge.nc
) - When using center of time interval output unit may change to minutes (to get center of an hour)
- This will be
- added
time_bnds
to all netcdf outputs to explicitly describe the time-span for the given time-stamp (following cf-conventions) - addad
axis
attribute to all coordinates in all netcdf outputs (following cf-conventions) - added
bounds
for all spatial coordinate axes (either easting/northing or lon/lat) - unified output handling in
mo_nc_output
- use new output handler for groundwater coupling
- added option
- test-domain download helper command added with python-bindings
mhm-download
(!149) - added a dependency install script
CI-scripts/install-deps
(!152) - added demonstration script to optimize mHM with Spotpy (!145)
- all errors are now printed to std-err and raise exit code 1 (!141)
- changed command line option short name for version from
-v
to-V
(-v
reserved for verbosity) (!141)
- fixed indexing in groundwater coupling calculations (!139)
- fixed reading restart without original input files (!154, !156)
- output: fixed single precision output writing (!159)
- several internal cleanups
- model can now run with hourly forcing (!39)
- new neutron module (!92)
- add FORCES as a dependency (!103, !124)
- new command line interface to pass used paths to mhm (!105)
- new target function (
opti_function=34
) for baseflow index optimization (!116) - add L1_temp_calc and L1_prec_calc as global variables for coupling (!120)
- new sub-daily discharge output (!114)
- updated install instructions for all systems (!124)
- better error messages when reading LUTs or time-series (!128)
- new post-proc R scripts (!102, !113)
- Output:
- refactoring of mhm_eval to use interfaces (!108)
- PGI support was dropped (!108)
- change units of easting/northing in output to "m" (!125)
- mo_grid now uses
nint
to calculate nrows and ncols in order to be stable when cell size factor is close to 1 (!56) - bug fix of mo_restart on reading the correct dimension of land-cover (!121)
- cmake doesn't alter
CMAKE_MODULE_PATH
anymore (!122) - slope_tmp now allocated in L11_calc_celerity (!110)
- documentation modernized with doxygen-awesome-css (!86)
- cmake update to be able to install mHM (
cmake --install
) (!85) - added pFUnit tests thanks to Nicola Döring (!76)
- link to a new YouTube tutorial for compiling mHM with cygwin by Mehmet Cüneyd Demirel added to the documentation (!74)
- NetCDF output: add deflate and precision option to namelists (!73)
- refactor cmake workflow (!72)
- fixed:
mrm
tried to write output even if routing was switched off (!82) - unreachable
else
branch infeddes_et_reduction
removed (!77) - unnecessary
inout
variable intent insoil_moisture
removed (!77)
- added compile information for cygwin (!68)
- removed note about mHM 5.10 from the README
- smhorizon: tmp_rootfraccoef was corrected directly if it is not between 0 and 1, but actually FCnorm should always be between 0 and 1 (!67)
- river temperature routing was implemented in an alpha version 0.1 (!37)
- this feature is in an experimental stage and should not be considered stable!
- introduced central version files
version.txt
andversion_data.txt
(!51) - added Feddes and global FC dependency on root fraction coef. at SM process(3)=4 (!43)
- Online documentation generated with doxygen: https://mhm.pages.ufz.de/mhm/develop/ (!44)
- CI/CD with GitLab Runner (!11, !13, !14, !28, !32, !48, !50)
- building on EVE for multiple compiler (GNU 7.3/8.3, Intel 18/19, NAG 6.2)
- building debug/release serial/parallel
- memcheck with valgrind
- running all check-cases with all compiled versions
- calculation of coverage
- new checking script
run_mhm_checks.py
- the domain loop is now parallelized with MPI
- objective function for boxcox-transformed streamflow
- post processing script for probabilistic forecasts
- different module load scripts for EVE
- Objective function from separate mhm calls (!7)
- new data type for simulated gridded optidata (!10)
- new datatype datetimeinfo (!16)
- added module
mo_os
to check files and directories (!41, !57)
- internal: "basin" renamed to "domain"
- TWS input file changed from ascii to netCDF (!9)
- Switched to cell wise kge of et and tws in opti_function 33 (!12)
- restart files are now given by name (!34)
- removed mRM standalone and statically integrate mRM into mHM (!53)
- removed the old makefile and legacy checking scripts (!55)
- minimal Cmake version is now
3.12
(!58)
- Finalparam.nml is now written with specific format (Intel/GNU compatibility) (#40)
- FinalParam.nml routing section bug fixed (#49, !25)
- dirEvapotranspiration is now allocated before writing
- cmake: netcdf link flags where separated by ";"
- sharing of L0 domain now working
- added L1_jarvis_thresh_c1 to restart file for process id 2 AND 3 (#29, !15)
- allowing higher routing resolution than hydrology (!21)
- domainID not set correctly for mRM if restart is activated (!30)
- mHM states_fluxes netCDF output was curvilinear even if coordinate system is set to regular latlon (#98, !31)
- missmatch in messages about written mhm fluxes (!42)
- Fixing wrongly matched IDs from L1 to L11 when routing resolution (L11) is finer than L1 resolution (!45)
- The length in net_startup was only cut in case there are less then 2 lengths (!46)
- corrected unit attributes for lat lon variables (!47)
- Allow run mHM and mRM without any observed gauge for processCase(8) = 2 / 3 (#27, !52)
- New routing process introduced
processCase(8) = 3
see Thober et al, 2019, GMDD, in press for more details - mRM is decoupled from mHM and mRM now resides in
deps/mrm
as an independent submodule more information on handling submodules - New option to compile mHM with cmake is provided, see more details under cmake manual.
- Visualization/animation R script (producing PDF and GIF) of mHM netcdf files included under post-proc animate1.R
- New option for coupling of mRM to a groundwater model (
gw_coupling = .true.
). The river head can be computed based on the Manning equation.
- Enable use of i8 for time_data in common/mo_read_forcing_nc.f90, otherwise netcdf time stamps with initial dates prior to 1900 were wrong (due to overflow)
- Adaptive routing does not allow to run without at least 1 gauge specification
- Incompatibility of Finalparam.nml format between Intel and GNU
- If ProcessOption(3) is set to 3 and optimization is activated, the created FinalParam.nml misses the header for the namelist of the soil moisture parameters.
- Land cover scenes cannot be changed between the run generating the restart file and the run using the restart file. This causes unpredictable behaviour by the model.
- Simulation period must span overall land cover scenes specified in the namelist.
- Cut-off for link length is calculated with missing values, but those should be neglected.
- Using a higher routing resolution than hydrology resolution may cause segmentation faults because mapping from L1id on L11 is not working correctly
- If ProcessOption(5) is set to -1 and optimization is activated, the created FinalParam.nml misses the header for the namelist of the PET process.
- For
gfortran
compilers mHM supports only v4.8 and higher. - If you wish to use features connected to ground albedo neutrons (
processCase(9)
), please contact Martin Schrön.
-
Major restructuralization of the mHM code.
-
MPR is now executed before mHM is run.
-
MPR can be compiled as a standalone tool.
-
mHM without mRM can be compiled.
-
The code in general is strictly reorganized into modules that belong to their respective processes (MPR, mHM, mRM). This is not only done for constants, global variables and so on, but also for every module and the reading of input as well as the namelists.
-
This leads to the creation of those folders:
-
./common
(code shared by MPR, mHM and mRM) included for every compilation option -
./lib
(code shared by MPR, mHM and mRM) included for every compilation option -
./MPR
(code for MPR), not included for mRM standalone -
./common_mHM_mRM
(code shared by mHM and mRM), not included for MPR standalone -
./mHM
(code for mHM), not included for MPR and mRM standalone -
./mRM
(code for mRM), not included for MPR standalone and mHM without routing -
Code is reformatted (indentation=2, spacing unified)
-
Removed many duplicate code parts (e.g. shared between mHM and mRM)
-
Check cases are minimized (reduced output, shorter time periods (<=2 years), less basins)
-
Check cases can now be set up more easily (by use of model_wrapper for automatic creation of new nml files)
-
Check cases now run a python script for output comparison, advantage: tolerance now also allowed for ascii-output and support of 4-D netCDF files without time dimension
-
fSealed is now an effective parameter
-
mHM effective parameters now all have three dimensions internally (nCells_L1, [iHorizon, LAI-Time], nLCoverScenes)
-
Introduction of new derived types:
-
Grid
(merge of basin_info, basin_info_mrm, gridGeoRef, nCells, longitude, latitude, Id) used for each level (0, 1, 11, 2) individually -
GridRemapper
(merge of lower_bound, upper_bound, etc.) -
mhm_eval and mrm_eval now have common procedure interface (needed for fully flexible optimisation)
-
A new post-processor can check and adapt some fields for doxygen generation
-
Changes that are not backwards-compatible:
-
Restart files are restructured (now contain only the minimum required for restart):
-
MPR: effective parameters at L1 + grid information
-
mHM: effective parameters, states and fluxes at L1 + grid information
-
mRM: routing-specific parameters, states, fluxes, configs at L1/L11 + grid information
-
mhm.nml is restructured and not backwards compatible mainly due to the reorganization of modules in dependency of their processes
-
gridded LAI values are now used for all effective parameters (no fallback to LAIclasses anymore)
-
canopy height used for aerodynamic resistance is now scaled with the actual LAI timeseries and not with a dummy timeseries of intensive orchard
-
Considerable improvements and reduced redundancy in estimation of an empirical distribution of slopes (sort function in the mo_startup). Example for the Australian domain (180 million L0 cells), it reduced time for sorting slope from 32hours to only 1 minute.
-
mtCLIM preprocessor in pre-proc/mtCLIM, based on mtCLIM v4.3. This code is able to estimate humidity (vapore pressure or vapore pressure deficit) and incoming shortwave radiation based on meteorological variables (minimum and maximum air temperature, precipitation) and morphological characteristics of the underlying terrain (digital elevation model, slope, aspect).
-
mHM2OGS preprocessor in pre-proc/GIS2FEM3. This code converts the triangular-wise or quadrilateral-wise recharge data from mHM into the nodal source terms of a three dimensional finite element model for OGS.
-
Updated documentation for CYGWIN installations under Windows 7 and 10.
-
Added new objective function number 31: weighted NSE (NSE is weighted with observed discharge)
-
Removal of bin files and related code (only nc and ascii files are used)
- Enable use of i8 for time_data in common/mo_read_forcing_nc.f90, otherwise netcdf time stamps with initial dates prior to 1900 were wrong (due to overflow)
None.
- For
gfortran
compilers mHM supports only v4.8 and higher. - If you wish to use features connected to ground albedo neutrons (
processCase(9)
), please contact Martin Schrön. - If you wish to use the multi-scale Routing Model as stand-alone version, please contact Stephan Thober.
- Implementation of a new process for PET correction based on LAI at PET
process(5)=-1
(Cuneyd Demirel + GEUS colleagues); - Pre-processor code for SOILGRIDS data as used for the EDgE project (Rohini Kumar);
- Reduced computational time of the neutron forward model COSMIC by factors of 30--100 (Maren Kaluza);
- Compression of the netCDF output files (David Schaefer);
- Optional project description added into the mhm.nml
processCase(3)=3
did not work when compiled with openMP.- openMP declarations missing in mo_mpr_smhorizons.f90 for the case of
iFlag_soil=1
None.
- For
gfortran
compilers mHM supports only v4.8 and higher. - If you wish to use a special process description of evapotranspiration (
processCase(4)
) please contact Matthias Zink. - If you wish to use features connected to ground albedo neutrons (
processCase(9)
), please contact Martin Schrön. - If you wish to use the multi-scale Routing Model as stand-alone version, please contact Stephan Thober.
- New process descriptions for the soil evapotranspiration module:
- Field capacity dependency to root fraction coefficient (
processCase(3)=2
) -- implemented by GEUS. - Jarvis (1989, J. Hydrol.) evapotranspiration reduction (
processCase(3)=3
) -- implemented by GEUS.
- Field capacity dependency to root fraction coefficient (
- Use local, monthly LAI climatology instead of look-up table, i.e., LAI_classdefinition.txt (
timeStep_LAI_input=1
). - New objective functions for model calibration
- Calibration of mHM using catchment average evapotransipration (
opti_function=27
). - Calibration of mHM using soil moisture and streamflow simultaneously (
opti_function=28
).
- Calibration of mHM using catchment average evapotransipration (
- Calibration using
processCase(8)=2
(routing with adaptive timestep) does properly work now. - Streamflow output is now properly written to the NetCDF.
None
- For
gfortran
compilers mHM supports only v4.8 and higher. - If you wish to use a special process description of evapotranspiration (
processCase(4)
) please contact Matthias Zink. - If you wish to use features connected to ground albedo neutrons (
processCase(9)
), please contact Martin Schrön. - If you wish to use the multi-scale Routing Model as stand-alone version, please contact Stephan Thober.
- Routing extended: Implementation of a new parametrization for the routing model (
processCase(8)=2
). This routing option is based on an adaptive time step to improve the scalability and transferability of the model as well as a significant reduction in run time. The adaptive time step is calculated as ratio of routing resolution and celerity, the latter can be given as parameter in mhm_parameter.nml.
- Any model time step from 1 h to 24 h can be chosen (in releases v5.4 and v5.5 only 1 h worked properly).
- Estimation of the Hargreaves-Samani PET for high altitudes works properly know (there have been numerical issues for high latitude values).
- Reading catchment outlets from the restart file works now (bug appeared in v5.5).
- Calibration using
processCase(8)=2
(adaptive timestep) does not work, please useprocessCase(8)=1
.
- For
gfortran
compilers mHM supports only v4.8 and higher. - If you wish to use a special process description of evapotranspiration (
processCase(4)
) please contact Matthias Zink. - If you wish to use features connected to ground albedo neutrons (
processCase(9)
), please contact Martin Schrön. - If you wish to use the multi-scale Routing Model as stand-alone version, please contact Stephan Thober.
- Routing works on domains with multiple outlets (e.g., continental level).
- New option for providing soil data. They can be provided as predefined layers (one map per layer).
- Speed up of mHM for big domains, due to reformulations in the model start up.
- Pre-processing: new tools for i) cutting out a catchment from a existing dataset, ii) estimation of Hargreaves-Samani evapotranspiration, and iii) enlarging the grids of the input files.
- Assigning routing parameters is done properly now.
- Specifying a model time step of 24h (in mhm.nml) does not work, please stick with the default time step (1h)
- For
gfortran
compilers mHM supports only v4.8 and higher. - If you wish to use a special process description of evapotranspiration (
processCase(4)
) please contact Matthias Zink. - If you wish to use features connected to ground albedo neutrons (
processCase(9)
), please contact Martin Schrön. - If you wish to use the multi-scale Routing Model as stand-alone version, please contact Stephan Thober.
- The routing of mHM can be used as a stand alone version/independent software called multiscale Routing Model mRM, e.g. for coupling to other environmental models.
- A new output, i.e. fields of routed discharge, is now available. They are stored in
mRM_fluxes_and_states.nc
and are controlled by a new namelist contained in the mrm_outputs.nml file, which is an optional file. - New calibration objectives have been incorporated. It is now possible, additionally to the former objectives, to calibrate mHM against additional input data:
- total water storage (e.g. GRACE) and discharge simultaneously (
opti_function=15
), and/or - cosmic ray neutron counts (
opti_function=17
).
- total water storage (e.g. GRACE) and discharge simultaneously (
- New post-processing: a mHM python class for reading all inputs and outputs of a model run can be found in post-proc/.
- Reorganization of the NetCDF writing in mHM to simply future implementations of additional outputs.
- Calibration with catchment average soil moisture (
opti_function=10
) works properly now. - Discharge output for multi basin runs with different time periods for each basin works properly now.
- Hargreaves-Samani PET calculation (
processCase(5)=1
) is valid on southern hemisphere too now.
- None.
- For
gfortran
compilers mHM supports only v4.8 and higher. - If you wish to use a special process description of evapotranspiration (
processCase(4)
) please contact Matthias Zink. - If you wish to use features connected to ground albedo neutrons (
processCase(9)
), please contact Martin Schrön. - If you wish to use the multi-scale Routing Model as stand-alone version, please contact Stephan Thober.
- Simulation period and warming days can be now given per basin (see
time_periods
in mhm.nml) - Enabling use of MPI (set
mpi=true
in Makefile and use#ifdef MPI
for MPI specific code) - Optional input data can be loaded for example to calibrate against soil moisture (see
optional_data
in mhm.nml) - Generation of ground albedo cosmic-ray neutrons (see
processCase(10)
in mhm.nml); these calculations are based on the COSMIC code, which was originally written by Rafael Rosolem. Please contact Martin Schrön if you like to use this new feature. - Several new objective functions, e.g. calibrating the Kling-Gupta efficiency of catchment's average soil moisture (
opti_function=10
) or calibrating multiple basins regarding Kling-Gupta efficiency of discharge (opti_function=14
) among others; calibration against soil moisture is still purpose to research (opti_function=10-14
). The interested user may contact Matthias Zink for further details.
- Calibration using potential evapotranspiration from input file (i.e.
processCase(4)=0
) is now working properly
- Compiling mHM with the recent Cygwin version under Windows is leading to an error message indicating circular dependencies. The reason for this is Unicode characters in some source code files. Please contact mhm-admin@ufz.de, if you get this error message. We will provide you the files with cleaned characters..
- If you wish to use a special process description of evapotranspiration (i.e. Hargreaves-samani, Priestley-Taylor, or Penman-Monteith) please contact Matthias Zink. The special cases are set in mhm.nml (see
processCase(4)
). - If you wish to use the new feature of calculating neutron counts please contact Martin Schrön. The feature can be enabled in mhm.nml (see
processCase(8)
).
- Chunk-wise reading of input data (see
timestep_model_inputs
) - Complete revision of writing netCDF files
- Possibility to discard multi-scale parameter regionalization (MPR) calculations (see
perform_mpr
) - Several process descriptions of evapotranspiration implemented (see
processCase(4)
): Read PET, Hargreaves-Samani, Priestley-Taylor, Penman-Monteith. Please contact Matthias Zink if you use one of the last three options, since the code is not under GNU Public license up to now. - Adding routines for signature calculations of time series (see
mo_signatures
) - New objective function for calibrating discharge with Kling-Gupta efficiency measure (KGE, see
opti_function
) - New output variables (see mhm_outputs.nml)
- Sorting algorithm changed to public available library orderpack (see
mo_orderpack
)
- Some variables in restart file where not assigned correctly
- Variables not initialized correctly
- Calibration using PET values read from the input file (
processCase(5)=0
) is running, but yields wrong results due to a wrong initialization of variables. The bug is resolved and will be released with version 5.3.
- OpenMP handling of routines such as the multi-scale parameter regionalization (MPR)
- Multi-scale implementation, i.e. running mHM simultaneously in several basins with different resolutions
- Automatic check case framework, i.e. testing new implementations on their validity and back-compatibility
- Implementation of inflow gauges, i.e. feeding discharge time series from upstream areas at catchment boundaries
- File gaugeinfo.txt specifying gauging stations is now part of namelist mhm.nml
- Code is now free of Numerical Recipes proprietary code
- Can now run on a single cell (no routing performed) Hydrological modelling resolution (L1) equal to morphological input data resolution (L0) possible
- Windows compatible (with Cygwin)
- Support of regular geographic coordinate systems (e.g lat-lon) in addition to equal-area coordinate systems (UTM)
- Initialization of states was not correct when running mHM in calibration mode.
- Calculated parameter values (mhm_parameters.nml) not necessarily in bound (check added).
- Aggregation/Disaggregation of meteorological data corrected.
- Forecast with mHM did not work because modelling period was restricted to discharge data period.
- Wrong mapping of evaluation discharge gauges for runs involving multiple gauges.
- Print out of River network in Config File is wrong for Multi-Basin setup, i.e., the River network is always properly written for the first basin, but not properly for subsequent basins when these are either different ones or the same one with a different Hydrology or Routing resolution.
- mHM does not abort if x-axis of L0 (morphological data) and L2 (meteorological data) do not span over exactly the same range.
- Full modular version
- Automatic documentation by doxygen
- Running mHM for multiple basin simultaneously
- Definition of 8 major processes:
- interception,
- snow,
- soil moisture,
- direct runoff,
- evapotranspiration,
- interflow,
- percolation,
- routing
- Choice of different descriptions of processes possible
- Input in binary
*.bin
or netcdf*.nc
format - Various calibration routines and objective functions
- Consistent numerical precision handling of variables
- None.