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 du Temps : BILAn de la mesure'
24 c ______________________________________________________________________
27 c 0. declarations et dimensionnement
30 c 0.1. ==> generalites
36 parameter ( nompro = 'GTBILA' )
45 c 0.4. ==> variables locales
51 double precision tuser, tsyst
53 integer numan1, numan2
54 integer nbsec1, nbsec2, nbseco, nbjour
55 integer iheure, iminut, iseco
56 integer iaux, ideb, ifin
58 integer ulsort, langue, imprgt
60 double precision temps(3), tpmoy, tptota
61 double precision xheure, xminut
65 character*8 saux08(nblang,2)
67 logical afaire, afair1
70 parameter ( nbmess = 20 )
71 character*80 texte(nblang,nbmess)
73 c 0.5. ==> initialisations
74 c ______________________________________________________________________
77 c 1. dernier appel du temps
80 call dmtemp ( tuser, tsyst )
88 texte(1,4) = ' Identification de la section '
89 texte(1,5) = ' Temps d''execution '
91 texte(1,7) = ' Nro : Nombre '
92 texte(1,8) = ' Total : Moyen '
93 texte(1,9) = ' : Appels '
94 texte(1,10) = ' (secondes) '
95 texte(1,12) = 'Temps systeme total '
96 texte(1,13) = 'Temps de calcul total '
97 texte(1,14) = 'Temps total en machine '
99 texte(2,4) = ' Identification of the section '
100 texte(2,5) = ' Computational time '
101 texte(2,6) = ' Name '
102 texte(2,7) = ' # : Number '
103 texte(2,8) = ' Total : Average '
104 texte(2,9) = ' : Calls '
105 texte(2,10) = ' (seconds) '
106 texte(2,12) = 'Total system time '
107 texte(2,13) = 'Total calculation time '
108 texte(2,14) = 'Total time in computer '
110 saux08(1,1) = 'secondes'
111 saux08(2,1) = 'seconds '
112 saux08(1,2) = 'seconde '
113 saux08(2,2) = 'second '
116 c 3. recuperation de l'information
121 call gttabl ( code, iaux, nbrapp, ouvert, titsec, tpscpu )
127 #ifdef _DEBUG_HOMARD_
128 write (ulsort,texte(langue,1)) 'Entree', nompro
134 c on ferme ce qui aurait pu rester ouvert.
135 c dans une situation de fin normale, seule la section
136 c globale, de numero nbsep1, est encore ouverte. toutes
137 c les autres auraient du etre fermees au prealable.
138 c cependant, en cas d'arret anticipe, des sections peuvent
139 c ne pas avoir ete fermees. il vaut mieux le faire ici pour
140 c avoir un affichage des temps qui soit realiste.
143 do 4 , iaux = 1 , nbsep1
144 if ( ouvert (iaux) ) then
145 tpscpu (iaux) = tpscpu (iaux) + tuser
146 ouvert (iaux) = .false.
150 tpscpu(0) = tpscpu(0) + tsyst
153 c 5. impression eventuelle des temps de chaque section
156 #ifdef _DEBUG_HOMARD_
159 if ( mod(imprgt,2).eq.0 ) then
170 write (ulsort,50000 )
172 write (ulsort,50010) texte(langue,4)(1:41),
173 > texte(langue,5)(1:27),
174 > texte(langue,6)(1:26),
175 > texte(langue,7)(1:14),
176 > texte(langue,8)(1:27),
177 > texte(langue,9)(1:14),
178 > texte(langue,10)(1:13),
179 > texte(langue,10)(1:13)
181 do 51 , iaux = 1 , nbsect
184 if ( nbrapp(iaux).gt.0 ) then
185 if ( jaux.eq.1 ) then
188 if ( mod(iaux,10).eq.0 ) then
194 daux = dble ( nbrapp (iaux) )
195 tpmoy = tpscpu (iaux) / daux
196 daux = 100.d0 * tpscpu (iaux) / tpscpu (nbsep1)
197 write (ulsort,50020 ) titsec (langue,iaux), iaux,
198 > nbrapp (iaux), tpscpu (iaux),
204 write (ulsort,50021 ) titsec (langue,nbsep1), tpscpu (nbsep1)
206 write (ulsort,50030 )
213 50010 format( 79('.'),
214 >/':',a41, ':',4x,a27,4x,':',
216 >/':',a26,':',a14,':',a27, ': % :',
217 >/':',26x,':',a14,':',a13,':',a13,':',7x,':',
220 > ':',26x,':',5x,':',8x,':',13x,':',13x,':',7x,':',
221 >/': ',a24, ' :',i4,' :',i7,' :'
222 > ,g12.5,' :',g12.5,' :',f6.1,' :')
224 > ':',26x,':',5x,':',8x,':',13x,':',13x,':',7x,':',
225 >/': ',a24, ' :',4x,' :',7x,' :'
226 > ,g12.5,' :',12x ,' :',6x,' :')
227 50030 format(':',77('.'),':')
228 50040 format(79('.'))
231 c 6. calcul du temps total :
236 c 6.1. ==> acquisition de la date actuelle et de depart
238 call ugdhco ( numan2, nbsec2 )
243 c 6.2. ==> difference ; si l'on a change d'annee, on rajoute le nombre
244 c de secondes de l'annee de depart.
246 nbseco = nbsec2 - nbsec1
248 if ( numan1.ne.numan2 ) then
249 if ( mod(numan1,4) .eq. 0 ) then
254 nbseco = nbseco + 86400*nbjour
257 c le temps total en machine n'est, au mieux, evalue qu'a 1 seconde pres.
259 tptota = dble ( max(0,nbseco) )
264 c 7. archivage des temps de calcul, systeme, d'attente et total
265 c si le temps systeme n'etait pas accessible sur la machine utilisee,
266 c le contenu de tpscpu(0) est negatif. on l'ignore donc dans les
267 c impressions recapitulatives.
272 if ( tpscpu(0).ge.0.0d0 ) then
273 temps (1) = tpscpu(0)
279 temps (2) = max(0.0d0, tpscpu (nbsep1) )
281 c petite correction du temps total en machine, pour les cas ou le
282 c temps total n'a pas pu etre evalue, et surtout les cas ou le temps
283 c total en machine est plus petit que 1 seconde ...
284 c ( meme remarque que ci-dessus, concernant le parallelisme et
285 c la comparaison de tptota avec temps(1)+temps(2) ).
287 if ( tptota.le.0.0d0 ) then
288 iseco = max(0, int(temps(1)+temps(2)) )
289 if ( temps(1)+temps(2).ge.60.0d0 ) then
291 else if ( temps(1)+temps(2).gt.0.0d0 ) then
292 tptota = temps(1)+temps(2)
294 if ( temps(1)+temps(2)-tptota.gt.0.5d0 ) then
295 tptota = tptota + 1.0d0
301 c attention : en environnement multiprocesseur, tptota ne devrait pas
302 c etre compare directement a temps(1)+temps(2) (qui represente la
303 c somme des temps CPU consommes par les differents processeurs
304 c mobilises ==> attention aux eventuelles taches executees en
310 c 8. conversion en heures, minutes et secondes des differents
311 c temps globaux et impressions recapitulatives.
316 if ( tptota.le.1.0d0 ) then
322 do 80 , iaux = ideb , ifin
324 if ( iaux.eq.3 ) then
325 write (ulsort,50040 )
327 write (ulsort,80000 )
329 if ( temps(iaux).ge.3600.d0 ) then
331 xheure = temps(iaux) / 3600.d0
332 iheure = max(1, int ( xheure ) )
333 xheure = dble ( iheure )
334 temps(iaux) = max(0.0d0, temps(iaux) - 3600.d0*xheure )
336 xminut = temps(iaux) / 60.d0
337 iminut = int ( xminut )
338 xminut = dble ( iminut )
339 temps(iaux) = max(0.0d0, temps(iaux) - 60.d0*xminut )
340 iseco = int ( temps(iaux) )
341 if ( temps(iaux)-dble(iseco).gt.0.5d0 ) then
344 if ( iseco.ge.60 ) then
348 if ( iminut.ge.60 ) then
353 if ( iheure.le.1 ) then
354 if (langue.ne.2) then
360 if (langue.ne.2) then
367 if (iminut.gt.1) then
368 write (ulsort,81010) texte(langue,11+iaux)(1:30),
369 > iheure , blabla , iminut , iseco
371 write (ulsort,81011) texte(langue,11+iaux)(1:30),
372 > iheure , blabla , iminut , iseco
377 if ( temps(iaux).ge.60.d0 ) then
379 xminut = temps(iaux) / 60.d0
380 iminut = max(1, int ( xminut ) )
381 xminut = dble ( iminut )
382 temps(iaux) = max(0.0d0, temps(iaux) - 60.d0*xminut )
383 iseco = int ( temps(iaux) )
384 if ( temps(iaux)-dble(iseco).gt.0.5d0 ) then
387 if ( iseco.ge.60 ) then
392 if ( iminut.le.1 ) then
398 if ( iseco.gt.1 ) then
399 write (ulsort,81020) texte(langue,11+iaux)(1:30), iminut,
400 > blabla, iseco, saux08(langue,1)
402 write (ulsort,81020) texte(langue,11+iaux)(1:30), iminut,
403 > blabla, iseco, saux08(langue,2)
408 if ( iaux.le.2 ) then
409 write (ulsort,81030) texte(langue,11+iaux)(1:30),
410 > temps(iaux), saux08(langue,1)
411 elseif ( nbseco.gt.1 ) then
412 write (ulsort,81031) texte(langue,11+iaux)(1:30),
413 > nbseco, saux08(langue,1)
415 write (ulsort,81031) texte(langue,11+iaux)(1:30),
416 > max(nbseco,1), saux08(langue,2)
423 write (ulsort,80010 )
429 80000 format(':',41x,':',35x,':')
430 80010 format(':',41x,':',35x,':',
434 > ': ',a30,10x,':',i3,a7,i3,' minutes',i3,' s :')
436 > ': ',a30,10x,':',i3,a7,i3,' minute ',i3,' s :')
439 > ': ',a30,10x,': ',i3,' ',a7,i3,' ',a8,11x,':')
441 81030 format( ': ',a30,10x,': ',g12.5,' ',a8,11x,':')
442 81031 format( ': ',a30,10x,':',12x,i3,' ',a8,11x,':')
444 #ifdef _DEBUG_HOMARD_
445 write (ulsort,texte(langue,1)) 'Sortie', nompro