iMOD User Manual version 4.4 (html)



Use this function to create an IBOUND IDF-file that takes into account non existing cells on the bottom of a layer system. The IBOUND value in a cell is set to 0 whenever this cell and all underlying cells do not exist (thickness = 0.). Otherwise the IBOUND value is set to 1.




Enter the number of model layers, e.g. NLAY=6.


Enter the IDF for the i\({}^{th}\) modellayer that represents the top of modellayer i, e.g. TOP_L1=D:\MODEL\TOP_L1.IDF.


Enter the IDF for the i\({}^{th}\) modellayer that represents the bottom of modellayer i, e.g. BOT_L1=D:\MODEL\BOT_L1.IDF.


Enter the foldername in which the adjusted IDF-files will be saved, e.g. RESULTDIR=D:\RESULT.



This example checks for a 3 layer system whether there are non existing cell on the bottom of the system. These cells get an IBOUND value of 0.
The result of this function is an IBOUND file for each layer D:\RESULT\IBOUND_L{i}.IDF.


This function filters artificial elements out of a digital terrain model (or equivalent). The method searches for areas that are connected by small vertical thresholds and denote them as true surface whenever the extent is significant. The remaining areas with less extent are marked as potential surface and will become true surface whenever they differ minorly with the interpolated surface at those locations. Moreover, the algorithm searches for local upconing (trees, buildings) and depressions (streams) and removes them from the surface. The function yields two output files: the filtered original file and a pointer file. The pointer file indicates the type of change by the filtering to the original file. The values in the pointer file indicate: 2: no change; \(<\)2: filtered cell.




Enter the number of the IDF-files to be used during the AHN filtering, e.g. NAHN=2.


Enter the name of the i\({}^{th}\) IDF-file. The IDF-files should contain data points that represent some kind of elevation data, e.g. IDFFILE2=D:\DATA\AHN_REGION2.IDF.


Enter the vertical offset between adjacent cells that are allowed to group together, e.g. XCRIT=0.5 (default value). In this case all adjacent cells that have an offset of less or equal 0.25 (unit of IDFFILE{i}). Increasing XCRIT will group more cells together, decreasing XCRIT will group them more difficult. The size of the group will determine whether the group is assigned a surfacelevel directly, or not. The default value is XCRIT=0.5.


Enter the number of cells that behave like a threshold whether the current group of cells can be denoted as surface level, e.g. NSCRIT=1500 (default value).


Enter the size of the window that will be used to determine local upconing and depressions in the area, e.g. DPW=5 (default value). In this case a squared 5x5 window will be applied .


Enter the max difference of those values (not equal to the NoDataValue) in the DPW window, e.g. LOCCRIT=2.0 (default value). Whenever this difference exceeds LOCCRIT, no local upconing and depression will be computed.


Enter the percentile for which all data points in the DPW window that are less or equal to DP1 will be assigned to local depression, e.g. DP1=30.0 (default value).


Enter the percentile for which all data points in the DPW window that are greater or equal to DP2 will be assigned to local upconing, e.g. DP2=30.0 (default value).


Enter the maximum residual change in the interpolation of the intermediate surface level, INTXCRIT=0.05 (default value).


Enter the difference between the original surface level, as read by the IDFFILE{i}-files, and the intermediate surface level, e.g. CORXCRIT=0.10 (default value).


Enter the minimum number of changes by CORXCRIT, e.g. NCORXCRIT=50 (default value).


Enter IGNORENODATA=1 (default value) to ignore all data points equal to the NoDataValue of the IDFFILES{i}. Enter IGNORENODATA =0 to interpolate all data points equal to the NoDataValue.


Enter the number of windows to filter, e.g. NWINDOW=5. By default the entire dimensions of the IDFFILES{i} will be processed. The default value is NWINDOW=0.


Enter the coordinates of the lower-left corner first and then the coordinates of the upper-right corner, e.g. WINDOW5=100000.0, 400000.0, 200000.0, 425000.0. This keyword is compulsory whenever NWINDOW\(>\)0.


