Sei sulla pagina 1di 5

// UNIVERSITA' DEGLI STUDI DI TRIESTE

// DIPARTIMENTO DI INGEGNERIA CIVILE E AMBIENTALE


// CORSO DI IDRAULICA II - prof. Gianni PEDRIZZETTI
// ANNO ACCADEMICO 2006/2007

// ANALISI DEL FLUSSO AL DI SOTTO DI UNA TRAVERSA FLUVIALE


// METODO ITERATIVO DI JACOBI

// Studente: Paolo MARTINIS

function [H,U,V,x,y,yta,uta,xF,F]=GWFJAC(I)

// 1. DATI DI INPUT
// lettura caratteristiche geometriche
// prova: I=[10;5;2;.5;4;10;2;.02;1e-4;1e5]
l=I(1); // lunghezza traversa
h1=I(2); // livello monte
h2=I(3); // livello valle
s=I(4); // spessore taglione
pt=I(5); // profondit taglione
pi=I(6); // profondit strato impermeabile
b=I(7); // moltiplicatore di l per larghezza di indagine
K=I(8); // permeabilit del terreno
epsilon=I(9); //errore ammissibile
imax=I(10); //iterazioni massime
// definizione rapporti
f=l/s; // rapporto lunghezze direzione x
a=pi/pt; // rapporto lunghezze direzione y
if a==0 then,a=b,end; // campo indagine in assenza di fondo impermeabile
t1=getdate()

// 2. DEFINIZIONE DOMINIO
// definizione incrementi Dx e Dy
Dx=s/2;
Dy=Dx;
// definizione numero intervalli
n=(a*pt)/Dy;
m=((2*b+1)*l)/Dx;
fx=l/Dx;
fy=pt/Dy;
// definizione vettori x e y
x=[0:Dx:m*Dx];
y=[0:Dy:n*Dy];
// definizione punti noti
jA=b*fx+1;
jB=((b+1)*fx+1)-s/Dx;
jD=(b+1)*fx+1;
jE=(2*b+1)*fx+1;
iC=fy+1;
iF=a*fy+1;
// inizializzazione matrice
H=zeros(n+1,m+1);

// 3. CONDIZIONI AL CONTORNO
// condizioni di Dirichlet
for j=1:jA H(1,j)=h1; end;
for j=jD:jE H(1,j)=h2; end;
for i=2:iF H(i,1)=h1; end;

Page : 1
for i=2:iF H(i,jE)=h2; end;
// condizioni di Neumann: inserite nel ciclo di calcolo

// 4. CALCOLO
// definizione parametri iterazione
k=1; //valore iniziale iterazione
errmax=1;
HN=H; //matrice di nuova iterazione
//inizio loop carico piezometrico
while (k<=imax & errmax>=epsilon)
// loop primo sottodominio
for i=2:n
for j=2:jB
HN(i,j)=(H(i,j-1)+H(i,j+1)+H(i-1,j)+H(i+1,j))/4;
end;
end;
// loop secondo sottodominio
for i=iC:n
for j=jB+1:jD-1
HN(i,j)=(H(i,j-1)+H(i,j+1)+H(i-1,j)+H(i+1,j))/4;
end;
end;
// loop terzo sottodominio
for i=2:n
for j=jD:m
HN(i,j)=(H(i,j-1)+H(i,j+1)+H(i-1,j)+H(i+1,j))/4;
end;
end;
// condizioni al contorno di Neumann
for j=jA:(jB-1) HN(1,j)=(H(1,j-1)+H(1,j+1)+2*H(2,j))/4; end;
for i=2:(iC-1) HN(i,jB)=(H(i-1,jB)+H(i+1,jB)+2*H(i,jB-1))/4; end;
for j=(jB+1):(jD-1) HN(iC,j)=(H(iC,j-1)+H(iC,j+1)+2*H(iC+1,j))/4; end;
for i=2:(iC-1) HN(i,jD)=((H(i-1,jD)+H(i+1,jD))+2*H(i,jD+1))/4; end;
for j=2:(jE-1) HN(iF,j)=(H(iF,j-1)+H(iF,j+1)+2*H(iF-1,j))/4; end;
HN(1,jB)=(2*H(1,jB-1)+2*H(2,jB))/4;
HN(1,jD)=(2*H(1,jD+1)+2*H(2,jD))/4;
HN(iC,jB)=(2*H(iC,jB+1)+2*H(iC-1,jB))/4;
HN(iC,jD)=(2*H(iC,jD-1)+2*H(iC-1,jD))/4;
// matrice degli errori
for i=1:n+1
for j=1:m+1
err(i,j)=abs(HN(i,j)-H(i,j));
end;
end;
errmax=max(err);
// principale
H=HN;
k=k+1;
end;

