message.ts 11.4 KB
Newer Older
1
export enum MessageCode {
2
3
4
    /**
     * pas de pb !
     */
5
    ERROR_OK,
6

7
    /** abstract showing number of error messages encountered in an iterative calculation */
8
    WARNING_ERRORS_ABSTRACT,
9

Mathias Chouet's avatar
Mathias Chouet committed
10
11
12
13
14
15
    /** calculation of Z1 in Fluvial regime has failed (upstream abscissa not present in results) */
    ERROR_BIEF_Z1_CALC_FAILED,

    /** calculation of Z1 in Torrential regime has failed (downstream abscissa not present in results) */
    ERROR_BIEF_Z2_CALC_FAILED,

16
    /**
17
18
     * La dichotomie n'a pas trouvé de solution dans sa recherche d'intervalle:
     * La valeur cible est trop élevée
19
     */
20
    ERROR_DICHO_TARGET_TOO_HIGH,
21
22

    /**
23
24
     * La dichotomie n'a pas trouvé de solution dans sa recherche d'intervalle:
     * La valeur cible est trop basse
25
     */
26
    ERROR_DICHO_TARGET_TOO_LOW,
27
28
29
30
31
32

    /**
     * la dichotomie n'a pas pu trouver automatiquement d'intervalle de départ
     * car la valeur cible de la fonction n'existe pas pour des valeurs de la
     * variable dans son domaine de définition, cad il n'existe pas de solution
     */
33
    ERROR_DICHO_INIT_DOMAIN,
34
35
36
37

    /**
     * la dichotomie n'a pas pu converger
     */
38
    ERROR_DICHO_CONVERGE,
39
40
41
42

    /**
     * le pas pour la recherche de l'intervalle de départ est =0
     */
43
    ERROR_DICHO_NULL_STEP,
44
45
46
47

    /**
     * l'augmentation du pas pour la recherche de l'intervalle de départ est incorrecte (=0)
     */
48
    ERROR_DICHO_INVALID_STEP_GROWTH,
49
50
51
52

    /**
     * impossible de déterminer le sens de variation de la fonction
     */
53
    ERROR_DICHO_FUNCTION_VARIATION,
54

Mathias Chouet's avatar
Mathias Chouet committed
55
56
57
58
59
    /**
     * la cote amont Z1 est plus basse que la cote aval Z2
     */
    ERROR_ELEVATION_ZI_LOWER_THAN_Z2,

60
61
62
63
64
65
66
67
68
69
    /**
     * Something failed when calculating upstream Nubs
     */
    ERROR_IN_CALC_CHAIN,

    /**
     * Something failed in certain steps (but not all), when calculating upstream Nubs with varying parameter
     */
    WARNING_ERROR_IN_CALC_CHAIN_STEPS,

70
71
72
    /**
     * les bornes de l'intervalle d'un ParamDomain sont incorrectes
     */
73
    ERROR_PARAMDOMAIN_INTERVAL_BOUNDS,
74
75
76
77

    /**
     * la valeur du ParamDomain est incorrecte
     */
78
    ERROR_PARAMDOMAIN_INVALID,
79
80
81
82

    /**
     * la calculabilité d'un ParamDefinition est non définie
     */
83
    ERROR_PARAMDEF_CALC_UNDEFINED,
84
85
86
87

    /**
     * la valeur d'un ParamDefinition est non définie
     */
88
    ERROR_PARAMDEF_VALUE_UNDEFINED,
89

90
91
92
93
94
    /**
     * la valeur de la cible d'un ParamDefinition est non définie
     */
    ERROR_PARAMDEF_LINKED_VALUE_UNDEFINED,

95
96
97
    /**
     * la valeur d'un ParamDefinition ne peut pas être changée
     */
98
    ERROR_PARAMDEF_VALUE_FIXED,
99

Mathias Chouet's avatar
Mathias Chouet committed
100
101
102
103
104
    /**
     * la valeur d'un ParamDefinition doit être entière
     */
    ERROR_PARAMDEF_VALUE_INTEGER,

105
    /**
Mathias Chouet's avatar
Fix #73    
Mathias Chouet committed
106
     * la valeur d'un ParamDefinition doit être > 0
107
     */
108
    ERROR_PARAMDEF_VALUE_POS,
109
110

