OGS6 transient groundwater flow model calibration with PEST

Hello everyone,

my question relates to a transient groundwater flow model calibration with PEST.

The monsoon period in my study area starts in July and peaks in October. Afterwards, the monsoon stops and the recession period begins until the monsoon appears again in July such that regional groundwater dynamic continously changes. Therefore, I would need a transient calibration.

For the transient calibration, I started first with a steady state calibration (storage = 0) in order to get a calibrated hydraulic conductivity set. This set is used for further transient calibration.

Now, I’m not sure how to integrate the changing recharge into the transient calibration process (1 year) with PEST.

(i) Is there any possibility to set the recharge (e.g. 50 mm/month) between July until October and then with recharge to 0 mm/month between November to July? Recently, I give a constant recharge in the *.prj file.
(If yes, is there any example where I could have a look how it could look like?)

(ii) How does PEST recognize this change in recharge and compare it to the „right“ head observations? PEST probably needs more observations during monsoon and during the recession curve right?

So far, I applied the previous calibrated hydraulic conductivity values.

For the transient calibration I want to calibrate the „storage“.
Here I give initial values of e.g. 1E-4 in the *.prj file to make the model transient again. In the *.pst file I changed the values into e.g. !st0!.

I did not do a transient calibration yet, therefore, it would be nice if I could get some advice from you :slight_smile:



Hi Tuong,
Concerning about your first question:
There are several ways,

1. Curve type parameter definition for boundary condition:
For this, you can have a look at this benchmark (Strengthreduction), although this is not related to groundwater modelling but a good example to study curve type parameter definition for boundary condition.

2. Time-dependent boundary condition.
You can apply the recharge boundary as a time-dependent boundary condition. You can have a look at this benchmark for an example (time_dependent_boundary_condition).

3. Python boundary condition.
Python script could be easily applied as a boundary condition. See this benchmark for an example (python_boundary_condition).

Best regards,
Laxman Kafle

1 Like

Hi @Laxman,
Thanks for your advice!
I will have a closer look on your benchmarks and will give feedback which one works for me to answer question 1 :smile:

Best regards,

Hi @Laxman,

your advice (2) was the solution for my problem (i).
Thank you very much! :wink:

Now, question (ii) regards to the transient calibration with PEST.
Does anyone could share an advice on this?

What I have so far in mind is that PEST needs to know several sets of observated hydraulic head at different times. Each set should be compared to appropriate simulated hydraulic heads.
Is this a suitable approach for a transient calibration?

If yes, I just need to figure out how to integrate this method in PEST.
Could anyone share here some experiences?

If no, could you please give another suggestion how to execute the transient calibration with PEST?

I really appreciate your help! :smiley:

Best regards,

Hi Tuong,

Yes, you can calibrate the transient groundwater model using PEST and OGS.

First, PEST need a objective function for minimizing the residuals. In cases of transient groundwater model, I think you need first calculate the summary statistics of time series. Summary statistics in transient models should NasheSutcliffe coefficient. To calculate NS coefficient, you probably need to write a Python script.

Second, you should modify the control file in PEST input files to inform PEST the objective functions. Note that the objective function is NS coefficient. For the details of the control file in PEST, please read the PEST manual. Then you can do the calibration.

From my experiences in OGS5 calibration, It should work. However, calibrating a transient groundwater model is always difficult due to the nonlinearity of the calibration process. You can also refer to my paper (HESS - Influence of input and parameter uncertainty on the prediction of catchment-scale groundwater travel time distributions), which is a uncertainty analysis using PEST and OGS5.


Hi @Miao,

Thank you for sharing your experience and paper with PEST and OGS! I really appreciate your help!

I followed your advice and calculated the NS coefficient using a Python script. My NS coefficient is still extremely negative because my model is not transient calibrated.

Do I understand you right that you suggest to replace the current objective function (which is the Marquardt algorithm) by the NS coefficient?

For my understanding the NS coefficient shows how well the observed data matches to the simulated data. The objective function in contrast is a numerical optimization algorithm that is comparable to the Gauß Newton method. Do I understand you right?

However, I had a look in the PEST manual and found a chapter that is called “4 Building and Altering a PEST control file”. Did you refer to this chapter? Here, I unfortunately couldn’t find a suggestion how to integrate the NS coefficient into the PEST control file… Could you share another hint, please?

Could you maybe share your model to which you refer in your paper such that I can learn from your model structure.

Thank you.


Hi Tuong,

No, I don’t mean to replace the Marquardt algorithm with NS coefficient. I suggest using the NS coefficient as model output (rather than directly use the time series of simulated heads). This means PEST seeks for the optimal parameter values that minimize the residual between NS coefficient and 1. This is the best solution to calibrate the transient groundwater model from my understanding.

If you need my model, please contact me via email: mjing@live.cn.



1 Like

Hi @Miao

Now, I understand! :smiley:
Thank you and I will contact you via E-Mail.