Présentation générale ===================== Introduction ------------ La gestion des zones de mémoire affectées à chaque structure de données constitue une part importante de l’organisation d’une application de calcul scientifique rédigée en langage Fortran. La norme Fortran 77 propose un nombre très réduit de possibilités d’implantation de ces structures de données : * variable simple, * tableau de dimension fixe, * zone commune de dimension fixe partagée entre plusieurs unités de programme. Ces possibilités sont insuffisantes pour réaliser une gestion dynamique des ressources. Par ailleurs, pour toute application conduisant à des quantités de données d’un volume supérieur à celui de la mémoire disponible sur une machine donnée, le rédacteur de l’application doit prendre en charge les débordements mémoire et programmer tous les échanges entre la mémoire centrale et la mémoire auxiliaire (fichiers). Le progiciel JEVEUX permet de prendre en charge, directement dans le texte source Fortran plusieurs niveaux d’opérations : * la normalisation des types Fortran utilisables sur des machines différentes (entier, réel, complexe, logique, caractère). Les critères de portabilité sont ceux définis avec le progiciel ENVIMA (Manuel de Développement - Fascicule [:ref:`D6.01.01 `] : le descripteur d’environnement machine), * la création de structures de données élémentaires (objets JEVEUX) de taille définie à l’exécution, partageables entre plusieurs unités de programmes et auto documentées, * la prise en charge de tous les transferts entre mémoire centrale et mémoire auxiliaire. *Remarques :* *R1 :Ce document présente l’ensemble des fonctions du progiciel* Jeveux \*. Un certain nombre de ces fonctions n’a pas* à être *connu* es *du programmeur “lambda” (celles qui ne doivent être appelées que par le superviseur, cf. §* :ref:`4.21 ` *Les routines d’initialisation utilisées par le superviseur.). Il faut également remarquer que la grande majorité des utilisations de* Jeveux *dans Aster concerne la gestion d’objets “simples” (des vecteurs). Le lecteur pressé (ou effrayé par l’ensemble de ce document) pourra se convaincre que la gestion d’un vecteur par* Jeveux *est très simple en regardant l’exemple du §* :ref:`5.1 ` *Création et réutilisation d'un vecteur de réel.* *R2 :* *Le développeur du Code_Aster qui utilise* Jeveux *doit (en plus de ce document avoir pris connaissance d’un autre document : “Usage de Jeveux”* [:ref:`D2.06.01 `]. Les objets JEVEUX : objet simple et collection ---------------------------------------------- L’objet simple ~~~~~~~~~~~~~~ L’objet simple est la structure de données de base du progiciel. Un objet simple est constitué du descripteur et d’un seul segment de valeurs. Le nombre d’attributs d’un descripteur d’objet simple est fixé pour une version du progiciel. **Remarque :** *Le nombre d’attributs est identique pour tous les objets simples.* .. code-block:: text Objet simple = Nom + Attributs + 1 Segment de valeurs Le nom d’un objet simple est constitué de 24 caractères pris parmi les suivants : * lettres majuscules de A à Z, les lettres minuscules de a à z et chiffres de 0 à 9 ; * quatre caractères spéciaux : .. csv-table:: "le blanc", "«»" "le point", "« . »" "le blanc souligné", "« _ »" "le et commercial", "« & »" * le caractère spécial $ est licite mais non accessible à l'utilisateur. Les principaux attributs sont les suivants : * le genre: décrit la structure de l’objet simple .. csv-table:: "E", "élément simple (variable)" "V", "vecteur (tableau à un indice)" "N", "répertoire de noms (ce genre sera défini dans le paragraphe suivant)" Le genre permet d’associer le segment de valeurs aux concepts classiques de variable, de tableau Fortran ou de définir une structure de données plus complexe. * le type: définit le type Fortran des variables scalaires de l’objet .. csv-table:: "I", "entier", "(type Fortran INTEGER)" "S", "entier", "(type Fortran INTEGER*4)" "R", "réel", "(type Fortran REAL*8)" "C", "complexe", "(type Fortran COMPLEX*16)" "L", "logique", "(type Fortran LOGICAL)" "K8, K16, K24, K32, ou K80", "caractères", "(type Fortran CHARACTER)" * la longueur: définit la longueur du segment de valeurs associé (le nombre de scalaires). La collection ~~~~~~~~~~~~~ **Collection :** Une collection est une structure de données permettant de mettre en commun certains attributs de l’ensemble des objets la composant. Elle autorise indifféremment l’accès par nom ou par numéro aux objets de collection et de gérer des objets de longueur variable. Deux types de collection sont possibles : * l’une comportant un segment de valeurs par objet de collection : la collection dispersée, * l’autre un seul segment de valeurs pour tous les objets de la collection : la collection contiguë. *Remarque :* *Une collection ne peut être construite a posteriori par regroupement d’objets simples.* Une collection est réalisée à partir du descripteur de collection et d’un ou plusieurs segments de valeurs. Descripteur de collection : Le descripteur de collection est l’ensemble des informations définissant la collection : le nom et les attributs. Les attributs communs à tous les objets de la collection sont notamment : le genre, le type, la longueur si elle est constante, etc.... Les attributs spécifiques à chaque objet de collection sont gérés séparément. Du point de vue de l’utilisateur, un objet de collection possède tous les attributs d’un objet simple, il pourra être utilisé de la même manière. .. code-block:: text Collection = Nom + Attributs + 1 ou plusieurs Segments de valeurs Le nom d’une collection est constitué de manière identique à celui d’un objet simple. Les attributs spécifiques d’une collection sont : * l’accès : qui définit le mode d’accès aux objets de la collection : l’accès peut être réalisé par nom (la collection est alors dite nommée), par numéro (la collection est dite numérotée), * le stockage : qui décrit l’organisation en mémoire des valeurs associées aux objets de la collection, les valeurs peuvent être contiguës (un seul segment de valeurs), ou bien dispersées (un segment de valeurs par objet de collection). Tous les objets d’une collection contiguë se suivent dans le segment de valeurs associé, * la longueur : elle est constante si tous les objets de la collection partagent la même longueur, elle est variable si les objets sont de longueurs différentes, * le nombre maximum d’objets de la collection. Deux attributs de collection peuvent être partagés entre plusieurs collections. Dans le cas d’une collection d’objets de longueur variable, le vecteur des longueurs peut être réutilisé pour une autre collection contenant le même nombre d’objets. De même, deux collections peuvent partager les noms des objets de collection. Ces objets sont appelés pointeurs externes. Types de collection : La collection numérotée est composée d’objets dont la clef d’accès est un entier variant de 1 au nombre maximum d’objets de la collection. Dans une collection numérotée tous les objets préexistent. La collection nommée utilise un objet simple particulier de genre répertoire de noms qui contient la liste des noms d’objets de la collection gérée par adressage associatif. Ce répertoire de noms peut être défini par l’utilisateur ou créé automatiquement. Les noms des objets sont insérés dans l’ordre chronologique de création des noms. On peut accéder à un objet de collection nommée par son nom et/ou par le numéro d’ordre d’insertion.