SD champ_elem ============= 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.* 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. 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). Objet .CELK ----------- .. csv-table:: "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 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). .. csv-table:: "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 | +--------------------------------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ 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 : .. csv-table:: "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" Quelques "formules" fréquemment utilisées dans la programmation --------------------------------------------------------------- LIGREL ~~~~~~ numéro de la grandeur associée au CHAM_ELEM : .. code-block:: text NUMGD=ZI(JCELD-1+1) nombre de GREL du LIGREL associé au CHAM_ELEM : .. code-block:: text NGREL=ZI(JCELD-1+2) nombre maxi. de sous-points des éléments d’un CHAM_ELEM: (peut-être = 0) .. code-block:: text MXSP=ZI(JCELD-1+3) nombre maxi. de CMPS (VARI_R) des éléments d’un CHAM_ELEM: .. code-block:: text (/=0 <=> VARI_R) MXCDY=ZI(JCELD-1+4) GREL : IGR ~~~~~~~~~~ nombre d’éléments d’un GREL (IGR): .. code-block:: text NEL=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +1) mode_local d’un GREL (IGR): .. code-block:: text IMOLO=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +2) longueur cumulée des éléments d’un GREL (IGR): .. code-block:: text LGGREL=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +4) adresse (dans .CELV) du début du GRELIGR : .. code-block:: text 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): .. code-block:: text LGCATA=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +3) Élément IEL du GRELIGR ~~~~~~~~~~~~~~~~~~~~~~ adresse (dans .CELV) du début de élément IEL du GRELIGR : .. code-block:: text 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 : .. code-block:: text LGIEL=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +4 +4*(IEL-1)+3) nombre de sous-points de élément IEL du GRELIGR : .. code-block:: text 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 : .. code-block:: text NCDYN=ZI(JCELD-1+ZI(JCELD-1+4+IGR) +4 +4*(IEL-1)+2) 0 -> la grandeur n'est pas VARI_R