Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: Calcul des tableaux élémentaires Sup.: 2 Interpolation Préc.: 2.3 Le module CORNOE Index Table des matières


2.4 Le module CONDL1

 

2.4.1 But

Ce module  crée une S.D. de type NDL1 . Cette S.D. permet de connaître pour chaque noeud du maillage les degrés de liberté qui lui sont associés.

Soit ND le nombre de degré de liberté par noeud.

Deux cas peuvent se présenter :

Dans le premier cas, les ND degrés de liberté associés au noeud j sont : (j-1)*ND + 1 j*ND dans le second cas, un calcul direct n'est pas possible, on utilise un pointeur : la S.D. NDL1.

Différents algorithmes doivent connaître les numéros des d.l. associés à un noeud, le fait que ND soit ou non égal à 0 est rendu transparent à l'utilisateur (et au programmeur de tels algorithmes) grâce à la fonction NDL, où

Quelque soit la valeur de ND les d.l. associés au noeud K sont donc : NDL(K) + 1 NDL(K+1)

Avant la première utilisation de NDL il est nécessaire d'initialiser le système à l'aide de la fonction LRNDL1.

Si ND est constant (non nul) la S.D. NDL1 n'existe pas, les appels des modules utilisent NFNDL1 égal à 0. Sinon, deux cas se présentent, suivant la valeur de la variable NNPSEG : nombre de noeuds par page dans la S.D. NDL1.

Cette S.D. n'est pas toujours utile ; en effet, lorsque

Cependant, pour des raisons de transparence, on suppose toujours

Lorsque l'on désire connaître le contenu de la

  1. Si NNPSEG > NOE, alors un tableau NNDL1, d'adresse IANDL1, contenant (NOE+1) mots réside en mémoire centrale, et NDL(K+1) = M(IANDL1+K) 0 K NOE - 1 Si NFNDL1 est strictement positif, le tableau est lu sur fichier.

  2. si NNPSEG < NOE, alors La fonction NDL recherche si la bonne page (I) est en mémoire centrale, sinon elle la retrouve, la charge et retourne : NDL(K+1) = M(IANDL1 + K - NNPSEG* I) 0 K NOE -1
Remarque : Cette dernière option n'est pratiquement jamais utilisée.

2.4.2 Mise en oeuvre du module CONDL1

Le programme d'appel :

En outre, le module CONDL1 initialise le commun associé à la S.D. NDL1, ce commun contient cinq variables :

COMMON/ALNDL1/NENDL1,NNDL1,IANDL1,LNDL1,NNPSEG
NENDL1 :
(I) nombre de pages,
NNDL1 :
(I) nom du tableau contenant les informations sur les degrés de liberté,
IANDL1 :
(I) adresse dans le super-tableau M du tableau NNDL1,
LNDL1 :
(I) longueur du tableau NNDL1 (NNPSEG+1)
NNPSEG :
(I) longueur d'une page (nombre de noeuds par page), NNPSEG = (NOE, NNSEG) Remarque : On initialisera toujours NNPSEG à une valeur très grande afin que toute la S.D. NDL1 réside entièrement en mémoire centrale.

Sous-programmes et fonctions supplémentaires :

Le module CONDL1 n'appelle aucun sous-programme ou fonctions supplémentaires. Les fonctions LRNDL1 et NDL ne sont pas utilisées par le

Les fichiers et bibliothèques nécessaires :

La S.D. d'entrée MAIL ne doit pas nécessairement être en mémoire secondaire NFMAIL 0

La S.D. de sortie NDL1 doit résider en mémoire secondaire uniquement si
[4] NNPSEG < NOE, sinon elle peut rester en mémoire centrale.

Les bibliothèques Modulef utilisées par le module CONDL1 sont dans l'ordre :
COSD UTSD UTII U_xxx([note] utilitaires spécifiques à une machine)

Les cartes associés :

Eventuellement celle du module INITI :

Le plus souvent, ces deux dernières cartes de données sont initialisées automatiquement.

2.4.3 Exemple d'utilisation

