1 subroutine gmdmpg ( minmeg, ntroug, nballg, ptroug, ltroug,
2 > ptallg, lgallg, adug, nommxg, nomalg, jgen, typtab,
4 c ______________________________________________________________________
8 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
10 c Version originale enregistree le 18 juin 1996 sous le numero 96036
11 c aupres des huissiers de justice Simart et Lavoir a Clamart
12 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
13 c aupres des huissiers de justice
14 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
16 c HOMARD est une marque deposee d'Electricite de France
22 c ______________________________________________________________________
24 c . impression detaillee du contenu d'un tableau de travail
25 c . ( caracteristiques des trous et des zones allouees)
26 c ______________________________________________________________________
28 c . nom . e/s . taille . description .
29 c .____________________________________________________________________.
30 c . minmeg . e . . valeur entiere memorisant la plus petite .
31 c . . . . dimension du dernier trou afin de connaitre.
32 c . . . . le passage le plus delicat rencontre au .
33 c . . . . cours de l'allocation. cette valeur est .
34 c . . . . calculee apres compression .
35 c . ntroug . e . . valeur entiere . nombre de trous present .
36 c . nballg . e . . nombre de tableaux deja alloues .
37 c . ptroug . e . . tableau entier contenant les pointeurs .
38 c . . . . repertoriant la position des trous .
39 c . ltroug . e . . tableau entier contenant la long. des trous.
40 c . ptallg . e . . tableau entier contenant les pointeurs .
41 c . . . . repertoriant la position des tableaux .
42 c . lgallg . e . . tableau entier contenant la longueur des .
44 c . nommxg . e . . chaine de caractere(*8) contenant le nom du.
45 c . . . . plus grand tableau associe a minmeg .
46 c . nomalg . e . . tableau de chaines de caracteres contenant .
47 c . . e . . le nom associe a chaque tableau deja alloue.
48 c . jgen . e . . dimension reservee au depart
49 c . typtab . e . . type du tableau :r,i,s,d,c .
50 c . gmimp . e . 1 . 0 => pas d'impression .
51 c . . . . <=2 => impression simple .
52 c . . . . >2 => impression etendue .
53 c ______________________________________________________________________
55 c ......................................................................
56 c . creation gn octobre 1993 a partir des versions specifiques
57 c ......................................................................
60 c 0. declarations et dimensionnement
63 c 0.1. ==> generalites
69 parameter ( nompro = 'GMDMPG' )
86 character*8 nommxg, nomalg(maxtab)
89 integer minmeg, ntroug, nballg, jgen
90 integer ptroug(maxtrs) , ltroug(maxtrs)
91 integer ptallg(maxtab) , lgallg(maxtab)
94 c 0.4. ==> variables locales
96 integer maxg , mtot , ilgmax , maxiut, numtyp
97 integer iaux , jaux , kaux , kaux1
98 integer nbrreg , iall , ideb , ifin
99 integer tabaux(0:maxtab)
102 character*17 blabla(nblang,3)
106 parameter ( nbmess = 21 )
107 character*80 texte(nblang,nbmess)
109 c 0.5. ==> initialisations
110 c ______________________________________________________________________
118 #ifdef _DEBUG_HOMARD_
119 write (ulsort,texte(langue,1)) 'Entree', nompro
124 > '(/18(''=''),'' Etat de la memoire en '',a17,17(''=''))'
126 > '(/,''Nombre d''''objets alloues . . . . . . . :'',i12)'
127 texte(1,6) = '(''Longueur totale en mots . . . . . . . :'',i12)'
128 texte(1,7) = '(''Longueur totale en octets . . . . . . :'',i12)'
129 texte(1,8) = '(''Maximum reserve a la compilation . . :'',i12)'
130 texte(1,9) = '(''Maximum reserve . . . . . . . . . . . :'',i12)'
131 texte(1,10) ='(''Plus grand trou disponible. . . . . . :'',i12)'
132 texte(1,11) ='(''Nombre de trous . . . . . . . . . . . :'',i12)'
134 > '(''Maximum disponible actuel (cumul) . . :'',i12)'
135 texte1 = '(''Plus grande zone deja allouee . : apres '',a8,'', '
136 c 12 34567890123456789012345678901234567890123 45678 90
137 texte(1,13) = texte1//'de taille '',i12)'
139 > '(''- Trou no'',i5,'' adresse :'',i12,'', longueur :'',i12)'
140 texte1 = '(/,''Region occupee no'',i5,/,''. Adresse :'',i12'
141 c 1234 567890123456789012 3456789 012345678901234567 890
142 texte(1,15) = texte1//''' . Longueur :'',i12)'
143 texte1 = '(11(''=''),'' Fin de la gestion de la memoire en '', '
144 c 12345 67 890 1234567890123456789012345678901234567 890
145 texte(1,19) = texte1//'a17,11(''='')/)'
147 >'(''Type '''',a1,'''' inconnu. Il faut r, i, d, s ou c.'')'
148 texte(1,21) = '(''La memoire est geree dynamiquement.'')'
151 > '(/18(''=''),'' Status of memory in '',a17,17(''=''))'
153 > '(/,''Number of allocated objects . . . . . :'',i12)'
154 texte(2,6) = '(''Total length in words . . . . . . . . :'',i12)'
155 texte(2,7) = '(''Total length in bits . . . . . . . . :'',i12)'
156 texte(2,8) = '(''Maximum reserved in compilation . . . :'',i12)'
157 texte(2,9) = '(''Maximum reserved . . . . . . . . . . :'',i12)'
158 texte(2,10) ='(''Greatest available hole . . . . . . . :'',i12)'
159 texte(2,11) ='(''Number of holes . . . . . . . . . . . :'',i12)'
161 > '(''Current available maximum (total) . . :'',i12)'
162 texte1 = '(''Greatest zone already allocated : after '',a8, '
163 c 12 345678901234567890123456789012345678901234567890
164 texte(2,13) = texte1//''', of size '',i12)'
165 texte1 ='(''- Hole #'',i5,'' adress :'',i12,'', length :'''
166 c 12 345678901 23456 7890123456789012 34567 89012345678 90
167 texte(2,14) = texte1//',i12)'
168 texte1 = '(/,''Occupied region #'',i5,/,''. Adress:'',i12,'
169 c 1234 567890123456789012 3456789 01234567890123456 7890
170 texte(2,15) = texte1//''' . Length:'',i12)'
171 texte(2,17) = '(65(''-''))'
172 texte1 = '(14(''=''),'' End of the memory gestion in '','
173 c 12 34567890123456789012 3456789 012345678901234567890
174 texte(2,19) = texte1//'a17,13(''='')/)'
176 >'(''Type '''',a1,'''' unknown. Only r, i, d, s or c.'')'
177 texte(2,21) = '(''Memory is used dynamically.'')'
179 blabla(1,1) = 'reel ============'
180 blabla(1,2) = 'entier =========='
181 blabla(1,3) = 'caractere ======='
183 blabla(2,1) = 'real ============'
184 blabla(2,2) = 'integer ========='
185 blabla(2,3) = 'character ======='
187 1001 format (74('-'))
188 1002 format ('! Tableau ! Taille',a,'Adresse ',
189 >a,'Adresse utile !')
190 1003 format ('! ',a8,' !',i14,' !',i21,' !',i21,' !')
193 c Pour eviter un message de ftnchek :
200 if ( typtab.eq.'r' .or. typtab.eq.'R' ) then
202 elseif ( typtab.eq.'i' .or. typtab.eq.'I' ) then
204 elseif ( typtab.eq.'s' .or. typtab.eq.'S' ) then
207 write (ulsort,texte(langue,1)) 'Sortie', nompro
208 write (ulsort,texte(langue,20)) typtab
209 call ugstop( nompro,ulsort,1,0,1)
213 c 3. bilan de l'etat de la memoire
216 c 3.1. ==> generalites
218 write (ulsort,texte(langue,4)) blabla(langue,numtyp)
219 write (ulsort,texte(langue,5)) nballg
222 do 31 , kaux = 1 , nballg
223 iaux = iaux + lgallg(kaux)
225 write (ulsort,texte(langue,6)) iaux
227 if ( typtab.eq.'i'.or.typtab.eq.'I') then
229 elseif ( typtab.eq.'s'.or.typtab.eq.'S') then
231 elseif ( typtab.eq.'r'.or.typtab.eq.'R') then
235 write (ulsort,texte(langue,7)) iaux
237 call gmmaxi( maxg , mtot , ntroug, ltroug )
240 maxiut = ilgmax - minmeg
242 if ( modgm.le.1 ) then
243 if ( modgm.eq.0 ) then
244 write (ulsort,texte(langue,8)) ilgmax
246 write (ulsort,texte(langue,9)) ilgmax
248 write (ulsort,texte(langue,10)) maxg
249 write (ulsort,texte(langue,11)) ntroug
250 write (ulsort,texte(langue,12)) mtot
251 if ( maxiut.ne.1 ) then
252 write (ulsort,texte(langue,13)) nommxg, maxiut
254 if (ntroug.ne.0) then
255 write (ulsort,texte(langue,14))
256 > (iaux,ptroug(iaux),ltroug(iaux),iaux=1,ntroug)
259 write (ulsort,texte(langue,21))
262 c 3.2. ==> chaque region precedant un trou, sauf la derniere
263 c remarque : en dynamique, la notion de region n'existe pas.
264 c Il n'y a pas de trou.
266 c ideb = position de la fin du trou precedent
267 c = position du debut de la region
268 c ifin = position du debut du trou
269 c = position de la fin de la region
270 c iall = numero du premier tableau de la region
271 c kaux1 = numero du premier tableau de la region suivante
273 if ( gmimp.gt.2 ) then
279 do 32 , iaux = 1 , ntroug
283 c 3.2.1. ==> recherche du numero du premier tableau de la region
284 c suivante, eventuellement fictif si on arrive au bout
286 do 321, kaux = iall , nballg
287 if ( ptallg(kaux).gt.ifin ) then
297 c 3.2.2. ==> impression des caracteristiques de la region, si elle
300 if ( kaux1-1.ge.iall ) then
302 write (ulsort,texte(langue,15)) nbrreg, ideb, ifin-ideb
304 write (ulsort,1002) saux14, saux14
306 do 323, kaux = iall , kaux1-1
307 write (ulsort,1003) nomalg(kaux), lgallg(kaux),
308 > ptallg(kaux), adug(kaux)
315 c 3.2.3. ==> reactualisation des grandeurs pour la region suivante
318 ideb = ifin + ltroug(iaux)
323 c 3.3. ==> on imprime la fin
324 c . l'integralite, s'il n'y a pas de trou
325 c . ce qui suit le dernier trou, s'il y en a
327 if ( iall.le.nballg ) then
329 c 3.3.1. ==> tri par valeur d'adresse croissante
332 do 331 , iaux = iall , nballg
333 do 3311 , jaux = 1 , kaux
334 if ( adug(tabaux(jaux)).gt.adug(iaux) ) then
341 do 3313 , jaux = kaux , kaux1 , -1
342 tabaux(jaux+1) = tabaux(jaux)
348 c 3.3.2. ==> affichage
350 if ( modgm.le.1 ) then
351 write (ulsort,texte(langue,15)) nbrreg, ideb,
355 write (ulsort,1002) saux14, saux14
357 do 33, kaux = 1, kaux
359 write (ulsort,1003) nomalg(kaux1), lgallg(kaux1),
360 > ptallg(kaux1), adug(kaux1)
371 write (ulsort,texte(langue,19)) blabla(langue,numtyp)
373 #ifdef _DEBUG_HOMARD_
374 write (ulsort,texte(langue,1)) 'Sortie', nompro