inversion: Estimate net rainfall by inversion

View source: R/inversion.R

inversionR Documentation

Estimate net rainfall by inversion

Description

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

Usage

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

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 \insertCiteTarantola1982,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 \insertCitedeLavenne2016;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".

Value

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

References

\insertRef

Boudhraa2018transfR

\insertRef

deLavenne2016transfR

\insertRef

Menke1989transfR

\insertRef

Tarantola1982transfR

See Also

rapriori

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)

transfR documentation built on Oct. 2, 2023, 5:07 p.m.