Enter the name of the IDF-file that contains the filtered surface level, e.g. OUTFILE=D:\DATA\AHN.IDF. In case NWINDOW\(>\)0, it is obliged to specify the OUTFILE for all windows, e.g. OUTFILE5=D:\DATA\AHN5.IDF. In the latter case, you can use the FUNCTION=IDFMERGE (see Section 8.2.4) to merge all outcomes.


Enter a buffersize to overlap the different WINDOW{i}’s, e.g. BUFFER=1500.0 (default value).


Enter IAGGREGATEY=1 to join adjacent intermediate surface levels to form larger ones, with a change that they become greater than NSCRIT and become surfacelevel. Default value is IAGGREGATEY=0.

Example 1


The above mentioned example is the most simple one, it filters the AHN_ORG.IDF with all default setting values and saves the result in AHN_FILTERED.IDF.

Example 2

WINDOW1=125000.0 426000.0 130000.0 430000.0
WINDOW2=130000.0 426000.0 135000.0 430000.0

The above mentioned example filters two windows and uses two different IDF-files (AHN_ORG1.IDF and AHN_ORG2.IDF). The main reason for using most of the setting variables is that the dimension of the original IDF-files (IDFFILE1 and IDFFILE2) is centimeter instead of meter.


The iMOD-Batch function SOF (Surface Overland Flow) is able to compute “spill” levels (surface overlandflow levels) for large regions with or without supplied outflow or outlet locations. First of all, the “pit”-locations are identified, these are defined as those locations that are surrounded by higher values all around in a \(3 \times 3\) matrix of grid cells. There is no other escape possible other than the lowest neighbouring level, the so called “spill”-level. All these identified “pitts” are sorted from the lowest to the highest “pitt” and processed in that order. Given a “pitt” location, the surrounding grid cells will be stored in a boundary list. From the boundary list the lowest “spill”-level will be found and stored in a boundary list. Whenever this “spill”-level is lower than the current “spill”-level, the process stops, because than probably the water can flow outside the current “core-volume”. If not, the lowest level on the boundary becomes the new “spill”level and the node will be remove from the boundary list and added to the “pitt”-list. The process repeats itself. All grid cells that are mentioned in the pitt-list will belong to the same “core-volume” and receive the final “spill”-level. At the end of this section, an example is given. As the “core-area” will be flat, the discharge occurs on that area as follows: it first follows the steepest gradient along the digital elevation model into the pit location and from there it follows the shortest way up towards the outflow cell. As the “core-area” will be flat, it cannot be used for a SFR package (see Section 12.28). To avoid flat-surfaces, the SOF function can be generate a slight adapted surface level for flat areas as a gradient from where the flat area is entered to the elevation next to the exitpoint. Those corrected flat areas (that can be a stretch along a stream) can be used for the SFR discretisation, at the same time the original slope of the flat area (0.0) is adjusted as saved. This slope is used as well for the SFR to define the stream slopes.

In the following figure the mentioned variables are explained.

Example of the concepts for the “spill”-level procedure.


The steepest gradient of the digital terrain model is computed for a \(3 \times 3\) neighbourhood, so the slope \(s\) and aspect \(a\) are at one point estimated from elevations of it and surrounding \(8\) points \(i\), thus:

\begin{align*} s_i & = {\rm tan}^{-1}\frac {z_i-z_0} {\sqrt {(x_i-x_0)^2+(y_i-y_0)^2}} \\ a_i & = {\rm arctan}^{-1}\left (x_i-x_0,y_i-y_0\right ) \end{align*}

where the slope \(s_i\) is in radians as well as the aspect \(a_i\), and \(z_0\), \(x_0\) and \(y_0\) are the elevation, x-coordinate and y-coordinate at the current node respectively, for which the gradient and aspect need to be computed. For reasons of conveniences, the aspect \(a\) is taken by the arctangent function with two arguments. The purpose of using two arguments instead of one is to gather information on the signs of the inputs in order to return the appropriate quadrant of the computed angle, which is not possible for the single-argument arctangent function. The final value for the aspect \(a\) is \(-\pi < a < \pi \), meaning that \(\pi \) is pointing to the east, \(0.5\times \pi \) points to the south, \(0.0 \times \pi \) points to the west and \(-0.5\times \pi \) points to the north. For perfect flat areas, a south direction is chosen arbitrarily. Also NodataValues are threated as “pitts”.