Cet exemple est un problème de plaque, avec une formulation variationnelle en déplacement, l'élément fini utilisé est TRIA CLOT. Cet élément fini a deux inconnues variationnelles et . Les degrés de liberté définissent deux types de noeuds :

type 1 :
les sommets, 3 d.l. par noeud, 'VN,DX,DY' pour
type 2 :
les milieux des arêtes, 1 d.l. par noeud, 'DN' pour
Le maillage est celui décrit dans [Guide Modulef - 1]([note] Fichier de commande d1nopo.d de la bibliothèque tesd de Modulef).

Nous donnons maintenant le listing d'un programme appelant le module CONDL1 (CALL_CONDL1), ainsi qu'un listing d'exécution de ce programme.

Listing du programme appelant le module CONDL1 {

     1	      PROGRAM CALL_CONDL1
     2	C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     3	C
     4	C    CREATION DE LA  S.D. NDL1, CETTE S.D. DECRIT LES D.L. ASSOCIES
     5	C    A CHAQUE NOEUDS DU MAILLAGE 
     6	C
     7	C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     8	C
     9	      INTEGER M, LM
    10	      PARAMETER ( LM = 50 000 )
    11	      COMMON M(LM)
    12	C
    13	      INTEGER IMPRE, NNN, IMPRIM, NIMAIL, NFMAIL, NFNDL1, NINDL1, 
    14	     1        IINFO, NNSEG, LNOET, NNOMAX, ND, NDLMAX
    15	      CHARACTER*72 NOMSD
    16	 
    17	  100 FORMAT(' -- NOM DE LA S.D.E. MAIL ')
    18	C
    19	C    INITIALISATION
    20	C    --------------
    21	      IMPRE = 10
    22	      NNN = 0
    23	      CALL INITIS (M, LM, IMPRE, NNN)
    24	C
    25	      IMPRIM = IINFO('I')
    26	C
    27	C    OUVERTURE DE LA S.D.E MAIL
    28	C    --------------------------
    29	      WRITE(IMPRIM,100)
    30	      CALL LIBCAR(NOMSD)
    31	      CALL TRUNIT(NFMAIL)
    32	      CALL OUVRIS (NFMAIL, NOMSD, 'OLD, UNFORMATTED', 0)
    33	      NIMAIL = 1
    34	C
    35	C    LA   S.D. NDL1 RESIDE EN MEMOIRE CENTRALE
    36	C    -----------------------------------------
    37	      NFNDL1 = 0
    38	      NINDL1 = 1
    39	C
    40	C
    41	      NNSEG = 10000
    42	      CALL CONDL1(M, NNSEG, NFMAIL, NIMAIL, NFNDL1, NINDL1, LNOET, 
    43	     1            NNOMAX, ND, NDLMAX)
    44	C
    45	C    FERMETURE DU FICHIER CONTENANT LA S.D.E. MAIL
    46	C    ---------------------------------------------
    47	      CLOSE(NFMAIL)
    48	      END
    49
}

Listing d'exécution

fletan_pate % call_lrndl1

 M   M    OOO    DDDD    U   U   L       EEEEE   FFFFF
 MM MM   O   O   D   D   U   U   L       E       F
 M M M   O   O   D   D   U   U   L       EEEE    FFFF
 M   M   O   O   D   D   U   U   L       E       F
 M   M    OOO    DDDD     UUU    LLLLL   EEEEE   F      VERSION 92

 DATE   : 12/10/92
 AUTEUR : pate                    
 -- NOM DE LA S.D.E. MAIL 
T1MAIL
 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 MODULE CONDL1 :     
 NOMBRE TOTAL DE NOEUDS DES TYPES D ELEMENT   (LNOET) :     6
 NOMBRE MAXIMUM DE NOEUDS D UN ELEMENT       (NNOMAX) :     6
 NOMBRE CONSTANT DE D.L. EN TOUS LES NOEUDS OU 0 (ND) :     0
 NOMBRE MAXIMUM DE D.L. EN UN NOEUD          (NDLMAX) :     3
 NOMBRE DE NOEUDS PAR PAGE DE NDL1           (NNPSEG) :    77

