IniciProgramacióOctave

logo

gnu5.2-IC-v0.3 Aplicació del mètode hidrometeorològic

Aplicació del mètode hidrometeorològic per càlcul de cabals en conques. Adaptat a la instrucció espanyola de drenatge de carreteres 5.2-IC de 2016 (pdf)

#############################################################
Aplicació del mètode racional segons 5.2-IC (2016)
Pere Hernàndez i Casellas
versió 0.3
30 d'abril de 2019
GNU General Public License 3.0
http://www.gnu.org
#############################################################

Fitxers:

gnu52IC.m > fitxer de codi font
data.txt > fitxer de dades
results.txt > fitxer de resultats

El programa gnuIC52 està escrit en el llenguatge de càlcul numèric octave i ha de ser executat amb l'intèrpret GNU Octave que es pot descarregar a: https://www.gnu.org/software/octave/download.html o instal·lar directament en sistemes GNU/Linux amb el comandament:
sudo apt-get install octave

Per veure el codi font i el detall de la formulació emprada obrir el codi gnu52IC.m amb un editor de textos. Les dades d'entrada s'han d'escriure al fitxer de dades 'data.txt' tal com s'explica al mateix fitxer. A l'executar el programa, es llegeix el fitxer de dades i es genera el fitxer de resultats 'results.txt' amb un informe detallat dels resultats.

Codi font:

######################################################
# Aplicacio del metode racional segons 5.2-IC (2016)
# Pere Hernandez i Casellas
# perehc@geocities.com
# Data 20190429
# Versio 0.3
# GNU General Public License 3.0
######################################################

######################################################
# Obre fitxers
######################################################

fid = fopen ("data.txt");
fid2 = fopen ("results.txt",'w');

######################################################
# Funcions de lectura de dades. Component 2.
######################################################

function read1lines(fid)
txt = fgetl (fid); line000 = strsplit (txt);
endfunction

function read3lines(fid)
for i=1:3;
txt = fgetl (fid); line000 = strsplit (txt);
endfor;
endfunction

function read7lines(fid)
for i=1:7;
txt = fgetl (fid); line000 = strsplit (txt);
endfor;
endfunction

function nint8=readint8(fid)
txt = fgetl (fid); line000 = strsplit (txt,":");
nint8=(str2double((line000(2))));
endfunction

function double=readdouble(fid)
txt = fgetl (fid); line000 = strsplit (txt,":");
double=str2double(line000(2));
endfunction

function tchar=readchar(fid)
txt = fgetl (fid); line000 = strsplit (txt,":");
tchar=char(line000(2));
endfunction

######################################################
# Funcions de lectura de dades. Component 1.
# OPCIONAL
######################################################

function tchart=readchart(fid)
txt = fgetl (fid); line000 = strsplit (txt,":");
tchart=char(line000(1));
endfunction

######################################################
# Lectura de dades
######################################################

read7lines(fid);

Nom_projecte=readchar(fid);
Data_calcul=readchar(fid);
Nom_conca=readchar(fid);
Nom_OD=readchar(fid);
Area_conca=readdouble(fid);
Lon_llera=readdouble(fid);
Des_llera=readdouble(fid);
Per_retorn=readint8(fid);

read3lines(fid);

Pd=readdouble(fid);
I1_Id=readdouble(fid);
#IDFtc=readdouble(fid);
#IDF24=readdouble(fid);
kb=readdouble(fid);

read3lines(fid);

Poi=readdouble(fid);
betam=readdouble(fid);
delta50=readdouble(fid);
FT=readdouble(fid);
Tip_OD=readchar(fid);


######################################################
# tc = temps de concentracio (h)  (segons 2.2.2.5)
######################################################

pen_m=0.001*Des_llera/Lon_llera;

tc=0.3*realpow(Lon_llera,0.76)*realpow(pen_m,-0.19);

######################################################
# Càlcul de I(T,t)=Id*Fint (segons 2.2.2)
######################################################

# KA = factor reductor de la precipitació per àrea de la conca

if (Area_conca < 1)
  KA=1;
else
  KA=1-((log10(Area_conca))/15);
endif

# Id = intensitat mitjana de precipitació corregida mm/h

Id=Pd*KA/24;

######################################################
# Fint = max(Fa,Fb) factor d'intensitat (segons 2.2.2.4)
######################################################

# Fa = factor obtingut de l'index de torrent

Fa=realpow(I1_Id,3.5287-2.5287*realpow(tc,0.1));

# Fb = factor obtingut a partir de les corves IDF

IDFtc=realpow(I1_Id,(realpow(28,0.1)-realpow(tc,0.1))/(realpow(28,0.1)-1));
IDF24=realpow(I1_Id,(realpow(28,0.1)-realpow(24,0.1))/(realpow(28,0.1)-1));

Fb=kb*IDFtc/IDF24;

Fint=max(Fa,Fb);

ITt=Id*Fint;

######################################################
# Po = Llindar d'escorrentiu (segons 2.2.3.2)
######################################################

betaPM=betam*FT;
betaDT=(betam-delta50)*FT;

