1 subroutine gmmoge ( modgm, typarr,
5 c ______________________________________________________________________
9 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
11 c Version originale enregistree le 18 juin 1996 sous le numero 96036
12 c aupres des huissiers de justice Simart et Lavoir a Clamart
13 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
14 c aupres des huissiers de justice
15 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
17 c HOMARD est une marque deposee d'Electricite de France
23 c ______________________________________________________________________
25 c Gestion de la Memoire : MOde de GEstion
27 c ______________________________________________________________________
29 c . nom . e/s . taille . description .
30 c .____________________________________________________________________.
31 c . modgm . s . 1 . 0 : mode statique .
32 c . . . . 1 : mode semi-dynamique .
33 c . . . . 2 : mode dynamique .
34 c . typarr . s . 1 . gere les arrets de gm en cas de probleme .
35 c . . . . 0 : arret par le programme ad-hoc .
36 c . . . . 1 : code de retour non nul .
37 c . nenti . s . 1 . nombre d'entiers .
38 c . nreel . s . 1 . nombre de reels .
39 c . nresp . s . 1 . nombre de reels simple precision .
40 c . nfconf . e . ch<200 . nom du fichier de configuration .
41 c . lfconf . e . 1 . longueur du nom du fichier .
42 c . codret . s . 1 . 0 : tout va bien .
43 c . . . . 1 : probleme .
44 c ______________________________________________________________________
47 c 0. declarations et dimensionnement
50 c 0.1. ==> generalites
56 parameter ( nompro = 'GMMOGE' )
65 c les communs qui suivent sont ici pour declarer les variables lgxxxx
78 integer nenti, nreel, nch08
81 c 0.4. ==> variables locales
83 integer iaux, nbaux, codre0
87 parameter ( nbtype = 3 )
97 parameter ( nbmess = 10 )
98 character*80 texte(nblang,nbmess)
100 c 0.5. ==> initialisations
102 c ______________________________________________________________________
110 #ifdef _DEBUG_HOMARD_
111 write (ulsort,texte(langue,1)) 'Entree', nompro
116 >'(''L''''option de la memoire '',a8,'' est absente.'')'
117 texte(1,4) = '(''On impose un mode de gestion dynamique.'')'
119 >'(''L''''option de la memoire '',a8,'' est illisible.'')'
120 texte(1,6) = '(''On impose 0 valeurs.'')'
121 texte(1,7) = '(''Le type '',i8,'' ne convient pas.'')'
122 texte(1,8) = '(''Il faut 0 ou 1.'')'
124 texte(2,10) = '(''The option '',a8,'' is missing.'')'
125 texte(2,4) = '(''A dynamic memory management is imposed.'')'
126 texte(2,5) = '(''The option '',a8,'' cannot be read.'')'
127 texte(2,6) = '(''0 values are imposed.'')'
128 texte(2,7) = '(''Type '',i8,'' is not correct.'')'
129 texte(2,8) = '(''0 or 1 is needed.'')'
132 c 2. recuperation du mode de gestion de la memoire
135 c 2.1. ==> recherche de l'option de pilotage qui contient le
136 c le mode de gestion de la memoire
139 call ugfino ( motcle, nfmode, lfmode,
141 > ulsort , langue, codret )
143 c 2.2. ==> si aucune option n'a ete precisee, on passe en mode dynamique
145 if ( codret.eq.1 ) then
146 #ifdef _DEBUG_HOMARD_
147 write (ulsort,texte(langue,1)) 'Sortie', nompro
148 write (ulsort,texte(langue,10)) motcle
149 write (ulsort,texte(langue,4))
155 c 2.3. ==> probleme de lecture
157 elseif ( codret.ne.0 ) then
159 write (ulsort,texte(langue,1)) 'Sortie', nompro
160 write (ulsort,texte(langue,5)) motcle
164 c 2.3. ==> si l'option est dynamique, on y va !
166 elseif ( nfmode(1:lfmode).eq.'Dynamique' .or.
167 > nfmode(1:lfmode).eq.'DYNAMIQUE' .or.
168 > nfmode(1:lfmode).eq.'dynamique' ) then
172 c 2.4. ==> si l'option est semi-dynamique, on y va !
174 elseif ( nfmode(1:lfmode).eq.'Semi-Dynamique' .or.
175 > nfmode(1:lfmode).eq.'SEMI-DYNAMIQUE' .or.
176 > nfmode(1:lfmode).eq.'semi-dynamique' ) then
180 c 2.5. ==> si l'option est statique, on y va !
182 elseif ( nfmode(1:lfmode).eq.'Statique' .or.
183 > nfmode(1:lfmode).eq.'STATIQUE' .or.
184 > nfmode(1:lfmode).eq.'statique' ) then
188 c 2.6. ==> sinon, il y a un probleme
192 write (ulsort,texte(langue,1)) 'Sortie', nompro
193 write (ulsort,texte(langue,5)) motcle
194 if ( lfmode.gt.0 ) then
195 write (ulsort,*) nfmode(1:lfmode)
205 c 3. determination des tailles
208 if ( codret.eq.0 ) then
210 c 3.1. ==> en mode statique, on met les tailles des parameter
212 if ( modgm.eq.0 ) then
218 c 3.2. ==> en mode semi-dynamique, on lit les tailles
220 elseif ( modgm.eq.1 ) then
222 do 32 , iaux = 1 , nbtype
224 c 3.2.1. ==> recherche du motcle dans le fichier de configuration
226 if ( iaux.eq.1 ) then
228 elseif ( iaux.eq.2 ) then
230 elseif ( iaux.eq.3 ) then
234 call ugfino ( motcle, nfmode, lfmode,
236 > ulsort , langue, codre0 )
238 c 3.2.2. ==> si aucune taille n'a ete precisee, on met 0
240 if ( codre0.eq.1 ) then
241 #ifdef _DEBUG_HOMARD_
242 write (ulsort,texte(langue,1)) 'Sortie', nompro
243 write (ulsort,texte(langue,10)) motcle
244 write (ulsort,texte(langue,6))
250 c 3.2.3. ==> probleme de lecture
252 elseif ( codre0.ne.0 ) then
254 write (ulsort,texte(langue,1)) 'Sortie', nompro
255 write (ulsort,texte(langue,5)) motcle
259 c 3.2.4. ==> decodage
263 if ( lfmode.gt.0 .and. lfmode.lt.100 ) then
266 if ( lfmode.lt.10 ) then
267 write(fmtent(3:3),'(i1)') lfmode
269 write(fmtent(3:4),'(i2)') lfmode
271 read ( nfmode,fmtent) nbaux
274 write (ulsort,texte(langue,1)) 'Sortie', nompro
275 write (ulsort,texte(langue,5)) motcle
284 if ( iaux.eq.1 ) then
285 nenti = max(0, nbaux )
286 elseif ( iaux.eq.2 ) then
287 nreel = max(0, nbaux )
288 elseif ( iaux.eq.3 ) then
289 nch08 = max(0, nbaux )
292 codret = max ( codret, abs(codre0) )
296 c 3.3. ==> en mode dynamique, on met des tailles nulles
312 if ( codret.eq.0 ) then
314 c 4.1. ==> recherche de l'option de pilotage qui contient le
315 c le type d'arret de la gestion de la memoire
318 call ugfino ( motcle, nfmode, lfmode,
320 > ulsort , langue, codre0 )
322 c 4.2. ==> si aucune option n'a ete precisee, on arretera brutalement
324 if ( codre0.eq.1 ) then
328 c 4.3. ==> probleme de lecture
330 elseif ( codre0.ne.0 ) then
332 write (ulsort,texte(langue,1)) 'Sortie', nompro
333 write (ulsort,texte(langue,10)) motcle
334 write (ulsort,texte(langue,5))
343 if ( lfmode.gt.0 .and. lfmode.lt.100 ) then
346 if ( lfmode.lt.10 ) then
347 write(fmtent(3:3),'(i1)') lfmode
349 write(fmtent(3:4),'(i2)') lfmode
351 read ( nfmode,fmtent) typarr
354 write (ulsort,texte(langue,1)) 'Sortie', nompro
355 write (ulsort,texte(langue,10)) motcle
356 if ( lfmode.gt.0 ) then
357 write (ulsort,*) nfmode(1:lfmode)
361 write (ulsort,texte(langue,8))
368 c 4.5. ==> verification
370 if ( typarr.lt.0 .or. typarr.gt.1 ) then
371 write (ulsort,texte(langue,1)) 'Sortie', nompro
372 write (ulsort,texte(langue,10)) motcle
373 write (ulsort,texte(langue,7)) typarr
374 write (ulsort,texte(langue,8))
382 c 5. en mode semi-dynamique : le mode de gestion passe en dynamique
383 c si toutes les valeurs sont nulles
386 if ( codret.eq.0 ) then
388 if ( modgm.eq.1 ) then
390 if ( (nenti.eq.0) .and.
392 > (nch08.eq.0) ) then