Salome HOME
Homard executable
[modules/homard.git] / src / tool / Gestion_MTU / gtbila.F
1       subroutine gtbila
2 c ______________________________________________________________________
3 c
4 c                             H O M A R D
5 c
6 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
7 c
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
13 c
14 c    HOMARD est une marque deposee d'Electricite de France
15 c
16 c Copyright EDF 1996
17 c Copyright EDF 1998
18 c Copyright EDF 2002
19 c Copyright EDF 2020
20 c ______________________________________________________________________
21 c
22 c    'Gestion du Temps : BILAn de la mesure'
23 c     -          -       ----
24 c ______________________________________________________________________
25 c
26 c====
27 c 0. declarations et dimensionnement
28 c====
29 c
30 c 0.1. ==> generalites
31 c
32       implicit none
33       save
34 c
35       character*6 nompro
36       parameter ( nompro = 'GTBILA' )
37 c
38 #include "genbla.h"
39 #include "gtnbse.h"
40 c
41 c 0.2. ==> communs
42 c
43 c 0.3. ==> arguments
44 c
45 c 0.4. ==> variables locales
46 c
47 #include "gtdita.h"
48 c
49       integer code
50 c
51       double precision tuser, tsyst
52 c
53       integer numan1, numan2
54       integer nbsec1, nbsec2, nbseco, nbjour
55       integer iheure, iminut, iseco
56       integer iaux, ideb, ifin
57       integer jaux
58       integer ulsort, langue, imprgt
59 c
60       double precision temps(3), tpmoy, tptota
61       double precision xheure, xminut
62       double precision daux
63 c
64       character*7 blabla
65       character*8 saux08(nblang,2)
66 c
67       logical afaire, afair1
68 c
69       integer nbmess
70       parameter ( nbmess = 20 )
71       character*80 texte(nblang,nbmess)
72 c
73 c 0.5. ==> initialisations
74 c ______________________________________________________________________
75 c
76 c====
77 c 1. dernier appel du temps
78 c====
79 c
80       call dmtemp ( tuser, tsyst )
81 c
82 c====
83 c 2. messages
84 c====
85 c
86 #include "impr01.h"
87 c
88       texte(1,4) = '       Identification de la section      '
89       texte(1,5) = '      Temps d''execution    '
90       texte(1,6) = '           Nom            '
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        '
98 c
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        '
109 c
110       saux08(1,1) = 'secondes'
111       saux08(2,1) = 'seconds '
112       saux08(1,2) = 'seconde '
113       saux08(2,2) = 'second  '
114 c
115 c====
116 c 3. recuperation de l'information
117 c====
118 c
119       code = 1
120       iaux = nbsep1
121       call gttabl ( code, iaux, nbrapp, ouvert, titsec, tpscpu )
122 c
123       imprgt = nbrapp(-4)
124       langue = nbrapp(-3)
125       ulsort = nbrapp(0)
126 c
127 #ifdef _DEBUG_HOMARD_
128       write (ulsort,texte(langue,1)) 'Entree', nompro
129       call dmflsh (iaux)
130 #endif
131 c
132 c====
133 c 4. fin des mesures
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.
141 c====
142 c
143       do 4 , iaux = 1 , nbsep1
144         if ( ouvert (iaux) ) then
145           tpscpu (iaux) = tpscpu (iaux) + tuser
146           ouvert (iaux) = .false.
147         endif
148     4 continue
149 c
150       tpscpu(0) = tpscpu(0) + tsyst
151 c
152 c====
153 c 5. impression eventuelle des temps de chaque section
154 c====
155 c
156 #ifdef _DEBUG_HOMARD_
157       afaire = .true.
158 #else
159       if ( mod(imprgt,2).eq.0 ) then
160         afaire = .true.
161       else
162         afaire = .false.
163       endif
164 #endif
165 c
166       if ( afaire ) then
167 c
168         do 5 , jaux = 1, 2
169 c
170         write (ulsort,50000 )
171 c
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)
180 c
181         do 51 , iaux = 1 , nbsect
182 c
183           afair1 = .false.
184           if ( nbrapp(iaux).gt.0 ) then
185             if ( jaux.eq.1 ) then
186               afair1 = .true.
187             else
188               if ( mod(iaux,10).eq.0 ) then
189                 afair1 = .true.
190               endif
191             endif
192           endif
193           if ( afair1 ) 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),
199      >                            tpmoy, daux
200           endif
201 c
202    51   continue
203 c
204         write (ulsort,50021 ) titsec (langue,nbsep1), tpscpu (nbsep1)
205 c
206         write (ulsort,50030 )
207 c
208     5   continue
209 c
210       endif
211 c
212 50000 format(//)
213 50010 format( 79('.'),
214      >/':',a41,        ':',4x,a27,4x,':',
215      >/':',77('.'),':',
216      >/':',a26,':',a14,':',a27,        ':   %   :',
217      >/':',26x,':',a14,':',a13,':',a13,':',7x,':',
218      >/':',77('.'),':')
219 50020 format(
220      > ':',26x,':',5x,':',8x,':',13x,':',13x,':',7x,':',
221      >/': ',a24,                 ' :',i4,' :',i7,' :'
222      >   ,g12.5,' :',g12.5,' :',f6.1,' :')
223 50021 format(
224      > ':',26x,':',5x,':',8x,':',13x,':',13x,':',7x,':',
225      >/': ',a24,                 ' :',4x,' :',7x,' :'
226      >   ,g12.5,' :',12x  ,' :',6x,' :')
227 50030 format(':',77('.'),':')
228 50040 format(79('.'))
229 c
230 c====
231 c 6. calcul du temps total :
232 c====
233 c
234       if ( afaire ) then
235 c
236 c 6.1. ==> acquisition de la date actuelle et de depart
237 c
238       call ugdhco ( numan2, nbsec2 )
239 c
240       numan1 = nbrapp (-2)
241       nbsec1 = nbrapp (-1)
242 c
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.
245 c
246       nbseco = nbsec2 - nbsec1
247 c
248       if ( numan1.ne.numan2 ) then
249         if ( mod(numan1,4) .eq. 0 ) then
250           nbjour = 366
251         else
252           nbjour = 365
253         endif
254         nbseco = nbseco + 86400*nbjour
255       endif
256 c
257 c le temps total en machine n'est, au mieux, evalue qu'a 1 seconde pres.
258 c
259       tptota = dble ( max(0,nbseco) )
260 c
261       endif
262 c
263 c====
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.
268 c====
269 c
270       if ( afaire ) then
271 c
272       if ( tpscpu(0).ge.0.0d0 ) then
273         temps (1) = tpscpu(0)
274         ideb = 1
275       else
276         temps (1) = 0.0d0
277         ideb = 2
278       endif
279       temps (2) = max(0.0d0, tpscpu (nbsep1) )
280 c
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) ).
286 c
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
290           tptota = dble(iseco)
291         else if ( temps(1)+temps(2).gt.0.0d0 ) then
292           tptota = temps(1)+temps(2)
293         endif
294         if ( temps(1)+temps(2)-tptota.gt.0.5d0 ) then
295           tptota = tptota + 1.0d0
296         endif
297       endif
298 c
299       temps (3) = tptota
300 c
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
305 c parallele).
306 c
307       endif
308 c
309 c====
310 c 8. conversion en heures, minutes et secondes des differents
311 c    temps globaux et impressions recapitulatives.
312 c====
313 c
314       if ( afaire ) then
315 c
316       if ( tptota.le.1.0d0 ) then
317         ifin = 2
318       else
319         ifin = 3
320       endif
321 c
322       do 80 , iaux = ideb , ifin
323 c
324         if ( iaux.eq.3 ) then
325           write (ulsort,50040 )
326         endif
327         write (ulsort,80000 )
328 c
329         if ( temps(iaux).ge.3600.d0 ) then
330 c
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 )
335 c
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
342             iseco = iseco + 1
343           endif
344           if ( iseco.ge.60 ) then
345             iseco = iseco - 60
346             iminut = iminut + 1
347           endif
348           if ( iminut.ge.60 ) then
349             iminut = iminut - 60
350             iheure = iheure + 1
351           endif
352 c
353           if ( iheure.le.1 ) then
354             if (langue.ne.2) then
355               blabla = ' heure '
356             else
357               blabla = ' hour  '
358             endif
359           else
360             if (langue.ne.2) then
361               blabla = ' heures'
362             else
363               blabla = ' hours '
364             endif
365           endif
366 c
367           if (iminut.gt.1) then
368           write (ulsort,81010) texte(langue,11+iaux)(1:30),
369      >                         iheure , blabla , iminut , iseco
370           else
371           write (ulsort,81011) texte(langue,11+iaux)(1:30),
372      >                         iheure , blabla , iminut , iseco
373           endif
374 c
375         else
376 c
377           if ( temps(iaux).ge.60.d0 ) then
378 c
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
385               iseco = iseco + 1
386             endif
387             if ( iseco.ge.60 ) then
388               iseco = iseco - 60
389               iminut = iminut + 1
390             endif
391 c
392             if ( iminut.le.1 ) then
393               blabla = 'minute '
394             else
395               blabla = 'minutes'
396             endif
397 c
398             if ( iseco.gt.1 ) then
399               write (ulsort,81020) texte(langue,11+iaux)(1:30), iminut,
400      >                             blabla, iseco, saux08(langue,1)
401             else
402               write (ulsort,81020) texte(langue,11+iaux)(1:30), iminut,
403      >                             blabla, iseco, saux08(langue,2)
404             endif
405 c
406           else
407 c
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)
414             else
415               write (ulsort,81031) texte(langue,11+iaux)(1:30),
416      >                             max(nbseco,1), saux08(langue,2)
417             endif
418 c
419           endif
420 c
421         endif
422 c
423         write (ulsort,80010 )
424 c
425    80 continue
426 c
427       endif
428 c
429 80000 format(':',41x,':',35x,':')
430 80010 format(':',41x,':',35x,':',
431      >     /,':',77('.'),':')
432 c
433 81010 format (
434      >        ': ',a30,10x,':',i3,a7,i3,' minutes',i3,' s         :')
435 81011 format (
436      >        ': ',a30,10x,':',i3,a7,i3,' minute ',i3,' s         :')
437 c
438 81020 format (
439      >        ': ',a30,10x,': ',i3,' ',a7,i3,' ',a8,11x,':')
440 c
441 81030 format( ': ',a30,10x,':   ',g12.5,' ',a8,11x,':')
442 81031 format( ': ',a30,10x,':',12x,i3,' ',a8,11x,':')
443 c
444 #ifdef _DEBUG_HOMARD_
445       write (ulsort,texte(langue,1)) 'Sortie', nompro
446       call dmflsh (iaux)
447 #endif
448 c
449       end