commit:2019:05_24
Table of Contents
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èreElement
, 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