d6.10.01 Utilitaires de gestion des cartes#
Résumé :
On présente ici les quelques routines permettant de créer facilement des cartes. Les cartes sont les champs constants par maille.
Table des matières
Créer une CARTE constante : routine MECACT#
CALL MECACT ( base, carte, mocle, nommoa, nomgd, ncmp, licmp,
icmp, rcmp, ccmp, K8cmp)
BASE |
K1 |
IN |
nom de la base de création pour la carte ( ‘G’,’V’ ) |
CARTE |
K19 |
IN JXOUT |
nom de la carte à créer. |
MOCLE |
K6 |
IN |
mot-clé permettant d’accéder au concept maillage : /’MAILLA’ on affecte toutes les mailles du MAILLAGEprécisé dans NOMMOA(1:8) /’MODELE’ on affecte toutes les mailles tardives du LIGREL précisé dans NOMMOA(1:19) |
NOMMOA |
K* |
IN |
nom du MAILLAGE ou du MODELE ou du LIGREL sur lequel s’appuie la carte. |
NOMGD |
I |
IN |
nom de la grandeur associée à la carte. |
NCMP |
I |
IN |
nombre de CMPS de la grandeur affectée |
LICMP |
L_K8 |
IN |
liste des noms des CMP de la grandeur affectée. |
ICMP |
L_I |
IN |
liste des valeurs des CMPS de la grandeur affectée si celle-ci est de type “entier” |
RCMP |
L_R |
IN |
liste des valeurs des CMPS de la grandeur affectée si celle-ci est de type “réel” |
CCMP |
L_R |
IN |
liste des valeurs des CMPS de la grandeur affectée si celle-ci est de type “complexe” |
K8CMP |
L_K8 |
IN |
liste des valeurs des CMPS de la grandeur affectée si celle-ci est de type “K8” |
Exemple :
licmp (1) = 'DX'
licmp (2) = 'DY'
rcmp (1) = 1.0
rcmp (2) = 2.0
CALL MECACT ('ma_carte','mailla',MAILLA,'depl_r',2,licmp,ibid,rcmp,' ')
aura pour effet de créer une carte constante de la grandeur ‘DEPL_R’ pour laquelle, toutes les mailles du maillage seront affectées par les valeurs :
(DX = 1.0, DY = 2.0).
Créer une CARTE par « zones »#
Principe de la création par zones#
Une carte est une liste ordonnée de couples (grandeur, zone_affectée). Quand par exemple, un utilisateur écrit dans son fichier de commandes :
AFFE_CHAR_MECA( ....
PRES_REP :( TOUT : 'OUI' PRES: 0. )
PRES_REP :( GROUP_MA: (GM1,GM3) PRES: 2. )
PRES_REP :( MAILLE : (M7,M8) PRES: 7. )
PRES_REP :( MAILLE : (M9) PRES: 9. )
La carte de la grandeur ‘PRES_R’ contient 5 zone_affectée et les grandeurs qui y sont attachées.
On dira que la carte a été créée “par zone”. En “gros” le programme fait :
CALL ALCART |
allocation de la carte |
||
CALL NOCART |
TOUT:’OUI’ |
“écriture” de la 1èrezone_affectée dans la CARTE |
|
CALL NOCART |
GROUP_MA: GM1 |
PRES: 2. |
“écriture” de la 2èmezone_affectée dans la CARTE |
CALL NOCART |
GROUP_MA: GM3 |
PRES: 2. |
“écriture” de la 3èmezone_affectée dans la CARTE |
CALL NOCART |
MAILLE:(M7,M8) |
PRES: 7. |
“écriture” de la 4èmezone_affectée dans la CARTE |
CALL NOCART |
MAILLE:(M9) |
PRES: 7. |
“écriture” de la 5èmezone_affectée dans la CARTE |
Allouer une CARTE : routine ALCART#
CALL ALCART (base, carte, mailla, nomgd)
BASE |
K1 |
IN |
nom de la base de création pour la carte ( ‘G’,’V’ ) |
CARTE |
K19 |
INJXOUT |
nom de la carte à créer. |
MAILLA |
K8 |
INJXIN |
nom du maillage sur lequel s’appuie la carte. |
NOMGD |
K8 |
IN |
nom de la grandeur associée à la carte. |
Pour l’exemple du § 3.1 on fera :
CALL ALCART ('G', 'ma_carte', 'mailla_1', 'depl_r')
Ecrire dans une CARTE : routine NOCART#
CALL NOCART (carte, code, groupe, mode, nma, limano, limanu, nomlig, ncmp)
CARTE |
K19 |
IN JXVAR |
nom de la carte où l’on veut “écrire” |
CODE |
I |
IN |
code de la zone_affectée : +1 :l’ensemble des mailles du maillage (TOUT: ‘OUI‘) -1 :l’ensemble des mailles tardives d’un LIGREL +2 :un GROUP_MA du maillage +3 :une liste de mailles du maillage -3 :une liste de mailles tardives d’un LIGREL |
GROUPE |
K8 |
IN |
utilisé seulement si code = 2 c’est le nom d’un groupe de mailles du maillage. |
MODE |
K3 |
IN |
utilisé seulement si code = ± 3. mode = ‘NUM’si on se sert de mailles numérotées : LIMANU mode = ‘NOM’si on se sert de mailles nommées : LIMANO |
NMA |
I |
IN |
utilisé seulement si code = ± 3. c’est le nombre de mailles dans la liste LIMANU (ou LIMANO) |
LIMANO |
L_K8 |
IN |
utilisé seulement si code = + 3 c’est la liste des noms des mailles du maillage qui sont affectées par la grandeur. |
LIMANU |
L_I |
IN |
utilisé seulement si code = ± 3 c’est la liste des numéros des mailles que l’on affecte. |
NOMLIG |
K19 |
IN |
utilisé seulement si code = - 1 ou = –3. c’est le nom du LIGREL où sont définies les mailles TARDIVES. |
NCMP |
I |
IN |
c’est le nombre de CMP que l’on veut noter dans la carte. |
Informations non transmises par arguments.
La description de la grandeur que l’on veut noter dans la carte se fait par l’intermédiaire de 2 objets de travail qui sont alloués par ALCART :
CARTE(1:19)//'.NCMP' V(K8)
CARTE(1:19)//'.VALV' V(?) (? = I, R, C, K8, ..)
dans CARTE(1:19)//‘.NCMP’, le programmeur écrit le nom des composantes de la grandeur qu’il veut noter.
dans CARTE(1:19)//‘.VALV’, le programmeur écrit les valeurs des composantes (dans le même ordre que .NCMP).
Traitement de l’exemple#
Traitement de l’exemple du § 3.1
CALL ALCART ('G',CARTE, mailla, 'PRES_R')
CALL JEVEUO (CARTE (1:19) //'.NCMP', 'E', IANCMP)
ZK8(IANCMP)='PRES'
CALL JEVEUO (CARTE (1:19) //'.VALV', 'E', IAVALV)
ZR (IAVALV)=0.
CALL NOCART (CARTE, 1, ' ', ' ', 0, ' ', IBID, ' ', 1)
ZR (IAVALV)=2.
CALL NOCART (CARTE, 2, 'GM1', ' ', 0, ' ', IBID, ' ', 1)
ZR (IAVALV)=2.
CALL NOCART (CARTE, 2, 'GM3', ' ', 0, ' ', IBID, ' ', 1)
ZR (IAVALV)=7.
LIMANO(1)='M7'
LIMANO(2)='M8'
CALL NOCART (CARTE, 3, ' ', 'NOM', 2, LIMANO, IBID,' ', 1)
ZR (IAVALV)=9.
LIMANO(1)='M9'
CALL NOCART (CARTE, 3, ' ', 'NOM', 1, LIMANO, IBID,' ', 1)
Principe de surcharge#
Le principe de surcharge est appliqué pour une CARTE : dans la liste des zones affectées, un élément de la liste surcharge les éléments qui le précède dans la liste. Cela veut dire que si une maille appartient à plusieurs zone_affectée différentes, la grandeur qui lui est associée est celle associée à la dernière zone_affectée qui contient cette maille.
Si dans l’exemple précédent, la maille M8 appartient aux 2 GROUP_MA GM1 et GM3, la pression qui lui est associée est 7.
Remarque importante :
La surcharge est globale pour toutes les CMPS de la grandeur.
Si on fait par exemple (carte de ‘DEPL_R”) :
GM1 → DX: 1. DY: 2.
GM3 → DX: 3. DZ: 4.
Les mailles de GM3 sont affectées par la grandeur : (DX: 3. DZ: 4.)
Les mailles de GM1 (sauf celles de GM3 ) sont affectées par la grandeur : (DX: 1. DY: 2.) On peut vouloir que le principe de surcharge soit plus “fin” et que les mailles de l’intersection de GM1 et GM3 “bénéficient” des 2 affectations et que leur grandeur associée soit : DX: 3. DY: 2. DZ : 4. Ceci est possible grâce à la routine TECART
Surcharge « fine » : routine TECART#
CALL TECART (carte)
CARTE |
K19 |
in / jxvar |
nom de la carte à “terminer” |
Cette routine est à appeler après le dernier appel à NOCART.
Cette opération modifie le contenu de la carte pour tenir compte de la règle de surcharge “fine”
définie au paragraphe précédent.
Pratiquement, on “étend” la carte sur toutes les mailles, on détermine sur chacune d’elles la grandeur qui lui est associée par une surcharge “fine” du type :
M1 : DX = 1. DY = 2.0 ? ordre des appels
+ M1 : DX = 3.0 DZ = 4.0 ? à NOCART
M1 : DX = 3.0 DY = 2.0 DZ = 4.0
Dans un deuxième temps, on recompacte la carte, en regroupant les mailles qui sont affectées par la même grandeur.