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'. &&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. 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: .. csv-table:: "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: .. csv-table:: "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". 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'. Objets &&CALCUL.TYPE_SCA&&CALCUL.IA_CHLOC et &&CALCUL.MODELO ------------------------------------------------------------ .. csv-table:: "•", "&&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. .. csv-table:: "&&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" Objets &&CALCUL.LCHIN_EXI,&&CALCUL.LCHIN_K8 et &&CALCUL.LCHIN_I --------------------------------------------------------------- .. csv-table:: "•", "&&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 .. csv-table:: "&&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" Objets &&CALCUL.LCHOU_K8 et &&CALCUL.LCHOU_I -------------------------------------------- .. csv-table:: "•", "&&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 .. csv-table:: "&&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)" Objets &&CALCUL.SCALAIRE et &&CALCUL.IA_CONVERS ----------------------------------------------- .. csv-table:: "•", "&&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, ... .. csv-table:: "&&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)" Objets &&CALCUL.TECAEL_K24 et &&CALCUL.TECAEL_I ----------------------------------------------- .. csv-table:: "•", "&&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. .. csv-table:: "&&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" "...", "..." Objets &&CALCUL.NOMOP et &&CALCUL.NOMTE --------------------------------------- .. csv-table:: "•", "&&CALCUL.NOMOP", "S V K16" "•", "&&CALCUL.NOMTE", "S V K16" .. csv-table:: "&&CALCUL.NOMOP(iopt)", "nom de l'option de numéro iopt" "&&CALCUL.NOMTE(ite)", "nom du type_element de numéro ite"