d6.01.01 Descripteur d’environnement machine : ENVIMA#
Résumé :
On présente dans ce document les fonctions permettant de récupérer les valeurs entières ou réelles caractéristiques dépendantes de la plate-forme utilisée. Ont été ajoutées quelques constantes mathématiques et certains paramètres liés à l’utilisation de la mémoire et des fichiers.
Table des matières
Les fonctions fournies et leur utilisation#
Généralité#
Pour aider à l’utilisation de ces fonctions, on s’est efforcé de codifier le nom des fonctions à partir de trois composantes:
la nature GGde la grandeur:
LB longueur en bits,
LO longueur en octets,
MA valeur positive maximale,
MI valeur positive minimale,
GA gamme de valeurs.
Le type TT de la grandeur à laquelle elle s’applique:
IS INTEGER (entier),
LS LOGICAL(logique),
R8 REAL*8(réel),
C8 COMPLEX*8(complexe).
Le suffixe EM (Environnement Machine).
Pour les paramètres de longueur (l_) les fonctions sont de type entier. Les noms de fonction sont de la forme: GGTTEM.
Pour les paramètres dont la valeur dépend du type, le type de la fonction sera celui de la valeur recherchée. Dans ce cas les noms de fonction sont de la forme: TTGGEM.
Puisque ces fonctions ne font pas partie des fonctions intrinsèques du langage, il est indispensable de déclarer leur type dans chaque unité de programme utilisatrice.
Type logique#
Type logique standard (LOGICAL)
Type de la fonction |
Paramètre fourni |
Fonction ENVIMA |
Plate-forme 64 bits |
Plate-forme 32 bits |
INTEGER |
Longueur en octets |
LOLSEM |
8 |
4 |
Type entier#
Type entier standard (INTEGER)
Type de la fonction |
Paramètre fourni |
Fonction ENVIMA |
Plate-forme 64 bits |
Plate-forme 32 bits |
INTEGER |
Longueur en octets |
LOISEM |
8 |
4 |
INTEGER |
Valeur maximale |
ISMAEM |
formule \({2}^{63}-1\) |
formule \({2}^{31}-1\) 2147483647 |
Type réel#
Type réel standard (REAL*8)
Type de la fonction |
Paramètre fourni |
Fonction ENVIMA |
Plate-forme 64 bits |
Plate-forme 32 bits |
REAL*8 |
Précision relative |
R8PREM |
2.220D-16 |
2.220D-16 |
REAL*8 |
Valeur maximale |
R8MAEM |
1.798D+308 |
1.798D+308 |
REAL*8 |
Valeur minimale |
R8MIEM |
2.225D-308 |
2.225D-308 |
REAL*8 |
Gamme |
R8GAEM |
1.340D+154 |
1.340D+154 |
Paramètres d’utilisation des fichiers#
Ces paramètres sont utilisés en raisons des contraintes d’exploitation sur les serveurs dont les ressources sont partagées. Les bases (fichiers glob.i et vola.i) sont en général créées sur un espace partagé limité (/tmp).
Type de la fonction |
Paramètre fourni |
Fonction ENVIMA |
Plate-forme 64 bits |
Plate-forme 32 bits |
INTEGER |
Longueur maximum d’un fichier en octets |
LOFIEM |
12582912 |
2048000 |
INTEGER |
Taille cumulée des fichiers en octets |
MOFIEM |
50331648 |
50331648 |
Affectation de constantes binaires#
Pour la construction de masques sur les informations numériques, il est nécessaire d’accéder rapidement aux poids des bits. Ceux-ci sont accessibles par la fonction entière ISPBEM (numéro du bit).
ISPBEM(4)= 00000000000000000000000000001000 = \({2}^{4-1}\) = 8
Affectation de constantes mathématiques ou physiques#
Les constantes particulières sont accessibles à partir du type de la variable demandée:
Type de la fonction |
Paramètre fourni |
Fonction ENVIMA |
Valeur |
REAL*8 |
\(\pi\) |
R8PI |
3.141592653589793D+00 |
REAL*8 |
\(2\pi\) |
R8DEPI |
6.283185307179586D+00 |
REAL*8 |
Conversion radian/degré |
R8DGRD |
1.745329251994330D-02 |
REAL*8 |
Conversion degré/radian |
R8RDDG |
5.729577951308232D+01 |
REAL*8 |
Zéro absolu (température) |
R8T0 |
273.15 |
Valeurs particulières#
Ces valeurs sont disponibles sur toutes les machines possédant une arithmétique IEEE.
Type de la fonction |
Paramètre fourni |
Fonction ENVIMA |
Valeur |
INTEGER |
Valeur provocant une erreur lors d’une opération flottante |
ISNNEM |
|
REAL*8 |
Valeur provocant une erreur lors d’une opération flottante |
R8NNEM |
NaN |
REAL*8 |
Valeur d’initialisation des structures de données |
R8VIDE |
1.797693134862316+308 |
Utilitaire#
Le sous-programme Fortran IMPVEM permet d’éditer globalement les différentes valeurs caractéristiques de la machine de traitement sur le fichier de numéro d’unité logique IUL. Un exemple est donné en annexe.
CALL IMPVEM (IUL): imprime toutes les caractéristiques des types standards.
Précautions d’emploi#
Puisque ces fonctions ne font pas partie des fonctions intrinsèques du langage, il est indispensable de déclarer leur type dans chaque unité de programme utilisatrice. Dans ce cas les noms de fonction sont TTGGEM avec TT type de la fonction et GG nature de la grandeur ( cf. exemple d’utilisation).
Remarque:
Les valeurs concernant les entiers sont dans le type implicite entier (fonctions commençant par une lettre L- ou N-).
Les fonctions ENVIMA sont disponibles dans la bibliothèque C utilitai de Code_Aster , et s’appuient pour la plupart sur les librairies standard C : fichiers d’en-tête <limits.h> et <float.h> [bib4].
Par définition toute opération de portage d’un sous ensemble de Code_Aster sur d’autres matériels nécessite le portage préalable d’ENVIMA. L’usage des en-têtes standard limite notablement une recherche approfondie dans la documentation du constructeur.
Bibliographie#
CODYW.J., Floating Point Parameters, Model and Standards - Relationship between numerical computations and programming languages,(REID J.K. Ed) North-Holland Amsterdam, 1982.
FORD B., Parameterization of Environment for Transportable Numerical Software ACM trans. of Mathematical Software. Vol 4, n°2 June 1978 pp 100-103.
I.E.E.E., Standard for floating-point arithmetic, ANSI/IEEE Std 754-1985, 1985.
KERNIGHAN B.W., RITCHIE D.M., Le langage C - C ANSI, Masson Prentice Hall,1992.
Annexe : Portabilité et Efficacité#
Si les logiciels écrits avec ENVIMA sont portables, ENVIMA n’est pas portable : il nécessite une réécriture en utilisant les directives du pré processeur C.
Les règles d’utilisation des fonctions d’ENVIMA sont les mêmes que pour tout appel de fonction qui doit se faire hors des boucles internes.
L’efficacité est accrue en ce qui concerne l’homogénéisation et la portabilité du code qui voit disparaître de toutes les routines des instructions (ou des DATA) spécifiques à la machine.
L’efficacité est accrue en ce qui concerne la résolution numérique grâce aux valeurs qui définissent au mieux la précision, le maximum et le minimum, la gamme d’utilisation.
Annexe : Résultat du sous-programme impvem#
Les impressions suivantes sont le résultat du sous programme impvem, elles peuvent être facilement obtenues en utilisant le fichier de commandes Code_Aster suivant:
DEBUT(DEBUG=_F(ENVIMA=”TEST”));
FIN();
Voir le fichier resultat du cas test ZZZZ103.
Le fichier résultat produit sur une plate-forme Calibre6 (fort.8) contient les différentes valeurs caractéristiques imprimées dans un format décimal et héxa-décimal.
—- ENVIMA VERSION 97 MULTI MACHINES ——–
—– LONGUEUR EN BITS
LBISEM ENTIER INTEGER 64
—– LONGUEUR EN OCTETS
LOLSEM LOGIQUE LOGICAL 8
LOISEM ENTIER INTEGER 8
LOR8EM REEL REAL*8 8
LOC8EM COMPLEXE COMPLEX*16 16
—– LONGUEUR ET TAILLE DE FICHIER
LOFIEM EN OCTETS 12582912
MOFIEM EN OCTETS 50331648
—– ENTIER STANDARD
ISMAEM ENTIER INTEGER 9223372036854775807 7FFFFFFFFFFFFFFF
ISNNEM ENTIER INTEGER 9223372036854775807 7FFFFFFFFFFFFFFF
—– REAL*8
FORMAT D’IMPRESSION DES FLOTTANTS (1X,A,1PD24.15,2X,Z16)
R8BAEM BASE NUMERATION REAL*8 2.000000000000000D+00 4000000000000000
R8PREM PRECISION RELATIVE REAL*8 2.220446049250313D-16 3CB0000000000000
R8MAEM MAXIMAL REAL*8 1.797693134862316+308 7FEFFFFFFFFFFFFF
R8MIEM MINIMAL REAL*8 2.225073858507201-308 10000000000000
R8GAEM GAMME REAL*8 1.340780792994259+154 5FEFFFFFFFFFFFFE
R8NNEM NOT A NUMBER REAL*8 NaN FFF7FFFFFFFF0000
R8VIDE VIDE REAL*8 1.797693134862316+308 7FEFFFFFFFFFFFFF
RMIREM B**-T 1.110223024625157D-16 3CA0000000000000
RMAREM B**(1-T) 2.220446049250313D-16 3CB0000000000000
RMINEM B**(EMIN-1) 2.225073858507201-308 10000000000000
RMAXEM B**EMAX(1-B**(-T)) 8.988465674311579+307 7FDFFFFFFFFFFFFF
—– POIDS DES BITS 1 A LBIS
ISPBEM BITS NUMEROTES DE DROITE A GAUCHE
1 1
2 2
3 4
4 8
5 16
6 32
7 64
8 128
9 256
10 512
11 1024
12 2048
13 4096
14 8192
15 16384
16 32768
17 65536
18 131072
19 262144
20 524288
21 1048576
22 2097152
23 4194304
24 8388608
25 16777216
26 33554432
27 67108864
28 134217728
29 268435456
30 536870912
31 1073741824
32 2147483648
33 4294967296
34 8589934592
35 17179869184
36 34359738368
37 68719476736
38 137438953472
39 274877906944
40 549755813888
41 1099511627776
42 2199023255552
43 4398046511104
44 8796093022208
45 17592186044416
46 35184372088832
47 70368744177664
48 140737488355328
49 281474976710656
50 562949953421312
51 1125899906842624
52 2251799813685248
53 4503599627370496
54 9007199254740992
55 18014398509481984
56 36028797018963968
57 72057594037927936
58 144115188075855872
59 288230376151711744
60 576460752303423488
61 1152921504606846976
62 2305843009213693952
63 4611686018427387904
—– VALEURS PARTICULIERES PI, DEPI, …
R8PI REEL REAL*8 3.141592653589793D+00 400921FB54442D18
R8DEPI REEL REAL*8 6.283185307179586D+00 401921FB54442D18
R8DGRD REEL REAL*8 1.745329251994330D-02 3F91DF46A2529D39
R8RDDG REEL REAL*8 5.729577951308232D+01 404CA5DC1A63C1F8
—- FIN TEST ENVIMA MULTI MACHINES ————-
OK