d6.05.01 Utilisation des SD_RESULTAT#

Résumé :

La SD_RESULTAT [D4.06.08]: n’est accessible qu’à travers les routines décrites dans ce document.

La routine RSCRSD doit être complétée pour créer de nouveaux types de SD_RESULTAT.

Table des matières

Routines de création, destruction, agrandissement#

CALL RSCRSD (nomsd, typesd, nbordr)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

typesd

K16

type de la structure de données RESULTAT

IN

nbordr

I

nombre de numéro d’ordre

Créer une structure SD_RESULTAT (si cette structure existe déjà, on la détruit). La modification de cette routine permet de créer de nouveaux types de SD_RESULTAT ou d’enrichir ceux existants.

CALL RSDLSD (nomsd)

IN

nomsd

K8

nom de la structure de données RESULTAT

Détruire une structure SD_RESULTAT. Cette routine ne détruit pas les champs répertoriés par la SD_RESULTAT.

CALL RSRUSD (nomsd, iordr)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

iordr

I

numéro d’ordre

Détruire dans la structure SD_RESULTAT les champs à partir d’un numéro d’ordre donné.

CALL RSAGSD (nomsd, nbordr)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

nbordr

I

nouvelle taille du RESULTAT(la taille est doublée si NBORDR = 0)

Agrandir une structure SD_RESULTAT.

Routines d’accès à partir des mots clés de la commande Aster#

L’accès via le langage de commandes aux données répertoriées dans les SD_RESULTAT est possible par les mêmes mots clés quel que soit la commande (IMPR_RESU, CALC_G, etc …).

La description de ces mots clés (TOUT_ORDRE, NUME_ORDRE, etc …) se trouve par exemple en [U4.71.01].

Pour certaines commandes (IMPR_RESU, par exemple) ces mots clés sont sous un mot clé facteur (RESU) pour d’autres non (CALC_G). Dans ce dernier cas l’argument mot clé spécifié dans les routines ci-dessous doit être “ “ .

CALL RSUTNU (nomsd, motcle, iocc, knum, nbordr, prec, crit, iret)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

motcle

K*

mot clé facteur de la commande

IN

iocc

I

numéro d’occurrence du mot clé facteur

IN

knum

K19

nom du vecteur JEVEUXZIpour écrire la liste des numéros

OUT

nbordr

I

nombre de numéros d’ordre trouvés

IN

prec

R8

précision demandée

IN

crit

K8

critère de recherche

OUT

iret

I

code retour d’erreur, = 0 : ok

Récupération à partir des mots clés de la commande, des numéros d’ordre dans une structure SD_RESULTAT.

Remarque :

La routine RSUTNU ci-dessus récupère la liste des numéros d’ordre possibles de la SD_RESULTAT , éventuellement filtrée par les mots clés du langage de commande ( TOUT=’OUI’ , LIST_INST=… ). Il n’est pas sûr pour autant, que pour tous ces numéros d’ordre, tous les champs ( NOM_CHAM ) ou tous les paramètres existent vraiment. Lorsque l’on veut récupérer la liste des numéros d’ordre pour lesquels un champ (ou un paramètre) existe vraiment, il faut utiliser les routines RSUTN1 ou RSUTN2 *.*

CALL RSTRAN (interp, nomsd, motcle, iocc, kinst, krang, nbinst, iret)

IN

interp

K4

type d’interpolation souhaité

IN

nomsd

K8

nom de la structure tran_gene

IN

motcle

K16

mot clé facteur de la commande

IN

iocc

I

numéro d’occurrence du mot clé facteur

IN

kinst

K19

nom du vecteur JEVEUXpour écrire la liste des instants

IN

krang

K19

nom du vecteur JEVEUXpour écrire la liste des numéros

OUT

nbinst

I

nombre d’instants lus

OUT

iret

I

code retour, = 0 : ok

Récupération à partir des mots clés de la commande pour une structure Résultat tran_gene, suivant le type d’interpolation :

  • des instants (INTERP = ‘LIN’ , ‘LOG‘), données utilisateur,

  • des instants et leurs numéros d’ordre associés (INTERP = ‘NON‘), instants de calcul du tran_gene.

Routines d’accès aux structures SD_RESULTAT#

CALL RSORAC (    nomsd, acces, ival, rval, kval, cval, prec, crit,                 nutrou, ndim, nbtrou)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

acces

K16

nom de la variable d’accès.

IN

ival

I

valeur de la variable d’accès si entière

IN

rval

R8

valeur de la variable d’accès si réelle

IN

kval

K..

valeur de la variable d’accès si caractère

IN

cval

