iMOD User Manual version 4.4 (html)

11.14Tutorial 14: iPEST

This tutorial gives a brief introduction to parameter optimalisation using iPEST. The technique is described in more detail in section Section 12.33. It also uses the functionalities of the iPEST Analyser which is described in Section 7.16.


This is what you will do:

Required Data

For this tutorial you need the following iMOD Data Files/folders:

Note: If you are a left-handed person and you converted your mouse button settings, ’left mouse button’ should be ’right mouse button’ and vice versa in these tutorials.

Getting Started

The model configuration has been prepared already, the only thing that misses are the measurements. Therefore, the first thing we’re going to do is to define some measurements for our model with two model layers. Let’s display the boundary conditions such the the graphical window is easily adjusted such that we can enter the measurements.

Now we’re going to create an IPF file for the following coordinates.

Table 11.10: List of measurements

x-coordinate y-coordinate layer measurement weight
201069.874 401374.506 1 8.095 1
200200.331 402269.698, 1 9.178 1
200869.692 400168.484 1 9.339 1
200494.349 401100.975 1 8.011 1
201879.988 400867.853 1 8.353 1
201132.431 401141.383 1 8.321 1
202048.892 401846.968 1 9.982 1
200982.294 402033.466 2 7.745 1
200481.838 400544.589 2 8.520 1
201057.363 401203.549 2 8.214 1
200760.217 401275.040 2 8.027 1
201789.281 400905.152 2 8.285 1
201529.669 401371.398 2 8.385 1
201029.212 400473.098 2 8.806 1
202270.970 401001.510 2 8.086 1

If you’re already quite familiar with iMOD, you can create this IPF file outside iMOD (Excel, Notepad etc.) very easily and continue after step Item 27..
If you’re not familiar with iMOD (why are you trying this turorial in the first place ?), you can create the IPF by hand trough the steps Item 8. to Item 27.. (If you get bored, know that this IPF is prepared for you in \TUTORIALS \TUT_PST \DBASE\MEASURES.IPF)

If you did everything okay, the following image should be on your screen.


Figure 11.172: Example of all the points that are necessary for the optimization.

Now we need to add additional information to the points.

Here we can create columns and define additional columns to the points, let’s do that. First we rename our first column.

If you did everything okay, you can fill in the table as shown in the following figure.


Figure 11.173: Example of all the points that are necessary for the optimization.

Now we’ve made our measurements we’re ready to start the parameter optimization. We need to add the measurements to our PRJ file and define the parameters to be optimized.

The entire model configuration has been filled in, the model isn’t complicated and defined by two layers with a river system defined by the GHB package. Feel free to open some of the files to inspect the model set-up.

Let’s add the parameter estimation package.

In the Parameter Estimation Settings window it is possible to specify the configuration that is needed for iPEST.


Figure 11.174: Example of all the points that are necessary for the parameter optimization.

For more details, please have a check at the section Section 5.5.2. For now we leave most of the configuration at its default settings. Three things are necessary to specify, first we need to specify the parameters to be optimized, secondly, we need to define the zones for which the parameters are altered and thirdly, we need to fill in our measurements. Let’s do that.

If you did everything correct, the tab Parameters shows up as follows.


Figure 11.175: Example of the configured two parameters to be optimized.

Observe that we now have 2 sets of parameters. Now we specify the zone to which the parameters need to be assigned to.

It should all look as follows:


Figure 11.176: Example of the zone for the two parameters to be optimized.

Observe that we now have 1 zone. Now we specify the measurements to which the parameters need to be optimized against.

The window should look as follows, and we’re done.


Figure 11.177: Example of the measurements for the two parameters to be optimized.

Running the Model

Next, let’s run the model - isn’t that cool ?

The model will run for a while. There are two ways to explore the results of the optimization. One is to look into the files directly, this is for the advanced users. For less advanced users, there is a nice tool called the iPEST Analyser that can be utilized for examining the results of the optimization.

If the model optimization is finished there will be a pop-up window, if that appears we can continue.

You’ll see a dashboard filled in with all kind of different information that is of importance to your parameter estimation. All these functionalities are described in section Section 7.16. You might be selecting iteration #4 as most optimal as the objective function value does not change anymore. Especially in the end trajectory of a parameter estimation, parameters might change more-and-more for other deficits in the model. The art is to select the correct iteration just before those parameter might be abused.


Figure 11.178: Example of the iPEST Analyser for the two parameters that were optimized.

Use Parallel iPEST

Whenever many parameters are concerned, it is advised to use iPEST Parallel. This allows multiply simulations, that are needed for the sensitivity computations, to be carried out in parallel. So, this what we’re going to do. We define so-called pilot points and optimize those with iPEST Parallel, pretty nice isn’t it.

If we want to use Pilot Points, instead of zones, we need to modify the number of parameters as well as the zones. Each pilot point is a parameter, so let’s enter them.

In the end it should look as follows:


Figure 11.179: Example of the parameter settings for the calibration with Pilot Points.

As for Pilot Points, it is advices to turn on the Singular Values Decomposition (SVD). This will mathematically filter out redundancies in the jacobian matrix (i.e. the sensitivity matrix). This is a form of automatical-regularisation to yield a mathematical robust inverse problem. See section Section 12.33 for more detailed information. Also, we turn off the Tikhonov Regularisation (which is turned on by default), this allows the pilot points to differ from the prior estimated values (initial values) without punishing.

So it should all look like this.


Figure 11.180: Example of the parameter settings for the calibration with Parrellel iPEST.

Let save it and run it.

The optimization will run in a command tool, which you might want to select to see what happens.


Figure 11.181: Running of the parameter optimization for the calibration with Parrallel iPEST.

The optimization end with the message Pest Iteration terminated: PEST_ITER (=10) = PEST_NITER (=10). Althoug the optimization was not finished yet, it has been terminated because no more iterations were allowed. Nevertheless we inspect the results to see how the optimization went. Let’s start the iPEST Analyser again.

You can experiment with the different features to examine how the optimization went.


Figure 11.182: Results of the parameter optimization for the calibration with Parrallel iPEST of Pilot Points.

Finally it is interesting how the adjusted permeability map look like after the optimization. That is an IDF file that we can open in iMOD.

You see that the pattern that has been found to lower the objective function shows a clear difference with high values in the centre and significant lower values in the north and south.


Figure 11.183: Results of the permeability after the parameter optimization for the calibration of Pilot Points.

It is obvious that any result of the parameter optimalisation need to be evaluated with knowledge of the geology. It is important to question yourself “Is it geological sound what the optimization found?”. If not, it indicates some model-error(s) for which the optimization wants to compensate.

Please have a look at the iMODBatch function RUNFILE. All of the things we did in this tutorial can be done in batch via that function. For repetitious work, we recommend you to work with that function. An easy example of this could be: