7. SD champ_elem#

7.1. Cas des cham_elem possédant des sous-points (éléments de structure)#

Le nombre de points de discrétisation (nœuds, points de Gauss, …) d’un cham_elem sur une maille est déterminé a priori par le nombre de points défini dans le catalogue du type_elem associé à la maille. Pour les éléments de type “structure”, on veut pouvoir stocker plus de grandeurs que de points définis dans le catalogue.

Lors d’un calcul non-linéaire sur une coque (par exemple), l’intégration choisie pour le comportement non-linéaire nécessite de stocker l’état de contraintes en plusieurs points dans l’épaisseur : il faut discrétiser l’épaisseur de la coque. Pour cela, on dira que chaque point de Gauss positionné sur la surface de l’élément (leur nombre est fixé dans le catalogue du type_elem), est composé de n sous-points représentant la discrétisation de la normale à l’élément en ce point.

De la même façon, un élément non-linéaire de tuyau, pourra discrétiser sa section (anneau circulaire) en la découpant en secteurs et en couches.

Pour un élément donné, tous les points de discrétisation ont obligatoirement le même nombre de sous-points.

Attention :

Avant de créer un cham_elem avec sous-points, il faut dire pour tous les éléments du ligrel le nombre de sous-points voulu. Pour cela, on utilise un cham_elem_s de la grandeur DCEL_I (argument DCELZ de la routine alchml.f ). Lorsqu’on appelle la routine de calculs élémentaires ( calcul.f ), le passage de cet argument est sous-terrain : le cham_elem_s doit avoir le même nom que le cham_elem ( OUT ) qu’il sert à dimensionner.

7.2. Cas des cham_elem ne possédant pas de sous-points#

Informatiquement, tous les cham_elem ont des sous-points. Un cham_elem qui n’a pas besoin de cette notion est en fait un cham_elem pour lequel chaque point de discrétisation n’a qu’un seul sous-point ; on confond alors le point et son unique sous-point.

7.3. Cas des cham_elem de la grandeur VARI_R#

La grandeur VARI_R est la grandeur “réservée” qui sert à représenter une grandeur dont le nombre de composantes (CMP) est indéterminée au niveau des catalogues de type_elem.

On se sert par exemple de cette grandeur pour représenter les variables internes des lois de comportement, car chaque loi peut avoir un nombre différent de telles variables.

Dans le catalogue des grandeurs, cette grandeur n’a qu’une seule CMP : VARI.

Au moment de la création d’un cham_elem_VARI_R, on doit dire pour chacun des éléments, combien de composantes aura la grandeur VARI_R. Ces composantes s’appelleront alors : ‘V1’, ‘V2’, …, ‘Vn’. Pour cela, on utilise le même mécanisme que pour déclarer le nombre des sous-points (voir ci-dessus).

7.4. Objet .CELK#

CELK(1)

nom du ligrelassocié au cham_elem.

CELK(2)

nom de l’option de calcul associée au cham_elem.

CELK(3)

/ ‘ELNO’ : CHAM_ELEM aux nœuds / ‘ELGA’ : CHAM_ELEM aux points de Gauss / ‘ELEM’ : CHAM_ELEM constant par élément

CELK(4)

nume_couche: numéro de la couche (cadré à gauche) pour un CHAM_ELEM calculé sur une couche d’élément de coque.

CELK(5)

nive_couche: position dans la couche pour un CHAM_ELEM calculé sur une couche d’élément de coque : /’INF’ / ‘MOY’ / ‘SUP’

CELK(6)

Nom du paramètre de l’option associée aucham_elem

CELK(7)

/’MPI_COMPLET’ /’MPI_INCOMPLET’

CELK(7) :

  • ‘MPI_INCOMPLET’ : le calcul a été distribué (MPI) et l’objet .CELV n’est pas complet sur tous les processeurs. Chaque processeur n’a calculé qu’un sous-ensemble des éléments.

  • ‘MPI_COMPLET’ : sinon. C’est à dire que le calcul n’a pas été distribué, ou bien, le cham_elem (MPI_INCOMPLET à sa création) a été “complété” en appelant l’utilitaire sdmpic.f

7.5. Objet .CELD#

.CELD : vecteur d’entiers. Le champ ‘DOCU’ de l’objet .CELD contient : ‘CHML’

Cet objet est le descripteur de l’objet contenant les valeurs du cham_elem (.CELV).

CELD(1)

gd

grandeur associée au cham_elem.

CELD(2)

nb_gr

nombre de greldu ligrelassocié .

CELD(3)

mxsp

maximum du nombre de sous-points pour les éléments du ligrel

CELD(4)

