.. include:: notations/notations.rst .. |NSE| replace:: :abbr:`NSE (Nash-Sutcliff Efficiency)` .. |KGE| replace:: :abbr:`KGE (Kling-Gupta Efficiency)` .. |KGE2012| replace:: :abbr:`KGE 2012 (Kling-Gupta Effiency 2012)` .. _optimization: ==================== Parameter estimation ==================== Bound-constrained optimisation ============================== |rameau| uses a modified version of the Rosenbrock method :cite:p:`1960:rosenbrock_automatic` to optimise physical parameter values by confronting simulated hydrological variables with observations. The Rosenbrock method is a bound-constrained iterative numerical method used to find the minimum of an objective function in a multidimensional space. In |rameau|, the global objective function :math:`F` that is minimised is written as a weighted average: .. math:: F = \sum_{i=1}^n \frac{F_q^iP_q^i + F_h^iP_h^i}{P_q^i + P_h^i} with * :math:`F_q^i` the fitting criterion between observed and simulated river flows of the i\ :sup:`th` watershed. * :math:`P_q^i` the weight allocated to the fitting criterion :math:`F_q^i` * :math:`F_h^i` the fitting criterion between observed and simulated groundwater levels of the i:sup:`th` watershed. * :math:`P_h^i` the weight allocated to the fitting criterion :math:`F_h^i` Regression ========== Some parameters are estimated through linear or multiple regression depending on the parameter optimisation settings. Regression for riverflow ------------------------ During an optimisation procedure, one can estimate at most three parameters using a regression procedure: the drainage area, the minimum river flow, and the pumping river coefficient. The regression is achieved by using a least square minimisation algorithm provided by the `fortran standard library `__. The regression procedure tries to explain the relationship between the observed river flow time series :math:`Q_o` (in :math:`\mathrm{m^3.s^{-1}}`) with the simulated flow directly at model reservoir outlets (:math:`Q_w` in :math:`\mathrm{mm}`) and, possibly, with the river pumping time series. During an optimisation iteration run, once the calculation of |ql| is done, the following equation is solved through a regression procedure: .. math:: :label: eq:reg_rivflow Q_o = Aq_w + C_p^rQ_p + Q_e The result of the regression gives access to |A|, :math:`C_p^r` and |Qe|. To enable the estimation of these variables by regression, the user needs to set the key ``opti`` to true for theses parameters: .. code-block:: toml [watershed.1] river.area = { value = 100.0, opti = true } river.exchange_riverflow = { value = 0.00000, opti = true } pumping.river.coefficient = { value = 1.00000, opti = true } If |A| is determined by regression, the correction factor for the drainage area is automatically set to zero and not optimised in the model. .. _regression_gwlevel: Regression for groundwater level -------------------------------- Similarly, storage coefficient |S|, base level |Hb| and the pumping groundwater coefficient |Cpg| can be estimated using a similar regression procedure: .. math:: :label: eq:reg_hground H = \frac{0.1}{S}H_g + C_p^gQ_p^g + H_b To enable the estimation of these variables by regression, the user needs to set the key ``opti`` to true for theses parameters: .. code-block:: toml [watershed.1] groundwater.base_level = { value = 100.0, opti = true } groundwater.storage.coefficient = { value = 100.0, lower = 0.10000, upper = 80.00000, opti = true, sameas = 0 } pumping.groundwater.coefficient = { value = 1.00000, opti = true } See :ref:`groundwater_parameters` and :ref:`pumping_parameters` for more details on theses parameters. The implementation of a simulation that takes groundwater pumping into account is presented in :ref:`this tutorial example <_perpignan>`. .. _multiple_influences: Multiple influences ------------------- In Equation :eq:`eq:reg_hground`, groundwater reservoir level, considered as a proxy of recharge, and groundwater pumping time series are supposed to explain the groundwater level time series of the piezometric well to simulate. In some cases, other processes can explain a part of the piezometric signal. This could be due to tidal effects, other pumping nearby, river levels, drainage flow in a mine, etc. To take into account these multiple influences, it is possible to enhance Equation :eq:`eq:reg_hground` by adding other signal explanatory terms. Let :math:`n` be the number of additional influences, :math:`X_i` the i-th influence, and :math:`A_i` the associated influence coefficient. Equation :eq:`eq:reg_hground` becomes: .. math:: :label: eq:reg_hground_influences H = \frac{0.1}{S}H_g + C_p^gQ_p^g + \sum_{i=1}^n A_iX_i + H_b Coefficients :math:`A_i` are estimated using the same multiple regression procedure as before. To enable the estimation of these variables by regression, the user needs to set the key ``opti`` to true for theses parameters: .. code-block:: toml # Here n = 2 and two coefficients are configured [watershed.1] # First influence defined here influence.groundwater.1.coefficient = { value = 1.00000, opti = true } # Second influence defined here influence.groundwater.2.coefficient = { value = 1.00000, opti = true } See :ref:`influence_parameters` for more details on theses parameters. The implementation of a simulation that takes multiple influences into account is presented in :ref:`this tutorial example <_saint_priest>`. .. _optimization_settings: Optimisation settings ===================== Maximum iteration number ------------------------ The maximum number of iterations of the bound-constrained method. If set to zero, no parameter estimation is performed. .. code-block:: toml [optimization] maxit = 40 Starting and ending dates of optimisation ----------------------------------------- Parameters can be optimised only on a specific period. .. code-block:: toml [optimization] starting_date = 2000-01-01 00:00:00.000 ending_date = 2010-12-31 00:00:00.000 River flow objective function ----------------------------- Possible criteria for river flows are |NSE|, |KGE| and |KGE2012|, while for groundwater levels, the only criterion available is |NSE|. .. code-block:: toml [optimization] river_objective_function = "nse" River flow transformation ------------------------- River flows can be transformed before computing the criterion. The available transformations are "no", "square root", "inverse", "log" and "fifth root". Default value is "no". .. code-block:: toml [optimization] transformation = "no" Optimisation method ------------------- All watersheds can be optimised at once, independently or by Strahler order. .. code-block:: toml [optimization] method = "all" # "independent" or "strahler" Selected watersheds for optimisation ------------------------------------ Specific watersheds can be selected for the optimisation. If omitted, the default behaviour is to optimise all the watersheds at once. .. code-block:: toml [optimization] selected_watersheds = [1, 2] Verbosity of output ------------------- Print informations about the iterative process. Default to false. .. code-block:: toml [optimization] verbose = false .. _optimization_parameters: Watershed optimisation parameters ================================= Weights ------- Weights allocated to the terms of the objective function are assigned per watershed and per type of variable. If river weights are equal to 0, observed river flows will not be used for estimating parameters. If groundwater weights are equal to 0, observed groundwater levels will be ignored. Default value for river weights is 1 and default value for groundwater weight is 0. .. code-block:: toml [watershed.1] river.weight = 1 groundwater.weight = 0.5 [watershed.2] river.weight = 2 groundwater.weight = 1 Bounded observation values -------------------------- Observations can be bounded in order to focus on a specific range of observed values during the optimisation procedure. Default value both for groundwater and river is [0.0, 0.0], i.e. no bounds. .. code-block:: toml [watershed.1] groundwater.obslim = [ 250.00000, 500.00000 ] river.obslim = [ 1.00000, 500.00000 ] Storage coefficient estimation method ------------------------------------- If true, storage coefficient is estimated by regression. Otherwise, it will be estimated through the bound-constrained iterative method. Default value is false. .. code-block:: toml [watershed.1] groundwater.storage.regression = false