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

Mathias Chouet's avatar
Typo    
Mathias Chouet committed
7
    /** generic error stating that something triggered a fatal error leading to an undefined vCalc */
8
9
    ERROR_SOMETHING_FAILED,

10
    /** abstract showing number of error messages encountered in an iterative calculation */
11
    WARNING_ERRORS_ABSTRACT,
12

Mathias Chouet's avatar
Mathias Chouet committed
13
14
15
16
17
18
    /** 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,

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

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

    /**
     * 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
     */
36
    ERROR_DICHO_INIT_DOMAIN,
37
38
39
40

    /**
     * la dichotomie n'a pas pu converger
     */
41
    ERROR_DICHO_CONVERGE,
42
43
44
45

    /**
     * le pas pour la recherche de l'intervalle de départ est =0
     */
46
    ERROR_DICHO_NULL_STEP,
47
48
49
50

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

    /**
     * impossible de déterminer le sens de variation de la fonction
     */
56
    ERROR_DICHO_FUNCTION_VARIATION,
57

Mathias Chouet's avatar
Mathias Chouet committed
58
59
60
61
62
    /**
     * impossible de résoudre l'équation en raison d'une division par zéro
     */
    ERROR_DIVISION_BY_ZERO,

Mathias Chouet's avatar
Mathias Chouet committed
63
64
65
66
67
    /**
     * la cote amont Z1 est plus basse que la cote aval Z2
     */
    ERROR_ELEVATION_ZI_LOWER_THAN_Z2,

68
69
70
71
72
73
74
75
76
77
    /**
     * 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,

78
79
80
    /**
     * les bornes de l'intervalle d'un ParamDomain sont incorrectes
     */
81
    ERROR_PARAMDOMAIN_INTERVAL_BOUNDS,
82
83
84
85

    /**
     * la valeur du ParamDomain est incorrecte
     */
86
    ERROR_PARAMDOMAIN_INVALID,
87
88
89
90

    /**
     * la calculabilité d'un ParamDefinition est non définie
     */
91
    ERROR_PARAMDEF_CALC_UNDEFINED,
92
93
94
95

    /**
     * la valeur d'un ParamDefinition est non définie
     */
96
    ERROR_PARAMDEF_VALUE_UNDEFINED,
97

98
99
100
101
102
    /**
     * la valeur de la cible d'un ParamDefinition est non définie
     */
    ERROR_PARAMDEF_LINKED_VALUE_UNDEFINED,

103
104
105
    /**
     * la valeur d'un ParamDefinition ne peut pas être changée
     */
106
    ERROR_PARAMDEF_VALUE_FIXED,
107

Mathias Chouet's avatar
Mathias Chouet committed
108
109
110
111
112
    /**
     * la valeur d'un ParamDefinition doit être entière
     */
    ERROR_PARAMDEF_VALUE_INTEGER,

113
    /**
Mathias Chouet's avatar
Fix #73    
Mathias Chouet committed
114
     * la valeur d'un ParamDefinition doit être > 0
115
     */
116
    ERROR_PARAMDEF_VALUE_POS,
117
118

    /**
Mathias Chouet's avatar
Fix #73    
Mathias Chouet committed
119
     * la valeur d'un ParamDefinition doit être >= 0
120
     */
121
    ERROR_PARAMDEF_VALUE_POSNULL,
122
123

    /**
Mathias Chouet's avatar
Fix #73    
Mathias Chouet committed
124
     * la valeur d'un ParamDefinition doit être = 0
125
     */
126
    ERROR_PARAMDEF_VALUE_NULL,
127
128
129
130

    /**
     * la valeur d'un ParamDefinition est en dehors de son intervalle autorisé
     */
131
    ERROR_PARAMDEF_VALUE_INTERVAL,
132
133
134
135

    /**
     * la valeur passée à une méthode de la classe Interval est undefined
     */
136
    ERROR_INTERVAL_UNDEF,
137
138
139
140

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

Dorchies David's avatar
Dorchies David committed
143
144
145
146
147
    /**
     * Un seul ouvrage régulé est autorisé sur la cloison aval
     */
    ERROR_CLOISON_AVAL_UN_OUVRAGE_REGULE,

