↓ Skip to main content
  1. Theses/

Finite Element Development

Finite Element Development
Numerical Finite Elements Programming

Why it matters

Finite Elements are the trademark of Civil Engineering and beyond, so an in-depth knowledge of them gives you a high degree of control over modelling choices. Taking part in the development of a Finite Element code teaches you in detail how every numerical choice affects the final result. Our Finite Element code is being rewritten from scratch in C++, with a focus on performance and flexibility. Even though it is a classic topic, you will inevitably develop many side skills related to handling files and data streams (think of blocks of results to be passed between different parts of the software), a kind of flexibility that companies value highly whenever several commercial software packages have to work together.

What you'll do

  • Implement implicit and/or explicit nonlinear solvers for large deformations, comparing them with the existing MATLAB code, for which a past thesis is provided as an example.
  • Implement Beam, Plate, Shell or Brick elements.
  • Implement nonlinear constitutive models.
  • Proposals for other developments are welcome, to be discussed with the supervisor.

Prerequisites

  • Knowledge from the Computational Mechanics course (or equivalent).
  • Basic programming skills (MATLAB or any other language): not essential, but useful.

Tools

  • Integrated development environment for research software in C++.
  • Modern scientific libraries such as the Visualization Toolkit (VTK), the Intel Math Kernel Library (MKL), MKL PARDISO and possibly the Portable, Extensible Toolkit for Scientific Computation (PETSc).
  • Compilers (gcc, Intel compiler, ...) and build system generators such as CMake (basic and advanced notions provided when needed, directly by members of the research group).
  • Automated unit tests and patch tests through an online repository (private DICEA GitLab instance, reproducible in private GitHub projects) to guarantee correct results across development iterations.
  • A computing cluster (HPC - High Performance Computing), to run simulations efficiently (if the simulations require it).

Supervisor

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