C16

valeur de la variable d’accès si complexe

IN

prec

R8

précision demandée

IN

crit

K8

critère demandé

IN

ndim

I

dimension de la liste nutrou.

OUT

nutrou

I

liste des numéros d’ordre trouvés.

OUT

nbtrou

I

nombre de numéros d’ordre trouvés. si le nombre trouvé nbtrouest supérieur à ndim, alors on rend nbtrou = -nbtrou

Récupération à partir d’une variable d’accès, du ou des numéros d’ordre d’une structure SD_RESULTAT.

Convention :

  • si acces = ‘LONUTI’ : récupération de la longueur utile du .ORDR

  • si acces = ‘LONMAX’ : récupération de la longueur maxi du .ORDR

  • si acces = ‘DERNIER’ : récupération du dernier numéro d’ordre

  • si acces = ‘PREMIER’ : récupération du premier numéro d’ordre

  • si acces = ‘TOUT_ORDRE’ : récupération de tous les numéros d’ordre.

CALL RSEXCH (kstop, nomsd, nomsy, iordr, chextr, iret)

IN

kstop

K1

“F” / “ “ Si’F’et iret > 0=> erreur fatale pour l’utilisateur.

IN

nomsd

K8

nom de la structure de donnes RESULTAT

IN

nomsy

K16

nom symbolique

IN

iordr

I

numéro d’ordre

OUT

chextr

K19

nom du champ extrait

OUT

iret

I

code retour = 0 : le champ est «possible» et il existe. =100 : le champ est «possible» mais n’existe pas = 101: le nom symbolique est interdit. = 110 : La sd_resultat est «pleine». Il faut l’aggrandir. = 102 : le numéro d’ordre IORDRn’est pas permis

Récupération à partir d’un nom symbolique et d’un numéro d’ordre, du nom d’un champ dans une structure SD_RESULTAT.

Cette routine gère les champs dans la structure SD_RESULTAT et fait appel a la routine RSUTCH.

CALL RSNOCH (nomsd, nomsy, iordr)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

nomsy

K16

nom symbolique

IN

iordr

I

numéro d’ordre

Noter (=stocker) à partir d’un nom symbolique et d’un numéro d’ordre, le nom d’un champ dans une structure SD_RESULTAT.

CALL RSADPA (nomsd, cel, npara, lpara, iordr, itype, ljeveu, ctype)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

cel

K1

condition d’accès aux paramètres : ‘L’: lecture, ‘E’: écriture.

IN

npara

I

nombre de paramètres cherchés

IN

lpara

K16

liste des noms des paramètres

IN

iordr

I

numéro d’ordre

IN

itype

I

code indiquant que l’on désire le type = 0 pas de type ? 0 on fournit le type

OUT

ljeveu

I

liste des adresses JEVEUXdans ZI, ZR, …

OUT

ctype

K4

liste des types des adresses JEVEUX Ientier, Rréel, Ccomplexe, ‘K8’ ‘K16’ ‘K24’ ‘K32’ ‘K80’caractère.

Récupération à partir d’un numéro d’ordre et d’une liste de nom(s) de paramètre(s) ou de variable(s) d’accès, des adresses JEVEUX d’une structure SD_RESULTAT.

CALL RSNOPA (nomsd, icode, nomjv, nbacc, nbpara)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

nomjv

K19

nom du vecteur JEVEUXpour écrire la liste des noms

IN

icode

I

= 0, variables d’accès seules = 1, paramètres seuls = 2, variables d’accès et paramètres

OUT

nbacc

I

nombre de variables d’accès

OUT

nbpara

I

nombre de paramètres

Récupération des noms et du nombre de paramètres dans une structure SD_RESULTAT ainsi que les noms et le nombre de variables d’accès. Ces noms sont stockés dans un vecteur JEVEUX de nom nomjv.

CALL RSUTNC (nomsd, nomsy, ndim, nomch, nuordr, nbtrou)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

nomsy

K16

nom symbolique

IN

ndim

I

dimension des tableaux

OUT

nomch

K16

tableau des noms de champs

OUT

nuordr

I

tableau des numéros d’ordre des champs trouvés

OUT

nbtrou

I

nombre de champs trouvés si le nombre trouvé nbtrouest supérieur à ndim, alors on rend nbtrou = -nbtrou

Récupération à partir d’un nom symbolique, des champs notés et de leurs numéros d’ordre associés dans une structure SD_RESULTAT.

CALL RSUTOR (nomsd, chextr, nomsy, nuordr, iret)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

chextr

K19

nom du champ à rechercher

OUT

nomsy

K16

nom symbolique