148
    /**
149
     * PAB : La cote amont est plus basse que la cote aval
150
     */
151
152
153
154
155
156
    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,
157

158
159
160
161
162
    /**
     * PAB : Erreur de calcul de la cote amont d'une cloison
     */
    ERROR_PAB_CALC_Z1_CLOISON,

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

166
167
168
    /**
     * internationalisation : langue non prise en charge
     */
169
    ERROR_LANG_UNSUPPORTED,
170

171
172
173
174
175
    /**
     * 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,

176
    /**
177
     * courbes de remous : Arrêt du calcul : hauteur critique atteinte à l'abscisse x
178
     */
179
    WARNING_REMOUS_ARRET_CRITIQUE,
180
181
182
183

    /**
     * courbe de remous : Condition limite aval >= Hauteur critique : calcul de la partie fluviale à partir de l'aval
     */
184
    INFO_REMOUS_CALCUL_FLUVIAL,
185
186

    /**
Dorchies David's avatar
lint    
Dorchies David committed
187
188
     * courbe de remous : Condition limite amont <= Hauteur critique :
     * calcul de la partie torrentielle à partir de l'amont
189
     */
190
    INFO_REMOUS_CALCUL_TORRENTIEL,
191
192
193
194

    /**
     * courbe de remous : ressaut hydraulique détecté à l'amont/aval de l'abscisse x
     */
195
    INFO_REMOUS_RESSAUT_DEHORS,
196
197
198
199

    /**
     * courbe de remous : Largeur au niveau des berges
     */
200
    INFO_REMOUS_LARGEUR_BERGE,
201
202
203
204

    /**
     * courbe de remous : Tirant d'eau critique
     */
205
    INFO_REMOUS_H_CRITIQUE,
206
207
208
209

    /**
     * courbe de remous : Tirant d'eau normal
     */
210
    INFO_REMOUS_H_NORMALE,
211
212
213
214

    /**
     * courbe de remous : Ressaut hydraulique détecté entre les abscisses Xmin et Xmax m
     */
215
    INFO_REMOUS_RESSAUT_HYDRO,
216
217
218
219

    /**
     * courbe de remous : La pente de la ligne d'eau est trop forte à l'abscisse x m
     */
220
    ERROR_REMOUS_PENTE_FORTE,
221
222
223
224

    /**
     * courbe de remous : Condition limite aval < Hauteur critique : pas de calcul possible depuis l'aval
     */
Mathias Chouet's avatar
Mathias Chouet committed
225
    WARNING_REMOUS_PAS_CALCUL_DEPUIS_AVAL, // pas changer assiette pour fromage
226
227
228
229

    /**
     * courbe de remous : Condition limite amont > Hauteur critique : pas de calcul possible depuis l'amont
     */
Mathias Chouet's avatar
Mathias Chouet committed
230
231
232
233
234
235
    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,
236
237
238
239

    /**
     * section : Non convergence du calcul de la hauteur critique (Méthode de Newton)
     */
240
    ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCRITIQUE,
241
242
243
244

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

247
248
249
    /** équivalent de l'erreur ci-dessus, pour la courbe de remous */
    WARNING_YN_SECTION_NON_CONVERGENCE_NEWTON_HNORMALE,

250
251
252
    /**
     * section : Non convergence du calcul de la hauteur conjuguée (Méthode de Newton)
     */
253
    ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCONJUG,
254
255

    /**
Dorchies David's avatar
lint    
Dorchies David committed
256
     * section : Non convergence du calcul de la hauteur correspondante (Méthode de Newton)
257
     */
Mathias Chouet's avatar
Mathias Chouet committed
258
    ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCOR,
259
260
261
262

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

265
266
267
    /** équivalent de l'erreur ci-dessus, pour la courbe de remous */
    WARNING_YN_SECTION_PENTE_NEG_NULLE_HNORMALE_INF,

268
269
270
    /**
     * section : calcul impossible à cause d'un périmètre nul
     */
271
    ERROR_SECTION_PERIMETRE_NUL,
272
273
274
275

    /**
     * section : calcul impossible à cause d'un rayon nul
     */
276
    ERROR_SECTION_RAYON_NUL,
