11.2.4. Use-case for this chapter
To illustrate the methods discussed in the following sections, in more detail than the previously
introduced dummy examples, a general use-case will be used. This use-case relies on the
flowrate model introduced (along with a descriptive sketch) in The Launcher module and whose
equation is recalled below:
where the eight parameters are:
\(r_{\omega} \in [0.05, 0.15]\:\:(m)\): radius of borehole;
\(r \in [100, 50~000]\:\:(m)\): radius of influence;
\(T_u \in [63~070, 115~600]\:\:(m^{2}/year)\): Transmissivity of the superior layer of water;
\(T_l \in [63.1, 116]\:\:(m^{2}/year)\): Transmissivity of the inferior layer of water;
\(H_u \in [990, 1~110]\:\:(m)\): Potentiometric “head” of the superior layer of water;
\(H_l \in [700, 820]\:\:(m)\): Potentiometric “head” of the inferior layer of water;
\(L \in [1~120, 1~680]\:\:(m)\): length of borehole;
\(K_{\omega} \in [9~855, 12~045]\:\:(m)\): hydraulic conductivity of borehole.
This example has been treated by several authors in the dedicated literature, for instance in [Wor87]. For our purposes, the idea behind the upcoming examples (in this chapter, along with those in the use-case section, see Macros Calibration) is to consider that one has an observation sample. For this function, we consider that from all the inputs, only two have been varied (\(r_{\omega}\) and \(L\)) and only one is actually unknown: \(H_l\). The rest of the variables are set to fixed values: \(r=25050\), \(T_u=89335\), \(T_l=89.55\), \(H_u=1050\), \(K_{\omega}=10950\). This can be written as the following function (using the usual C++ prototype)
void flowrateModel(double *x, double *y) {
double rw = x[1], r = 25050;
double tu = 89335, tl = 89.55;
double hu = 1050, hl = x[0];
double l = x[2], kw = 10950;
double num = 2.0 * TMath::Pi() * tu * (hu - hl);
double lnronrw = TMath::Log(r / rw);
double den = lnronrw * (1.0 + (2.0 * l * tu) / (lnronrw * rw * rw * kw) + tu / tl);
y[0] = num / den;
}
As discussed previously, the function assumes that the user is aware of the input order. In this case, the parameter to be calibrated (\(H_l\)) comes first while the varying inputs (\(r_{\omega}\) and \(L\)) come later. The first lines of all examples should look like this
// Name of the input reference file
TString ExpData="Ex2DoE_n100_sd1.75.dat";
// define the reference
TDataServer *tdsRef = new TDataServer("tdsRef","doe_exp_Re_Pr");
tdsRef->fileDataRead(ExpData.Data());
// define the parameters
TDataServer *tdsPar = new TDataServer("tdsPar","tdsPar");
tdsPar->addAttribute(new TAttribute("hl",700.0,760.0)); // if stochastic laws are needed
// use tdsPar->addAttribute( new TUniformDistribution("hl", 700.0, 760.0) );
// Create the output attribute
TAttribute *out = new TAttribute("out");