Salta al contenuto principale
  1. Tesi/

Finite Element Development

Finite Element Development
Numerica Elementi Finiti Programmazione

Perché è interessante

Gli Elementi Finiti sono il marchio di fabbrica dell’Ingegneria Civile e non solo, ergo una conoscenza approfondita di questi permette di avere un controllo elevato sulle scelte di modellazione e non solo. Prendere parte allo sviluppo di un codice agli Elementi Finiti permette di imparare dettagliatamente come ogni scelta numerica influisce sul risultato finale. Il nostro codice agli Elementi Finiti sta venendo riscritto in C++ da zero, con enfasi sulle performance e flessibilità del codice. Nonostante sia un tema molto classico, si svilupperanno inevitabilmente molte competenze laterali legate alla gestione di file e flussi di dati (immaginate blocchi di risultati, da interfacciare tra diverse parti del software), che garantiscono una flessibilità estremamente apprezzata in azienda, quando è richiesta interoperabilità tra più software commerciali contemporaneamente.

Cosa farai

  • Implementare solutori non lineari impliciti e/o espliciti a grandi deformazioni, confrontandoli con il codice esistente in MATLAB, di cui si lascia una tesi passata come esempio.
  • Implementare elementi Beam, Plate, Shell o Brick.
  • Implementare modelli costitutivi non lineari.
  • Sono ben accette proposte di sviluppi vari ed eventuali, da discutere con il Prof relatore.

Prerequisiti

  • Conoscenze del corso di Meccanica Computazionale (o equivalenti).
  • Conoscenze di base di programmazione (in MATLAB o qualsiasi altro linguaggio): non indispensabili, ma utili.

Strumenti

  • Ambiente di sviluppo integrato per software di ricerca in C++.
  • Librerie scientifiche moderne quali Visualization Toolkit (VTK), Intel math Kernel Library (MKL), MKL Pardiso ed eventualmente anche Portable, Extensible Toolkit for Scientific Computation (PETSc).
  • Compilatori (gcc, intel compiler, ...) e generatori di sistemi di compilazione quali CMake (nozioni di base e avanzate fornite all'occorrenza, direttamente da membri del gruppo di ricerca).
  • Unit Test e Patch Test automatizzabili tramite repository online (istanza Gitlab privata DICEA, però replicabile in eventuali progetti privati in GitHub) per garantire la correttezza dei risultati durante le iterazioni dello sviluppo del codice.
  • Un cluster di calcolo (HPC - High Performance Computing), per lanciare le simulazioni in modo efficiente (se le simulazioni lo dovessero richiedere).

Relatore

Prof. Gianluca Mazzucco · gianluca.mazzucco@unipd.it