X-ALE-FEM
La ALE est définie directement dans le jeu de données en python (et donc user-dependant). Le cas test ALE_frictionless permet de visualiser son principe de fonctionnement.
Généralités
La ALE en X-FEM utilise une partition de l'opérateur éulérien-lagrangien. La phase de relocalisation des noeuds consiste à repositionner le maillage dans sa position initiale. Vu que l'on utilise des XFEM, le domaine maillé peut être un “carré” maillé de manière régulière. La level-set informe de la position courante de la frontière de la structure.
La phase de transfert des données est par contre plus complexe : une fois que l'on a relocalisé les noeuds et reconstruit la nouvelle level set sur le maillage (traduisant la position de la frontière dans la configuration courante), il faut redéfinir les cellules d'intégration sur les éléments découpés par la frontière. Le transfert des données aux points de Gauss est réalisé en utilisant les éléments non-découpés et les cellules d'intégration. Cette phase de transfert s'appuie sur la méthode volumes finis (voir les méthodes de transfert entre maillages)
La phase ALE n'est activée que lorsque le maillage devient trop mauvais.
Principe
Pour faire bref, le fonctionnement est le suivant :
On fait un pas de calcul
On vérifie la qualité du maillage
Si le maillage a une qualité insuffisante, on enregistre les frontières actuelles de la structure (frontières matière et frontières de chargement)
On reconstruit un nouvel objet metafor et un nouveau domain en utilisant ces frontières
On transfert les données entre les deux maillages
On reprend le calcul sur ce nouveau maillage
Syntaxe des cas test
En-tête
Etant donné qu'on utilise les opérateurs de transfert utilisés dans Metafor, il est nécessaire d'importer mtXFEM et les toolbax de dataTransfer en en-tête du fichier.
from toolbox.importMetafor_XFEM import *
from wrap.mtDataTransfer import *
import toolbox.remeshedUtilities as remeshedUtilities
Les paramètres de calcul
Comparativement à un cas test X-FEM classique, il faut définir ici les paramètres de l'opérateur de transfert (principalement le nombre de points d'intégration par élément de transfert, étant donné que seule une méthode de transfert FV est pour le moment disponible).
Par ailleurs, deux tolérances sont introduites, correspondant à la valeur maximum du squish index et de l'aspect ratio, pour déterminer si une opération de remaillage est nécessaire
Variables globales
Certaines variables, utilisées par une grande partie des fonctions, sont définies de manière globale :
oldMetafor = None # Metafor avant remaillage
newMetafor = None # Metafor après remaillage
transferOperator = None # Opérateur de transfert
win = None # Fenêtre de visualisation
no = 0 # Paramètre de comptage des itérations
Les différentes fonctions
parms : définit les différents paramètres de calcul (comme d'habitude …).
expBndry : récupère la frontière de la structure en configuration déformée, ou la frontière chargée en configuration déformée, de manière à pouvoir définir ces frontières sur la configuration repositionnée après un remaillage. idx est l'indice de l'interaction dont on souhaite exporter la frontière, geo2 l'objet géométrique dans lequel on veux l'enregistrer (en pratique l'objet géométrie du nouveau Metafor).
createTransferOperator : crée l'opérateur de transfert et associe les paramètres de calcul (interaction depuis et vers laquelle le transfert est effectué, paramètres de la
FVTM, etc…)
createMetafor : cette fonction est presque identique à celle d'une intégration lagrangienne classique. Les seules différences sont dans le getTimeStepManager (ou on définit un temps de début et de fin correspondant à un pas au bout duquel on vérifiera si une phase
ALE est nécessaire) et dans la définition des frontière (à la première itération, on utilise la définition géométrique de l'utilisateur, et aux suivantes on utilise le résultat de la fonction expBndry).
XFEMTimeIntegration : en fonction du résultat de la fonction restartNeeded on continue l'intégration sur l'ancien domaine (si un redémarrage n'est pas nécessaire) ou on fait une animation des résultats sur l'ancien maillage avant de reconstruire le domaine et poursuivre le calcul.
main : fonction principale qui définit le workspace et appele l'intégration temporelle.
setWorkingDirectory : nettoye le workspace et le redéfinit au besoin
makeAnimation2 : réalise l'animation des résultats du calcul. La fonction win.add permet de choisir les composants à intégrer à l'animation.
getOldMetafor, getNewMetafor et getTransferOperator : je ne vais pas vous prendre pour des imbéciles et vous expliquer l'utilité de ces fonctions
Limitations
Il y a de gros progrès à faire sur la X-ALE-FEM… Je vous laisse aller consulter les documents sur le FTP de Metafor (projet/ThixoWal) ou demander ces documents à une personne y ayant accès.
Pour faire bref
Le problème de concentrations de contraintes est exacerbé par le transfert au moment du remaillage et les défauts topologiques.
Des pertes de chargements dus à la morphologie de la librairie peuvent apparaitre (ce qui rend le modèle instable).