VGEST.PAS 46.1 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
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
72
73
74
75
76
77
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
105
106
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
156
157
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
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
PROGRAM VGEST5;  {idem  Vgest3 mais avec extension de priode analyse possible de 100  250}

{--JC Bader, Janvier 2013--}

uses Crt,Interfas,ECRAN,Utilit,DECLARA,PARAM,CALCULS1,CALCULS2,CALCULS3,CALCULS4;



{===========================================================================}
{-- PROGRAMME PRINCIPAL                                                   --}
{===========================================================================}

BEGIN

 {--DETERMINATION DU MODE D'ENTREE DES CHOIX DE CALCUL, PAR SAISIE CLAVIER--}
 {--OU LECTURE SUR FICHIER TEXTE                                          --}
 ChoixEntreeOptions;

 {--EFFACEMENT DE TOUS LES FICHIERS de rsultats prcdants, incrmentation--}
 {--du rang du calcul                                                      --}
 assign(YFitext,YRepR+YNomFicResult6); rewrite(YFitext); close(YFitext);
 assign(YFitext,YRepR+YNomFicSortie); rewrite(YFitext); close(YFitext);
 assign(YFitext,YRepR+YNomFicResult1); rewrite(YFitext); close(YFitext);
 assign(YFitext,YrepR+YNomFicResult2); rewrite(YFitext); close(YFitext);
 assign(YFitext,YRepR+YNomFicResult3); rewrite(YFitext); close(YFitext);
 assign(YFitext,YRepR+YNomFicResult4); rewrite(YFitext); close(YFitext);
 assign(YFitext,YRepR+YNomFicResult5); rewrite(YFitext); close(YFitext);
 for YRangLac:=1 to YNmaxLacs do
  begin
   str(YRanglac,YNum);
   assign(YFitext,YRepR+YNomFicResultVobj+YNum); rewrite(YFitext); close(YFitext);
   assign(YFitext,YRepR+YNomFicResultVop+YNum); rewrite(YFitext); close(YFitext);
   assign(YFitext,YRepR+YNomFicResultM+YNum); rewrite(YFitext); close(YFitext);
  end;
 assign(YFitext,YRepR+YNomFicResDef+'0'); rewrite(YFitext); close(YFitext);
 assign(YFitext,YRepR+YNomFicResDef+'1'); rewrite(YFitext); close(YFitext);
 assign(YFitext,YNomFicRangCal);
 {$i-}
 reset(YFitext);
 if ioresult<>0 then
  begin
   rewrite(YFitext);
   YCompteur:=1;
   writeln(YFitext,YCompteur);
  end
 else
  begin
   readln(YFitext,YCompteur);
   if ioresult=0 then
    YCompteur:=YCompteur+1
   else
    YCompteur:=1;
   rewrite(YFitext);
   writeln(YFitext,YCompteur);
  end;
 close(YFitext);
 {$i+}
 if Ysaisie then
  YSaisie1;

 YCalculPossibl:=true;

 {--OUVERTURE DU FICHIER DES SORTIES dcrivant les paramtres du calcul et--}
 {--les rsultats obtenus. Premires critures sur ce fichier             --}
 assign(YFicSortie,YRepR+YNomFicSortie);
 rewrite(YFicSortie);
 writeln(YFicSortie,'Rang du calcul : ',YCompteur);
 ADatation(YFicSortie);
 writeln(YFicSortie);
 writeln(YFicSortie,'Ce fichier contient les informations suivantes :');
 writeln(YFicSortie);
 writeln(YFicSortie,'RESUME DES CONDITIONS DU CALCUL : ');
 writeln(YFicSortie,'-noms des fichiers de parametres et de donnees choisis');
 writeln(YFicSortie,'-caracteristiques des differents reservoirs (contraintes et consignes de gestion, ',
                    'capacite, temps de propagation jusqu''a la station aval du systeme)');
 writeln(YFicSortie,'-stations, superficies de bassin versant et temps de propagation utilises pour le ',
                    'calcul des debits naturels aux prises et restitutions');
 writeln(YFicSortie,'-hydrogramme objectif annuel : nature (minimal ou maximal), valeurs de debit et ',
                    'localisation a la station aval du systeme');
 writeln(yFicSortie);
 writeln(YFicSortie);
 writeln(YFicSortie,'STATISTIQUES DE RESULTATS concernant (independamment de l''etat de remplissage des reservoirs) : ');
 writeln(YFicSortie,'-les posssibilites de satisfaction de l''objectif');
 writeln(YFicSortie,'-les valeurs optimales de debits stockes, preleves, restitues et ',
                    'a l''aval immediat des restitutions');
 writeln(YFicSortie);
 writeln(YFicSortie);
 writeln(yFicSortie,'===================================');
 writeln(YFicSortie,'! RESUME DES CONDITIONS DU CALCUL !');
 writeln(yFicSortie,'===================================');
 writeln(YFicSortie);

 {--LECTURE DES PARAMETRES DE STATION AVAL et criture sur fichier de sortie--}
 StationAval;

 {--LECTURE DES PARAMETRES DES CONTRAINTES ET CONSIGNES, et criture sur--}
 {--fichier de sortie, des rgles de gestion interprtes               --}
 ContraintesEtConsignesLacs;


 {--LECTURE DES PARAMETRES DE RESEAUX et criture de ces paramtres sur   --}
 {--fichier de sortie                                                     --}
 ParametresReseau;

{--LECTURE DES DEBITS NATURELS AUX STATIONS et calcul des dbits            --}
{--correspondants  la station aval du systme et aux prises et restitutions--}
 if YCalculPossibl then
  begin
   CalculeQPriseQrestitution;
   YCalculPossibl:=YGlopGlopDebit;
   if YCalculPossibl then
    EcritureSeparation
   else
    close(YFicSortie);
  end;

 {--CHOIX DU FICHIER DES DEBITS OBJECIFS, lecture de ceux-ci et calcul des--}
 {--dbits objectif pour chaque jour de l'anne                            --}
 if YCalculPossibl then
  begin
   LectureObjectif;
   if YNbQobj<=0 then
    begin
     YCalculPossibl:=false;
     close(YFicSortie);
    end;
  end;

 {--CHOIX DU TYPE D'OBJECTIF : DEBIT MIN OU MAX A RESPECTER. Description de--}
 {--l'hyrogramme objectif et de son type dans le fichier des paramtres et --}
 {--options du calcul.                                                     --}
 if YCalculPossibl then
  begin
   if YSaisie then
    YSaisie2;

   write(YFicSortie,'Hydrogramme objectif que l''on souhaite ');
   if YTypeObjectif=0 then
    begin
     writeln(YFicSortie,'VOIR TOUJOURS DEPASSE a la station aval du systeme : ');
     YResume:=YResume+' (Qmin) ; ';
    end
   else
    begin
     writeln(YFicSortie,'NE JAMAIS VOIR DEPASSE a la station aval du systeme : ');
     YResume:=Yresume+' (Qmax) ; ';
    end;
   writeln(YFicSortie);
   for Yi:=1 to trunc((YNbQobj-1)/4)+1 do
    begin
     write(YFicSortie,'date   : ');
     for Yj:=(Yi-1)*4+1 to Aminin(4*Yi,YNbQObj-1) do
      write(YFicSortie,'              ',ADateClaire(2001,YDateObj[Yj]));
     writeln(YFicSortie);
     write(YFicSortie,'debit  : ');
     for Yj:=(Yi-1)*4+1 to Aminin(4*Yi,YNbQObj-1) do
      write(YFicSortie,'     ',YDebitObj[Yj]:14);
     writeln(YFicSortie);
     writeln(YFicSortie);
    end;
   writeln(YFicSortie);
  end;

 {--CAS OU PARAMETRES ET DONNEES RENDENT LES CALCULS POSSIBLES--}
 if YCalculPossibl then

  begin

   {--OUVERTURE DU FICHIER DES DEBITS NATURELS AUX PRISES ET RESTITUTIONS--}
   assign(YFicResult1,YRepR+YNomFicResult1);
   reset(YFicResult1);

   {--INITIALISATION DES STATISTIQUES de calcul de rpartition--}
   {$R+}
   YNTestNul:=0;
   YNItermax:=0;
   for YrangLac:=1 to YNbLacs do
    begin
     for Yi:=-2 to 3 do
      YNCodeRepart[YRanglac,Yi]:=0;
     for Yi:=-3 to 2 do
      YNCodeAval[YRanglac,Yi]:=0;
     for Yi:=-3 to 3 do
      YNCodePrise[YrangLac,Yi]:=0;
     for Yi:=-2 to 1 do
      YNCodeRestit[YRangLac,Yi]:=0;
    end;
   for Yi:=-3 to 2 do
    YNSucces[Yi]:=0;

   {--REMPLISSAGE INITIAL DU TABLEAU DES DEBITS NATURELS aval, prises et --}
   {--restitutions, entre indices YDelaimin et Ydelaimax-1               --}
   for YRangDelai:=1 to 7 do
    readln(YFicResult1);
   for YRangDelai:=YDelaimin to YDelaimax-1 do
    {--lecture de YDate[YRangDelai] et YQ[YRangdelai]--}
    LectureQAvalPriseRestit (YrangDelai);

   {--CALCUL DES DATES CRUCIALES : date associe  l'indice 0 du tableau --}
   {--des dbits pour la station aval, et dates correspondantes pour les --}
   {--restitutions (dcales en arrire selon les temps de propagation   --}
   val(copy(YDate[0],1,4),YAn,YCode);
   val(copy(YDate[0],5,2),YMois,YCode);
   val(copy(YDate[0],7,2),YJour,YCode);
   YDAteEnJour[0]:=ATjour(YAn,YMois,YJour);
   for YrangLac:=1 to YNbLacs do
    begin
     YDateEnJour[YrangLac]:=trunc(YDateEnJour[0]+0.5-YD[YRangLac]);
     YDecalDateQ[YRanglac]:=frac(YDateEnJour[0]+0.5-YD[YRangLac]);
     YQVVeille[YRanglac]:=YLacune;
    end;

   {--OUVERTURE DU FICHIER TYPE DES DEFAILLANCES INEVITABLES DE DEBIT--}
   assign(YFicQdef[0],YRepT+YNomFicQdef+'0');
   rewrite(YFicQdef[0]);

   {--OUVERTURE DU PREMIER FICHIER DE RESULTATS DETAILLES pour les dbits--}
   {--naturels dcals ainsi que les dbits rservs et de rfrence aux --}
   {--points de prise et restitution ; les dbits objectifs  l'aval des --}
   {--restitutions et dans les canaux de prise et de restitution ; les   --}
   {--codes caractrisant les dbits calculs ; les dfaillances de dbit--}
   {--stock invitables du fait de dbits non contrls et des contr. et--}
   {--consignes aux rservoirs. Ouverture aussi du fichier typ des      --}
   {--dfaillances de stockage de dbit                                  --}
   assign(YFicResult2,YRepR+YNomFicResult2);
   rewrite(YFicResult2);
   writeln(YFicResult2,'Rang du calcul : ',YCompteur,' ;  ',YResume);
   ADatation(YFicResult2);
   writeln(YFicResult2);
   writeln(YFicResult2,'Detail des resultats : chronique des debits ideaux (calcules independamment de l''etat ',
                       'de remplissage des reservoirs), qui permettent d''obtenir le plus frequemment possible, ',
                       'a la station aval, un debit egal a l''objectif');
   writeln(YFicResult2,'Les valeurs donnes en haut des colonnes de dates sont les parties ',
                       'fractionnaires de celles-ci (exprimees en jour)');
   writeln(YFicResult2);
   writeln(YFicResult2,'Variables editees :');
   writeln(YFicResult2);
   writeln(YFicResult2,'-date aval : date a la station situee a l''aval du systeme');
   writeln(YFicResult2,'-Qnat : debit naturel a la station aval, a 12h (date aval)');
   writeln(YFicResult2,'-Qobj : objectif de debit defini a la station aval, a 12h (date aval)');
   writeln(YFicResult2,'-date amont : date aval diminuee du temps de propagation entre le point de ',
                       'restitution et la station aval du systeme');
   writeln(YFicResult2,'-QMnat : debit naturel au point de prise (date amont)');
   writeln(YFicResult2,'-QVnat : debit naturel au point de restitution (date amont)');
   writeln(YFicResult2,'-QMref : debit de reference (qu''on souhaite ne pas voir depasse) a l''aval ',
                       'immediat de la prise (date amont)');
   writeln(YFicResult2,'-QMres : debit reserve (qu''on souhaite voir depasse) a l''aval ',
                       'immediat de la prise (date amont)');
   writeln(YFicResult2,'-QVref : debit de reference a l''aval immediat de la restitution (date amont)');
   writeln(YFicResult2,'-QVres : debit reserve a l''aval immediat de la restitution (date amont)');
   writeln(YFicResult2,'-A, B, C et D : codes definis dans le fichier ',YNomFicSortie);
   writeln(YFicResult2,'-QV : debit ideal a l''aval immediat de la restitution (date amont) pour satisfaire au mieux ',
                       'l''objectif aval, compte tenu de la repartition des debits naturels et des contraintes et ',
                       'consignes aux prises et restitutions');
   writeln(YFicResult2,'-Qe : debit ideal dans le canal de prise (date amont) pour satisfaire au mieux l''objectif aval,',
                       ' compte tenu de la repartition des debits naturels et des contraintes et consignes aux prises et ',
                       'restitutions');
   writeln(YFicResult2,'-Qs : debit ideal dans le canal de restitution (date amont) pour satisfaire au mieux l''objectif ',
                       'aval, compte tenu de la repartition des debits naturels et des contraintes et consignes aux prises ',
                       'et restitutions');
   writeln(YFicResult2,'-QST0 :  norme du debit a stocker a repartir entre les reservoirs, si possible proportionnellement ',
                       'a leurs volumes respectifs');
   if YTypeObjectif=0 then
    write(YFicResult2,'-Qdef0 : manque')
   else
    write(YFicResult2,'-Qdef0 : exces');
   writeln(YFicResult2,'inevitable de debit par rapport a l''objectif a la station aval du systeme, du fait de la repartion ',
                       'des apports naturels et des contraintes et consignes de gestion aux prises et restitutions');
   writeln(YFicResult2,'-Succes : code defini dans le fichier ',YNomFicSortie);
   writeln(YFicResult2,'-Iter : nombre d''iterations effectuees pour calculer QS0 par encadrements successifs');
   writeln(YFicResult2,'-Test : egal a 1 si le debit total stocke croit comme il se doit avec QS0 dans le calcul ',
                       'iteratif de QS0');
   writeln(YFicResult2);
   write(YFicResult2,'   0.50000                                                     ');
   for YRanglac:=1 to YNbLacs do
    write(YFicResult2,'  ',YDecalDateQ[YRanglac]:8:5,'                                                   ',
                        '                                                                                   ',
                      '                                                                                   ');
   writeln(YFicResult2);
   write(YFicResult2,' date aval                        Qnat                 Qobj   ');
   for YRangLac:=1 to YNbLacs do
    write(YFicResult2,'date amont',YRangLac,'                QMnat',YRanglac,'                ',
                      'QVnat',YRanglac,'              ','QMref',YRanglac,'              ',
                      'QMres',YRanglac,'              ','QVref',YRanglac,'              ',
                      'QVres',YRanglac,' ','   A',YRanglac,'                   ','QV',YRanglac,
                      ' ','   B',YRanglac,' ','   C',YRanglac,' ','   D',YRanglac,
                      '                  ',' Qe',YRanglac,'                  ',' Qs',YRanglac,'  ');
   writeln(YFicResult2,'                  QST0 ','                Qdef0 ','  Succes   Iter  Test');

   {--OUVERTURE DU SECOND FICHIER DE RESULTATS DETALLES pour les dbits  --}
   {--stocks min, max et obtenus, avec les codes.                       --}
   assign(YFicResult3,YRepR+YNomFicResult3);
   rewrite(YFicResult3);
   writeln(YFicResult3,'Rang du calcul : ',YCompteur,' ;  ',YResume);
   ADatation(YFicResult3);
   writeln(YFicResult3);
   writeln(YFicResult3,'Detail des resultats : chronique des debits ideaux (calcules independamment de l''etat ',
                       'de remplissage des reservoirs), qui permettent d''obtenir le plus frequemment possible, ',
                       'a la station aval, un debit egal a l''objectif');
   writeln(YFicResult3,'Les valeurs donnes en haut des colonnes de dates sont les parties ',
                       'fractionnaires de celles-ci (exprimees en jour)');
   writeln(YFicResult3);
   writeln(YFicResult3,'Variables editees :');
   writeln(YFicResult3);
   writeln(YFicResult3,'-date : date a laquelle on vise l''objectif de debit a la station situee a l''aval du systeme');
   writeln(YFicResult3,'-date(i) : date de l''objectif aval, diminuee du temps de propagation entre le point de ',
                       'restitution du reservoir de rang i et la station aval du systeme');
   writeln(YFicResult3,'-QST(i) : debit stocke ideal dans le reservoir de rang i (date(i)) pour satisfaire au mieux ',
                       'l''objectif aval, compte tenu de la repartition des debits naturels et des contraintes et ',
                       'consignes aux prises et restitutions');
   writeln(YFicResult3,'-QSTmin(i) : valeur minimale du debit stockable dans le reservoir de rang i (date(i)), compte ',
                       'tenu des debits naturels, des contraintes et des consignes a la prise et a la restitution de ce ',
                       'reservoir');
   writeln(YFicResult3,'-QSTmax(i) : valeur maximale du debit stockable dans le reservoir de rang i (date(i)), compte ',
                       'tenu des debits naturels, des contraintes et des consignes a la prise et a la restitution de ce ',
                       'reservoir');
   writeln(YFicResult3,'-A, B, C et D : codes definis dans le fichier ',YNomFicSortie);
   writeln(YFicResult3);
   write(YFicResult3,'   0.50000   ');
   for YRanglac:=1 to YNbLacs do
    write(YFicResult3,'  ',YDecalDateQ[YRanglac]:8:5,'                                 ',
                        '                                                  ');
   writeln(YFicResult3);
   write(YFicResult3,'      date  ');
   for YRangLac:=1 to YNbLacs do
    write(YFicResult3,'      date',YRangLac,'               QST',YRanglac,'             QSTmin',
                      YRangLac,'             QSTmax',YRangLac,'    A',YRangLac,'   B',YRangLac,'   C',
                      YRangLac,'   D',YRangLac,'  ');
   writeln(YFicResult3);

   {--BOUCLE SUR TOUTES LES LIGNES A LIRE dans le fichier des dbits    --}
   {--naturels (station aval, prises et restitutions)                   --}
   YNbPbBornes:=0;
   for YrangLu:=YDelaimax-YDelaimin+1 to YNbEcrit do

    begin

     YJJ_MM_AAAA:=ADate(YDateEnJour[0]);
     val(copy(YJJ_MM_AAAA,4,2),YMois,YCode);
     val(copy(YJJ_MM_AAAA,1,2),YJour,YCode);
     YQuantieme:=AQuantieme(YJour,YMois,2001);
     if YSaisie then
      YSaisie3;


     {--LECTURE DES DEBITS NATURELS pour l'indice YDelaimax--}
     LectureQavalPriseRestit(Ydelaimax);

     {--POUR CHAQUE LAC, CALCUL DES DEBITS NATURELS  la prise et  la    --}
     {--restitution, dcals en arrire par rapport au dbit aval d'indice--}
     {--nul, selon les temps de propagation entre restitution et aval.    --}
     {--Calcul des dbits de rfrence et rserv  la restitution et    --}
     {--la prise                                                          --}
     YQAntMin:=1e20;
     for YRangLac:=1 to YnbLacs do
      begin
       YQVnat[YrangLac]:=Qinter(2*YrangLac,-YD[Yranglac]);
       YQMnat[YrangLac]:=Qinter(2*YrangLac-1,-YD[Yranglac]);
       YQAntMin:=Amin(YQAntMin,YQVnat[YRangLac]);
       YQAntMin:=Amin(YQAntMin,YQMnat[YRangLac]);

       {--cas o le dbit naturel dcal  prise et restit est non lacune--}
       if (YQMnat[YRangLac]>=0) and (YQVnat[YRanglac]>=0) then
        begin
         QRefRes(2,YRangLac,YDateEnJour[YRangLac],YQMnat[YRangLac],YQVVeille[YRangLac],
                YChaiDate[YRangLac],YQVRef[YrangLac],YQVRes[YRangLac]);
         QRefRes(1,YRangLac,YDateEnJour[YRangLac],YQMnat[YRangLac],YQVVeille[YRangLac],
                YChaiDate[YRangLac],YQMRef[YrangLac],YQMRes[YRangLac]);
        end

       {--Cas o le dbit naturel dcal  la prise est en lacune--}
       else
        begin
         YQVRef[YrangLac]:=YLacune;
         YQVRes[YRanglac]:=YLacune;
         YQMRef[YrangLac]:=YLacune;
         YQMRes[YRanglac]:=YLacune;
        end;

      end; {fin du calc des Q nat. dcals, ref. et rs. prises et rest.--}

     {--CAS OU EXISTE DEBIT aval syst. et Q prise et rest. correspondants.--}
     {--CALCUL DE REPARTITION DU DEBIT A PRELEVER, et des dbits limites  --}
     {--idaux aux restitution pour atteindre l'objectif                  --}
     if (YQAntMin>=0) and (YQ[0,0]>=0) then
       Repartition (YQ[0,0]-YQObj[YQuantieme],YQVnat,YQMnat,YQVRes,YQVRef,YQMRes,YQMRef,YTypeObjectif,YSuccesRepart,
                    YcodeRepart,YCodeAval,YCodePrise,YCodeRestit,YQST0,YQdef0,YQV,YQe,YQs,YQST,YQSTmin,YQSTmax,
                    YNIter,YTest)

     {--CAS OU DES LACUNES DE DEBIT EMPECHENT le calcul de rpartition--}
     else
      begin
       YSuccesRepart:=-3;
       YQST0:= YLacune;
       YTest:=1;
       YNIter:=0;
       for YrangLac:=1 to YNbLacs do
        begin
         YQV[YRangLac]:=Ylacune;
         YQs[YrangLac]:=Ylacune;
         YQe[YrangLac]:=YLacune;
         YQST[YRangLac]:=YLacune;
         YQSTmin[YRangLac]:=YLacune;
         YQSTmax[YrangLac]:=YLacune;
         YQdef0:=YLacune;
         YCodeRepart[YRangLac]:=-2;
         YCodePrise[YRangLac]:=-3;
         YCodeRestit[YRangLac]:=-2;
         YCodeAval[YRangLac]:=-3;
        end;
      end;

     {--MISE A JOUR DES STATS du calcul de rpartition des Q stocks entre--}
     {--rservoirs                                                        --}
     if YTest=0 then
      YNTestNul:=YNTestNul+1;
     YNItermax:=AmaxIn(YNItermax,YNIter);
     for YRanglac:=1 to YNbLacs do
      begin
       YNCodeRepart[YRangLac,YCodeRepart[YRangLac]]:=YNCodeRepart[YRangLac,YCodeRepart[YRangLac]]+1;
       YNCodePrise[YRangLac,YCodePrise[YRangLac]]:=YNCodePrise[YRangLac,YCodePrise[YRangLac]]+1;
       YNCodeRestit[YRangLac,YCodeRestit[YRangLac]]:=YNCodeRestit[YRangLac,YCodeRestit[YRangLac]]+1;
       YNCodeAval[YRangLac,YCodeAval[YRangLac]]:=YNCodeAval[YRangLac,YCodeAval[YRangLac]]+1;
      end;
     YNSucces[YSuccesRepart]:=YNSucces[YSuccesRepart]+1;

     {--ECRITURE SUR PREMIER FICHIER DES RESULTATS DETAILLES--}
     write(YFicResult2,ADate(YdateEnJour[0]),'    ',YQ[0,0]:24:15,'  ',YQObj[YQuantieme]:19:10,'    ');
     for YRangLac:=1 to YNbLacs do
      write(YFicResult2,YChaiDate[YRangLac],' ',YQMnat[YrangLac]:21:12,' ',YQVnat[YrangLac]:21:12,
                        ' ',YQMRef[YRanglac]:19:10,' ',YQMRes[YRangLac]:19:10,
                        ' ',YQVRef[YRanglac]:19:10,' ',YQVRes[YRangLac]:19:10,'   ',
                        YCodeRepart[YRangLac]:3,' ',YQV[YRangLac]:21:12,'   ',
                        YCodePrise[YrangLac]:3,'   ',YCodeRestit[YrangLac]:3,'   ',
                        YCodeAval[YrangLac]:3,' ',YQe[YRanglac]:21:12,' ',YQs[YRangLac]:21:12,'   ');
     writeln(YFicResult2,YQST0:21:12,' ',YQdef0:21:12,'      ',YSuccesRepart:3,'    ',YNIter:3,'    ',YTest:2);

     {--ECRITURE DE LA DEFAILLANCE INEVITABLE DE DEBIT SUR FICHIER TYPE--}
     write(YFicQdef[0],YQdef0);

     {--ECRITURE SUR SECOND FICHIER DES RESULTATS DETAILLES--}
     write(YFicResult3,ADate(YdateEnJour[0]));
     for YRangLac:=1 to YNbLacs do
      write(YFicResult3,'   ',YChaiDate[YRangLac],YQST[YRangLac]:19:10,' ',YQSTmin[YRanglac]:19:10,' ',
              YQSTmax[YRangLac]:19:10,'   ',YCodeRepart[YRangLac]:3,'  ',YCodePrise[YRanglac]:3,
              '  ',YCodeRestit[YRangLac]:3,'  ',YCodeAval[YRangLac]:3);
     writeln(YFicResult3);

     {--DECALAGE D'UN PAS DE TEMPS de toutes les valeurs dans le tableau --}
     {--des dbits naturels aval, prises et restitutions                 --}
     for YRangDelai:=Ydelaimin to Ydelaimax-1 do
      begin
       for YrangLac:=0 to 2*YNbLacs do
        YQ[YRangLac,YRangDelai]:=YQ[Yranglac,YRangDelai+1];
       YDate[YRangDelai]:=YDate[YRangDelai+1];
      end;

     {--DECALAGE D'UN PAS DE TEMPS de toutes les dates cruciales--}
     YDateEnJour[0]:=YDateEnJour[0]+1;
     for YRangLac:=1 to YNbLacs do
      begin
       YDateEnJour[YrangLac]:=YDateEnJour[YrangLac]+1;
       YQVVeille[YrangLac]:=YQV[YRanglac];
      end;

    end; {fin de boucle sur les lignes  lire dans le fichier des dbits naturels}

   {--FERMETURE DU FICHIER des dbits naturels aux prises et restitutions,--}
   {--et des fichier des rsultats dtaills concernant les dbits pris et--}
   {--restitus, ncessits par l'objectif aval. Message de fin de calcul --}
   close(YFicResult1);
   close(YFicResult2);
   close(YFicQdef[0]);
   close(YFicResult3);

   if Ysaisie then
    YSaisie4;


   {--ECRITURE DES STATISTIQUES DE DEBIT SUR FICHIER DE RESULTATS--}

   writeln(yFicSortie,'=================================================================================');
   writeln(YFicSortie,'! STATISTIQUES DE RESULTATS EVALUEES SUR TOUTE LA PERIODE DES DONNEES OBSERVEES !');
   writeln(yFicSortie,'=================================================================================');
   writeln(YFicSortie);
   writeln(YFicSortie,'Ces resultats ne dependent aucunement de l''etat de remplissage des reservoirs');
   writeln(YFicSortie);
   Ecriture_Stats;
   close(YFicSortie);

   {--RECHERCHE DE PLUS LONGUE PERIODE DE RESULTATS SANS LACUNE--}
   reset(YFicResult3);
 {--ACHTUNG LECTURE EN-TETE--}
   for Yi:=1 to 18 do
    readln(YFicResult3);
   readln(YFicResult3,YJJ_MM_AAAA,YChaine93);
   val(copy(YJJ_MM_AAAA,7,4),YAn,YCode);
   val(copy(YJJ_MM_AAAA,4,2),YMois,YCode);
   val(copy(YJJ_MM_AAAA,1,2),YJour,YCode);
   YDAteEnJour[0]:=ATjour(YAn,YMois,YJour);
   YDateInitiale:=YDateEnJour[0];
   val(copy(YChaine93,76,3),YCodeRepart[1],YCode);
   if YCodeRepart[1]=-2 then
    begin
     YDernierLuGlop:=false;
     YDateFin:=YDateEnJour[0]-1;
    end
   else
    begin
     YdernierLuGlop:=true;
     YDateDebut:=YDateEnJour[0];
    end;
   YPlusLongDuree:=0;
   repeat
    readln(YFicResult3,YJJ_MM_AAAA,YChaine93);
    YDateEnJour[0]:=YdateEnJour[0]+1;
    val(copy(YChaine93,76,3),YCodeRepart[1],YCode);
    if not YDernierLuGlop then
     begin
      if YCodeRepart[1]>-2 then
       begin
        YDateDebut:=YdateEnJour[0];
        YDernierLuGlop:=true;
       end
     end
    else
     if YCodeRepart[1]=-2 then
      begin
       YDateFin:=YDateEnJour[0]-1;
       YdernierLuGlop:=false;
       if (YDateFin-YDateDebut+1)>=YPlusLongDuree then
        begin
         YPlusLongDuree:=YDateFin-YDateDebut+1;
         YMeilleurDebut:=YDateDebut;
         YMeilleurFin:=YDateFin;
        end;
      end;
   until eof(YFicResult3);
   if YDernierLuGlop then
    begin
     YDateFin:=YDateEnJour[0];
     if (YDateFin-YDateDebut+1)>=YPlusLongDuree then
      begin
       YPlusLongDuree:=YDateFin-YDateDebut+1;
       YMeilleurDebut:=YDateDebut;
       YMeilleurFin:=YDateFin;
      end;
    end;

   if Ysaisie then
    YSaisie5;


   {--CAS OU LES RESULTATS DE DEBIT DEPASSENT 3 ANS D'AFFILE SANS LACUNE.--}
   {--CHOIX DE LA PERIODE DE CALCUL                                      --}
   if YPlusLongDuree>(3*365) then
    begin
     if YSaisie then
      YSaisie6

     else
      DatesLuesSurFichier;
     YResume:=YResume+' periode de calcul = '+ADate(YDateDebut)+' au '+ADate(YDateFin);
    end {fin du cas o les rsultats de dbit dpassent 3 ans conscutifs sans lacune}

   {--cas o la priode de rsultats sans lacune est trop courte}
   else
    begin
     YcalculPossibl:=false;
     if YSaisie then
      YSaisie7;

    end;

  end; {fin du cas o paramtres et donnes rendent les calculs possibles}

 {--CAS OU ON FAIT LES CALCULS--}
 if YCalculPossibl then

  begin

   {--REMPLISSAGE DU FICHIER DES DEFAILLANCES AVEC LES VALEURS des --}
   {--dfaillances invitables                                     --}
   reset(YFicQdef[0]);
   assign(YFicQdef[1],YRepT+YNomFicQdef+'1');
   rewrite(YFicQdef[1]);
   seek(YFicQdef[0],YDateDebut-YdateInitiale);
   for Yi:=YDateDebut to YDateFin do
    begin
     read(YFicQdef[0],YQdef0);
     write(YFicQdef[1],YQdef0);
    end;
   close(YFicQdef[0]);
   close(YFicQdef[1]);


   {==ECRITURE DES DEBITS STOCKES IDEAUX SUR FICHIERS TYPES : lecture ==}
   {==sur le second fichier de rsultats dtaills, et criture sur un==}
   {==fichier typ par station, dans le sens chronologique inverse    ==}
   {==et sur la priode choisie.                                      ==}

   {--boucle sur les lacs--}
   for YRangLac:=1 to YNbLacs  do
    begin

     {assignation des fichiers typs de volume, dbit et manque de capacit--}
     str(YRangLac,Yextension);
     assign(YFicQST[YrangLac],YRepT+YNomFicQST+YExtension);
     assign(YFicVobj[YRangLac],YRepT+YNomFicV+YExtension);
     assign(YFicVobj0[YRangLac],YRepT+YNomFicVobj0+YExtension);
     assign(YFicVdef[YRangLac],YRepT+YNomFicVdef+Yextension);
     assign(YFicVges[YRangLac],YRepT+YNomFicVges+YExtension);
     assign(YFicVop[YRangLac],YRepT+YNomFicVop+YExtension);

     {--remplissage du fichier typ de dbit avec des lacunes--}
     rewrite(YFicQST[YRangLac]);
     YQST[YRangLac]:=YLacune;
     for Yi:=YDateDebut to YdateFin do
      write(YFicQST[YRangLac],YQST[YrangLac]);

    end; {fin de boucle sur les lacs}

   {--ouverture du fichier texte des rsultats de dbit stock idal,   --}
   {--et lecture des premires lignes inutiles (en-tte, titres et dates--}
   {--antrieures  la p^riode choisie                                 --}
   reset(YFicResult3);
{ACHTUNG LECTURE EN-TETE--}
   for Yi:=1 to 18+YDateDebut-YDateInitiale do
    readln(YFicResult3,YJJ_MM_AAAA);

   {--boucle sur le temps, sur la priode choisie--}
   for Yi:=YDateDebut to YDateFin do

    begin

     {--lecture de la date aval sur le fichier texte--}
     read(YFicResult3,YJJ_MM_AAAA);

     {--pour chaque lac, lecture sur le fichier texte des rsultats --}
     {--correspondants et extraction du dbit stock, puis criture --}
     {--de celui-ci sur fichier typ en chrono inverse              --}
     for YrangLac:=1 to YNbLacs do
      begin
       read(YFicResult3,YChaine93);
       val(copy(YChaine93,14,19),YQST[YRanglac],YCode);
       seek(YFicQST[YRangLac],filepos(YFicQST[YRangLac])-1);
       write(YFicQST[YRangLac],YQST[YRangLac]);
       seek(YFicQST[YRangLac],filepos(YFicQST[YRangLac])-1);
      end;
     readln(YFicResult3);

    end; {fin de boucle sur le temps, sur la priode chosie}

   {--fermeture du fichier texte des rsultats de dbit stock et des--}
   {--fichiers typs de dbit stock                                 --}
   close(YFicResult3);
   for YRangLac:=1 to YNbLacs do
    close(YFicQST[YRangLac]);

   {--message cran--}
   if YSaisie then
    Ysaisie8;


   {--BOUCLE SUR LES RESERVOIRS POUR CALCUL DES VOLUMES LIMITES--}
   CalculChroniquesVolume;

   {--CALCUL DE LA PARTIE FRACTIONNAIRE DES DATES DE VOLUME, pour chaque--}
   {--lac. Ces dates sont dcales de +12 h par rapport aux dates       --}
   {--des dbits. A cet instant dans le programme, les volumes prsents --}
   {--dans les fichiers typs de rsultats (stocks juste avant),       --}
   {--correspondent  ces dates fractionnaires                          --}
   for YRangLac:=1 to YNbLacs do
    begin
     YDecalDateQ[YRanglac]:=YDecalDateQ[YrangLac]+0.5;
     if YdecalDateQ[YrangLac] >=1 then
      begin
       YdateFinLac[YRangLac]:=YdateFinLac[YRanglac]+1;
       YDecalDateQ[YRanglac]:=YDecaldateQ[YRangLac]-1;
      end;
    end;

   {==A PARTIR DES FICHIERS TYPES DE VOLUME A DATE FRACTIONNAIRE ET DE   ==}
   {==MANQUE DE CAPACITE, CALCUL DES VOLUMES A 24H ET ECRITURE DE CEUX-CI==}
   {==SUR LES MEMES FICHIERS TYPES, ET ECRITURE DES RESULTATS SUR        ==}
   {==FICHIER TEXTE DES VOLUMES ET DEBITS DEFAILLANTS                    ==}

   {--criture d'en-tte sur fichier texte de rsultats des chroniques --}
   {--de volume et dbits dfaillants                                  --}
   assign(YFicResult4,YRepR+YNomFicResult4);
   rewrite(YFicResult4);
   writeln(YFicResult4,'Rang du calcul : ',YCompteur,' ;  ',Yresume);
   ADatation(YFicResult4);
   writeln(YFicResult4);
   writeln(YFicResult4,'Chroniques de volumes presents dans les reservoirs,',
                       ' les plus compatibles avec les chroniques de debits stockes objectifs');
   writeln(YFicResult4,'Les valeurs situees en haut des colonnes de date representent leur partie fractionnaire');
   writeln(YFicResult4);
   writeln(YFicResult4,'Variables editees :');
   writeln(YFicResult4);
   writeln(YFicResult4,'-date : date a laquelle on vise l''objectif de debit a la station situee a l''aval du systeme');
   writeln(YFicResult4,'-date(i) : date de l''objectif aval, diminuee du temps de propagation entre le point de ',
                       'restitution du reservoir de rang i et la station aval du systeme');
   writeln(YFicResult4,'-Vdef(i) : supplement de capacite du reservoir de rang i ',
                       '(par rapport a l''existant), qui permettrait de satisfaire l''objectif ',
                       'en permanence (sauf echecs inevitables dus a la repartition des apports naturels et aux ',
                       'consignes et contraintes des prises et restitutions)');
   writeln(YFicResult4,'-Vobj(i) : volume dans le reservoir i (calcule a rebours), permettant la meilleure satisfaction ',
                       'possible de l''objectif aval dans le futur (compte tenu des echecs inevitables et des limites ',
                       ' de capacite des reservoirs)');
   writeln(YFicResult4,'-Vobj0(i) : volume fictif dans le reservoir i (calcule a rebours), permettant la meilleure ',
                       'satisfaction possible de l''objectif aval dans le futur (compte tenu des echecs inevitables mais',
                       ' sans limitation de capacite des reservoirs)');
   writeln(YFicResult4,'-Vges(i) : volume dans le reservoir i (calcule en chronologie normale), simulant une gestion ',
                       'preoccupee de la satisfaction immediate, si possible (compte tenu des echecs inevitables ',
                       'et des limites de capacite des reservoirs), de l''objectif aval');
   writeln(YFicResult4,'-Vop(i) : volume dans le reservoir, combinaison de Vobj et Vges : Vop = min(Vobj,Vges) pour ',
                       'objectif de soutien de debit ; Vop = max(Vobj,Vges) pour ojectif de laminage de debit');
   writeln(YFicResult4);
   write(YFicResult4,'   0.50000 ');
   for YRangLac:=1 to YNbLacs do
    write(YFicResult4,' ',YDecalDateQ[YRangLac]:11:8,
                      '                                                     ',
                      '                                                    ');
   writeln(YFicResult4);
   write(YFicResult4,' date aval   ');
   for YRangLac:=1 to YNbLacs do
    write(YFicResult4,'     date',YRanglac,'      Vdef',YRangLac,' (m3)       Vobj',YRangLac,'(m3)      ',
                         '  Vobj0',YRangLac,'(m3)   Vobj',YRangLac,'(m3) a 24H   ',
                         '      Vges',YRangLac,'(m3)   ','       Vop',YRangLac,'(m3)   ');
   writeln(YFicResult4);

   YVdefsommax:=0;

   {--ouverture des fichiers typs de volume et de manque de capacit pour --}
   {--chaque lac, et  premire lecture de volume  date fractionnaire      --}
   for YRangLac:=1 to YNbLacs do
    begin
     reset(YFicVobj[YRangLac]);
     reset(YFicVobj0[YRangLac]);
     reset(YFicVges[YRangLac]);
     read(YFicVobj[YRanglac],YVobjAnt[YrangLac]);
    end;

   {--boucle sur les temps, sur la priode choisie--}
   for Yi:=YDateDebut+1 to YDateFin+1 do

    begin

     {--criture sur fichier texte de date  la station aval--}
     write(YFicResult4,ADate(Yi-1),'   ');

     YVdefsom:=0;

     {--boucle sur les lacs--}
     for YRangLac:=1 to YNbLacs do

      begin

       {--cas o on n'est pas arriv  la fin du fichier typ de volume--}
       if Yi<=YdateFin then

        begin

         {--lecture de volume  heure fractionnaire sur fichier typ, --}
         {--CALCUL DU VOLUME A 24h par interpolation linaire et      --}
         {--criture de celui-ci sur mme fichier typ                --}
         read(YFicVobj[YRangLac],YVobjNouv[Yranglac]);
         YVobj:=YVobjAnt[YrangLac]+(YVobjNouv[YRanglac]-YVobjAnt[Yranglac])*(1-YDecalDateQ[YRangLac]);
         seek(YFicVobj[YRangLac],filepos(YFicVobj[YRangLac])-2);
         write(YFicVobj[YRanglac],YVobj);
         seek(YficVobj[YRangLac],filepos(YficVobj[Yranglac])+1);

        end

       {--cas o on est arriv  la fin du fichier typ de volume--}
       else
        begin
         YVobjNouv[YRanglac]:=Ylacune;
         YVobj:=YLacune;
        end;

       {--lecture de volume de gestion et de volume objectif idal sur--}
       {--fichiers typs                                              --}
       read(YFicVges[YRangLac],YVges);
       read(YFicVobj0[YRangLac],YVobj0);

       {--calcul du manque de capacit de rservoir--}
       if YTypeObjectif=0 then
        YVdef:=amax(0,YVobj0-YVtot[YRanglac])
       else
        YVdef:=amax(0,-YVobj0);

       YVdefsom:=YVdefSom+YVdef;

       {--calcul du volume oprationnel Vop--}
       if YTypeObjectif=0 then
        YVop:=amin(YVobjAnt[YRanglac],YVges)
       else
        YVop:=amax(YVobjAnt[YRangLac],YVges);

       {--criture sur fichier texte de la date lac, du dbit dfaillant,--}
       {--du volume Vobj  date fractionnaire et  24h, des volumes Vobj0--}
       {--Vges et Vop  date fractionnaire                               --}
       write(YFicResult4,ADate(Yi-1+YDateFinLac[YRanglac]-YDateFin),' ',YVdef:15:2,' ',
                         YVobjAnt[YRanglac]:15:2,'   ',YVobj0:15:2,'   ',YVobj:15:2,
                         '   ',YVges:15:2,'   ',YVop:15:2,'   ');

       {--incrmentation du volume  date fractionnaire--}
       YVobjAnt[YRanglac]:=YVobjNouv[YRangLac];

      end; {fin de boucle sur les lacs--}

     {--passage  la ligne suivante dans le fichier texte de rsultats--}
     writeln(YFicResult4);

     YVdefsommax:=amax(YVdefsommax,YVdefsom);

    end; {fin de boucle sur les temps}

   {--fermeture des fichiers typs de volume et de manque de capacit, --}
   {--ainsi que du fichier texte de rsultats de chronique de volume --}
   for Yranglac:=1 to yNbLacs do
    begin
     close(YFicVobj[YRangLac]);
     close(YFicVobj0[YRanglac]);
     close(YFicVges[YRanglac]);
    end;
   close(YFicResult4);

   {--remplacement des valeurs  date fractionnaire par les valeurs  24H--}
   {--dans le fichier typ des volumes Vop                               --}
   for YRanglac:=1 to YNbLacs do
    begin
     reset(YficVop[YRangLac]);
     read(YFicVop[YRanglac],YVopAnt);
     for Yi:=YDateDebut+1 to YDateFin do
      begin
       read(YFicVop[YRangLac],YVopNouv);
       YVop:=YVopAnt+(YVopNouv-YVopAnt)*(1-YDecalDateQ[YRangLac]);
       seek(YFicVop[YRangLac],filepos(YFicVop[YRangLac])-2);
       write(YFicVop[YRanglac],YVop);
       seek(YficVop[YRangLac],filepos(YficVop[Yranglac])+1);
       YVopAnt:=YVopNouv;
      end;
     close(YFicVop[Yranglac]);
    end;

   {--LECTURE DES PARAMETRES YA ET YB DE FORMULE DE FREQUENCE, AINSI QUE  --}
   {--DES TEMPS DE RETOUR SUR FICHIER IDOINE, OU VALEURS PAR DEFAUT LE CAS--}
   {--ECHEANT                                                             --}
   LectureParametresStat;

   {--sortie sur fichier texte des checs de dbit  la station aval --}
   assign(YFicResult4,YRepR+YNomFicResult5);
   rewrite(YFicResult4);
   writeln(YFicResult4,'Rang du calcul : ',YCompteur,'   ',Yresume);
   ADatation(YFicResult4);
   writeln(YFicResult4);
   write(YFicResult4,'Chroniques des echecs de satisfaction de l''objectif defini a la station aval : ');
   if YTypeObjectif=0 then
    write(YFicResult4,'manque')
   else
    write(YFicresult4,'exces');
   writeln(YFicResult4,' de debit par rapport a l''hydrogramme objectif');
   writeln(YFicResult4);
   writeln(YFicResult4,'Variables editees :');
   writeln(YFicResult4);
   writeln(YFicResult4,'-date aval : date a laquelle on vise l''objectif de debit a la station situee a l''aval du systeme');
   write(YFicResult4,'-Qdef0 : echec inevitable absolu, du a la repartition des debits naturels, a la localisation des ',
                     'reservoirs et aux contraintes et consignes aux prises et restitutions. La capacite ',
                       'limitee des reservoirs n''est pas en cause dans ce type d''echec, que meme un debit stocke net ');
   if YtypeObjectif=0 then
    write(YFicResult4,'minimal')
   else
    write(YFicResult4,'maximal');
   writeln(YFicResult4,' dans tous les reservoirs ne peut eviter');
   write(YFicResult4,'-Qdef : echec inevitable, du au manque de capacite des reservoirs ');
   if YTypeObjectif=0 then
    writeln(YFicResult4,'(destockage net de debit impossible dans des reservoirs vides)')
   else
    writeln(YFicResult4,'(stockage net de debit impossible dans des reservoirs pleins)');
   writeln(YFicResult4,'-Qdef1 : echec inevitable cumulant les echecs absolus et les echecs supplementaires dus au manque',
                       ' de capacite des reservoirs');
   writeln(YFicResult4);
   writeln(YFicResult4,' date aval   ','           Qdef0 (m3/s) ','            Qdef (m3/s) ','           Qdef1 (m3/s) ');
   reset(YFicQdef[0]);
   seek(YFicQdef[0],YDateDebut-YDateInitiale);
   reset(YFicQdef[1]);
   assign(YFicQdef[2],YRepT+YNomFicQdef);
   rewrite(YFicQdef[2]);
   YNbQdefNul:=0;
   for Yi:=YDateDebut to YDateFin do
    begin
     write(YFicResult4,ADate(Yi),'   ');
     read(YFicQdef[0],YQdef0);
     read(YFicQdef[1],YQdef1);
     YQdef:=YQdef1-YQdef0;
     if YQdef<=YTouComNul then
      YNbQdefNul:=YNbQdefNul+1;
     write(YFicQdef[2],YQdef);
     writeln(YFicResult4,YQdef0:23:3,' ',YQdef:23:3,' ',YQdef1:23:3);
    end;
   close(YFicQdef[0]);
   close(YFicQdef[1]);
   close(YFicQdef[2]);
   close(YFicResult4);
   TriChronique(YFicQdef[2],YNbQdefNul,YTouComNul,YQdefmoy,YQdefmed,YQdefmax,YQdefmin,YQdefrare,YQdeffrequent);
   assign(YFicResult4,YRepR+YNomFicResult6);
   rewrite(YFicResult4);
   writeln(YFicResult4,'Rang du calcul : ',YCompteur,'   ',Yresume);
   ADatation(YFicResult4);
   writeln(YFicResult4);
   write(YFicResult4,'Valeurs maximales (m3) sur la periode de calcul, du volume manquant Vdef : ');
   writeln(YFicResult4,'somme sur les reservoirs ; maximum sur les reservoirs ; valeur par reservoir');
   writeln(YFicResult4);
   write(YficResult4,'  somme (reservoirs) ',' maximum (reservoirs) ');
   YVdef:=0;
   for YRangLac:=1 to YNbLacs do
    begin
     YVdef:=amax(YVdef,YVdefmax[YRangLac]);
     write(YFicResult4,'     reservoir',YRangLac,' ');
    end;
   writeln(YFicResult4);
   write(YFicResult4,'     ',YVdefsommax:15:2,'       ',YVdef:15:2,' ');
   for YrangLac:=1 to YNbLacs do
    write(YFicResult4,YVdefmax[YRangLac]:15:2,' ');
   writeln(YFicResult4);
   writeln(YFicResult4);
   if YTypeObjectif=0 then
    write(YFicResult4,'Manque')
   else
    write(YFicResult4,'Exces');
   write(YFicResult4,' inevitable de debit Qdef (m3/s) par rapport a l''objectif a la station aval du systeme, ');
   writeln(YFicResult4,'du au manque de capacite des reservoirs');
   writeln(YFicResult4);
   writeln(YFicResult4,'  Statistiques (frequence = (n-YA)/(Effectif+YB) avec n=rang, YA=',YA,' et YB=',YB,') :');
   write(YFicResult4,'    Frequence-->   Moyenne    Maximum ');
   for Yi:=1 to YNbFreq do
    begin
     YFreq:=1/YTpsFreq[Yi];
     write(YFicResult4,'   ',Yfreq:7:5,' ');
    end;
   Yfreq:=0.5;
   write(YFicResult4,'   ',YFreq:7:5,' ');
   for Yi:=1 to YNbFreq do
    begin
     YFreq:=1-1/YTpsFreq[YNbFreq+1-Yi];
     write(YFicResult4,'   ',Yfreq:7:5,' ');
    end;
   writeln(YFicResult4,'   Minimum');
   write(YFicResult4,'                ',YQdefmoy:10:3,' ',YQdefmax:10:3,' ');
   for Yi:=1 to YNbfreq do
    write(YFicResult4,YQdefrare[Yi]:10:3,' ');
   write(YFicResult4,YQdefmed:10:3,' ');
   for Yi:=1 to YNbfreq do
    write(YFicResult4,YQdeffrequent[Yi]:10:3,' ');
   writeln(YFicResult4,YQdefmin:10:3);
   writeln(YFicResult4);
   writeln(YFicResult4,'  valeurs classees :');
   reset(YFicQdef[2]);
   while not eof(YFicQdef[2]) do
    begin
     read(YFicQdef[2],YQdef);
     writeln(YFicResult4,' ',YQdef);
    end;
   close(YFicQdef[2]);
   close(YficResult4);

   {--message cran--}
   if YSaisie then
    YSaisie9;

   {==EDITION DES RESULTATS CLASSES ET ISOFREQUENCE DE VOLUME ET DE ==}
   {==DEBIT DEFAILLANT                                              ==}

   {--boucle sur les rservoirs--}
   for YrangLac:=1 to YNbLacs do
    begin

     {--calcul de la date de dbut de srie des volumes  24h--}
     YDateDebutV:=YDateDebut+YDateFinLac[YRanglac]-YDateFin;

     {--date de fin de srie des volumes  24h : on perd une valeur par --}
     {--rapport  la srie des volumes aux heures brutes du rservoir,  --}
     {-- cause des interpolations linaires                            --}
     YDateFinV:=YDateFinLac[YRangLac]-1;

     {--extension destine au nom des fichiers texte de rsultats--}
     str(YRangLac,Yextension);

     {--calcul et criture sur fichier texte des rsultats isofrquence   --}
     {--des volumes limites Vobj ( 24 H)  respecter dans le rservoir   --}
     assign(YFicResult4,YRepR+YNomFicResultVobj+YExtension);
     if YTypeObjectif=0 then
      YChaine:='minimale'
     else
      YChaine:='maximale';
     YChaine:='Valeur '+YChaine+' Vobj du volume a conserver (a 24h) dans le reservoir '+YNomLac[YRangLac]
              +' (m3) pour garantir du mieux possible la satisfaction a venir de l''objectif aval '
              +'(en evitant les defaillances causees par un stock ';
     if YTypeObjectif=0 then
      YChaine:=YChaine+'vide'
     else
      YChaine:=YChaine+'plein';
     YChaine:=YChaine+', cf rapport)';
     ISOFREQ(YdateDebutV,YDateDebutV,YDateFinV,YFicVobj[YRangLac],Ychaine);

     {--calcul et criture sur fichier texte des rsultats isofrquence   --}
     {--des volumes limites Vop ( 24H)  respecter dans le rservoir     --}
     assign(YFicResult4,YRepR+YNomFicResultVop+YExtension);
     if YTypeObjectif=0 then
      YChaine:='minimale'
     else
      YChaine:='maximale';
     YChaine:='Valeur '+YChaine+' Vop du volume dans le reservoir '+YNomLac[YRangLac]+' (m3 a 24h), '
              +'produit par une gestion visant prioritairement la meilleure satisfaction possible de '
              +'l''objectif commun dans l''immediat, et secondairement sa meilleure satisfaction possible '
              +'par la suite';
     ISOFREQ(YdateDebutV,YDateDebutV,YDateFinV,YFicVop[YRangLac],Ychaine);

     {--calcul et criture sur fichier texte des rsultats isofrquence   --}
     {--des manques de capacit dans le rservoir                         --}
     assign(YFicResult4,YRepR+YNomFicResultM+Yextension);
     YChaine:='Manque Vdef de capacite dans le reservoir '+YNomLac[YRangLac]+' (m3), pour pouvoir limiter '
     +'les defaillances de satisfaction de l''objectif aval aux seuls echecs inevitables absolus (= volume'
     +' supplementaire dont il faudrait disposer ';
     if YTypeObjectif=0 then
      YChaine:=YChaine+'au dessus du niveau crete)'
     else
      YChaine:=YChaine+'en dessous du niveau du fond)';
     ISOFREQ(YdateDebutV,YDateDebutV,YDateFinV+1,YFicVdef[YRangLac],YChaine);

    end; {fin de boucle sur les rservoirs}

   {--rsultats de dfaillances de dbit invitables absolus (mme avec des--}
   {--capacits de rservoirs sans limite                                  --}
   assign(YFicResult4,YRepR+YNomFicResDef+'0');
   if YTypeObjectif=0 then
    YChaine:='Manque'
   else
    YChaine:='Exces';
   YChaine:=YChaine+' de debit inevitable absolu Qdef0 a la station aval du systeme (m3/s) par rapport a '
             +'l''hydrogramme objectif (du fait des debits naturels, de la localisation des reservoirs et '
             +'des consignes et contraintes aux prises et restitutions)';
   ISOFREQ(YDateInitiale,YDateDebut,YDateFin,YficQdef[0],YChaine);

   {--rsultats de dfaillances de dbit invitables --}
   assign(YFicResult4,YRepR+YNomFicResDef+'1');
   if YTypeObjectif=0 then
    YChaine:='Manque'
   else
    YChaine:='Exces';
   YChaine:=YChaine+' inevitable de debit Qdef1 a la station aval du systeme (m3/s) par rapport a l''objectif '
             +'(du fait de la repartition des debits, de la localisation des reservoirs, des consignes et '
             +'contraintes aux prises et restitutions et du manque de capacite des reservoirs)';
   ISOFREQ(YDateDebut,YDateDebut,YDateFin,YficQdef[1],YChaine);

   {--message cran et stat du calcul--}
   assign(YFicSortie, YRepR+YNomFicSortie);
   append(YFicSortie);
   writeln(YFicSortie);
   EcritureSeparation;
   writeln(YFicSortie,'FIN DU CALCUL (LES ETAPES SUCCESSIVES SE SONT DEROULEES NORMALEMENT)');
   close(YFicSortie);
   if YSaisie then
    YSaisie10;

  end; {fin du cas o on fait les calculs}

 assign(YFitext,YNomFicFin);
 rewrite(YFitext);
 close(YFitext);

END.