DECLARA.PAS 17.9 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
UNIT DECLARA;

INTERFACE

const
 YNbmaxAn      = 250;       {nombre maximal d'ann‚es pouvant ˆtre trait‚es dans le calcul … rebours}
 YnbmaxTpsRet  = 12;
 Ynbfreq       = 8;
 YNmaxLacs     = 4;         {nombre maximal de lacs autoris‚}
 YNmaxStat     = 30;
 YnbmaxIter    = 100;
Dorchies David's avatar
Dorchies David committed
12
 YNbmaxVersion = 25;        {nombre max de versions de paramŠtres barrages et r‚seaux}
13
14
15
16
17
18
19
20
21
22
23
24
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 YTouComNul    : double = 1e-10;
 YSeuilConv    = 1e-10; {seuil de convergence}

Type
 YChai2        = string[2];
 YChai8        = string[8];
 YChai10       = string[10];
 YTab1         = array[1..YNmaxLacs] of double;
 Ytab2         = Array[1..YNbmaxAn] of double;
 YTabInt1      = array[1..YNmaxLacs] of integer;
 YTypTpsRet    = array[1..YNbmaxTpsRet] of double;
 YTypFOD       = file of double;
 YTypFreq      = array[1..YNbFreq] of double;

const
 YSuffixe      : array[1..2] of YChai2 =('.1','.2');
 YInterpolPermi= true;      {pour autoriser reconst des lacunes isol‚es de d‚bits stations}
 YLacune       = -99;       {code lacune de d‚bit}
 YNomFicRangCal= 'compteur';
 YNomFicSortie = 'CondStat';      {nom du fichier r‚sumant les conditions du calcul et des stats de r‚sultats}
 YnomFicResult1= 'Qobs-P-R.txt';  {nom de fichiers de r‚sultats : chronique des d‚bits observ‚s}
 YnomFicResult2= 'Q-ideal.txt';  {nom fichiers de r‚sult. : chron. contraintes, consignes, r‚part. objectif, Qstock‚ id‚al }
 YNomFicResult3= 'QStock-I.txt';      {nom de fichier de r‚sultats : chronique des d‚bits stock‚s min, max et id‚aux}
 YNomFicResult4= 'Volumes.txt';
 YNomFicResult5= 'Echecs-Q.txt';
 YNomFicResult6= 'EchecTri.txt';
 YNomFicResultVobj= 'Vobj';
 YNomFicResultVop = 'Vop';
 YNomFicResultM= 'MANQUE';
 YNomFicResDef = 'ECHEC';

 YnomFicReglage= 'REGLAGE.TXT'; {nom du fichier des r‚glages pour r‚partition des taches'}
 YNomFicChoix  = 'CHOIX.TXT'; {nom du fichier des options de calcul}
 YNomFicMode   = 'MODE.TXT'; {nom du fichier du code 0 ou 1 d‚terminant les entr‚es par saisie clavier ou lecture fichier}
 YNomFicFin    = 'FIN.TXT'; {nom du fichhier d‚truit au d‚but du programme puis cr‚‚ et ferm‚ … la fin}
 YNomFicQdef   = 'Qdef-';   {base du nom des fichiers typ‚s de d‚faillance de d‚bit}
 YNomFicQST    = 'QST-';   {base du nom des fichiers typ‚s de d‚bit stock‚}
 YNomFicV      = 'Vobj-';  {base du nom des fichiers typ‚s de volume stock‚ ‚valu‚s en chrono inverse}
 YNomFicVobj0  = 'Vobj0-'; {base du nom des fichiers typ‚s de volume stock‚ ‚valu‚s en chrono inverse avec capacit‚ infinie}
 YNomFicVges   = 'Vges-';   {base du nom des fichiers typ‚s de volume stock‚ ‚valu‚s en sens chronologique}
 YNomFicVdef   = 'Vdef-';  {base du nom des fichiers typ‚s de manque de capacit‚}
 YNomFicVop    = 'Vop-';   {base du nom des fichiers typ‚s de volume op‚rationnel}
 YNomFicTpsRet = 'RETOUR.TXT';{nom du fichier des temps de retour d‚sir‚s pour analyse statistique}

 YNbmaxPivot   = 10;         {nombre maximal de dates pivot autoris‚}
 YNbmaxSeuil   = 5;         {nombre max de seuil dans formule}
 YDelaiMin     = -8;        {indice inf‚reur du tableau des d‚bits lus}
 YDelaiMax     = 4;         {indice sup‚rieur du tableau des d‚bits lus}
 YNomDebit     : array[1..4] of string = ('QMres','QVres','QMref','QVref');
 YNomParamLac  : array[1..13] of string[20] =
                  ('nom de station aval','nombre de stations',
                   'Qemin','Qemax','Qsmin','Qsmax','Volume','Delai de propagation',
                   'type de formule ou nombre de dates','borne de gradient',
                   'quantiemes','rangs de formules','formule');
 YNomParamReso : array[1..16] of string[42] =
                  ('nombre de stations amont ou intermediaires', 'identifiant aval',
                   'identifiant amont','identifiant intermediaire','PKV','PKM',
                   'PKamont','TV','TM','Tamont','Tintermediaire','Saval','SV',
                   'SM','Samont','Sintermediaire');
Dorchies David's avatar
Dorchies David committed
72
 YRepB         ='BARRAGES\';
73
74
75
76
 YRepR         ='RESULTAT\';
 YRepD         ='DONNEES\';
 YRepO         ='OBJECTIF\';
 YRepP         ='PARAMETR\';
Dorchies David's avatar
Dorchies David committed
77
 YRepS         ='RESEAUX\';
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 YRepT         ='TEMPORAI.RE\';
 YSeparateur   : set of byte = [0..39,42,44,58,59,123..255];
 YSeuilRconv   = 0.001; {seuil relatif de convergence dans le calcul … rebours, sur volume lac}
 YTpsRetParDefo: YTypTpsRet =(2,3,4,5,10,15,20,25,50,100,150,200);
 YTpsFreq      : YTypFreq=(1000.0,500.0,200.0,100.0,50.0,20.0,10.0,5.0);
 YEcartMax     : double=0; {max d'‚cart absolu obtenu entre d‚bit aval et d‚bit aval objectif atteignable}


var

 YFiText       : text;  {fichier texte}
 YFicSortie    : text;  {fichier texte pour sortie de r‚sultats}
 YFicResult1   : text;  {fichiers texte pour sortie de r‚sultats}
 YFicResult2   : text;  {fichiers texte pour sortie de r‚sultats}
 YFicResult3   : text;  {fichier texte pour sortie de r‚sultats}
 YFicResult4   : text;

 YFicQdef      : array[0..3] of YTypFOD;
 YFicVdef      : array[1..YNmaxLacs] of YTypFOD;
 YFicQST       : array[1..YNmaxLacs] of YTypFOD;
 YFicVobj      : array[1..YNmaxLacs] of YTypFOD;
 YFicVobj0     : array[1..YNmaxLacs] of YTypFOD;
 YFicVop       : array[1..YNmaxLacs] of YTypFOD;
 YFicVges      : array[1..YNmaxLacs] of YTypFOD;

 YNomFicDebit   : string; {nom du fichier des d‚bits naturels}
 YNomFicObjectif: string; {nom du fichier des d‚bits objectifs}
Dorchies David's avatar
Dorchies David committed
105
106
 YNomRepBarrage : string; {nom du r‚pertoire (chemin complet) des fichiers de rŠgles barrage}
 YNomRepReseau  : string; {nom du r‚pertoire (chemin complet) des fichiers de r‚seaux associ‚s aux barrages}
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155

 YExtension    : string[2];
 YNum          : string[2];
 YNomStatAval  : Ychai8; {code d'identification de station aval du systŠme}
 YJJ_MM_AAAA   : YChai10;
 YDat1         : YChai10;
 YDat2         : YChai10;
 YChaine93     : string[93];
 YChaine       : string;
 YNomFicLacs   : string;    {nom du fichier des paramŠtres des lacs}
 YResume       : string;

 YSaisie       : boolean; {true pour saisie des choix de calcul au clavier, false pour lecture sur fichier}
 YChoixFreq    : boolean; {true si param‚trage de formule de fr‚quence}
 YConverge     : boolean;
 YDernierLuGlop: boolean;
 YOuvertEtLu   : boolean;
 YCalculPossibl: boolean; {true si paramŠtres lus sans problŠme dans fichiers en entr‚e}
 YGlopGlopDebit: boolean; {true si nombre suffisant de lignes lues dans fichier de d‚bit de base}
 YlacuneDebit  : boolean; {true si d‚bits stations existent pour calcul de Qnat prise ou restit.}
 YStandard     : boolean; {true si r‚partition des tƒches selon volume exploitable r‚el des lacs}

 Yan           : integer; {ann‚e}
 YAnDebutV     : integer;
 YAnFinV       : integer;
 YAnPremier    : integer;
 YAnDernier    : integer;
 YChoix        : integer; {0 pour saisie clavier et autre pour lecture sur fichier (options de calcul)}
 YCode         : integer; {code de bonne traduction de chaŒne en num‚rique}
 YCompteur     : integer; {rang du calcul}
 YjTpsRet      : integer;
 YJour         : integer; {jour}
 YJourDebutLac : integer;
 YJourFinLac   : integer; {jour de fin de calcul … rebours}
 YMois         : integer; {mois}
 YMoisDebutLac : integer;
 YMoisFinLac   : integer; {mois de fin de calcul … rebours}
 YNbAn         : integer; {nbre d'ann‚es entiŠres du calcul … rebours}
 YNbLacs       : integer; {nombre de r‚servoirs}
 YNbPbReglage  : integer; {nombre de problŠmes de lecture des r‚glages de volume de r‚servoir}
 YNbTpsRet     : integer; {nombre de temps de retour utilis‚s pour analyse statistique}
 YNbQobj       : integer; {nombre de triplets jour/date d‚bit objectif lus et corrects}
 YNIter        : integer; {nombre d'it‚rations dans calcul de r‚partition}
 YNItermax     : integer;
 YNMalLu       : integer; {nombre de problŠmes de lecture des paramŠtres}
 YNProbleme    : integer; {Nombre de problŠmes d‚tect‚s sur les paramŠtres}
 YQuant        : integer;
 YRangDelai    : integer; {rang de d‚bit dans tableau YQ}
 YRangLac      : integer; {rang du lac}
Dorchies David's avatar
Dorchies David committed
156
157
 YRangPBarrage : integer; {rang et nom du sous-r‚pertoire contenant une version de paramŠtres r‚servoirs}
 YRangPReseau  : integer; {rang et nom du sous-r‚pertoire contenant une version de paramŠtres r‚seau}
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
 YrangStatAval : integer; {rang de station aval syst. dans fichier des d‚bits de base}
 YSuccesRepart : integer; {code objectif r‚partition : -1= non atteint, 0=non converg‚, 1=atteint, 2=d‚pass‚}
 YTest         : integer; {1 si croissance de pr‚lŠvement total en fonction de QS0, 0 sinon}
 YTypeDebit    : integer; {1=QRM, 2=QRV, 2=QFM, 4=QFV}
 YTypeObjectif : integer; {0:minimal, 1:maximal}

 YDateInitiale : longint; {date de d‚but des donn‚es (ref stat aval systŠme)}
 YDateDebut    : longint; {d‚but de p‚riode souhait‚e pour le calcul (ref station aval systŠme)}
 YDateDebutV   : longint;
 YDateFin      : longint; {fin de p‚riode souhait‚e pour le calcul (ref station aval systŠme)}
 YDateFinV     : longint;
 Yi            : longint;
 Yj            : longint;
 Yk            : longint;
 YMeilleurDebut: longint; {d‚but de plus longue p‚riode de donn‚es sans lacune}
 YMeilleurFin  : longint; {fin de plus longue p‚riode de donn‚es sans lacune}
 YNbEcrit      : longint; {nombre de lignes de r‚sultats ‚crites sur fichier}
 YNbQdefNul    : longint; {nombre d'‚checs suppl‚mentaires nuls}
 YNbPbBornes   : longint; {effectif des pb d'initialisation de fourchette de QS0}
 YNTestNul     : longint;
 YPlusLongDuree: longint; {dur‚e de la plus longue p‚riode sans lacune}
 YQuantieme    : longint;
 YRangLu       : longint; {index de lecture dans fichiuer des d‚bits avalsyst., prises et restit.}


 YA            : double; {paramŠtre de fr‚quence = (j-A)/(N+B), entre 0 et 0.5}
 YB            : double; {paramŠtre de fr‚quence = (j-A)/(N+B), entre 0 et 1}
 YdelMaxKiFodra: double; {dimension max souhaitable de tableau de d‚bit}
 YdelMinKiFodra: double; {dimension min souhaitable de tableau de d‚bit}

 YFreq         : double; {fr‚quence de non d‚passement}
 YQAntmin      : double; {minimum des d‚bits nat restitutions associ‚s (tps propag) au Q avl systŠme}
 YQdef         : double; {* d‚faillance Q in‚vitable suppl‚mentaire % objectif aval, due … manque de capacit‚ de r‚servoir}
 YQdef0        : double; {* d‚faillance Q in‚vitable absolue % objectif aval, due … Q naturels et rŠgles et consignes r‚serv.}
 YQDef1        : double; {* d‚faillance Q in‚vitable (absolue + suppl‚mentaire) % objectif aval, due aux diff‚rentes cause}
 YQdefmax      : double;
 YQdefmed      : double;
 YQdefmin      : double;
 YQdefmoy      : double;
 YQST0         : double; {* norme des d‚bits … soutirer en proportion des volumes de r‚servoirs}
 YQSTeffectif  : double; {d‚bit stock‚}
 YQVdef        : double; {* d‚faillance de d‚bit … l'aval de la restitution, caus‚e par manque de capacit‚}
 YTps          : double; {temps de retour}
 YVDebut       : double; {volume du reservoir au d‚but de simulation en sens chrono}
 YVdef         : double; {* manque de capacit‚ de r‚servoir pour pouvoir ‚viter tous les ‚checs (sauf in‚vitables absolus)}
 YVdefsom      : double; {somme des YVdef sur les diff‚rents r‚servoirs}
 YVdefsommax   : double; {valeur maximale sur la chronique, YVdefsom}
 YVFin         : double; {volume de r‚servoir au d‚but du calcul … rebours}
 YVges         : double; {* volume de r‚servoir au cours du calcul en sens chrono}
 YVmedian      : double; {volume median de r‚servoir … la date JJMM (d‚but calcul … rebours)}
 YVobj         : double; {* volume limite … respecter pour satisfaire au mieux l'objectif aval (calcul‚ … rebours)}
 YVobj0        : double; {* volume id‚al de r‚servoir au cours du calcul … rebours}
 YVolume       : double; {volume d'eau dans le r‚servoir}
 YVop          : double; {volume op‚rationnel (combinaison de Vobj et Vges)}
 YVopAnt       : double; {volume op‚rationnel (combinaison de Vobj et Vges)}
 YVopNouv      : double; {volume op‚rationnel (combinaison de Vobj et Vges)}
 YVTotCumul    : double; {somme des volumes de r‚servoirs}

 YChaiDate     : array[1..YNmaxLacs] of YChai10; {date en clair}

 YNomStatAv    : array[1..YNmaxLacs] of YChai8; {nom de station aval}
 YNomStatInt   : array[1..YNmaxlacs] of YChai8; {nom de station interm‚diaire}
 YNomLac       : array[1..YNmaxLacs] of YChai8; {nom de lac dans fichier lacs}
 YNomReseau    : array[1..YNmaxLacs] of YChai8; {nom de lac dans 2emes fichiers de paramŠtres (r‚seaux)}
 YNomReservoir : array[1..YNmaxLacs] of YChai8; {nom de lac dans les 1ers fichiers de paramŠtres (contraintes et consignes)}

 YDate         : array[YDelaimin..YDelaiMax] of YChai8; {date cod‚e aaaammjj}

 YNomStatAm    : array[1..YNmaxLacs,1..2] of Ychai8; {nom de station amont}

 YNbModif      : array[0..YNmaxLacs] of integer; {nombre de corrections de paramŠtres}

 YCodeAval     : YTabInt1; {code pour Qavalrestit : -2= sup … QFV, -1=QFV, 0=ajust‚, 1=QRV, 2= inf … QRV}
 YCodePrise    : YTabint1; {code pour Q prise : -2=Qemin, -1=QM-QFM, 0= ajust‚, 1=QM-QRM, 2=Qemax, 3=QM}
 YcodeRepart   : YTabInt1; {code pour d‚bit soutir‚ : -1= minimal, 0=ajust‚, 1=maximal}
 YCodeRestit   : YTabint1; {code pour Q restit : -1=Qsmax, 0=ajust‚, 1=Qsmin}
 YNam          : YTabInt1; {nombre de stations amont}
 YNint         : YTabInt1; {nombre de stations interm‚diaires}

 YRangStatAv   : YTabInt1; {rang de station aval dans fichier des d‚bits de base}
 YRangStatInt  : YTabInt1; {rang de station interm‚diaire dans fichier des d‚bits de base}

 YNCodeAval    : array[1..YNmaxLacs,-3..2] of longint;
 YNcodeRepart  : array[1..YNmaxLacs,-2..3] of longint;
 YNCodePrise   : array[1..YNmaxLacs,-3..3] of longint;
 YNCodeRestit  : array[1..YNmaxLacs,-2..1] of longint;
 YNSucces      : array[-3..2] of longint;

 YRangStatAm   : array[1..YNmaxLacs,1..2] of integer; {rang de station amont dans fichier des Q de base}

 YNbPivot      : array[1..YNmaxLacs,1..4] of integer; {nombre de dates pivot pour rŠgles de d‚bit}
 YNbFormule    : array[1..YNmaxLacs,1..4] of integer; {nombre de formules pour rŠgles de d‚bit}
 YTypeFormule  : array[1..YNmaxLacs,1..4] of integer; {code entre 0 et 2 prise en compte ou non de gradient}

 YNbSeuil      : array[1..YNmaxLacs,1..4,1..YNbmaxPivot] of integer; {nombre de seuil dans rŠgle de d‚bit}
 YQuantPivot   : array[1..YNmaxLacs,1..4,1..YNbmaxPivot] of integer; {date de d‚but pour rŠgle de d‚bit}
 YRangFormule  : array[1..YNmaxLacs,1..4,0..YNbmaxPivot] of integer; {rang de rŠgle de d‚bit}

 YDateEnJour   : array[0..YNMaxlacs] of longint; {date compt‚e en jours depuis le 31/12/1899}
 YDateFinLac   : array[0..YNmaxLacs] of longint; {date finale du calcul … rebours}

 YD            : YTab1; {* temps de propag entre restitution et station aval du systŠme}
 YdecalDateQ   : YTab1; {partie fractionnaire de la date (en jour) des d‚bits de r‚servoir}
 YDint         : YTab1; {* temps de propag entre station interm‚diaire et station aval de r‚servoir}
 YPart         : YTab1; {part de travail assign‚e au r‚servoir en fonction de son volume r‚gl‚}
 YPartTheorique: YTab1; {part de travail assign‚e au r‚servoir en fonction de son volume}
 YQe           : YTab1; {* d‚bit du canal de prise}
 YQemax        : YTab1; {* d‚bitance max de prise}
 YQemin        : YTab1; {* d‚bitance min de prise}
 YQMnat        : YTab1; {* d‚bit nat … prise, d‚cal‚ de -D par rapport … station aval systŠme (T = tps propag)}
 YQMRef        : Ytab1; {* d‚bit de r‚f‚rence juste … l'aval de la restitution}
 YQMRes        : YTab1; {* d‚bit r‚serv‚ juste … l'aval de la restitution}
 YQV           : YTab1; {* d‚bit du cours d'eau influenc‚ par le r‚servoir, juste … l'aval de la restitution}
 YQVRef        : Ytab1; {* d‚bit de r‚f‚rence juste … l'aval de la restitution}
 YQVRes        : YTab1; {* d‚bit r‚serv‚ juste … l'aval de la restitution}
 YQs           : YTab1; {* d‚bit du canal de restitution}
 YQsmax        : YTab1; {* d‚bitance max de restitution}
 YQsmin        : YTab1; {* d‚bitance min de restitution}
 YQST          : YTab1; {* d‚bit soutir‚ net local}
 YQSTmax       : YTab1; {* d‚bit soutir‚ net local maximal}
 YQSTmin       : YTab1; {* d‚bit soutir‚ net local minimal}
 YQVnat        : YTab1; {* d‚bit nat … restitution, d‚cal‚ de -D par rapport … station aval systŠme (T = tps propag)}
 YQVVeille     : YTab1; {d‚bit de la veille au point de restitution}
 YReglage      : YTab1; {ajustement demand‚ du volume (fraction du volume cumul‚ de tous les r‚servoirs)}
 YSav          : YTab1; {* superficie de BV … station aval de r‚servoir}
 YSint         : YTab1; {* superficie de BV … station interm‚diaire de r‚servoir}
 YVdefmax      : YTab1; {valeur maximale de capacit‚ manquante Vdef}
 YVobjAnt      : YTab1;
 YVobjNouv     : Ytab1;
 YVtot         : YTab1; {* volume maximal stockable dans le r‚servoir}
 YVRtot        : YTab1; {pareil que Vtot, mais r‚gl‚ pour r‚partition des taches}

 YValBonneDate : YTab2; {valeurs d'une variable correspondant … une date JJMM … l'int‚rieur d'une chronique}
 YTpsRet       : YTab2; {temps de retour utilis‚s dans l'analyse statistique}

 YDam          : array[1..YNmaxLacs,1..2] of double; {* temps de propagation entre station amont et station aval de r‚servoir}
 YDM           : array[1..YNmaxLacs,1..2] of double; {* d‚lai de propag. entre point de prise et station aval de r‚servoir}
 YDV           : array[1..YNmaxLacs,1..2] of double; {* d‚lai de propag. entre point de restit. et station aval de r‚servoir}
 YSam          : array[1..YNmaxLacs,1..2] of double; {* superficie de BV … station amont de r‚servoir}
 YSM           : array[1..YNmaxLacs,1..2] of double; {* superficie de BV au point de prise de r‚servoir}
 YSV           : array[1..YNmaxLacs,1..2] of double; {* superficie de BV au point de restitution de r‚servoir}

 YBorneGradient: array[1..YNmaxLacs,1..4] of double; {gradient max permis … la restitution}

 YQ            : array[0..YNmaxStat,YDelaiMin..YDelaiMax] of double; {d‚bit stations ou aval syst., prises et restitutions}

 YSeuil        : array[1..YNmaxLacs,1..4,1..YNbmaxPivot,1..YNbmaxSeuil] of double; {seuil Q amont pour rŠgle Q r‚s. ou ref.}
 YDebit        : array[1..YNmaxLacs,1..4,1..YNbmaxPivot,1..YNbmaxSeuil] of double; {Q pour rŠgle de d‚bit r‚s. ou ref.}

 YQObj         : array[0..366] of double; {* d‚bits objectifs calcul‚s pour chaque jour de l'ann‚e}
 YDebitObj     : array[0..366] of double; {d‚bits objectifs lus sur fichier}

 YQdefRare    : YTypFreq;
 YQdefFrequent: YTypFreq;

 YDateObj      : array[0..366] of integer; {dates objectifs lues sur fichier}

IMPLEMENTATION

BEGIN

END.