1 subroutine gminge ( ulmess, langdf, nfconf, lfconf )
2 c ______________________________________________________________________
6 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
8 c Version originale enregistree le 18 juin 1996 sous le numero 96036
9 c aupres des huissiers de justice Simart et Lavoir a Clamart
10 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
11 c aupres des huissiers de justice
12 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
14 c HOMARD est une marque deposee d'Electricite de France
20 c ______________________________________________________________________
22 c Gestion de la Memoire : INitialiation de la GEstion
24 c ______________________________________________________________________
26 c . nom . e/s . taille . description .
27 c .____________________________________________________________________.
28 c . ulmess . e . 1 . unite logique des messages .
29 c . langdf . e . 1 . langue des messages par defaut .
30 c . . . . 1 : francais .
31 c . . . . 2 : anglais .
32 c . nfconf . e . ch<200 . nom du fichier de configuration .
33 c . lfconf . e . 1 . longueur du nom du fichier .
34 c ______________________________________________________________________
37 c . initialisation de la gestion de la memoire des tableaux
38 c . entiers, reels et character*8.
40 c ......................................................................
42 c . - description des commons -
43 c . la structure des communs est identique pour les reels, les
44 c . entiers et les character*8.
45 c . seul l'intitule rappele le type :
46 c . reel ( "r") entier ("i") character*8 ("s")
49 c . rmem : tableau de travail reel dans lequel seront gerees les
52 c . imem : tableau de travail entier dans lequel seront gerees les
55 c . smem : tableau de travail character*8 dans lequel seront gerees
59 c . minmer: valeur entiere memorisant la plus petite dimension
60 c . du dernier trou afin de connaitre le passage le plus
61 c . delicat rencontre au cours de l'allocation. cette valeur
62 c . est calculee apres compression (voir minler)
63 c . ntrour: valeur entiere . nombre de trous present dans le tableau
65 c . ptrour: tableau entier contenant les pointeurs repertoriant la
66 c . position des trous.
67 c . ltrour: tableau entier contenant la longueur des differents trous
68 c . nballr: valeur entiere contenant le nombre de tableaux deja alloue
69 c . ptallr: tableau entier contenant les pointeurs repertoriant la
70 c . position des tableaux deja alloues
71 c . lgallr: tableau entier contenant la longueur des differents
72 c tableaux deja alloues
73 c . totalr: valeur entiere cumulant les demandes successives de
74 c . memoire pour les tableaux reels
75 c . minler: valeur entiere memorisant la plus petite dimension
76 c . du dernier trou. en cas de compression cette valeur
77 c . qui sera en general differente de celle de minmer
78 c . permettra de connaitre la plus petite taille atteinte
79 c . par le dernier trou et donc la taille maximum que peut
80 c . atteindre le common (voir gmfin)
83 c . structure rigoureusement identique a celle de gmtrrl, sa fonction
84 c . etant de gerer les trous et les tableaux presents dans le tableau
85 c . entier. ses elements se terminent par un "i" au lieu d'un "r".
88 c . structure rigoureusement identique a celle de gmtrrl, sa fonction
89 c . etant de gerer les trous et les tableaux presents dans le tableau
90 c . character*8. ses elements se terminent par un "s" au lieu d'un "r"
93 c . nommxr: chaine de caractere(*8) contenant le nom du plus grand
94 c . tableau associe a minmer
95 c . nomalr: tableau de chaines de caracteres contenant le nom associe
96 c . a chaque tableau deja alloue.
99 c . structure rigoureusement identique a celle de gmalrl, sa fonction
100 c . etant de gerer les chaines de caracteres associees au tableau
101 c . entier. ses elements se terminent par un "i" au lieu d'un "r".
104 c . structure rigoureusement identique a celle de gmalrl, sa fonction
105 c . etant de gerer les chaines de caracteres associees au tableau
106 c . character*8. ses elements se terminent par un "s" au lieu d'un "r"
109 c . memorise un indicateur d'utilisation : 0 on initialise,
110 c . 1 on n'initialise pas
112 c ......................................................................
115 c 0. declarations et dimensionnement
118 c 0.1. ==> generalites
124 parameter ( nompro = 'GMINGE' )
174 character *(*) nfconf
176 integer ulmess, langdf, lfconf
178 c 0.4. ==> variables locales
184 integer ad0, ad1, ntrou0, i
185 integer nenti, nreel, nch08
186 integer guimp, gmimp, raison
189 character *200 nfdico
191 integer lfdico, nfois
194 parameter ( nbmess = 20 )
195 character*80 texte(nblang,nbmess)
199 c 0.5. ==> initialisations
202 c ______________________________________________________________________
206 #ifdef _DEBUG_HOMARD_
207 if ( langdf.ge.1 .and. langdf.le.nblang ) then
212 write (ulmess,texte(langue,1)) 'Entree', nompro
215 texte(1,4) = '(/,''La gestion de la memoire est statique.'')'
217 > '(/,''La gestion de la memoire est semi-dynamique.'')'
218 texte(1,6) = '(/,''La gestion de la memoire est dynamique.'')'
219 texte(1,7) = '(/,a12,/,''... Adresse du commun : '',i19)'
220 texte(1,8) = '(''... Adresse de la memoire : '',i15)'
221 texte(1,9) = '(''... Place reservee : '',i15)'
222 texte(1,10) = '(/,''Programmes du gestionnaire de memoire :'')'
224 > '(''. Version : '',i11,/,''. Sous-version : '',i6)'
226 texte(2,4) = '(/,''A static memory management is used.'')'
228 > '(/,''A semi-dynamic memory management is used.'')'
229 texte(2,6) = '(/,''A dynamic memory management is used.'')'
230 texte(2,7) = '(/,a12,/,''... Common address : '',i19)'
231 texte(2,8) = '(''... Memory address : '',i15)'
232 texte(2,9) = '(''... Reserved space : '',i15)'
233 texte(2,10) = '(/,''Programms of memory manager :'')'
234 texte(2,11) = '(''. Version : '',i11,/,''. Release : '',i6)'
239 cgn write (*,*) 'nfois = ', nfois
241 c 1.1. ==> On commence par arreter brutalement s'il y a une erreur
242 c avant la connaissance de l'option retenue
246 if ( nfois.le.1 ) then
249 c pour les cas ou tout se passe mal, on initialise
250 c pour entrer dans ugstop dans des conditions moins catastrophiques:
264 write(smem(1),'(i8)') 0
267 c 1.2. ==> initialisation du numero d'unite logique associee aux
268 c messages du gestionnaire de memoire et de la langue associee
275 c 1.3. ==> initialisation de l'option supplementaire d'impression :
280 c 1.4. ==> recuperation du nom du fichier qui contient le
281 c dictionnaire des objets structures
283 #ifdef _DEBUG_HOMARD_
284 write (*,texte(langue,3)) 'UGFINO', nompro
286 call ugfino ( mcdico, nfdico, lfdico,
288 > ulsort , langdf, coergm )
290 if ( coergm.ne.0 .and. lfdico.gt.0 ) then
294 call ugstop( nompro, ulsort, guimp, gmimp, raison)
297 c 1.5. ==> mode de gestion de la memoire
299 #ifdef _DEBUG_HOMARD_
300 write (*,texte(langue,3)) 'GMMOGE', nompro
303 call gmmoge ( modgm, typarr,
304 > nenti, nreel, nch08,
308 if ( coergm.ne.0 ) then
312 call ugstop( nompro, ulsort, guimp, gmimp, raison)
315 c 1.6. ==> initialisations et memorisation
317 #ifdef _DEBUG_HOMARD_
318 write (*,texte(langue,3)) 'DMSIZE', nompro
320 call dmsize(tentie,treel,tchain)
332 c 2. valeurs non definies
335 #ifdef _DEBUG_HOMARD_
336 write (*,texte(langue,3)) 'DMINDF', nompro
338 call dmindf ( iindef, rindef, sindef )
343 c 3. initialisations globales
346 c 3.1. ==> aucun tableau n'est encore alloue
348 do 31 , iaux = 1 , maxtab
350 nomali(iaux) = sindef
351 ptalli(iaux) = iindef
352 lgalli(iaux) = iindef
355 nomalr(iaux) = sindef
356 ptallr(iaux) = iindef
357 lgallr(iaux) = iindef
360 nomals(iaux) = sindef
361 ptalls(iaux) = iindef
362 lgalls(iaux) = iindef
367 c 3.2. ==> aucun trou n'est encore present
369 do 32 , iaux = 1 , maxtrs
371 ptroui(iaux) = iindef
372 ltroui(iaux) = iindef
374 ptrour(iaux) = iindef
375 ltrour(iaux) = iindef
377 ptrous(iaux) = iindef
378 ltrous(iaux) = iindef
382 c 3.3. ==> initialisation du nombre de tableaux temporaires alloues
386 c NB: il y a 3 types possibles d'objets simples, et maxtab objets
387 c simples au maximum dans chaque type. Par ailleurs, il y a
388 c au maximum nobjx objets structures.
390 do 33 iaux = 1 , (3*maxtab) + nobjx
392 nomalt(iaux) = sindef
396 c 4. initialisation associee aux grandeurs entieres
398 #ifdef _DEBUG_HOMARD_
399 write (*,*) 'Etape 4 ; entier'
402 call dmloci (imem,ad0)
404 if ( modgm.eq.0) then
407 iaux = nenti - ptrdeb + 1
408 elseif ( modgm.eq.1) then
409 call gbalme('i',nenti+ptrdeb,ad1)
414 iaux = nenti - ptrdeb + 1
417 if ( coergm.ne.0) then
418 write (ulsort,texte(langue,1)) 'Sortie', nompro
420 write (ulsort,*) ' allocation de ',nenti,' entiers'
421 write (ulsort,*) ' impossible '
422 call ugstop( nompro,ulsort,1,1,1)
437 totali = nenti - iaux
440 c 5. initialisation des grandeurs reelles
442 #ifdef _DEBUG_HOMARD_
443 write (*,*) 'Etape 5 ; reel'
446 call dmlocr (rmem,ad0)
448 if ( modgm.eq.0) then
451 iaux = nreel - ptrdeb + 1
452 elseif ( modgm.eq.1) then
453 call gbalme('r',nreel+ptrdeb,ad1)
458 iaux = nreel - ptrdeb + 1
461 if ( coergm.ne.0) then
462 write (ulsort,texte(langue,1)) 'Sortie', nompro
463 write (ulsort,*) ' allocation de ',nreel,' reels'
464 write (ulsort,*) ' impossible '
465 call ugstop( nompro,ulsort,1,1,1)
471 rmem(1) = dble(nreel)
480 totalr = nreel - iaux
483 c 6. initialisation associee aux grandeurs character*8
485 #ifdef _DEBUG_HOMARD_
486 write (*,*) 'Etape 6 ; caracteres'
489 call dmlocs (smem,ad0)
491 if ( modgm.eq.0) then
494 iaux = nch08 - ptrdeb + 1
495 elseif ( modgm.eq.1) then
496 call gbalme('s',nch08+ptrdeb,ad1)
501 iaux = nch08 - ptrdeb + 1
504 if ( coergm.ne.0) then
505 write (ulsort,texte(langue,1)) 'Sortie', nompro
506 write (ulsort,*) ' allocation de ',nch08,' ch*8'
507 write (ulsort,*) ' impossible '
508 call ugstop( nompro,ulsort,1,1,1)
513 CGN write(smem(0),'(i8)') sindef
514 write(smem(1),'(i8)') nch08
523 totals = nch08 - iaux
526 c 8. initialisation des tables des types d'objet structure
528 #ifdef _DEBUG_HOMARD_
529 write (*,*) 'Etape 8 ; objet structure'
532 call gbitos ( nfdico, lfdico, coergm)
534 if (coergm.ne.0) then
535 write (ulsort,*) nompro,' -> gbitos -> coergm : ',coergm
536 call ugstop( nompro,ulsort,1,1,1)
540 c 9. on archive l'information pour le gestionnaire global
542 #ifdef _DEBUG_HOMARD_
543 write (*,*) 'Etape 9 ; archivage'
547 call ugtabl ( code, tabges, ulsort)
552 call ugtabl ( code, tabges, ulsort)
555 c 10. Impression recapitulative
558 #ifdef _DEBUG_HOMARD_
559 write (ulsort,texte(langue,modgm+4))
562 #ifdef _DEBUG_HOMARD_
563 write (ulsort,texte(langue,10))
564 write (ulsort,texte(langue,11)) nuvegm, nusvgm
566 if ( modgm.le.1 ) then
569 write (ulsort,texte(langue,7)) 'Entiers ', adcom(1)
570 write (ulsort,texte(langue,8)) admem(1)
571 write (ulsort,texte(langue,9)) iaux
574 write (ulsort,texte(langue,7)) 'Reels ', adcom(2)
575 write (ulsort,texte(langue,8)) admem(2)
576 write (ulsort,texte(langue,9)) iaux
578 read(smem(1),'(i8)') iaux
579 write (ulsort,texte(langue,7)) 'Caracteres*8', adcom(3)
580 write (ulsort,texte(langue,8)) admem(3)
581 write (ulsort,texte(langue,9)) iaux
585 write (ulsort,texte(langue,7)) 'Entiers ', adcom(1)
587 write (ulsort,texte(langue,7)) 'Reels ', adcom(2)
589 write (ulsort,texte(langue,7)) 'Caracteres*8', adcom(3)
600 if ( codret.ne.0 ) then
604 write (ulsort,texte(langue,1)) 'Sortie', nompro
605 write (ulsort,texte(langue,2)) codret
609 #ifdef _DEBUG_HOMARD_
610 write (ulsort,texte(langue,1)) 'Sortie', nompro