structure_props.ts 5.23 KB
Newer Older
1
2
import { ParallelStructure } from "./parallel_structure";

3
export enum StructureType {
Dorchies David's avatar
Dorchies David committed
4
5
6
7
8
    SeuilRectangulaire,
    VanneRectangulaire,
    Orifice,
    SeuilTriangulaire,
    SeuilTriangulaireTrunc
9
10
11
12
13
    // VanneCirculaire,
    // VanneTrapezoidale, SeuilTrapezoidal
}

export enum LoiDebit {
14
15
16
17
18
19
20
21
    // loi de débit Déversoir / Orifice Cemagref 1988 (pour Vanne Rectangulaire)
    GateCem88d,
    // loi de débit Déversoir / Vanne de fond Cemagref 1988 (pour Vanne Rectangulaire)
    GateCem88v,
    // loi de débit Déversoir / Orifice Cemagref 1988 (pour Seuil Rectangulaire)
    WeirCem88d,
    // loi de débit Déversoir / Vanne de fond Cemagref 1988 (pour Seuil Rectangulaire)
    WeirCem88v,
Dorchies David's avatar
Dorchies David committed
22
23
    // loi de débit Vanne Cunge 1980
    GateCunge80,
24
    // loi de débit pour vanne dénoyée
Dorchies David's avatar
Dorchies David committed
25
    RectangularOrificeFree,
26
    // loi de débit pour vanne noyée
Dorchies David's avatar
Dorchies David committed
27
    RectangularOrificeSubmerged,
28
29
30
    // loi de débit pour seuil dénoyé
    WeirFree,
    // Loi Kindsvater-Carter et Villemonte
31
32
    KIVI,
    // Loi de débit seuil triangulaire dénoyé
33
34
    TriangularWeirFree,
    // Loi de débit seuil triangulaire tronqué
35
    TriangularTruncWeirFree,
36
    // Loi de débit fente noyée (Larinier 1992)
Dorchies David's avatar
Dorchies David committed
37
    WeirSubmergedLarinier,
38
39
    // Loi de débit fente noyée (Rajaratnam & Muralidhar 1969)
    WeirSubmerged,
Dorchies David's avatar
Dorchies David committed
40
    // Loi de débit orifice noyé
41
    OrificeSubmerged,
Mathias Chouet's avatar
Mathias Chouet committed
42
43
    // Loi de débit orifice dénoyé
    OrificeFree,
44
    // Loi de seuil noyée Villemonte
45
46
47
48
    WeirVillemonte,
    // Vanne levante Larinier
    VanLevLarinier,
    // Vanne levante Villemonte
Dorchies David's avatar
Dorchies David committed
49
50
51
    VanLevVillemonte,
    // loi de débit Seuil Cunge 1980
    WeirCunge80,
52
53
}

54
export const loiAdmissiblesOuvrages: { [key: string]: LoiDebit[] } = {
Dorchies David's avatar
Dorchies David committed
55
    Orifice: [
Mathias Chouet's avatar
Mathias Chouet committed
56
        LoiDebit.OrificeSubmerged, LoiDebit.OrificeFree
Dorchies David's avatar
Dorchies David committed
57
    ],
58
    SeuilRectangulaire: [
59
        LoiDebit.WeirCem88d, LoiDebit.WeirCem88v, LoiDebit.WeirSubmerged, LoiDebit.WeirSubmergedLarinier,
Dorchies David's avatar
Dorchies David committed
60
        LoiDebit.WeirVillemonte, LoiDebit.WeirFree, LoiDebit.KIVI, LoiDebit.WeirCunge80
61
    ],
62
    SeuilTriangulaire: [
Dorchies David's avatar
Dorchies David committed
63
64
65
66
        LoiDebit.TriangularWeirFree
    ],
    SeuilTriangulaireTrunc: [
        LoiDebit.TriangularTruncWeirFree
67
    ],
68
    VanneRectangulaire: [
Dorchies David's avatar
Dorchies David committed
69
        LoiDebit.GateCem88d, LoiDebit.GateCem88v, LoiDebit.GateCunge80, LoiDebit.RectangularOrificeFree,
Dorchies David's avatar
Dorchies David committed
70
        LoiDebit.RectangularOrificeSubmerged
71
72
73
    ]
};