//inizio loop velocit


U=zeros(n+1,m+1);
V=zeros(n+1,m+1);
// loop primo sottodominio
for i=2:n
for j=2:jB-1
U(i,j)=(H(i,j+1)-H(i,j-1))/(2*Dx);
V(i,j)=(H(i+1,j)-H(i-1,j))/(2*Dx);

Page : 2
end;
end;
// loop secondo sottodominio
for i=iC+1:n
for j=jB:jD
U(i,j)=(H(i,j+1)-H(i,j-1))/(2*Dx);
V(i,j)=(H(i+1,j)-H(i-1,j))/(2*Dx);
end;
end;
// loop terzo sottodominio
for i=2:n
for j=jD+1:m
U(i,j)=(H(i,j+1)-H(i,j-1))/(2*Dx);
V(i,j)=(H(i+1,j)-H(i-1,j))/(2*Dx);
end;
end;
// loop al contorno
for j=2:jA U(1,j)=(H(1,j+1)-H(1,j-1))/(2*Dx); V(1,j)=(H(2,j)-H(1,j))/Dx;
end;
for j=jD+1:jE-1 U(1,j)=(H(1,j+1)-H(1,j-1))/(2*Dx); V(1,j)=(H(2,j)-H(1,j)
)/Dx; end;
for j=jA+1:jB-1 V(1,j)=0; U(1,j)=(H(1,j+1)-H(1,j-1))/(2*Dx); end;
for j=jB+1:jD-1 V(iC,j)=0; U(iC,j)=(H(iC,j+1)-H(iC,j-1))/(2*Dx); end;
for j=2:m V(iF,j)=0; U(iF,j)=(H(iF,j+1)-H(iF,j-1))/(2*Dx); end;
for i=2:n V(i,1)=(H(i+1,1)-H(i-1,1))/(2*Dx); U(i,1)=(H(i,2)-H(i,1))/Dx;
end;
for i=2:n V(i,jE)=(H(i+1,jE)-H(i-1,jE))/(2*Dx); U(i,jE)=(H(i,jE)-H(i,jE-
1))/Dx; end;
for i=2:iC U(i,jB)=0; V(i,jB)=(H(i+1,jB)-H(i-1,jB))/(2*Dx); end;
for i=2:iC U(i,jD)=0; V(i,jD)=(H(i+1,jD)-H(i-1,jD))/(2*Dx); end;
U(iC,jB)=(H(iC,jB+1)-H(iC,jB-1))/(2*Dx);
U(iC,jD)=(H(iC,jD+1)-H(iC,jD-1))/(2*Dx);
//velocit reali
U=-K*U;
V=-K*V;
// massimi e minimi
minU=min(U);
maxU=max(U);
minV=min(V);
maxV=max(V);

xF=[(jD-1)*Dx:Dx:(jD-1)*Dx+pt/2];
F=H(iC,jD-1:1:jD-1+pt/2/Dx);

t2=getdate();
dt=etime(t2,t1);
disp(dt, "Tempo di elaborazione:");
disp(k, "Iterazioni svolte:");
disp(errmax, "Errore massimo per H:");

// 5. VISUALIZZAZIONE RISULTATI
// estremi traversa
xt=[b*l,b*l,(b+1)*l-s,(b+1)*l-s,(b+1)*l,(b+1)*l];
yt=[h1,0,0,-pt,-pt,h2];

// plot valori colorati


xset('window',1);