    /**
Mathias Chouet's avatar
Fix #73    
Mathias Chouet committed
111
     * la valeur d'un ParamDefinition doit être >= 0
112
     */
113
    ERROR_PARAMDEF_VALUE_POSNULL,
114
115

    /**
Mathias Chouet's avatar
Fix #73    
Mathias Chouet committed
116
     * la valeur d'un ParamDefinition doit être = 0
117
     */
118
    ERROR_PARAMDEF_VALUE_NULL,
119
120
121
122

    /**
     * la valeur d'un ParamDefinition est en dehors de son intervalle autorisé
     */
123
    ERROR_PARAMDEF_VALUE_INTERVAL,
124
125
126
127

    /**
     * la valeur passée à une méthode de la classe Interval est undefined
     */
128
    ERROR_INTERVAL_UNDEF,
129
130
131
132

    /**
     * la valeur passée à une méthode de la classe Interval est hors de l'intervalle défini
     */
133
    ERROR_INTERVAL_OUTSIDE,
134

Dorchies David's avatar
Dorchies David committed
135
136
137
138
139
    /**
     * Un seul ouvrage régulé est autorisé sur la cloison aval
     */
    ERROR_CLOISON_AVAL_UN_OUVRAGE_REGULE,

140
    /**
141
     * PAB : La cote amont est plus basse que la cote aval
142
     */
143
144
145
146
147
148
    ERROR_PAB_Z1_LOWER_THAN_Z2,

    /**
     * PAB : La cote amont est plus basse que la cloison amont de la passe
     */
    ERROR_PAB_Z1_LOWER_THAN_UPSTREAM_WALL,
149

150
151
152
153
154
    /**
     * PAB : Erreur de calcul de la cote amont d'une cloison
     */
    ERROR_PAB_CALC_Z1_CLOISON,

155
156
    /** Aucune ligne d'eau ne peut être calculée (aucun tirant d'eau à l'amont ni nà l'aval) */
    ERROR_REMOUS_NO_WATER_LINE,
157

158
159
160
    /**
     * internationalisation : langue non prise en charge
     */
161
    ERROR_LANG_UNSUPPORTED,
162

163
164
165
166
167
    /**
     * Dever : La cote du lit de la rivière ne peut pas être supérieure à la cote de l'eau
     */
    WARNING_DEVER_ZR_SUP_Z1,

168
    /**
169
     * courbes de remous : Arrêt du calcul : hauteur critique atteinte à l'abscisse x
170
     */
171
    WARNING_REMOUS_ARRET_CRITIQUE,
172
173
174
175

    /**
     * courbe de remous : Condition limite aval >= Hauteur critique : calcul de la partie fluviale à partir de l'aval
     */
176
    INFO_REMOUS_CALCUL_FLUVIAL,
177
178

    /**
Dorchies David's avatar
lint    
Dorchies David committed
179
180
     * courbe de remous : Condition limite amont <= Hauteur critique :
     * calcul de la partie torrentielle à partir de l'amont
181
     */
182
    INFO_REMOUS_CALCUL_TORRENTIEL,
183
184
185
186

    /**
     * courbe de remous : ressaut hydraulique détecté à l'amont/aval de l'abscisse x
     */
187
    INFO_REMOUS_RESSAUT_DEHORS,
188
189
190
191

    /**
     * courbe de remous : Largeur au niveau des berges
     */
192
    INFO_REMOUS_LARGEUR_BERGE,
193
194
195
196

    /**
     * courbe de remous : Tirant d'eau critique
     */
197
    INFO_REMOUS_H_CRITIQUE,
198
199
200
201

    /**
     * courbe de remous : Tirant d'eau normal
     */
202
    INFO_REMOUS_H_NORMALE,
203
204
205
206

    /**
     * courbe de remous : Ressaut hydraulique détecté entre les abscisses Xmin et Xmax m
     */
207
    INFO_REMOUS_RESSAUT_HYDRO,
208
209
210
211

    /**
     * courbe de remous : La pente de la ligne d'eau est trop forte à l'abscisse x m
     */
212
    ERROR_REMOUS_PENTE_FORTE,
213
214
215
216

    /**
     * courbe de remous : Condition limite aval < Hauteur critique : pas de calcul possible depuis l'aval
     */
Mathias Chouet's avatar
Mathias Chouet committed
217
    WARNING_REMOUS_PAS_CALCUL_DEPUIS_AVAL, // pas changer assiette pour fromage
218
219
220
221