if (Tip_OD==' PM')
Po=Poi*betaPM;
else
Po=Poi*betaDT;
endif


######################################################
# Coe = coeficient d'escorrentiu (segons 2.2.3)
######################################################

if (Pd*KA > Po)
Coe=(((Pd*KA/Po)-1)*((Pd*KA/Po)+23))/realpow((Pd*KA/Po)+11,2);
else
Coe=0.0;
endif

######################################################
# Kt = coeficient d'uniformitat (segons 2.2.5)
######################################################

Kt=1+((realpow(tc,1.25))/(realpow(tc,1.25)+14));

######################################################
# QT = cabal màxim anual per a T (segons 2.2.1)
######################################################

QT=ITt*Coe*Area_conca*Kt/3.6;


######################################################
# Escritura de les variables (verifica correcta lectura)

######################################################

Nom_projecte;
Data_calcul;
Nom_conca;
Nom_OD;
Area_conca;
Lon_llera;
Des_llera;
Per_retorn;

Pd;
I1_Id;
IDFtc;
IDF24;
kb;

Poi;
betam;
delta50;
FT;
Tip_OD;

pen_m;
tc;

KA;
Id;

Fa;
Fb;
Fint;
ITt;

betaPM;
betaDT;
Po;

Coe;
Kt;

QT;

######################################################
# Escriptura del fitxer de resultats
######################################################

fprintf(fid2,"######################################################\n");
fprintf(fid2,"gnu5.2-IC \n");
fprintf(fid2,"Aplicacio del metode racional segons 5.2-IC (2016)\n");
fprintf(fid2,"######################################################\n");

fprintf(fid2,"\n")
fprintf(fid2,"1. Dades generals:\n")
fprintf(fid2,"Projecte: %s\n",Nom_projecte);
fprintf(fid2,"Data del calcul: %s\n",Data_calcul);
fprintf(fid2,"Nom de la conca: %s\n",Nom_conca);
fprintf(fid2,"Nom de la OD: %s\n",Nom_OD);

fprintf(fid2,"\n")
fprintf(fid2,"2. Dades geometriques:\n")
fprintf(fid2,"Area de la conca %6.3f km2 \n",Area_conca);
fprintf(fid2,"Longitud de la llera %5.3f km \n",Lon_llera);
fprintf(fid2,"Desnivell mig de la llera %4.0f m \n",Des_llera);
fprintf(fid2,"Periode de retorn %5.0f anys \n",Per_retorn);
fprintf(fid2,"Pendent mig de la llera %5.3f \n",pen_m);

fprintf(fid2,"\n")
fprintf(fid2,"3. Temps de concentracio: \n")
fprintf(fid2,"tc Temps de concentracio %4.2f hores\n",tc);

fprintf(fid2,"\n")
fprintf(fid2,"4. Intensitat de precipitacio corregida: \n")
fprintf(fid2,"Pd precipitacio diaria corresponent a T %7.2f mm \n",Pd);
fprintf(fid2,"KA factor reductor de precipitacio %5.3f \n",KA);
fprintf(fid2,"Id=Pd*KA/24 intensitat mitjana de precipitacio corregida %5.1f mm \n", Id);

fprintf(fid2,"\n")
fprintf(fid2,"5. Intensitat de precipitacio per a T i tc: \n")
fprintf(fid2,"I1/Id index d'aiguat %4.1f \n", I1_Id);
fprintf(fid2,"Fa factor depenent de corves IDF %5.2f \n", Fa);
fprintf(fid2,"Fb factor depenent de corves IDF %5.2f \n", Fb);
fprintf(fid2,"IDF(T,tc) %5.2f \n", IDFtc);
fprintf(fid2,"IDF(T,24) %5.2f \n", IDF24);
fprintf(fid2,"Fint=max(Fa,Fb) %5.2f \n", Fint);
fprintf(fid2,"I(T,tc)=Id*Fint intensitat de precipitacio %5.1f mm/h \n", ITt);

fprintf(fid2,"\n")
fprintf(fid2,"6. Llindar d'escorrentiu corregit: \n")
fprintf(fid2,"betam %4.2f \n", betam);
fprintf(fid2,"betaPM %4.2f \n", betaPM);
fprintf(fid2,"betaDT %4.2f \n", betaDT);
fprintf(fid2,"Poi llindar d'escorrentiu inicial %5.2f \n", Poi);
fprintf(fid2,"Po llindar d'escorrentiu %5.2f \n", Po);

fprintf(fid2,"\n")
fprintf(fid2,"7. Aplicacio de la formula racional: \n");
fprintf(fid2,"QT=I(T,tc)*C*A*Kt/3.6 \n");
fprintf(fid2,"C coeficient d'escorrentiu %5.3f \n", Coe);
fprintf(fid2,"Kt coeficient d'uniformitat  %5.3f \n", Kt);
fprintf(fid2,"QT cabal maxim anual per a T  %6.2f m3/s \n", QT);


######################################################
# Tancament de fitxers
######################################################

fclose (fid);
fclose (fid2);