Epistolario 1875-1879

UNIVERSITÀ DEGLI STUDI DI TRIESTE
FACOLTÀ DI INGEGNERIA
CORSO DI LAUREA SPECIALISTICA
IN STRUTTURE ED OPERE DELL’INGEGNERIA CIVILE
Corso di
IDRAULICA II
Prof. Gianni Pedrizzetti
Anno Accademico 2005/2006
Analisi del flusso al di sotto di una traversa fluviale Studente: Paolo Martinis
Indice
Indice
Introduzione
Note teoriche
Filtrazione nei mezzi porosi
Calcolo numerico alle differenze finite
Scilab
Il modello di calcolo
Ipotesi e inputs
Fase di calcolo
Output e grafici
Risultati
Grafici prodotti dallo script
Influenza della larghezza del dominio
Profilo di velocità al diminuire della profondità
Sollevamento del terreno
Conclusioni
Bibliografia
2 2 3 3 3 5 6 6 7 7 8 8 10 11 11 12 13 Introduzione
Il presente elaborato si propone di studiare l’andamento del flusso idraulico al di
sotto di una traversa fluviale con l’ausilio di un software appositamente realizzato
che sfrutti il metodo alle differenze finite per risolvere l’equazione di Laplace.
Verranno innanzitutto presentate alcune note teoriche riguardo l’idraulica dei mezzi
porosi incomprimibili, il metodo alle differenze finite e il linguaggio di
programmazione Scilab.
Si procederà poi all’illustrazione dello script di calcolo realizzato ed allegato in calce
al presente documento, limitandosi a considerarne le particolarità e le difficoltà
incontrate.
Infine verranno presentati i risultati di alcune simulazioni effettuate con diversi
parametri di input, sulla base delle quali verranno condotte alcune osservazioni sul
fenomeno della filtrazione al di sotto delle traverse fluviali e una comparazione tra i
risultati della simulazione numerica ed i relativi metodi analitici comunemente
utilizzati nelle costruzioni idrauliche.
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 2
Note teoriche
Filtrazione nei mezzi porosi
Per filtrazione si intende generalmente il complesso dei fenomeni di moto di un
fluido attraverso un mezzo permeabile come quello costituito da un terreno sciolto
sabbioso o ghiaioso.
La presenza dei pori nel terreno fa sì che il fluido trovi una rete irregolare di
canalicoli entro cui muoversi con velocità piuttosto basse, in quanto le piccole
dimensioni dei pori offrono una forte resistenza al moto. Non potendo seguire il
percorso del fluido in ogni canalicolo per le evidenti complessità geometriche che ne
deriverebbero, si studiano gli aspetti globali del moto considerando il terreno come
un mezzo continuo entro cui, per ogni sezione infinitesima
per la quale passi una
⁄ .
portata , si possa definire una velocità di filtrazione
lim
È poi possibile affermare che, con il moto del fluido, si instaura un gradiente del
carico piezometrico nella direzione del moto per compensare la dissipazione di
energia dovuta alle resistenze viscose. In questo modo la velocità di filtrazione sarà
definita secondo la legge di Darcy:
nelle ulteriori ipotesi di fluido incomprimibile e di mezzo isotropo. La costante di
proporzionalità viene detta permeabilità del mezzo o coefficiente di filtrazione, ed
è una caratteristica globale dell’insieme costituito dal fluido permeante e dal mezzo
permeabile.
I moti che seguono la legge di Darcy, vista la lentezza e quindi la trascurabilità dei
termini inerziali, ammettono l’esistenza di un potenziale
e possono così
essere trattati allo stesso modo dei moti irrotazionali. La funzione sarà quindi una
funzione armonica che, in base all’equazione di continuità, soddisfa all’equazione di
Laplace:
0
Le condizioni al contorno saranno determinate:
- dalla condizione di Dirichlet di costanza del carico piezometrico per superfici
libere o assunte in condizioni idrostatiche;
- dalla condizione di Neumann di annullamento della componente normale
della velocità per superfici impermeabili.
Calcolo numerico alle differenze finite
Un modello matematico del flusso sotterraneo è uno strumento per rappresentare la
realtà in una versione semplificata ed è costituito, in generale, da un insieme di
equazioni che governano il problema della filtrazione. L’affidabilità delle previsioni
che il modello è in grado di fornire è strettamente dipendente dalle approssimazioni
operate al fine di descrivere la realtà: risulta così chiaro come i modelli retti da
equazioni risolvibili analiticamente in ogni punto del dominio richiedano spesso
ipotesi eccessivamente restrittive o elevati oneri di calcolo. La maggior parte dei
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 3
modelli analitici risulta pertanto valida unicamente per situazioni semplici o per
risultati esageratamente approssimati.
Grazie al forte incremento nella potenza di calcolo dei computer ed il loro costo
sempre meno proibitivo è quindi diventato consueto ricorrere alla risoluzione
approssimata di modelli matematici complessi mediante metodi numerici. Questi
consistono generalmente nei metodi alle differenze finite oppure agli elementi finiti.
I primi risolvono le equazioni differenziali che governano il fenomeno determinando
iterativamente, con approssimazioni sempre minori, i valori dei parametri incogniti
nei nodi di una griglia ortogonale che discretezza il continuo. Per i secondi la griglia
è invece costituita dai vertici di elementi con una geometria nota e ben definita.
j
x
(1,1)
Hi-1,j
(i-1,j)
(i,j-1) (i,j)
i
(i,j+1)
Δ
Hi-1,j
-4Hi,j
Hi,j+1
(i+1,j)
(n,m)
Hi+1,j
Δ
y
Figura 1: La griglia di riferimento e la stella di Laplace del metodo alle differenze finite usati in
questo lavoro. L’asse delle ascisse è assunto positivo verso il basso al fine di poter esprimere la y
come profondità rispetto al piano campagna. La direzione degli indici i e j è stata costruita
contrariamente a quanto si fa di solito al fine di mantenere l’analogia grafica con la notazione righe
per colonne: in questo senso l’espressione (i,j) non rappresenta le coordinate cartesiane del nodo
della griglia ma la notazione matriciale dell’elemento della matrice. Solitamente si preferisce invece
rendere (i,j) come coordinata cartesiana del nodo della griglia: in questo modo l’indice di riga
corrisponde alle y e quello di colonna alle x, e la matrice che si ottiene sarà, graficamente, la trasposta
della griglia cartesiana.
Nel presente lavoro l’equazione di Laplace nelle due dimensioni è stata risolta
utilizzando il metodo alle differenze finite utilizzando una griglia regolare, in modo
da poter rappresentare il dominio come una matrice. Con riferimento alla Figura 1 la
formula di approssimazione analitica del Laplaciano:
∆,
∆,
,
∆
,
∆
4
,
∆
∆
può essere espressa, tralasciando gli infinitesimi di ordine superiore al primo, come:
4 ,
,
,
,
,
,
∆
e di conseguenza l’equazione di Laplace nel nodo , risulta essere:
4 ,
0
,
,
,
,
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 4
Le condizioni al contorno di Neumann
/
0, dove è la direzione normale alla
superficie impermeabile, vengono espresse considerando dei nodi fittizi esterni al
dominio: in questo modo, per esempio in direzione , si ottiene
,
0
,
,
2∆
e quindi l’equazione di Laplace diventa
2 ,
4 ,
0
,
,
-4Hi,j
2Hi,j+1
Hi-1,j
-4Hi,j
2Hi+1,j
Hi,j+1
,
2Hi-1,j
2Hi+1,j
2Hi+1,j
Hi-1,j
-4Hi,j
Hi-1,j
2Hi,j+1
2Hi-1,j
Hi+1,j
-4Hi,j
Hi+1,j
2Hi-1,j
-4Hi,j
-4Hi,j
2Hi-1,j
2Hi,j+1
-4Hi,j
Hi-1,j
2Hi-1,j
Hi,j+1
2Hi-1,j
-4Hi,j
Figura 2: Le stelle di Neumann per le pareti e gli angoli impermeabili.
Il metodo iterativo di Jacobi consiste nel ricalcolare per ogni passo di calcolo
l’equazione di Laplace per il singolo nodo espressa come:
,
,
,
,
,
4
Va osservato che il metodo di Jacobi consente di non dover procedere in maniera
regolare da sinistra a destra e dall’alto in basso lungo il dominio: è così molto più
semplice da implementare rispetto ai metodi di Gauss-Seidel e della Successive Over
Relaxation, ma necessita di maggiori tempi di elaborazione.
Scilab
Scilab è un software per il calcolo numerico sviluppato dall’INRIA per applicazioni
di controllo di sistema e signal processing liberamente distribuito su internet con
licenza open-source. Può essere visto come un clone di Matlab, il più diffuso software
commerciale di calcolo numerico, in quanto le differenze sono minime e la filosofia di
base è la stessa.
La potenza di Matlab/Scilab sta nella semplicità di manipolazione delle matrici:
operazioni basilari come concatenazione, estrazione o trasposizione vengono
realizzate come semplici operazioni quali addizioni e sottrazioni. Un altro punto di
forza è la possibilità di realizzare complessi grafici bi- e tri-dimensionali con poche
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 5
righe di comando. Inoltre è possibile costruire e salvare degli scripts di comandi per
la definizione di funzioni personalizzate che rendono Matlab/Scilab una valida
alternativa ai linguaggi di programmazione comunemente utilizzati come FORTRAN
e C, almeno per quanto riguarda la soluzione di problemi scientifici con metodi
numerici.
Il modello di calcolo
Ipotesi e inputs
Considerata la valenza meramente didattica del presente lavoro, per non rendere
eccessivamente laboriosa la costruzione del modello sono state assunte alcune ipotesi
semplificative per quanto riguarda le caratteristiche fisiche e geometriche del
dominio di calcolo:
- il calcolo viene eseguito in modo indipendente dal tempo con riferimento alla
situazione stabile di regime determinata da una differenza costante dei livelli
idrici di monte e di valle;
- il terreno posto tra la traversa ed il sottostrato impermeabile è composto da un
solo materiale che viene considerato isotropo;
- il substrato permeabile è considerato orizzontale;
- lontano dalla traversa si assume una distribuzione idrostatica delle pressioni
al fine di imporre le condizioni al contorno di Dirichlet sulle pareti verticali
del dominio.
h1
pt
x
y
pi
Figura 3: Rappresentazione grafica della geometria del problema e del dominio di calcolo del
modello (in giallo). Le linee grigie rappresentano la griglia di discretizzazione, quelle verdi le zone
di frontiera con condizioni di Dirichlet, quelle rosse le zone con condizioni al contorno di Neumann.
L’input dello script di calcolo è rappresentato da un vettore i cui elementi sono, oltre
alle caratteristiche geometriche di Figura 3, la permeabilità del terreno all’acqua ed
i limiti del calcolo iterativo.
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 6
Fase di calcolo
Il dominio di calcolo viene rappresentato mediante un’unica matrice di dimensione
⁄∆. L’intervallo di
1,
1 avendo assunto
2
1 ⁄∆ ed
discretizzazione ∆ è stato definito come sottomultiplo dello spessore del taglionea:
in questo modo il loop di calcolo del carico piezometrico secondo la stella di Laplace è
condotto sulle tre sottomatrici dei punti che stanno a sinistra, al di sotto e a destra del
taglione. In seguito, per ogni iterazione vengono calcolati i valori alle frontiere
impermeabili secondo le stelle di Neumann. Le iterazioni continuano fintantoché la
differenza ,
in ogni cella è minore di un certo limite o non viene raggiunto
,
il numero massimo di iterazioni ammesse, entrambi parametri definiti come inputs.
Una volta ottenuta la matrice dei carichi piezometrici in ogni punto del dominio, il
software procede a calcolare le componenti della velocità in ogni punto sempre
seguendo lo schema delle differenze finite. Per ogni punto interno del dominio la
componente orizzontale della velocità, ad esempio, è pari a:
,
,
2∆
Per i punti di frontiera sottoposti alla condizione di Dirichlet la componente normale
della velocità si calcola approssimando la derivata con la sola variazione dalla
frontiera al punto immediatamente più interno: in questo modo, prendendo come
esempio la parete limite di sinistra, abbiamo:
,
,
,
∆
Per quanto riguarda i punti di frontiera sottoposti alla condizione di Neumann, la
componente normale è ovviamente nulla mentre per quella tangenziale si procede
come per i punti interni. I punti d’angolo hanno entrambe le componenti normali ad
una superficie e quindi nulle: questo comporterebbe un “salto” nella creazione dei
grafici a gradazione di colore agli estremi inferiori del taglione. In realtà questi due
punti rappresentano un intorno che ha una superficie impermeabile solo per metà
estensione in ogni direzione, e quello che si vede nel grafico sono i 3⁄4 di intorno che
non sono sottoposti alle condizioni di impermeabilità: il calcolo è stato quindi
condotto come per i punti interni.
Output e grafici
Una volta terminati i calcoli, gli output della funzione sono costituiti dalla matrice
dei carichi piezometrici, dalle matrici delle componenti di velocità in ogni punto, dai
vettori delle coordinate dei nodi e da due ulteriori vettori, rappresentanti uno il
carico piezometrico alla profondità del taglione e l’altro il profilo di velocità al di
sotto del taglione.
Lo script produce poi automaticamente alcuni grafici, che risultano utili sia per avere
una chiara visione del sistema che per effettuare comparazioni con altre simulazioni:
a Ciò comporta dei problemi quando le altre dimensioni gioco non sono multipli dell’intervallo di
discretizzazione. Un’alternativa sarebbe quelle di fissare ∆ 1 , ossia pari all’unità di misura
comunemente usata nelle costruzioni civili, ma i tempi di calcolo si allungherebbero notevolmente.
Un’altra sarebbe quella di costruire il dominio utilizzando una griglia non regolare, che esula dallo
scopo del presente lavoro.
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 7
-
i carichi piezometrici nell’intero dominio sia sotto forma di gradazione di
colore secondo l’intensità sia come linee equipotenziali;
le componenti della velocità sotto forma di gradazione di colore secondo
l’intensità;
le velocità nei pressi della zona del taglione sia in rappresentazione vettoriale
che come gradazione di colore delle componenti;
il profilo di velocità tra strato impermeabile e taglione nella mezzeria dello
stesso;
il profilo di sovrapressione per la base del terreno interessato dal sollevamento
del fondo (si veda il capitolo successivo).
-
Risultati
Grafici prodotti dallo script
In primo luogo è stata condotta una simulazione per visualizzare la distribuzione del
carico piezometrico e le velocità di flusso al di sotto della traversa. I dati in input
utilizzati per la simulazione sono:
variabile
sigla
valore
lunghezza traversa
l
10m
livello monte
h1
5m
livello valle
h2
2m
spessore taglione
s
0.5m
profondità taglione
pt
4m
profondità strato impermeabile
pi
10m
moltiplicatore di l per larghezza di indagine
b
2
permeabilità del terreno
K
0.02m/s
errore ammissibile
epsilon
10-4
iterazioni massime
imax
105
Con i primi due grafici citati nel capitolo precedente è facile visualizzare la
variazione del carico piezometrico all’interno del dominio di calcolo:
Carico piezometrico
6
5.0
4
2
4.0
0
3.0
-2
2.0
-4
1.0
-6
-8
0.0
-10
0
5
10
15
20
25
30
35
40
45
50
Figura 4: Grafico “sgrayplot” del carico piezometrico. I valori sono espressi in metri.
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 8
Carico piezometrico
6
4
2
0
2.1
-2
2.26
4.84
4.68
-4
4.52
4.35
4.19 4.03 3.87 3.71 3.55 3.39
0.645
0.484
0.323
0.161
1.13
0.968
0.806
2.42
1.61
1.45
1.29
1.94
1.77
3.23
2.58
3.062.9 2.74
-6
-8
-10
0
5
10
15
20
25
30
35
40
45
50
Figura 5: Grafico “contour” del carico piezometrico. I valori sono espressi in metri.
Si nota subito come il passaggio dal carico piezometrico di monte a quello di valle sia
abbastanza graduale lungo la superficie impermeabile della traversa, con delle
concentrazioni nei pressi dei punti angolosi all’inizio della traversa e agli estremi
inferiori del taglione. È quindi in questi punti che le velocità raggiungeranno i loro
massimi, come si può osservare mediante gli altri due grafici prodotti dallo script:
Velocità orizzontali
6
4
2
0.010
0
-2
0.005
-4
-6
-8
0.000
-10
0
5
10
15
20
25
30
35
40
45
50
Figura 6: Grafico “sgrayplot” della velocità orizzontale. I valori sono espressi in metri al secondo.
Velocità verticali
6
4
0.010
2
0
0.005
-2
0.000
-4
-6
-0.005
-8
-10
0
5
10
15
20
25
30
35
40
45
50
Figura 7: Grafico “sgrayplot” della velocità verticale. I valori sono espressi in metri al secondo. Le
velocità sono considerate positive quando rivolte verso il basso.
In questo modo è facile chiarire la funzione del taglione all’interno di un’opera
idraulica: in sua assenza uno dei massimi delle velocità si avrebbe nello spigolo di
valle della traversa, dove le particelle fini del terreno verrebbero trascinate verso
l’acqua determinando così un vuoto e il conseguente scalzamento al piede dell’opera.
Il taglione ha così la funzione di portare i massimi delle velocità all’interno del
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 9
terreno, dove le particelle risultano confinate da quelle adiacenti e viene così
annullata l’azione erosiva.
Rappresentazione vettoriale
Velocità orizzontali
Velocità verticali
4
2
2
2
0.010
0
0
0
0.010
0.005
-2
-2
-2
0.000
0.005
-4
-4
-4
-0.005
-6
-6
-6
0.000
-8
28.0
29.0
30.0
31.0
-8
28.0
29.0
30.0
31.0
-8
28.0
29.0
30.0
31.0
Figura 8: Grafici riepilogativi delle velocità nella zona del taglione. I valori sono espressi in metri al
secondo. Le velocità verticali sono considerate positive quando rivolte verso il basso.
Presso lo spigolo di monte le velocità sono rivolte verso valle e verso il basso: dal
punto di vista teorico non è così richiesta la presenza di un taglione. Nella
configurazione visualizzata nei grafici si potrebbero avere comunque dei problemi
quando il trascinamento delle particelle fini tendesse a costipare il terreno,
determinando così un cedimento differenziale dell’opera. Nella realtà presso lo
spigolo di monte viene comunque sempre realizzato uno zoccolo di fondazione che,
innestandosi nel terreno, ingloba anche le caratteristiche di taglione.
Influenza della larghezza del dominio
Delle assunzioni fatte per limitare gli oneri di calcolo, la variabile che determina la
distanza dalla traversa della sezione alla quale è possibile assumere una
distribuzione idrostatica delle pressioni risulta quella di definizione più arbitraria.
Al fine di controllare l’influenza di questo parametro, i risultati della simulazione con
la variabile posta pari a 2, ossia con una larghezza del dominio pari a 5 volte quella
della traversa, sono stati messi in relazione con una simulazione con pari a 1 e gli
stessi altri parametri. Le differenze tra i valori alla frontiera calcolati con la
simulazione
2 e quelli imposti con
1 sono risultati pari, come termine
massimo, al 5,1% per la sezione di destra (con carico maggiore) e al 7,1% per la
sezione di sinistra.
L’errore in cui si incorre nella scelta arbitraria della larghezza del dominio di calcolo
è quindi non trascurabile, almeno per valori piccoli di , e rappresenta la maggiore
incognita da determinare per effettuare una corretta analisi numerica. Il raddoppio di
comporta però anche un raddoppio dei tempi di calcolo (1162 contro 633 secondi
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 10
nel caso in esame), così da rendere la determinazione di un valore accettabile per
eccessivamente lunga per lo scopo del presente lavoro.
Profilo di velocità al diminuire della profondità
Come è logico aspettarsi per questioni di
continuità, con il diminuire della profondità cui è
posto il sottostrato impermeabile la velocità al di
sotto della traversa dovrà necessariamente
aumentare. Per visualizzare numericamente il
fenomeno, il software è stato eseguito con
profondità dello stato impermeabile di 10m e 6m
lasciando inalterati gli altri parametri. In
corrispondenza della mezzeria del taglione si
sono così ottenuti i profili di velocità riportati nel
grafico a lato.
-4
-5
-6
-7
-8
-9
-10
0.002
0.004
0.006
0.008
0.01
Velocità
0.012
Figura 9: Comparazione tra le velocità orizzontali al di
sotto del taglione per diverse profondità del sottostrato
impermeabile. I valori sono espressi in metri al secondo. In
blu il profilo con
10 e in rosso il profilo con
6 .
Sollevamento del terreno
Uno dei maggiori problemi che si incontrano nel dimensionamento delle opere
fluviali è il fenomeno del sollevamento del terreno immediatamente a valle del
taglione per la spinta che l’acqua in risalita esercita sullo stesso. Nella pratica delle
costruzioni idrauliche si considera una porzione rettangolare di terreno di altezza
pari a quella del taglione, larghezza pari a metà dell’altezza e profondità unitaria; per
questo volume di terreno si verifica che la sottopressione indotta dalla differenza di
carico piezometrico tra monte e valle della traversa sia controbilanciata dal peso del
terreno in condizioni di completa saturazione.
Risultando impossibile ricavare analiticamente la
spinta sul terreno, questa viene solitamente
determinata ipotizzando la variazione di carico lineare
s
lungo la superficie della traversa e calcolandone il
valore presso il limite inferiore del taglione mediante
una semplice proporzione. Il carico così ottenuto viene
ipotizzato applicato a tutto il lato inferiore della
pt
porzione di terreno. Nel nostro caso il carico è
P
calcolabile mediante l’espressione:
∆
Figura 10: Schema delle forze in
gioco per il sollevamento del
terreno (porzione in rosso).
Paolo Martinis 2
3
·
2
2.67
Con l’analisi numerica è possibile visualizzare la reale
distribuzione del carico piezometrico sul lato inferiore
Analisi del flusso al di sotto di una traversa fluviale – pag. 11
della porzione di terreno e verificare che il valore calcolato con il metodo pratico
risulta una buona approssimazione della media dei valori reali:
2.8
2.7
2.6
2.5
30.0
30.2
30.4
30.6
30.8
31.0
31.2
31.4
31.6
31.8
32.0
Figura 11: Distribuzione del carico piezometrico al di sotto del terreno interessato dal sollevamento.
La verifica condotta con il metodo pratico risulta quindi valida almeno in prima
approssimazione, avendo cura di imporre l’aggiunta dei consueti coefficienti di
sicurezza alla condizione
.
Conclusioni
Lo script di calcolo prodotto con il presente lavoro non rappresenta certo un software
utilizzabile per fini diversi dalle considerazioni svolte nel capitolo precedente: le
migliorie necessarie per un uso professionale che si dovrebbero implementare nel
codice in termini di velocità di elaborazione, di automazione negli input e output e di
definizione geometrica e fisica del dominio esulano dallo scopo di un’esercitazione
per un corso universitario.
Detto questo, il lavoro svolto è comunque risultato importante per capire il metodo
alle differenze finite, per impratichirsi con l’uso di un potente strumento come Scilab,
per studiare il fenomeno della filtrazione nei mezzi porosi e per verificare
numericamente la formula pratica del sollevamento del terreno utilizzata nell’ambito
delle costruzioni idrauliche.
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 12
Bibliografia
Citrini D., Noseda G., “Idraulica” – Ambrosiana, Milano, 1975
Gamba A., “Laboratorio di calcolo con Matlab” – Quaderni didattici del Dipartimento di
Matematica, Politecnico di Torino, 2000
Ghetti A., “Idraulica” – Libreria Cortina, Padova, 1980
Marchi E., Rubatta A., “Meccanica dei fluidi” – UTET, Torino, 1981
Mathews J. H., Fink K. D., “Numerical methods using Matlab” - Prentice Hall, New
York, 1999
Surendan K. S., “Scilab for dummies” – www.scilab.org, 2007
Tonti E., “Introduzione a Matlab” – www.dic.units.it/perspage/tonti, 2003
Urroz G. E., “Numerical solution of Laplace equation” –
www.neng.usu.edu/cee/faculty/gurro/, 2007
Urroz G. E., “Solution to potential flow in rectangular domain” –
www.neng.usu.edu/cee/faculty/gurro/, 2004
Wang H. F., Anderson M. P., “Introduction to groundwater modeling” – Academic
Press, San Diego, 1982
Paolo Martinis Analisi del flusso al di sotto di una traversa fluviale – pag. 13
//
//
//
//
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,jE1))/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