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
© Copyright 2024 Paperzz