4. L’objet NUME_EQUA#

L’objet NUME_EQUA fait référence à la numérotation des équations. Il définit le profil de numérotation, c’est-à-dire la description des inconnues. Dans Code_Aster , les inconnues sont nécessairement portées par des nœuds. Les nœuds d’un NUME_EQUA sont de deux types:

  • Les nœuds «physiques» du maillage ma(concerné par le modèle);

  • Les nœuds tardifs [1]

d’un (ou plusieurs) LIGRELqui s’appuient sur le maillage ma.

Il contient septobjets:

NUME_EQUA(K19) ::=record

♦ .NEQU OJB S V I dim=2 ♦ .REFN OJB S V K24 dim=5 ♦ .DELG OJB S V I ♦.PRNO OJB XC V I NUM ♦.LILI OJB S N K24 ♦.NUEQ OJB S V I ♦ .DEEQ OJB S V I

4.1. Objet REFN#

L’objet .REFNstocke quelques informations:

  • REFN(1): nom du maillage sous-jacent au NUME_DDL;

  • REFN(2): nom de la grandeur simple associée (TEMP_R, DEPL_R, PRES_C,…);

  • REFN(3): nom du modèle sous-jacent

  • REFN(4): vaut “ “(dans le cas général) ou ‘ELIM_LAGR’

  • REFN(5): vaut “ “ (dans le cas général) ou nom de la SD DOMJOINTS si le maillage est HPC

4.2. Objet NEQU#

L’objet .NEQUstocke les dimensions:

  • NEQU(1): nombre total d’équations (longueur du .VALEdes champs nodaux);

  • NEQU(2): nombre total de degrés de liberté (longueur de .NUEQ dans le PROF_CHNO).

4.3. Objet DELG#

L’objet .DELGdécrit (un peu) les équations du type «Lagrange»:

  • DELG(ieq)=-1: si l’équation ieqcorrespond à la composante LAGR portée par le deuxième nœud d’une maille SEG3portant un élément de Lagrange (Lagrange 1);

  • DELG(ieq)=-2: si l’équation ieqcorrespond à la composante LAGR portée par le troisièmenœud d’une maille SEG3portant un élément de Lagrange (Lagrange 2);

  • DELG(ieq)=0: l’équation n’est pas de type «Lagrange».

4.4. Objet NULG#

L’objet .NULGest un vecteur pour la numérotation globale des degrés de liberté locaux. Il existe uniquement dans le cas HPC.

4.5. Objet PDDL#

L’objet .PDDLest un vecteur qui permet de savoir par quel processeur sont possédés les degrés de liberté. Il existe uniquement dans le cas HPC.


4.6. Objet PRNO#

L’objet .PRNO est une collection contiguë numérotée de vecteur d’entiers.

♦ .PRNO        OJB XC V I NUM

Cette collection décrit quelles sont les composantes portées par les nœuds impliqués dans le PROF_CHNO en indiquant le nom du LIGRELde modèle et ceux des LIGRELà mailles et/ou à nœuds tardifs. S’il s’agit d’un LIGRELà mailles et à nœuds tardifs (DDL_IMPO, LIAISON_DDL…), cela permet d’identifier les nœuds tardifs impliqués dans le PROF_CHNO. Par contre, si il s’agit d’un LIGRELuniquement à mailles tardives (FORCE_NODALE…), il ne pointe vers aucun objet de collection du .PRNO.

Ce qui veut dire que l’objet PRNO(1)renseigne sur les degrés de liberté portés par les nœuds du maillage (sur lequel s’appuie nécessairement le modèle) sous-jacent au NUME_EQUA et que les autres objets de la collection .PRNO(quand ils existent) renseignent sur les degrés de liberté portés par les nœuds qui n’appartiennent pas au maillage (nœuds tardifs).

Les nœuds tardifs sont définis dans des LIGREL. A chaque LIGRELnomligcorrespond un objet .PRNO(ili) d’indice ili.Le numéro du LIGREL est celui correspondant à nomligdans le pointeur de nom .LILI.

Par exemple, la collection .PRNOcontiendra:

  • .PRNO(1): nœuds du maillage ma;

  • .PRNO(2): nœuds tardifs du LIGRELdont le nom est dans .LILI(2);

  • .PRNO(3): nœuds tardifs du LIGRELdont le nom est dans .LILI(3);

  • …

Si necest le nombre d’entiers codés de la grandeur associée au PROF_CHNO:

  • .PRNO(1)est de longueur (nb_noeuds(ma))*(2+nec);

  • .PRNO(1ili)est de longueur (nb_noeuds_tardifs(LIGREL(ili))*(2+nec).

Chaque nœud est décrit par deux entiers et un vecteur d’entiers codés de longueur necque l’on appelle le descripteur-grandeur [D4.06.05 - Structure de Donnée champ].

Prenons l’exemple des nœuds du maillage ma:

  • nb_cmp est le nombre de composantes portées par le nœud inodu maillage;

  • ieqest l’adresse dans l’objet .NUEQde la première composante portée par le nœud ino.

v = PRNO (1)

v (ino-1)*(2+nec)+1) = ieq

v (ino-1)*(2+nec)+2) = nb_cmp

<-.

v (ino-1)*(2+nec)+2+1) |

... | Descripteur-grandeur du nœud ino

v (ino-1)*(2+nec)+2+nec |

<-

Remarque:

