4. SD carte#
4.1. Généralités#
Une carte est un champ discrétisé par maille. Chaque maille peut être “affectée” d’une grandeur (au plus). Les cartes sont en général des SD crées à partir des données de l’utilisateur. Sa structure est faite pour stocker (avec le moins de volume possible) les informations concernant l’affectation des grandeurs sur des “morceaux” du maillage.
Remarque :
La structure choisie est économique en espace mais elle ne répond pas rapidement à la question : quelle grandeur est affectée sur la maille M1 ? Pour répondre à cette question, il faut “étendre” la carte (cela créer des objets temporaires plus volumineux) ; c’est l’objet de la routine ETENCA appelée par CALCUL *. Une carte est donc une liste ordonnée de couples (grandeur, zone_affectée). L’ordre des couples est important car il sert à prendre en compte le principe de surcharge des affectations : la dernière affectation prime sur les précédentes.*
Une zone_affectée peut être :
l’ensemble des mailles du maillage (TOUT: ‘OUI’),
l’ensemble des mailles tardives d’un ligrel,
un GROUP_MA du maillage,
une liste de mailles du maillage,
une liste de mailles tardives d’un ligrel.
4.2. Objet .NOMA#
Nom du maillage associé à la carte.
4.3. Objet .DESC#
'.DESC' S V I DIM = 3 + (2+n_ec)*n_gd_max
Le champ ‘DOCU’ de l’objet .DESCcontient : ‘CART’
DESC(1) |
gd(numéro de la grandeur associée à la carte) |
DESC(2) |
n_gd_max(majorant du nombre de zone_affectée) |
DESC(3) |
n_gd_edit(nombre réel de zone_affectée) n_gd_editpeut être = 0 |
DESC(3+1) |
code_1er_zone(”code” de la première zone_affectée) |
DESC(3+2) |
numéro de la 1ère zone_affectée |
DESC(3+2*n_gd_max-1) |
code_der_ent(code de la dernière zone_affectée) |
DESC(3+2*n_gd_max) |
numéro de la dernière zone_affectée |
Attention :
il faut n_gd_max=1pour une carte constante sur toutes les mailles tardives (par exemple CHTIMEdans me2mme.f)
Le “code” d’une zone_affectée peut valoir :
1 |
l’ensemble des mailles du maillage (TOUT: ‘OUI‘), |
-1 |
l’ensemble des mailles tardives d’un ligrel, |
2 |
un GROUP_MAdumaillage, |
3 |
une liste de mailles dumaillage, |
-3 |
une liste de mailles tardives d’unligrel. |
Si code=1 (ou -1):
le numéro de la zone_affectée correspondante ne sert à rien.
Si code=2:
le numéro de la zone_affectée correspondante est le numéro du group_ma
dans la collection mailla.GROUPEMA
Si code=3 (ou -3):
le numéro de la zone_affectée correspondante est le numéro de l’objet de la collection .LIMA
qui contient les numéros des mailles composant la zone_affectée.
Vient ensuite dans l’objet .DESC une suite de descripteur_grandeur décrivant les différentes grandeurs affectées.
Soit n_ec le nombre d’entier_codé nécessaires à décrire les CMPS de la grandeur gd :
DESC(3+2*n_gd_max+1 ) |
début du premier descripteur_grandeur |
DESC(3+2*n_gd_max +(n_gd_max-1)*n_ec +1) |
début du dernier descripteur_grandeur |
Remarque :
Pour un champ constant (1 seule grandeur affectée à toutes les mailles du maillage). On a alors :
DESC(2) = 1
DESC(3) = 1
DESC(4) = 1
DESC(5) = peu importe
DESC(6) = début du descripteur_grandeur de la zone_affectée (TOUT : 'OUI'
Dans ce cas . LIMA et . NOLI ne sont pas alloués (économie de place).
4.4. Objet .NOLI#
Cet objet n’est présent que si la carte concerne des mailles tardives.
C’est un vecteur de K24 de dimension nb_gd_max. En face de izone on trouve, si cette zone_affectée est une liste de mailles tardives, le nom du ligrel ou sont définies ces mailles.
izone ---> nom_ligrel
4.5. Objet .LIMA#
C’est une famille contiguë numérotée de vecteurs d’entiers.
LIMA(izone) : V(I)
V contient les numéros des mailles constituant la zone_affectée.
Les numéros de mailles de la liste sont des numéros relatifs au ligrel référencé dans .NOLI(izone).
si un numéro de maille est > 0 , c’est une maille du maillage associé à la carte.
si un numéro de maille est < 0 , c’est une maille du supplémentaire du ligrel.
4.6. Objet .VALE#
C’est un vecteur de scalaires dimensionné à nb_gd_max * nb_cmp_max, si nb_cmp_max est le nombre de CMPS dans la catalogue pour la grandeur associée à la carte.
La grandeur associée à la zone_affectée izone commence dans .VALE à l’indice :
izone --> .VALE( (izone-1)*nb_cmp_max + 1 )
Attention :
Seules les CMPS affectées sont stockées (consécutivement et dans l’ordre du catalogue) dans l’objet . VALE Par exemple, pour une carte de DEPL_R , si la 1ère zone est affectée par : ( DX=2 *. et* DZ=4 *.)*
VALE(1) = 2.
VALE(2) = 4.