PROGRAM VGEST; {--JC Bader, nov 2016--} uses Utilit,Interfas,DECLARA,ECRAN,PARAM,CALCULS1,CALCULS2,CALCULS3,CALCULS4; {--------------------------------------------------------------------------} {-Effacement des fichiers texte de r‚sultats pr‚c‚dents et incr‚mentation--} {-du rang de calcul. --} {--------------------------------------------------------------------------} procedure Ici_Effacement; begin 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+YNomFicResult4); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicResult5[1]); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicResult5[2]); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicResChr1); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicResChr2); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicQuant); rewrite(YFitext); close(YFitext); for YRangLac:=1 to YNmaxLacs do begin str(YRanglac,YNum); assign(YFitext,YRepR+YNomFicResultVobj+YNum+YExIsofreq); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicResultVop+YNum+YExIsofreq); rewrite(YFitext); close(YFitext); end; assign(YFitext,YRepR+YNomFicResDef+'0B'+YExIsofreq); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicResDef+'1B'+YExIsofreq); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicResultM+'A'+YExIsofreq); rewrite(YFitext); close(YFitext); assign(YFitext,YRepR+YNomFicResultM+'B'+YExIsofreq); rewrite(YFitext); close(YFitext); assign(YFitext,YNomFicRangCal); {$i-} {d‚sactive le contr“le des entr‚es-sorties} 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+} {active le contr“le des entr‚es-sorties} end; {------------------------------------------------------------------------} {--OUVERTURE DU FICHIER DES SORTIES d‚crivant les paramŠtres du calcul --} {--et donnant certaines statistiques sur les r‚sultats obtenus. --} {--PremiŠres ‚critures sur ce fichier. --} {------------------------------------------------------------------------} Procedure Ici_Ecriture_EnTete_CondStat; begin assign(YFicSortie,YRepR+YNomFicSortie); rewrite(YFicSortie); writeln(YFicSortie,'Rang du calcul : ',YCompteur); B_Datation(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,'# mode de repartition entre les reservoirs du debit a stocker pour satisfaire l''objectif aval'); 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 la repartition des debits a stocker : '); writeln(YFicSortie,'# possibilites de satisfaction de l''objectif'); writeln(YFicSortie,'# valeurs optimales de debits stockes, preleves et restitues'); writeln(YFicSortie); writeln(YFicSortie); writeln(yFicSortie,'==================================='); writeln(YFicSortie,'! RESUME DES CONDITIONS DU CALCUL !'); writeln(yFicSortie,'==================================='); writeln(YFicSortie); end; {--------------------------------------------------------------------------} {--Si saisie clavier, CHOIX DU TYPE D'OBJECTIF : DEBIT MIN OU MAX A --} {--RESPECTER. --} {--Description de l'hyrogramme objectif et de son type dans le fichier --} {--des paramŠtres et options du calcul. --} {--------------------------------------------------------------------------} Procedure Ici_ChoixTypeObjectif; begin if YSaisie then E_Saisie2; write(YFicSortie,'Hydrogramme objectif (debit QXobj) 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((YNbQXobj-1)/4)+1 do begin write(YFicSortie,'date : '); for Yj:=(Yi-1)*4+1 to B_minin(4*Yi,YNbQXObj-1) do write(YFicSortie,' ',B_DateClaire(2001,YDateObj[Yj])); writeln(YFicSortie); write(YFicSortie,'debit : '); for Yj:=(Yi-1)*4+1 to B_minin(4*Yi,YNbQXObj-1) do write(YFicSortie,' ',YDebitObj[Yj]:14); writeln(YFicSortie); writeln(YFicSortie); end; writeln(YFicSortie); flush(YFicSortie) end; {-------------------------------------------------------------------} {--OUVERTURE DU FICHIER TEXTE DE DEBITS NATURELS SYNCHRONISES, et --} {--‚criture d'en-tˆte sur ce fichier --} {-------------------------------------------------------------------} Procedure Ici_EcritureEntete_QSynchro; begin assign(YFicResult2,YRepR+YNomFicResult2); rewrite(YFicResult2); writeln(YFicResult2,'Rang du calcul : ',YCompteur,' ; ',YResume); B_Datation(YFicResult2); writeln(YFicResult2); writeln(YFicResult2,'Debits naturels synchronises a la station aval et aux points de prise et de restitution des reservoirs'); writeln(YFicResult2,'Les valeurs donnees 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 (lieu de l''objectif)'); writeln(YFicResult2,'# code : 1 si debits sans lacune et 0 sinon'); writeln(YFicResult2,'# QXnat : debit naturel a la station aval, a 12h (date aval)'); writeln(YFicResult2,'# QXobj : 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); write(YFicResult2,' 0.50000 '); for YRanglac:=1 to YNbLacs do write(YFicResult2,' ',YDecalDateQ[YRanglac]:8:5, ' '); writeln(YFicResult2); write(YFicResult2,' date aval code QXnat QXobj '); for YRangLac:=1 to YNbLacs do write(YFicResult2,'date amont',YRangLac, ' QMnat',YRanglac, ' QVnat',YRanglac,' '); writeln(YFicResult2); end; {---------------------------------------------------------------------} {--‚criture d'en-tˆte sur fichier texte de r‚sultats des chroniques --} {--de volume --} {---------------------------------------------------------------------} Procedure Ici_EcritureEntete_Volumes; begin assign(YFicResult4,YRepR+YNomFicResult4); rewrite(YFicResult4); writeln(YFicResult4,'Rang du calcul : ',YCompteur,' ; ',Yresume); B_Datation(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 aval : date T a laquelle on vise l''objectif de debit a la station situee a l''aval du systeme'); writeln(YFicResult4,'# date(i) : date aval diminuee du temps de propagation entre le point de ', 'restitution du reservoir de rang i et la station aval du systeme, plus 12 heures (= T-D(i)+0.5)'); write(YFicResult4,'# Vobj(i) : '); if YTypeObjectif=0 then writeln(YFicResult4,'plus petit volume d''eau present dans le reservoir i, 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(YFicResult4,'plus grand volume d''eau present dans le reservoir i, 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)'); write(YFicResult4,'# Vges(i) : '); if YTypeObjectif=0 then writeln(YFicResult4,'plus grand volume d''eau pouvant etre present dans le reservoir i, 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(YFicResult4,'plus petit volume d''eau pouvant etre present dans le reservoir i, 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)'); write(YFicResult4,'# Vop(i) : '); if YTypeObjectif=0 then writeln(YFicResult4,'plus petit volume d''eau present dans le reservoir i, compatible avec la meilleure satisfaction possible de l''objectif aval,', ' passee (premiere priorite) et future (seconde priorite) : Vop = min(Vobj ; Vges)') else writeln(YFicResult4,'plus grand volume d''eau present dans le reservoir i, compatible avec la meilleure satisfaction possible de l''objectif aval,', ' passee (premiere priorite) et future (seconde priorite) : Vop = max(Vobj ; Vges)'); writeln(YFicResult4); write(YFicResult4,' 0.50000 '); for YRangLac:=1 to YNbLacs do write(YFicResult4,' ',YDecalDateQ[YRangLac]:11:8, ' ', ' '); writeln(YFicResult4); write(YFicResult4,' date aval '); if YAbsRel=1 then for YRangLac:=1 to YNbLacs do write(YFicResult4,' date',YRanglac,' Vobj',YRangLac,'(m3)', ' Vobj',YRangLac,'(m3) a 24H ', ' Vges',YRangLac,'(m3) ',' Vop',YRangLac,'(m3) ') else for YRangLac:=1 to YNbLacs do write(YFicResult4,' date',YRanglac,' Vobj',YRangLac,'/Vtot',YRangLac, ' Vobj',YRangLac,'/Vtot',YRangLac,'(24H) ', ' Vges',YRangLac,'/VTot',YRangLac,' ',' Vop',YRangLac,'/Vtot',YRangLac,' '); writeln(YFicResult4); end; {-----------------------------------------------------------------------} {Ecriture sur fichier texte de r‚sultats concernant les d‚faillances de } {gestion (volumes manquants Vdef dans les r‚servoirs et d‚faut de d‚bit } {… la station objectif aval) pour une exploitation visant … optimiser la} {r‚partition des taches entre r‚servoirs } {-----------------------------------------------------------------------} procedure Ici_EditionBilan; const XNul : double = 0; var Xi : integer; Xj : integer; XQXdef : array[1..2,1..2] of double; nbEof : integer; begin assign(YFicResult4,YRepR+YNomFicResult6); rewrite(YFicResult4); writeln(YFicResult4,'Rang du calcul : ',YCompteur,' ',Yresume); B_Datation(YFicResult4); writeln(YFicResult4); writeln(YFicResult4,YNbLacs,' (nombre de reservoirs)'); writeln(YFicResult4); writeln(YFicResult4,YOptionRepart,' (cle de repartition des stockages entre reservoirs : 1 = figee ; autre = variable)'); writeln(YFicResult4); writeln(YficResult4,YtypeObjectif,' (type d''objectif : 0 = maintien du debit ', 'au dessus de Qmin ; autre = maintien du debit ', 'en dessous de Qmax)'); writeln(YficResult4); for YRanglac:=1 to YNbLacs do write(YFicResult4,YVtot[YRangLac],' '); writeln(YFicResult4,YVtotCumul,' (volumes exploitables reels Vtot et leur somme (m3))'); if YOptionRepart=1 then begin for YRanglac:=1 to YNbLacs do write(YFicResult4,YVRtot[YRangLac],' '); writeln(YFicResult4,YVRtotCumul,' (volumes exploitables fictifs VRtot et leur somme)'); for YRanglac:=1 to YNbLacs do write(YFicResult4,YPartTheorique[YRangLac],' '); writeln(YFicResult4, ' (repartition theorique des taches)'); for YRanglac:=1 to YNbLacs do write(YFicResult4,YPart[YRangLac],' '); writeln(YFicResult4, ' (repartition des taches apres reglage)'); for YRanglac:=1 to YNblacs do write(YFicResult4,YReglage[Yranglac],' '); writeln(YFicResult4,' (coefficients de reglage)'); end else begin writeln(yFicResult4); writeln(YFicResult4); writeln(yFicResult4); writeln(yFicResult4); end; writeln(YFicResult4); writeln(yFicResult4,'---------------------------------------------------------------------------'); writeln(yFicResult4); writeln(YFicResult4,'Valeurs relatives moyennes du volume d''eau present dans chaque reservoir sur la periode de calcul '); for YRangLac:=1 to YNblacs do write(YFicResult4,YVobjMoyRel[1,YRangLac],' '); writeln(YFicResult4,' (sens chronologique inverse : Vobj(24H)/Vtot)'); for YRangLac:=1 to YNblacs do write(YFicResult4,YVobjMoyRel[2,YRangLac],' '); writeln(YFicResult4,' (sens chronologique : Vges/Vtot)'); writeln(YFicResult4); writeln(yFicResult4,'---------------------------------------------------------------------------'); writeln(yFicResult4); writeln(YFicResult4,'taux moyens quadratiques de sollicitation des reservoirs sur la periode de calcul'); for YRangLac:=1 to YNblacs do write(YFicResult4,YSollicitation[1,YRangLac],' '); write(YFicResult4,' (sens chronologique inverse : '); if YTypeObjectif=0 then writeln(YFicResult4,'Vobj/Vtot)') else writeln(YFicResult4,'(Vtot-Vobj)/Vtot)'); for YRangLac:=1 to YNblacs do write(YFicResult4,YSollicitation[2,YRangLac],' '); write(YFicResult4,' (sens chronologique : '); if YTypeObjectif=1 then writeln(YFicResult4,'Vges/Vtot)') else writeln(YFicResult4,'(Vtot-Vges)/Vtot)'); for YRangLac:=1 to YNblacs do write(YFicResult4,(YSollicitation[2,YRangLac]+YSollicitation[1,YRangLac])/2,' '); writeln(YFicResult4,' (moyenne des taux quadratiques moyens des deux sens de calcul)'); writeln(YFicResult4); writeln(yFicResult4,'---------------------------------------------------------------------------'); writeln(yFicResult4); writeln(YFicResult4,'Valeurs maximales sur la periode de calcul, du volume manquant global Vdef rapporte a la capacite de l''ensemble des reservoirs : '); writeln(YFicResult4,YVManqueMax[1]/YVTotCumul:26:11,' (sens chronologique inverse)'); writeln(YFicResult4,YVManqueMax[2]/YVtotCumul:26:11,' (sens chronologique)'); writeln(YFicResult4); writeln(yFicResult4,'---------------------------------------------------------------------------'); writeln(yFicResult4); write(YFicResult4,'Defaillances correspondant a un '); if YTypeObjectif=0 then write(YFicResult4,'manque') else write(YFicResult4,'exces'); writeln(YFicResult4,' de debit (m3/s) par rapport a l''objectif defini a la station aval du systeme :'); writeln(YFicResult4,' QXdef0 : defaillances inevitables absolues dues aux contraintes physiques et consignes aux prises et restitutions des reservoirs'); writeln(YFicResult4,' QXdef1 : defaillances dues a la fois aux contraintes physiques et consignes aux prises et restitutions, aux volumes d''eau V presents et aux capacites Vtot des reservoirs'); writeln(YFicResult4,' QXdef2 : defaillance s''ajoutant a QXdef0, du fait des volumes d''eau V presents et des capacites Vtot des reservoirs (QXdef2=QXdef1-QXdef0)'); writeln(YFicResult4); write(YFicResult4,'Effectifs des defaillances selon differentes valeurs du code Succes (cf fichier ',YNomficSortie,'). Le code '); if YTypeObjectif=0 then write(YFicResult4,'-1') else write(YFicResult4,'1'); writeln(YFicResult4,' correspond a des defaillances qui auraient pu etre evitees avec une repartition differente du volume global present'); if YTypeObjectif=0 then begin for Xi:=-1 downto -3 do write(YFicResult4,Xi:9,' '); writeln(YFicResult4,' (code Succes)'); for Xi:=-1 downto -3 do write(YFicResult4,YNSuccesA[Xi]:9,' '); writeln(YFicResult4,' (sens chronologique inverse)'); for Xi:=-1 downto -3 do write(YFicResult4,YNSuccesB[Xi]:9,' '); writeln(YFicResult4,' (sens chronologique)'); end else begin for Xi:=1 to 4 do write(YFicResult4,Xi:9,' '); writeln(YFicResult4,' (code Succes)'); for Xi:=1 to 4 do write(YFicResult4,YNSuccesA[Xi]:9,' '); writeln(YFicResult4,' (sens chronologique inverse)'); for Xi:=1 to 4 do write(YFicResult4,YNSuccesB[Xi]:9,' '); writeln(YFicResult4,' (sens chronologique)'); end; writeln(yFicResult4); writeln(YFicResult4,'Valeur moyenne de fonction puissance ((moyenne(QXdef^N))^(1/N) avec N = ',YPuiss,') : '); writeln(YFicResult4,' QXdef2 QXdef1 QXdef0'); writeln(YFicResult4,YQXdefmoyGlop[2,1]:22,' ',YQXdefmoyGlop[1,1]:22,' ',YQXdefmoyGlop[0,1]:22,' (sens chronologique inverse)'); writeln(YFicResult4,YQXdefmoyGlop[2,2]:22,' ',YQXdefmoyGlop[1,2]:22,' ',YQXdefmoyGlop[0,2]:22,' (sens chronologique)'); writeln(YFicResult4,((YQXdefmoyGlop[2,2]+YQXdefmoyGlop[2,1])/2):22,' ',((YQXdefmoyGlop[1,2]+YQXdefmoyGlop[1,1])/2):22,' ', ((YQXdefmoyGlop[0,2]+YQXdefmoyglop[0,1])/2):22,' (moyenne des valeurs obtenues dans les deux sens de calcul)'); {--cas o— on ‚dite les valeurs tri‚es de d‚faillances de d‚bit--} if YTestCalcTri then begin for Xi:=1 to 2 do {Xi : 1 pour QXdef1 et 2 pour QXdef2} for Xj:=1 to 2 do {Xj : 1 pour sens pas chrono et 2 pour sens chrono} begin assign(YFicQXdef [Xi,Xj],YRepT+YNomFicQXdef [Xj]+YExt[Xi]); assign(YFicQXdefT[Xi,Xj],YRepT+YNomFicQXdefT[Xj]+YExt[Xi]); C4_TriChronique(YFicQXdef[Xi,Xj],YFicQXdefT[Xi,Xj],YTouComNul,YQXdefmoy[Xi,Xj],YQXdefmed[Xi,Xj],YQXdefmax[Xi,Xj],YQXdefmin[Xi,Xj],YQXdefrare[Xi,Xj],YQXdeffrequent[Xi,Xj]); end; writeln(YFicResult4); writeln(YFicResult4,'Fonctions de repartition (frequence = (n-YA)/(Effectif+YB) avec n=rang, YA=',YA,' et YB=',YB,') :'); for Xi:= 1 to 2 do begin writeln(YFicResult4,' Repartition de QXdef',Xi); 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'); for Xj:=1 to 2 do begin write(YFicResult4,' ',YQXdefmoy[Xi,Xj]:22,' ',YQXdefmax[Xi,Xj]:10:3,' '); for Yi:=1 to YNbfreq do write(YFicResult4,YQXdefrare[Xi,Xj,Yi]:10:3,' '); write(YFicResult4,YQXdefmed[Xi,Xj]:10:3,' '); for Yi:=1 to YNbfreq do write(YFicResult4,YQXdeffrequent[Xi,Xj,Yi]:10:3,' '); write(YFicResult4,YQXdefmin[Xi,Xj]:10:3); if Xj=1 then writeln(YFicResult4,' (sens chronologique inverse)') else writeln(YFicResult4,' (sens chronologique)'); end; end; writeln(YFicResult4); writeln(YFicResult4,'valeurs classees :'); for Xi:=1 to 2 do for Xj:=1 to 2 do reset(YFicQXdefT[Xi,Xj]); writeln(YFicResult4,' QXdef1 QXdef1 QXdef2 QXdef2'); writeln(YFicResult4,' (chronologie inverse) (sens chronologique) (chronologie inverse) (sens chronologique)'); nbEof:=0; while nbEof < 4 do begin nbEof:=0; for Xi:=1 to 2 do for Xj:=1 to 2 do begin if not eof(YFicQXdefT[Xi,Xj]) Then read(YFicQXdefT[Xi,Xj],XQXdef[Xi,Xj]) else begin XQXdef[Xi,Xj]:=XNul; nbEof:=nbEof+1; end; write(YFicResult4,' ',XQXdef[Xi,Xj]:22); end; writeln(YFicResult4); end; for Xi:=1 to 2 do for Xj:=1 to 2 do close(YFicQXdefT[Xi,Xj]); end; {fin du cas o— on ‚dite les valeurs tri‚es de d‚faillances de d‚bit} close(YficResult4); end; {===========================================================================} {-- PROGRAMME PRINCIPAL --} {===========================================================================} BEGIN {--CHOIX DU MODE DE PARAMETRAGE DU CALCUL, PAR SAISIE CLAVIER OU LECTURE --} {--DES PARAMETRES SUR FICHIER TEXTE (et lecture des paramŠtres pour le --} {--second cas). --} P_ChoixEntreeOptions; {--EFFACEMENT DE TOUS LES FICHIERS texte de r‚sultats pr‚c‚dants,--} {--incr‚mentation du rang du calcul --} Ici_Effacement; if Ysaisie then E_Message1; YCalculPossibl:=true; {--OUVERTURE DU FICHIER DES SORTIES (YNomFicSortie = 'Condstat') d‚crivant--} {--les paramŠtres et options du calcul et donnant certaines statistiques --} {--de r‚sultats obtenus. PremiŠres ‚critures sur ce fichier. --} Ici_Ecriture_EnTete_Condstat; {--Si saisie clavier : saisie du nom de station aval --} {--Lecture du fichier de paramŠtres de station aval --} {--Lecture des r‚glages (ne sert que pour mode de r‚partition fig‚) --} {--Si saisie clavier : saisie du rang de paramŠtres lacs --} {--si saisie clavier : saisie du rang de paramŠtres r‚seaux --} {--‚criture sur fichier de sortie et r‚sum‚ : station aval --} {--‚criture sur fichier de sortie : r‚servoirs --} P_StationAval; {--Si saisie clavier : choix de la m‚thode de r‚partition et du type--} {--d'‚dition des volumes --} if Ysaisie then E_saisie7; {--Dans le cas de l'option 5 concernant la r‚partition des objectifs --} {--entre r‚servoirs, lecture de la fr‚quence de non d‚passement --} {--souhait‚e pour les valeurs de d‚bits QMN aux droit des prises … --} {--utiliser dans les calculs d'‚quilibrage des dur‚es potentielles --} {--de remplissage. --} if YOptionRepart=5 then C2_LectureFreqNonDep; {--LECTURE DES PARAMETRES DES CONTRAINTES ET CONSIGNES, calcul des YVrtot --} {--(utiles seulement pour mode de r‚partition 1) et ‚criture des rŠgles de--} {--gestion interpr‚t‚e sur fichier de sortie, ‚criture des noms de --} {--r‚servoirs et des rangs de paramŠtres r‚servoirs et r‚seaux sur r‚sum‚,--} {--‚criture du mode de r‚partition des stockages sur fichier de sortie et --} {--r‚sum‚. --} P_ContraintesEtConsignesLacs; {--LECTURE DES PARAMETRES DE RESEAUX et ‚criture de ces paramŠtres sur --} {--fichier de sortie --} P_ParametresReseau; {--calcul des norme d'‚dition des volumes--} for YRangLac:=1 to YnbLacs do if YAbsRel=1 then YNorme[YRangLac]:=1 else YNorme[YRangLac]:=YVtot[YRangLac]; if YAbsRel=1 then YNorme[0]:=1 else YNorme[0]:=YVtotCumul; {--Si saisie clavier, choix du fichier texte des d‚bits naturels --} {--LECTURE DES DEBITS NATURELS AUX STATIONS, calcul des d‚bits correspon --} {--dants … la station aval du systŠme et aux prises et restitutions, et --} {--Ecriture de ceux-ci sur fichier texte (YNomFicResult1 = 'Qobs-P-R.txt')--} {--‚criture du nom de fichier des apports naturel sur fichier de sortie et--} {--r‚sum‚ --} if YCalculPossibl then begin C1_CalculeQPriseQrestitution; YCalculPossibl:=YGlopGlopDebit; if YCalculPossibl then P_EcritureSeparation else close(YFicSortie); end; {--Si saisie clavier, CHOIX DU FICHIER DES DEBITS OBJECIFS. --} {--Lecture des d‚bits objectifs pivots et calcul des d‚bits objectif--} {--pour chaque jour de l'ann‚e --} {--‚criture du nom de fichier d'objectif sur fichier texte et r‚sum‚--} if YCalculPossibl then begin C1_LectureObjectif; if YNbQXobj<=0 then begin YCalculPossibl:=false; close(YFicSortie); end; end; {--Si saisie clavier CHOIX DU TYPE D'OBJECTIF A RESPECTER (Qmin ou Qmax --} {--Description de l'hyrogramme objectif et de son type dans le fichier de--} {--sortie des paramŠtres et options du calcul. Description du type de --} {--l'objectif dans le resum‚ --} if YCalculPossibl then Ici_ChoixTypeObjectif; {--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); {$R+} {active le contr“le de validit‚ d'intervalle} {--REMPLISSAGE INITIAL DU TABLEAU DES DATES (YDate) ET DEBITS NATURELS, --} {--(YQ) aval, prises et restitutions, d'indices YDelaimin … Ydelaimax-1,--} {--lus dans fichier texte des d‚bits aux prises et restitutions --} for YRangDelai:=1 to 7 do readln(YFicResult1); for YRangDelai:=YDelaimin to YDelaimax-1 do {--lecture de YDate[YRangDelai] et YQ[YRangdelai]--} C1_LectureQAvalPriseRestit(YrangDelai); {--CALCUL DES DATES CRUCIALES : date associ‚e … l'indice 0 du tableau --} {--des d‚bits pour la station aval, et dates correspondantes pour les --} {--restitutions (d‚cal‚es en arriŠre selon les temps de propagation --} {--La date du d‚bit … une restitution correspond … la date du d‚bit … --} {--la station aval (affect‚e … midi), d‚cal‚e du temps de propagation.--} {--Elle est constitu‚e d'une partie entiŠre (YDateEnJour) et d'une --} {--partie fractionnaire (YDecalDateQ). --} val(copy(YDate[0],1,4),YAn,YCode); val(copy(YDate[0],5,2),YMois[0],YCode); val(copy(YDate[0],7,2),YJour[0],YCode); YDeb2.YDAteEnJour[0]:=B_Tjour(YAn,YMois[0],YJour[0]); for YrangLac:=1 to YNbLacs do begin YDeb2.YDateEnJour[YrangLac]:=trunc(YDeb2.YDateEnJour[0]+0.5-YD[YRangLac]); YDecalDateQ[YRanglac]:=frac(YDeb2.YDateEnJour[0]+0.5-YD[YRangLac]); end; {--Ouverture du fichier typ‚ temporaire d'enregistrements YDeb2 --} {--contenant l'objectif global de d‚bit … stocker (YQXsous) et les --} {--variables suivantes aux diff‚rents r‚servoirs: date (YDateEnJour), --} {--d‚bit naturel … la prise (YQMnat) et d‚bit naturel … la restitution --} {(YQVnat). --} assign(YFicDebTemp,YRepT+YNomFicDebTemp); rewrite(YFicDebTemp); {--Ouverture du fichier texte destin‚ aux d‚bits synchronis‚s, et --} {--‚criture d'en tˆte sur ce fichier --} Ici_EcritureEntete_QSynchro; {--BOUCLE SUR TOUTES LES LIGNES A LIRE dans le fichier texte des--} {--d‚bits naturels (station aval, prises et restitutions) --} YNbPbBornes:=0; for YrangLu:=YDelaimax-YDelaimin+1 to YNbEcrit do with YDeb2 do BEGIN YJJ_MM_AAAA[0]:=B_Date(YDateEnJour[0]); val(copy(YJJ_MM_AAAA[0],4,2),YMois[0],YCode); val(copy(YJJ_MM_AAAA[0],1,2),YJour[0],YCode); YQuantieme:=B_Quantieme(YJour[0],YMois[0],2001); {--LECTURE DES DEBITS NATURELS pour l'indice YDelaimax--} C1_LectureQavalPriseRestit(Ydelaimax); {--POUR CHAQUE LAC, CALCUL DES DEBITS NATURELS … la prise et … la --} {--restitution, d‚cal‚s en arriŠre par rapport au d‚bit aval d'indice--} {--nul, selon les temps de propagation entre restitution et aval. --} YQAntMin:=1e20; for YRangLac:=1 to YnbLacs do begin YQVnat[YrangLac]:=C1_Qinter(2*YrangLac,-YD[Yranglac]); YQMnat[YrangLac]:=C1_Qinter(2*YrangLac-1,-YD[Yranglac]); YQAntMin:=B_min(YQAntMin,YQVnat[YRangLac]); YQAntMin:=B_min(YQAntMin,YQMnat[YRangLac]); end; {fin du calc des Q nat. d‚cal‚s.--} {--Calcul de l'objectif de d‚bit … stocker --} if (YQAntMin>=0) and (YQ[0,0]>=0) then begin YComplet:=1; YQXsous:=YQ[0,0]-YQXobj[YQuantieme]; end else begin YComplet:=0; YQXsous:=YLacune; end; {--ECRITURE SUR FICHIER DES DEBITS SYNCHRONISES--} write(YFicResult2,B_Date(YdateEnJour[0]),' ',YComplet:4,' ',YQ[0,0]:24:15,' ',YQXObj[YQuantieme]:19:10,' '); for YRangLac:=1 to YNbLacs do write(YFicResult2,B_Date(YDateEnJour[YRangLac]),' ',YQMnat[YrangLac]:21:12,' ', YQVnat[YrangLac]:21:12,' '); writeln(YFicResult2); {--Ecriture sur fichier temporaire d'objectif de d‚bit stock‚ et des--} {--d‚bits nat, res et ref aux prises et restitutions --} write(YFicDebTemp,YDeb2); {--DECALAGE D'UN PAS DE TEMPS de toutes les valeurs dans le tableau --} {--des d‚bits 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 d‚bits naturels} {--FERMETURE DES FICHIERS texte des d‚bits naturels aux prises et --} {--restitutions, et des d‚bits synchronis‚s --} close(YFicResult1); close(YFicResult2); close(yFicDebTemp); {--RECHERCHE DE PLUS LONGUE PERIODE DE DEBITS SANS LACUNE--} reset(YFicResult2); {--Achtung : lecture d'en-tˆte} for Yi:=1 to 19 do readln(YFicResult2); readln(YFicResult2,YJJ_MM_AAAA[0],YComplet); val(copy(YJJ_MM_AAAA[0],7,4),YAn,YCode); val(copy(YJJ_MM_AAAA[0],4,2),YMois[0],YCode); val(copy(YJJ_MM_AAAA[0],1,2),YJour[0],YCode); YDeb2.YDAteEnJour[0]:=B_Tjour(YAn,YMois[0],YJour[0]); YDateInitiale:=YDeb2.YDateEnJour[0]; if YComplet=0 then begin YDernierLuGlop:=false; YDateFin:=YDeb2.YDateEnJour[0]-1; end else begin YdernierLuGlop:=true; YDateDebut:=YDeb2.YDateEnJour[0]; end; YPlusLongDuree:=0; repeat readln(YFicResult2,YJJ_MM_AAAA[0],YComplet); YDeb2.YDateEnJour[0]:=YDeb2.YdateEnJour[0]+1; if not YDernierLuGlop then begin if YComplet=1 then begin YDateDebut:=YDeb2.YdateEnJour[0]; YDernierLuGlop:=true; end end else if YComplet=0 then begin YDateFin:=YDeb2.YDateEnJour[0]-1; YdernierLuGlop:=false; if (YDateFin-YDateDebut+1)>=YPlusLongDuree then begin YPlusLongDuree:=YDateFin-YDateDebut+1; YMeilleurDebut:=YDateDebut; YMeilleurFin:=YDateFin; end; end; until eof(YFicResult2); if YDernierLuGlop then begin YDateFin:=YDeb2.YDateEnJour[0]; if (YDateFin-YDateDebut+1)>=YPlusLongDuree then begin YPlusLongDuree:=YDateFin-YDateDebut+1; YMeilleurDebut:=YDateDebut; YMeilleurFin:=YDateFin; end; end; {--CAS OU LES RESULTATS DE DEBIT DEPASSENT 3 ANS D'AFFILE SANS LACUNE. --} {--Si saisie clavier, choix de la p‚riode … analyser au sein de la plus--} {--longue p‚riode de donn‚es sans lacunes, sinon utilisation des dates --} {--lues sur fichier pour d‚finir la p‚riode d'analyse au sein de cette --} {--p‚riode sans lacune. --} {--Ecriture de la p‚riode d'analyse sur le r‚sum‚ --} if YPlusLongDuree>(3*365) then begin if YSaisie then E_Saisie6 else P_DatesLuesSurFichier; YResume:=YResume+B_Date(YDateDebut)+'-'+B_Date(YDateFin); end {--cas o— la p‚riode de r‚sultats sans lacune est trop courte} else begin YcalculPossibl:=false; if YSaisie then E_Message7; end; end; {fin du cas o— paramŠtres et donn‚es rendent les calculs possibles} {--CAS OU ON FAIT LES CALCULS--} if YCalculPossibl then begin {==CONSTITUTION D'UN FICHIER TYPE DES OBJECTIFS DE DEBIT STOCKE ET DES==} {==DEBITS NAT, RES ET REF AUX PRISES ET RESTITUTIONS, SUR LA PERIODE ==} {==CHOISIE POUR LES TRAITEMENTS ==} {--remplissage du fichier avec des lacunes--} with YDeb2 do begin YQXsous:=YLacune; for YRangLac:=1 to YNbLacs do begin YDateEnJour[YRangLac]:=0; YQMnat[YRangLac]:=YLacune; end; end; assign(YFicDeb,YRepT+YNomFicDeb); rewrite(YFicDeb); for Yi:=YDateDebut to YdateFin do write(YFicDeb,YDeb2); {--copie des enregistrements sur le fichier typ‚ ‚tendu sur toute la --} {--p‚riode, et collage sur le fichier typ‚ limit‚ … la p‚riode choisie--} {--pour les traitements. Calcul des d‚bits moyens des cours d'eau aux --} {--prises. --} for YrangLac:=1 to YNbLacs do YQMmoyen[YRanglac]:=0; reset(YFicDebTemp); seek(YFicDebTemp,YDateDebut-YDateInitiale); for Yi:=YDateDebut to YDateFin do begin read(YFicDebTemp,YDeb2); seek(YFicDeb,filepos(YFicDeb)-1); write(YFicDeb,YDeb2); seek(YFicDeb,filepos(YFicDeb)-1); if Yi>(-YDelaimin) then for YRanglac:=1 to YNbLacs do YQMmoyen[YRangLac]:=YQMmoyen[YRangLac]+YDeb2.YQMnat[YRangLac]; end; close(YFicDebTemp); close(YFicDeb); for YrangLac:=1 to YNbLacs do YQMmoyen[YRangLac]:=YQMmoyen[YRangLac]/(YDateFin-YDateDebut+1); {==ASSIGNATION DES FICHIERS TYPES DE VOLUME ET MANQUE DE CAPACITE==} for YRangLac:=1 to YNbLacs do begin str(YRangLac,Yextension); assign(YFicVobj[YRangLac],YRepT+YNomFicV+YExtension); assign(YFicVges[YRangLac],YRepT+YNomFicVges+YExtension); assign(YFicVop[YRangLac],YRepT+YNomFicVop+YExtension); end; assign(YFicVdef[1],YRepT+YNomFicVdef+'1'); assign(YFicVdef[2],YRepT+YNomFicVdef+'2'); {--Lecture des paramŠtres YA et YB de formule de fr‚quence, ainsi que--} {--des temps de retour sur fichier idoine, ou valeurs par d‚faut le --} {--cas ‚ch‚ant. --} C2_LectureParametresStat; {--Lecture du facteur puissance qui sera utilis‚ pour le calcul de la--} {--d‚faillance moyenne QXdef, ou valeur 2 par d‚faut (pour moyenne --} {--quadratique --} C2_LecturePuissanceQXdef_DecideTri; {--COEUR DU PROGRAMME : CALCULS EN SENS CHRONO INVERS PUIS EN SENS --} {--CHRONO, DE LA REPARTITION DES DEBITS A STOCKER ET DE L'EVOLUTION --} {--DU NIVEAU DANS LES RESERVOIRS --} C3_CalculChroniquesVolume; close(YFicSortie); if YChoixSubProg=0 then begin {--CALCUL DE LA PARTIE FRACTIONNAIRE DES DATES DE VOLUME, pour chaque--} {--lac. Par rapport aux dates des d‚bits aval, ces dates de volume --} {--d‚cal‚es de YdecalDateQ+0.5. A cet instant dans le programme, les --} {--volumes pr‚sents dans les fichiers typ‚s de r‚sultats (stock‚s --} {--juste avant, par C3_CalculChroniquesVolume), correspondent … ces --} {--dates fractionnaires allant de YDateDebut+0.5+YdecalDateQ+0.5 … --} {--YdateFin+0.5+YdecalDateQ+0.5. --} 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, 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-tˆte sur fichier texte de r‚sultats des chroniques --} {--de volume --} Ici_EcritureEntete_Volumes; {--ouverture des fichiers typ‚s de volume et de manque de capacit‚ pour --} {--chaque lac, et premiŠre 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 p‚riode choisie--} for Yi:=YDateDebut+1 to YDateFin+1 do begin {--‚criture sur fichier texte de date … la station aval--} write(YFicResult4,B_Date(Yi-1),' '); {--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 lin‚aire et --} {--‚criture de celui-ci sur mˆme 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 YVobjNouv[YRanglac]:=Ylacune; YVobj[YRangLac]:=YLacune; end; {--lecture de volume de gestion Vobj sur fichier typ‚--} read(YFicVges[YRangLac],YVges[YRangLac]); read(YFicVop[YRangLac],YVop[YRangLac]); YVobjMoyRel[2,YRangLac]:=YVobjMoyRel[2,YRangLac]+YVges[YRangLac]; {--‚criture sur fichier texte de la date lac, du volume Vobj … date--} {--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; {--incr‚mentation du volume … date fractionnaire--} YVobjAnt[YRanglac]:=YVobjNouv[YRangLac]; end; {fin de boucle sur les lacs--} {--passage … la ligne suivante dans le fichier texte de r‚sultats--} writeln(YFicResult4); end; {fin de boucle sur les temps} {--fermeture des fichiers typ‚s de volume et de manque de capacit‚, --} {--ainsi que du fichier texte de r‚sultats de chronique de volume --} for Yranglac:=1 to yNbLacs do begin close(YFicVobj[YRangLac]); close(YFicVges[YRanglac]); YVobjMoyRel[1,YRangLac]:=YVobjMoyRel[1,YRangLac]/(YVtot[YrangLac]*(YdateFin-YDateDebut)); YVobjMoyRel[2,YRangLac]:=YVobjMoyRel[2,YRangLac]/(YVtot[YrangLac]*(YdateFin-YDateDebut+1)); 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[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; {Ecriture sur fichier texte de r‚sultats concernant les d‚faillances de } {gestion (volumes manquants Vdef dans les r‚servoirs et d‚faut de d‚bit } {… la station objectif aval) pour une exploitation visant … optimiser la} {r‚partition des taches entre r‚servoirs } E_Message12; Ici_EditionBilan; {--message ‚cran--} E_Message9; {==EDITION DES RESULTATS CLASSES ET ISOFREQUENCE DE VOLUME ET DE ==} {==DEBIT DEFAILLANT ==} {--boucle sur les r‚servoirs--} for YrangLac:=1 to YNbLacs do begin {--calcul de la date de d‚but de s‚rie des volumes … 24h--} YDateDebutV:=YDateDebut+YDateFinLac[YRanglac]-YDateFin; {--date de fin de s‚rie des volumes … 24h : on perd une valeur par --} {--rapport … la s‚rie des volumes aux heures brutes du r‚servoir, --} {--… cause des interpolations lin‚aires --} YDateFinV:=YDateFinLac[YRangLac]-1; {--extension destin‚e au nom des fichiers texte de r‚sultats--} str(YRangLac,Yextension); {--calcul et ‚criture sur fichier texte des r‚sultats isofr‚quence --} {--des volumes limites Vobj (… 24 H) … respecter dans le r‚servoir --} assign(YFicResult4,YRepR+YNomFicResultVobj+YExtension+YExIsofreq); if YTypeObjectif=0 then begin YChaine:='Volume d''eau minimal Vobj'; if YAbsRel=1 then YChaine:=YChaine+' (m3)' else YChaine:=YChaine+'/Vtot'; YChaine:=YChaine+' en dessous duquel il ne faut pas descendre' end else begin YChaine:='Volume d''eau maximal Vobj'; 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 r‚sultats isofr‚quence --} {--des volumes limites Vop (… 24H) … respecter dans le r‚servoir --} 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)' else YChaine:=YChaine+'/Vtot'; YChaine:=YChaine+' du volume dans le reservoir '+YNomLac[YRangLac]+' (a 24h), ' +'pouvant etre produit quand on vise d''abord la meilleure satisfaction possible de ' +'l''objectif commun dans l''immediat, puis sa meilleure satisfaction possible ' +'par la suite'; C2_ISOFREQ(YdateDebutV,YDateDebutV,YDateFinV,YFicVop[YRangLac],Ychaine,YNorme[YRangLac],YAbsRel); end; {fin de boucle sur les r‚servoirs} {--calcul et ‚criture sur fichier texte des r‚sultats isofr‚quence --} {--des manques globaux de capacit‚ dans les r‚servoirs, calcul‚s en --} {--chrono inverse --} assign(YFicResult4,YRepR+YNomFicResultM+'A'+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 chronologie inverse), responsable ' +'de defaillances QXdef2 futures s''ajoutant aux inevitables absolues QXdef0 : capacite supplementaire necessaire '; if YTypeObjectif=0 then YChaine:=YChaine+'au dessus de la crete' else YChaine:=YChaine+'en dessous du fond'; if YAbsRel=1 then C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[1],YChaine,YNorme[0],1) else C2_ISOFREQ(YdateDebut,YDateDebut,YDateFin,YFicVdef[1],YChaine,YNorme[0],4); {--calcul et ‚criture sur fichier texte des r‚sultats isofr‚quence --} {--des manques globaux de capacit‚ dans les r‚servoirs, calcul‚s 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); {--r‚sultats de d‚faillances de d‚bit in‚vitables absolus (mˆme avec des--} {--capacit‚s de r‚servoirs sans limite --} assign(YFicResult4,YRepR+YNomFicResDef+'0B'+YExIsofreq); if YTypeObjectif=0 then YChaine:='Manque' else 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 ' +'l''hydrogramme objectif (du aux contraintes physiques et ' +'consignes de gestion aux prises et restitutions des reservoirs)'; C2_ISOFREQ(YDateDebut,YDateDebut,YDateFin,YficQXdef[0,2],YChaine,1,3); {--r‚sultats de d‚faillances de d‚bit in‚vitables --} assign(YFicResult4,YRepR+YNomFicResDef+'1B'+YExIsofreq); if YTypeObjectif=0 then YChaine:='Manque' else 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 ' +'(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); {--message ‚cran et stat du calcul--} assign(YFicSortie, YRepR+YNomFicSortie); append(YFicSortie); writeln(YFicSortie); P_EcritureSeparation; writeln(YFicSortie,'FIN DU CALCUL (LES ETAPES SUCCESSIVES SE SONT DEROULEES NORMALEMENT)'); close(YFicSortie); E_Message10; end {if YChoixSubProg=0} end {fin du cas o— on fait les calculs} else {cas o— les calculs n'ont pas pu ˆtre faits} if YSaisie then E_Message11; {cr‚ation du fichier marquant la fin programme} assign(YFitext,YNomFicFin); rewrite(YFitext); close(YFitext); END.