Commit aec28418 authored by Dorchies David's avatar Dorchies David
Browse files

feat: add option to run only backward simulation

Refs #7
parent 5d5f1a64
...@@ -9,6 +9,7 @@ BATCH ...@@ -9,6 +9,7 @@ BATCH
1 1
4 4
1 1
0
...@@ -30,4 +31,7 @@ ligne 10 : code indiquant le mode de r ...@@ -30,4 +31,7 @@ ligne 10 : code indiquant le mode de r
5=visant à équilibrer en fin de pas de temps les durées Tpot d'évolution de réservoir vers état extrême (voir ligne 11) avec quantile donné des apports de chaque quantième 5=visant à équilibrer en fin de pas de temps les durées Tpot d'évolution de réservoir vers état extrême (voir ligne 11) avec quantile donné des apports de chaque quantième
ligne 11 (utilisée seulement si 4 ou 5 en ligne 10) : code indiquant la nature de Tpot : ligne 11 (utilisée seulement si 4 ou 5 en ligne 10) : code indiquant la nature de Tpot :
1 : Tpot est la durée potentielle minimale Tpot1 de reconstitution du volume utilisable maximal (obtention de V=Vtot ou V=0, selon la nature de l'objectif (soutien ou laminage) et le sens des calculs) 1 : Tpot est la durée potentielle minimale Tpot1 de reconstitution du volume utilisable maximal (obtention de V=Vtot ou V=0, selon la nature de l'objectif (soutien ou laminage) et le sens des calculs)
2 : Tpot est la durée potentielle minimale Tpot2 d'épuisement du volume utilisable (obtention de V=Vtot ou V=0, selon la nature de l'objectif (soutien ou laminage) et le sens des calculs) 2 : Tpot est la durée potentielle minimale Tpot2 d'épuisement du volume utilisable (obtention de V=Vtot ou V=0, selon la nature de l'objectif (soutien ou laminage) et le sens des calculs)
\ No newline at end of file ligne 12 : code indiquant les sous-programmes à lancer:
0 : tous les sous-programmes
1 : uniquement la simulation en chronologie inverse
...@@ -853,6 +853,7 @@ procedure C3_CalculChroniquesVolume; ...@@ -853,6 +853,7 @@ procedure C3_CalculChroniquesVolume;
gotoxy(Ax-36,Ay); gotoxy(Ax-36,Ay);
clreol; clreol;
writeln(' : termin '); writeln(' : termin ');
if YChoixSubProg=1 then exit;
write(' calcul de Vges en sens chrono (iter. en cours sur Vges initial : '); write(' calcul de Vges en sens chrono (iter. en cours sur Vges initial : ');
A_lecture_xy; A_lecture_xy;
......
...@@ -182,6 +182,7 @@ VAR {entiers} ...@@ -182,6 +182,7 @@ VAR {entiers}
YAnFinV : integer; YAnFinV : integer;
YAnPremier : integer; YAnPremier : integer;
YChoix : integer; {0 pour saisie clavier et autre pour lecture sur fichier (options de calcul)} YChoix : integer; {0 pour saisie clavier et autre pour lecture sur fichier (options de calcul)}
YChoixSubProg : integer; {0 pour tout le programme, 1 pour backward simulation uniquement}
YCode : integer; {code de bonne traduction de chaŒne en num‚rique} YCode : integer; {code de bonne traduction de chaŒne en num‚rique}
YComplet : integer; {1 si d‚bit aval et d‚bits d‚cal‚s aux prises et restit. existent, 0 sinon} YComplet : integer; {1 si d‚bit aval et d‚bits d‚cal‚s aux prises et restit. existent, 0 sinon}
YCompteur : integer; {rang du calcul} YCompteur : integer; {rang du calcul}
......
...@@ -102,6 +102,7 @@ procedure P_ChoixEntreeOptions; ...@@ -102,6 +102,7 @@ procedure P_ChoixEntreeOptions;
else else
YCodeTpot:=false; YCodeTpot:=false;
end; end;
readln(YFitext,YChoixSubProg);
close(YFitext); close(YFitext);
end end
else else
......
...@@ -854,299 +854,301 @@ BEGIN ...@@ -854,299 +854,301 @@ BEGIN
C3_CalculChroniquesVolume; C3_CalculChroniquesVolume;
close(YFicSortie); close(YFicSortie);
{--CALCUL DE LA PARTIE FRACTIONNAIRE DES DATES DE VOLUME, pour chaque--} if YChoixSubProg=0 then begin
{--lac. Par rapport aux dates des dbits aval, ces dates de volume --}
{--dcales de YdecalDateQ+0.5. A cet instant dans le programme, les --} {--CALCUL DE LA PARTIE FRACTIONNAIRE DES DATES DE VOLUME, pour chaque--}
{--volumes prsents dans les fichiers typs de rsultats (stocks --} {--lac. Par rapport aux dates des dbits aval, ces dates de volume --}
{--juste avant, par C3_CalculChroniquesVolume), correspondent ces --} {--dcales de YdecalDateQ+0.5. A cet instant dans le programme, les --}
{--dates fractionnaires allant de YDateDebut+0.5+YdecalDateQ+0.5 --} {--volumes prsents dans les fichiers typs de rsultats (stocks --}
{--YdateFin+0.5+YdecalDateQ+0.5. --} {--juste avant, par C3_CalculChroniquesVolume), correspondent ces --}
for YRangLac:=1 to YNbLacs do {--dates fractionnaires allant de YDateDebut+0.5+YdecalDateQ+0.5 --}
begin {--YdateFin+0.5+YdecalDateQ+0.5. --}
YDecalDateQ[YRanglac]:=YDecalDateQ[YrangLac]+0.5; for YRangLac:=1 to YNbLacs do
if YdecalDateQ[YrangLac] >=1 then
begin begin
YdateFinLac[YRangLac]:=YdateFinLac[YRanglac]+1; YDecalDateQ[YRanglac]:=YDecalDateQ[YrangLac]+0.5;
YDecalDateQ[YRanglac]:=YDecaldateQ[YRangLac]-1; if YdecalDateQ[YrangLac] >=1 then
begin
YdateFinLac[YRangLac]:=YdateFinLac[YRanglac]+1;
YDecalDateQ[YRanglac]:=YDecaldateQ[YRangLac]-1;
end;
end; end;
end;
{==A PARTIR DES FICHIERS TYPES DE VOLUME A DATE FRACTIONNAIRE, CALCUL==}
{==DES VOLUMES A 24H ET ECRITURE DE CEUX-CI SUR LES MEMES FICHIERS ==}
{==TYPES, ET ECRITURE DES RESULTATS SUR FICHIER TEXTE DES VOLUMES ==}
{--criture d'en-tte sur fichier texte de rsultats des chroniques --}
{--de volume --}
Ici_EcritureEntete_Volumes;
{--ouverture des fichiers typs de volume et de manque de capacit pour --}
{--chaque lac, et premire lecture de volume Vobj date fractionnaire --}
for YRangLac:=1 to YNbLacs do
begin
reset(YFicVobj[YRangLac]);
reset(YFicVges[YRangLac]);
reset(YFicVop[YRangLac]);
read(YFicVobj[YRanglac],YVobjAnt[YrangLac]);
YVobjMoyrel[1,YRangLac]:=0;
YVobjMoyrel[2,YRangLac]:=0;
end;
{--boucle sur les temps, sur la priode choisie--} {==A PARTIR DES FICHIERS TYPES DE VOLUME A DATE FRACTIONNAIRE, CALCUL==}
for Yi:=YDateDebut+1 to YDateFin+1 do {==DES VOLUMES A 24H ET ECRITURE DE CEUX-CI SUR LES MEMES FICHIERS ==}
{==TYPES, ET ECRITURE DES RESULTATS SUR FICHIER TEXTE DES VOLUMES ==}
begin {--criture d'en-tte sur fichier texte de rsultats des chroniques --}
{--de volume --}
Ici_EcritureEntete_Volumes;
{--criture sur fichier texte de date la station aval--} {--ouverture des fichiers typs de volume et de manque de capacit pour --}
write(YFicResult4,B_Date(Yi-1),' '); {--chaque lac, et premire lecture de volume Vobj date fractionnaire --}
for YRangLac:=1 to YNbLacs do
begin
reset(YFicVobj[YRangLac]);
reset(YFicVges[YRangLac]);
reset(YFicVop[YRangLac]);
read(YFicVobj[YRanglac],YVobjAnt[YrangLac]);
YVobjMoyrel[1,YRangLac]:=0;
YVobjMoyrel[2,YRangLac]:=0;
end;
{--boucle sur les lacs--} {--boucle sur les temps, sur la priode choisie--}
for YRangLac:=1 to YNbLacs do for Yi:=YDateDebut+1 to YDateFin+1 do
begin begin
{--cas o on n'est pas arriv la fin du fichier typ de volume--} {--criture sur fichier texte de date la station aval--}
if Yi<=YdateFin then write(YFicResult4,B_Date(Yi-1),' ');
begin {--boucle sur les lacs--}
for YRangLac:=1 to YNbLacs do
{--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[YRangLac]:=YVobjAnt[YrangLac]+(YVobjNouv[YRanglac]-YVobjAnt[Yranglac])*(1-YDecalDateQ[YRangLac]);
seek(YFicVobj[YRangLac],filepos(YFicVobj[YRangLac])-2);
write(YFicVobj[YRanglac],YVobj[YRangLac]);
seek(YficVobj[YRangLac],filepos(YficVobj[Yranglac])+1);
YVobjMoyRel[1,YRangLac]:=YVobjMoyRel[1,YRangLac]+YVobj[YRangLac];
end
{--cas o on est arriv la fin du fichier typ de volume--}
else
begin begin
YVobjNouv[YRanglac]:=Ylacune;
YVobj[YRangLac]:=YLacune;
end;
{--lecture de volume de gestion Vobj sur fichier typ--} {--cas o on n'est pas arriv la fin du fichier typ de volume--}
read(YFicVges[YRangLac],YVges[YRangLac]); if Yi<=YdateFin then
read(YFicVop[YRangLac],YVop[YRangLac]);
YVobjMoyRel[2,YRangLac]:=YVobjMoyRel[2,YRangLac]+YVges[YRangLac]; begin
{--criture sur fichier texte de la date lac, du volume Vobj date--} {--lecture de volume heure fractionnaire sur fichier typ, --}
{--fractionnaire et 24h, des volumes Vges et Vop date --} {--CALCUL DU VOLUME A 24h par interpolation linaire et --}
{--fractionnaire --} {--criture de celui-ci sur mme fichier typ --}
if YAbsRel=1 then read(YFicVobj[YRangLac],YVobjNouv[Yranglac]);
begin YVobj[YRangLac]:=YVobjAnt[YrangLac]+(YVobjNouv[YRanglac]-YVobjAnt[Yranglac])*(1-YDecalDateQ[YRangLac]);
write(YFicResult4,B_Date(Yi-1+YDateFinLac[YRanglac]-YDateFin),' ', seek(YFicVobj[YRangLac],filepos(YFicVobj[YRangLac])-2);
YVobjAnt[YRanglac]:15:2,' '); write(YFicVobj[YRanglac],YVobj[YRangLac]);
if YVobj[YRangLac]<>YLacune then seek(YficVobj[YRangLac],filepos(YficVobj[Yranglac])+1);
write(YFicResult4,YVobj[YRangLac]:15:2) YVobjMoyRel[1,YRangLac]:=YVobjMoyRel[1,YRangLac]+YVobj[YRangLac];
else end
write(YFicResult4,' ');
write(YFicResult4,' ',YVges[YRangLac]:15:2,' ',YVop[YRangLac]:15:2,' '); {--cas o on est arriv la fin du fichier typ de volume--}
end else
else begin
begin YVobjNouv[YRanglac]:=Ylacune;
write(YFicResult4,B_Date(Yi-1+YDateFinLac[YRanglac]-YDateFin),' ', YVobj[YRangLac]:=YLacune;
(YVobjAnt[YRanglac]/YVtot[YRangLac]):15:13,' '); end;
if YVobj[YRangLac]<>YLacune then
write(YficResult4,(YVobj[YRangLac]/YVtot[YRangLac]):15:13) {--lecture de volume de gestion Vobj sur fichier typ--}
else read(YFicVges[YRangLac],YVges[YRangLac]);
write(YFicResult4,' '); read(YFicVop[YRangLac],YVop[YRangLac]);
write(YFicResult4,' ',(YVges[YRangLac]/YVtot[YRangLac]):15:13,' ',(YVop[YRangLac]/YVtot[YRangLac]):15:13,' '); YVobjMoyRel[2,YRangLac]:=YVobjMoyRel[2,YRangLac]+YVges[YRangLac];
end;
{--incrmentation du volume date fractionnaire--} {--criture sur fichier texte de la date lac, du volume Vobj date--}
YVobjAnt[YRanglac]:=YVobjNouv[YRangLac]; {--fractionnaire et 24h, des volumes Vges et Vop date --}
{--fractionnaire --}
if YAbsRel=1 then
begin
write(YFicResult4,B_Date(Yi-1+YDateFinLac[YRanglac]-YDateFin),' ',
YVobjAnt[YRanglac]:15:2,' ');
if YVobj[YRangLac]<>YLacune then
write(YFicResult4,YVobj[YRangLac]:15:2)
else
write(YFicResult4,' ');
write(YFicResult4,' ',YVges[YRangLac]:15:2,' ',YVop[YRangLac]:15:2,' ');
end
else
begin
write(YFicResult4,B_Date(Yi-1+YDateFinLac[YRanglac]-YDateFin),' ',
(YVobjAnt[YRanglac]/YVtot[YRangLac]):15:13,' ');
if YVobj[YRangLac]<>YLacune then
write(YficResult4,(YVobj[YRangLac]/YVtot[YRangLac]):15:13)
else
write(YFicResult4,' ');
write(YFicResult4,' ',(YVges[YRangLac]/YVtot[YRangLac]):15:13,' ',(YVop[YRangLac]/YVtot[YRangLac]):15:13,' ');
end;
{--incrmentation du volume date fractionnaire--}
YVobjAnt[YRanglac]:=YVobjNouv[YRangLac];
end; {fin de boucle sur les lacs--} end; {fin de boucle sur les lacs--}
{--passage la ligne suivante dans le fichier texte de rsultats--} {--passage la ligne suivante dans le fichier texte de rsultats--}
writeln(YFicResult4); writeln(YFicResult4);
end; {fin de boucle sur les temps} end; {fin de boucle sur les temps}
{--fermeture des fichiers typs de volume et de manque de capacit, --} {--fermeture des fichiers typs de volume et de manque de capacit, --}
{--ainsi que du fichier texte de rsultats de chronique de volume --} {--ainsi que du fichier texte de rsultats de chronique de volume --}
for Yranglac:=1 to yNbLacs do for Yranglac:=1 to yNbLacs do
begin begin
close(YFicVobj[YRangLac]); close(YFicVobj[YRangLac]);
close(YFicVges[YRanglac]); close(YFicVges[YRanglac]);
YVobjMoyRel[1,YRangLac]:=YVobjMoyRel[1,YRangLac]/(YVtot[YrangLac]*(YdateFin-YDateDebut)); YVobjMoyRel[1,YRangLac]:=YVobjMoyRel[1,YRangLac]/(YVtot[YrangLac]*(YdateFin-YDateDebut));
YVobjMoyRel[2,YRangLac]:=YVobjMoyRel[2,YRangLac]/(YVtot[YrangLac]*(YdateFin-YDateDebut+1)); YVobjMoyRel[2,YRangLac]:=YVobjMoyRel[2,YRangLac]/(YVtot[YrangLac]*(YdateFin-YDateDebut+1));
end; end;
close(YFicResult4); close(YFicResult4);
{--remplacement des valeurs date fractionnaire par les valeurs 24H--} {--remplacement des valeurs date fractionnaire par les valeurs 24H--}
{--dans le fichier typ des volumes Vop --} {--dans le fichier typ des volumes Vop --}
for YRanglac:=1 to YNbLacs do for YRanglac:=1 to YNbLacs do
begin
reset(YficVop[YRangLac]);
read(YFicVop[YRanglac],YVopAnt);
for Yi:=YDateDebut+1 to YDateFin do
begin begin
read(YFicVop[YRangLac],YVopNouv); reset(YficVop[YRangLac]);
YVop[YRangLac]:=YVopAnt+(YVopNouv-YVopAnt)*(1-YDecalDateQ[YRangLac]); read(YFicVop[YRanglac],YVopAnt);
seek(YFicVop[YRangLac],filepos(YFicVop[YRangLac])-2); for Yi:=YDateDebut+1 to YDateFin do
write(YFicVop[YRanglac],YVop[YRangLac]); begin
seek(YficVop[YRangLac],filepos(YficVop[Yranglac])+1); read(YFicVop[YRangLac],YVopNouv);
YVopAnt:=YVopNouv; YVop[YRangLac]:=YVopAnt+(YVopNouv-YVopAnt)*(1-YDecalDateQ[YRangLac]);
seek(YFicVop[YRangLac],filepos(YFicVop[YRangLac])-2);
write(YFicVop[YRanglac],YVop[YRangLac]);
seek(YficVop[YRangLac],filepos(YficVop[Yranglac])+1);
YVopAnt:=YVopNouv;
end;
close(YFicVop[Yranglac]);
end; end;
close(YFicVop[Yranglac]);
end;
{Ecriture sur fichier texte de rsultats concernant les dfaillances de } {Ecriture sur fichier texte de rsultats concernant les dfaillances de }
{gestion (volumes manquants Vdef dans les rservoirs et dfaut de dbit } {gestion (volumes manquants Vdef dans les rservoirs et dfaut de dbit }
{ la station objectif aval) pour une exploitation visant optimiser la} { la station objectif aval) pour une exploitation visant optimiser la}
{rpartition des taches entre rservoirs } {rpartition des taches entre rservoirs }
E_Message12; E_Message12;
Ici_EditionBilan; Ici_EditionBilan;
{--message cran--} {--message cran--}
E_Message9; E_Message9;
{==EDITION DES RESULTATS CLASSES ET ISOFREQUENCE DE VOLUME ET DE ==} {==EDITION DES RESULTATS CLASSES ET ISOFREQUENCE DE VOLUME ET DE ==}
{==DEBIT DEFAILLANT ==} {==DEBIT DEFAILLANT ==}
{--boucle sur les rservoirs--} {--boucle sur les rservoirs--}
for YrangLac:=1 to YNbLacs do for YrangLac:=1 to YNbLacs do
begin begin
{--calcul de la date de dbut de srie des volumes 24h--} {--calcul de la date de dbut de srie des volumes 24h--}
YDateDebutV:=YDateDebut+YDateFinLac[YRanglac]-YDateFin; YDateDebutV:=YDateDebut+YDateFinLac[YRanglac]-YDateFin;
{--date de fin de srie des volumes 24h : on perd une valeur par --} {--date de fin de srie des volumes 24h : on perd une valeur par --}
{--rapport la srie des volumes aux heures brutes du rservoir, --} {--rapport la srie des volumes aux heures brutes du rservoir, --}
{-- cause des interpolations linaires --} {-- cause des interpolations linaires --}
YDateFinV:=YDateFinLac[YRangLac]-1; YDateFinV:=YDateFinLac[YRangLac]-1;
{--extension destine au nom des fichiers texte de rsultats--} {--extension destine au nom des fichiers texte de rsultats--}
str(YRangLac,Yextension); str(YRangLac,Yextension);
{--calcul et criture sur fichier texte des rsultats isofrquence --} {--calcul et criture sur fichier texte des rsultats isofrquence --}
{--des volumes limites Vobj ( 24 H) respecter dans le rservoir --} {--des volumes limites Vobj ( 24 H) respecter dans le rservoir --}
assign(YFicResult4,YRepR+YNomFicResultVobj+YExtension+YExIsofreq); assign(YFicResult4,YRepR+YNomFicResultVobj+YExtension+YExIsofreq);
if YTypeObjectif=0 then if YTypeObjectif=0 then
begin begin
YChaine:='Volume d''eau minimal Vobj'; YChaine:='Volume d''eau minimal Vobj';
if YAbsRel=1 then if YAbsRel=1 then
YChaine:=YChaine+' (m3)' YChaine:=YChaine+' (m3)'
else else
YChaine:=YChaine+'/Vtot'; YChaine:=YChaine+'/Vtot';
YChaine:=YChaine+' en dessous duquel il ne faut pas descendre' YChaine:=YChaine+' en dessous duquel il ne faut pas descendre'
end end
else else
begin begin
YChaine:='Volume d''eau maximal Vobj'; YChaine:='Volume d''eau maximal Vobj';
if YAbsRel=1 then if YAbsRel=1 then
YChaine:=YChaine+' (m3)'
else
YChaine:=YChaine+'/Vtot';
YChaine:=YChaine+' qu''il ne faut pas depasser';
end;
YChaine:=YChaine+' (a 24h) dans le reservoir '+YNomLac[YRangLac]
+' pour pouvoir satisfaire du mieux possible l''objectif aval par la suite'
+' (en evitant au maximum les defaillances causees par un stock ';
if YTypeObjectif=0 then
YChaine:=YChaine+'trop vide)'
else
YChaine:=YChaine+'trop plein)';
C2_ISOFREQ(YdateDebutV,YDateDebutV,YDateFinV,YFicVobj[YRangLac],Ychaine,YNorme[YRangLac],YAbsRel);
{--calcul et criture sur fichier texte des rsultats isofrquence --}
{--des volumes limites Vop ( 24H) respecter dans le rservoir --}
assign(YFicResult4,YRepR+YNomFicResultVop+YExtension+YExIsofreq);
if YTypeObjectif=0 then
YChaine:='minimale'
else
YChaine:='maximale';
YChaine:='Valeur '+YChaine+' Vop';
if YAbsRel=1 then
YChaine:=YChaine+' (m3)' YChaine:=YChaine+' (m3)'
else else
YChaine:=YChaine+'/Vtot'; YChaine:=YChaine+'/Vtot';
YChaine:=YChaine+' qu''il ne faut pas depasser'; YChaine:=YChaine+' du volume dans le reservoir '+YNomLac[YRangLac]+' (a 24h), '
end; +'pouvant etre produit quand on vise d''abord la meilleure satisfaction possible de '
YChaine:=YChaine+' (a 24h) dans le reservoir '+YNomLac[YRangLac] +'l''objectif commun dans l''immediat, puis sa meilleure satisfaction possible '
+' pour pouvoir satisfaire du mieux possible l''objectif aval par la suite' +'par la suite';
+' (en evitant au maximum les defaillances causees par un stock '; C2_ISOFREQ(YdateDebutV,YDateDebutV,YDateFinV,YFicVop[YRangLac],Ychaine,YNorme[YRangLac],YAbsRel);
if YTypeObjectif=0 then
YChaine:=YChaine+'trop vide)' end; {fin de boucle sur les rservoirs}
else
YChaine:=YChaine+'trop plein)'; {--calcul et criture sur fichier texte des rsultats isofrquence --}
C2_ISOFREQ(YdateDebutV,YDateDebutV,YDateFinV,YFicVobj[YRangLac],Ychaine,YNorme[YRangLac],YAbsRel); {--des manques globaux de capacit dans les rservoirs, calculs en --}
{--chrono inverse --}
{--calcul et criture sur fichier texte des rsultats isofrquence --} assign(YFicResult4,YRepR+YNomFicResultM+'A'+YExIsofreq);
{--des volumes limites Vop ( 24H) respecter dans le rservoir --} YChaine:='Manque global Vdef';
assign(YFicResult4,YRepR+YNomFicResultVop+YExtension+YExIsofreq); if YAbsRel=2 then
if YTypeObjectif=0 then YChaine:=YChaine+'/somme(Vtot)';
YChaine:='minimale' YChaine:=YChaine+' de capacite des reservoirs (';
else if YabsRel=1 then
YChaine:='maximale'; YChaine:=YChaine+'m3, ';
YChaine:='Valeur '+YChaine+' Vop'; yChaine:=YChaine+'date aval, calcul en chronologie inverse), responsable '
if YAbsRel=1 then +'de defaillances QXdef2 futures s''ajoutant aux inevitables absolues QXdef0 : capacite supplementaire necessaire ';
YChaine:=YChaine+' (m3)' if YTypeObjectif=0 then
else YChaine:=YChaine+'au dessus de la crete'
YChaine:=YChaine+'/Vtot'; else
YChaine:=YChaine+' du volume dans le reservoir '+YNomLac[YRangLac]+' (a 24h), ' YChaine:=YChaine+'en dessous du fond';
+'pouvant etre produit quand on vise d''abord la meilleure satisfaction possible de ' if YAbsRel=1 then
+'l''objectif commun dans l''immediat, puis sa meilleure satisfaction possible ' C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[1],YChaine,YNorme[0],1)
+'par la suite'; else
C2_ISOFREQ(YdateDebutV,YDateDebutV,YDateFinV,YFicVop[YRangLac],Ychaine,YNorme[YRangLac],YAbsRel); C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[1],YChaine,YNorme[0],4);
end; {fin de boucle sur les rservoirs} {--calcul et criture sur fichier texte des rsultats isofrquence --}
{--des manques globaux de capacit dans les rservoirs, calculs en --}
{--calcul et criture sur fichier texte des rsultats isofrquence --} {--sens chronologique --}
{--des manques globaux de capacit dans les rservoirs, calculs en --} assign(YFicResult4,YRepR+YNomFicResultM+'B'+YExIsofreq);
{--chrono inverse --} YChaine:='Manque global Vdef';
assign(YFicResult4,YRepR+YNomFicResultM+'A'+YExIsofreq); if YAbsRel=2 then
YChaine:='Manque global Vdef'; YChaine:=YChaine+'/somme(Vtot)';
if YAbsRel=2 then YChaine:=YChaine+'de capacite des reservoirs (';
YChaine:=YChaine+'/somme(Vtot)'; if YAbsRel=1 then
YChaine:=YChaine+' de capacite des reservoirs ('; YChaine:=YChaine+'m3, ';
if YabsRel=1 then YChaine:=YChaine+'date aval, calcul en sens chronologique), responsable '
YChaine:=YChaine+'m3, '; +'de defaillances QXdef2 passees s''ajoutant aux inevitables absolues QXdef0 : capacite supplementaire necessaire ';
yChaine:=YChaine+'date aval, calcul en chronologie inverse), responsable ' if YTypeObjectif=0 then
+'de defaillances QXdef2 futures s''ajoutant aux inevitables absolues QXdef0 : capacite supplementaire necessaire '; YChaine:=YChaine+'en dessous du fond'
if YTypeObjectif=0 then else
YChaine:=YChaine+'au dessus de la crete' YChaine:=YChaine+'au dessus de la crete';
else if YAbsRel=1 then
YChaine:=YChaine+'en dessous du fond'; C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[2],YChaine,YNorme[0],1)
if YAbsRel=1 then else
C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[1],YChaine,YNorme[0],1) C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[2],YChaine,YNorme[0],4);
else
C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[1],YChaine,YNorme[0],4);
{--calcul et criture sur fichier texte des rsultats isofrquence --}
{--des manques globaux de capacit dans les rservoirs, calculs en --}
{--sens chronologique --}
assign(YFicResult4,YRepR+YNomFicResultM+'B'+YExIsofreq);
YChaine:='Manque global Vdef';
if YAbsRel=2 then
YChaine:=YChaine+'/somme(Vtot)';
YChaine:=YChaine+'de capacite des reservoirs (';
if YAbsRel=1 then
YChaine:=YChaine+'m3, ';
YChaine:=YChaine+'date aval, calcul en sens chronologique), responsable '
+'de defaillances QXdef2 passees s''ajoutant aux inevitables absolues QXdef0 : capacite supplementaire necessaire ';
if YTypeObjectif=0 then
YChaine:=YChaine+'en dessous du fond'
else
YChaine:=YChaine+'au dessus de la crete';
if YAbsRel=1 then
C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[2],YChaine,YNorme[0],1)
else
C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[2],YChaine,YNorme[0],4);
{--rsultats de dfaillances de dbit invitables absolus (mme avec des--} {--rsultats de dfaillances de dbit invitables absolus (mme avec des--}
{--capacits de rservoirs sans limite --} {--capacits de rservoirs sans limite --}
assign(YFicResult4,YRepR+YNomFicResDef+'0B'+YExIsofreq); assign(YFicResult4,YRepR+YNomFicResDef+'0B'+YExIsofreq);
if YTypeObjectif=0 then if YTypeObjectif=0 then
YChaine:='Manque' YChaine:='Manque'
else else
YChaine:='Exces'; YChaine:='Exces';
YChaine:=YChaine+' de debit inevitable absolu QXdef0 a la station aval du systeme (m3/s, date aval, calcul en sens chronologique) par rapport a ' YChaine:=YChaine+' de debit inevitable absolu QXdef0 a la station aval du systeme (m3/s, date aval, calcul en sens chronologique) par rapport a '
+'l''hydrogramme objectif (du aux contraintes physiques et ' +'l''hydrogramme objectif (du aux contraintes physiques et '
+'consignes de gestion aux prises et restitutions des reservoirs)'; +'consignes de gestion aux prises et restitutions des reservoirs)';
C2_ISOFREQ(YDateDebut,YDateDebut,YDateFin,YficQXdef[0,2],YChaine,1,3); C2_ISOFREQ(YDateDebut,YDateDebut,YDateFin,YficQXdef[0,2],YChaine,1,3);
{--rsultats de dfaillances de dbit invitables --} {--rsultats de dfaillances de dbit invitables --}
assign(YFicResult4,YRepR+YNomFicResDef+'1B'+YExIsofreq); assign(YFicResult4,YRepR+YNomFicResDef+'1B'+YExIsofreq);
if YTypeObjectif=0 then if YTypeObjectif=0 then
YChaine:='Manque' YChaine:='Manque'
else else
YChaine:='Exces'; YChaine:='Exces';
YChaine:=YChaine+' de debit QXdef1 a la station aval du systeme (m3/s, date aval, calcul en sens chronologique) par rapport a l''objectif ' YChaine:=YChaine+' de debit QXdef1 a la station aval du systeme (m3/s, date aval, calcul en sens chronologique) par rapport a l''objectif '
+'(du a la fois aux contraintes physiques et consignes aux prises et restitutions, et au manque de capacite des reservoir)'; +'(du a la fois aux contraintes physiques et consignes aux prises et restitutions, et au manque de capacite des reservoir)';
C2_ISOFREQ(YDateDebut,YDateDebut,YDateFin,YficQXdef[1,2],YChaine,1,3); C2_ISOFREQ(YDateDebut,YDateDebut,YDateFin,YficQXdef[1,2],YChaine,1,3);
{--message cran et stat du calcul--} {--message cran et stat du calcul--}
assign(YFicSortie, YRepR+YNomFicSortie); assign(YFicSortie, YRepR+YNomFicSortie);
append(YFicSortie); append(YFicSortie);
writeln(YFicSortie); writeln(YFicSortie);
P_EcritureSeparation; P_EcritureSeparation;
writeln(YFicSortie,'FIN DU CALCUL (LES ETAPES SUCCESSIVES SE SONT DEROULEES NORMALEMENT)'); writeln(YFicSortie,'FIN DU CALCUL (LES ETAPES SUCCESSIVES SE SONT DEROULEES NORMALEMENT)');
close(YFicSortie); close(YFicSortie);
E_Message10; E_Message10;
end {if YChoixSubProg=0}
end {fin du cas o on fait les calculs} end {fin du cas o on fait les calculs}