74
75
export const loiAdmissiblesCloisons: { [key: string]: LoiDebit[] } = {
    Orifice: [
Mathias Chouet's avatar
Mathias Chouet committed
76
        LoiDebit.OrificeSubmerged
77
78
    ],
    SeuilRectangulaire: [
79
        LoiDebit.WeirSubmergedLarinier, LoiDebit.WeirVillemonte
80
81
    ],
    SeuilTriangulaire: [
82
        LoiDebit.TriangularWeirFree
83
84
    ],
    SeuilTriangulaireTrunc: [
85
        LoiDebit.TriangularTruncWeirFree
86
    ],
87
88
89
90
91
92
93
94
95
96
97
98
99
100
};

export const loiAdmissiblesDever: { [key: string]: LoiDebit[] } = {
    SeuilRectangulaire: [
        LoiDebit.WeirFree
    ],
    SeuilTriangulaire: [
        LoiDebit.TriangularWeirFree
    ],
    SeuilTriangulaireTrunc: [
        LoiDebit.TriangularTruncWeirFree
    ]
};

101
102
export const loiAdmissiblesCloisonAval: { [key: string]: LoiDebit[] } = {
    Orifice: [
Mathias Chouet's avatar
Mathias Chouet committed
103
        LoiDebit.OrificeSubmerged
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
    ],
    SeuilRectangulaire: [
        LoiDebit.WeirSubmergedLarinier, LoiDebit.WeirVillemonte
    ],
    VanneLevante: [
        LoiDebit.VanLevVillemonte, LoiDebit.VanLevLarinier
    ],
    SeuilTriangulaire: [
        LoiDebit.TriangularWeirFree
    ],
    SeuilTriangulaireTrunc: [
        LoiDebit.TriangularTruncWeirFree
    ],
    VanneRectangulaire: [
        LoiDebit.GateCem88d, LoiDebit.GateCem88v,
        LoiDebit.RectangularOrificeSubmerged
    ]
};

123
124
125
126
export class StructureProperties {
    /**
     * @return true si les valeurs de StructureType et LoiDebit sont compatibles
     */
127
128
    public static isCompatibleValues(struct: StructureType, loi: LoiDebit, parentNub: ParallelStructure): boolean {
        return parentNub.getLoisAdmissibles()[StructureType[struct]].includes(loi);
129
130
131
    }

    /**
132
133
     * @return la 1ère valeur de StructureType compatible avec la loi de débit, dans le contexte
     * du module de calcul parentNub
134
     */
135
136
137
138
139
    public static findCompatibleStructure(loi: LoiDebit, parentNub: ParallelStructure): StructureType {
        const loisAdmissibles = parentNub.getLoisAdmissibles();
        for (const st in loisAdmissibles) {
            if (loisAdmissibles.hasOwnProperty(st)) {
                const lds: LoiDebit[] = loisAdmissibles[st];
Dorchies David's avatar
lint    
Dorchies David committed
140
141
142
143
                for (const ld of lds) {
                    if (ld === loi) { return (StructureType as any)[st]; }
                }
            }
144
145
146
147
148
        }
        return undefined;
    }

    /**
149
150
151
     * trouve la 1ère valeur de LoiDebit compatible avec le type de structure
     * @param struct type de structure avec laquelle la loi de débit doit être compatible
     * @param subset si non vide, recherche la loi de débit compatible dans ce tableau; sinon prend la 1ere
152
     */
153
154
    public static findCompatibleLoiDebit(struct: StructureType, subset: LoiDebit[],
                                         parentNub: ParallelStructure): LoiDebit {
Mathias Chouet's avatar
Mathias Chouet committed
155

156
        const sst: string = StructureType[struct];
Mathias Chouet's avatar
Mathias Chouet committed
157
158
159
160
        const lois = parentNub.getLoisAdmissibles();

        for (const ld of lois[sst]) {
            if (subset.length === 0 || subset.includes(ld)) {
161
                return ld;
Mathias Chouet's avatar
Mathias Chouet committed
162
163
            }
        }
164
        return undefined;
165
    }
Dorchies David's avatar
lint    
Dorchies David committed
166
}