d5.02.02 Introduire un nouveau type de maille ou un nouvel élément de référence#

Résumé :

Ce document décrit ce qu’il faut faire pour introduire un nouveau type de maille dans Cod e_Aster ou un nouvel élément de référence.

En quelques mots, pour ajouter un nouveau type de maille et/ou un nouvel élément de référence, il faut :

  • définir et introduire les caractéristiques de la maille et/ou de l’élément de référence dans le source de Code_Aster : position des nœuds, connectivité, fonctions de forme, position des points de Gauss , …

  • penser à l’impact au niveau des fonctionnalités existantes dans Code_Aster ,

  • enrichir les documentations «utilisateur» ( Doc U ) et les documentations «référence» ( Doc R ) relatives au fichier de maillage, aux fonctions de forme, …

  • enrichir des cas-tests existants afin de tester votre nouvel élément fini.

Un exemple complet sera décrit dans ce document.

Table des Matières

Introduction d’un nouveau type de maille ou un nouvel élément#

On propose dans cet exemple le développement d’un élément fini basé sur une nouvelle maille, un pentaèdre à 18 nœuds, dans le domaine de la mécanique non-linéaire.

Présentation de la maille et de l’élément de référence#

Un pentaèdre à 18 nœuds est une maille dont les nœuds sont localisés :

  • aux sommets (6 nœuds),

  • au milieu de chaque arête (9 nœuds),

  • au milieu des faces quadrangulaires (3 nœuds).

Une représentation de élément de référence associé à cette maille est la suivante:

../../../../_images/1000000000000230000001E1B37B0CB7E23D0EC4.png

Figure 2.1-1: Élément de référence

Pour réaliser une représentation de cet élément (dimension, position et ordre des nœuds, …), il est conseillé de consulter la documentation U3.01.00 («description du fichier de maillage de Code_Aster»). Par exemple, une convention sur l’ordre des nœuds y est présentée : on commence par ordonner les nœuds sommets, puis les nœuds milieux (sur les arêtes), et enfin les nœuds centraux (sur les faces).

Les coordonnées des nœuds sont :

\(x\)

\(y\)

\(z\)

\(\mathrm{N1}\)

-1.

\(\mathrm{N2}\)

-1.

\(\mathrm{N3}\)

-1.

\(\mathrm{N4}\)

\(\mathrm{N5}\)

\(\mathrm{N6}\)

\(\mathrm{N7}\)

-1.

0.5

0.5.

\(\mathrm{N8}\)

-1.

0.5.

\(\mathrm{N9}\)

-1.

0.5

\(\mathrm{N10}\)

\(\mathrm{N11}\)

\(\mathrm{N12}\)

\(\mathrm{N13}\)

0.5

0.5

\(\mathrm{N14}\)

0.5

\(\mathrm{N15}\)

0.5

\(\mathrm{N16}\)

0.5

0.5

\(\mathrm{N17}\)

0.5

\(\mathrm{N18}\)

0.5

Les fonctions de forme de cet élément sont les suivantes :

(5014)#\[\begin{split}\begin{array}{}{w}_{1}=xy(x-1)(2y-1)/2\\ {w}_{2}=xz(x-1)(2z-1)/2\\ {w}_{3}=x(x-1)(z+y-1)(2z+2y-1)/2\\ {w}_{4}=xy(x+1)(2y-1)/2\\ {w}_{5}=xz(x+1)(2z-1)/2\\ {w}_{6}=x(x+1)(z+y-1)(2z+2y-1)/2\\ {w}_{7}=2xyz(x-1)\\ {w}_{8}=-2xz(x-1)(z+y-1)\\ {w}_{9}=-2xy(x-1)(z+y-1)\end{array}\end{split}\]

Figure 2.1-2: fonctions de formes

Concernant les familles de points de Gauss à associer à cet élément, il est opportun de consulter la documentation R3.01.01 («fonctions de forme des éléments isoparamétriques»). Pour cet élément, il a été convenu de reprendre celles du pentaèdre à 15 nœuds.

Dans le paragraphe suivant, nous répondrons à la question suivante :

Comment introduire le nouveau type de maille ou élément de référence dans le Source de Code_Aster?

Introduction de la maille et de l’élément de référence dans le source de Code_Aster#

Avant de se pencher sur les fichiers fortran, on va enrichir les catalogues en question.

Au niveau des catalogues d’éléments#

Catalogue Commons/mesh_types.py#

Il faut définir dans ce catalogue, un nouveau type de maille, dont le nom doit être suffisamment explicite. On choisit le nom PENTA18 pour représenter une maille pendaèdrique à 18 nœuds.