Toutes les composantes portées par un même nœud sont consécutives dans .NUEQ. C’est pourquoi on ne stocke que l’adresse de la première *. Les composantes sont ordonnées dans l’ordre du catalogue des grandeurs. Malheureusement, la grandeur associée au* . PRNO n’est pas stockée dans le PROF_CHNO.

4.7. Objet LILI#

L’objet .LILIest un pointeur de noms qui permet d’accéder aux éléments de la collection PRNO.

♦.LILI        OJB S N K24

Par convention, on stocke dans LILI(1)la valeur &MAILLA, ce qui veut dire que l’objet PRNO(1)renseigne sur les degrés de liberté portés par les nœuds du maillage sous-jacent au NUME_EQUA. Néanmoins on ne stocke pas le nom du maillage.

Les autres objets de la collection .PRNO (quand ils existent) renseignent sur les degrés de liberté portés par les nœuds qui n’appartiennent pas au maillage (nœuds tardifs). Ces nœuds tardifs sont définis dans des LIGREL. A chaque LIGRELnomlig correspond un objet .PRNO(ili). Le numéro du LIGREL est celui correspondant à nomlig dans le pointeur de nom .LILI.

4.8. Objet NUEQ#

L'objet .NUEQ est un vecteur d'entiers.


♦.NUEQ        OJB S V I

C’est un vecteur d’indirection entre l’objet .PRNOet l’objet .VALEdes CHAM_NOqui référencent ce NUME_EQUA. Ce vecteur d’indirection permet de s’affranchir de la règle selon laquelle les composantes d’un nœud se suivent dans l’ordre du catalogue des grandeurs mais aussi que chaque composante correspond effectivement à une inconnue dans le NUME_DDL.

Dans la pratique, ce vecteur est quasiment toujours l’identité (NUEQ(I)=I). Ce cas le plus général signifie deux choses:

  1. Il y a autant d’inconnues dans que de composantes sur les nœuds correspondant au LIGRELdu modèle et sur les nœuds tardifs des LIGRELtardifs des chargements dualisés;

  2. La numérotation est une tautologie: les inconnues sont dans l’ordre des composantes du catalogue sur chaque nœud.

Sur l’exemple suivant, on a trois nœuds. Le premier nœud a pour composantes DX, DYet DZ, le deuxième nœud a pour composantes DXet DYet le troisième nœud a pour composantes DXet DZ. Dans ce cas, L’objet .NUEQest tel que NUEQ(I)=I:

_images/100002000000013B0000014E80A902C4C0911E2C.png

Néanmoins, ce vecteur n’est plus aussi trivial dans deux cas précis:

  • Lorsque l’on crée des macr_elem_statdans le but de séparer les degrés de liberté internes des degrés de liberté externes du macro-élément. On peut alors factoriser partiellement les matrices (la partie correspondant aux ddls internes);

  • Lorsqu’on définit des relations d’identité entre certains degrés de liberté. On utilise ce cas dans certaines situations (XFEM et contact de type LAC).

Pour le premier cas, on a toujours .NUEQ et .VALE de même longueur. Par contre, l’ordre n’est pas forcément le même. Par exemple, on reprend le cas précédent en disant que le nœud 1 doit être en dernier (il correspond à un macro-élément qui doit se trouver en dernière position pour pouvoir bénéficier des factorisations partielles dans le solveur LDLT). Le schéma devient le suivant:

_images/100002000000013B0000014EFB32B0E60817D65B.png

C’est toujours une bijection entre .NUEQet .VALEmais ce n’est plus une tautologie (NUEQ(I)≠I). Enfin le dernier cas est la prise en compte de relation d’identité entre deux degrés de liberté. Par exemple, on reprend le même cas, sauf que cette fois-ci, on écrit que le déplacement DXdu deuxième nœud est égal au déplacement DXdu troisième nœud.

_images/100002000000013B0000014E613B36B2C32E9CD5.png

Cette fois-ci, on n’a plus de bijection: il y a moins d’inconnues que de degrés de liberté.

Remarque:

Si le solveur est MULT_FRONT, on vérifie que le vecteur correspond à l’identité. Ce qui signifie qu’on ne peut pas utiliser ce solveur dans le cas des macro-éléments statiques ou lorsqu’il existe des relations d’identité entre degrés de liberté. Dans ces cas, il faut utiliser le solveur MUMPS.

4.9. Objet DEEQ#

L'objet .DEEQ est un vecteur d'entiers de longueur 2*neq. Avec neq est le nombre d’équations du NUME_EQUA.

 ♦ .DEEQ        OJB S V I DIM=2*neq

C’est un vecteur «inverse» de .PRNOqui décrit (partiellement) les équations.

Si nueqest un numéro d’équation (i.e. adresse dans l’objet .VALE), alors:

V((nueq-1)*2+1) : ino

V((nueq-1)*2+2) : icmp

Avec la convention suivante:

  • Si ino>0et icmp>0: nueqest l’équation associée à la icmpième composante portée par le nœud inodu maillage.

  • Si ino>0et icmp<0: nueqest l’une des deux équations qui dualisent le blocage de la icmpième composantedu nœud inodu maillage.

  • Si ino=0et icmp=0: nueqest une équation de dualisation d’une relation linéaire entre plusieurs composantes.

R emarque:

Dans le cas de la prise en compte des relations d’identité dans la numérotation, comme plusieurs nœuds/composantes correspondent à la même équation, par convention, on indique le premier couple nœud/composante.