    /**
     * courbe de remous : Condition limite amont > Hauteur critique : pas de calcul possible depuis l'amont
     */
Mathias Chouet's avatar
Mathias Chouet committed
222
223
224
225
226
227
    WARNING_REMOUS_PAS_CALCUL_DEPUIS_AMONT,

    /**
     * courbe de remous : pas de calcul possible, ni depuis l'amont ni depuis l'aval
     */
    ERROR_REMOUS_PAS_CALCUL,
228
229
230
231

    /**
     * section : Non convergence du calcul de la hauteur critique (Méthode de Newton)
     */
232
    ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCRITIQUE,
233
234
235
236

    /**
     * section : Non convergence du calcul de la hauteur normale (Méthode de Newton)
     */
237
    ERROR_SECTION_NON_CONVERGENCE_NEWTON_HNORMALE,
238

239
240
241
    /** équivalent de l'erreur ci-dessus, pour la courbe de remous */
    WARNING_YN_SECTION_NON_CONVERGENCE_NEWTON_HNORMALE,

242
243
244
    /**
     * section : Non convergence du calcul de la hauteur conjuguée (Méthode de Newton)
     */
245
    ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCONJUG,
246
247

    /**
Dorchies David's avatar
lint    
Dorchies David committed
248
     * section : Non convergence du calcul de la hauteur correspondante (Méthode de Newton)
249
     */
Mathias Chouet's avatar
Mathias Chouet committed
250
    ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCOR,
251
252
253
254

    /**
     * section : La pente est négative ou nulle, la hauteur normale est infinie
     */
255
    ERROR_SECTION_PENTE_NEG_NULLE_HNORMALE_INF,
256

257
258
259
    /** équivalent de l'erreur ci-dessus, pour la courbe de remous */
    WARNING_YN_SECTION_PENTE_NEG_NULLE_HNORMALE_INF,

260
261
262
    /**
     * section : calcul impossible à cause d'un périmètre nul
     */
263
    ERROR_SECTION_PERIMETRE_NUL,
264
265
266
267

    /**
     * section : calcul impossible à cause d'un rayon nul
     */
268
    ERROR_SECTION_RAYON_NUL,
269
270
271
272

    /**
     * section : calcul impossible à cause d'une surface nulle
     */
273
    ERROR_SECTION_SURFACE_NULLE,
274
275
276
277

    /**
     * newton : pas de convergence
     */
278
    ERROR_NEWTON_NON_CONVERGENCE,
279
280
281
282

    /**
     * newton : dérivée nulle
     */
283
    ERROR_NEWTON_DERIVEE_NULLE,
284

Dorchies David's avatar
Dorchies David committed
285
286
287
    /**
     * Le paramètre "Cote de radier" ne peut pas être calculé avec cette loi de débit
     */
288
    ERROR_STRUCTURE_ZDV_PAS_CALCULABLE,
Dorchies David's avatar
Dorchies David committed
289

Dorchies David's avatar
Dorchies David committed
290
291
292
293
294
    /**
     * Le débit passant par les autres ouvrages est trop important
     */
    ERROR_STRUCTURE_Q_TROP_ELEVE,

295
296
297
298
299
    /**
     * Les cotes amont aval sont égales et le débit n'est pas nul
     */
    ERROR_STRUCTURE_Z_EGAUX_Q_NON_NUL,

300
    /** abstract showing number of warning messages encountered in an iterative calculation */
301
    WARNING_WARNINGS_ABSTRACT,
302

303
304
305
306
307
308
    /** La cote de fond aval est plus élevée que la code de l'eau aval */
    WARNING_DOWNSTREAM_BOTTOM_HIGHER_THAN_WATER,

    /** La cote de fond amont est plus élevée que la code de l'eau amont */
    WARNING_UPSTREAM_BOTTOM_HIGHER_THAN_WATER,

309
310
311
312
313
    /**
     * La cote de l'eau aval est plus élevée que la cote du seuil (ennoiement possible)
     */
    WARNING_DOWNSTREAM_ELEVATION_POSSIBLE_SUBMERSION,

314
315
316
317
318
    /**
     * La cote de l'eau aval est plus élevée que la cote du centre de l'orifice (ennoiement possible)
     */
    WARNING_ORIFICE_FREE_DOWNSTREAM_ELEVATION_POSSIBLE_SUBMERSION,

319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
    /**
     * Grille orientée, préconisation pour le guidage des poissons : α ≤ 45°
     */
    WARNING_GRILLE_ALPHA_GREATER_THAN_45,

