message.ts 11.5 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
    /**
     * 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
60
61
62
63
64
    /**
     * la cote amont Z1 est plus basse que la cote aval Z2
     */
    ERROR_ELEVATION_ZI_LOWER_THAN_Z2,

65
66
67
68
69
70
71
72
73
74
    /**
     * 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,

75
76
77
    /**
     * les bornes de l'intervalle d'un ParamDomain sont incorrectes
     */
78
    ERROR_PARAMDOMAIN_INTERVAL_BOUNDS,
79
80
81
82

    /**
     * la valeur du ParamDomain est incorrecte
     */
83
    ERROR_PARAMDOMAIN_INVALID,
84
85
86
87

    /**
     * la calculabilité d'un ParamDefinition est non définie
     */
88
    ERROR_PARAMDEF_CALC_UNDEFINED,
89
90
91
92

    /**
     * la valeur d'un ParamDefinition est non définie
     */
93
    ERROR_PARAMDEF_VALUE_UNDEFINED,
94

95
96
97
98
99
    /**
     * la valeur de la cible d'un ParamDefinition est non définie
     */
    ERROR_PARAMDEF_LINKED_VALUE_UNDEFINED,

100
101
102
    /**
     * la valeur d'un ParamDefinition ne peut pas être changée
     */
103
    ERROR_PARAMDEF_VALUE_FIXED,
104

Mathias Chouet's avatar
Mathias Chouet committed
105
106
107
108
109
    /**
     * la valeur d'un ParamDefinition doit être entière
     */
    ERROR_PARAMDEF_VALUE_INTEGER,

110
    /**
Mathias Chouet's avatar
Fix #73    
Mathias Chouet committed
111
     * la valeur d'un ParamDefinition doit être > 0
112
     */
113
    ERROR_PARAMDEF_VALUE_POS,
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_POSNULL,
119
120

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

    /**
     * la valeur d'un ParamDefinition est en dehors de son intervalle autorisé
     */
128
    ERROR_PARAMDEF_VALUE_INTERVAL,
129
130
131
132

    /**
     * la valeur passée à une méthode de la classe Interval est undefined
     */
133
    ERROR_INTERVAL_UNDEF,
134
135
136
137

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

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

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

155
156
157
158
159
    /**
     * PAB : Erreur de calcul de la cote amont d'une cloison
     */
    ERROR_PAB_CALC_Z1_CLOISON,

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

163
164
165
    /**
     * internationalisation : langue non prise en charge
     */
166
    ERROR_LANG_UNSUPPORTED,
167

168
169
170
171
172
    /**
     * 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,

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

    /**
     * courbe de remous : Condition limite aval >= Hauteur critique : calcul de la partie fluviale à partir de l'aval
     */
181
    INFO_REMOUS_CALCUL_FLUVIAL,
182
183

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

    /**
     * courbe de remous : ressaut hydraulique détecté à l'amont/aval de l'abscisse x
     */
192
    INFO_REMOUS_RESSAUT_DEHORS,
193
194
195
196

    /**
     * courbe de remous : Largeur au niveau des berges
     */
197
    INFO_REMOUS_LARGEUR_BERGE,
198
199
200
201

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

    /**
     * courbe de remous : Tirant d'eau normal
     */
207
    INFO_REMOUS_H_NORMALE,
208
209
210
211

    /**
     * courbe de remous : Ressaut hydraulique détecté entre les abscisses Xmin et Xmax m
     */
212
    INFO_REMOUS_RESSAUT_HYDRO,
213
214
215
216

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

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

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

    /**
     * section : Non convergence du calcul de la hauteur critique (Méthode de Newton)
     */
237
    ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCRITIQUE,
238
239
240
241

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

244
245
246
    /** équivalent de l'erreur ci-dessus, pour la courbe de remous */
    WARNING_YN_SECTION_NON_CONVERGENCE_NEWTON_HNORMALE,

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

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

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

262
263
264
    /** équivalent de l'erreur ci-dessus, pour la courbe de remous */
    WARNING_YN_SECTION_PENTE_NEG_NULLE_HNORMALE_INF,

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

    /**
     * section : calcul impossible à cause d'un rayon nul
     */
273
    ERROR_SECTION_RAYON_NUL,
274
275
276
277

    /**
     * section : calcul impossible à cause d'une surface nulle
     */
278
    ERROR_SECTION_SURFACE_NULLE,
279
280
281
282

    /**
     * newton : pas de convergence
     */
283
    ERROR_NEWTON_NON_CONVERGENCE,
284
285
286
287

    /**
     * newton : dérivée nulle
     */
288
    ERROR_NEWTON_DERIVEE_NULLE,
289

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

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

300
301
302
303
304
    /**
     * Les cotes amont aval sont égales et le débit n'est pas nul
     */
    ERROR_STRUCTURE_Z_EGAUX_Q_NON_NUL,

305
    /** abstract showing number of warning messages encountered in an iterative calculation */
306
    WARNING_WARNINGS_ABSTRACT,
307

308
309
310
311
312
313
    /** 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,

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

319
320
321
322
323
    /**
     * 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,

324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
    /**
     * 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,

340
341
342
    /**
     * StructureKivi : La pelle du seuil doit mesurer au moins 0,1 m. Le coefficient béta est forcé à 0.
     */
343
    WARNING_STRUCTUREKIVI_PELLE_TROP_FAIBLE,
344
345
346
347

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

350
351
352
353
354
355
356
357
358
359
    /**
     * 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,

360
361
362
363
364
    /**
     * La formule du seuil noyé n'est pas conseillé pour un ennoiement inférieur à 0.8
     */
    WARNING_WEIR_SUBMERSION_LOWER_THAN_08,

365
366
367
368
369
370
371
372
373
    /**
     * Vanne levante : ZDV > ZDV max
     */
    WARNING_VANLEV_ZDV_SUP_MAX,

    /**
     * Vanne levante : ZDV < ZDV min
     */
    WARNING_VANLEV_ZDV_INF_MIN,
374
375
376
377

    /**
     * Des problèmes ont été rencontrés durant le calcul
     */
378
379
380
381
382
383
    WARNING_PROBLEMS_ENCOUNTERED,

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

386
387
388
389
390
391
392
/**
 * niveau de criticité du message
 */
export enum MessageSeverity {
    ERROR, WARNING, INFO
}

393
394
395
/**
 * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...)
 */
396
export class Message {
Dorchies David's avatar
lint    
Dorchies David committed
397
398
399
400

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

401
    /**
402
     * code du message
403
     */
404
    private _code: MessageCode;
405

406
    constructor(c: MessageCode, extraVar: { [key: string]: any } = {}) {
407
        this._code = c;
408
        this.extraVar = extraVar;
409
    }
410
411

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

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

428
    public toString(): string {
429
        return MessageCode[this._code] + " " + JSON.stringify(this.extraVar);
430
    }
431
}