Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 4.2 Programmation Sup.: Structures de Données Préc.: Structures de Données Index Table des matières


4.1 Utilisation

   

L'appel d'un module est généralement de la forme :

CALL MODULE(M, NF1, NI1, NF2, NI2, ...)

Ainsi, chaque SD est désignée par deux entiers NF, NI :

NF
est le numéro de fichier : numéro d'unité d'un fichier ouvert, ou 0 si la SD est en mémoire centrale.
NI
est le numéro de niveau, qui permet de distinguer deux SD en mémoire centrale.

Par ailleurs, certains utilitaires peuvent être appelés à l'extérieur des modules : IMtysd, NOFOSD, TUERSD.

Cette section précise ces différentes notions.

Numéro de fichier

 

Cette section décrit les cas et , puis donne des indications sur l'option à choisir.

Cas (mémoire centrale)

Par convention, signifie que la SD est en mémoire centrale.

Plus précisément :

Cas (mémoire secondaire)

Par convention, signifie que la SD est en mémoire secondaire (fichier disque).

Plus précisément :

Le signe de NF spécifie le mode d'accès : pour un fichier en accès séquentiel, pour un fichier en accès direct. ([note] Pour une SDS en accès direct, appeler auparavant l'utilitaire DEFDIR (p. gif).) Certains modules offrent ainsi le choix entre ces deux modes d'accès, mais la plupart ne traitent que l'accès séquentiel.

Dans tous les cas, la valeur absolue donne le numéro d'unité du fichier. Le fichier doit être préalablement ouvert par un appel à OUVRIR ou OUVRIS (section 1.6).

Choix entre et

L'option
est recommandée quand, dans un même programme, un module crée une SD intermédiaire qui est ensuite lue par un autre module. En effet :

L'option
est à utiliser dans les cas suivants :

Numéro de niveau

 

Quel que soit le numéro de fichier NF, une SD doit être présente en mémoire centrale pour être manipulée. Elle est alors identifiée par son numéro de niveau, qui est un entier compris entre 0 et 36. ([note] Cette limitation est due à l'utilitaire NUMALP (p. gif).)

Exemple

Le but est d'obtenir le maillage d'un disque D par ``recollement'' de trois secteurs A, B, C (figure 4.1).

 
Figure: Disque D formé de trois secteurs A, B, C 

Les trois secteurs A, B, C et le disque D à créer sont décrits par des SD de type NOPO. Supposons que les fichiers correspondants soient déjà ouverts avec les numéros respectifs NFA, NFB, NFC, NFD. Supposons aussi qu'un module appelé RECOL([note] Le véritable module de recollement de Modulef a pour nom RECOLC et nécessite un plus grand nombre de paramètres.) recolle les maillages contenus dans deux SDE X et Y, et crée une SDS Z :

SUBROUTINE RECOL(M, NFX, NIX, NFY, NIY, NFZ, NIZ)

Une première solution est de lire la SD A avec le niveau 1, de lire la SD B avec le niveau 2, et de créer par recollement une SD de niveau 3. Cette dernière est recollée avec la SD C de niveau 4, créant ainsi la SD D cherchée, de niveau 5 :

...

CALL RECOL(M, NFA, 1, NFB, 2, 0, 3)

CALL RECOL(M, 0, 3, NFC, 4, NFD, 5)

...

Après ces deux appels, cinq SD résident simultanément en mémoire centrale, repérées par leurs numéros de niveaux 1, 2, 3, 4, 5. Si la taille du super-tableau est insuffisante, il est préférable de détruire les SD devenues inutiles (utilitaire TUERSD, p. gif) :

...

CALL RECOL(M, NFA, 1, NFB, 2, 0, 3)

CALL TUERSD(..., 1, ...)

CALL TUERSD(..., 2, ...)

CALL RECOL(M, 0, 3, NFC, 4, NFD, 5)

...

En fait, le numéro de niveau ne sert qu'à distinguer deux SD de même type : si deux SD de types différents résident simultanément en mémoire centrale, elles peuvent avoir le même niveau.

Ainsi, dans l'exemple précédent, les SD sont du même type NOPO. Il serait possible d'utiliser dans le même programme une SD MAIL de même niveau (1 à 5).

Convention concernant les modules

De nombreux modules permettent de donner le même numéro de niveau pour une SDE et une SDS de même type. Dans ce cas, la SDE est écrasée et remplacée par la SDS.

Utilitaires nécessaires à l'utilisateur

     

L'utilisateur peut imprimer une SD ( IMtysd), formater une SD ( NOFOSD), ou libérer de l'espace-mémoire ( TUERSD).

Les notations utilisées pour les utilitaires ci-dessous
sont les notations habituelles (cf. Annexe A).

Utilitaire IMtysd

  

SUBROUTINE IMtysd( , , , )

INTEGER M(*), NF, NI, IMPRE

Cet utilitaire imprime le contenu des tableaux d'une SD.

IMPRE est un taux d'impression compris entre 0 et 10 :

IMPRE = 0 n'imprime aucun tableau,

IMPRE = 1 imprime le tableau 2,

IMPRE = 2 imprime en plus le tableau 0,

IMPRE = 3 imprime en plus le tableau 1 et les ``petits'' tableaux,

IMPRE = 4 imprime en plus les tableaux associés,

IMPRE = 5 à 8 imprime en plus les 10 premières variables des ``gros'' tableaux,

IMPRE = 9 à 10 imprime entièrement tous les tableaux,

Le processeur IMAGXX détermine le type de la SD et appelle l'utilitaire d'impression adéquat ( IMNOPO, IMMUA, IMB, ...).

Utilitaire NOFOSD

  

SUBROUTINE NOFOSD( , , , , , , )

INTEGER M(*)

REAL XM(*)

DOUBLE PRECISION DM(*)

INTEGER NF1, NF2, NI, NOPT

En règle générale, les SD sont sauvegardées sur des fichiers ``non formatés''([note] Mot-clé Fortran UNFORMATTED, c'est-à-dire binaire.) plutôt que ``formatés''([note] Mot-clé Fortran FORMATTED, c'est-à-dire ASCII.). Ce choix est plus performant, mais peut poser des problèmes lorsque le même fichier est utilisé par des ordinateurs différents (exemple : poste de travail pour le pré- et post-traitement, et super-ordinateur pour les calculs).

La solution adoptée consiste à utiliser des fichiers intermédiaires formatés. Plus précisément, pour transférer des SD d'un ordinateur A vers un ordinateur B incompatible avec le premier, la marche à suivre est la suivante :

1. Formater les SD de l'ordinateur A.

2. Transférer les SD formatées de l'ordinateur A vers l'ordinateur B.

3. Déformater les SD sur l'ordinateur B.

Les opérations de formatage et de déformatage sont réalisées par le préprocesseur NOFOXX, qui appelle l'utilitaire NOFOSD :

Si (formatage)
, cet utilitaire transforme la SD non formatée NF1 en une SD formatée NF2.
Si (déformatage)
, cet utilitaire transforme la SD formatée NF1 en une SD non formatée NF2.

Utilitaire TUERSD

  

SUBROUTINE TUERSD( , , , )

INTEGER M(*), NI, NOPT

CHARACTER*4 TYSD

Cet utilitaire libère la place-mémoire occupée par une SD.

Si , les tableaux associés sont gardés.

Si , les tableaux associés sont détruits.


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 4.2 Programmation Sup.: Structures de Données Préc.: Structures de Données Index Table des matières