• Non ci sono risultati.

Scelta di un nuovo metodo di soluzione di sistemi non lineari

10 12 14 16 18 20 22 24 26 x u exact local−prec

Figura 6.4: Risultati per NL2, velocità

la quantità di memoria utilizzata e le dicoltà di convergenza. Per fare una simu- lazione con 4000 celle, la griglia spaziale meno ranata impiegata nelle simulazioni del capitolo 5, anche con le librerie minpack, che cercano di risparmiare memoria, sono necessari circa 2 GB di ram, è quindi impensabile di poter arrivare alla griglia più ranata composta da 40000 celle. Oltre a questo è necessario sottolineare che all'aumentare del numero di celle si hanno sempre maggiori dicoltà di convergen- za per ogni iterazione del sistema non lineare. Questo problema è probabilmente dovuto ai criteri di arresto utilizzati (equazioni 6.5 e 6.12), unitamente alla natu- ra del problema di Riemann. Infatti dalla soluzione analitica risulta che ad ogni passo temporale solo un determinato numero di celle si modicano, mentre le altre rimangono costanti. Perciò solo alcune fra le equazioni del sistema non lineare sono diverse da zero mentre le altre hanno già la soluzione corretta: controlli come quelli nelle equazioni 6.5 e 6.12 non sono però in grado di distinguere fra una condizione in cui tante equazioni danno un piccolo errore e una in cui sono tutte correte eccetto alcune che danno un grande errore (come la soluzione di partenza del problema di Riemann nel nostro caso), perciò, a meno che non si mettano soglie particolarmente restrittive, la soluzione iniziale può venire associata ad una soluzione corretta. Que- sto problema può essere risolto modicando i criteri di arresto ma, visto che questo non sarebbe suciente per permettere di fare simulazioni più ranate, si è deciso di procedere in un'altra direzione.

6.3 Scelta di un nuovo metodo di soluzione di siste-

mi non lineari

Da quanto detto nella sezione precedente deriva che per arrivare a fare simulazioni con il sistema non lineare è necessario ridurre notevolmente sia i tempi di calcolo

6.3. Scelta di un nuovo metodo di soluzione di sistemi non lineari che la memoria occupata. È perciò necessario agire su quelle parti dell'algoritmo che causano questi problemi. Per quanto riguarda la memoria la parte del leone è quella dello Jacobiano: se dovessimo memorizzare tanti elementi in doppia preci- sione quanti sono le componenti dello Jacobiano, data una griglia di 4000 celle e quindi di 12000 incognite (in ogni celle abbiamo le tre incognite del vettore di stato) avremmo 144 milioni di numeri in doppia precisione da memorizzare. Considerando che ognuno di questi occupa 8 byte di memoria sono richiesti 1100 GB di memoria! Anche nel caso che la memorizzazione dello Jacobiano sia fatta tenendo conto che è una matrice a bande (nel qual caso la memoria richiesta cresce linearmente con le dimensioni del sistema) per il sistema appena discusso sarebbero necessari 0.8 GB a cui devono essere aggiunti i vari vettori di appoggio che approssimativamente in questo caso raddoppiano la richiesta di memoria. Perciò, nella scelta di un nuovo algoritmo di soluzione di sistemi non lineari non sarà considerato accettabile nessun metodo che abbia richieste di memoria superiori al metodo di allocazione per matrici a bande ed è gradita la caratteristica di richiedere ancora meno risorse.

Come abbiamo detto è necessario anche ridurre i tempi di calcolo, nuovamente il collo di bottiglia è causato dal calcolo approssimato dello Jacobiano. Osservando infatti l'equazione 6.11 si vede come per valutare ogni colonna di J sia necessario calcolare la funzione F (u + ej)perciò, anche nelle condizione migliore in cui è su-

ciente una sola iterazione del metodo di Newton, per un sistema di dimensione 12000 è necessario calcolare 12000 volte la funzione F. Poichè anche il tempo necessario ad ottenere F cresce con le dimensioni del sistema, si capisce come con questa strate- gia di stima dello Jacobiano la simulazione di sistemi di grandi dimensioni richieda tempi proibitivi.

Da quanto appena detto si capisce che bisogna operare sulla prima equazione del sistema 6.2, cioè sul sistema lineare associato ad ogni iterazione del metodo di New- ton, per avere un solutore eciente.

Se si volesse risolvere questo sistema lineare in modo diretto, cioè con un metodo che fornisca la soluzione in un numero nito di passi avremmo poco margine di manovra sia per quanto riguarda i tempi di calcolo che per la memorizzazione, in quanto un metodo di questo tipo deve necessariamente calcolare o lo Jacobiano o una matrice ad esso associata ed è proprio questa operazione che è computazionalmente dispen- diosa. Si è scelto di passare ad un metodo che risolva soltanto in modo approssimato il sistema lineare in 6.2, che però ci dia la possibilità di risparmiare risorse. Soluzioni di questo tipo, che approssimano soltanto il passo del metodo di Newton, sono detti metodi di Newton inesatti. Il passo δuk è scelto in modo da vericare :

kJ δuk δuk+ F δuk k < η

kkF δuk k ηk ∈ (0, 1] (6.13)

dove ηk, che è chiamato forzante, può essere una costante o variare tra le varie

iterazioni, a seconda del particolare algoritmo scelto. La maggioranza dei metodi di Newton inesatti utilizzano algoritmi iterativi per la soluzione dei sistemi lineari, perciò si hanno globalmente due cicli di iterazioni: il primo associato al metodo di Newton che si ferma raggiunto uno dei criteri di arresto già discussi, il secondo asso- ciato alla soluzione del sistema lineare che si interrompe quando la 6.13 è vericata. Tutto ciò non esclude inoltre che a questo metodo sia associata una strategia di globalizzazione, come quelle già descritte nella sezione 6.1, perciò gli algoritmi che

6.4. Metodi di Newton-Krylov senza Jacobiano

Documenti correlati