ParametresSol.hpp 5.53 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 *
 * Copyright (C) 2009-2014 INRA.
 * Copyright (C) 2009-2014 CETIOM.
 *
 *
 * TODO licence
 */


#ifndef SUNFLO_PARAMETRESSOL_HPP
#define SUNFLO_PARAMETRESSOL_HPP

namespace sunflo {

16
17
18
19
20
21
22
23
24
//#define VALEURPARDEFAUT_da_C1 1.5    ///< valeur par defaut
//#define VALEURPARDEFAUT_da_C2 1.5    ///< valeur par defaut
//#define VALEURPARDEFAUT_Hcc_C1 19.7  ///< valeur par defaut
//#define VALEURPARDEFAUT_Hcc_C2 19.7  ///< valeur par defaut
//#define VALEURPARDEFAUT_Fpf    0.2   ///< valeur par defaut
//#define VALEURPARDEFAUT_Vp     0.5   ///< valeur par defaut
//#define VALEURPARDEFAUT_Hpf_C1 9.7   ///< valeur par defaut
//#define VALEURPARDEFAUT_Hpf_C2 9.7   ///< valeur par defaut
//#define VALEURPARDEFAUT_TC     0.0   ///< valeur par defaut
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

struct ParametresSol
{
    /// # profondeur : profondeur maximale d'enracinement (mm)
    /// profondeur accessible aux racines
    //codeMMpourMemoprofondeur Controlled by: usm Universal
    //codeMMpourMemo  Linear interpolation
    double profondeur ;

    /// # Densité apparente du sol dans l'horizon de surface (g.cm-3)
    //codeMMpourMemo parameter: da_C1 1.5    0
    double da_C1 ;

    /// # Densité apparente du sol dans l'horizon racinaire(g.cm-3)
    //codeMMpourMemo parameter: da_C2 1.5    0
    double da_C2 ;

    /// # Paramètres de texture : humidités volumiques (%) à la capacité au champ (horizon surface et racinaire), humidités au semis (2 horizons), humidité au point de flétrissement (2 horizons)
    //codeMMpourMemo parameter: Hcc_C1 19.7 0
    double Hcc_C1 ;

    /// # Paramètres de texture : humidités volumiques (%) à la capacité au champ (horizon surface et racinaire), humidités au semis (2 horizons), humidité au point de flétrissement (2 horizons)
    //codeMMpourMemo parameter: Hcc_C2 19.7 0
    double Hcc_C2 ;

Ronan Trépos's avatar
Ronan Trépos committed
50
51
52
53
54
55
56
57
58
59
60
    //codeMMpourMemo parameter: Hpf_C1 9.7   0
    double Hpf_C1 ;

    //codeMMpourMemo parameter: Hpf_C2 9.7   0
    double Hpf_C2 ;

    //ratio of water if 1 -> Hini = Hcc if 0 -> Hini = Hpf
    double Hini_C1 ;
    //codeMMpourMemo parameter: Hini_C2      19.7 0
    double Hini_C2 ;

61
62
63
64
65
66
67
68
69
70
71
72
    /// # Valeur de la fonction "humidité" pour la minéralisation au point de flétrissement [Vale2006]
    //codeMMpourMemo parameter: Fpf    0.2   0
    double Fpf ;

    /// # Vitesse Potentielle de minéralisation (Kg/Ha/JourNormalise) (0.5 - 0.6 en moyenne)
    //codeMMpourMemo parameter: Vp     0.5   0
    double Vp ;

    /// # Taux de cailloux
    //codeMMpourMemo parameter: TC     0     0
    double TC ;

Ronan Trépos's avatar
Ronan Trépos committed
73
74
75
76
77
78
    /// # Profondeur de l’horizon de surface (mm)
    //codeMMpourMemo define value: zC1 Unconditional Universal
    //codeMMpourMemo zC1 = 300
    double zC1;


79
80
81
    void initialiser( const vle::devs::InitEventList& events ){

        if ( events.exist("profondeur") ){
82
83
84
85
86
87
88
            if (events.get("profondeur")->isDouble()) {
                profondeur = events.getDouble("profondeur");
            } else if (events.get("profondeur")->isInteger()){
                profondeur = (double) events.getInt("profondeur");
            } else {
                throw vle::utils::ModellingError("[ParametersSol] wrong 'profondeur'");
            }
89
        } else {
90
            throw vle::utils::ModellingError("[ParametersSol] missing 'profondeur'");
91
        }
Ronan Trépos's avatar
Ronan Trépos committed
92
        if (events.exist("da_C1") and events.exist("da_C2")) {
93
94
            da_C1 = events.getDouble("da_C1");
            da_C2 = events.getDouble("da_C2");
Ronan Trépos's avatar
Ronan Trépos committed
95
96
97
        } else if (events.exist("da")){
            da_C1 = events.getDouble("da");
            da_C2 = events.getDouble("da");
98
        } else {
Ronan Trépos's avatar
Ronan Trépos committed
99
            throw vle::utils::ModellingError("[ParametersSol] missing 'da_*'");
100
        }
101
        if (events.exist("Hcc_C1") and events.exist("Hcc_C2")) {
102
103
            Hcc_C1 = events.getDouble("Hcc_C1");
            Hcc_C2 = events.getDouble("Hcc_C2");
104
105
106
        } else if (events.exist("Hcc")){
            Hcc_C1 = events.getDouble("Hcc");
            Hcc_C2 = events.getDouble("Hcc");
107
        } else {
108
            throw vle::utils::ModellingError("[ParametersSol] missing 'Hcc_*'");
109
        }
Ronan Trépos's avatar
Ronan Trépos committed
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
        if (events.exist("Hpf_C1") and events.exist("Hpf_C2")) {
            Hpf_C1 = events.getDouble("Hpf_C1");
            Hpf_C2 = events.getDouble("Hpf_C2");
        } else if (events.exist("Hpf")){
            Hpf_C1 = events.getDouble("Hpf");
            Hpf_C2 = events.getDouble("Hpf");
        } else {
            throw vle::utils::ModellingError("[ParametersSol] missing 'Hpf_*'");
        }
        if (events.exist("Hini_C1") and events.exist("Hini_C2")) {
            Hini_C1 = events.getDouble("Hini_C1");
            Hini_C2 = events.getDouble("Hini_C2");
        } else if (events.exist("Hini")){
            Hini_C1 = events.getDouble("Hini");
            Hini_C2 = events.getDouble("Hini");
        } else {
            throw vle::utils::ModellingError("[ParametersSol] missing 'Hini_*'");
        }
128
129
130
        if ( events.exist("Fpf") ){
            Fpf = events.getDouble("Fpf");
        } else {
131
            throw vle::utils::ModellingError("[ParametersSol] missing 'Fpf'");
132
133
134
135
        }
        if ( events.exist("Vp") ){
            Vp = events.getDouble("Vp");
        } else {
136
            throw vle::utils::ModellingError("[ParametersSol] missing 'Vp'");
137
        }
Ronan Trépos's avatar
Ronan Trépos committed
138

139
140
141
        if ( events.exist("TC") ){
            TC = events.getDouble("TC");
        } else {
142
            throw vle::utils::ModellingError("[ParametersSol] missing 'TC'");
143
        }
Ronan Trépos's avatar
Ronan Trépos committed
144
145
146
147
148
        if ( events.exist("zC1") ){
            zC1 = events.getDouble("zC1");
        } else {
            throw vle::utils::ModellingError("[ParametersSol] missing 'zC1'");
        }
149
150
151
152
153
154
155
    }
};

} // namespace

#endif