We consider the finite element approximation of a fluid-structure interaction problem based on a distributed Lagrange multiplier. Recent results show that a discretization that uses this technique is unconditionally stable with respect to the time step size. The method is based on a fixed mesh for the fluid domain which is extended to include the region occupied by the solid, in the spirit of the fictitious domain approach. The reference configuration of the solid is discretized with a fixed mesh which is mapped, at each time step, to the actual position of the body. A crucial part of the code implementation needs to evaluate the intersection between the two meshes and to assemble the portion of stiffness matrix that represents the interface contribution. The first topic addressed in the thesis is the Python implementation of two-dimensional problems without the computation of mesh intersection; this means that only the integration on solid elements is required for the assembly process of the fluid-structure interaction part and that the quadrature points belong to several fluid elements and not to just one. We observe that the property of unconditional stability remains valid. In three dimensions the geometrical issues are more critical and the complexity of the code has to be discussed in detail. We consider the intersection between tetrahedral meshes. When studying this problem we noticed a lack of Python libraries able to compute intersections (made element by element) of two three-dimensional meshes: packages are available only to perform boolean operations on geometrical objects for a later meshing of the resulting solid. So, it became necessary to code routines with the aim of intersecting tetrahedral meshes in order to apply them to the resolution of three-dimensional interface problems. Given two tetrahedra, a way to find points that are vertices of the polyhedron resulting from the intersection is to test each edge of the first tetrahedron against each face of the second one and then to repeat this operation with reversed roles. Barycentric coordinates are useful to check if a point is really an intersection point and not only a candidate point. Particular attention has been paid to computational performances; for accurate finite element approximations it is required to use fine meshes, possibly containing million of elements, so that efficient implementations have to be coded in order to reduce the execution time. We designed fast algorithms in Python: the idea is to use vector/tensor operations (memory intensive code) instead of cycles and iterative operations (CPU intensive code). Intensive numerical tests have been performed in order to validate our code, by comparing various relevant properties, including the mass conservation of the fluid-structure approximation.

In questa tesi si considera l’approssimazione agli elementi finiti di un problema di interazione fluido-struttura basata sull’uso di un moltiplicatore di Lagrange. Risultati recenti mostrano che una discretizzazione che usa questa tecnica è incondizionatamente stabile rispetto all’ampiezza del passo temporale. Il metodo utilizza una mesh fissa per rappresentare il dominio fluido che viene esteso per includere la regione occupata dal solido, nello spirito dell’approccio con dominio fittizio. La configurazione di riferimento del solido viene discretizzata con un’altra mesh fissa che viene mappata, ad ogni istante di tempo, nella posizione effettiva della struttura. Una parte cruciale dell’implementazione consiste nel valutare le intersezioni tra le due mesh per assemblare la porzione della matrice di stiffness che rappresenta il contributo di interfaccia. Il primo argomento affrontato nella tesi è l’implementazione in Python di problemi bidimensionali senza il calcolo dell’intersezione delle mesh; di conseguenza, per l’assemblaggio riguardante la parte di interazione fluido-struttura, è richiesta solo l’integrazione sugli elementi solidi: i punti di quadratura appartengono a più elementi fluidi e non a uno solo. Si osserva che la proprietà di stabilità incondizionata rimane ancora valida. In tre dimensioni, invece, le questioni geometriche si fanno più critiche e la complessità computazionale del codice deve essere analizzata in dettaglio. Abbiamo considerato le intersezioni tra mesh di tetraedri. Studiando questo problema, si nota la mancanza di librerie Python in grado di calcolare intersezioni (fatte elemento per elemento) di due mesh tridimensionali: i packages disponibili sono solo in grado di effettuare operazioni booleane su oggetti geometrici per la successiva creazione di una mesh per il solido risultante. Quindi si è reso necessario creare algoritmi con lo scopo di intersecare mesh di tetraedri per poi applicarli alla soluzione di problemi di interfaccia tridimensionali. Dati due tetraedri, una via per trovare i punti che sono vertici del poliedro risultante dall’intersezione è testare ogni spigolo del primo tetraedro contro ogni faccia del secondo e poi ripetere questa operazione a ruoli invertiti. Le coordinate baricentriche sono utili per controllare se un punto è effettivamente un punto di intersezione e non solo un punto candidato. È necessario prestare particolare attenzione alle performance computazionali; per una accurata approssimazione agli elementi finiti è richiesto l’uso di mesh fini, contenenti milioni di elementi, per cui i codici devono essere implementati in maniera efficiente per ridurre i tempi di esecuzione. Sono stati programmati algoritmi veloci in Python: l’idea è quella di usare operazioni vettoriali/tensoriali (memory intensive code) in sostituzione di cicli e operazioni iterative (CPU intensive code). Sono stati effettuati diversi test numerici per validare il codice, controllando diverse importanti proprietà come la conservazione di massa dell’approssimazione fluido-struttura.

Numerical approximation of fluid-structure interaction problems: a fictitious domain approach

CREDALI, FABIO
2019/2020

Abstract