Page : 3
isoview(0,(2*b+1)*l,-pi,h1);
xset("colormap",jetcolormap(100));
Sgrayplot(x,-y,H', strf="011", rect=[0,-pi,(2*b+1)*l,h1+1]);;
colorbar(0,h1);
xpoly([0,b*l],[h1,h1]); hdl=get("hdl"); hdl.thickness=3; hdl.foreground=30
;
xpoly([(b+1)*l,(2*b+1)*l],[h2,h2]); hdl=get("hdl"); hdl.thickness=3; hdl.f
oreground=30;
xfpoly(xt,yt,1); hdl=get("hdl"); hdl.thickness=2; hdl.background=-2;
title("Carico piezometrico");

// plot contour map


xset('window',2);
isoview(0,(2*b+1)*l,-pi,h1)
xset("colormap",jetcolormap(100))
contour(x,-y,H',(h1-h2)*10);
xpoly([0,b*l],[h1,h1]); hdl=get("hdl"); hdl.thickness=3; hdl.foreground=30
;
xpoly([(b+1)*l,(2*b+1)*l],[h2,h2]); hdl=get("hdl"); hdl.thickness=3; hdl.f
oreground=30;
xfpoly(xt,yt,1); hdl=get("hdl"); hdl.thickness=2; hdl.background=-2;
title("Carico piezometrico");

// plot velocit orizzontale


xset('window',3);
isoview(0,(2*b+1)*l,-pi,h1);
xset("colormap",jetcolormap(100));
Sgrayplot(x,-y,U', strf="011", rect=[0,-pi,(2*b+1)*l,h1+1]);;
colorbar(minU,maxU);
xpoly([0,b*l],[h1,h1]); hdl=get("hdl"); hdl.thickness=3; hdl.foreground=30
;
xpoly([(b+1)*l,(2*b+1)*l],[h2,h2]); hdl=get("hdl"); hdl.thickness=3; hdl.f
oreground=30;
xfpoly(xt,yt,1); hdl=get("hdl"); hdl.thickness=2; hdl.background=-2;
title("Velocit orizzontali");

// plot velocit verticale


xset('window',4);
isoview(0,(2*b+1)*l,-pi,h1);
xset("colormap",jetcolormap(100));
Sgrayplot(x,-y,V', strf="011", rect=[0,-pi,(2*b+1)*l,h1+1]);;
colorbar(minV,maxV);
xpoly([0,b*l],[h1,h1]); hdl=get("hdl"); hdl.thickness=3; hdl.foreground=30
;
xpoly([(b+1)*l,(2*b+1)*l],[h2,h2]); hdl=get("hdl"); hdl.thickness=3; hdl.f
oreground=30;
xfpoly(xt,yt,1); hdl=get("hdl"); hdl.thickness=2; hdl.background=-2;
title("Velocit verticali");

// plot zona taglione


xset('window',5);
xset("colormap",jetcolormap(100));
subplot(131);
isoview((b+1)*l-4*s,-2*pt,(b+1)*l+3*s,h2+1);
champ1(x,-y,U'/K,-V'/K, rect=[(b+1)*l-4*s,-2*pt,(b+1)*l+3*s,h2+1], arfact=
1);
xpoly([(b+1)*l,(2*b+1)*l],[h2,h2]); hdl=get("hdl"); hdl.thickness=3; hdl.f
oreground=30;

Page : 4
xfpoly(xt,yt,1); hdl=get("hdl"); hdl.thickness=2; hdl.background=-2;
title("Rappresentazione vettoriale");
subplot(132);
isoview((b+1)*l-4*s,-2*pt,(b+1)*l+3*s,h2+1);
Sgrayplot(x,-y,U', strf="011", rect=[(b+1)*l-4*s,-2*pt,(b+1)*l+3*s,h2+1]);
colorbar(minU,maxU);
xpoly([(b+1)*l,(2*b+1)*l],[h2,h2]); hdl=get("hdl"); hdl.thickness=3; hdl.f
oreground=30;
xfpoly(xt,yt,1); hdl=get("hdl"); hdl.thickness=2; hdl.background=-2;
title("Velocit orizzontali");
subplot(133);
isoview((b+1)*l-4*s,-2*pt,(b+1)*l+3*s,h2+1);
Sgrayplot(x,-y,-V', strf="011", rect=[(b+1)*l-4*s,-2*pt,(b+1)*l+3*s,h2+1])
;
colorbar(minV,maxV);
xpoly([(b+1)*l,(2*b+1)*l],[h2,h2]); hdl=get("hdl"); hdl.thickness=3; hdl.f
oreground=30;
xfpoly(xt,yt,1); hdl=get("hdl"); hdl.thickness=2; hdl.background=-2;
title("Velocit verticali");

//plot profilo velocit orizzontali sotto il taglione


xset('window',6);
yta=[(iC-1)*Dy:Dy:n*Dy];
uta=U(iC:1:iF,(b+1)*fx);
plot(uta,-yta);
title("Profilo velocit orizzontali sotto il taglione");

endfunction;

Page : 5

Potrebbero piacerti anche