The CREATESOF function continues to follow a drop of water to its down slope neighbour, we call this a trace and all cells that are passed are stored in a thread. This method uses the steepest descent direction from a particular location and moves to the next ceel along that direction, so the new x-location \(x_i\) is found from the previous x-location \(x_{i-1}\) by:

\begin{align*} x_i=x_{i-1}+ \Delta x \cdot {\rm cos}(a_{i-1}) \ ; \ y_i=y_{i-1} \Delta y \cdot {\rm sin}(a_{i-1}) \end{align*}

where \(\Delta x\) and \(\Delta y\) are the cellsizes of the digital elevation model.




Enter a code to specify the way the CREATESOF function need to work. Below the options are described


Apply IFLOW=0 to compute the “spill”-levels, slopes and aspect angles.
The following files will be saved:


used digital elevation data after clipping and/or up- or downscaling, this file is only save whenever the keyword WINDOW is given;


describes the location of the individual “pitts”-cells (value 1 for a “pitts”-cell; 0 for all non-“pitts”-cells);


gradient (\(\frac {\Delta x}{\Delta z}\)) of the steepest slope of each grid cell (only whenever IGRAD=1);


steepest flow angle (azimuth) in radians, north=\(-\frac {1}{2}\pi \); west=0; south=\(\frac {1}{2}\pi \); east=\(\pi \); (only whenever IGRAD=1).


Enter the surface level (Digital Terrain Model DTM) IDF-file that need to be processed, e.g. LEVELIDF=D:\DATA\DTM.IDF.


Enter the minimal size of a pit to become a natural outlet. If the size of the pit exceeds the number given for e.g. PITTSIZE=100, this area becomes a natural outlet and all streams will terminate at that location.


Enter an IDF file that describes the outlet locations, e.g. OUTLETIDF=D:\MODEL\RIVERS.IDF. Each location not equal to the NodataValue in the given OUTLETIDF will be used to terminate the further search for a “spill”-level.


Specify a window for which the entered LEVELIDF will be clipped and resized whenever the entered CELLSIZE \(/ne\) the cellsize of the given IDF file at LEVELIDF. Enter the coordinates of the lower-left corner first and then the coordinates of the upper-right corner, e.g. WINDOW=100000,400000,200000,425000. When WINDOW is absent, the internal dimensions of LEVELIDF will be used.


Specify a cell size for the WINDOW to be clipped out or resized, e.g. CELLSIZE=100.0.


Enter the IGRAD=0 to ignore the computation of the aspects of the DTM as these computations can take significant amount of time, especially the flat areas and the elevation on the core volumes. Choose IGRAD=1 to include the aspect computations. The default value is IGRAD=0 whenever this keyword is absent.


Enter the SOFIDF to save the computed Surface Overland Flow level; this elevation describes the elevation at which surface water will discharge water. For “pitts” this is the overflow level, for all others it is the original DTM-level. By subtracting the original DTM- and SOF-level the size and depth (“pitts”-volume) of the can be computed.


Specify IFLOW=1 to compute the entire “flow path” of the particle flowing over the surface.
The following files will be saved:


describes the entire flow path only if IWRITE=1;


describes the number of discharge zone as specified by the IPF file given by the optional keyword DISZONEIPF.


Enter the surface level (Digital Terrain Model DTM) IDF-file that need to be corrected for flat surfaces, it is logical to use the SOFIDF from a IFLOW=0 run; e.g. LEVELIDF=D:\DATA\SOF.IDF.


Enter the slope IDF file that need to be processed, it is logical to use the slope IDF from a IFLOW=0 run; e.g. SLOPEIDF=D:\DATA\SLOPE.IDF.


Enter the IDF file for the corrected surface level (Digital Terrain Model DTM) for flat areas, e.g. LEVEL_OUTIDF=D:\DATA\SOF_FLAT.IDF.


Enter the slope IDF file corrected for flat areas, e.g. SLOPE_OUTIDF=D:\DATA\SLOPE_FLAT.IDF.


