5. JEVEUX et Structuration des Données#

Nous allons dans ce paragraphe tenter de dégager les principales fonctionnalités du gestionnaire de mémoire JEVEUX et de l’usage qu’on en fait dans Aster.

5.1. JEVEUX gestionnaire d’objets#

JEVEUX est l’ensemble des routines FORTRAN décrites dans D6.02.01 Gestion mémoire: JEVEUX.

Ces routines permettent de :

  • créer des objets,

  • les sauver (écriture sur disque),

  • les détruire,

  • les libérer (de la mémoire centrale),

  • les rappeler (en mémoire centrale),

  • les copier, les imprimer, …

5.1.1. Qu’est-ce qu’un objet JEVEUX ?#

  • Un ensemble d’informations homogènes(entiers, réels, complexes, …),

  • chaque objet est nommé (24 caractères),

  • chaque objet à des attributs accessibles en lecture (et parfois en écriture) :

  • longueur (pour 1 vecteur),

  • type des valeurs : entier, réel, …

  • …

  • chaque objet a virtuellement une “image disque”,

  • il existe des objets simples(grosso modo, ce sont des vecteurs),

  • il existe des collectionsd’objets,

  • les objets d’une collection sont tous du même type (mais il peuvent avoir des longueurs différentes),

  • l’accès d’un objet de collection se fait par le nom de la collection plus quelque chose qui identifie l’objet :

  • un numéro (collection numérotée),

  • ou un nom (collection nommée).

5.1.2. Allocation dynamique#

On peut créer, libérer (et détruire) à tout instant un objet JEVEUX. Cela permet de gérer dynamiquement la mémoire.

Bien entendu, cette possibilité est utilisée pour allouer des zones de travail. C’est le seul mécanisme d’allocation dynamique autorisé dans Aster car il gère l’ensemble de la place mémoire disponible : (on entend par mémoire disponible la place disponible dans la “Région” demandée à l’exécution moins le volume du code exécutable moins les zones gérées par le système UNICOS).

5.1.3. Mémoire virtuelle#

Lorsqu’on libère un objet A, JEVEUX le considère comme “déchargeable” (sur disque). Si de nouvelles requêtes sont faites sur d’autres objets et que la place en mémoire centrale vient à manquer, l’objet A sera écrit sur disque et sa place sera récupérée.

JEVEUX permet donc d’accéder (à des instants différents) à plus de mémoire que n’en contient réellement la “Région” de mémoire centrale allouée à l’exécution.

Il agit donc comme un système de “mémoire virtuelle”.

5.1.4. Ecriture et lecture sur disque#

  • Lorsqu’on sauve explicitement un objet (routine JESAUV), celui-ci est écrit sur disque,

  • lorsque l’exécution d’Aster se termine, on sauve automatiquement tous les objets de la base globale qui ne l’ont pas encore été,

  • lorsqu’on rappelle un objet en mémoire centrale (routine JEVEUO), celui-ci est lu sur le disque s’il a été déchargé et recopié en mémoire centrale.

JEVEUX permet donc de s’affranchir de toutes les lectures et écritures binaires sur disque.

5.2. Structuration des Données#

Les commandes d’ Aster s’échangent des objets nommés par l’utilisateur (8 caractères) que l’on appelle des concepts.

Exemple :

acier = DEFI_MATERIAU (ELAS : (E : 300 000 NU : 0.3 ) ) ;

chmat = AFFE_MATERIAU (MATER : acier … ) ;

Le concept “acier” créé par la commande DEFI_MATERIAU est un argument d’entrée de la commande AFFE_MATERIAU.

Un concept est en fait une Structure de Données nommée (SD en langage programmeur).

Une structure de donnée n’est rien d’autre qu’un ensemble d’objets JEVEUX.

On peut alors “manipuler” dans le FORTRAN des structures de données complexes : le passage de la SD en argument se fait par son nom (chaîne de caractères).

Ceci améliore grandement la définition des interfaces des routines : au lieu de transmettre des multitudes de vecteurs en arguments, on transmet quelques structures de données.

Le regroupement d’un ensemble d’objets JEVEUX dans une structure de données se fait par de simples conventions de noms connues de l’ensemble des programmeurs.

Une Structure de Données est typée. Lorsque l’on exécute (par exemple) la commande :

mailla = LIRE_MAILLAGE () ;

Celle-ci doit créer une SD de type maillage et de nom “mailla”. A la fin de l’exécution de la commande, il doit exister sur la base ‘GLOBALE’ un certain nombres d’objets JEVEUX dont l’ensemble forme la SD mailla :

'MAILLA .DIME'

'MAILLA .CONNEX'

'MAILLA .NOMNOE'

'MAILLA .NOMMAI'

…

Les 8 premiers caractères des objets sont ceux provenant de l’utilisateur. Les autres caractères (qui servent à distinguer les objets les uns des autres) sont fixés par les programmeurs. La description du contenu des objets .DIME, .CONNEX, … forme ce que l’on appelle la description de la SD de type maillage (cf. D4 - Description des Structures de Données).

Remarque importante :

Les seules informations nécessaires au bon déroulement d’une commande sont :

→ les valeurs que l’utilisateur a fournies derrière les mots clés de la commande : entiers, réels, …

→ les SD (déjà créées par des commandes précédentes) données en argument.

Il n’y a pas d’information sous-terraine ( COMMONS, fichiers, …) entre les commandes. C’est le respect de cette règle qui assure l’indépendance réelle des commandes entre elles.

Les seules exceptions à cette règle sont :

  • la SD catalogue [D4.01.01] qui est accessible partout (mais elle n’est jamais modifiée),

  • certaines écritures (ou lectures) dans des fichiers. Dans ce cas, le nom de la commande est toujours de la forme : IMPR_XXXX ou (LIRE_XXXX).Le “format” du fichier peut alors être vu comme la description d’une SD, par exemple :

  • maillage Aster (LIRE_MAILLAGE),

  • fonction Aster (LIRE_FONCTION),

  • résultats à visualiser par I-DEAS (IMPR_RESU (FORMAT : IDEAS …)).