En raison du déménagement des baies serveurs, les services gitlab.irstea.fr et mattermost.irstea.fr seront interrompus le samedi 2 octobre 2021 au matin. Ils devraient revenir à la normale dans la journée.

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

feat!: Add source code v8 (2016/12/01)

parent 2f829b6e
......@@ -9,3 +9,5 @@
# Program outputs
/compteur
/*.TXT
/FiniFini
/*Optim
......@@ -16,13 +16,15 @@ At the root folder of this repository type the following command line (Adapt the
```
C:\FPC\bin\i386-win32\fpc.exe src\VGEST.PAS && move /Y src\VGEST.exe .
C:\FPC\bin\i386-win32\fpc.exe src\ENDE.PAS && move /Y src\ENDE.exe .
C:\FPC\bin\i386-win32\fpc.exe src\REGLAGE.PAS && move /Y src\REGLAGE.exe .
```
## Get started with the example
The `example` directory contains all the configuration for calculating statistics about respecting a maximum flow of 110 m<sup>3</sup>/s at Paris. These statistics are calculated from the Seine River Basin naturalised flow database between 1993/01/01 and 2009/12/31 [^Hydratec2011].
Copy the files contained in the `example` directory to the root directory and run `VGEST.exe`.
Copy the files contained in the `example` directory to the root directory and run `SURVGEST.bat`.
## Known issues
......
# Ignore everything in this directory
*
# Except this file
!.gitignore
if exist FiniFini del FiniFini
echo off
if exist PasOptim del PasOptim
if exist FinOptim del FinOptim
if exist PARAMETR\reglage.txt del PARAMETR\reglage.txt
if exist PARAMETR\OUITRI.TXT del PARAMETR\OUITRI.TXT
if exist Temporai.re\etape del Temporai.re\etape
if exist Temporai.re\result0 del Temporai.re\result0;
if exist Suivopti\suivi del Suivopti\suivi
if exist Temporai.re\dichot1 del Temporai.re\dichot1
if exist Temporai.re\dichot2 del Temporai.re\dichot2
if exist Temporai.re\dichot3 del Temporai.re\dichot3
if exist Temporai.re\dichot4 del Temporai.re\dichot4
:NouveauCalcul
REGLAGE
if exist PasOptim goto FindesCalculs
VGEST
if exist FinOptim goto FinDesCalculs
goto NouveauCalcul
:FinDesCalculs
del PARAMETR\reglage.txt
ENDE
\ No newline at end of file
UNIT CALCULS1;
{--JC Bader, Janvier 2013--}
{--JC Bader, nov 2016--}
INTERFACE
uses Crt,Interfas,Utilit,DECLARA,PARAM;
uses Crt,Utilit,Interfas,DECLARA,PARAM;
procedure LectureObjectif;
function Qinter(ZRangStat:integer; ZT:double):double;
procedure CalculeQPriseQrestitution;
procedure LectureQavalPriseRestit(ZRang:integer);
Procedure QRefRes(ZType,ZRangLac:integer; ZDateEnJour:longint; ZQMnat,ZQVVeille:double;
Procedure C1_EcritureEnteteResultDetail(ZChrono:boolean);
procedure C1_LectureObjectif;
function C1_Qinter(ZRangStat:integer; ZT:double):double;
procedure C1_CalculeQPriseQrestitution;
procedure C1_LectureQavalPriseRestit(ZRang:integer);
Procedure C1_QRefRes(ZChrono : boolean;ZType,ZRangLac:integer; ZDateEnJour:longint; ZQMnat,ZQVVeille:double;
var ZChaiDate:YChai10 ;var ZQRef,ZQRes:double);
Procedure Repartition (ZQSobj: double; ZQNV,ZQM,ZQRV,ZQFV,ZQRM,ZQFM : YTab1;
ZTypeObjectif : integer;
var ZSucces : integer;
var ZCodeStock,ZCodeAval,ZCodePrise,ZCodeRestit : YTabInt1;
var ZQS0,ZDefaillQ : double;
var ZQOV,ZQe,ZQs,ZQST,ZQSTmin,ZQSTmax : YTab1;
var ZNIter,ZTest : integer);
Procedure C1_Repartition (ZDat: longint; ZOption, ZTypeObjectif : integer;
Zchrono: boolean;
ZQXsous: double;
ZVol:Ytab1;
ZQVnat,ZQMnat : YTab1;
ZQVRes,ZQVRef,ZQMRes,ZQMRef:YTab1;
var ZSuccesRepart : integer;
var ZCodeRepart,ZCodeAval,ZCodePrise,ZCodeRestit,ZCodeSigne: YTabInt1;
var ZQST0,ZQSTt0,ZQSTt1,ZVRobj,ZVobj : double;
var ZTPot,ZPart,ZQV,ZQE,ZQS,ZQST,ZQSTmin3,ZQSTmax3 : YTab1;
var ZQEinf,ZQEsup,ZQSTmin1,ZQSTmax1,ZQSTmin2,ZQSTmax2 : YTab1;
var ZQEmin,ZQEmax,ZQSmin,ZQSmax : YTab1;
var ZQXdef : YTab3;
var ZQSTpot,ZVpot : YTab1;
var ZNIter,ZTest,ZNIterTps : integer);
IMPLEMENTATION
{============================================================================}
procedure LectureObjectif;
{===============================================================}
{--Ecriture d'en-tˆte du fichier texte des r‚sultats d‚taill‚s--}
{===============================================================}
Procedure C1_EcritureEnteteResultDetail(ZChrono:boolean);
var
Xtype : string;
XQST0 : string;
begin
if ZChrono then
assign(YFicResult2,YRepR+YNomFicResChr1)
else
assign(YFicResult2,YRepR+YNomFicResChr2);
rewrite(YFicResult2);
writeln(YFicResult2,'Rang du calcul : ',YCompteur,' ; ',YResume);
B_Datation(YFicResult2);
writeln(YFicResult2);
if ZChrono then
writeln(YFicResult2,'Detail des resultats obtenus en simulant en SENS CHRONOLOGIQUE une gestion produisant un debit le plus proche possible de l''objectif a la station aval ',
'(calcul du volume d''eau Vges present dans chaque reservoir)')
else
writeln(YFicResult2,'Detail des resultats obtenus en simulant en SENS CHRONOLOGIQUE INVERSE une gestion produisant un debit le plus proche possible de l''objectif a la station aval ',
'(calcul du volume d''eau Vobj present dans chaque reservoir)');
writeln(YFicResult2,'Les valeurs donnees en haut des colonnes de dates sont les parties ',
'fractionnaires de celles-ci (exprimees en jour).');
write(YFicResult2,'Les dates editees (correspondant au milieu de pas de temps) concernent les valeurs de debit, par',
' rapport auxquelles les valeurs de volume de debut de pas de temps sont decalees de ');
if ZChrono then
writeln(YFicResult2,'- 12h.')
else
writeln(YFicResult2,'+ 12h.');
writeln(YFicResult2);
write(YFicResult2,'Variables editees (debits en m3/s ; volumes en ');
if YAbsRel=1 then
writeln(YFicResult2,'m3) :')
else
writeln(YFicResult2,'valeurs relatives par rapport aux capacites) :');
writeln(YFicResult2);
writeln(YFicResult2,'# date aval : date T de l''objectif de debit a la station situee a l''aval du systeme (lieu de l''objectif)');
writeln(YFicResult2,'# QXsous : objectif de stockage 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 (=T-D(i))');
if ZChrono then
begin
write(YFicResult2,'# Vges : ');
if YTypeObjectif=0 then
writeln(YFicResult2,'plus grand volume d''eau pouvant etre present dans chaque reservoir (date amont - 12h), apres la meilleure satisfaction anterieure possible de l''objectif aval ',
'(un volume superieur a Vges, plus favorable a la satisfaction future, implique plus de defaillances anterieures)')
else
writeln(YFicResult2,'plus petit volume d''eau pouvant etre present dans chaque reservoir (date amont - 12h), apres la meilleure satisfaction anterieure possible de l''objectif aval ',
'(un volume inferieur a Vges, plus favorable a la satisfaction future, implique plus de defaillances anterieures)');
end
else
begin
write(YFicResult2,'# Vobj : ');
if YTypeObjectif=0 then
writeln(YFicResult2,'plus petit volume d''eau present dans chaque reservoir (date amont + 12h), permettant la meilleure satisfaction posterieure possible de l''objectif aval ',
'(un volume superieur ou egal a Vobj permet cette meilleure satisfaction possible dans le futur, mais un volume plus petit implique plus de defaillances futures)')
else
writeln(YFicResult2,'plus grand volume d''eau present dans chaque reservoir (date amont + 12h), permettant la meilleure satisfaction posterieure possible de l''objectif aval ',
'(un volume inferieur ou egal a Vobj permet cette meilleure satisfaction possible dans le futur, mais un volume plus grand implique plus de defaillances futures)');
end;
writeln(YFicResult2,'# QEmin : debitance minimale de la prise (date amont)');
writeln(YFicResult2,'# QEmax : debitance maximale de la prise (date amont)');
writeln(YFicResult2,'# QSmin : debitance minimale de la restitution (date amont)');
writeln(YFicResult2,'# QSmax : debitance maximale de la restitution (date amont)');
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 dans le cours d''eau (qu''on souhaite ne pas voir depasse) a l''aval ',
'immediat de la prise (date amont)');
writeln(YFicResult2,'# QMres : debit reserve dans le cours d''eau (qu''on souhaite voir depasse) a l''aval ',
'immediat de la prise (date amont)');
writeln(YFicResult2,'# QVref : debit de reference dans le cours d''eau a l''aval immediat de la restitution (date amont)');
writeln(YFicResult2,'# QVres : debit reserve dans le cours d''eau a l''aval immediat de la restitution (date amont)');
writeln(YFicResult2,'# QEinf : limite minimale de debit pris dans le cours d''eau, imposee par les contraintes physiques et consignes a la prise (date amont)');
writeln(YFicResult2,'# QEsup : limite maximale de debit pris dans le cours d''eau, imposee par les contraintes physiques et consignes a la prise (date amont)');
writeln(YFicResult2,'# QSTmin1 : limite minimale de debit stocke net imposee par les contraintes physiques et consignes a la prise et a la restitution (date amont)');
writeln(YFicResult2,'# QSTmax1 : limite maximale de debit stocke net imposee par les contraintes physiques et consignes a la prise et a la restitution (date amont)');
writeln(YFicResult2,'# QSTmin2 : limite minimale de debit stocke net imposee par le volume d''eau present et la capacite de reservoir (date amont)');
writeln(YFicResult2,'# QSTmax2 : limite maximale de debit stocke net imposee par le volume d''eau present et la capacite de reservoir (date amont)');
writeln(YFicResult2,'# QSTmin3 : limite minimale de debit stocke net imposee par les contraintes physiques et consignes a la prise et a la restitution',
' d''une part, et par le volume d''eau present et la capacite de reservoir d''autre part (date amont)');
writeln(YFicResult2,'# QSTmax3 : limite maximale de debit stocke net imposee par les contraintes physiques et consignes a la prise et a la restitution',
' d''une part, et par le volume d''eau present et la capacite de reservoir d''autre part (date amont)');
case YOptionRepart of
1..2: begin
write(YFicResult2,'# TPot : temps minimal de reconstitution du volume utilisable maximal, dans l''hypothese du debit moyen du cours d''eau a la prise ');
if YOptionRepart=1 then
writeln(YFicResult2,'(non gere)')
else
writeln(YFicResult2,'(date amont)');
writeln(YFicResult2,'# Part : part de l''objectif de stockage de debit assignee au reservoir (date amont)');
end;
3 : begin
write(YFicResult2,'# VRobj : objectif commun de taux de remplissage des reservoirs en fin de pas de temps (date amont ');
if ZChrono then
writeln(YFicResult2,' + 12h)')
else
writeln(YFicResult2,' - 12h)');
writeln(YFicResult2,'# QSTpot : objectif theorique de debit stocke permettant d''atteindre l''objectif VRobj de taux de remplissage (date amont)');
end;
4..5: begin
if YCodeTpot then
writeln(YFicResult2,'# Tpot1 : duree potentielle minimale de reconstitution de volume utilisable maximal, apres la fin de pas de temps (date amont)')
else
writeln(YFicResult2,'# Tpot2 : duree potentielle minimale d''epuisement du volume utilisable apres la fin de pas de temps (date amont)');
write(YFicResult2,'# Vpot : objectif theorique de volume en fin de pas de temps, equilibrant les durees Tpot');
if YCodeTpot then
write(YFicResult2,'1 (date amont ')
else
write(YFicResult2,'2 (date amont ');
if ZChrono then
writeln(YFicResult2,'+ 12h)')
else
writeln(YFicResult2,'- 12h)');
writeln(YFicResult2,'# QSTpot : objectif theorique de debit stocke donnant le volume Vpot en fin de pas de temps (date amont)');
end;
end;
writeln(YFicResult2,'# QST : debit stocke net dans le reservoir (date amont)');
writeln(YFicResult2,'# QV : debit du cours d''eau influence par le reservoir, a l''aval immediat de la restitution (date amont)');
writeln(YFicResult2,'# QE : debit pris par le reservoir dans le cours d''eau (date amont)');
writeln(YFicResult2,'# QS : debit restitue par le reservoir dans le cours d''eau (date amont)');
writeln(YFicResult2,'# A, B, C, D et E : codes definis dans le fichier ',YNomFicSortie);
if ZChrono then
begin
writeln(YFicResult2,'# VTges : somme (date aval - 12h) des volumes d''eau presents dans les reservoirs (dates amont - 12h)');
writeln(YFicResult2,'# VTges0 : somme (date aval - 12h) des volumes d''eau presents dans les reservoirs (dates amont - 12h), supposes sans limites de capacite pouvant causer des defaillances');
end
else
begin
writeln(YFicResult2,'# VTobj : somme (date aval + 12h) des volumes d''eau presents dans les reservoirs (dates amont + 12h)');
writeln(YFicResult2,'# VTobj0 : somme (date aval + 12h) des volumes d''eau presents dans les reservoirs (dates amont + 12h), supposes sans limites de capacite pouvant causer des defaillances');
end;
write(YFicResult2,'# Vdef : manque global (date aval ');
if ZChrono then
write(YFicResult2,'- 12h) de volume ')
else
write(YFicResult2,'+ 12h) de volume ');
if (ZChrono and (YTypeObjectif=1)) or ((not ZChrono) and (YTypeObjectif=0)) then
write(YFicResult2,'d''eau')
else
write(YFicResult2,'de vide');
write(YFicResult2,' present en debut de pas de temps dans les reservoirs (dates amont ');
if ZChrono then
write(YFicResult2,'- 12h), responsable de defaillances QXdef2 ')
else
write(yFicResult2,'+ 12h), responsable de defaillances QXdef2 ');
if ZChrono then
writeln(YFicResult2,'anterieures')
else
writeln(YFicResult2,'posterieures');
case YOptionrepart of
1..2: begin
XQST0:='QST0a';
writeln(YFicResult2,'# ',XQST0,' : norme du debit stocke reparti entre les reservoirs au meilleur ',
'prorata possible de leurs parts assignees respectives (dates amont)');
end;
3..5: begin
XQST0:='QST0b';
writeln(YFicResult2,'# ',XQST0,' : decalage applique a chaque debit stocke theorique QSTpot pour obtenir des debits QST respectant les limites locales QSTmin3 et QSTmax3 (dates amont)');
end;
end;
if YTypeObjectif=0 then
XType:='manque'
else
XType:='exces';
writeln(YFicResult2,'# QXdef0 : ',Xtype,' inevitable absolu de debit par rapport a l''objectif a la station aval du systeme, du seul fait des contraintes ',
'physiques et des consignes aux prises et restitutions des reservoirs (date aval)');
writeln(YFicResult2,'# QXdef1 : ',Xtype,' de debit par rapport a l''objectif a la station aval du systeme, du fait des contraintes ',
'physiques et des consignes aux prises et restitutions des reservoirs, ainsi que des volumes presents et des ',
'capacites des reservoirs (date aval)');
writeln(YFicResult2,'# QXdef2 : ',Xtype,' de debit par rapport a l''objectif a la station aval du systeme, du seul fait des volumes presents',
' et des capacites des reservoirs (date aval)');
writeln(YFicResult2,'# Succes : code defini dans le fichier ',YNomFicSortie);
writeln(YFicResult2,'# Iter : nombre d''iterations effectuees pour calculer ',XQST0,' par encadrements successifs');
writeln(YFicResult2,'# Test : egal a 1 si le debit total stocke croit comme il se doit avec ',XQST0,' dans le calcul ',
'iteratif de ce dernier');
if YOptionRepart=5 then
writeln(YFicResult2,'# IterTps : nombre d''iterations pour uniformiser les temps de remplissage potentiels en fin de pas de temps')
else
writeln(YFicResult2);
writeln(YFicResult2);
write(YFicResult2,' 0.50000 ');
for YRanglac:=1 to YNbLacs do
begin
write(YFicResult2,' ',YDecalDateQ[YRanglac]:8:5,
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ');
if (YOptionRepart=4) or (YOptionRepart=5) then
write(YFicResult2,' ');
end;
writeln(YFicResult2);
write(YFicResult2,' date aval QXsous');
for YRangLac:=1 to YNbLacs do
begin
write(YFicResult2,' date amont[',YRangLac,']');
if ZChrono then
if YAbsRel=1 then
write(YFicResult2,' Vges[',YRanglac,']')
else
write(YFicResult2,' Vges[',YRanglac,']/Vtot[',YRangLac,']')
else
if YAbsRel=1 then
write(YFicResult2,' Vobj[',YRangLac,']')
else
write(YFicResult2,' Vobj[',YRangLac,']/Vtot[',YRangLac,']');
write(YFicResult2,' QEmin[',YRanglac,']',
' QEmax[',YRanglac,']',
' QSmin[',YRanglac,']',
' QSmax[',YRanglac,']',
' QMnat[',YRanglac,']',
' QVnat[',YRanglac,']',
' QMref[',YRanglac,']',
' QMres[',YRanglac,']',
' QVref[',YRanglac,']',
' QVres[',YRanglac,']',
' QEinf[',YRanglac,']',
' QEsup[',YRanglac,']',
' QSTmin1[',YRanglac,']',
' QSTmax1[',YRanglac,']',
' QSTmin2[',YRanglac,']',
' QSTmax2[',YRanglac,']',
' QSTmin3[',YRanglac,']',
' QSTmax3[',YRanglac,']');
case YOptionRepart of
1..2: write(YFicResult2,' TPot[',YRanglac,']',
' Part[',YrangLac,']');
3 : write(YFicResult2,' VRobj',
' QSTpot[',YrangLac,']');
4..5: begin
write(YFicResult2,' TPot');
if YCodeTpot then
write(YFicResult2,'1')
else
write(YFicResult2,'2');
write(YFicResult2,'[',YRanglac,']');
if YAbsRel=1 then
write(YFicResult2,' Vpot[',YrangLac,']')
else
write(YFicResult2,' Vpot[',YrangLac,']/Vtot[',YRangLac,']');
write(YficResult2,' QSTpot[',YrangLac,']')
end;
end;
write(YFicResult2,' QST[',YRangLac,']',
' QV[',YRanglac,']',
' QE[',YRanglac,']',
' QS[',YRanglac,']',
' A[',YRanglac,']',' B[',YRanglac,']',
' C[',YRanglac,']',' D[',YRanglac,']',
' E[',YRangLac,']');
end;
if YAbsRel=1 then
begin
if ZChrono then
write(YFicResult2,' VTges',
' VTges0')
else
write(YFicResult2,' VTobj',
' VTobj0');
write(YFicResult2, ' Vdef');
end
else
begin
if ZChrono then
write(YFicResult2,' VTges/somme(Vtot)',
' VTges0/somme(Vtot)')
else
write(YFicResult2,' VTobj/somme(Vtot)',
' VTobj0/somme(Vtot)');
write(YFicResult2, ' Vdef/somme(Vtot)');
end;
write(YFicResult2,' ',XQST0);
write(YFicResult2,' QXdef0');
write(YFicResult2,' QXdef1 QXdef2',
' Succes Iter Test');
if YOptionRepart=5 then
write(YFicResult2,' IterTps');
writeln(YFicResult2);
end; {fin de C1_EcritureEnteteResultDetail}
{===================================================================}
{--Lecture de l'hydrogramme objectif annuel vis‚ … la station aval--}
{===================================================================}
procedure C1_LectureObjectif;
var
XCode : integer;
......@@ -35,19 +343,20 @@ procedure LectureObjectif;
XQ : double;
XChai : string;
XFitext : text;
Xi : integer;
begin
if YSaisie then
begin
writeln;
aquest;
a_quest;
write('nom du fichier de d‚bit objectif (station aval) ? ');
Alecture_xy;
A_lecture_xy;
end;
YNbQobj:=0;
YNbQXobj:=0;
repeat
if YSaisie then
AReponse(YNomFicObjectif,29);
A_Reponse(YNomFicObjectif,29);
{$i-}
assign(XFitext,YRepO+YNomFicObjectif);
reset(XFiText);
......@@ -58,7 +367,7 @@ procedure LectureObjectif;
begin
YDateObj[0]:=0;
while not eof(XFitext) and (YDateObj[YNbQobj]<365) do
while not eof(XFitext) and (YDateObj[YNbQXobj]<365) do
begin
readln(XFitext,XChai);
val(copy(XChai,1,2),XJour,Xcode);
......@@ -69,32 +378,32 @@ procedure LectureObjectif;
begin
val(copy(XChai,6,length(XChai)-5),XQ,XCode);
if XCode=0 then
if (XMois>0) and (XMois<13) and (XJour>0) and (XJour<=AlongMois(2001,XMois)) and (XQ>=0) then
if (XMois>0) and (XMois<13) and (XJour>0) and (XJour<=B_longMois(2001,XMois)) and (XQ>=0) then
begin
XNouvelleDate:= AQuantieme(XJour,XMois,2001);
if XNouvelleDate>YDateObj[YNbQobj] then
XNouvelleDate:= B_Quantieme(XJour,XMois,2001);
if XNouvelleDate>YDateObj[YNbQXobj] then
begin
YNbQobj:=YNbQobj+1;
YDateObj[YNbQobj]:=XNouvelleDate;
YDebitObj[YNbQobj]:=XQ;
YNbQXobj:=YNbQXobj+1;
YDateObj[YNbQXobj]:=XNouvelleDate;
YDebitObj[YNbQXobj]:=XQ;
end {fin du cas o— date croissante}
end; {fin du cas o— date et d‚bits valides}
end; {fin du cas o— mois bien lu}
end; {fin du cas o— jour bien lu}
end; {fin du cas o— fichier non entiŠrement lu et derniŠre date < 365}
if YNbQobj>0 then
if YNbQXobj>0 then
begin
YResume:=YResume+'objectif = '+YNomFicObjectif;
YDateObj[0]:=YDateObj[YNbQobj]-365;
YDebitObj[0]:=YDebitObj[YNbQobj];
YNbQobj:=YNbQobj+1;
YDateObj[YNbQobj]:=365+YDateObj[1];
YDebitObj[YNbQobj]:=YDebitObj[1];
YDateObj[0]:=YDateObj[YNbQXobj]-365;
YDebitObj[0]:=YDebitObj[YNbQXobj];
YNbQXobj:=YNbQXobj+1;
YDateObj[YNbQXobj]:=365+YDateObj[1];
YDebitObj[YNbQXobj]:=YDebitObj[1];
XPivot:=1;
for XQuantieme:=1 to 365 do
begin
YQObj[XQuantieme]:=YDebitObj[XPivot-1]+(XQuantieme-YDateObj[Xpivot-1])
YQXobj[XQuantieme]:=YDebitObj[XPivot-1]+(XQuantieme-YDateObj[Xpivot-1])
/(YDateObj[XPivot]-YDateObj[XPivot-1])*(YDebitObj[XPivot]-YDebitObj[XPivot-1]);
if XQuantieme=YDateObj[Xpivot] then
XPivot:=XPivot+1
......@@ -103,12 +412,17 @@ procedure LectureObjectif;
else
if YSaisie then
begin
AWindow(1,Ay+2,80,Ay+5);
ATexte;
A_Texte;
writeln;
write('ATTENTION : ce fichier ne contient aucun triplet jour/mois d‚bit correct.');
ATapez;
clrscr;
AWindow1;
A_Tapez;
Ay:=Ay+B_minIn(0,ALignemax-Ay-4);
for Xi:=2 to 5 do
begin
gotoxy(1,Ay+Xi);
clreol;
end;
A_Window1;
end;
close(XFiText);
......@@ -119,41 +433,47 @@ procedure LectureObjectif;
begin
if YSaisie then
begin
AWindow(1,Ay+2,80,Ay+5);
ATexte;
A_Texte;
writeln;
if YNomFicObjectif<>'' then
begin
write('ATTENTION : ce fichier est impossible a ouvrir.');
ATapez;
clrscr;
A_Tapez;
Ay:=Ay+B_minIn(0,ALignemax-Ay-4);
for Xi:=2 to 5 do
begin
gotoxy(1,Ay+Xi);
clreol;
end;
end
else
begin
write('ABANDON du calcul');
ATapez;
A_Tapez;
end;
AWindow1
A_Window1
end;
end; {fin du cas o— : nom de fichier vide ou fichier imposssible … ouvrir}
until (YNbQobj>0) or (YNomFicObjectif='') or (not YSaisie);
until (YNbQXobj>0) or (YNomFicObjectif='') or (not YSaisie);
writeln(YFicSortie,'Nom du fichier decrivant l''hydrogramme objectif a la station aval du systeme : ',YNomFicObjectif);
writeln(YFicSortie,'Nom du fichier decrivant l''hydrogramme objectif a la station aval du systeme : ',YRepO,YNomFicObjectif);
writeln(YFicSortie);
if YnomFicObjectif='' then
writeln(YFicSortie,'aucun nom de fichier saisi. Abandon du calcul.')
else
if YNbQobj=0 then
if YNbQXobj=0 then
writeln(YFicSortie,'aucun couple date/debit lu dans le fichier pour definir l''objectif. Abandon du calcul');
end;
flush(YFicSortie);
end; {fin de C1_LectureObjectif}
{==========================================================================}
{--Calcul pour la station de rang ZRangStat du d‚bit au temps ZT, par --}
{--interpolation lin‚aire … partir du tableau YQ --}
{==========================================================================}
function Qinter(ZRangStat:integer; ZT:double):double;
function C1_Qinter(ZRangStat:integer; ZT:double):double;
var
X_Rangsup : integer;
......@@ -163,12 +483,12 @@ function Qinter(ZRangStat:integer; ZT:double):double;
BEGIN
if ZT>=0 then
begin
X_RangInf:=AminIn(YDelaimax-1,trunc(ZT));
X_RangInf:=B_minIn(YDelaimax-1,trunc(ZT));
X_RangSup:=X_RangInf+1;
end
else
begin
X_RangSup:=AmaxIn(YDelaiMin+1,trunc(Zt));
X_RangSup:=B_maxIn(YDelaiMin+1,trunc(Zt));
X_RangInf:=X_RangSup-1;
end;
if (YQ[ZRangStat,X_RangInf]>=0) and (YQ[ZRangStat,X_RangSup]>=0) then
......@@ -178,18 +498,17 @@ function Qinter(ZRangStat:integer; ZT:double):double;
X_Interpopol:=YLacune;
YLacuneDebit:=true;
end;
Qinter:=X_Interpopol
END;
C1_Qinter:=X_Interpopol
END; {fin de C1_Qinter}
{============================================================================}
{--Calcul des dbits naturels au droit des prises et restitutions, partir--}
{--du fichier des dbits de base aux diffrentes stations. Les dbits --}
{--calculs sont directement stocks sur le fichier (nom YNomFicResult1 --}
{--dfini en constante) --}
{============================================================================}
{========================================================================}
{--Calcul des d‚bits naturels au droit des prises et restitutions, … --}
{--partir du fichier des d‚bits de base aux diff‚rentes stations. Les --}
{--d‚bits calcul‚s sont directement stock‚s sur fichier texte --}
{--(YNomFicResult1 = 'Qobs-P-R.txt') --}
{========================================================================}
procedure CalculeQPriseQrestitution;
procedure C1_CalculeQPriseQrestitution;
var
XCode : integer;
......@@ -222,64 +541,66 @@ procedure CalculeQPriseQrestitution;
XQM : array[1..2] of double;
XQV : array[1..2] of double;