We consider the finite element approximation of a fluid-structure interaction problem based on a distributed Lagrange multiplier. Recent results show that a discretization that uses this technique is unconditionally stable with respect to the time step size. The method is based on a fixed mesh for the fluid domain which is extended to include the region occupied by the solid, in the spirit of the fictitious domain approach. The reference configuration of the solid is discretized with a fixed mesh which is mapped, at each time step, to the actual position of the body. A crucial part of the code implementation needs to evaluate the intersection between the two meshes and to assemble the portion of stiffness matrix that represents the interface contribution. The first topic addressed in the thesis is the Python implementation of two-dimensional problems without the computation of mesh intersection; this means that only the integration on solid elements is required for the assembly process of the fluid-structure interaction part and that the quadrature points belong to several fluid elements and not to just one. We observe that the property of unconditional stability remains valid. In three dimensions the geometrical issues are more critical and the complexity of the code has to be discussed in detail. We consider the intersection between tetrahedral meshes. When studying this problem we noticed a lack of Python libraries able to compute intersections (made element by element) of two three-dimensional meshes: packages are available only to perform boolean operations on geometrical objects for a later meshing of the resulting solid. So, it became necessary to code routines with the aim of intersecting tetrahedral meshes in order to apply them to the resolution of three-dimensional interface problems. Given two tetrahedra, a way to find points that are vertices of the polyhedron resulting from the intersection is to test each edge of the first tetrahedron against each face of the second one and then to repeat this operation with reversed roles. Barycentric coordinates are useful to check if a point is really an intersection point and not only a candidate point. Particular attention has been paid to computational performances; for accurate finite element approximations it is required to use fine meshes, possibly containing million of elements, so that efficient implementations have to be coded in order to reduce the execution time. We designed fast algorithms in Python: the idea is to use vector/tensor operations (memory intensive code) instead of cycles and iterative operations (CPU intensive code). Intensive numerical tests have been performed in order to validate our code, by comparing various relevant properties, including the mass conservation of the fluid-structure approximation.
2019
Numerical approximation of fluid-structure interaction problems: a fictitious domain approach
In questa tesi si considera l’approssimazione agli elementi finiti di un problema di interazione fluido-struttura basata sull’uso di un moltiplicatore di Lagrange. Risultati recenti mostrano che una discretizzazione che usa questa tecnica è incondizionatamente stabile rispetto all’ampiezza del passo temporale. Il metodo utilizza una mesh fissa per rappresentare il dominio fluido che viene esteso per includere la regione occupata dal solido, nello spirito dell’approccio con dominio fittizio. La configurazione di riferimento del solido viene discretizzata con un’altra mesh fissa che viene mappata, ad ogni istante di tempo, nella posizione effettiva della struttura. Una parte cruciale dell’implementazione consiste nel valutare le intersezioni tra le due mesh per assemblare la porzione della matrice di stiffness che rappresenta il contributo di interfaccia. Il primo argomento affrontato nella tesi è l’implementazione in Python di problemi bidimensionali senza il calcolo dell’intersezione delle mesh; di conseguenza, per l’assemblaggio riguardante la parte di interazione fluido-struttura, è richiesta solo l’integrazione sugli elementi solidi: i punti di quadratura appartengono a più elementi fluidi e non a uno solo. Si osserva che la proprietà di stabilità incondizionata rimane ancora valida. In tre dimensioni, invece, le questioni geometriche si fanno più critiche e la complessità computazionale del codice deve essere analizzata in dettaglio. Abbiamo considerato le intersezioni tra mesh di tetraedri. Studiando questo problema, si nota la mancanza di librerie Python in grado di calcolare intersezioni (fatte elemento per elemento) di due mesh tridimensionali: i packages disponibili sono solo in grado di effettuare operazioni booleane su oggetti geometrici per la successiva creazione di una mesh per il solido risultante. Quindi si è reso necessario creare algoritmi con lo scopo di intersecare mesh di tetraedri per poi applicarli alla soluzione di problemi di interfaccia tridimensionali. Dati due tetraedri, una via per trovare i punti che sono vertici del poliedro risultante dall’intersezione è testare ogni spigolo del primo tetraedro contro ogni faccia del secondo e poi ripetere questa operazione a ruoli invertiti. Le coordinate baricentriche sono utili per controllare se un punto è effettivamente un punto di intersezione e non solo un punto candidato. È necessario prestare particolare attenzione alle performance computazionali; per una accurata approssimazione agli elementi finiti è richiesto l’uso di mesh fini, contenenti milioni di elementi, per cui i codici devono essere implementati in maniera efficiente per ridurre i tempi di esecuzione. Sono stati programmati algoritmi veloci in Python: l’idea è quella di usare operazioni vettoriali/tensoriali (memory intensive code) in sostituzione di cicli e operazioni iterative (CPU intensive code). Sono stati effettuati diversi test numerici per validare il codice, controllando diverse importanti proprietà come la conservazione di massa dell’approssimazione fluido-struttura.
File in questo prodotto:
Non ci sono file associati a questo prodotto.

È consentito all'utente scaricare e condividere i documenti disponibili a testo pieno in UNITESI UNIPV nel rispetto della licenza Creative Commons del tipo CC BY NC ND.
Per maggiori informazioni e per verifiche sull'eventuale disponibilità del file scrivere a: unitesi@unipv.it.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/20.500.14239/12222