inversion function

Estimate net rainfall by inversion

Estimate net rainfall by inversion

Estimate net rainfall by inverse modelling, where the model is a convolution between net rainfall and a unit hydrograph in order to simulate discharge.

inversion(Qobs, ...) ## Default S3 method: inversion(Qobs, uh, RnAp, deltat, ...) ## S3 method for class 'units' inversion( Qobs, uh, RnAp, deltat, Bd = 0.01, Dd = 1, Bp = 0.001, Tp = 20, Ad = 0.01, Ap = 0.9, warmup = 10, cooldown = 8, dosplit = TRUE, split = 30, fixedpar = TRUE, parallel = FALSE, cores = NULL, ... ) ## S3 method for class 'transfR' inversion(Qobs, verbose = TRUE, ...)

Arguments

  • Qobs: discharge vector or object of class transfR. If no unit is provided, Qobs is assumed to be in [mm/h]
  • ...: further arguments passed to or from other methods
  • uh: unit hydrograph vector
  • RnAp: net rainfall a priori. If no unit is provided, RnAp is assumed to be in [mm/h]
  • deltat: time step of the time series. If no unit is provided, deltat is assumed to be in [min]
  • Bd: parameter used to maintain a minimum value of standart deviation for low discharge values. If no unit is provided, Bd is assumed to be in [mm/h]
  • Dd: decorrelation time of discharge errors. If no unit is provided, Dd is assumed to be in [h]
  • Bp: parameter used to maintain a minimum value of standart deviation for low net rainfall values. If no unit is provided, Bp is assumed to be in [mm/h]
  • Tp: decorrelation time of net rainfall errors. If no unit is provided, Tp is assumed to be in [h]
  • Ad: parameter equivalent to the coefficient of variation of the discharge measurement error. If no unit is provided, Ad is assumed to be dimensionless
  • Ap: parameter equivalent to the coefficient of variation of the net rainfall error. If no unit is provided, Ap is assumed to be dimensionless
  • warmup: length of the warmup period. If no unit is provided, warmup is assumed to be in [days]
  • cooldown: length of the period removed at the end of the simulation. If no unit is provided, cooldown is assumed to be in [days]
  • dosplit: boolean, if true the inversion is performed by subperiods of length defined by split
  • split: length the subperiods if dosplit is true. If no unit is provided, split is assumed to be in [days]
  • fixedpar: boolean, if false Ap and Ad are calibrated dynamically according to the coefficient of variation of RnAp and Qobs respectively (see details)
  • parallel: boolean, if true the splitting of the inversion by subperiods is parallelised
  • cores: the number of cores to use for parallel execution if parallel is TRUE. If not specified, the number of cores is set to the value of parallel::detectCores()
  • verbose: boolean indicating if information messages should be written to the console

Returns

An object of the same class of Qobs. If Qobs is a transfR object, the same transfR object incremented by the new computed attributes.

Details

In a convolution between the unit hydrograph (uh) and net rainfall that is simulating streamflow at the outltet (Qobs), and where net rainfall is the only unknown variable, this function estimates net rainfall by inversion \insertCite Tarantola1982,Menke1989,Boudhraa2018transfR. It requires an a priori on this net rainfall (that could be estimated by the function rapriori ), a description of the errors on the discharge (Ad, Bd, Dd) and on the net rainfall (Ap, Bp, Tp) that are assumed to be Gaussian and unbiased. Default values of these parameters are taken from \insertCite deLavenne2016;textualtransfR. If fixedpar is deactivated, Ap

is estimated at 20

of variation of Qobs.

It is recommanded to use warmup and cooldown periods in order to reduce the problem of oscillations created by inversion.

If object is provided, results are stored as a new space-time attribute in the object

called "RnAp".

Examples

data(Oudon) icatch <- 1 # Catchment index itime <- 1:1000 # Using the first values for a quicker example Qobs <- Oudon$obs[["Qobs"]][itime,icatch] Qspec <- units::set_units(Qobs/st_area(st_geometry(Oudon$obs)[icatch]), "mm/h") deltat <- units::set_units(1, "h") uc <- velocity(hl = Oudon$hl[[icatch]]) uh <- uh(hl = Oudon$hl[[icatch]], uc = uc, deltat = units::set_units(1,"h"))$prob RnAp <- rapriori(Qobs = Qspec, lagtime = lagtime(hl = Oudon$hl[[icatch]], uc = uc), deltat = deltat) RnInv <- inversion(Qobs = Qspec, RnAp = RnAp, uh = uh, deltat = deltat)

References

\insertRef Boudhraa2018transfR

\insertRef deLavenne2016transfR

\insertRef Menke1989transfR

\insertRef Tarantola1982transfR

See Also

rapriori