OUT

nuordr

I

numéro d’ordre

OUT

iret

I

code retour: =1, le champ a été trouvé, =0 sinon

Récupération à partir d’un champ, du numéro d’ordre et éventuellement du nom symbolique dans une structure SD_RESULTAT.

Routine interpolation#

CALL RSINCH (    nomsd, nomsy, acces, rval, chextr, proldr,                 prolga, istop, base, iret)

nomsd

IN

K8

nom de la structure de données RESULTAT

nomsy

IN

K16

nom symbolique

acces

IN

K16

nom de la variable d’accès

rval

IN

R8

valeur réelle de la variable d’accès

chextr

IN

K19

nom du champ a créer. (s’il existe, on le détruit)

proldr

IN

K8

type de prolongement voulu à droite : ‘CONSTANT‘, ‘LINEAIRE‘, ‘EXCLU’

prolga

IN

K8

type de prolongement voulu à gauche : ‘CONSTANT‘, ‘LINEAIRE‘, ‘EXCLU‘

istop

IN

I

en cas d’erreur d’interpolation : = 0, n’écrit pas de message, ne fait pas stop. = 1, écrit message, ne fait pas stop. = 2, écrit message, fait stop.

base

IN

K8

base du champ créé

iret

OUT

I

code retour : 1) le champ est calculé : = 0, le champ est interpolé entre 2 valeurs. = 1, le champ est prolongé à gauche. = 2, le champ est prolongé à droite. 2) le champ n’est pas calculé : = 10, il n’existe aucun champ pour l’interpolation. = 11, le prolongement à gauche interdit. = 12, le prolongement à droite interdit. = 20, la variable d’accès est illicite.

Interpolation pour un nom symbolique et une variable d’accès, d’un champ dans une structure SD_RESULTAT

Routines d’existence#

CALL RSEXIS (nomsd, iret)

IN

nomsd

K8

nom de la structure de données RESULTAT

OUT

iret

I

code retour : = 0, la structure existe ; ? 0, la structure n’existe pas.

Vérification de l’existence d’une structure SD_RESULTAT.

CALL RSEXPA (nomsd, icode, nompar, iret)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

icode

I

= 0, variable d’accès = 1, paramètre = 2, variable d’accès ou paramètre

IN

nompar

K16

nom du paramètre ou de la variable d’accès

OUT

iret

I

code retour: = 0, le nom n’existe pas; = 100, le nom existe.

Vérification de l’existence d’un nom de paramètre ou d’un nom de variable d’accès dans une structure SD_RESULTAT.

CALL RSVPAR (nomsd, iordr, nompar, ipar, rpar, kpar, iret)

IN

nomsd

K8

nom de la structure de données RESULTAT

IN

iordr

I

numéro d’ordre

IN

nompar

K16

nom du paramètre à vérifier

IN

ipar

I

valeur du paramètre si entière

IN

rpar

R8

valeur du paramètre si réelle

IN

kpar

K..

valeur du paramètre si caractère

OUT

iret

I

code retour: = 0, ce n’est pas un paramètre = 100, la valeur du paramètre est correcte = 110, la valeur du paramètre n’est pas correcte

Vérification de l’existence d’un nom de paramètre et de sa valeur pour un numéro d’ordre donné dans une structure SD_RESULTAT.

Exemple#

Prenons l’exemple du stockage des modes de vibration mécanique (mode_meca), on a calculé 5 modes et on les stocke dans une structure SD_RESULTAT.

Étape 1 : création de la structure SD_RESULTAT

NBMODE = 5

CALL RSCRSD ( MODES, 'MODE_MECA', NBMODE )

Étape 2 : stockage des vecteurs propres

DO 10 IM = 1, NBMODE

...

CALL RSEXCH (' ', MODES, 'DEPL', IM, CHAMNO, IER )

...

CALL JEVEUO(CHAMNO//'.VALE','E',LVALE)

DO 12 IEQ = 1, NEQ

ZR(LVALE+IEQ-1) = ...

12 CONTINUE

CALL RSNOCH ( MODES, 'DEPL', IM)

...

Étape 3 : stockage des variables d’accès et paramètres modaux

CALL RSADPA ( MODES, 'E' , 1, 'FREQ' , IM, 0, LFREQ, K8B )

ZR(LFREQ) = ...

CALL RSADPA ( MODES, 'E', 1, 'NUME_MODE', IM, 0, LNUME, K8B )

ZI(LNUME) = ...

CALL RSADPA ( MODES, 'E', 1, 'NORME' , IM, 0, LNORM, K8B )

ZK24(LNORM) = ...

...