Enter the IDF file for which the total number of flow paths (friction) that passes each grid cell, e.g. COUNTIDF=D:\DATA\FRICTION.IDF;


Enter the name of the IDF file that contains the aspects for each grid cell, e.g. ASPECTIDF=D:\RESULTS\ASPECT.IDF. Normally, this is the result of the simulation with IFLOW=0 (*_ASPECT.IDF).


Enter the name of the IPF file that describes the location of discharge measurement station, e.g. DISZONEIPF=D:\INPUT\DIS.IPF. The minimal requirement of the data in the IPF file is that the first three columns need to describe the \(x\), \(y\) and station number (integer). The resulting {SOFIDF}_ZONE.IDF will present the areas that discharge to the given station numbers. This DISZONEIPF is optional.


Enter IWRITE=1 to write a GEN file of all “flow paths” of particles flowing over the DTM. This will yield the file {ASPECTIDF}.GEN. Writing this file will reduce the performance and it often will yield an enormous file. The default option is IWRITE=0.


Specify IFLOW=2 to compute cumulative volumes for catchments for each location and for given percentiles.


Enter the IDF file with the total number of flow paths that passes each grid cell this is equal to the output file *_COUNT.IDF whenever IFLOW=1;


Enter ITQP=0 to compute the percentiles and ITQP=1 to use the percentiles. Suppose, ITQP=0, the IDF files given at TQPIDF{i} will be created, and whenever ITQP=1, those files at TQPIDF{i} will be used.


Enter a minimal discharge volume to be taken into account in the comutation of percentiles, e.g. MINQ=1000 m\(^3\)/day will exclude those with total discharges less than this amount.


Enter TTQP=0 to compute a total percentile, or enter ITQP=1 to compute monthly percentiles.


Enter the number of percentiles of discharges to be computed, e.g. NTQP=5 means that you need to enter 5 percentiles at PTQP{i}..


Enter the percentile value (0.0 \(\ge \) PTQP{i} \(\le \) 100.0) for the \(i^{\rm th}\) percentile out of NTQP, e.g. PTQP2=50.0.


Enter a folder of the results IDF files to be used for the total volume computation, e.g., RESULTIDF=D:\RESULTS\BDGRIV\BDGRIV_*_L1.IDF. This means that all files will be used to compute a percentile, it depends on the amount of files that meet this wildcard. Whenever TTQP=0 a single percentile will be computed for all files, whenever TTQP=1, a monthly percentile will be computed, this means that a monthly output will be created at OUTPUTFOLDER.


Enter a directory to store all results, e.g. OUTPUTFOLDER=D:\RESULTS\VOLUMES. Here, for each inputfile (RESULTIDF) a percentile will be computed of the current discharge compared to the total (TTQP=0) or monthly (TTQP=1) percentile. The files are called TQ_PERCENT_{yyyymmdd}.IDF. This files gives a unique value of the class at which the current discharge belong. Whenever the value is 3, this means a percentile value that belongs in between the 3\(^{rd}\) and 4\(^{th}\) class. A value of 0 means that the current percentile undercounts the given percentiles in the TQPIDF{i} files, a value above NTQP, means that it exceeds the given percentiles.


Enter the name of the IDF to save the percentiles, e.g. TQPIDF2=D:\RESULTS\VOLUMES\TQP_50.IDF. Whenever TTQP=1, these names will be enhanced by a month identification, e.g. the final name becomes D:\RESULTS\VOLUMES\TQP_50_AUG.IDF to denote the 50\(^{\rm th}\) percentile for the month August.


Specify IFLOW=2 to compute cumulative volumes for catchments for each location and for given percentiles.


Enter the surface level (Digital Terrain Model DTM) IDF-file, it is logical to use the SOFIDF from a IFLOW=1 run; e.g. LEVELIDF=D:\DATA\SOF_FLAT.IDF.


Enter the slope IDF file that need to be processed, it is logical to use the slope IDF from a IFLOW=1 run; e.g. SLOPEIDF=D:\DATA\SLOPE_FLAT.IDF.


Enter the IDF file for which the total number of flow paths (friction) that passes each grid cell, e.g. COUNTIDF=D:\DATA\FRICTION.IDF;