mxcmp

maximum du nombre de CMP (grandeur VARI_R) pour les éléments du ligrel. 0 si grandeur différente de VARI_R

CELD(4+1)

debu_grel_1

adresse (-1) dans .CELDdu début des informations concernant le 1er GREL

…

CELD(4+nb_gr)

debu_grel_n

adresse (-1) dans .CELDdu début des informations concernant le dernier GREL

puis on stocke bout à bout la description du champ pour chaque GREL du ligrel

CELD(debu_grel +1)

nel

nombre d’élément du GREL

CELD(debu_grel +2)

modelo

mode_localassocié au champ local (ou 0 si champ inexistant sur le GREL)

CELD(debu_grel +3)

lgcata

longueur du champ local au vu du catalogue. c’est à dire sans tenir compte des sous-points et des composantes multiples de VARI_R. (= 0 si modelo = 0)

CELD(debu_grel +4)

lggrel

longueur total du segment contenant toutes les valeurs du champ sur le GREL

puis:do iel = 1, nel

(si modelo> 0)

CELD(debu_grel+4+4*(iel-1)+1)

nbsp

nombre de sous_points pour l’élément iel

CELD(debu_grel+4+4*(iel-1)+2)

ncdyn

nombre de CMP (VARI_R) pour l’élément iel

CELD(debu_grel+4+4*(iel-1)+3)

lgchel

nombre de valeurs du champ local pour l’élément iel. lgchel= lgcata * nbsp * ncdyn

CELD(debu_grel+4+4*(iel-1)+4)

adiel

adresse dans l’objet .CELVde la 1ere valeur de l’élément iel

7.6. Objet .CELV#

C’est un vecteur contenant bout à bout les valeurs des champs locaux des différents éléments.

La description du segment concernant un élément est donnée par le mode_local défini pour le type_elem. Cette description est éventuellement complétée par la donnée du nombre de sous-points et du nombre de CMPS (VARI_R).

Pour un champ de grandeur (différente de VARI_R) n’ayant pas de sous-points, tous les éléments d’un même grel ayant le même type_elem, leurs champs locaux ont tous la même longueur et la même organisation.

On se déplace dans l’objet .CELV grâce à l’objet .CELD.

On peut décrire l’organisation de l’objet .CELV par ces définitions :

CELV(ligrel)

suite de CELV(GREL)mis bout à bout

CELV(GREL)

suite de CELV(élément)mis bout à bout

CELV(élément)

suite de CELV(point)mis bout à bout

CELV(point)

suite de CELV(sous-point)mis bout à bout

CELV(sous-point)

suite de CMP(scalaire)mises bout à bout

7.7. Quelques « formules » fréquemment utilisées dans la programmation#

7.7.1. LIGREL#

numéro de la grandeur associée au CHAM_ELEM :

NUMGD=ZI(JCELD-1+1)

nombre de GREL du LIGREL associé au CHAM_ELEM :

NGREL=ZI(JCELD-1+2)

nombre maxi. de sous-points des éléments d’un CHAM_ELEM: (peut-être = 0)

MXSP=ZI(JCELD-1+3)

nombre maxi. de CMPS (VARI_R) des éléments d’un CHAM_ELEM:

(/=0 <=> VARI_R)

MXCDY=ZI(JCELD-1+4)

7.7.2. GREL : IGR#

nombre d’éléments d’un GREL (IGR):

NEL=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +1)

mode_local d’un GREL (IGR):

IMOLO=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +2)

longueur cumulée des éléments d’un GREL (IGR):

LGGREL=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +4)

adresse (dans .CELV) du début du GRELIGR :

DEBUGR=ZI(JCELD-1+ZI(JCELD-1+4+IGR)+8)

puis : ZR(JCELV -1 +DEBUGR) = ...

longueur (CATALOGUE) d’un élément d’un GREL (IGR):

LGCATA=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +3)

7.7.3. Élément IEL du GRELIGR#

adresse (dans .CELV) du début de élément IEL du GRELIGR :

ADIEL=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +4 +4*(IEL-1)+4)

puis : ZR(JCELV -1 +ADIEL) = ...

longueur de élément IEL du GRELIGR :

LGIEL=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +4 +4*(IEL-1)+3)

nombre de sous-points de élément IEL du GRELIGR :

NBSPT=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +4 +4*(IEL-1)+1)

il n'y a pas de sous-points : NBSPT=0 (ou 1 ; remarque de JD)

nombre de CMPS (VARI_R) de élément IEL du GRELIGR :

NCDYN=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +4 +4*(IEL-1)+2)

0 -> la grandeur n'est pas VARI_R