d4.10.02 Structures de Données liées à X-FEM#
Résumé
Ce document décrit les structures de données (SD) liées à la méthode X-FEM. Ces objets se trouvent dans plusieurs SD:
sd_fiss_xfem, produite par l’opérateur DEFI_FISS_XFEM [U4.82.08] et utilisée pour un calcul de mécanique de la rupture dans le cadre de la méthode X-FEM [R7.02.12]. Cette structure de donnée est aussi utilisée et produite par l’opérateur PROPA_FISS [U4.82.11],
sd_modele_xfem, produite par l’opérateur MODI_MODELE_XFEM [U4.41.11],
SD créées pour la résolution du contact..
Arborescence#
sd_fiss_xfem (K8) .:=record
♦ '.INFO' OJB S V K16
'.MAILLAGE' OJB S V K8
◊ '.CHAMPS.LVS' OJB S V L
♦ '.LTNO' CHAM_NO
'.LNNO' CHAM_NO
'.GRLTNO' CHAM_NO
'.GRLNNO' CHAM_NO
'.BASLOC' CHAM_NO
'.STNO' CHAM_NO
'.STNOR' CHAM_NO
♦ '.GROUP_MA_ENRI' OJB S V I
'.GROUP_NO_ENRI' OJB S V I
'.CARAFOND' OJB S V R
◊ % si la structure contient un fond de fissure
'.FONDFISS' OJB S V R
'.BASEFOND' OJB S V R
'.FONDMULT' OJB S V I
'.LTNS' OJB S V K24
'.LTNT' OJB S V K16
'.FOND.TAILLE_R' OJB S V R
'.NOFACPTFON' OJB S V I
◊ % si des mailles sont entièrement coupées par la fissure
'.MAILFISS.HEAV' OJB S V I
◊ % si des mailles contiennent le fond de fissure
'.MAILFISS.CTIP' OJB S V I
◊ % si des mailles sont coupées par la fissure et contiennent le fond de fissure
'.MAILFISS.HECT' OJB S V I
◊ % si du contact est défini sur certaines fissures du modèle
'.MAILFISS.CONT' OJB S V I
◊ % si la fissure est issue d’une propagation par l’opérateur PROPA_FISS
'.PRO.RAYON_TORE' OJB S V R
'.PRO.NOEUD_TORE' OJB S V L
'.PRO.NOEUD_PROJ' OJB S V L
◊ % si une grille est associée à la fissure par DEFI_FISS_XFEM
'.GRI.MAILLAGE' OJB S V K8
'.GRI.LNNO' CHAM_NO
'.GRI.LTNO' CHAM_NO
'.GRI.GRLNNO' CHAM_NO
'.GRI.GRLTNO' CHAM_NO
◊ % si la grille contient un fond de fissure
'.FONDFISG' OJB S V R
◊ % si des relations d’égalité entre inconnues de contact sont imposées
'.LISEQ' OJB S V I
◊ % si des relations d’égalité entre inconnues de contact sont imposées et si il y a des éléments multi-Heaviside
'.LISEQ_LAGR' OJB S V I
◊ % si il y a des groupes d'arêtes vitales connectées
'.CNCTE' OJB S V I
◊ % si le mot clé JONCTION a été utilisé
'.JONFISS' OJB S V K8
'.JONCOEF' OJB S V I
sd_modele_xfem (K8) .:=record
♦ '.MODELE_SAIN' OJB S V K8
♦ '.TOPOSE.PIN' CHAM_ELEM
'.TOPOSE.PMI' CHAM_ELEM
'.TOPOSE.CNS' CHAM_ELEM
'.TOPOSE.HEA' CHAM_ELEM
'.TOPOSE.LON' CHAM_ELEM
'.TOPOSE.PAI' CHAM_ELEM
'.TOPOSE.PJO' CHAM_ELEM
♦ '.TOPONO.NHO' CHAM_ELNO
'.TOPONO.HSE' CHAM_ELEM
◊ % si il y a des éléments multi-Heaviside
“.TOPONO.HFA” CHAM_ELEM
♦ “.TOPOFAC.PI” CHAM_ELEM
“.TOPOFAC.AI” CHAM_ELEM
“.TOPOFAC.CF” CHAM_ELEM
“.TOPOFAC.LO” CHAM_ELEM
“.TOPOFAC.BA” CHAM_ELEM
“.TOPOFAC.OE” CHAM_ELEM
“.TOPOFAC.GE” CHAM_ELEM
“.TOPOFAC.GM” CHAM_ELEM
◊ % si il y a des éléments multi-Heaviside
“.TOPOFAC.HE” CHAM_ELEM
♦ “.LTNO” CHAM_ELNO
“.LNNO” CHAM_ELNO
“.BASLOC” CHAM_ELNO
“.STNO” CHAM_ELNO
“.NOXFEM” CHAM_ELNO
◊ % si des éléments stockent l’information de plusieurs fissures
“.FISSNO” CHAM_ELNO
“.HEAVNO” CHAM_ELNO
♦ “.XFEM_CONT” OJB S V I
♦ “.NFIS” OJB S V I
“.FISS” OJB S V K8
“.XMAFIS” CHAM_ELEM
“.PRE_COND” OJB S V K8
sd_contact_xfem (K16) .:=record
♦ “.CARACF” OJB S V R
“.ECPDON” OJB S V I
“.METHCO” OJB S V I
“.XFIMAI” OJB S V K8
“.XNRELL” OJB S V K24
◊ % cartes de contact pour l’approche grand glissement
“.XFPO” CARTE
“.XFST” CARTE
“.XFPI” CARTE
“.XFAI” CARTE
“.XFCF” CARTE
“.XFHF” CARTE
“.XFPL” CARTE
Contenu des objets de la sd_fiss_xfem#
Remarque préliminaire sur la distinction entre 2D et 3D:
La présence de certains objets dans la structure de données sd_fiss_xfem dépend parfois de la dimension du maillage sur lequel est représenté la fissure. Ainsi, la distinction entre 2D et 3D se rapporte à la dimension du maillage contenu dans le modèle donné par l’utilisateur sous le mot-clé MODELE de la commande DEFI_FISS_XFEM.
Objets généraux#
.INFO#
Le concept .INFO est un vecteur de \(\mathit{K16}\) de longueur 3 contenant des informations générales.
La 1ère composante de ce vecteur renseigne sur le type de discontinuité relative à la sd_fiss_xfem: soit une fissure, soit une interface. La 2ème composante indique le champ discontinu: soit le champ de déplacement, soit le champ de contrainte. La 3ème composante précise si le fond est fermé ou ouvert.
.INFO(1) = “FISSURE” ou “INTERFACE”
.INFO(2) = “DEPL” ou “SIGM”
.INFO(3) = “OUVERT” ou “FERME”
On accède aux valeurs de ce vecteur uniquement par la routine dismoi.f.
Exemple:
CALL DISMOI(“F”,”TYPE_DISCONTINUITE”,FISS,”FISS_XFEM”,IBID,TYPDIS,IRET)
CALL DISMOI(“F”,”CHAM_DISCONTINUITE”,FISS,”FISS_XFEM”,IBID,TYPCHA,IRET)
CALL DISMOI(“F”,”TYPE_FOND”,FISS,”FISS_XFEM”,IBID,TYPFON,IRET)
.MAILLAGE#
Le concept .MAILLAGE est un vecteur de K8 de longueur 1 contenant le nom du maillage sur lequel est construite la fissure (valeur du mot-clé MAILLAGE en entrée de DEFI_FISS_XFEM). En cas de propagation, ce vecteur est dupliqué de l’ancienne fissure à la nouvelle fissure.
On accède à ce vecteur uniquement par la routine dismoi.f.
Exemple:
CALL DISMOI(“F”,”NOM_MAILLAGE”,FISS,”FISS_XFEM”,IBID,MODELE,IRET)
Objets relatifs aux level sets#
.CHAMPS.LVS#
Le concept .CHAMPS.LVS est un vecteur de booléens de longueur 1. Si ce vecteur est présent (et sa valeur est alors toujours égale à TRUE), les champs level set de la fissure courante ont été donnés directement par l’utilisateur (par DEFI_FISS_XFEM en utilisant les mots-clé CHAMP_NO_LSN et CHAMP_NO_LST) et ils n’ont pas été calculés.
Si les deux champs ont été extraits d’une fissure propagée par PROPA_FISS, les informations sur la localisation du domaine (.PRO.RAYON_TORE (§ 3.4.1 ) et .PRO.NOEUD_TORE (§ 3.4.2 )) et sur l’utilisation d’une grille auxiliaire pour la fissure propagée (.GRI.MAILLAGE (§ 3.4.4 ), .GRI.L*NO (§ 3.4.5 ) et .GRI.GRL*NO (§ 3.4.6 )) ont été perdues et la SD de la fissure courante ne les contient pas. En effet ces informations sont stockées au niveau de la SD fiss_xfem et pas au niveau de la SD champ_no. Cela pose problème dans le cas où la fissure courante est propagée par PROPA_FISS parce que l’on pourrait obtenir des faux résultats. En effet dans les cas où la localisation du domaine ou la grille auxiliaire ont été utilisés, les level sets ont été mises à jours seulement dans un petit domaine autour du fond de la fissure: dans le premier cas cela est évident, et dans le deuxième cas les level sets ont été projetées sur le maillage physique avec un domaine de projection localisé indépendamment de l’utilisation de la localisation d’un domaine de calcul en fond de fissure sur la grille. En dehors du domaine de localisation/projection la valeur des levels set est la même que celle calculée pour définir la fissure: les level sets ne sont donc pas continues à la limite du domaine de localisation/projection et la description de la fissure n’est donc pas correcte sur tout le maillage. Si les informations sur le domaine de localisation et sur la grille auxiliaire ne sont pas stockées dans la SD de la nouvelle fissure, PROPA_FISS propage la fissure en considérant que les level sets sont correctes sur tout le maillage. Quand le fond de la fissure propagé sort du domaine de localisation/projection utilisé pour la fissure initiale avant propagation, on obtient des résultats faux et on a des problèmes de convergence dans la réinitialisation et la réorthogonalisation des level set.
Dans le cas où les level sets données pour définir la nouvelle fissure n’ont pas été extraites d’une fissure propagée par PROPA_FISS, ou bien que la localisation du domaine ou de la grille auxiliaire n’ont pas été utilisées avec PROPA_FISS, les champs level sets donnés représentent correctement la fissure sur tout le maillage et la propagation de la nouvelle fissure peut être calculée sans problème par PROPA_FISS.
Si ce vecteur est présent dans la SD de la fissure, PROPA_FISS émet une alarme pour que l’utilisateur vérifie s’il n’est pas en présence d’un champ extrait d’une fissure propagée avec PROPA_FISS qu’il utiliserait avec localisation du domaine de calcul ou bien avec une grille auxiliaire.
.LTNO et .LNNO#
Le concept .LTNO (resp. .LNNO) est un champ aux nœuds (CHAM_NO) scalaire qui contient pour chaque nœud du maillage la valeur réelle de la level set tangente (resp. normale) à la fissure.
.GRLTNO et .GRLNNO#
Le concept .GRLTNO (resp. .GRLNNO) est un champ aux nœuds (CHAM_NO) à 3 composantes réelles. Il contient pour chaque nœud du maillage les valeurs du gradient de la level set tangente (resp. normale) dans les 3 directions de l’espace.
Soit \(i\) le \(i\) ème nœud du maillage,
V =.GRLTNO(i); |
|
V(1) |
Valeur du gradient suivant \(x\) de la level set tangente, calculé au \(i\) ème nœud |
V(2) |
Valeur du gradient suivant \(y\) de la level set tangente, calculé au \(i\) ème nœud |
V(3) |
Valeur du gradient suivant \(z\) de la level set tangente, calculé au \(i\) ème nœud |
En 2D, on a seulement 2 composantes suivant \(x\) et \(y\) .
.BASLOC#
Le concept .BASLOC est un champ aux nœuds (CHAM_NO) à 9 composantes réelles (en 3D). Il contient l’origine et les vecteurs de la BASe LOCale au fond de fissure. Pour chaque nœud, les trois premières composantes sont les coordonnées du projeté du nœud sur le fond, qui correspond à l’origine de la base locale. Les trois composantes suivantes sont les coordonnées du 1er vecteur (GRLT) de la base. Les trois dernières composantes sont les cordonnées du 2ème vecteur (GRLN) de la base. Le 3ème vecteur de la base n’est pas stocké, car il se détermine facilement comme étant le produit vectoriel des 2 premiers vecteurs.
Soit \(i\) le \(i\) èmenœud du maillage,
V =.BASLOC(i); |
|
V(1) |
Coordonnée suivant \(x\) du projeté du nœud i sur le fond |
V(2) |
Coordonnée suivant \(y\) du projeté du nœud i sur le fond |
V(3) |
Coordonnée suivant \(z\) du projeté du nœud i sur le fond |
V(4) |
Coordonnée suivant \(x\) du 1ervecteur de la base locale |
V(5) |
Coordonnée suivant \(y\) du 1ervecteur de la base locale |
V(6) |
Coordonnée suivant \(z\) du 1ervecteur de la base locale |
V(7) |
Coordonnée suivant \(x\) du 2èmevecteur de la base locale |
V(8) |
Coordonnée suivant \(y\) du 2èmevecteur de la base locale |
V(9) |
Coordonnée suivant \(z\) du 2èmevecteur de la base locale |
En 2D, on a seulement 2 composantes suivant \(x\) et \(y\) , soient 6 composantes pour BASLOC. Rappelons qu’en 2D, soit il n’y a qu’un seul fond de fissure, qui est alors un point (cas des fissures 2D débouchantes) et dans ce cas tous les nœuds du maillage possèdent le même projeté sur le fond de fissure, soit il y a deux fonds de fissure, donc deux points (cas des fissures 2D non débouchantes) et dans ce cas, une partie des nœuds du maillage se projette sur le 1er fond de fissure et une autre partie des nœuds du maillage se projète sur le 2ème fond de fissure.
Remarques :
Pour un front de fissure discontinu, la projection utilisée ci-dessus doit être effectuée avec précaution. Il convient de distinguer deux types de discontinuités :
soit le front est continu mais coupé par une discontinuité matérielle (trou dans un pièce) ce qui génère un front discontinu dans la matière, mais prolongeable par continuité hors de la matière,
soit le front est réellement discontinu dans la définition de la fissure à propager.
Avant projection, il faut au préalable tester si le front est virtuellement continu ou s’il est réellement discontinu. Pour détecter alors la discontinuité du front de fissure, on s’appuie sur un critère simple qui consiste à tester la colinéarité les vecteurs de propagation (1er vecteur de la base locale) aux extrémités des fronts de fissure entre deux fronts consécutifs:
\(\mathit{acos}(\vec{{V}_{{P}_{i}}}.\vec{{V}_{{P}_{\text{i+1}}}})<10°\)
Si le seuil angulaire ci-dessus est dépassé (10° d’angle), on traite le front se terminant en \({P}_{i}\) et le front commençant en \({P}_{\text{i+1}}\) comme deux fronts séparés lors de la projection de chaque nœud sur le front de fissure global.
En deux dimensions, il est commode de «retourner» le premier vecteur de la base locale (vecteur de propagation) pour modifier le signe du mode de cisaillement plan (ou mode 2) et obtenir un signe toujours positif. Cette modification n’est effectuée localement qu’à des fins de post-traitement et n’a pas d’incidence sur la structure de données décrite dans ce paragraphe.
.FONDFISS#
Le vecteur .FONDFISS est un vecteur de réels contenant les coordonnées des points du fond de fissure. Les points sont ordonnés suivant la méthode décrite dans le document [R7.02.12], de manière à ce qu’une abscisse curviligne puisse être définie.
Si NFON est le nombre de points du fond de fissure, alors la longueur du vecteur .FONDFISS est 4xNFON. Pour chaque point du fond de fissure, les 3 premières composantes correspondent aux 3 coordonnées (en 3D) du point, et la quatrième composante est son abscisse curviligne.
Lorsque le fond est fermé, le dernier point est égal au premier. Les 4 derniers termes du vecteur .FONDFISS sont alors identiques aux 4 premiers.
Cette structure n’est pas modifiée en 2D. Cependant on utilise uniquement les 2 premières composantes, car ni l’abscisse curviligne ni la dernière composante géométrique ne sont pertinentes en 2D.
Cet objet n’est créé que si il existe au moins un point du fond de fissure.
.BASEFOND#
Le vecteur .BASEFOND est un vecteur de réels contenant la base locale associée à chaque point du fond de fissure.
Si NFON est le nombre de points du fond de fissure et si NDIM est la dimension du modèle (2 en 2D et 3 en 3D), alors la longueur du vecteur .BASEFOND est \(2\times \mathit{NDIM}\times \mathit{NFON}\) . En fait ce vecteur contient, successivement pour tous les points du fond, les composantes (2 en 2D et 3 en 3D) du vecteur normal au plan de la fissure et de la direction de propagation (vecteur tangent au plan de la fissure).
En 3D, lorsque le fond est fermé, le dernier point est égal au premier. Les 4 derniers termes du vecteur .BASEFOND sont alors identiques aux 4 premiers.
.FONDMULT#
En 3D, le fond de fissure est une ligne soit fermée (fissure non débouchante), soit ouverte (fissure débouchante). Dans la plupart des cas, le fond de fissure est une ligne continue, comme celui de la fissure circulaire représentée sur la Figure 3.2.7-1 .
Figure 3.2.7-1 Cas d’un fond de fissure continu.
Cependant, il peut arriver que le fond de fissure soit en fait composé de plusieurs morceaux discontinus. C’est le cas par exemple de la fissure circulaire représentée sur la Figure 3.2.7-2 . Dans ce cas, on parle toujours du fond de fissure, comme l’ensemble des morceaux du fond. On dit que le fond de fissure est un fond multiple. Sur l’exemple de la Figure 3.2.7-2 , le fond de fissure est composé des lignes courbes \((\mathit{BC})\) , \((\mathit{DE})\) , \((\mathit{FG})\) et \((\mathit{HA})\) .
Figure 3.2.7-2 Cas d’un fond de fissure multiple.
Le vecteur .FONDMULT est un vecteur d’entiers contenant les indices des points de départ et d’arrivée des différents morceaux du fond de fissure dans le .FONDFISS. Si NFONFI est le nombre de morceaux du fond de fissure, alors le vecteur .FONDMULT est de dimension 2x NFONFI.
Par exemple:
Si FONDMULT = ( 1 ; 8 ; 9 ; 12 )
Alors Morceau n°1 du fond de fissure: du point 1 au point 8 du .FONDFISS
Morceau n°2 du fond de fissure: du point 9 au point 12 du .FONDFISS
En 2D, chaque point du fond de fissure constitue à lui seul un fond, le vecteur .FONDMULT est néanmoins créé. Par exemple pour 2 fonds de fissures, il vaudra: FONDMULT = (1; 1; 2; 2)
L’objet est créé sous réserve qu’il existe au moins un point du fond de fissure.
.CARAFOND#
Le vecteur .CARAFOND est un vecteur de réels de dimension 2. Il contient les paramètres utilisateurs concernant le fond de fissure. La première composante est le rayon d’enrichissement des éléments et la deuxième composante est le nombre de couches d’éléments à enrichir.
Ainsi:
CARAFOND(1)= RAYON_ENRI si RAYON_ENRI est fourni par l’utilisateur,
0 sinon.
CARAFOND(2)= NB_COUCHES si NB_COUCHES est fourni par l’utilisateur,
0 sinon.
Ces données sont celles fournies par l’utilisateur dans la commande DEFI_FISS_XFEM. Elles sont stockées car elles servent de nouveau dans la commande PROPA_FISS pour générer une fissure propagée.
.LTNS#
Le vecteur .LTNS est un vecteur de chaines de caractères contenant les deux tables associées à la fissure. Ces tables sont accessibles via la commande RECU_TABLE.
La première table nommée FOND_FISS contient les coordonnées des points de fonds de fissure.
En 2D, celle-ci est constituée du numéro de fond de fissure et des coordonnées \(x\) et \(y\) . Ainsi, l’affichage de la table sera:
NUME_FOND COOR_X COOR_Y
En 3D, celle-ci décrit chaque fond de fissure. Ainsi, pour chaque fond de fissure i, la table fournira l’abscisse curviligne et les coordonnées des points en fond de fissure i. L’affichage de la table sera:
NUME_FOND NUME_PT ABS_CURV COOR_X COOR_Y COOR_Z
La seconde table nommée NB_FOND_FISS contient le nombre de fonds de fissure.
La construction de ces tables repose sur l’utilisation des vecteurs .FONDFISS et .FONDMULT.
.LTNT#
Le vecteur .LTNT est un vecteur de chaines de caractères contenant les noms des deux tables associées à la fissure à fournir à la commande RECU_TABLE. Il s’agit de FOND_FISS et de NB_FOND_FISS .
.FOND.TAILLE_R#
Ce vecteur contient pour chacun des nœuds du fond, une estimation de la taille maximale suivant la direction de propagation, des mailles qui leur sont connectées. Ces tailles sont ordonnées suivant l’ordre des nœuds donné dans le vecteur .FONDFISS.
On note \(\overrightarrow{{V}_{{P}_{i}}}\) le vecteur de propagation de la base locale au nœud du fond Ni et \(\vec{{a}_{\mathit{ijk}}}\) la kème arête de la jème maille à laquelle appartient le nœud Ni.
Pour chaque nœud du fond Ni, on projette les arêtes \(\vec{{a}_{\mathit{ijk}}}\) sur le vecteur de direction de propagation \(\overrightarrow{{V}_{{P}_{i}}}\) . La taille maximale \({T}_{i}\) des mailles connectées à Ni est la valeur maximale des valeurs absolues de ses projections. Autrement dit, la taille \({T}_{i}\) est égale à
\({T}_{i}=\underset{\begin{array}{c}1\le j\le {\mathit{Nb}}_{\mathit{mailles},i}\\ 1\le k\le {\mathit{Nb}}_{\mathit{arêtes},j}\end{array}}{max}\left(∣\vec{{a}_{\mathit{ijk}}}.\vec{{V}_{{P}_{i}}}∣\right)\) ,
où \({\mathit{Nb}}_{\mathit{mailles},i}\) est le nombre de mailles connectées au nœud Ni et \({\mathit{Nb}}_{\mathit{arêtes},j}\) est le nombre d’arêtes de la jème maille connectée au nœud Ni.
.NOFACPTFON#
'.NOFACPTFON ' : S V I
Cet objet contient les numéros des nœuds sommets (numérotation globale du maillage) des faces des éléments parents contenant les points du fond de fissure.
Soit :
V = .NOFACPTFON
NFON = nombre de points du fond de fissure
n = LONG(V) = 4xNFON
pour i = 1, NFON :
V(4*(i-1)+1) |
numéro global du 1ernœud sommet de la face contenant le point du fond numéro i |
V(4*(i-1)+2) |
numéro global du 2èmenœud sommet de la face contenant le point du fond numéro i |
V(4*(i-1)+3) |
numéro global du 3èmenœud sommet de la face contenant le point du fond numéro i |
V(4*(i-1)+4) |
|
Remarques:
Pour chaque point du fond de fissure, la face dont les numéros desnœuds sont stockés dans .NOFACPTFONn’est pas nécessairement unique (par exemple cas dégénéré d’un point du fond coïncidant avec une arête ou un nœud): il s’agit de la dernière face trouvée par la routine intfacdans xptfon(phase de recherche des points du fond de fissure dans l’opérateur DEFI_FISS_XFEM)
L’objet .NOFACPTFONest créé uniquement si la structure contient un fond de fissure.
Objets relatifs à l’enrichissement#
.GROUP_MA_ENRI#
Le vecteur .GROUP_MA_ENRI contient la liste des numéros de mailles de la zone à enrichir.
.GROUP_NO_ENRI#
Le vecteur .GROUP_NO_ENRI contient la liste des numéros de nœuds de la zone à enrichir.
Notons que ce vecteur peut se déduire de .GROUP_MA_ENRI.
Remarque:
Ces deux derniers vecteurs sont stockés car on souhaite réutiliser dans PROPA_FISS les informations liées au mot-clé GROUP_MA_ENRI de DEFI_FISS_XFEM. Et la seule possibilité de transmettre l’information est de stocker les numéros des mailles et des nœuds des mailles de GROUP_MA_ENRI.
.STNO#
Le concept .STNO est un champ aux nœuds (CHAM_NO) à une composante entière, correspondant au statut du nœud en question.
Si le nœud a son support entièrement coupé par la fissure, son statut vaut 1.
Si le nœud est dans une zone «proche» (cette notion est définie suivant un critère défini par l’utilisateur) du fond de fissure, son statut vaut 2.
Si le nœud satisfait les deux conditions précédentes, son statut vaut 3.
Dans tous les autre cas, le statut vaut 0.
.STNOR#
Le concept .STNOR est exactement le même champ que .STNO mais avec des composantes réelles. Il pourra donc être utilisé pour la visualisation avec salome par exemple.
.MAILFISS.HEAV#
Le vecteur .MAILFISS.HEAV est un vecteur d’entiers contenant la liste des numéros des mailles enrichies de type Heaviside (maille «RONDE»).
.MAILFISS.CTIP#
Le vecteur .MAILFISS.CTIP est un vecteur d’entiers contenant la liste des numéros des mailles enrichies de type Crack-Tip (maille «CARREE»).
.MAILFISS.HECT#
Le vecteur .MAILFISS.HECT est un vecteur d’entiers contenant la liste des numéros des mailles enrichies de type Heaviside-Crack-Tip (maille «RONDE-CARREE»).
.MAILFISS.CONT#
Le vecteur .MAILFISS.CONT est un vecteur d’entiers contenant la liste des numéros des mailles sur lesquelles du contact est défini pour la fissure. Il s’agit des mailles:
Soit strictement intersectées par la fissure (type 1 sur la fig.)
Soit présentant une arête (en 2D) ou une face (en 3D) confondue avec la fissure, et située du côté esclave (type 2 sur la fig.)
Soit, en multi-fissuration, des mailles présentant un enrichissement Heaviside pour la fissure considérée et qui entrent dans une des deux premières catégories pour une autre fissure (type 3 sur la fig.).
En effet, pour limiter l’introduction de nouveaux éléments lors de l’implémentation du contact avec multi-fissuration, le nombre de degrés de liberté de contact est toujours égal au nombre de degrés de liberté de Heaviside, quitte à mettre ensuite les degrés de liberté de contact superflus à 0. D’où la nécessité d’inclure les mailles de ce troisième type dans le groupe des mailles «en contact» (mais leurs degrés de liberté seront mis à 0).
Figure 3.3.8-1exemple du groupe .MAILFISS.CONT d’une fissure.
.JONFISS#
Le vecteur .JONFISS contient la liste des fissures mères sur lesquelles se branche la fissure. Il est notamment utilisé dans l’opérateur MODI_MODELE_XFEM pour le découpage et l’enrichissement multiple. Ce vecteur est créé si l’utilisateur fait appel au mot clé JONCTION dans DEFI_FISS_XFEM.
.JONCOEF#
Le vecteur .JONCOEF est de même longueur que .JONFISS. Il contient la liste des coefficients à associer aux level sets normales des fissures de .JONFISS pour retrouver le domaine dans lequel la fissure branchée est définie. Ces coefficients valent \(+1\) ou \(-1\) et sont calculés automatiquement. La fissure branchée est alors définie dans la zone où pour toutes les fissures mères \(i\) , les produits JONCOEF(i)*lsn(JONFISS(i)) sont négatifs.
Figure 3.3.10-1signe des levels set des fissures mères à gauche, signe obtenu après multiplication par JONCOEF à droite, et définition de la fissure branchée du côté moins.
On assure ainsi que la fissure branchée est dans la zone «moins» par rapport aux fissuresmères. La figure montre un exemple d’utilisation de .JONCOEFet de .JONFISSafin de définir la fissure 3. Sur cette figure la fissure 3 est branchée sur la fissure 2, elle même branchée sur la fissure 1, .JONFISSde la fissure 3 contient donc les fissures 1 et 2. Les signes des level sets des fissures 1 et 2 sont donnés sur la figure de gauche:on en déduit les valeurs de JONCOEF \((-1,1)\) ainsi que la répartition des signe de \(\mathit{coef}(1)\times \mathit{lsn}(1)\) et \(\mathit{coef}(2)\times \mathit{lsn}(2)\) sur la figure de droite. La fissure 3 est définie dans la zone où les 2 signes sont moins.
En conclusion.JONFISSet .JONCOEFpermettent de définir la fissure 3 avec ses level sets normale et tangente habituelles ainsi que les level set normales des fissures mères, auxquelles on aaccès de manière élémentaire.
Objets relatifs à la propagation#
.PRO.RAYON_TORE#
Vecteur de réels de longueur égale à 1.
Dans le cas où ce vecteur existe dans la SD, le calcul de la propagation de la fissure a été fait en utilisant la localisation du domaine de mise à jour des level sets. Le domaine coïncide avec un tore en 3D ou un cercle en 2D construits autour du fond de la fissure. Le rayon de ce tore ou de ce cercle est stocké dans cet objet.
Dans le cas où ce vecteur n’existe pas dans la SD, tout le modèle a été utilisé pour le calcul de la propagation de la fissure.
.PRO.NOEUD_TORE#
Vecteur de booléens de longueur égale au nombre de nœuds du maillage sur lequel la fissure a été défini ou, dans le cas où une grille est associée à la fissure, au nombre de nœuds de la grille.
Dans le cas où ce vecteur existe dans la SD, le calcul de la propagation de la fissure a été fait en utilisant la localisation du domaine de mise à jour des level sets. Pour chaque nœud du maillage (ou de la grille), une valeur TRUE signifie que le nœud est compris dans le domaine utilisé pour le calcul. Par exemple, si la valeur de la \(i\) ème composante du vecteur est TRUE, le \(i\) ème nœud du maillage (ou de la grille) est compris dans le domaine; par contre, si la valeur de la \(i\) ème composante du vecteur est FALSE, le \(i\) ème nœud du maillage (ou de la grille) est en dehors du domaine.
Dans le cas où ce vecteur n’existe pas dans la SD, tout le modèle (ou toute la grille) a été utilisé pour le calcul de la propagation de la fissure.
.PRO.NOEUD_PROJ#
Vecteur de booléens de longueur égale au nombre de nœuds du maillage sur lequel la fissure a été définie.
Dans le cas où ce vecteur existe dans la SD, le calcul de la propagation de la fissure a été fait sur la grille auxiliaire associée à la fissure et les level sets calculées ont été projetées sur le maillage. Pour chaque nœud du maillage, une valeur TRUE signifie que le nœud est compris dans le domaine de projection. Par exemple, si la valeur de la \(i\) ème composante du vecteur est TRUE, le \(i\) ème nœud du maillage est compris dans le domaine; par contre, si la valeur de la \(i\) ème composante du vecteur est FALSE, le \(i\) ème nœud du maillage est en dehors du domaine et les valeurs des level sets portées par ce nœud n’ont pas été mises à jour.
Dans le cas où ce vecteur n’existe pas dans la SD, le calcul de la propagation de la fissure a été fait directement sur le maillage.
.GRI.MAILLAGE#
Vecteur de K8 de longueur égale à 1.
Nom du maillage de la grille associée à la fissure. Si cet objet n’existe pas, aucune grille n’est associée à la fissure.
.GRI.LTNO et .GRI.LNNO#
Le concept .GRI.LTNO (resp. .GRI.LNNO) est un champ aux nœuds (CHAM_NO) scalaire qui contient pour chaque nœud de la grille la valeur réelle de la level set tangente (resp. normale) à la fissure. Si cet objet n’existe pas, aucune grille n’est associée à la fissure.
.GRI.GRLTNO et .GRLNNO#
Le concept .GRI.GRLTNO (resp. .GRI.GRLNNO) est un champ aux nœuds (CHAM_NO) à 3 composantes réelles. Il contient pour chaque nœud de la grille les valeurs du gradient de la level set tangente (resp. normale) dans les 3 directions de l’espace.
Soit \(i\) le \(i\) -ème nœud de la grille,
V =.GRI.GRLTNO(i); |
|
V(1) |
Valeur du gradient suivant \(x\) de la level set tangente, calculé au \(i\) ème nœud |
V(2) |
Valeur du gradient suivant \(y\) de la level set tangente, calculé au \(i\) ème nœud |
V(3) |
Valeur du gradient suivant z de la level set tangente, calculé au \(i\) ème nœud |
En 2D, on a seulement 2 composantes suivant \(x\) et \(y\) .
Si cet objet n’existe pas, aucune grille n’est associée à la fissure.
.FONDFISG#
Le vecteur .FONDFISG est un vecteur de réels contenant les coordonnées des points du fond de fissure construit sur la grille auxiliaire. Les points sont ordonnés suivant la même méthode que celle décrite dans le document [R7.02.12] pour la création du vecteur des points du fond de fissure sur le maillage réel .FONDFISS, de manière à ce qu’une abscisse curviligne puisse être définie.
Si NFON est le nombre de points du fond de fissure sur la grille, alors la longueur du vecteur .FONDFISG est 4xNFON. Pour chaque point du fond de fissure sur la grille, les 3 premières composantes correspondent aux 3 coordonnées (en 3D) du point, et la quatrième composante est son abscisse curviligne.
Cet objet est créé uniquement en 3D dans le cadre de la propagation de fissure utilisant les méthodes Upwind ou Simplexe comme outils de mise à jour des level sets.
Objets relatifs au contact#
Ces objets sont créés dans la sd_fiss_xfem par DEFI_CONTACT.
.BASCO#
Le concept .BASCO est un champ aux nœuds (CHAM_NO) à 12 composantes réelles (en 2D et en 3D). Il contient l’origine et les vecteurs de la BASe COvariante des facettes de contact. Pour chaque nœud, les trois premières composantes sont les coordonnées du point de contact associé à ce nœud, qui correspond à l’origine de la base covariante. Les trois composantes suivantes sont les coordonnées du 1er vecteur de la base. Les trois composantes suivantes sont les cordonnées du 2ème vecteur de la base. Les trois dernières composantes sont les cordonnées du 3ème vecteur de la base.
Soit \(i\) le \(i\) èmenœud du maillage,
V =.BASCO(i); |
|
V(1) |
Coordonnée suivant \(x\) du point de contact associé au nœud \(i\) |
V(2) |
Coordonnée suivant \(y\) du point de contact associé au nœud \(i\) |
V(3) |
Coordonnée suivant \(z\) du point de contact associé au nœud \(i\) |
V(4) |
Coordonnée suivant \(x\) du 1ervecteur de la base au point de contact associé au nœud \(i\) |
V(5) |
Coordonnée suivant \(y\) du 1ervecteur de la base au point de contact associé au nœud \(i\) |
V(6) |
Coordonnée suivant \(z\) du 1ervecteur de la base au point de contact associé au nœud \(i\) |
V(7) |
Coordonnée suivant \(x\) du 2èmevecteur de la base au point de contact associé au nœud \(i\) |
V(8) |
Coordonnée suivant \(y\) du 2èmevecteur de la base au point de contact associé au nœud \(i\) |
V(9) |
Coordonnée suivant \(z\) du 2èmevecteur de la base au point de contact associé au nœud \(i\) |
V(10) |
Coordonnée suivant \(x\) du 3èmevecteur de la base au point de contact associé au nœud \(i\) |
V(11) |
Coordonnée suivant \(y\) du 3èmevecteur de la base au point de contact associé au nœud \(i\) |
V(12) |
Coordonnée suivant \(z\) du 3èmevecteur de la base au point de contact associé au nœud \(i\) |
En 2D, les composantes suivant \(z\) sont nulles.
.LISEQ (adresse JLIS1)#
C’est la LISte des relations d’égalité (EQuality) entre les inconnues de contact.
Vecteur d’entiers de longueur NRELEQ*2 où NRELEQ est le nombre de relations d’égalité.
Pour chaque relation d’égalité, on stocke les numéros des 2 nœuds faisant partie de l’égalité:
Soit IE la \(i\) ème relation d’égalité,
ZI(JLIS1-1+2*(IE-1)+1) est le numéro du 1er nœud faisant partie de l’égalité.
ZI(JLIS1-1+2*(IE-1)+2) est le numéro du 2ème nœud faisant partie de l’égalité.
.LISEQ_LAGR (adresse JLISLA)#
C’est la LISte des numéros de LAGRange associées aux relations d’égalité (EQuality) entre les inconnues de contact. Cette liste est construite dans le cas des mailles multi-Heaviside. Elle permet de retrouver le numéro de ddl de Lagrange à associer au numéro d’un nœud pris dans une relation d’égalité.
ZI(JLISLA-1+2*(IE-1)+1) est le numéro de Lagrange à associer au 1er nœud de la relation d’égalité.
ZI(JLISLA-1+2*(IE-1)+2)est le numéro de Lagrange à associer au 2ème nœud de la relation d’égalité.
Par exemple si il faut imposer la relation LAGS_C=LAG3_C entre les nœuds “N26” et “N32” pour la ième relation d’égalité, on aurra :
ZI(JLIS1-1+2*(IE-1)+1) = 26
ZI(JLIS1-1+2*(IE-1)+2) = 32
ZI(JLISLA-1+2*(IE-1)+1) = 1
ZI(JLISLA-1+2*(IE-1)+2) = 3
.CNCTE(adresse JCNTES)#
Il s’agit des groupes d’arêtes vitales connectées. Pour chaque numéro local d’arête dans une maille, qui appartient à un groupe, on incrémente NCTE et on stocke :
ZI(JCNTES-1+4*(NCTE-1)+1) le numéro de l’arête dans le groupe,
ZI(JCNTES-1+4*(NCTE-1)+2) le numéro de groupe,
ZI(JCNTES-1+4*(NCTE-1)+3) le numéro de maille,
ZI(JCNTES-1+4*(NCTE-1)+4) le numéro local de l’arête dans la maille.
Contenu des objets de la sd_modele_xfem#
Objets généraux#
.MODELE_SAIN#
Le concept .MODELE_SAIN est un vecteur de K8 de longueur 1 contenant le nom du modèle sur lequel est construite lie modèle enrichie (valeur du mot-clé MODELE_IN en entrée de MODI_MODELE_XFEM).
Contenu des objets relatifs à la concaténation#
.LNNO, .LTNO, .BASLOC et .STNO#
Attention, ces objets n’ont pas la même structure que les objets du même nom contenus dans la sd_fiss_xfem ([§ 3.2.2 ], [§ 3.2.4 ] et [§ 3.3.3 ]). Ce sont des champs élémentaires de type ELNO et non pas des CHAM_NO. La principale différence est que les CHAM_NO stockent l’information sur les noeuds du maillage (une valeur par nœud) alors que les CHAM_ELNO stockent l’information par noeud sur l’élément. Un nœud étant connecté à \(N\) éléments, la valeur sera stockée \(N\) fois. Ce choix a pour finalité le stockage des informations de plusieurs fissures dans un élément, on utilise alors la notion de sous point.
Si un élément est contenu dans la SD fiss(i)//”.MAILFISS.HEAV”, on dit qu’il est vu par la fissure i: il faut alors stocker dans le modèle les informations relatives à cette fissure. Si l’élément voit 2 fissures ou plus, il faut stocker dans le modèle les informations de toutes les fissures. En définissant le nombre de sous points \(\mathit{NBSP}\) des CHAM_ELNO comme le nombre de fissures vues par l’élément, on duplique \(\mathit{NBSP}\) fois l’espace mémoire relatif à la SD pour l’élément qui voit \(\mathit{NBSP}\) fissures. Ainsi on peut stocker les informations de toutes les fissures dans cet élément.
La figure montre un exemple de concaténation de 2 fissures dans le modèle. On représente sur cette figure les SD .LNNO des 2 fissures et celle du modèle. L’élément du centre voit 2 fissures, le champ MODELE contient donc 2 composantes par noeud dans cet élément.
Figure 4.2.1-1Exemple de stockage de SD multiple dans le modèle.
.NOXFEM#
Il s’agit d’un CHAM_NO à 2 composantes. Les composantes sont affectées si le nœud possède un enrichissement X-FEM (i.e. il existe une fissure fiss(i) pour laquelle le champ fiss(i)//”.STNO” n’est pas nul en ce nœud). La première composante correspond au numéro de maille X-FEM contenant le noeud. La deuxième composante est le numéro local du nœud dans cette maille X-FEM. Cette structure est utile pour l’imposition de conditions limites de type Dirichlet.
.FISSNO#
Il s’agit d’un CHAM_ELNO. Cette SD est créée lorsqu’au moins un élément de la structure doit stocker les informations de plusieurs fissures. Pour l’introduction de plusieurs degrés de liberté Heaviside, on a fait le choix d’incrémenter séquentiellement par nœuds les numéros de degrés de liberté. Par exemple figure , on introduit deux fissures. On affecte pour la première fissure (en bleu à gauche) les ddl \(\mathit{H1}\) . Pour la deuxième fissure (en rouge au centre) on attribue des degrés de liberté \(\mathit{H1}\) aux nœuds qui n’ont pas déjà de degrés de liberté \(\mathit{H1}\) affectés précédemment, et des degrés de liberté \(\mathit{H2}\) pour les nœuds possédant déjà des degrés de liberté \(\mathit{H1}\) . Ce choix est fait dans le but de ne pas alourdir les catalogues élémentaires. En effet cette stratégie ne nécessite pas d’élément ne possédant que des \(\mathit{H2}\) .
Figure 4.2.3-1Degrés de liberté Heavisides, pour deux fissures qui se chevauchent
Cependant il faut faire attention, car dans certains éléments, l’incrémentation des fissures n’assure pas un lien direct entre le numéro de degré de liberté Heaviside global et le numéro de fissure (Dans l’exemple, \(\mathit{H1}\) peut correspondre à la fissure 1 ou à la fissure 2 dans l’élément jaune). Lors de l’assemblage dans les TE, il faut donc pouvoir associer les degrés de liberté \({H}_{\mathit{IFH}}[X,Y,Z]\) (avec \(\mathit{IFH}\) le numéro de degré de liberté Heaviside global) du nœud \(\mathit{INO}\) au bon numéro de fissure. De plus les éléments doivent être complétés par des degrés de liberté Heaviside qui sont ensuite éliminés (degrés de liberté en gris sur la figure de droite). Il faut pour éliminer les degrés de liberté \({H}_{\mathit{IFH}}[X,Y,Z]\) du nœud \(\mathrm{INO}\) avoir le statut de la bonne fissure en \(\mathit{INO}\) .
La SD MODELE//”.FISSNO” permet de faire cela. Elle retourne le numéro de fissure \(\mathit{IFISS}\) vu localement au nœud \(\mathit{INO}\) pour les degrés de liberté \({H}_{\mathit{IFH}}[X,Y,Z]\) . On a \(\mathit{IFISS}=\mathit{FISSNO}(\mathit{INO},\mathit{IFH})\) . On récupère alors le bon pointeur pour les SD MODELE//”[.LNNO, .STNO .TOPOSE.HEA].
Figure 4.2.3-2Exemple de construction de la SD Modèle.FISSNO
La figure illustre la construction du tableau .FISSNO. Les lignes correspondent aux numéros de nœud, et les colonne aux numéros de degré de liberté Heaviside. On remplit le tableau de manière séquentielle en 2 passes. Lors de la première passe, on regarde le statut (MODELE.STNO) du noeud \(\mathit{INO}\) pour la fissure \(\mathit{IFISS}\) . Si le statut n’est pas nul, on remplit la première case par la donnée \(\mathit{IFH}\) dans leur ordre de parcours au \(\mathit{INO}\) qui n’a pas déjà été affectée avec \(\mathit{IFISS}\) . On complète le tableau si nécessaire lors de la deuxième passe en procédant comme pour la première passe mais en remplissant les case par la donnée \(\mathit{IFH}\) en \(\mathit{INO}\) si le statut est nul.
Pour illustrer l’utilisation de cette SD, on reprend l’exemple plus simple de la figure sur la figure . On a alors construit Modele.FISSNO pour l’élément du milieu. Si on veut (lors de l’assemblage par exemple) récupérer la fonction Heaviside associée au nœud \(\mathit{N1}\) pour les degrés de liberté \({H}_{1}[X,Y]\) . On récupère le numéro de fissure via \(\mathit{IFISS}=\mathit{FISSNO}(\mathit{INO}=1,\mathit{IFH}=1)=2\) . On a alors la fonction Heaviside qui vaut \(\mathit{HE}(\mathit{IFISS}=2)=+1\) . Pour le nœud \(\mathit{N4}\) , on aura \(\mathit{FISSNO}(4,1)=1\) et donc \(\mathit{HE}(\mathit{IFISS}=1)=-1\) .
Figure 4.2.3-3Exemple pour la SD Modèle.FISSNO
Plus généralement, la fonction Heaviside dans un sous élément d’intégration \(\mathit{SE}\) , pour un nœud \(\mathit{INO}\) et un degré de liberté Heaviside \(\mathrm{IFH}\) s’obtient de la manière suivante :
\(\mathit{HE}(\mathit{SE},\mathit{INO},\mathit{IFH})=\mathit{HE}(\mathit{SE},\mathit{IFISS}(\mathit{INO},\mathit{IFH}))\) .
Cette structure de données permet aussi de supprimer les degrés de liberté Heaviside en trop dans les \(\mathit{TE}\) . On récupère le statut (MODELE.STNO) du nœud \(\mathit{INO}\) pour le degré de liberté Heaviside \(\mathit{IFH}\) , alors que cette structure est stockée par fissure :
\(\mathit{STATUT}(\mathit{INO},\mathit{IFH})=\mathit{STATUT}(\mathit{INO},\mathit{IFISS}(\mathit{INO},\mathit{IFH}))\) .
Cette structure est aussi utilisée pour le post-traitement X-FEM, lors de l’interpolation des déplacements sur les lèvres de la fissure.
.HEAVNO#
Il s’agit de la structure inverse de .FISSNO. Cette SD est créée lorsqu’au moins un élément de la structure doit stocker les informations de plusieurs fissures. Elle est construite en même temps que .FISSNO et retourne le numéro de degré de liberté Heaviside associé au nœud \(\mathrm{INO}\) et à la fissure \(\mathrm{IFISS}\) . En gardant les notations du paragraphe précédent on a :
\(\mathrm{IFH}=\mathrm{HEAVNO}(\mathrm{INO},\mathrm{IFISS})\)
Dans le cas du contact multi-Heaviside, le numéro de degré de liberté de Lagrange associé à une fissure \(\mathrm{IFISS}\) correspond au numéro de degré de liberté Heaviside \(\mathrm{IFH}\) correspondant. Ainsi cette structure de données permet-elle de retrouver le nom du degré de liberté de Lagrange (et sa position dans la matrice/vecteur élémentaire) à partir du numéro de fissure. Si on traite le contact sur une facette de contact associée à la fissure \(\mathrm{IFISS}\) , le Lagrangien qui travaille au nœud \(\mathrm{INO}\) porte le numéro :
\(\mathrm{ILAG}=\mathrm{HEAVNO}(\mathrm{INO},\mathrm{IFISS})\)
Contenu des objets relatifs à la topologie des sous-éléments#
Notes aux développeurs:
certaines valeurs \(\mathit{ma}\) sont en dur dan le fortran ( te0514, xbsigm, xmel3d…)
on autorise 4 fissures au maximum pour les modélisations multiheaviside
les longueurs des structures de données sont donc multipliées par 4 du mono-heaviside au multi-heaviside
Rappel sur la manière dont sont découpés les éléments X-FEM (Document R7.02.12 partie 3.3 Sous- découpage) :
3D |
2D |
|
Découpage(1) Phase préalable de découpe |
Chaque élément (hexaèdre, pentaèdre) est virtuellement découpé en tétraèdres 6 tétraèdres au maximum |
Chaque élément (quadrangle) est virtuellement découpé en triangles 2 triangles au maximum |
Découpage(2) Sous-découpage |
Chaque tétraèdre est à son tour découpé en sous-tétraèdres 6 sous-tétraèdres au maximum |
Chaque triangle est à son tour découpé en sous-triangles 3 sous-triangles au maximum |
Points d’intersection |
Points d’intersection entre les arêtes des tétraèdres issus du découpage(1)et la surface de la fissure 11 points d’intersection au maximum |
Points d’intersection entre les arêtes des triangles issus du découpage(1)et la courbe de la fissure 3 points d’intersection au maximum |
Points milieux |
Points au milieu des arêtes des triangles issus du découpage(2)[à condition de ne coïncider avec aucun nœud de l’élément initial complet] 66 points au maximum (59 points milieux au maximum distincts des nœuds centraux et 7 points centraux au maximum) |
Points au milieu des arêtes des triangles issus du découpage(2)[à condition de ne coïncider avec aucun nœud de l’élément initial] 11 points milieux au maximum(10 points milieux au maximum distincts des nœuds centraux et 1 point central au maximum) |
Point central du quadrangle quadratique |
Stockage des points milieux des faces quadrangle du polyèdre quadratique. 7 points centraux au maximum |
Point d’intersection des deux diagonales droites d’un quadrangle quadratique 1 point central au maximum |
Processus de découpage(1)et sous-découpage(2) |
1 élément X-FEM 3D (2)tétraèdre n°1 6 sous-tétraèdres au max. tétraèdre n°2 6 sous-tétraèdres au max. … |
1 élément X-FEM 2D (2)triangle n°1 3sous-triangles au max. triangle n°2 3sous-triangles au max. |
Remarque: le nombre de sous- éléments n’est pas modifié par l’introduction de mailles quadratiques.
Figure 4.3-1: configuration générant le maximum de points d’intersection / points milieux
.TOPOSE.PIN#
Renseigne sur les Points d’INtersection.
C’est un champ constant par élément (CHAM_ELEM) à 33 composantes réelles.
Pour chaque élément, ce champ comporte les coordonnées des points d’intersection (au sens précédemment défini). Comme le nombre maximal de tels points est 11, et vu que l’on travaille en dimension 3, le nombre de composantes par élément est dimensionné à 33. Pour chaque élément, les composantes sont ordonnées comme ceci:
où
sont les coordonnées du \(i\) ème point d’intersection sur l’élément.
On notera que si l’élément n’est pas fissuré, les composantes sont nulles.
En 2D, on a au maximum 3 points d’intersection dinstincts des nœuds sommets, avec 2 composantes chacun, donc 6 composantes au total.
Pour le multiheaviside:
En 3D, le champ nécessite \(33\times 4=132\) composantes réelles.
En 2D, le champ nécessite \(6\times 4=24\) composantes réelles.
.TOPOSE.PMI#
Renseigne sur les Points Milieux en présence de mailles quadratiques.
. 2D#
C’est un champ constant par élément (CHAM_ELEM) à 22 composantes réelles. Pour chaque élément, ce champ comporte:
les coordonnées des points milieux
Remarque : on rappelle que les coordonnées des points milieux qui coïncident avec un nœud de l’élément parent ne sont pas stockées dans cette structure de données.
Figure 4.3.2.1-1: Point central d’un QUAD8(1 au maximum) - les coordonnées du point central introduit lors du découpage(1) d’un QUAD8 :
Cela fait un total de 11 points au maximum. Comme on se place en 2D, on peut avoir \(11\times 2=22\) composantes au maximum. On dimensionne ainsi le champ à 22.
Pour chaque élément, les composantes sont ordonnées comme ceci:
\(\lbrace {x}_{1},{y}_{1},{x}_{2},{y}_{2},\mathrm{...},{x}_{11},{y}_{11}\rbrace\)
où \({({x}_{i},{y}_{i})}_{1\le i\le 10}\) sont les coordonnées du \(i\) ème point milieu sur l’élément et où \(({x}_{11},{y}_{11})\) sont les coordonnées du nœud central d’un QUAD8.
. 3D#
C’est un champ constant par élément (CHAM_ELEM) à 198 composantes réelles. Pour chaque élément, ce champ comporte:
les coordonnées des points milieux (66 points au maximum),
les coordonnées des points centraux introduits lors du découpage de l’élément quadratique 3D (7 points centraux supplémentaires au maximum, par exemple, lors du découpage d’un HEXA20 via l’élément complet HEXA27).
Pour chaque élément, les composantes sont ordonnées comme ceci:
\(\lbrace {x}_{1},{y}_{1},{z}_{1},{x}_{2},{y}_{2},{z}_{2},\mathrm{...},{x}_{65},{y}_{65},{z}_{65}\rbrace\)
.TOPOSE.CNS#
Renseigne sur la connectivité des sous-éléments.
. 3D#
C’est un champ constant par élément (CHAM_ELEM) à 320 composantes entières . Ce champ est dimensionné par rapport au sous-découpage des éléments quadratiques en TETRA10. Pour, un sous-découpage linéaire, il est donc sur-dimensionné, sans conséquence notable sur le calcul et les performances.
Pour chaque élément, ce champ contient la connectivité des sous-éléments de l’élément. Par convention, tous les sous-éléments sont des tétraèdres à 10 nœuds (TETRA10), et il peut y en avoir au maximum 32 par élément X-FEM (pour une explication détaillée de ce résultat, voir la documentation de référence sur la méthode X-FEM [R7.02.12]). Il y a au maximum 6 tétraèdres et 6 sous-éléments par tétraèdre, mais il n’y a aucune configuration avec 6 sous-éléments pour chaque tétraèdre, c’est pourquoi le maximum est de 32. Les composantes sont rangées 4 par 4. L’objet .TOPOSE.CNS fait référence à 3 types de nœuds: soit des nœuds déjà existants du maillage, soit des points d’intersection, soit des nœuds milieux. Ainsi, pour chaque élément:
si un sommet d’un sous-élément est un nœud de l’élément X-FEM en question, alors ce nœud est repéré par son numéro local dans l’élément;
si un sommet est un point d’intersection, alors ce point est repéré par un nombre supérieur à 1000, où le chiffre des unités renvoie à son numéro local dans la liste des points d’intersection de l’élément.
concernant les nœuds milieux: si le nœud milieu est un nœud de l’élément parent, on stocke le numéro local du nœud dans l’élément parent; s’il s’agit d’un nouveau nœud milieu généré par la découpe, le point est alors repéré par un nombre supérieur à 2000. Si le point milieu est aussi est un point central de l’élément parent, il est alors repéré par un nombre supérieur à 3000.
Exemple:
Pour l’élément ie:
CNS(ie) =
1001 |
1005 |
6 |
1002 |
2001 |
12 |
2005 |
3012 |
3021 |
2004 |
1003 |
6 |
… |
1er sous-tétra: nœud n°1: 1001 -> renvoie au 1er point de PIN(ie)
nœud n°2: 1005 -> renvoie au 5ème point de PIN(ie)
nœud n°3: 6 -> renvoie au 6ème nœud de l’élément ie
nœud n°4: 1002 -> renvoie au 2ème point de PIN(ie)
nœud n°5: 2001 -> renvoie au 1ème point de MIL(ie)
nœud n°6: 12 -> renvoie au 12ème nœud de l’élément ie
nœud n°7: 2005 -> renvoie au 5ème point de MIL(ie)
nœud n°8: 3012 -> renvoie au 12ème point de MIL(ie)
nœud n°9: 6 -> renvoie au 6ème nœud de l’élément ie
nœud n°10: 3021 -> renvoie au 21ème point de MIL(ie)
2ème sous-tétra: sommet n°1: 1003 -> renvoie au 3ème point de PIN(ie)
sommet n°2: 6 -> renvoie au 6ème nœud de l’élément ie
…
. 2D#
C’est un champ constant par élément (CHAM_ELEM) à 36 composantes entières. Ce champ est dimensionné par rapport au sous-découpage des éléments quadratiques en TRIA6.
Pour chaque élément, il contient la connectivité des sous- éléments de l’élément.
On dénombre:
6 sous-triangles au maximum (atteint pour une maille quadrangle)
6 nœuds au maximum pour chaque sous-triangle (atteint pour une maille quadratique)
Ce qui fait \(6\times 6=36\) composantes au maximum. Le champ est donc dimensionné à 36 et l’on range ces dernières 6 par 6.
L’objet .TOPOSE.CNS fait référence à 4 types de points:
Type 1 : Nœud de l’élément (appartenant au maillage)
Il est repéré par son numéro local dans l’élément
Type 2 : Point d’intersection
Il est repéré par un nombre \(1000+u\) , où \(u\) renvoie à son numéro local dans la liste des points d’intersection de l’élément.
100 1 → 1er point stocké dans PINTTO
1002 → 2eme point stocké dans PINTTO…
Type 3 : Point milieu
Il est repéré par un nombre \(2000+u\) , où \(u\) renvoie à son numéro local dans la liste des points milieux de l’élément.
200 1 → 1erpoint stocké dans PMILTO
200 2 → 2èmepoint stocké dans PMILTO, etc.
Type 4 : Point milieu quadrangle
Il est repéré par un nombre \(3000+u\) , où \(u\) renvoie à son numéro local dans la liste des points milieux de l’élément.
3011
30 11 → 11ème point stocké dans PMILTO
. Cas multiheaviside#
Pour les modélisations multiheaviside, on n’autorise qu’un sous-découpage linéaire. On utilise alors les dimensions des tableaux de connectivité du découpage linéaire (3D: TETRA4 au lieu de TETRA10 / 2D: TRIA3 au lieu de TRIA6 ).
Les dimensions des tableaux de connectivité monoheaviside sont alors multipliées par le nombre maximum de fissures:
En 3D, \(128\times 4=512\) composantes entières.
En 2D, \(18\times 4=72\) composantes entières.
.TOPOSE.HEA#
Renseigne sur la valeur de la fonction HEAviside.
C’est un CHAM_ELEM constant par sous-élément à 32 composantes entières correspondant à la valeur de la fonction Heaviside sur les sous-tétraèdres (+1 ou –1), rangées successivement.
Il peut y avoir des 0 si le nombre total de sous-éléments est < 32 (nombre max de sous-tétraèdres).
En 2D, les sous-éléments sont au nombre maximum de 6, le champ TOPOSE.HEA est donc dimensionné à 6.
Dans le cas ou l’élément voit plusieurs fissures, ce champ est dupliqué autant de fois qu’il y a de fissures. On utilise alors le nombre de sous points \(\mathit{NBSP}\) définit au [§ 4.2.1 ]. Le champ sera de \(32\times \mathit{NBSP}\) composantes en 3D et de \(6\times \mathit{NBSP}\) composantes en 2D.
.TOPOSE.LON#
Renseigne sur la valeur de la LONgueur de champs utilisés pour définir les sous-éléments.
C’est un champ constant par élément (CHAM_ELEM) à une composante entière, en 2D comme en 3D. Cette composante correspond au nombre de sous-éléments contenus dans l’élément X-FEM.
.TOPOSE.PAI#
Renseigne sur les arêtes intersectées. Cette structure de données est passée à l’option TOPOFA afin qu’elle ne soit pas recalculée pour générer la structure de données .TOPOFAC.AI
Sa structure est similaire à .TOPOFAC.AI:
C’est un champ constant par élément (CHAM_ELEM) à 15 ou 55 composantes réelles contenant des informations sur les arêtes intersectées.
Pour chacun des points d’intersection de chaque élément:
La 1ère composante est le numéro local de l’arête correspondante (0 si c’est un nœud sommet).
La 2ème composante est le numéro local du nœud si c’est un nœud sommet (0 sinon).
La 3ème composante est la longueur de l’arête.
La 4ème composante est la position du point d’intersection sur l’arête, avec un sens arbitraire qui dépend de la maille. Ce réel est strictement compris entre 0 et 1, et vaut 0 si le point d’intersection est un nœud sommet.
La 5èmecomposante permet de savoir si l’arête intersectée est vitale ou non. Si elle est vitale, la composante vaut 1, si elle ne l’est pas, la composante vaut 0.
Le nombre de composantes par point d’intersection (5) est accessible dans le fortran par un appel à la fonction XXMMVD(“ZXAIN”)
Soit \((n,{\tau}_{1})\) le \((n,{\tau}_{1,}{\tau}_{2})\) èmeélément du maillage,
V =.TOPOFAC.AI(i); |
|
V(1) |
Numéro local de l’arête correspondant au 1erpoint d’intersection |
V(2) |
Numéro local du nœud correspondant au 1erpoint d’intersection |
V(3) |
Longueur de l’arête correspondant au 1erpoint d’intersection |
V(4) |
Position du 1erpoint d’intersection sur l’arête |
V(5) |
1erpoint d’intersection: si sur arête vitale (1) sinon (0) |
V(6) |
Numéro local de l’arête correspondant au 2èmepoint d’intersection |
… |
… |
V(55) |
11èmepoint d’intersection vitale (1) ou non (0) |
Si le nombre de points d’intersection est strictement inférieur au nombre maximal de points d’intersection (3 ou 11 suivant les cas), le vecteur est complété par des 0.
En 2D, on a au maximum 3 points avec de la même façon qu’en 3D 5 informations (numéro de l’arête, numéro du nœud, longueur de l’arête et position du point d’intersection, arête intersectée vitale ou non). Le champ TOPOFAC.AIa donc 15 composantes par élément. En 3D on a 55 composantes.
.TOPOSE.PJO#
Cette SD n’est utilisée que pour les éléments multi-Heaviside HM-XFEM cohésifs. Il s’agit d’un CHAM_ELEM. qui comporte une composante entière par nœud de l’élément. Il a donc jusqu’à 20 composantes. Cette composante vaut 0 si le nœud ne contient pas de jonction de fissure sur son support et 1 sinon.Cette information est ensuite utilisée pour imposer la continuité de la pression de fluide dans les branches d’interfaces au niveau d’une jonction de fissures hydrauliques (confer [R7.02.18]).
Objets relatifs à la topologie des facettes de contact#
Les champs .TOPOFAC.PI, .TOPOFAC.AI, .TOPOFAC.CF, .TOPOFAC.LO et .TOPOFAC.BA, sont dupliqués par élément autant de fois que le nombre de fissures vues par la maille. On utilise pour cela le nombre de sous-points qui correspond à \({n}_{\mathrm{fiss}}\) .
.TOPOFAC.LO#
Renseigne sur la LOngueur des champs utilisés pour le contact.
C’est un champ constant par élément (CHAM_ELEM) à 3 composantes entières, contenant le nombre de points d’intersection (NINTER), le nombre de facettes triangulaires de contact (NFACE) ainsi que le nombre de points (nœuds sommets et nœuds milieux) par facette triangulaire de contact (NPTF).
.TOPOFAC.PI#
Renseigne sur les Points d’Intersection.
C’est un champ constant par élément (CHAM_ELEM) qui comporte jusqu’à 102 composantes réelles, qui sont les coordonnées dans l’espace de référence parent des points d’intersection des arêtes de l’élément avec la fissure.
En 2D, on a jusqu’à 7 points d’intersection (en comptant les nœuds milieux et les nœuds sommets) donc le champ est dimensionné à 14. En 3D, on en a jusqu’à 34 donc le champ est dimensionné à 102.
Pour les éléments Heaviside, il y a au maximum 18 points d’intersection en 3D, donc le champ est dimensionné à 54, et 8 points d’intersection en 2D, donc le champ est dimensionné à 16.
Soit \(i\) le \(i\) èmeélément du maillage,
V =.TOPOFAC.PI(i); |
|
V(1) |
Coordonnée de référence suivant \(x\) du 1erpoint d’intersection |
V(2) |
Coordonnée de référence suivant \(y\) du 1erpoint d’intersection |
V(3) |
Coordonnée de référence suivant \(z\) du 1erpoint d’intersection |
V(4) |
Coordonnée de référence suivant \(x\) du 2èmepoint d’intersection |
V(5) |
Coordonnée de référence suivant \(y\) du 2èmepoint d’intersection |
… |
… |
V(102) |
Coordonnée de référence suivant \(z\) du 34èmepoint d’intersection |
Si le nombre de points d’intersection est strictement inférieur au nombre maximal de points d’intersection (7, 8, 18 ou 34 suivant les cas), le vecteur est complété par des 0. Le nombre de points d’intersection est contenu dans le vecteur .TOPOFAC.LO (voir § 4.4.1 ).
.TOPOFAC.AI#
Renseigne sur les Arêtes Intersectées.
C’est un champ constant par élément (CHAM_ELEM) à 35 ou 170 composantes réelles contenant des informations sur les arêtes intersectées.
Pour chacun des 7 ou 34 points d’intersection de chaque élément:
La 1ère composante est le numéro local de l’arête correspondante (0 si c’est un nœud sommet).
La 2ème composante est le numéro local du nœud si c’est un nœud sommet (0 sinon).
La 3ème composante est la longueur de l’arête.
La 4ème composante est la position du point d’intersection sur l’arête, avec un sens arbitraire qui dépend de la maille. Ce réel est strictement compris entre 0 et 1, et vaut 0 si le point d’intersection est un nœud sommet.
La 5èmecomposante permet de savoir si l’arête intersectée est vitale ou non. Si elle est vitale, la composante vaut 1, si elle ne l’est pas, la composante vaut 0.
Le nombre de composantes par point d’intersection (5) est accessible dans le fortran par un appel à la fonction XXMMVD(“ZXAIN”)
Soit \(i\) le \(i\) èmeélément du maillage,
V =.TOPOFAC.AI(i); |
|
V(1) |
Numéro local de l’arête correspondant au 1erpoint d’intersection |
V(2) |
Numéro local du nœud correspondant au 1erpoint d’intersection |
V(3) |
Longueur de l’arête correspondant au 1erpoint d’intersection |
V(4) |
Position du 1erpoint d’intersection sur l’arête |
V(5) |
1erpoint d’intersection: si sur arête vitale (1) sinon (0) |
V(6) |
Numéro local de l’arête correspondant au 2èmepoint d’intersection |
… |
… |
V(170) |
34èmepoint d’intersection vitale (1) ou non (0) |
Si le nombre de points d’intersection est strictement inférieur au nombre maximal de points d’intersection (7 ou 34 suivant les cas), le vecteur est complété par des 0.
En 2D, on a au maximum 7 points (4 points d’intersection et 4 points milieu) avec de la même façon qu’en 3D 5 informations (numéro de l’arête, numéro du nœud, longueur de l’arête et position du point d’intersection, arête intersectée vitale ou non). Le champ TOPOFAC.AI a donc 35 composantes par élément. En 3D, on a jusqu’à 34 points d’intersection, le champ TOPOFAC.AI a donc 170 composantes par élément.
.TOPOFAC.CF#
Renseigne sur la Connectivité des Facettes de contact.
C’est un champ constant par élément (CHAM_ELEM) à 9 ou 90 composantes entières, contenant la connectivité des sommets des facettes triangulaires. Il y a au maximum 15 facettes par élément.
Soit \(i\) le \(i\) èmeélément du maillage,
V =.TOPOFAC.CF(i); |
|
V(1) |
Numéro local du 1ersommet de la 1èrefacette triangulaire |
V(2) |
Numéro local du 2èmesommet de la 1èrefacette triangulaire |
V(3) |
Numéro local du 3èmesommet de la 1èrefacette triangulaire |
V(4) |
Numéro local du 1ersommet de la 2èmefacette triangulaire |
V(5) |
Numéro local du 2èmesommet de la 2èmefacette triangulaire |
… |
… |
V(90) |
Numéro local du 3èmesommet de la 15èmefacette triangulaire |
Si le nombre de facettes triangulaires est strictement inférieur à 15, le vecteur est complété par des 0.
En 2D linéaire, on a jusqu’à 3 facettes de contact, qui sont des segments avec deux sommets et éventuellement un nœud milieu. Le champ TOPOFAC.CF a donc 9 composantes par élément. En 3D, on a jusqu’à 15 facettes qui sont des triangles avec 3 nœuds sommets et éventuellement 3 nœuds milieux. Le champ TOPOFAC.CF a donc 90 composantes par élément.
.TOPOFAC.BA#
Renseigne sur la BAse covariante des facettes de contact.
C’est un champ par élément (CHAM_ELEM) à 28 ou 306 composantes réelles qui sont les coordonnées des vecteurs de la base covariante \((n,{\tau}_{1,}{\tau}_{2})\) pour chacun des 7 ou 34 points d’intersection.
Pour chaque élément(l’exposant faisant référence au numéro du point d’intersection):
\(\left\lbrace {n}_{x}^{1},{n}_{y}^{1},{n}_{z}^{1},{\tau}_{\mathrm{1x}}^{1},{\tau}_{\mathrm{1y}}^{1},{\tau}_{\mathrm{1z}}^{1},{\tau}_{\mathrm{2x}}^{1},{\tau}_{\mathrm{2y}}^{1},{\tau}_{\mathrm{2z}}^{1},{n}_{x}^{2,}\mathrm{...},{\tau}_{\mathrm{2z}}^{7}\right\rbrace\)
Soit \(i\) le \(i\) èmeélément du maillage, et \(j\) le numéro du point d’intersection.
V =.TOPOFAC.BA(i); |
|
V(9*(j-1)+1) |
Coordonnée suivant \(x\) du 1ervecteur de la base au \(j\) èmepoint d’intersection |
V(9*(j-1)+2) |
Coordonnée suivant \(y\) du 1ervecteur de la base au \(j\) èmepoint d’intersection |
V(9*(j-1)+3) |
Coordonnée suivant \(z\) du 1ervecteur de la base au \(j\) èmepoint d’intersection |
V(9*(j-1)+4) |
Coordonnée suivant \(x\) du 2èmevecteur de la base au \(j\) èmepoint d’intersection |
V(9*(j-1)+5) |
Coordonnée suivant \(y\) du 2èmevecteur de la base au \(j\) èmepoint d’intersection |
V(9*(j-1)+6) |
Coordonnée suivant \(z\) du 2èmevecteur de la base au \(j\) èmepoint d’intersection |
V(9*(j-1)+7) |
Coordonnée suivant \(x\) du 3èmevecteur de la base au \(j\) èmepoint d’intersection |
V(9*(j-1)+8) |
Coordonnée suivant \(y\) du 3èmevecteur de la base au \(j\) èmepoint d’intersection |
V(9*(j-1)+9) |
Coordonnée suivant \(z\) du 3èmevecteur de la base au \(j\) èmepoint d’intersection |
Si le nombre de points d’intersection est strictement inférieur au nombre maximal de points d’intersection (7 ou 34 suivant les cas), le vecteur est complété par des 0.
En 2D, la base covariante est constituée de 2 vecteurs \((n,{\tau}_{1})\) ayant chacun 2 composantes et il y a jusqu’à 7 points d’intersection. Le nombre de composantes est donc 28. En 3D, la base covariante est constituée de 3 vecteurs \((n,{\tau}_{1,}{\tau}_{2})\) ayant chacun 3 composantes et il y a jusqu’à 34 points d’intersection. Le nombre de composantes est 306.
TOPOFAC.HE#
Renseigne sur la valeur des fonctions HEaviside de part et d’autre de la facette de contact. Cette SD n’est utile que dans le cas d’éléments multi-Heaviside. Elle n’est pas créée si le modèle ne possède pas de tels éléments. Soit \({n}_{\mathit{fiss}}\) le nombre de fissures vues par la maille. Le nombre de sous-points pour cet objet est alors \({n}_{\mathit{fiss}}^{2}\) (pour chaque fissure, on va vouloir connaître les valeurs venant des autres fissures). Le nombre de composantes est de \(2\times {n}_{\mathit{face}}\) avec \({n}_{\mathit{face}}\) le nombre maximum prédéfini de facettes de contact soit \({n}_{\mathit{face}}=1\) en 2D et \({n}_{\mathit{face}}=5\) en 3D.
Soit \(i\) le \(i\) èmeélément du maillage, \(j\) le numéro de facette pour la fissure \(k\)
V =.TOPOFAC.HE(i); |
|
V(2*nface*(nfiss*(k-1)+1-1)+2*(j-1)+1) |
Valeur de la fonction Heaviside de la fissure 1 du côté esclave de la facette |
V(2*nface*(nfiss*(k-1)+1-1)+2*(j-1)+2) |
Valeur de la fonction Heaviside de la fissure 1 du côté maître de la facette |
V(2*nface*(nfiss*(k-1)+2-1)+2*(j-1)+1) |
Valeur de la fonction Heaviside de la fissure 2 du côté esclave de la facette |
V(2*nface*(nfiss*(k-1)+2-1)+2*(j-1)+2) |
Valeur de la fonction Heaviside de la fissure 2 du côté maître de la facette |
… |
|
V(2*nface*(nfiss*(k-1)+nfiss-1)+2*(j-1)+1) |
Valeur de la fonction Heaviside de la fissure nfissdu côté esclave de la facette |
V(2*nface*(nfiss*(k-1)+nfiss-1)+2*(j-1)+2) |
Valeur de la fonction Heaviside de la fissure nfissdu côté maître de la facette |
Cette SD est utile pour calculer le saut de déplacement entre les côtés maître et esclave dans le cas des éléments multi-Heaviside. Ultérieurement, cette SD sera transformée en TOPONO.HFA pour faciliter l’identification des 2 domaines jouxtant les sous-facettes. Cette identification permettra alors l’évaluation des fonctions caractéristiques de domaines associées à la nouvelle approximation du saut de déplacement, comme préciser dans la documentation de référence [R7.02.12].
.TOPOFAC.OE#
Il s’agit d’un champ dont la structure informatique est rigoureusement la même que TOPOFAC.PI. Comme ce dernier il contient les coordonnées des points d’intersections dans l’espace réel, mais dans la configuration initiale . Ce champ sert dans le cadre de l’approche grands glissements avec X-FEM.
.TOPOFAC.GE#
Il s’agit d’un champ dont la structure informatique est rigoureusement la même que TOPOFAC.OE. Comme ce dernier il contient les coordonnées des points d’intersections dans l’espace réel, mais actualisées selon la cinématique des facettes esclaves . Ce champ sert dans le cadre de l’approche grands glissements avec X-FEM.
.TOPOFAC.GM#
Il s’agit d’un champ dont la structure informatique est rigoureusement la même que TOPOFAC.OE. Comme ce dernier il contient les coordonnées des points d’intersections dans l’espace réel, mais actualisées selon la cinématique des facettes maîtres . Ce champ sert dans le cadre de l’approche grands glissements avec X-FEM.
Objets relatifs à la définition des fonctions caractéristiques de domaines#
TOPONO.HNO#
Ce champ ELNO contient les codes «entiers» représentant les numéros identifiants de domaine par nœud et par élément. Chaque nœud enrichi Heaviside peut représenter jusqu’à 4 fissures au maximum par élément. On montre de manière incrémentale, que 4 fissures/jonctions définissent au maximum 5 domaines par élément.
Pour décrire donc l’environnement de chaque nœud X-FEM (Heaviside), on alloue donc 5 emplacements par nœud et par élément, dans le tableau \(\text{TOPONO.HNO(NNO*5)}\) , rempli de la manière suivante:
V =.TOPONO.HNO(i); |
|
V(1) |
Code entier représentant le 1erdomaine vu par le 1ernœud de l’élément |
V(2) |
Code entier représentant le 2èmedomaine vu par le 1ernœud de l’élément |
V(3) |
Code entier représentant le 3èmedomaine vu par le 1ernœud de l’élément |
V(4) |
Code entier représentant le 4èmedomaine vu par le 1ernœud de l’élément |
V(5) |
Code entier représentant le 5èmedomaine vu par le 1ernœud de l’élément |
V(6) |
Code entier représentant le 1erdomaine vu par le 1ernœud de l’élément |
V(7) |
Code entier représentant le 2èmedomaine vu par le 2èmenœud de l’élément |
V(8) |
Code entier représentant le 3èmedomaine vu par le 2èmenœud de l’élément |
V(9) |
Code entier représentant le 4èmedomaine vu par le 2èmenœud de l’élément |
V(10) |
Code entier représentant le 5èmedomaine vu par le 2ème nœud de l’élément |
… |
… |
V(5*N) |
Code entier représentant le 5èmedomaine vu par le Nèmenœud de l’élément |
Par ailleurs, concernant l’organisation du stockage des 5 domaines vus par chaque nœud: les 4 premiers emplacements sont réservés aux domaines «complémentaires» du domaine auquel appartient le nœud, le dernier emplacement est réservé au domaine auquel appartient le nœud.
Quand la fissure passe par le nœud, la sélection du domaine auquel appartient le nœud, s’opère automatiquement grâce à la fonction «signe». Par convention on a: \(\mathit{He}(\mathit{lsn}=0)=\mathit{sign}(0)=1\) . Cette convention permet de prolonger par continuité le codage des domaines sur le bord des éléments et par conséquent aux nœuds.
Rappelons que le codage des domaines se fait par projection en base 4 des fonctions signe Heaviside au point P courant (soit un nœud, soit un point de gauss):
\(\mathit{code}(\underline{P})=\sum_{\mathit{ifiss}=1}^{\mathit{nfiss}}{4}^{\mathit{nfiss}-\mathit{ifiss}}\left(\mathit{He}(\underline{P},\mathit{ifiss})+2\right)\)
A l’aide des SD \(\text{.LNNO}\) et \(\text{.TOPOSE.HEA}\) , pour chaque nœud «Heaviside», on calcule alors le code du domaine auquel appartient le nœud et le code des domaines vus par le nœud (partitionnés dans les sous-éléments).
Par ailleurs, étant donnée la construction locale du champ concaténé \(\text{.LNNO}\) , un même domaine peut avoir plusieurs codes d’un élément à un autre, car un nœud peut voir un nombre différents de fissures d’un élément à un autre (voire figure ). Cela entraîne un défi notable dans l’organisation du champ TOPONO.HNO pour que le codage garde une signification non locale, en clair, pour que l’information \(\text{TOPONO.HNO(jno,i)}\) représente toujours l’intersection du support du nœud n ° \(\text{jno}\) , avec le domaine \({\Omega}_{i}\) quel que soit l’élément considéré.
Pour contourner cette difficulté, nous définissons plutôt des domaines polymorphes. En d’autres mots, un même domaine pourra avoir un code différent d’un élément Heaviside à un autre. Du coup, le code \(\text{TOPONO.HNO(jno,i)}\) représente l’intersection du support du nœud n ° \(\text{jno}\) avec un domaine \({\Omega}_{i}\) , «vu de l’élément courant».
Cette construction «élémentaire» est alors en adéquation avec l’ensemble des calculs élémentaires, y compris pour les mailles tardives [R5.03.53].
TOPONO.HSE#
Ce champ élémentaire contient un code «entier» par sous-élément X-FEM. Son dimensionnement s’adosse alors sur le nombre de sous-élément issus du sous-découpage cf. \(\text{TOPOSE.LON}\) .
Cette SD représente le codage du champ de signe Heaviside par sous-élément \(\text{.TOPOSE.HEA}\) . Elle permet le calcul des fonctions caractéristiques de domaines aux points de Gauss volumiques.
En effet, chaque point de Gauss XFEM est localisé dans un sous-élément. Le sous-élément est lui-même une sous-partition d’un domaine. Assigner alors un code par sous-élément suffit pour caractériser toutes les partitions de domaines sur l’élément courant.
On alloue alors autant d’emplacements entiers qu’il y a de sous-élément dans l’élément courant \(\text{TOPONO.HSE(NSE)}\) .
V =.TOPONO.HSE(i); |
|
V(1) |
Code entier représentant la partition de domaine auquel appartient le 1ersous-élément |
V(2) |
Code entier représentant la partition de domaine auquel appartient le 2èmesous-élément |
V(3) |
Code entier représentant la partition de domaine auquel appartient le 3èmesous-élément |
… |
… |
V(N) |
Code entier représentant la partition de domaine auquel appartient le Nèmesous-élément |
TOPONO.HFA#
Ce champ élémentaire contient 2 codes «entiers» par sous-facette X-FEM. Le premier code représente le domaine esclave. Le deuxième code représente le domaine maître.
Ces deux codes sont calculés avec la même formule de codage que les SD «.TOPONO» précédentes. En revanche, le codage ici s’appuie sur le champ de signe Heaviside \(\text{TOPOFAC.HE}\) . Comme ce dernier champ n’est présent qu’en multi-Heaviside, le champ \(\text{TOPONO.HFA}\) n’est créé uniquement qu’en multi-Heaviside. Étendre ce champ en mono-Heavisisde ne présente pas de difficulté majeure et améliorerait la lisibilité du code. Pour le moment, dans ce cas, le code \(\text{TOPONO.HFA}\) est calculé à partir du signe de la fonction Heaviside de part et d’autre de la facette soit ±1.
Le dimensionnement du champ \(\text{TOPONO.HFA}\) s’adosse alors sur le nombre de sous-facettes issues du sous-découpage (cf. \(\text{TOPOFAC.LO}\) ) et sur le nombre de fissures vues par l’élément, puisqu’une sous-facette est un partitionnement d’une fissure au sein de l’élément courant.
On a alors:
V =.TOPONO.HFA(i); |
|
V(2*nface*(ifiss-1)+2*ifa-1) |
Code du domaine du côté esclave de la fissure ifiss de la sous-facette n° ifa |
V(2*nface*(ifiss-1)+2*ifa) |
Code du domaine du côté maître de la fissure ifiss de la sous-facette n° ifa |
Autres objets#
.XFEM_CONT#
Vecteur d’entiers de longueur égale à 1. Cette valeur vaut:
0 si il n’y a pas de contact;
1 si une relation de contact ou une relation cohésive a été définie entre les lèvres de la fissure, et que des éléments finis linéaires sont utilisés avec une formulation standard pour le contact (CONTACT=”STANDARD” dans MODI_MODELE_XFEM);
2 si une relation de contact ou une relation cohésive a été définie entre les lèvres de la fissure, et que des éléments linéaires sont utilisés avec une formulation «mortier» pour le contact (CONTACT=”MORTAR” dans MODI_MODELE_XFEM);
3 si une relation de contact ou une relation cohésive a été définie entre les lèvres de la fissure, et que des éléments quadratiques sont utilisés avec une formulation standard pour le contact.
.NFIS#
Vecteur d’entiers de longueur égale à 1. Il correspond au nombre de fissures X-FEM du modèle.
.FISS#
Vecteur de K8 de longueur égale au nombre de fissures X-FEM du modèle. Il correspond au nom de la sd_fiss_xfem de chaque fissure.
.XMAFIS#
CHAM_ELEM de K8. Pour chaque maille, ce CHAM_ELEM correspond au nom des fissures vues par cette maille, dans l’ordre défini par l’utilisateur. Le nombre de sous-points de cette SD correspond au nombre de fissures vues par la maille.
.PRE_COND#
Chaîne de caractères longueur 8 [K8]. Pour chaque modèle XFEM, elle renseigne sur l’activation du pré-conditionnement algébrique XFEM. Ce pré-conditionnement est indispensable avec les éléments quadratiques.
Description des objets liés à la résolution du problème de contact-frottant#
Objets liés à la SD créée lors de la définition de la charge de contact-frottant (defico)#
La description complète et détaillée des objets créés lors de la définition de la charge de contact, par l’opérateur DEFI_CONTACT, fait l’objet du fascicule [D4.06.14]. Afin d’aider le lecteur du présent document à appréhender le fascicule [D4.06.14], une liste des objets spécifiques à X-FEM décrits dans[D4.06.14, §8] est donnée ci-après:
MODELX , cet objet stocke une référence vers le modèle enrichi dans la sd_contact;
CARAXF , cet objet sert à définir les différents paramètres pour chaque zone de contact, i.e . chaque fissure maître;
XFIMAI , cet objet stocke le nom de la fissure maître associée à chaque zone de contact;
XNRELL , cet objet stocke l’objet .LISEQ(cf. § 3.5.2 ) associé à chaque fissure maître;
MAESCX , cet objet stocke les informations relatives aux mailles esclaves dans le but de réaliser l’appariement, dans le cas de l’approche grands glissements.
Objets liés à la SD créée lors de la résolution du problème de contact-frottant, dans le cadre l’approche grands glissements(resoco)#
Il s’agit des cartes de contact grands glissement X-FEM qui sont construites une fois l’appariement fait entre les points d’intégrations des éléments esclaves et maîtres. Pour chaque appariement, un élément tardif est créé dans l’opérateur STAT_NON_LINE. On stocke dans ces différents champs les informations relatives à ces éléments tardifs utiles lors de l’intégration des contributions de contact-frottement.
“.XFPO”#
Carte de R qui stocke pour chaque élément tardif des informations sur l’appariement (voir les commentaires dans la routine XMCART pour plus de détails).
“.XFST”#
Carte de I qui stocke dans l’ordre des nœuds de l’élément tardif les statuts d’enrichissement des nœuds des éléments esclave et maître de l’élément tardif. Elle correspond à une copie de la SD MODELE//”.STNO” pour les éléments esclave et maître de l’élément tardif.
“.XFPI”#
Carte de Rqui stocke les coordonnées locales des points d’intersection de l’élément esclave. Elle correspond à une copie de la SD MODELE//”.TOPOFAC.PI’pour l’élément esclave de l’élément tardif.
“.XFAI”#
Carte de Rqui stocke les informations sur les arêtes intersectées de l’élément esclave. Elle correspond à une copie de la SD MODELE//”.TOPOFAC.AI’pour l’élément esclave de l’élément tardif.
“.XFCF”#
Carte de Iqui stocke les informations sur la connectivité des facettes de l’élément esclave. Elle correspond à une copie de la SD MODELE//”.TOPOFAC.CF’pour l’élément esclave de l’élément tardif.
“.XFHF”#
Carte de Iqui stocke la valeur des fonctions Heaviside de part et d’autre de la discontinuité, dans le cas où l’élément esclave ou maître est multi-Heaviside. Elle correspond à une copie de la SD MODELE//”.TOPOFAC.HE’côté esclave de l’élément esclave et côté maître de l’élément maître pour l’élément tardif.
“.XFPL”#
Carte de Iqui stocke la place des Lagrange de contact aux nœuds de l’élément esclave, dans le cas où l’élément esclave ou maître est multi-Heaviside. Elle correspond à une copie de la SD MODELE//”.HEAVNO’pour la fissure associée à la zone de contact, pour l’élément esclave de l’élément tardif.