UN AMBIENTE OBJECT-ORIENTED
PER PROBLEMI
DI MECCANICA DEL CONTINUO
di Salvatore Filippone, Gino Bella e Marco Rorro
NEMO (Numerical Engine for Multiphysics Operators) è un ambiente per applicazioni di fluidodinamica che consente la scrittura delle applicazioni seguendo la struttura delle equazioni differenziali del problema, defi-nendo “oggetti” per i campi e le equazioni, ed “operatori” differenziali. NEMO utilizza tecniche numeriche ef-ficienti e si interfaccia con formati industriali standard e strumenti di visualizzazione.
• Abstract
NEMO (Numerical Engine for Multiphysics Operators) is a support library designed to build applications in the field of continuum mechanics; its basic design principle is to enable an application structure that closely follows the structure of the differential equa-tions describing the problem on hand, exploiting the availability of “objects” representing fields and equations, and the differential operators acting on them, normally assuming a finite volume discretization scheme. The library makes use of consolidated and efficient parallel computing libraries for internal subtasks, employing state of the art numerical techniques; it is also capable of interfacing with industry standard storage formats, such as CGNS and GAMBIT, and visualization tools.
Dott. Salvatore Filippone
Università “Tor Vergata”, Roma Dipartimento di Ingegneria Meccanica
filippone.salvatore@uniroma2.it
Lo sviluppo di un ambiente software per la soluzione di equazioni differenziali alle derivate parziali (PDE) che sia allo stesso tempo potente, efficiente, espressivo e (relativamente) semplice da usare è un argomento alla base di molti progetti di ricerca degli ultimi anni. L’interesse per le PDE è determinato dal fatto che mol-tissimi problemi della fisica e dell’ingegneria sono modellati con questo tipo di equazione; ad esempio le equazioni di Navier-Stokes per i problemi di fluidodi-namica (aerodifluidodi-namica, combustione, idrodifluidodi-namica, difluidodi-namica della atmosfera, etc.), le equazioni di Maxwell per i problemi di elettromagnetismo, le equazioni della elasticità per il calcolo strutturale, etc.
L’ambizione del progetto NEMO è lo sviluppo di un ambiente di risoluzione di problemi (Problem Solving Environment PSE) che fornisca i mattoni elementari necessari ad un certo campo applicativo, ad un livello di astrazione significativa-mente superiore di quello di un linguaggio di programmazione di base.
Dott. Marco Rorro
CASPUR
Gruppo di Matematica Computazionale e Applicazioni rorro@caspur.it
Prof. Gino Bella
Università “Tor Vergata”, Roma Dipartimento di Ingegneria Meccanica
Per fissare le idee consideriamo un caso semplice: supponiamo di voler risol-vere l’equazione di Poisson per la pressione con condizioni al contorno di Dirichlet su un certo dominio:
Ⱔ2 p=f(x) x僆Ω
p=g(x) x僆∂Ω
I passi per la soluzione di questa equazione comprendono:
1. creazione di un dominio di discretizzazione (mesh) su cui viene definita la funzione incognita (field);
2. definizione delle condizioni al contorno; 3. applicazione dell’operatore di Laplace; 4. iterazione.
La progettazione software orientata agli oggetti si propone di rispecchiare nella struttura del codice una rappresentazione il più possibile corrispondente alla rap-presentazione concettuale impiegata dallo specialista nel dominio applicativo di interesse. Una progettazione accurata degli “oggetti” informatici di base di tipo PDE, FIELD, MESH etc. rende estremamente agevole la costruzione e l’adattamento delle applicazioni per domini specialistici molto diversi.
Un esempio di applicazione non banale è quello presentato in [3], in cui l’equa-zione di Laplace viene applicata a monte del processo di simulal’equa-zione, avendo come funzione incognita la posizione dei punti nodali della griglia di discretizza-zione. Lo scopo è quello di migliorare la qualità della griglia di discretizzazione su cui poi verrà impostato il processo di simulazione (in questo caso la combustione in un motore di automobile); in altre parole, un’equazione differenziale ausiliaria viene applicata al processo di discretizzazione dello spazio su cui poi verrà impo-stata l’equazione differenziale principale. Il risultato del processo di miglioramento della qualità è mostrato in Figura 1.
CASPUR ANNU
AL REPOR
T EDIZIONE 2009
Figura 1
Qualità di una griglia non strutturata
Figura 2
Distribuzione di temperatura su un pistone con tazza.
Un’applicazione più convenzionale è invece lo studio dello stress termico in un componente meccanico mostrato in Figura 2; in questo caso il componente è un pistone con una “tazza” per un motore automobilistico. Le condizioni al contorno comprendono la modellazione del processo di lubrificazione e raffreddamento, oltre al flusso termico proveniente dalla camera di combustione.
La libreria NEMO ha due caratteristiche fondamentali: l’ implementazione in linguag-gio Fortran 95 e l’uso interno della libreria MPI per la gestione del parallelismo.
L’implementazione in linguaggio Fortran 95 consente una progettazione orien-tata agli oggetti attraverso la disponibilità dei tipi di dati definiti da utente, del-l’operator overloading e di altre caratteristiche, quali la gestione della memoria allocata.
Per quanto riguarda la parallelizzazione tramite MPI essa viene spesso (con ragione) percepita come complessa; nel nostro caso invece per l’utente finale il parallelismo risulta essere sostanzialmente trasparente, essendo incapsulato negli oggetti che compongono il programma stesso. In effetti le librerie di supporto im-plementano una sorta di estensione parallela del linguaggio di programmazione, specializzata per il dominio applicativo di interesse. Un approccio di estensione parallela di questo tipo è di solito complicato per dei domini applicativi di tipo completamente generale; nell’ambito di NEMO diventa invece possibile conciliare i problemi di espressività, facilità d’uso ed efficienza avendo assunto un dominio applicativo delimitato, quello della soluzione numerica delle PDE. Pertanto in que-sto conteque-sto si riesce a conciliare l’utilizzo delle best practices presenti in lettera-tura sfruttando una progettazione del codice ad oggetti, che realizza la flessibilità voluta.
La maggior parte dei metodi di soluzione delle PDE prevedono la formulazione e la soluzione di sistemi di equazioni lineari di grandi dimensioni; la soluzione di questi sistemi è un problema scientifico di grande complessità che richiede
che specializzate, basate di solito sull’uso di metodi di soluzione iterativi e di tra-sformazioni preliminari dette precondizionatori. Nel contesto di NEMO vengono uti-lizzate le librerie di supporto PSBLAS e MLD2P4 [1,2] realizzando diversi obiettivi: 1. incapsulare la piena generalità della libreria MPI in un formato di facile uso; 2. predisporre una serie di operatori per lo scambio dei dati orientati alle ap-plicazioni basate su griglie di discretizzazione;
3. fornire solutori iterativi per i sistemi lineari interni provenienti dalla discre-tizzazione, basati sulle più moderne tecniche di soluzione e precondizionamento; 4. ottenere prestazioni ottimali su una ampia gamma di architetture di elabo-razione, basandosi sia sulle caratteristiche del linguaggio Fortran 95 che sugli al-goritmi di soluzione dei sistemi lineari e di precondizionamento più moderni, presenti nella letteratura specializzata ma non necessariamente accessibili allo specialista applicativo.
Una volta che si sia garantito l’accesso a metodi di soluzione e precondiziona-mento adeguati, l’efficienza del codice parallelo per le applicazioni basate sulla discretizzazione del dominio di esistenza di una PDE viene a dipendere in maniera determinante dal criterio di decomposizione della griglia di calcolo. NEMO appar-tiene alla classe di codici per i quali la quantità di calcoli da effettuare è appros-simativamente proporzionale, per ogni passo temporale, al numero di dati trattati (nel nostro caso al numero di celle del dominio di-scretizzato), mentre, sempre ad ogni passo temporale, si devono scambiare dati fra i vari processi in quantità proporzionale alla super-ficie di separazione fra i vari sot-todomini in cui il dominio di calcolo è stato suddiviso.
Gli algoritmi per il partiziona-mento ottimo di un dominio di calcolo in sottodomini sono og-getto di una ricerca oggi estrema-mente attiva e molte alternative sono disponibili in letteratura; per-ciò si è stabilito di prevedere in NEMO una specifica funzionalità per l’interfacciamento a pro-grammi esterni di partiziona-mento, cosicché l’utente di NEMO possa sperimentare facilmente le diverse alternative che vengono man mano proposte in letteratura.
Nel 2008, lo sviluppo di NEMO ha riguardato principalmente il porting e l’otti-mizzazione del codice esistente sulle piattaforme disponibili presso il CASPUR, la
CASPUR ANNU
AL REPOR
T EDIZIONE 2009
• Lo schema di analisi: dettagli tecnici
La traduzione in codice NEMO del processo di modellazione si realizza in una serie di chiamate a metodi che istanziano degli oggetti , quali ad esempio:
call create_mesh(msh,input_file,’MESH’) call create_bc(bc,input_file,’BC’,msh)
call create_field(p,msh,bc=bc,dim=pressure_)
call create_pde(eqn,input_file,’Poisson PDE’,msh,pressure_ * length_) call create_source(src,input_file,’SOURCE’,pressure_/surface_)
laddove il nucleo fondamentale del codice prevede un semplice loop di itera-zione temporale; l’applicaitera-zione dei vari operatori all’oggetto equaitera-zione si tra-duce internamente nella discretizzazione secondo il metodo impostato nel momento della creazione della mesh.
big_iteration: do call increment(iter)
call pde_laplacian(‘+’,eqn,p) call pde_source(‘+’,eqn,src) call solve_pde(eqn,p,var=var)
I risultati ottenuti sono stati assolutamente lusinghieri, in termini di scalabilità su casi di test di medie dimensioni (circa 1 milione di celle), arrivando ad una effi-cienza della parte di calcolo fino al 50% su 64 processori dei cluster Linux con con-nessione Infiniband, e fino al 73% su 64 processori della piattaforma IBM SP5.
Attualmente si sta sviluppando un codice, basato su NEMO, per la fluidodinamica esterna che implementa lo schema computazionale proposto in [4]. Al momento si è in una fase avanzata di stesura del codice e, nella successiva fase di collaudo, oltre ai casi di riferimento noti e studiati in letteratura, si prevede di testare l’ap-plicazione su geometrie complesse derivanti dall’industria automobilistica.
· Bibliografia
[1] Filippone, S., & Colajanni, M. (Dec. 2000). PSBLAS: A library for parallel linear al-gebra computation on sparse matrices. ACM Trans. on Math. Software, 26(4), 527-50.
[2] D’Ambra, P., Filippone, S., & Di Serafino, D. (Nov.-Dec. 2007). On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners. Applied Numerical Mathe-matics, 57(11-12), 1181-96.
[3] Schmidt, D., Toninel, S., Filippone, S., & Bianchi, G. M. (2008). Parallel Computation of Mesh Motion for CFD of IC Engines. SAE World Congress & Exhibition, Detroit.