    /**
     * Grille inclinée, préconisation pour le guidage des poissons : β ≤ 26°
     */
    WARNING_GRILLE_BETA_GREATER_THAN_26,

    /**
     * Préconisation pour éviter le placage des poissons sur le plan de grille (barrière physique),
     * ou leur passage prématuré au travers (barrière comportementale) : VN ≤ 0.5 m/s
     */
    WARNING_GRILLE_VN_GREATER_THAN_05,

335
336
337
    /**
     * StructureKivi : La pelle du seuil doit mesurer au moins 0,1 m. Le coefficient béta est forcé à 0.
     */
338
    WARNING_STRUCTUREKIVI_PELLE_TROP_FAIBLE,
339
340
341
342

    /**
     * StructureKivi : h/p ne doit pas être supérieur à 2,5. h/p est forcé à 2,5.
     */
343
    WARNING_STRUCTUREKIVI_HP_TROP_ELEVE,
344

345
346
347
348
349
350
351
352
353
354
    /**
     * La formule de l'échancrure n'est pas conseillée pour un ennoiement supérieur à 0.7
     */
    WARNING_NOTCH_SUBMERSION_GREATER_THAN_07,

    /**
     * La formule de la fente n'est pas conseillée pour un ennoiement inférieur à 0.7 et supérieur à 0.9
     */
    WARNING_SLOT_SUBMERSION_NOT_BETWEEN_07_AND_09,

355
356
357
358
359
    /**
     * La formule du seuil noyé n'est pas conseillé pour un ennoiement inférieur à 0.8
     */
    WARNING_WEIR_SUBMERSION_LOWER_THAN_08,

360
361
362
363
364
365
366
367
368
    /**
     * Vanne levante : ZDV > ZDV max
     */
    WARNING_VANLEV_ZDV_SUP_MAX,

    /**
     * Vanne levante : ZDV < ZDV min
     */
    WARNING_VANLEV_ZDV_INF_MIN,
369
370
371
372

    /**
     * Des problèmes ont été rencontrés durant le calcul
     */
373
374
375
376
377
378
    WARNING_PROBLEMS_ENCOUNTERED,

    /**
     * La valeur du paramètre a été arrondie à l'entier
     */
    WARNING_VALUE_ROUNDED_TO_INTEGER
379
380
}

381
382
383
384
385
386
387
/**
 * niveau de criticité du message
 */
export enum MessageSeverity {
    ERROR, WARNING, INFO
}

388
389
390
/**
 * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...)
 */
391
export class Message {
Dorchies David's avatar
lint    
Dorchies David committed
392
393
394
395

    /** Variables intermédiaires, flags d'erreur */
    public extraVar: { [key: string]: any };

396
    /**
397
     * code du message
398
     */
399
    private _code: MessageCode;
400

401
    constructor(c: MessageCode, extraVar: { [key: string]: any } = {}) {
402
        this._code = c;
403
        this.extraVar = extraVar;
404
    }
405
406

    get code() { return this._code; }
407

408
409
410
411
    /**
     * retourne le niveau de criticité (erreur, warning, info) du message
     */
    public getSeverity(): MessageSeverity {
Dorchies David's avatar
lint    
Dorchies David committed
412
413
414
415
416
        const m: string = MessageCode[this._code];
        const prefix: string = m.split("_")[0];
        for (const s in MessageSeverity) { // pas nécessaire, mais permet d'avoir un contrôle de validité
            if (MessageSeverity[s] === prefix) {
                // tslint:disable-next-line:no-eval
417
                return eval("MessageSeverity." + prefix);
Dorchies David's avatar
lint    
Dorchies David committed
418
419
420
            }
        }
        throw new Error("Message.getSeverity() : valeur de code '" + this._code + "' invalide");
421
422
    }

423
    public toString(): string {
424
        return MessageCode[this._code] + " " + JSON.stringify(this.extraVar);
425
    }
426
}