277
278
279
280

    /**
     * section : calcul impossible à cause d'une surface nulle
     */
281
    ERROR_SECTION_SURFACE_NULLE,
282
283
284
285

    /**
     * newton : pas de convergence
     */
286
    ERROR_NEWTON_NON_CONVERGENCE,
287
288
289
290

    /**
     * newton : dérivée nulle
     */
291
    ERROR_NEWTON_DERIVEE_NULLE,
292

Dorchies David's avatar
Dorchies David committed
293
294
295
    /**
     * Le paramètre "Cote de radier" ne peut pas être calculé avec cette loi de débit
     */
296
    ERROR_STRUCTURE_ZDV_PAS_CALCULABLE,
Dorchies David's avatar
Dorchies David committed
297

Dorchies David's avatar
Dorchies David committed
298
299
300
301
302
    /**
     * Le débit passant par les autres ouvrages est trop important
     */
    ERROR_STRUCTURE_Q_TROP_ELEVE,

303
304
305
306
307
    /**
     * Les cotes amont aval sont égales et le débit n'est pas nul
     */
    ERROR_STRUCTURE_Z_EGAUX_Q_NON_NUL,

308
309
310
    /** On essaye d'appliquer une puissance non entière à un nombre négatif */
    ERROR_NON_INTEGER_POWER_ON_NEGATIVE_NUMBER,

311
    /** abstract showing number of warning messages encountered in an iterative calculation */
312
    WARNING_WARNINGS_ABSTRACT,
313

314
315
316
317
318
319
    /** 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,

320
321
322
323
324
    /**
     * La cote de l'eau aval est plus élevée que la cote du seuil (ennoiement possible)
     */
    WARNING_DOWNSTREAM_ELEVATION_POSSIBLE_SUBMERSION,

325
326
327
328
329
    /**
     * 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,

330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
    /**
     * 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,

346
347
348
    /**
     * StructureKivi : La pelle du seuil doit mesurer au moins 0,1 m. Le coefficient béta est forcé à 0.
     */
349
    WARNING_STRUCTUREKIVI_PELLE_TROP_FAIBLE,
350
351
352
353

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

356
357
358
359
360
361
362
363
364
365
    /**
     * 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,

366
367
368
369
370
    /**
     * La formule du seuil noyé n'est pas conseillé pour un ennoiement inférieur à 0.8
     */
    WARNING_WEIR_SUBMERSION_LOWER_THAN_08,

371
372
373
374
375
376
377
378
379
    /**
     * Vanne levante : ZDV > ZDV max
     */
    WARNING_VANLEV_ZDV_SUP_MAX,

    /**
     * Vanne levante : ZDV < ZDV min
     */
    WARNING_VANLEV_ZDV_INF_MIN,
380
381
382
383

    /**
     * Des problèmes ont été rencontrés durant le calcul
     */
384
385
386
387
388
389
    WARNING_PROBLEMS_ENCOUNTERED,

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

392
393
394
395
396
397
398
/**
 * niveau de criticité du message
 */
export enum MessageSeverity {
    ERROR, WARNING, INFO
}

399
400
401
/**
 * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...)
 */
402
export class Message {
Dorchies David's avatar
lint    
Dorchies David committed
403
404
405
406

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

407
    /**
408
     * code du message
409
     */
410
    private _code: MessageCode;
411

412
    constructor(c: MessageCode, extraVar: { [key: string]: any } = {}) {
413
        this._code = c;
414
        this.extraVar = extraVar;
415
    }
416
417

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

419
420
421
422
    /**
     * retourne le niveau de criticité (erreur, warning, info) du message
     */
    public getSeverity(): MessageSeverity {
Dorchies David's avatar
lint    
Dorchies David committed
423
424
425
426
427
        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
428
                return eval("MessageSeverity." + prefix);
Dorchies David's avatar
lint    
Dorchies David committed
429
430
431
            }
        }
        throw new Error("Message.getSeverity() : valeur de code '" + this._code + "' invalide");
432
433
    }

434
    public toString(): string {
435
        return MessageCode[this._code] + " " + JSON.stringify(this.extraVar);
436
    }
437
}