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’

PRES:0.

“é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.