0TABLEAU DU NOMBRE DE DEGRES DE LIBERTE EN CHAQUE NOEUD

 NDLN(  1)=  3   NDLN(  2)=  3   NDLN(  3)=  3   NDLN(  4)=  1   NDLN(  5)=  1  
 NDLN(  6)=  1   NDLN(
0TABLEAU DU NUMERO DU DERNIER DEGRE DE LIBERTE EN CHAQUE NOEUD 
***************************************************************
 NDL1(     1)=        0    NDL1(     2)=        3    NDL1(     3)=        4   
 NDL1(     4)=        5    NDL1(     5)=        6    NDL1(     6)=        9   
 NDL1(     7)=       12    NDL1(     8)=       13    NDL1(     9)=       14   
 NDL1(    10)=       15    NDL1(    11)=       16    NDL1(    12)=       19   
 NDL1(    13)=       20    NDL1(    14)=       23    NDL1(    15)=       24   
 NDL1(    16)=       27    NDL1(    17)=       28    NDL1(    18)=       29   
 NDL1(    19)=       30    NDL1(    20)=       31    NDL1(    21)=       32   
 NDL1(    22)=       33    NDL1(    23)=       34    NDL1(    24)=       37   
 NDL1(    25)=       40    NDL1(    26)=       41    NDL1(    27)=       44   
 NDL1(    28)=       47    NDL1(    29)=       48    NDL1(    30)=       49   
 NDL1(    31)=       50    NDL1(    32)=       51    NDL1(    33)=       52   
 NDL1(    34)=       53    NDL1(    35)=       54    NDL1(    36)=       55   
 NDL1(    37)=       58    NDL1(    38)=       59    NDL1(    39)=       62   
 NDL1(    40)=       63    NDL1(    41)=       66    NDL1(    42)=       67   
 NDL1(    43)=       70    NDL1(    44)=       71    NDL1(    45)=       72   
 NDL1(    46)=       73    NDL1(    47)=       74    NDL1(    48)=       75   
 NDL1(    49)=       76    NDL1(    50)=       77    NDL1(    51)=       78   
 NDL1(    52)=       81    NDL1(    53)=       84    NDL1(    54)=       85   
 NDL1(    55)=       88    NDL1(    56)=       91    NDL1(    57)=       92   
 NDL1(    58)=       93    NDL1(    59)=       94    NDL1(    60)=       97   
 NDL1(    61)=       98    NDL1(    62)=       99    NDL1(    63)=      100   
 NDL1(    64)=      103    NDL1(    65)=      104    NDL1(    66)=      105   
 NDL1(    67)=      106    NDL1(    68)=      109    NDL1(    69)=      110   
 NDL1(    70)=      111    NDL1(    71)=      114    NDL1(    72)=      115   
 NDL1(    73)=      116    NDL1(    74)=      117    NDL1(    75)=      120   
 NDL1(    76)=      123    NDL1(    77)=      124    NDL1(    78)=      125   
 FIN DU MODULE CONDL1 
 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

D'après la sortie de la fonction NDL1, nous voyons que notre problème est composé de 77 noeuds et 125 degrés de liberté.

2.4.4 Les fonctions LRNDL1 et NDL

 

Ces deux fonctions permettent à l'utilisateur de relire la S.D. NDL1 sans se préoccuper de sa forme ou de son existence.

La fonction LRNDL1 doit toujours être utilisée avant la fonction NDL, car celle-ci initialise les tableaux utilisés par la fonction NDL. Nous donnons maintenant les paramètres d'entrée et de sortie de ces deux fonctions.

FUNCTION LRNDL1(I, M, ND, NP1, NFNDL1)  :
(I)

FUNCTION NDL(I)  :
(I)


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: Calcul des tableaux élémentaires Sup.: 2 Interpolation Préc.: 2.3 Le module CORNOE Index Table des matières