Dans ce catalogue, on va définir ce nouveau type_maille : PENTA18 ainsi qu’un ou plusieurs élément de référence ( ELREFE ) pouvant s’appuyer sur ce type_maille. En général, on ne définit qu’un seul ELREFE pour un type_maille . Ici il s’agit de l” ELREFE “P18” .

Le type_mailleest purement géométrique (et topologique). Sa définition peut se résumer au schéma le représentant avec la numérotation locale de ses nœuds.

L” ELREFE concerne les éléments finis qui s’appuient sur ce type_maille : choix des fonctions de forme, choix des familles de points de Gauss.

On enrichit ce catalogue par le bloc suivant :

PENTA18 = MeshType(nbno=18, dim=3, code=”P18”)

P18 = Elrefe()

P18.addLocation(“NOEU”, 18)

P18.addLocation(“NOEU_S”, 6)

P18.addLocation(“FPG21”, 21)

PENTA18.addElrefe(P18)


On constate à la lecture de ce bloc que cette maille de type PENTA18est une maille 3Dà 18 nœuds. Elle est associée à l’élément de référence P18.Sur cet elrefe sont définies plusieurs familles de points de Gauss: “NOEU”, “NOEU_S” “FPG21”, …

L’étape suivante est d’utiliser cette maille dans une ou plusieurs modélisations de Code_Aster . On va enrichir le catalogue des phénomènes et modélisations.

Catalogue Commons/phenomenons_modelisations.py#

Il a été convenu que ce type_maille soit utilisé uniquement avec la modélisation 3D du phénomène MECANIQUE. Ainsi, nous avons ajouté un nouvel élément à cette modélisation, l’élément MECA_PENTA18. Le contenu de ce catalogue relatif à la modélisation 3D est le suivant :