Enter the name of the IDF file that contains the aspects for each grid cell, e.g. ASPECTIDF=D:\RESULTS\ASPECT.IDF. Normally, this is the result of the simulation with IFLOW=0 (*_ASPECT.IDF).


Enter the format of the output file structure. Apply IFORMAT=1 whenever a conventional RIVER package need to be constructed with river conductances, -stage, -bottomlevels and infiltration factors. Apply IFORMAT=2 to construct a ISG file for the SFR package.


Enter the IDF file that represented to river conductance; e.g. RCND_IDF=D:\DATA\RCOND.IDF.


Enter the IDF file that represented to river stage; e.g. RSTG_IDF=D:\DATA\RSTAGE.IDF.


Enter the IDF file that represented to river bottom; e.g. RBOT_IDF=D:\DATA\RBOTTOM.IDF.


Enter the IDF file that represented to river stage; e.g. RINF_IDF=D:\DATA\RINF.IDF.


Enter the size of the rainfall used to compute the dimension of the stream, e.g. RAIN=1.0 means an constant rain event of 1 mm/day. By default RAIN=1.0 mm/day.


Enter the size of the minimal value for the friction (number of passes in the COUNTIDF file) to be used to generate a stream, e.g. MINFRICTION=5.0 means all grid sizes with a friction value of less than 5.0 will not be processed to a IDF-files (see above) or an ISG file. By default MINFRICTION=0.0.


Enter the number of discharge-depth-width relations, e.g. NQDW=3. iMOD will interpolate between three given relations between discharge, depth and width to determine the dimensions at each gridcell based on the friction in the COUNTIDF. By default NQDW=0 and iMOD uses the Manning equation to determine the dimensions at each gridcell.

\begin{equation} d=\left (\frac {Q \times n}{w \times \sqrt {S}}\right )^\frac {3}{5} \end{equation}

where \(d\) is the depth, \(Q\) the discharge, \(n\) Mannings roughness coefficient (\(n\)=0.03), \(w\) is the width (\(w\)=1.0) and \(S\) is the slope between two gridcells. It is advisable to use the QDP-relations as that will results in a more reliable conductance than the Manning Equation since the latter is very sensitive to local gradients in the DTM (slopes).


Enter for each relation the discharge (m\(^3\)/day), depth (m) and width (m), e.g. QDW_3=100.0,1.5,20.0. Start with QDW_1=0.0,0.0,0.0.

Below an example is given for the output variables for IFLOW=0 and IFLOW=1 for an artificial DTM.

Example of (upperleft) a DTM (upperright) the PITTs (lowerleft) the SLOPE and (lowerright) the ASPECT.


Example of (upperleft) a SOF (upperright) the number of passes and (lowerleft) the flowpaths GEN).



Example 1


Example 2


Example 3



The DRNSURF function is used to calculate the drainage level for surface runoff based on info about landuse, DEM and a pointer IDF with info on buildings.




Enter the surface level IDF-files that need to be processed, e.g. SURFIDF=D:\DATA\DEM.IDF.


Enter the pointer IDF with built area = 1, e.g. PNTRIDF=D:\DATA\KDSTR.IDF.


Enter the Landuse IDF file, e.g. LUSEIDF=D:\DATA\LGN6.IDF.


Number of landuse zones to be distinguished.


Enter the i\({}^{th}\) landuse code, e.g. ILUSE1 = 3


Give the percentage of maximum change in drainage level in the area. Used as a treshold.


Give the percentage that accounts for the maximum change in surface level. This percentage will be used to define zones.


Give a percentile value (0-100, 50=median) that accounts for the agricultural area that needs to contain drainage within the zones.


Enter the name of the output IDF file.


Enter the coordinates of the window that need to be computed, solely. Enter coordinates of the lower-left corner first and then the coordinates of the upper-right corner, e.g. WINDOW=100000, 400000, 200000, 425000. When WINDOW= is absent, the entire dimensions of the IDF-window will be used.


Enter the cell size (meter) for the IDF-files that will be created, e.g. CELL_SIZE=25.0.

This figure shows the differences in surface level relative to the defined drainage levels.


Example 1


This example creates an IDF with the drainage elevation for the surface level.