1 # -*- coding: utf-8 -*-
\r
2 # Copyright (C) 2019 - Jean-Philippe Argaud
\r
6 np.set_printoptions(precision=3)
\r
7 from adao import adaoBuilder
\r
11 Qobs = np.array([10.,20.,30.,40.])
\r
12 Hobs = np.array([0.19694513, 0.298513, 0.38073079, 0.45246109])
\r
14 # Définit les paramètres de l'AD
\r
18 thetaB = [KsInitial,]
\r
20 def functionCrue(Q, K_s):
\r
25 alpha = (Z_m - Z_v)/L
\r
26 H = (Q/(K_s*B*np.sqrt(alpha)))**(3.0/5.0)
\r
29 def obsFunction(theta):
\r
30 # Evaluation de la sortie du modèle
\r
32 sortie = np.zeros((nbobs,))
\r
33 for i in range(nbobs):
\r
34 sortie[i] = functionCrue(Qobs[i],K_s)
\r
37 def obsFunctionMulti(thetas):
\r
40 ret.append( np.array(obsFunction(elt)) )
\r
43 class TestRefFloodTest(unittest.TestCase):
\r
46 # define the problem bounds
\r
50 # Ecart-type des paramètres
\r
54 sigmaTheta = [sigmaKs,]
\r
56 # Ecart-type des observations
\r
57 sigmaH = 0.5 # (m^2)
\r
59 case = adaoBuilder.New()
\r
60 case.set( 'AlgorithmParameters', Algorithm='3DVAR' )
\r
61 case.set( 'Background', Vector=thetaB)
\r
62 case.set( 'BackgroundError', DiagonalSparseMatrix=sigmaTheta )
\r
63 case.set( 'Observation', Vector=Hobs)
\r
64 case.set( 'ObservationError', ScalarSparseMatrix=sigmaH )
\r
65 case.set( 'ObservationOperator', OneFunction= obsFunctionMulti, InputFunctionAsMulti = True)
\r
67 res = case.get("Analysis")[-1][0]
\r
68 self.assertAlmostEqual(res,25.,6)
\r
72 if __name__ == "__main__":
\r