在GMS反向模型中,有两种参数化方法,zonal和pilot points,下面分别介绍这两种方法。
一、zonal
- 1)定义参数区
对模型中的每一个参数多边形(如渗透系数K和补给量)赋一个主值(key value),这个主值应该具有唯一性,一般赋负值效果较好。
注意:在采用zonal方法参数化时,被估算的参数区的数量应该小于观测点的数量 - 2)设置参数数据
(1)勾选Parameter Estimation,开启参数估计选项:MODFLOW——Global Options——Run options——Parameter Estimation
(2)设置初始水头
初始水头最好选用前一次正向模拟结果产生的水头,这样可以保证PEST在计算时更快收敛。如果初始水头与PEST计算过程中的结果相差很大,可能会导致计算失败。
取消勾选Turn off Starting heads equal grid top elevations——Starting Heads——3
D Dataset—Grid ——Head
(3)编辑参数数据
MODFLOW| Parameters ——Initialize from Model,设置初始值、最小值和最大值,注意,初始值的设定很重要,初始值与最终参数值越接近,反向模型越容易收敛
(4)设置最大迭代次数
MODFLOW|PCG—Pre.Conj._Gradient Solver ——Maximum number of outer iterations,Number of inner iterations - 3)加载最优参数数据
PEST模型运行结束后,通过最优参数模拟计算的结果会自动导入到GMS中,但是最优参数值需要通过以下方法加载进来取代初始值。
MODFLOW| Parameters ——Import Optimal Values——选择*.par文件 - 4)查看参数敏感度
PEST会将每次迭代参数估计的敏感度信息保存到SEN文件中,通过Plot Wizard,选择Parameter Sensitivities可以图形可视化各参数的敏感度。
二、pilot points
1、正则化方法
pilot points通过正则化方法实现参数化。通过正则化方法,可以实现估算的参数个数远大于观测点数目,因此,可以定义复杂的参数分布,产生极小的剩余误差。pilot point的正则化方法是PEST中非常有效的方法。
正则化方法有两种:
- Preferred homogeneous regularization
先验信息方程被写进PEST控制文件中,将pilot points互相联系起来,这些方程指示PEST,在缺少PEST目标函数的强影响下,彼此距离很近的pilot points应该具有相同的值。 - Preferred value regularization
先验信息方程被写进PEST控制文件中,将pilot points与它们的初始值联系在一起。这些方程指示PEST,在缺少PEST目标函数的强影响下,pilot points应该与它们的初始值相同。
2、参数化基本步骤
pilot points进行参数化方法通常需要以下步骤:
- 1)创建pilot points
通过GMS中的2D scatter point进行创建,而2D scatter point可以通过2D grid、2D mesh、TIN、map data转换而来。
如果需要在pilot points中添加固定数值,则可以手动创建scatter point,然后选中这些点,右键properties,勾选Fixed Pilot Point一列,那么这些散点所在的单元格最终的参数数值是固定的。 - 2)编辑参数
MODFLOW| Parameters —— Value一栏选择<Pilot Points>——点击按钮打开2D Interpolation Options对话框——选择散点数据集和插值方法 - 3)限制参数估算运行迭代次数
MODFLOW| Parameter Estimation —— Max number of iterations(NOPTMAX)
其中,Prior information power factor数值默认为1,减小这个数值会增加同质性的约束(赋一个较高的权重给先验信息方程),增加这个数值会减小同质性的约束(赋一个较低的权重给先验信息方程) - 4)运行MODFLOW
- 5)查看最优的参数
MODFLOW| Parameters —— Import Optimal Values——选择*.par文件
3、一个模型中使用多个pilot points
- 比如对渗透系数进行分区后,每个分区赋一个主值(一般为负数)。2D Scatter Data创建不同的多个散点集,通过MODFLOW| Parameters —— Value一栏选择<Pilot Points>——点击按钮打开2D Interpolation Options对话框——每一个分区选择不同的散点数据集
- 如果需要对同一个散点集,赋不同的初值,可以激活2D Scatter Data下散点集,Edit|Data Calculator ——Expression 赋初值,Result为新散点集名称——Done