6. Objets de travail#
La routine CALCUL alloue des objets JEVEUX de travail (base VOLATILE) que nous allons décrire ci-dessous. Tous ces objets ont un nom commençant par “&&CALCUL”.
6.1. &&CALCUL.OBJETS_TRAV OJB S V K24#
Cet objet contient le nom de tous les objets de travail créés par CALCUL. Il sert à faire le « ménage » (destruction) à la fin de la routine CALCUL. Cet objet est créé par la routine DEBCAL. L’adresse de cet objet JEVEUX est stocké dans le COMMON CAII05.
6.2. Champs locaux#
On appelle « champ local » l’objet JEVEUX (et la zone mémoire associée) où sont stockées les informations extraites d’un champ global si « IN » (ou calculées par une routine TE000I si « OUT »). Ces informations sont « rangées » conformément à la description donnée dans le catalogue du type_element (mode_local du paramètre associé au champ).
Les champs locaux sont des vecteurs JEVEUX dont les noms sont de la forme “&&CALCUL”//nom_paramètre, par exemple :
“&&CALCUL.PGEOMER”, “&&CALCUL.PCACOQU”,…
Remarques:
• On continue à utiliser le vocabulaire « local » bien que depuis 1993, le champ « local » contienne (mis bout à bout) les informations concernant tous les éléments finis du GRELcourant.
• Lorsqu’une routine TE00IJ fait par exemple :
CALL JEVECH (“PGEOMER”,”L”,”IAD)
l’adresse IADrendue est l’adresse de l’objet “&&CALCUL.PGEOMER” décalée de ce qu’il faut pour que l’on atteigne les informations concernant l’élément courant.
L’organisation de ces objets est la suivante:
1ère CMP |
de la 1ère grandeur |
du 1er élément |
2ème CMP |
de la 1ère grandeur |
du 1er élément |
3ème CMP |
de la 1ère grandeur |
du 1er élément |
1ère CMP |
de la 2ème grandeur |
du 1er élément |
2ème CMP |
de la 2ème grandeur |
du 1er élément |
… |
||
1ère CMP |
de la 1ère grandeur |
du 2ème élément |
2ème CMP |
de la 1ère grandeur |
du 2ème élément |
… |
On y trouve bout à bout les différents éléments du GREL (qui ont le même type_element et donc le même mode_local).
exemple pour un champ local de géométrie aux nœuds d’un GREL de TRIA3:
DX |
Noeud :1 |
du 1er élément |
DY |
Noeud :1 |
du 1er élément |
DX |
Noeud :2 |
du 1er élément |
DY |
Noeud :2 |
du 1er élément |
DX |
Noeud :3 |
du 1er élément |
DY |
Noeud :3 |
du 1er élément |
DX |
Noeud :1 |
du 2ème élément |
DY |
Noeud :1 |
du 2ème élément |
… |
Champs locaux de travail pour les conversions :
Pour les conversions, CALCUL a besoin de zones mémoire « tampon ». Ces zones mémoire ont la même organisation que les champs locaux ci-dessus. Il est nécessaire d’en allouer 2 pour chaque type scalaire associés aux grandeurs des champs du calcul : I, R, C, K8, …
Leur noms sont :
&&CALCUL.ORIGINAL.C &&CALCUL.CONVERTI.C
&&CALCUL.ORIGINAL.I &&CALCUL.CONVERTI.I
&&CALCUL.ORIGINAL.K8 &&CALCUL.CONVERTI.K8
&&CALCUL.ORIGINAL.K16 &&CALCUL.CONVERTI.K16
&&CALCUL.ORIGINAL.K24 &&CALCUL.CONVERTI.K24
&&CALCUL.ORIGINAL.R &&CALCUL.CONVERTI.R
Pour la conversion d’un champ local de type réel (par exemple), la conversion utilisera en entrée le champ local : &&CALCUL.ORIGINAL.R et en sortie : &&CALCUL.CONVERTI.R
Ces champs locaux « tampon » sont alloués à la longueur max. des champs locaux « ordinaires ».
6.3. Objets &&CALCUL.NOM_&INEL et &&CALCUL.IAD_&INEL#
&&CALCUL.NOM_&INEL
Cet objet contient les noms des objets liés à l’initialisation du type_element du GREL courrant : objets “&INEL.XXX”.
&&CALCUL.IAD_&INEL
Cet objet contient les adresses des objets liés à l’initialisation du type_element du GREL courrant : objets “&INEL.XXX”.
6.4. Objets &&CALCUL.TYPE_SCA&&CALCUL.IA_CHLOC et &&CALCUL.MODELO#
&&CALCUL.TYPE_SCA |
S V K8 |
dim=nb_para |
|
&&CALCUL.IA_CHLOC |
S V I |
dim=7*nb_para |
|
&&CALCUL.MODELO |
S V I |
dim=nb_para |
Soit nb_para le nombre de paramètres (« in » et « out ») de l’option de calcul et ipar le numéro d’un tel paramètre.
&&CALCUL.TYPE_SCA(ipar) |
type scalaire (I,R,C,…) de la grandeur associée au paramètre ipar |
&&CALCUL.IA_CHLOC(7*(ipar-1)+1) |
adresse du champ local associé à ipar |
&&CALCUL.IA_CHLOC(7*(ipar-1)+2) |
longueur du champ local associé à ipar |
&&CALCUL.IA_CHLOC(7*(ipar-1)+3) |
mode local attendu pour le paramètre |
&&CALCUL.IA_CHLOC(7*(ipar-1)+4) |
longueur utile du champ local pour 1 élément. (tient compte du ICOEF) |
&&CALCUL.IA_CHLOC(7*(ipar-1)+5) |
type du champ local : 1 : CARTE 2 : CHAM_NO 3 : CHAM_ELEM 4 : VECTEUR 2ND MEMBRE 5 : MATRICE |
&&CALCUL.IA_CHLOC(7*(ipar-1)+6) |
nombre de points de discrétisation du champ local : 1 pour une CARTE nb_no pour un CHAM_NO nb_pg pour un CHAM_ELEM nb_no pour un VECTEUR O pour une MATRICE |
&&CALCUL.IA_CHLOC(7*(ipar-1)+7) |
valeur du coefficient “multiplicateur” (ICOEF) pour les CHAM_ELEMà taille dynamique (modes locaux Zxxxxx) |
&&CALCUL.MODELO(ipar) |
mode_local associé au paramètre ipar |
6.5. Objets &&CALCUL.LCHIN_EXI,&&CALCUL.LCHIN_K8 et &&CALCUL.LCHIN_I#
&&CALCUL.LCHIN_EXI |
S V L |
dim= nb_in |
|
&&CALCUL.LCHIN_K8 |
S V K8 |
dim= 11*nb_in |
|
&&CALCUL.LCHIN_I |
S V I |
dim= 2*nb_in |
Soit nb_in le nombre de champs « in » et iin =1,nb_in
&&CALCUL.LCHIN_EXI(iin) |
.FALSE. : le champ n’existe pas |
&&CALCUL.LCHIN_K8(2*(iin-1)+1) |
type du champ : “CHNO”,”CART”,”CHML” OU “RESL” |
&&CALCUL.LCHIN_K8(2*(iin-1)+2) |
type scalaire du champ : “C”, “R”, “I”, “K8”, … |
&&CALCUL.LCHIN_I(11*(iin-1)+1) |
IGD: grandeur associée au champ |
&&CALCUL.LCHIN_I(11*(iin-1)+2) |
NEC: nombre d’entiers codés |
&&CALCUL.LCHIN_I(11*(iin-1)+3) |
NCMPMX: nombre max. de CMPS pour IGD |
&&CALCUL.LCHIN_I(11*(iin-1)+4) |
IADESC: adresse de CHIN//”.DESC” |
&&CALCUL.LCHIN_I(11*(iin-1)+5) |
IAVALE: adresse de CHIN//”.VALE” |
&&CALCUL.LCHIN_I(11*(iin-1)+6) |
IAPTMA: adresse de CHIN//”.PTMA” (si CARTE) |
&&CALCUL.LCHIN_I(11*(iin-1)+7) |
IAPTMS: adresse de CHIN//”.PTMS” (si CARTE) |
&&CALCUL.LCHIN_I(11*(iin-1)+8) |
IAPRN1: adresse de .PRNO($MAILLA)(si CHAM_NO) |
&&CALCUL.LCHIN_I(11*(iin-1)+9) |
IAPRN2: adresse de .PRNO(LIGREL)(si CHAM_NO) |
&&CALCUL.LCHIN_I(11*(iin-1)+10) |
IANUEQ: adresse de .NUEQ(si CHAM_NO) |
&&CALCUL.LCHIN_I(11*(iin-1)+11) |
1 : IANUEQest valide 0 : sinon |
6.6. Objets &&CALCUL.LCHOU_K8 et &&CALCUL.LCHOU_I#
&&CALCUL.LCHOU_K8 |
S V K8 |
dim= 2*nb_out |
|
&&CALCUL.LCHOU_I |
S V I |
dim= 2*nb_out |
Soit nb_out le nombre de champs « out » et iout =1,nb_out
&&CALCUL.LCHOU_K8(2*(iout-1)+1) |
type du champ : “CHML”(CHAM_ELEM) ou “RESL”(RESUELEM) |
&&CALCUL.LCHOU_K8(2*(iout-1)+2) |
type scalaire du champ : “C”, “R” |
&&CALCUL.LCHOU_I(2*(iout-1)+1) |
IADESC: adresse de CHOUT//”.DESC” |
&&CALCUL.LCHOU_I(2*(iout-1)+2) |
IAVALE: adresse de CHOUT//”.VALE” (si CHAM_ELEM) |
6.7. Objets &&CALCUL.SCALAIRE et &&CALCUL.IA_CONVERS#
&&CALCUL.SCALAIRE |
S V K8 |
dim= nb_scal |
|
&&CALCUL.IA_CONVERS |
S V I |
dim= 2*nb_scal + 1 |
Soit nb_scal le nombre de types scalaires : I, R, C, …
&&CALCUL.SCALAIRE(i) |
ièmetype scalaire possible des champs “in” du champ : SCAL(i) |
&&CALCUL.IA_CONVERS(1) |
nb_scal |
&&CALCUL.IA_CONVERS(2*(i-1)+2) |
adresse dans ZRou ZCou … de l’objet : “&&CALCUL.ORIGINAL.”//SCAL(i) |
&&CALCUL.IA_CONVERS(2*(i-1)+3) |
adresse dans ZRou ZCou … de l’objet : “&&CALCUL.CONVERTI.”//SCAL(i) |
6.8. Objets &&CALCUL.TECAEL_K24 et &&CALCUL.TECAEL_I#
&&CALCUL.TECAEL_K24 |
S V K24 |
|
&&CALCUL.TECAEL_I |
S V I |
soit nb_no le nombre de nœuds de la maille associée à l’élément courant.
&&CALCUL.TECAEL_K24(1) |
nom du maillage |
&&CALCUL.TECAEL_K24(2) |
nom du LIGREL |
&&CALCUL.TECAEL_K24(3) |
nom de la maille |
&&CALCUL.TECAEL_K24(3+1) |
nom du 1er nœud de la maille |
&&CALCUL.TECAEL_K24(3+2) |
nom du 2ème nœud de la maille |
… |
… |
&&CALCUL.TECAEL_I(1) |
numéro de la maille |
&&CALCUL.TECAEL_I(2) |
nombre de nœuds de la maille (nb_no) |
&&CALCUL.TECAEL_I(2+1) |
numéro du 1er nœud de la maille |
&&CALCUL.TECAEL_I(2+2) |
numéro du 2ème nœud de la maille |
… |
… |
6.9. Objets &&CALCUL.NOMOP et &&CALCUL.NOMTE#
&&CALCUL.NOMOP |
S V K16 |
|
&&CALCUL.NOMTE |
S V K16 |
&&CALCUL.NOMOP(iopt) |
nom de l’option de numéro iopt |
&&CALCUL.NOMTE(ite) |
nom du type_element de numéro ite |