phen.add(“3D”, Modelisation(dim=(3,3), code=”3D_”,

attrs=(

(AT.NBSIGM,”6”),

(AT.TYPMOD,”COMP3D”),

),

elements=(

(MT.HEXA8 , EL.MECA_HEXA8),

(MT.PENTA6 , EL.MECA_PENTA6),

(MT.PENTA15 , EL.MECA_PENTA15),

( MT.PENTA18 , EL.MECA_PENTA18 ),

Pour que cet élément puisse être pris en compte dans les calculs élémentaires, il faut l’ajouter aux catalogues d’éléments.

Catalogue Elements/meca_hexa20.py#

L’enrichissement de la modélisation 3D avec un nouvel élément (MECA_PENTA18) engendre un impact dans la catalogue d’élément meca_hexa20.py.

On doit y ajouter :

class MECA_PENTA18(MECA_HEXA20):

meshType = MT.PENTA18

nodes = ( SetOfNodes(“EN1”, (1,2,3,4,5,…,17,18,)), )

elrefe =(

ElrefeLoc(MT.P18, gauss = (“RIGI=FPG21”,”MASS=FPG21”, …),

mater=(“RIGI”,”MASS”,”NOEU”,”FPG1”,),),

ElrefeLoc(MT.QU9, gauss = (“RIGI=FPG9”,…),),

ElrefeLoc(MT.TR6, gauss = (“RIGI=FPG6”, …),),

)

La déclaration ci-dessus indique que le nouvel élément MECA_PENTA18 hérite de tous les calculs élémentaires définis pour l’élément MECA_HEXA20.

En revanche, on «surcharge» dans l’élément MECA_HEXA20: son type de maille (meshType), ses «ensembles de noeuds» (nodes) et sa liste d” «elrefe» (elrefe).

L’étape suivante est la saisie des caractéristiques de cet élément de référence. Elle n’a pas lieu dans les catalogues, mais dans des sources fortran.

Au niveau du source fortran#

On y définit les coordonnées des nœuds, les fonctions de forme et leurs dérivées, c’est à dire toutes les caractéristiques de ce nouvel élément.

Le tableau ci-dessous présente la liste des routines fortran à modifier pour prendre en compte le nouvel ELREFEP18 :

Routines

Fonctionnalités

elraca

Caractéristiques générales de l’élément de référence : nombre et noms des familles de points de Gauss, coordonnées des nœuds, …

elraga

Définition des poids et coordonnées des points de Gauss

elrfvf

Définition des fonctions de forme

elrfdf

Définition des dérivées des fonctions de forme

elrfd2

Définition des dérivées secondes des fonctions de forme

inmat5

Calcule la matrice de passage Gauss => nœuds à partir de la matrice Gauss => nœuds_sommets

inmat6

Calcule la matrice de passage Gauss => nœuds_sommets

nuelrf

Donne le numéro de la routine jni00i associé à un élément de référence.

Tableau 2.2.2-1: Routines propres au développement d’un nouvel ELREFE

Remarques :

Lors de l’introduction de l’ELREFE P18 , il a été également nécessaire de modifier (mais pour des raisons moins «essentielles» : ECLA_PG , PROJ_CHAMP , …) les routines suivantes : ecla3d, forme0, forme1,pj3dtr, pjxxut, elref7, ismali

Il faut être très vigilant quand on ajoute un nouveau type de maille car la liste des type_maille (ou du moins leur nombre) est connue en «dur» dans de nombreux sources. La liste est la suivante: iradhs.F90, ircam1.F90, ircame.F90, ircmpe.F90, ircmva.F90, irmhdf.F90, irmmf2.F90, irmmma.F90, irmpga.F90, lrcame.F90, lrfmed.F90, lrmhdf.F90, lrmmdi.F90, lrmmf1.F90, lrmmf3.F90, lrmmfa.F90, lrmmma.F90, lrmtyp.F90, lrvemo.F90.

A titre d’exemple, voici la liste des routines modifiées pour prendre en compte le nouveau type_maille PENTA18: momaba.F90, forme0.F90, forme1.F90, pjtyma.F90, pjxxut.F90, ermes3.F90, gmgnre.F90, lrmtyp.F90, cm1518.F90, cm2027.F90, cmlqlq.F90, cmqlql.F90, inigms.F90, iradhs.F90, ircam1.F90, irceca.F90, ircecs.F90, ircers.F90, ircmpr.F90, irgmtb.F90, irmac2.F90, irmaca.F90, irmasu.F90, irmmma.F90, lrvemo.F90, creaco.F90, utidea.F90.

A ce stade, on peut construire un exécutable qui peut correspondre à notre besoin. Mais deux questions restent en suspens :

  • quelles sont les fonctionnalités de pré et post-traitement à faire évoluer pour pouvoir générer un maillage composé de PENTA18 et pour pouvoir imprimer et visualiser les résultats issus du calcul élémentaire ?

  • quelles sont les autres fonctionnalités qui risqueraient d’être impactées (voire cassées) par cette évolution ?

Mise à jour des commandes de pré et post traitement dans Code_Aster#

Opérateur CREA_MAILLAGE#

Option QUAD_LINE#

Cette option permet de transformer un maillage quadratique en maillage linéaire. Dans notre cas, la maille PENTA18 est quadratique, elle est donc concernée par cette option. Sans intervention dans le source fortran, l’utilisation de cette option en présence de ce type de maille devrait conduire à un arrêt brutal de Code_Aster dans cet opérateur.

Routines

fonctionnalités

cmqlql

Transformation des mailles quadratiques en linéaire

cmqlma

Création des objets TYPMAILet CONNEX

cmqlnm

Récupération des nœuds milieux

cm2027 cm27ma cm27na cm27nd

Mise à jour de l’option HEXA20_27

Tableau 2.3.1.1-1: Routines de la commande CREA_MAILLAGE/QUAD_LINE impactées

Opérateur IMPR_RESU#

Pour pouvoir imprimer les résultats calculés à partir d’un modèle composé entre autres d’éléments MECA_PENTA18, il est indispensable de mettre à jour le source fortran de cet opérateur.

Le tableau suivant présente les routines concernées :

Format

Routines

Commentaires

GMSH

irgmsh

Écriture d’un champ

irgmor

Retourne l’ordre d’impression des éléments.

irgmma, irgmm3

Transforme les mailles en mailles linéaires

irgmcg, irgmce

Impression d’un cham_elem

irgmtb

Retourne le tableau de découpage des éléments

irmgms

Écriture du maillage au format GMSH

IDEAS

ircers, ircecs

Écriture d’un cham_elem

irmasu

Écriture du maillage

MED

irmmma

Écriture des mailles

ircam1, ircame

Écriture d’un champ

ircmpe, ircmpn, ircmpr

Écriture des profils des champs

ircmpva

Écriture des valeurs

irmhdf

Écriture du maillage

irmmf2

Écriture des familles

irmpga

Écriture des points de Gauss

Tableau 2.3.1.2-1: Routines de la commande IMPR_RESU impactées

Opérateurs LIRE_RESU, LIRE_CHAMP#

La modification de l’opérateur IMPR_RESU va de paire avec celle de LIRE_RESU(ou LIRE_CHAMP).

En effet, si l’on imprime un champ on doit être capable de le relire. C’est pourquoi, une intervention dans ces opérateurs est à prévoir.

Routines

Commentaires

lrmtyp

Types de mailles pour med

lrmpga

Localisation des points de Gauss

lrvemo

Vérifie la cohérence entre le modèle fourni et les données

lrcame

Lecture d’un champ

lrmhdf

Lecture du maillage

lrmmdi

Lecture des dimensions du maillage

lrmmf1, lrmmf3, lrmmfa

Lecture des familles

lrmmma

Lecture des mailles

op0150

Lecture d’un résultat

Tableau 2.3.2-1: Routines des opérateurs LIRE_RESU et LIRE_CHAMP impactées

Dans le paragraphe suivant, nous listons les opérateurs indirectement impactés par l’ajout d’une nouvelle maille ou d’un nouvel élément de référence.

Mise à jour des autres opérateurs de Code_Aster#

Il n’est pas facile d’établir une liste exhaustive.

Nous avons procédé par :

  • une recherche des chaines de caractères “PENTA”, “P15” dans le fortran via des “grep” pour sortir la liste des fichiers fortran liés aux pentaèdres.

  • une analyse minutieuse de chacun d’eux afin de déterminer ceux qui doivent être ajustés.

La liste est la suivante :

Opérateurs

Routines

Fonctionnalités

AFFE_CARA_ELEM: option : LIAISON_GROUP

panbno

Calcule le nombre de nœuds sommets, arêtes d’une maille

CREA_MAILLAGE: ECLA_PG

ecla3d

Décomposer les types des éléments 3D en sous éléments

DEFI_GROUP: CREA_GROUP_NO

gmgnre

Remplir la liste des nœuds sous sous-jacente à la liste de maille

PROJ_CHAMP

pjxxut

Prépare la liste des mailles et les listes de nœuds utiles à la projection

pjtyma

Retourne le type d’élément à partir du maillage

pj3dco

Créé la correspondance entre les nœuds et les mailles

pj3dtr

Transforme le corresp_2_maillageen corresp_2_maillage_final

MODI_MAILLAGE: MODI_MAILLE(option “NOEU_QUART”)

momaba

Modification des mailles via Barsum

barpen

Traitement des mailles (Barsum)

AFFE_CARA_ELEM

op0019

Ajout de l’élément MECA_PENTA18

CREA_MAILLAGE: LINE_QUAD

cmlqlq

PRE_GMSH

inigms

Initialisation des types de mailles pour le passage GMSHvers Aster

CALC_ERREUR: OPTION=”QIRE_ELEM”

te0368, ermes3

Calcule de l’estimateur d’erreur en mécanique 3D

CALC_ERREUR: OPTION=”ERME_ELNO”

te375

Calcule de l’estimateur d’erreur en mécanique 3D

Tableau 2.4-1: Liste des autres opérateurs et routines impactés

Validation#

La validation a consisté à :

  • tester le développement sur un cas-test interne composé d’un calcul de mécanique linéaire sur un élément dont le type de la maille est un PENTA18 . On a pu comparer les résultats avec ceux de l’étude similaire basée sur des PENTA15 ,

  • tester le développement sur un cas-test de référence en mécanique linéaire ( ZZZZ238B ),

  • tester le développement sur un cas-test de référence en mécanique non-linéaire (SSNP121Q),

  • tester le mot-clé QUAD_LINE de l’opérateur CREA_MAILLAGE (cas-test ZZZZ206A ),

  • tester le mot-clé PENTA15_18 de l’opérateur CREA_MAILLAGE ,

  • tester les IMPR_RESU aux différents formats, ainsi que LIRE_RESU et LIRE_CHAMP .

Le passage de la liste restreinte a été effectué pour vérifier l’ensemble des fonctionnalités de Code_Aster .

Documentations#

  • La représentation de votre nouvelle maille doit apparaître dans la documentation U3.01.00 («description du fichier de maillage de Code_Aster »),

  • Les fonctions de forme associées au nouvel élément de référence doivent être présentées dans le document R3.01.01 («fonctions de forme des éléments isoparamétriques»),

  • L’ajout de l’élément MECA_PENTA18 dans la modélisation 3Dengendre un travail documentaire dans le document U3.14.01(Modélisations 3Det 3D_SImécaniques)

  • Le développement de l’option PENTA15_18de CREA_MAILLAGE s’accompagne par l’enrichissement du document U4.23.02(opérateur CREA_MAILLAGE)

  • Les documentations des cas-tests de validation doivent être mis à jour. Ici, il s’agit des documents V6.03.121 ( SSNP121 ) et V1.01.238 ( ZZZZ238 ).