Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2019:05_24

Commit - LPx - 24 Mai 2019

Initialisation elements FieldApplicator

FieldApplicator

  • Dans l'objectif de générer des VER (aka RVE) via GMSH, en faisant un petit test, je me suis rendu compte qu'il n'était pas bon de générer une interaction ne générant pas d'éléments : dans mon test, que je veux général, il peut y avoir des triangle ou des quadrangles de manière non exclusive ⇒ j'ai généré 2 FieldsApplicator : l'un sur des quad, l'autre sur des triangles.
  • Or le FieldApplicator, lors de la génération des éléments, essaye de générer des volumes, puis des sides et enfin des éléments linéiques. Il passe à l'étape ultérieure si aucun élément n'a été généré…
  • Cette manière de faire pose problème si le field Applicator n'a effectivement aucun élément (des pseudo éléments linéiques sont générés si aucun triangle ou quad n'ont été créés et fait planter Metafor plus loin.
FieldApplicator.cpp ligne 56 - 68

    for(int i=0; i<size(); ++i)
    {
        GObject &phy = (*this)[i];

        if(generateElementFromVolumes(phy, nbNods, degree, type)) continue;   // elements 3D
        if(generateElementFromSides(phy, nbNods, degree, type))   continue;   // elements 2D
        if(generateElementFromCurves(phy, nbNods, degree, type))  continue;   // elements 1D
        //if(generateElementFromPoints(phy, nbNods, degree, type))  continue;   // elements 0D

        // !! si on passait dans n'importe sens, des elems a 8 noeuds lies aux facettes
        // internes 3D seraient crees vu que celles ci ont pour father un volume.
    }
  • Or à travers les propriétés des éléments, on peut connaitre la dimension des cellules à générer (pas nécessairement la dimension de l'espace !!!). Pour récupérer cette dimension, j'ai ajouté la fonction getCellDimension() aux éléments (malheureusement comme beaucoup d'autres fonctions sur les éléments : à partir de la classe mère Element, par contre, j'ai ajouté un NOT_IMPLEMENTED pour forcer l'implémentation de la fonction pour tout élément le nécessitant).
  • La version développée est au final beaucoup plus explicite (et safe)
 
    getNbOfNodesAndDegreeFromElementType(nbNods, degree, cellDimension, type);
    for(int i=0; i<size(); ++i)
    {
        GObject &phy = (*this)[i];
        if (cellDimension == 3) generateElementFromVolumes(phy, nbNods, degree, type);   // elements 3D
        else if  (cellDimension == 2) generateElementFromSides(phy, nbNods, degree, type);   // elements 2D
        else if  (cellDimension == 1) generateElementFromCurves(phy, nbNods, degree, type);   // elements 1D
        //else if  (cellDimension == 0) generateElementFromPoints(phy, nbNods, degree, type);   // elements 0D        
    }
  • Tous les éléments construits par FieldApplicator sont impactés :
    • éléments volumiques
    • Coques & dérivés
    • XFEM (versions Ewen et Lara)
    • Ressorts (j'avais déjà eut des soucis avec les éléments de masses qui avait à cette occasion bénéficiés d'une interaction spécifique : Mechanism0DInteraction (commit 2855)
    • LagrangianMultiplierEdgeElement

Fichiers ajoutés/supprimés :

Added : 
Deleted : 
Moved : 

Tests ajoutés/supprimés

Adding: 
Deleted : 
Moved : 

Luc Papeleux 2019/05/23

commit/2019/05_24.txt · Last modified: 2019/05/24 15:01 by papeleux