Line data Source code
1 : !!****m* ABINIT/m_timana
2 : !! NAME
3 : !! m_timana
4 : !!
5 : !! FUNCTION
6 : !! Analyse the timing, and print in unit ab_out. Some discussion of the
7 : !! number of calls to different routines is also provided, as comments,
8 : !! at the end of the routine, as well as, in the single dataset mode (ndtset<2),
9 : !! a detailed analysis of the time-consuming routines.
10 : !!
11 : !! COPYRIGHT
12 : !! Copyright (C) 1998-2026 ABINIT group (XG, GMR)
13 : !! This file is distributed under the terms of the
14 : !! GNU General Public License, see ~abinit/COPYING
15 : !! or http://www.gnu.org/copyleft/gpl.txt .
16 : !!
17 : !! SOURCE
18 :
19 : #if defined HAVE_CONFIG_H
20 : #include "config.h"
21 : #endif
22 :
23 : #include "abi_common.h"
24 :
25 : module m_timana
26 :
27 : use defs_basis
28 : use m_abicore
29 : use m_xmpi
30 : use m_xomp
31 :
32 : use m_time, only : time_accu, timab, TIMER_SIZE
33 : use defs_abitypes, only : MPI_type
34 :
35 : implicit none
36 :
37 : private
38 : !!***
39 :
40 : public :: timana
41 : !!***
42 :
43 : contains
44 : !!***
45 :
46 : !!****f* ABINIT/timana
47 : !! NAME
48 : !! timana
49 : !!
50 : !! FUNCTION
51 : !! Analyse the timing, and print in unit ab_out. Some discussion of the
52 : !! number of calls to different routines is also provided, as comments,
53 : !! at the end of the routine, as well as, in the single dataset mode (ndtset<2),
54 : !! a detailed analysis of the time-consuming routines.
55 : !!
56 : !! INPUTS
57 : !! mpi_enreg=information about MPI parallelization
58 : !! natom=number of atoms in cell.
59 : !! nband(nkpt*nsppol)=number of bands at each k point, for each polarization
60 : !! ndtset=number of datasets
61 : !! nfft=(effective) number of FFT grid points (for this processor)
62 : !! nkpt=number of k points
63 : !! npwtot(nkpt)=number of planewaves in basis at this k point
64 : !! nsppol=1 for unpolarized, 2 for spin-polarized
65 : !! timopt= if >0, write short analysis, if <0, write full analysis
66 : !! if timopt>=2, or timopt==-2 do not time the timer
67 : !!
68 : !! OUTPUT
69 : !! (only writing)
70 : !!
71 : !! NOTES
72 : !! *) One can suppress the cpu timer call in timein.f, if line 315 of the present routine is uncommented.
73 : !!
74 : !! *) The number of fourwf and nonlop calls can be computed as follows, in the
75 : !! groud-state case, with no reading of wavefunctions (irdwfk==0 and the like),
76 : !! and iscf>0 :
77 : !!
78 : !! 1) For fourwf.f
79 : !!
80 : !! In each cgwf call, there will be
81 : !! 1 call (isign=+1 and -1) for the first gradient calculation,
82 : !! and iline calls for the line minimizations,
83 : !! minus the number of ffts skipped because some wfs are sufficiently converged
84 : !! (there is a counter for that, see the log file)
85 : !!
86 : !! There are nband*nkpt*(nstep+2) calls to cgwf presently, where the
87 : !! (nstep+2) comes from the number of the presence of 2 nonscf loops
88 : !! in the first 2 steps.
89 : !! Thus, the number of fourwf calls in cgwf is
90 : !! nband*nkpt*(nstep+2)*(1+iline) - nskip_fourwf_in_cgwf
91 : !!
92 : !! To compute the density (either in vtowfk or in vtorho - by a mkrho call - )
93 : !! at each step, there will be nband*nkpt one-way calls,
94 : !! minus the number of bands skipped because the occupation number
95 : !! is too small (smaller than 1.0d-14). There is another counter for that.
96 : !! Thus, the number of fourwf calls for the density is
97 : !! nband*nkpt*nstep - nskip_fourwf_for_density
98 : !!
99 : !! For example, for Si with nline=3, nkpt=2, nband=4, nstep=10, and supposing
100 : !! no fourwf calls are skipped, there will be
101 : !! at most 4*2*12=96 calls to cgwf, with 4 two-way fft,
102 : !! that is 384 two-way ffts,
103 : !! and 4*2*10=80 one-way ffts to make the density.
104 : !! Altogether 464-nskip one-way ffts at most.
105 : !!
106 : !! 2) For nonlop.f
107 : !!
108 : !! Presently, there are three different types of call to nonlop :
109 : !! for energy and gradient wrt wavefunctions (choice=1), for forces (choice=2),
110 : !! and for stresses (choice=3).
111 : !!
112 : !! In each cgwf call, there will be one nonlop call for two fourwf calls
113 : !! (independently of the number of skipped fourwf calls, since
114 : !! nonlop is also skipped then). These are the only calls with choice=1.
115 : !! Thus the number will be
116 : !! nband*nkpt*(nstep+2)*(1+iline) - nskip_fourwf_in_cgwf
117 : !!
118 : !! The number of choice=2 nonlop calls is equal to the number of fourwf calls
119 : !! to make the density, that is
120 : !! nband*nkpt*nstep - nskip_fourwf_for_density
121 : !!
122 : !! The number of choice=8 calls is equal to the number of occupied bands
123 : !! at the end of the calculation :
124 : !! nband(occupied)*nkpt
125 : !! The number of bands skipped then is not counted.
126 : !!
127 : !! NOTE : the number of fourwf calls is equal to
128 : !! the # of nonlop (choice=1) calls + the # of nonlop (choice=2) calls
129 : !!
130 : !! SOURCE
131 :
132 126 : subroutine timana(mpi_enreg,natom,nband,ndtset,nfft,nkpt,npwtot,nsppol,timopt)
133 :
134 : !Arguments ------------------------------------
135 : !scalars
136 : integer,intent(in) :: natom,ndtset,nfft,nkpt,nsppol,timopt
137 : type(MPI_type),intent(in) :: mpi_enreg
138 : !arrays
139 : integer,intent(in) :: nband(nkpt*nsppol),npwtot(nkpt)
140 :
141 : !Local variables-------------------------------
142 : !scalars
143 : integer :: aslot,bslot,cslot,flag_count,flag_write,ierr,ii,ikpt,ipart
144 : integer :: ilist,isort,islot,isppol,itim,itimab,ltimab,maxii,me
145 : integer :: npart,nlist,nothers,nproc,nthreads,return_ncount
146 : integer(i8b) :: nbdmean,npwmean,npwnbdmean
147 : integer :: spaceworld,temp_list,totcount,tslot,utimab,ount
148 : real(dp) :: cpunm,lflops,other_cpu,other_wal,percent_limit,subcpu,subwal,timab_cpu,timab_wall,wallnm
149 : character(len=500) :: msg
150 : !arrays
151 : integer(i8b) :: basic(TIMER_SIZE),ndata(TIMER_SIZE),tslots(TIMER_SIZE)
152 : integer :: ncount(TIMER_SIZE)
153 126 : integer,allocatable :: list(:)
154 : real(dp) :: ftimes(2,TIMER_SIZE),ftsec(2),mflops(TIMER_SIZE),nflops(TIMER_SIZE),times(2,TIMER_SIZE),tsec(2),my_tsec(2)
155 : character(len=32) :: names(-1:TIMER_SIZE),entry_name
156 : character(len=*),parameter :: format01040 ="('- ',a32,f15.3,f6.1,f14.3,f6.1,i15,16x,f7.2,1x,f10.2)"
157 : character(len=*),parameter :: format01041 ="('- ',a32,f15.3,f6.1,f14.3,f6.1,i15,3x,g12.3,1x,f7.2,1x,f10.2)"
158 : character(len=*),parameter :: format_head1="(a,t46,a,t54,a,t65,a,t72,a,t80,a,t96,a,3x,a7,1x,a10)"
159 : character(len=*),parameter :: format_head2="(a,t46,a,t54,a,t65,a,t72,a,t80,a,t92,a)"
160 :
161 : ! *************************************************************************
162 :
163 : 01200 format( '- subtotal ',f18.3,f6.1,f14.3,f6.1,31x,f7.2,1x,f10.2)
164 : 01201 format(/,'- subtotal ',f18.3,f6.1,f14.3,f6.1,31x,f7.2,1x,f10.2)
165 :
166 126 : ount = ab_out
167 :
168 126 : call timab(49,1,tsec)
169 :
170 : !The means are computed as integers, for later compatibility
171 126 : nbdmean=0; npwmean=0; npwnbdmean=0
172 263 : do isppol=1,nsppol
173 13624 : do ikpt=1,nkpt
174 13361 : npwmean=npwmean+npwtot(ikpt)
175 13361 : npwnbdmean=npwnbdmean+npwtot(ikpt)*nband(ikpt+(isppol-1)*nkpt)
176 13498 : nbdmean=nbdmean+nband(ikpt+(isppol-1)*nkpt)
177 : end do
178 : end do
179 :
180 : ! initialize ftime, valgrind complains on line 832 = sum up of all Gflops
181 126 : ftimes=zero
182 :
183 126 : npwmean=int(dble(npwmean)/dble(nkpt*nsppol))
184 126 : npwnbdmean=int(dble(npwnbdmean)/dble(nkpt*nsppol))
185 126 : nbdmean=int(dble(nbdmean)/dble(nkpt*nsppol))
186 :
187 : !List of timed subroutines, eventual initialisation of the number of data, and declaration of a slot as being "basic"
188 : !Channels 1 to 299 are for optdriver=0 (GS), 1 (RF) and 2 (Suscep), at random
189 : !Channels 300 to 399 are for optdriver=3 (Screening)
190 : !Channels 400 to 499 are for optdriver=4 (Sigma)
191 : !Channels 500 to 529 are for optdriver=5 (Nonlinear)
192 : !Channels 530 to 549 are for various counters
193 : !Channels 550 to 599 are for PAW
194 : !Channels 600 to 619 are for Recursion Method
195 : !Channels 620 to 639 are for DMFT
196 : !Channels 650 to 699 are for bethe_salpeter code.
197 : !Channels 700 to 799 are for optdriver=0 (again ...)
198 : !Channels 800 to 899 are for the detailed analysis of fourwf
199 : !Channels 900 to 1499 are for optdriver=0 (again ...)
200 : !Channels 1500 to 1599 are for Hartree-Fock.
201 : !Channels 1700 to 1747 are for GWLS.
202 :
203 277200 : names(1:TIMER_SIZE)='*** '
204 : !Basic slots are not overlapping. Their sum should cover most of the code.
205 : !WARNING : the slots from 1 to 99 should be avoided in the future ... They are hard to track.
206 126 : basic(1:TIMER_SIZE)=0
207 126 : names(1)='abinit '
208 126 : names(5)='ewald ' ; basic(5)=1
209 126 : names(6)='setsym ' ; basic(6)=1
210 126 : names(9)='fourdp ' ; basic(9)=1 ; ndata(9)=nfft
211 126 : names(10)='hartre '
212 126 : names(11)='xc:pot/=fourdp '; basic(11)=1; ndata(11)=nfft*nsppol
213 126 : names(12)='mkcore '; basic(12)=1
214 126 : names(13)='mkresi '
215 126 : names(14)='rwwf '; basic(13)=1
216 126 : names(15)='pspini '; basic(15)=1
217 126 : names(16)='mkffnl '; basic(16)=1
218 126 : names(17)='symrhg(no FFT) '; basic(17)=1
219 126 : names(19)='inwffil '
220 :
221 126 : names(22)='cgwf '
222 126 : names(23)='kpgsph '; basic(23)=1 ! Actually, should not be basic ... too complicated, too much overlap ...
223 126 : names(28)='vtowfk '
224 126 : names(30)='vtowfk (afterloop) '
225 126 : names(31)='vtowfk (1) '; basic(31)=1
226 126 : names(37)='stress '; basic(37)=1 ! Actually, should not be basic !
227 126 : names(38)='ewald2 (+vdw_dftd) '; basic(38)=1
228 126 : names(39)='vtowfk (loop) '
229 126 : names(40)='cgwf-O(npw) '
230 126 : names(47)='ingeo/symgroup '
231 126 : names(48)='communic.MPI '
232 126 : names(49)='timana(1) '
233 126 : names(50)='timing timab '; basic(50)=1
234 126 : names(51)='total timab '
235 126 : names(53)='forces-mkcore '
236 126 : names(54)='scfcv_core(1) '
237 126 : names(55)='stress-mkcore '
238 126 : names(57)='rhotov '
239 126 : names(59)='energy '
240 126 : names(61)='dfpt_scfcv : synchro '
241 126 : names(62)='kpgio :synchro '
242 126 : names(63)='mkrho :synchro '
243 126 : names(64)='strkin:synchro '
244 126 : names(65)='forstrnps:synchr '
245 126 : names(66)='vtorho:synchro '; basic(66)=1
246 126 : names(67)='wfsinp:synchro '
247 126 : names(69)='forces '; basic(69)=1 ! Actually, should not be basic !
248 126 : names(70)='vtorho(symrhg) '
249 126 : names(71)='mkrho :MPIrhor '
250 126 : names(72)='mklocl(2) '
251 126 : names(73)='status '; basic(73)=1
252 126 : names(74)='newocc '
253 126 : names(75)='nonlop(apply) '; basic(75)=1; ndata(75)=npwmean*natom
254 126 : names(76)='nonlop(forces) '; basic(76)=1; ndata(76)=npwmean*natom
255 126 : names(77)='nonlop(forstr) '; basic(77)=1; ndata(77)=npwmean*natom
256 126 : names(78)='nonlop(dyfrnl) '
257 126 : names(79)='nonlop(ddk) '
258 126 : names(80)='etotfor/=forces '
259 126 : names(81)='xc:pot ' ! rhotoxc_coll, except the call to hartre.f
260 126 : names(82)='xc:fourdp '
261 126 : names(83)='newvtr/rho(3):io '; basic(83)=1
262 126 : names(84)='suscep '
263 126 : names(85)='suscep:MPI '; basic(85)=1
264 126 : names(86)='suscep:synchro '; basic(86)=1
265 126 : names(87)='suskXX:loop(1) '
266 126 : names(88)='suskXX:loop(2) '
267 126 : names(89)='suscep:other '
268 126 : names(90)='dielmt '; basic(90)=1
269 126 : names(91)='setvtr '
270 126 : names(92)='setvtr:mkcore '
271 126 : names(93)='newvtr '
272 126 : names(94)='newrho '
273 126 : names(95)='tddft '
274 126 : names(96)='dieltcel '; basic(96)=1
275 126 : names(97)='nonlop(total) '
276 :
277 126 : names(101)='abinit(init,iofn1,herald) '; basic(101)=1
278 126 : names(102)='get_dtsets_pspheads '; basic(102)=1
279 126 : names(103)='abinit(outvars) '; basic(103)=1
280 126 : names(104)='abinit(chkinp,chkvars) '; basic(104)=1
281 126 : names(105)='abinit(after driver) '; basic(105)=1
282 :
283 126 : names(111)='dfpt_nstdy '
284 126 : names(112)='dfpt_nstwf '
285 126 : names(113)='dfpt_vtowfk(contrib) '; basic(113)=1
286 126 : names(118)='dfpt_vtorho (1) '; basic(118)=1
287 126 : names(120)='dfpt_scfcv '
288 126 : names(121)='dfpt_vtorho '
289 126 : names(122)='dfpt_cgwf '
290 126 : names(124)='dfpt_vtorho (1)(2) '
291 126 : names(125)='dfpt_vtorho (2) '
292 126 : names(126)='dfpt_vtorho-kpt loop '; basic(126)=1
293 126 : names(127)='dfpt_vtorho (4) '
294 126 : names(128)='dfpt_vtowfk '
295 126 : names(129)='dfpt_vtorho:MPI '; basic(129)=1
296 126 : names(130)='dfpt_vtowfk (3) '; basic(130)=1
297 126 : names(131)='dfpt_vtowfk (1) '; basic(131)=1
298 126 : names(132)='respfn '
299 126 : names(133)='respfn(kpgio) '
300 126 : names(134)='respfn(pspini) '
301 126 : names(135)='respfn(inwffil) '
302 126 : names(136)='respfn(frozen) '
303 126 : names(137)='respfn(dfpt_dyxc1+bef.dfpt_lop) '
304 126 : names(138)='respfn(after dfpt_loper) '
305 126 : names(139)='dfpt_vtowfk (loop) '
306 126 : names(140)='dfpt_cgwf-O(npw) '; basic(140)=1
307 126 : names(141)='dfpt_loper '
308 126 : names(142)='dfpt_loper(kpgio) '
309 126 : names(143)='dfpt_loper(getmpw) '
310 126 : names(144)='dfpt_loper(inwffil) '
311 126 : names(146)='dfpt_loper(outwf) '
312 126 : names(147)='dfpt_loper(eig2tot) '
313 126 : names(148)='eig2tot '; basic(148)=1
314 126 : names(150)='dfpt_nselt/nstdy/nstpaw '
315 126 : names(152)='dfpt_scfcv-scprqt '
316 126 : names(154)='dfpt_scfcv (1) '; basic(154)=1
317 126 : names(157)='dfpt_rhotov '
318 126 : names(158)='dfpt_newvtr '
319 126 : names(159)='d2frnl '
320 126 : names(160)='dfpt_scfcv (6) '
321 126 : names(161)='dfpt_nstdy:synchro '; basic(161)=1
322 126 : names(166)='dfpt_vtorho:synchro '; basic(166)=1
323 126 : names(181)='dfpt_mkvxc '
324 126 : names(182)='dfpt_dyxc1 '; basic(182)=1
325 : !names(184)='dfpt_dyxc1(analysis) '
326 :
327 126 : names(191)='invars2 '
328 126 : names(192)='inkpts '
329 126 : names(193)='fresid '
330 :
331 126 : names(195)='getgh1c_setup'; basic(195) = 1
332 126 : names(196)='getgh1c'; basic(196) = 1
333 126 : names(197)='getgh1c%dfpt_cgwf '
334 126 : names(198)='getgh1c%dfpt_nstwf '
335 126 : names(199)='getgh1c%dfpt_nstpaw '
336 :
337 126 : names(210)='projbd '; basic(210)=1; ndata(210)=npwnbdmean
338 126 : names(211)='projbd%cgwf '
339 126 : names(212)='projbd%dfpt_cgwf '
340 126 : names(213)='projbd%dfpt_nstpaw '
341 126 : names(214)='corrmetalwf1%dfpt_vtowfk '
342 :
343 126 : names(220)='nonlop%(other) '
344 126 : names(221)='nonlop%getghc '
345 126 : names(222)='nonlop%vtowfk '
346 126 : names(223)='nonlop%energy '
347 126 : names(224)='nonlop%forstrnps '
348 126 : names(225)='nonlop%dfpt_nstwf '
349 126 : names(226)='nonlop%d2frnl '
350 126 : names(227)='nonlop%dfpt_cgwf !2 '
351 126 : names(228)='nonlop%dfpt_cgwf !5 '
352 126 : names(229)='nonlop%outkss '
353 126 : names(230)='nonlop%vtowfk(rhoij) '
354 126 : names(231)='nonlop%prep_nonl%vtowfk '
355 126 : names(232)='nonlop%prep_nonl%forstrn '
356 126 : names(233)='nonlop%appinvovl '
357 126 : names(234)='nonlop%prep_nonl%energy '
358 126 : names(235)='nonlop%getchc '; basic(235)=1
359 126 : names(236)='nonlop%getcsc '; basic(236)=1
360 126 : names(237)='nonlop%fock_getghc '; basic(237)=1
361 :
362 126 : names(250)='afterscfloop '
363 126 : names(251)='afterscfloop(wvl) '
364 126 : names(252)='afterscfloop(pol/magn) '
365 126 : names(253)='afterscfloop(grad/lapl) '
366 126 : names(254)='afterscfloop(kin.en.den) '
367 126 : names(255)='afterscfloop(elf) '
368 126 : names(256)='afterscfloop(forstr) '
369 126 : names(257)='afterscfloop(final) '
370 :
371 126 : names(270)='rwwf%(other) '
372 126 : names(271)='rwwf%vtorho '
373 126 : names(272)='rwwf%initwf(GS) '
374 126 : names(273)='rwwf%energy '
375 126 : names(274)='rwwf%wfsinp(GS) '
376 126 : names(275)='rwwf%mkrho '
377 126 : names(276)='rwwf%outwf '
378 126 : names(277)='rwwf%strnps '
379 126 : names(278)='rwwf%tddft '
380 126 : names(279)='rwwf%suscep '
381 126 : names(281)='rwwf%wfsinp(RF) '
382 126 : names(282)='rwwf%mkrho2 '
383 126 : names(283)='rwwf%outwf2 '
384 126 : names(284)='rwwf%dfpt_dyfnl '
385 126 : names(285)='rwwf%dfpt_mkrho '
386 126 : names(286)='rwwf%dfpt_nstwf '
387 126 : names(287)='rwwf%dfpt_vtorho '
388 126 : names(288)='rwwf%dfpt_vtowfk '
389 126 : names(289)='rwwf%dfpt_nstdy '
390 126 : names(290)='rwwf%initwf(RF) '
391 126 : names(291)='rwwf%newkpt(GS) '
392 126 : names(292)='rwwf%newkpt(RF) '
393 :
394 : ! wfd
395 126 : names(300)='wfd_read_wfk '; basic(300) = 1
396 :
397 126 : names(301)='screening '
398 126 : names(302)='screening(init1) '
399 126 : names(304)='screening(KS=>QP[wfrg]) '
400 126 : names(305)='screening(density) '
401 126 : names(306)='screening(q-loop,init ) '
402 126 : names(307)='screening(cchi0q0) '
403 126 : names(308)='screening(cchi0) '
404 126 : names(309)='screening(q-loop,end) '
405 126 : names(310)='screening(wrt scr files) '
406 126 : names(315)='screening(pawin) '
407 126 : names(316)='screening(wfs) '
408 126 : names(319)='screening(1) '
409 126 : names(320)='screening(paw) '; basic(320)=1
410 126 : names(321)='screening(2) '
411 :
412 126 : names(331)='cchi0 '
413 126 : names(332)='cchi0(rho_tw_g) '
414 126 : names(333)='cchi0(assembly) '
415 :
416 126 : names(350)='getghc '
417 126 : names(351)='getghc%cgwf '
418 126 : names(352)='getghc%dfpt_cgwf '
419 126 : names(353)='getghc%mkresi '
420 126 : names(354)='getghc%kss_ddiago '
421 126 : names(355)='getghc%lobpcgwf '
422 126 : names(356)='getghc%prep_getghc '
423 126 : names(357)='getghc%other lobpcg '
424 126 : names(358)='getghc%update_mmat '
425 126 : names(359)='getghc(/=fourXX,nonlop,fock_XX) '; basic(359)=1
426 126 : names(360)='getghc(fock_XX) '
427 :
428 :
429 126 : names(401)='sigma '
430 126 : names(402)='sigma(Init1) '
431 126 : names(403)='setup_sigma '
432 126 : names(404)='sigma(rdkss) '
433 126 : names(405)='sigma(Init2) '
434 126 : names(406)='sigma(make_vhxc) '
435 126 : names(407)='sigma(vHxc_me) '
436 126 : names(408)='sigma(hqp_init) '
437 126 : names(409)='sigma(getW) '
438 126 : names(410)='sigma/=fourdp '; basic(410)=1
439 :
440 126 : names(421)='sigma(calc_sigx_me) '
441 126 : names(423)='sigma(cohsex_me) '
442 126 : names(424)='sigma(calc_sigc_me) '
443 126 : names(425)='sigma(solve_dyson) '
444 126 : names(426)='sigma(finalize) '
445 :
446 126 : names(430)='calc_sigx_me '
447 :
448 126 : names(431)='calc_sigc_me '
449 126 : names(432)='calc_sigc_me(Init) '
450 126 : names(433)='calc_sigc_me(Init spin) '
451 126 : names(434)='calc_sigc_me(Init q) '
452 126 : names(435)='calc_sigc_me(eet_sigma) '
453 126 : names(436)='calc_sigc_me(1) '
454 126 : names(437)='calc_sigc_me(rho_tw_g) '
455 126 : names(438)='calc_sigc_me(2) '
456 126 : names(439)='calc_sigc_me(sigma_me) '
457 126 : names(440)='calc_sigc_me(wfd_barrier '
458 126 : names(441)='calc_sigc_me(xmpi_sum) '
459 126 : names(442)='calc_sigc_me(final ops) '
460 126 : names(443)='calc_sigc_me(ac_lrk_appl) '
461 126 : names(444)='calc_sigc_me(ac_lrk_diag) '
462 :
463 126 : names(445)='calc_sigc_me(loop) '
464 :
465 126 : names(490)='solve_dyson '
466 126 : names(491)='cohsex_me '
467 :
468 126 : names(501)='nonlinear '
469 126 : names(502)='pead_nl_loop '
470 126 : names(503)='dfptnl_loop '
471 126 : names(511)='dfptnl_mv '; basic(511)=1
472 126 : names(512)='pead_nl_resp '; basic(512)=1
473 126 : names(513)='dfptnl_pert '
474 126 : names(514)='rf2_init '
475 :
476 126 : names(520)='lobpcgwf(init) '; if(abs(timopt)==4)basic(520)=1
477 126 : names(521)='lobpcgwf(bef.getghc 1 '; if(abs(timopt)==4)basic(521)=1
478 126 : names(522)='lobpcgwf(aft.getghc 1 '; if(abs(timopt)==4)basic(522)=1
479 126 : names(523)='lobpcgwf(bef.getghc 2 '; if(abs(timopt)==4)basic(523)=1
480 126 : names(524)='lobpcgwf(aft.getghc 2 '; if(abs(timopt)==4)basic(524)=1
481 126 : names(525)='lobpcgwf(aft.loop) '; if(abs(timopt)==4)basic(525)=1
482 126 : names(526)='lobpcgwf(prep-getghc) '
483 :
484 126 : names(530)='lobpcgwf '
485 126 : names(532)='xgemm%lobpcg '
486 126 : names(533)='xmpi_sum%lobpcg '
487 126 : names(535)='xorthon-xtrsm '
488 126 : names(536)='xprecon%lobpcg '
489 126 : names(537)='prep_fourwf%vtowfk '
490 126 : names(538)='prep_fourwf%mkrho '
491 126 : names(539)='prep_fourwf '
492 :
493 126 : names(540)='sg_fourwf%fourwf '
494 126 : names(541)='back_wf%sg_fourw '
495 126 : names(542)='forw_wf%sg_fourw '
496 126 : names(543)='alltoall%back_wf '
497 126 : names(544)='alltoall%forw_wf '
498 126 : names(545)='prep_getghc(alltoall) '
499 126 : names(547)='alltoall%prep_fo '
500 126 : names(548)='allgather%prep_f '
501 126 : names(549)='symrhg%mkrho '
502 :
503 126 : names(550)='forces:pawatm2ff '
504 126 : names(551)='stress:pawatm2ff '
505 126 : names(552)='setvtr:pawatm2ff '
506 126 : names(553)='pawinit '; basic(553)=1
507 126 : names(554)='vtowfk:rhoij '
508 126 : names(555)='vtorho:pawmkrhoij '; basic(555)=1
509 126 : names(556)='pawmkrho '; basic(556)=1
510 126 : names(557)='pawmkrho:symrhoij '; basic(557)=1
511 126 : names(558)='scfcv_core:mknhat '
512 126 : names(559)='nhatgrid '; basic(559)=1
513 126 : names(560)='pawdenpot '; basic(560)=1
514 126 : names(561)='pawdij/symdij '; basic(561)=1
515 126 : names(562)='respfn:pawatm2ff '; basic(562)=1
516 126 : names(563)='dfpt_dyfro:pawatm2ff '; basic(563)=1
517 126 : names(564)='dfpt_scfcv:dfpt_mknhat '; basic(564)=1
518 126 : names(565)='getgsc '
519 126 : names(566)='dfpt_nstpaw '; basic(566)=1
520 126 : names(567)='pawnstd2e '
521 126 : names(568)='stress%strhar '
522 :
523 126 : names(570)='prep_nonlop '
524 126 : names(572)='prep_nonlop%vtowfk '
525 126 : names(573)='prep_nonlop%forstrnps '
526 :
527 126 : names(575)='prep_bandfft_tabs '; basic(575)=1
528 :
529 126 : names(578)='vtowfk(cprj_rotate) '
530 126 : names(581)='prep_nonlop(alltoall) '
531 126 : names(583)='vtowfk(pw_orthon) '
532 126 : names(584)='xcopy%lobpcg '
533 126 : names(585)='vtowfk(subdiago) '
534 126 : names(586)='vtowfk(nonlocalpart) '
535 126 : names(587)='zheegv-dsyegv '
536 :
537 126 : names(588)='vtowfk(ssdiag) '; basic(588)=1
538 126 : names(589)='vtowfk(contrib) '; basic(589)=1
539 126 : names(590)='vtowfk(2) '
540 126 : names(591)='vtowfk(3) '
541 :
542 126 : names(593)='set_paw_pert '
543 126 : names(594)='get_exchange_atom '
544 126 : names(595)='pawrhoij_redistribute '
545 126 : names(596)='paw_ij_redistribute '
546 126 : names(597)='paw_an_redistribute '
547 126 : names(598)='pawfgrtab_redistribute '
548 :
549 126 : names(600)='vtorhorec '
550 126 : names(601)='Definitions '
551 126 : names(602)='getngrec '
552 126 : names(603)='green_kernel '
553 126 : names(604)='transgrid (c->f) '
554 126 : names(605)='recursion (other) '
555 126 : names(606)='recursion (den) '
556 126 : names(607)='recursion (cuda) '
557 126 : names(608)='recursion_nl '
558 126 : names(609)='fermisolverec '
559 126 : names(610)='entropyrec '
560 126 : names(611)='gran_potrec '
561 126 : names(612)='nonlocal-energy '
562 126 : names(613)='sync. cpu (wait) '
563 126 : names(614)='sync. gpu (wait) '
564 126 : names(615)='vn_nl_rec '
565 126 : names(616)='null recursion '
566 126 : names(617)='recursion (other_cuda) '
567 :
568 126 : names(620)='datafordmft '
569 126 : names(621)='initialize dmft loop '
570 126 : names(622)='impurity_solve '
571 126 : names(623)='Dyson '
572 126 : names(624)='compute_green '
573 126 : names(625)='integrate_green '
574 126 : names(626)='dmft-other '
575 126 : names(627)='Print/Read self '
576 126 : names(628)='saveocc_dmft '
577 :
578 126 : names(630)='prep_getghc '
579 126 : names(631)='prep_getghc(before if) '
580 126 : names(632)='prep_getghc(bef. getghc) '
581 126 : names(633)='prep_getghc(betw getghc) '
582 126 : names(634)='prep_getghc(aft. getghc) '
583 126 : names(635)='prep_getghc(getghc - 1 ) '
584 126 : names(636)='prep_getghc(getghc - 2 ) '
585 126 : names(637)='prep_getghc(getghc - 3 ) '
586 126 : names(638)='prep_getghc(getghc - 4 ) '
587 :
588 126 : names(640)='driver '
589 126 : names(641)='driver(bef. loop dtset) '
590 126 : names(642)='driver(bef. select case) '
591 126 : names(643)='driver(aft. select case) '
592 126 : names(644)='driver(aft. loop dtset) '
593 :
594 126 : names(650)='bse '
595 126 : names(651)='bse(Init1) '; basic(651)=1
596 126 : names(652)='setup_bse '; basic(652)=1
597 126 : names(653)='bse(rdkss) '; basic(653)=1
598 126 : names(654)='bse(rdmkeps^-1) '; basic(654)=1
599 126 : names(655)='bse(mkrho) '; basic(655)=1
600 126 : names(656)='bse(mkexcham) '; basic(656)=1
601 126 : names(657)='bse(mkexceps) '; basic(657)=1
602 126 : names(658)='bse(wfd_wave_free) '; basic(658)=1
603 126 : names(659)='bse(mk_pawhur_t) '; basic(659)=1
604 126 : names(660)='bse(exc_diago_driver) '; basic(660)=1
605 126 : names(661)='bse(exc_haydock_driver) '; basic(661)=1
606 :
607 126 : names(670)='exc_build_ham '
608 126 : names(671)='exc_build_ham(q=0) '
609 126 : names(672)='exc_build_ham(block-res) '
610 126 : names(673)='exc_build_ham(block-coupling) '
611 :
612 126 : names(680)='exc_build_block '
613 126 : names(681)='exc_build_block(init,read) '
614 126 : names(682)='exc_build_block(Coulomb) '
615 126 : names(683)='exc_build_block(exchange) '
616 126 : names(684)='exc_build_block(synchro) '
617 126 : names(685)='exc_build_block(write_ha '
618 126 : names(686)='exc_build_block(exch.spi '
619 :
620 126 : names(690)='exc_haydock_driver '
621 126 : names(691)='exc_haydock_driver(read) '
622 126 : names(692)='exc_haydock_driver(prep) '
623 126 : names(693)='exc_haydock_driver(wo lf '
624 126 : names(694)='exc_haydock_driver(apply) '
625 126 : names(695)='exc_haydock_driver(end) '
626 126 : names(696)='exc_haydock_driver(inter '
627 126 : names(697)='exc_haydock_driver(matmul) '
628 : !Slots up to 699 are reserved for bethe_salpeter code.
629 :
630 126 : names(701)='qmc_prep_ctqmc '
631 126 : names(702)='qmc_prep_ctqmc%(bef. loop) '
632 126 : names(703)='qmc_prep_ctqmc%(loop) '
633 126 : names(704)='qmc_prep_ctqmc%(loop%solve) '
634 126 : names(705)='qmc_prep_ctqmc%(aft. loop) '
635 :
636 126 : names(710)='inwffil '
637 126 : names(711)='inwffil(read header) '
638 126 : names(712)='inwffil(init params) '
639 126 : names(713)='inwffil(prepa wfsinp) '
640 126 : names(714)='inwffil(call wfsinp) '
641 126 : names(715)='inwffil(after wfsinp) '
642 126 : names(716)='inwffil(spin convert) '
643 126 : names(717)='inwffil(call newkpt) '
644 126 : names(718)='inwffil(excl. calls) '; basic(718)=1
645 :
646 126 : names(720)='wfsinp '
647 126 : names(721)='wfsinp(before loop) '
648 126 : names(722)='wfsinp(find kpt) '
649 126 : names(723)='wfsinp(prepa initwf) '
650 126 : names(724)='wfsinp(call initwf) '
651 126 : names(725)='wfsinp(transfer of wfs) '
652 126 : names(726)='wfsinp(call rwwf) '
653 126 : names(727)='wfsinp(wfconv section) '
654 126 : names(728)='wfsinp(excl. calls) '; basic(728)=1
655 :
656 126 : names(740)='suscep_stat '
657 126 : names(741)='suscep_stat(init) '
658 126 : names(742)='suscep_stat(bef. susk-mm '
659 126 : names(743)='suscep_stat(susk-mm) '
660 126 : names(744)='suscep_stat(extrapol) '
661 126 : names(745)='suscep_stat:synchro '
662 126 : names(746)='suscep_stat:MPI '
663 126 : names(747)='suscep_stat(symmetries) '
664 :
665 126 : names(750)='susk '
666 126 : names(751)='susk (init) '; basic(751)=1
667 126 : names(752)='susk (loop) '
668 126 : names(753)='susk:MPI (1) '; basic(753)=1
669 126 : names(754)='susk (accumul.) '
670 126 : names(755)='susk:MPI (2) '; basic(755)=1
671 126 : names(756)='susk (loop except FFT) '; basic(756)=1
672 126 : names(757)='susk (accumul.except FFT '; basic(757)=1
673 :
674 126 : names(760)='suskmm '
675 126 : names(761)='suskmm (init) '; basic(761)=1
676 126 : names(762)='suskmm (loop : part1) '
677 126 : names(763)='suskmm (loop : part2) '
678 126 : names(764)='suskmm(loop1 except FFT) '; basic(764)=1
679 126 : names(765)='suskmm(loop2 except FFT) '; basic(765)=1
680 :
681 126 : names(770)='initwf '
682 126 : names(771)='initwf(before rwwf) '; basic(771)=1
683 126 : names(772)='initwf(after rwwf) '; basic(772)=1
684 :
685 126 : names(780)='newkpt '
686 126 : names(781)='newkpt(before loop) '
687 126 : names(782)='newkpt(before rwwf) '
688 126 : names(783)='newkpt(after rwwf) '
689 126 : names(784)='newkpt(call wfconv) '
690 126 : names(785)='newkpt(finalize loop) '
691 126 : names(786)='newkpt(after loop ) '
692 126 : names(787)='newkpt:synchro '
693 126 : names(788)='newkpt(excl. rwwf ) '; basic(788)=1
694 :
695 126 : names(790)='mkrho '
696 126 : names(791)='mkrho%gstate '
697 126 : names(792)='mkrho%vtorho '
698 126 : names(793)='mkrho%energy '
699 126 : names(794)='mkrho%respfn '
700 126 : names(795)='mkrho%afterscfloop '
701 126 : names(796)='mkrho%scfcv_core '
702 126 : names(798)='mkrho/= '; basic(798)=1
703 126 : names(799)='mkrho/=+fourwf '
704 :
705 126 : names(801)='fourwf '
706 126 : names(802)='fourwf%(pot) '; basic(802)=1; ndata(802)=2*nfft
707 126 : names(803)='fourwf%(den) '; basic(803)=1; ndata(803)=nfft
708 126 : names(804)='fourwf%(G->r) '; basic(804)=1
709 126 : names(805)='fourwf%(r->G) '; basic(805)=1
710 :
711 :
712 126 : names(840)='fourwf%(other) '
713 126 : names(841)='fourwf%getghc '
714 126 : names(842)='fourwf%vtowfk '
715 126 : names(843)='fourwf%mkrho '
716 126 : names(844)='fourwf%dfpt_cgwf '
717 126 : names(845)='fourwf%dfpt_accrho%dfpt_vtowfk '
718 126 : names(846)='fourwf%mkrho2 '
719 126 : names(847)='fourwf%dfpt_mkrho '
720 126 : names(850)='fourwf%fock_getghc '
721 126 : names(854)='fourwf%tddft '
722 126 : names(855)='fourwf%outkss '
723 126 : names(856)='fourwf%prep_four '
724 126 : names(858)='fourwf%dfpt_accrho%idfpt_nstpaw '
725 126 : names(861)='fourwf%suskmm !0 part 1 '
726 126 : names(862)='fourwf%suskmm !0 part 2 '
727 126 : names(871)='fourwf%suskmm !3 part 1 '
728 126 : names(872)='fourwf%suskmm !3 part 2 '
729 126 : names(880)='fourwf%cgwf_cprj '
730 :
731 126 : names(901)='newvtr(before selection) '
732 126 : names(902)='newvtr(bef. prcref_PMA) '
733 126 : names(903)='newvtr(call prcref_PMA) '
734 126 : names(904)='newvtr(aft. prcref_PMA) '
735 126 : names(905)='newvtr(mean potential) '
736 :
737 126 : names(910)='forstr '
738 126 : names(911)='forstr(forstrnps) '
739 126 : names(912)='forstr(pawgrnl) '
740 126 : names(913)='forstr(forces) '
741 126 : names(914)='forstr(stress) '
742 :
743 126 : names(920)='forstrnps '
744 126 : names(921)='forstrnps(bef.loop k spin) '
745 126 : names(922)='forstrnps(bef.loop band) '
746 126 : names(923)='forstrnps(copy) '
747 126 : names(924)='forstrnps(nonlop+prep_ba '
748 126 : names(925)='forstrnps(kinetic contr) '
749 126 : names(926)='forstrnps(fock_getghc) '
750 126 : names(927)='forstrnps(aft.loop band block) '
751 126 : names(928)='forstrnps(aft.loop k spin) '
752 :
753 126 : names(933)='outkss '
754 126 : names(934)='outkss(Gsort+hd) '
755 126 : names(935)='outkss(k-loop) '
756 126 : names(936)='outkss(diago) '; basic(936)=1
757 126 : names(937)='outkss(MPI_exch) '; basic(937)=1
758 126 : names(938)='outkss(write) '
759 :
760 126 : names(940)='rhotov '
761 126 : names(941)='rhotov(rhotoxc) '
762 126 : names(942)='rhotov(dotprod_vn) '
763 126 : names(943)='rhotov(PSolver_rhohxc) '
764 126 : names(944)='rhotov(rhohxcpositron) '
765 126 : names(945)='rhotov(other) '
766 :
767 126 : names(980)='vtorho '
768 126 : names(981)='vtorho(bef. spin loop) '
769 126 : names(982)='vtorho(bef. kpt loop) '
770 126 : names(983)='vtorho(Berry) '
771 126 : names(984)='vtorho(bef. vtowfk) '
772 126 : names(985)='vtorho(aft. vtowfk) '
773 126 : names(986)='vtorho(aft. kpt loop) '
774 126 : names(987)='vtorho(leave_test) '; basic(987)=1
775 126 : names(988)='vtorho(aft. spin loop) '
776 126 : names(989)='vtorho(MPI) '; basic(989)=1
777 126 : names(990)='vtorho(newocc) '
778 126 : names(991)='vtorho(DMFT) '
779 126 : names(992)='vtorho(mkrho 1) '
780 126 : names(993)='vtorho(highest occ. eig) '
781 126 : names(994)='vtorho(mkrho 2) '
782 126 : names(995)='vtorho(tddft) '
783 126 : names(996)='vtorho(suscep_stat) '
784 126 : names(997)='vtorho(init kpt loop) '
785 :
786 126 : names(1001)='initberry '; basic(1001)=1
787 126 : names(1002)='initberry(before listkk) '
788 126 : names(1003)='initberry(call listkk) '
789 126 : names(1004)='initberry(after listkk) '
790 126 : names(1005)='initberry(find neighb.) '
791 126 : names(1006)='initberry(build strings) '
792 126 : names(1007)='initberry(PAW on-site) '
793 126 : names(1008)='initberry(pwind) '
794 126 : names(1009)='initberry(MPI stuff) '
795 :
796 :
797 126 : names(1021)='get_dtsets_pspheads(pspheads) ';
798 126 : names(1022)='get_dtsets_pspheads(indefo) ';
799 126 : names(1023)='get_dtsets_pspheads(invars2m) ';
800 :
801 126 : names(1091)='listkk '; basic(1091) = 1
802 :
803 126 : names(1150)='outscfcv '
804 126 : names(1151)='outscfcv(preparation) '
805 126 : names(1152)='outscfcv(mlwfovlp) '
806 126 : names(1153)='outscfcv([PAW]prtden) '
807 126 : names(1154)='outscfcv(output GSR) '
808 126 : names(1155)='outscfcv(output VCLMB) '
809 126 : names(1156)='outscfcv(prtelf) '
810 126 : names(1157)='outscfcv(prt grden) '
811 126 : names(1158)='outscfcv(prt kden) '
812 126 : names(1159)='outscfcv(prt lden) '
813 126 : names(1160)='outscfcv(prtpot) '
814 126 : names(1161)='outscfcv(prtgeo,cif) '
815 126 : names(1162)='outscfcv(prtstm) '
816 126 : names(1163)='outscfcv(prt 1dm) '
817 126 : names(1164)='outscfcv(prtvha,vpsp,... vxc) '
818 126 : names(1165)='outscfcv(prtdos) '
819 126 : names(1166)='outscfcv(calcdenmagsph) '
820 126 : names(1167)='outscfcv(mag_penalty_e) '
821 126 : names(1168)='outscfcv(pawprt) '
822 126 : names(1169)='outscfcv(optics) '
823 126 : names(1170)='outscfcv(pawmkaewf) '
824 126 : names(1171)='outscfcv(plowf) '
825 126 : names(1172)='outscfcv(gw) '
826 126 : names(1173)='outscfcv(poslifetime) '
827 126 : names(1174)='outscfcv(posdoppler) '
828 126 : names(1175)='outscfcv(outwant) '
829 126 : names(1176)='outscfcv(calc_efg) '
830 126 : names(1177)='outscfcv(calc_fc) '
831 126 : names(1178)='outscfcv(prt_ebands) '
832 126 : names(1179)='outscfcv(prt_surf) '
833 126 : names(1180)='outscfcv(prtnest) '
834 126 : names(1181)='outscfcv(prtdipole) '
835 126 : names(1182)='outscfcv(prtblztrp) '
836 126 : names(1183)='outscfcv(ebands_interpol_kpath) '
837 :
838 : !names(1190)='outscfcv(gsr1) '
839 : !names(1191)='outscfcv(gsr2) '
840 : !names(1192)='outscfcv(gsr3) '
841 : !names(1193)='outscfcv(gsr4) '
842 : !names(1194)='outscfcv(gsr5) '
843 : !names(1195)='outscfcv(gsr6) '
844 :
845 126 : names(1200)='gstateimg '
846 126 : names(1203)='gstateimg(init) '
847 126 : names(1204)='gstateimg(bef. loop img) '
848 126 : names(1205)='gstateimg(bef. gstate) '
849 126 : names(1206)='gstateimg(aft. gstate) '
850 126 : names(1208)='gstateimg(leave_test) '
851 126 : names(1209)='gstateimg(aft. loop img) '
852 126 : names(1210)='gstateimg(finalize) '
853 :
854 126 : names(1211)='gstate(1) '
855 126 : names(1212)='gstate(pspini) '
856 126 : names(1213)='gstate(2) '
857 126 : names(1214)='gstate(init rhor rhog) '
858 126 : names(1215)='gstate(init history) '
859 126 : names(1225)='gstate(...scfcv) '
860 126 : names(1226)='gstate(prt gap) '
861 126 : names(1227)='gstate(prtwf) '
862 126 : names(1228)='gstate(clnup1) '
863 126 : names(1229)='gstate(prtelfield) '
864 126 : names(1230)='gstate(DDB) '
865 126 : names(1231)='gstate(clnup2) '
866 :
867 126 : names(1232)='gstate '
868 :
869 126 : names(1260)='fourdp%(other) '
870 126 : names(1261)='fourdp%rhotwg%ch '
871 126 : names(1262)='fourdp%rhotwg%si '
872 126 : names(1263)='fourdp%ckxcldag '
873 126 : names(1264)='fourdp%fftwfn%ch '
874 126 : names(1265)='fourdp%fftwfn%si '
875 126 : names(1266)='fourdp%rec%rho '
876 126 : names(1267)='fourdp%rec%ek '
877 126 : names(1268)='fourdp%newvtr '
878 126 : names(1269)='fourdp%newrho '
879 126 : names(1270)='fourdp%fock_getghc '
880 :
881 126 : names(1280)='read_rho '
882 126 : names(1281)='interpolate_denpot '
883 :
884 126 : names(1290)='getcprj(all) '
885 126 : names(1291)='getcprj%opernla '; basic(1291)=1
886 126 : names(1292)='getcprj%opernla_mv '; basic(1292)=1
887 126 : names(1293)='getcprj(cgwf_cprj) '
888 126 : names(1294)='getcprj(ctocprj) '
889 126 : names(1295)='getcprj(vtowfk) '
890 126 : names(1299)='getcprj(other) '
891 :
892 126 : names(1300)='cgwf_cprj '
893 126 : names(1301)='cgwf_cprj%other '
894 126 : names(1302)='pawcprj(zaxpby) '
895 126 : names(1303)='pawcprj(projbd) '; basic(1303)=1
896 126 : names(1304)='subham(dotprod_g) '; basic(1304)=1
897 126 : names(1305)='cgwf_cprj%npw_work '; basic(1305)=1
898 :
899 126 : names(1360)='getcsc(all) '
900 126 : names(1361)='getcsc%dotprod_g '; basic(1361)=1
901 126 : names(1362)='getcsc%other '
902 126 : names(1363)='getcsc(cgwf_cprj) '
903 126 : names(1364)='getcsc(subovl) '
904 :
905 126 : names(1370)='getchc '
906 126 : names(1371)='getchc%local '; basic(1371)=1
907 126 : names(1372)='getchc%kin '; basic(1372)=1
908 126 : names(1375)='getchc%other '
909 :
910 126 : names(1440)='scfcv_core '
911 126 : names(1441)='scfcv_core(before nstep loop) '
912 126 : names(1442)='scfcv_core(ini moved atm inside)'
913 126 : names(1443)='scfcv_core(ini fock) '
914 126 : names(1444)='scfcv_core(fock wfmixing) '
915 126 : names(1445)='scfcv_core(fock_updatecwaveocc) '
916 126 : names(1446)='scfcv_core(fock2ACE) '
917 126 : names(1447)='scfcv_core(setup_positron) '
918 126 : names(1448)='scfcv_core(setvtr) '
919 126 : names(1449)='scfcv_core(loop, PAW) '
920 126 : names(1450)='scfcv_core-read '
921 126 : names(1451)='scfcv_core(vtorho(f)) '
922 126 : names(1452)='scfcv_core(etotfor) '
923 126 : names(1453)='scfcv-scprqt '; basic(1453)=1
924 126 : names(1454)='scfcv_core(qui loop) '
925 126 : names(1455)='scfcv_core(mix den - newrho) '
926 126 : names(1456)='scfcv_core(Berry) '
927 126 : names(1457)='scfcv_core(rhotov) '
928 126 : names(1458)='scfcv_core(mix pot) '
929 126 : names(1459)='scfcv_core(just after scf) '
930 126 : names(1460)='scfcv_core(afterscfloop) '
931 126 : names(1461)='scfcv_core(outscfcv) '
932 126 : names(1462)='scfcv_core(free) '
933 :
934 126 : names(1501)='fock_init '; basic(1501)=1
935 126 : names(1502)='fock_updatecwaveocc '; basic(1502)=1
936 126 : names(1503)='fock_updatecwaveocc(MPI) '; ! 100 % nested inside 1502
937 :
938 126 : names(1504)='fock_getghc '; !1504 = 1505 + 1506 + 1507
939 126 : names(1505)='fock_getghc(init) '; ! 100 % nested inside 1504
940 126 : names(1506)='fock_getghc-kmu_loop '; ! 100 % nested inside 1504, 1506 = 1521+ ... 1528
941 126 : names(1507)='fock_getghc(post-k) '; ! 100 % nested inside 1504
942 126 : names(1512)='fock_getghc(fourwf) '
943 126 : names(1513)='fock_getghc(fourdp) '
944 126 : names(1514)='fock_getghc(nonlop) '
945 126 : names(1515)='fock_getghc(/=fourXX,nonlop) '; basic(1515)=1 ! ulterior slot for test
946 :
947 : !Partitioning of the loop on k points inside fock_getghc (1506)
948 126 : names(1521)='fock_getghc(init k loop) '
949 126 : names(1522)='fock_getghc(j loop fourwf) '
950 126 : names(1523)='fock_getghc(calc_rhor_munu) '
951 126 : names(1524)='fock_getghc(calc_rhog_munu) '
952 126 : names(1525)='fock_getghc(calc_vloc) '
953 126 : names(1526)='fock_getghc(calc_dij_fock_hat) '
954 126 : names(1527)='fock_getghc(calc_vlocpsi) '
955 126 : names(1528)='fock_getghc(clean k loop) '
956 :
957 : !Partitioning in small blocs without fourXX and nonlop. One has to add 1521, 1523, 1527, 1528
958 126 : names(1541)='fock_getghc(init wo fourwf) '; !related to 1505
959 126 : names(1542)='fock_getghc(j loop wo fourwf) '; !related to 1522
960 126 : names(1544)='fock_getghc(calc_rhog_munu wo fo'; !related to 1524
961 126 : names(1545)='fock_getghc(calc_vloc wo fourXX)'; !related to 1525
962 126 : names(1546)='fock_getghc(calc_dij_fock_hat wo'; !related to 1526
963 126 : names(1547)='fock_getghc(post-k wo fourXX+MPI'; !related to 1507
964 126 : names(1548)='fock_getghc(post-k xmpi_sum) '; !related to 1507
965 :
966 126 : names(1560)='fock2ACE '
967 126 : names(1561)='fock2ACE(init) '; basic(1561)=1
968 126 : names(1562)='fock2ACE(main/=fock_getghc) '; basic(1562)=1
969 126 : names(1563)='fock2ACE(fock_getghc) '
970 126 : names(1565)='fock2ACE(finalize) '; basic(1565)=1
971 :
972 126 : names(1580)='fock_ACE_getghc '; basic(1580)=1
973 :
974 : ! Chebfi
975 126 : names(1600) = 'chebfi '
976 126 : names(1601) = 'chebfi(alltoall) '; basic(1601) = 1
977 126 : names(1602) = 'chebfi(appinvovl) '
978 126 : names(1603) = 'chebfi(rotation) '
979 126 : names(1604) = 'chebfi(subdiago) '
980 126 : names(1605) = 'chebfi(subham) '
981 126 : names(1606) = 'chebfi(ortho) '
982 126 : names(1607) = 'chebfi(getghc) '
983 126 : names(1608) = 'chebfi(residuals) '
984 126 : names(1609) = 'chebfi(update_eigens) '
985 126 : names(1610) = 'chebfi(sync)'
986 :
987 126 : names(1630) = 'chebfi(opernla) '
988 126 : names(1631) = 'chebfi(opernlb) '
989 126 : names(1632) = 'chebfi(inv_s) '
990 :
991 126 : names(1620) = 'mkinvovl '
992 126 : names(1621) = 'mkinvovl(build_d) '
993 126 : names(1622) = 'mkinvovl(build_ptp) '
994 :
995 126 : names(1633) = "rmm_diis:build_hij "; basic(1633) = 1
996 126 : names(1634) = "rmm_diis:band_opt "; basic(1634) = 1
997 :
998 : ! lobpcg2
999 126 : names(1640) = 'lobpcgwf2 ';
1000 126 : names(1641) = 'lobpcg_Bortho(X) '
1001 126 : names(1642) = 'lobpcg_Bortho(XW) '
1002 126 : names(1643) = 'lobpcg_Bortho(XWP) '
1003 126 : names(1644) = 'lobpcg_Bortho(Xall) '
1004 126 : names(1645) = 'lobpcg_RR(X) '
1005 126 : names(1646) = 'lobpcg_RR(XW) '
1006 126 : names(1647) = 'lobpcg_RR(XWP) '
1007 126 : names(1648) = 'lobpcg_RR(Xall) '
1008 126 : names(1649) = 'lobpcg_transpose '
1009 :
1010 126 : names(1651) = 'lobpcg_init '
1011 126 : names(1652) = 'lobpcg_free '
1012 126 : names(1653) = 'lobpcg_copy '
1013 126 : names(1654) = 'lobpcg_getAX_BX '
1014 126 : names(1655) = 'lobpcg_orthoWrtPrev '
1015 126 : names(1656) = 'lobpcg_nbdbuf '
1016 126 : names(1657) = 'lobpcg_enl '
1017 126 : names(1658) = 'lobpcg_maxResidu '
1018 126 : names(1659) = 'lobpcg_run@getAX_BX '
1019 126 : names(1660) = 'lobpcg_pcond '
1020 126 : names(1661) = 'lobpcg(other) '
1021 :
1022 : ! xg_t (1st part)
1023 126 : names(1662) = 'xgTransposer_transpose@ColsRows'
1024 126 : names(1663) = 'xgTransposer_transpose@Linalg '
1025 126 : names(1664) = 'xgTransposer_*@all2all '
1026 126 : names(1665) = 'xgTransposer_*@gatherv '
1027 126 : names(1666) = 'xgTransposer_@reorganize '
1028 126 : names(1667) = 'xgTransposer_init ';basic(1667)=1
1029 126 : names(1668) = 'xgTransposer_free ';basic(1668)=1
1030 126 : names(1669) = 'xgTransposer_transpose ';basic(1669)=1
1031 :
1032 126 : names(1670) = 'xgBlock_gemm(blas) ';basic(1670)=1
1033 126 : names(1671) = 'xgBlock_trsm ';basic(1671)=1
1034 126 : names(1672) = 'xgBlock_potrf ';basic(1672)=1
1035 126 : names(1673) = 'xgBlock_zero ';basic(1673)=1
1036 126 : names(1674) = 'xgBlock_zero_im_g0 ';basic(1674)=1
1037 126 : names(1675) = 'xgBlock_heev ';basic(1675)=1
1038 126 : names(1676) = 'xgBlock_heevd ';basic(1676)=1
1039 126 : names(1677) = 'xgBlock_hpev ';basic(1677)=1
1040 126 : names(1678) = 'xgBlock_hpevd ';basic(1678)=1
1041 126 : names(1679) = 'xgBlock_hegv ';basic(1679)=1
1042 126 : names(1680) = 'xgBlock_hegvx ';basic(1680)=1
1043 126 : names(1681) = 'xgBlock_hegvd ';basic(1681)=1
1044 126 : names(1682) = 'xgBlock_hpgv ';basic(1682)=1
1045 126 : names(1683) = 'xgBlock_hpgvx ';basic(1683)=1
1046 126 : names(1684) = 'xgBlock_hpgvd ';basic(1684)=1
1047 126 : names(1685) = 'xgBlock_copy ';basic(1685)=1
1048 126 : names(1686) = 'xgBlock_cshift ';basic(1686)=1
1049 126 : names(1687) = 'xgBlock_pack ';basic(1687)=1
1050 126 : names(1688) = 'xgBlock_gemm(mpi) ';basic(1688)=1
1051 126 : names(1689) = 'xgBlock_apply_diag ';basic(1689)=1
1052 :
1053 126 : names(1690) = 'xgScalapack_init '
1054 126 : names(1691) = 'xgScalapack_free '
1055 126 : names(1692) = 'xgScalapack_heev '
1056 126 : names(1693) = 'xgScalapack_hegv '
1057 126 : names(1694) = 'xgScalapack_scatter '
1058 :
1059 : ! GWLS GW code
1060 126 : names(1701)='gwls_sternheimer ';basic(1701)=1
1061 126 : names(1702)='exchange and correlation '
1062 126 : names(1703)='correl. shift lanczos '
1063 126 : names(1704)='Dielectric matrix '
1064 126 : names(1705)='Model Dielectric matrix '
1065 126 : names(1706)='setup proj. sternheimer '
1066 126 : names(1707)='compute proj.sternheimer '
1067 126 : names(1708)='eps^{-1} - eps_m^{-1} '
1068 126 : names(1709)='eps_m^{-1} - 1 '
1069 126 : names(1710)='Modify Lbasis Coulomb '
1070 126 : names(1711)='Diag eps^{-1}-eps_m^{-1} '
1071 126 : names(1712)='exact AT shift lanczos '
1072 126 : names(1713)='model AT shift lanczos '
1073 126 : names(1714)='exact BT shift lanczos '
1074 126 : names(1715)='model BT shift lanczos '
1075 126 : names(1716)='compute poles '
1076 126 : names(1717)='Sigma_A Lanczos '
1077 126 : names(1718)='Sigma_B num. integrands '
1078 :
1079 :
1080 126 : names(1719)='gwls: extract_QR ';basic(1719)=1
1081 126 : names(1720)='gwls: extract_SVD ';basic(1720)=1
1082 :
1083 : ! these entry are not in a logical order.
1084 126 : names(1721)='gwls: gstateimg '
1085 126 : names(1722)='prepareValenceWfk '
1086 :
1087 126 : names(1723)='gwls: sqmr ';basic(1723)=1
1088 :
1089 :
1090 126 : names(1724)='gwls: Pk ';basic(1724)=1
1091 126 : names(1725)='Pk- allocating '
1092 126 : names(1726)='Pk- wfk to denpot '
1093 126 : names(1727)='Pk- wfk product with val '
1094 126 : names(1728)='Pk- pc_k '
1095 126 : names(1729)='Pk- sqmr case 1 '
1096 126 : names(1730)='Pk- sqmr case 2 '
1097 126 : names(1731)='Pk- sqmr case 3 '
1098 126 : names(1732)='Pk- qmr case 4 '
1099 126 : names(1733)='Pk- apply H (case 2) '
1100 :
1101 :
1102 126 : names(1734)='gwls: Pk_model ';basic(1734)=1
1103 126 : names(1735)='Pk_model- allocating '
1104 126 : names(1736)='Pk_model- wfk to denpot '
1105 126 : names(1737)='Pk_model- wfk x val '
1106 126 : names(1738)='Pk_model- pc_k '
1107 126 : names(1739)='Pk_model- act with Y '
1108 126 : names(1740)='Pk_model- add contrib. '
1109 :
1110 :
1111 126 : names(1741)='gwls: calc eps_m^-1(w)-1 ';basic(1741)=1
1112 126 : names(1742)='Allocating '
1113 126 : names(1743)='modifying Lanczos basis '
1114 126 : names(1744)='calc <mod_L_1|Y|mod_L_2> '
1115 126 : names(1745)=' make array hermitian '
1116 126 : names(1746)=' xsum_mpi '
1117 126 : names(1747)='inv eps_m and subtract 1 '
1118 :
1119 : ! IFC object
1120 126 : names(1748)='ifc_fourq'; basic(1748) = 1
1121 : !names(1749)='ewald9'; basic(1749) = 1
1122 : !names(1750)='gtdyn9'; basic(1750) = 1
1123 : !names(1751)='dfpt_phfrq'; basic(1751) = 1
1124 :
1125 : ! chebfi2
1126 126 : names(1750) = 'chebfiwf2 '
1127 126 : names(1751) = 'chebfi2_init '
1128 126 : names(1752) = 'chebfi2_free '
1129 126 : names(1753) = 'chebfi2_enl '
1130 126 : names(1754) = 'chebfi2_getAX_BX '
1131 126 : names(1755) = 'chebfi2_invovl '
1132 126 : names(1756) = 'chebfi2_residu '
1133 126 : names(1757) = 'chebfi2_RayleighRitz '
1134 126 : names(1758) = 'chebfi2_transpose '
1135 126 : names(1759) = 'chebfi2_RR_q '
1136 126 : names(1760) = 'chebfi2_postinvovl '
1137 126 : names(1761) = 'chebfi2_swap '
1138 126 : names(1762) = 'chebfi2_amp_f '
1139 126 : names(1763) = 'chebfi2_oracle '
1140 126 : names(1764) = 'chebfi2_barrier '
1141 126 : names(1765) = 'chebfi2_copy '
1142 :
1143 126 : names(1779) = 'chebfi2(other) '
1144 :
1145 126 : names(1780)='ctgk_rotate'; basic(1780) = 1
1146 :
1147 126 : names(1795) = 'RayleighRitz@diago '; ndata(1795) = nbdmean*nbdmean
1148 126 : names(1796) = 'RayleighRitz@gemm_1 '
1149 126 : names(1797) = 'RayleighRitz@gemm_2 '
1150 :
1151 : ! DVDB object
1152 126 : names(1800)='dvdb_new '; basic(1800) = 1
1153 126 : names(1801)='dvdb_qcache_read '; basic(1801) = 1
1154 126 : names(1802)='dvdb_readsym_qbz '; basic(1802) = 1
1155 126 : names(1803)='dvdb_rotate_fqg '; basic(1803) = 1
1156 126 : names(1804)='v1phq_rotate '; basic(1804) = 1
1157 126 : names(1805)='dvdb_readsym_allv1 '; basic(1805) = 1
1158 126 : names(1806)='dvdb_collect_v1_3natom '; basic(1806) = 1
1159 126 : names(1807)='dvdb_qcache_update '; basic(1807) = 1
1160 126 : names(1808)='dvdb_ftqcache_build '; basic(1808) = 1
1161 126 : names(1809)='dvdb_get_ftqbz '; basic(1809) = 1
1162 :
1163 : ! SIGEPH
1164 : !names(1900)='sigph_pre_qloop '; basic(1900) = 1
1165 : !names(1901)='sigph_qloop_preamble '; basic(1901) = 1
1166 : !names(1902)='sigph_qloop_cg_and_h1 '; basic(1902) = 1
1167 126 : names(1903)='sigph_bsum '; basic(1903) = 1
1168 126 : names(1904)='sigph_bsum_1 '; basic(1904) = 1
1169 126 : names(1905)='sigph_bsum_2 '; basic(1905) = 1
1170 126 : names(1906)='sigph_bsum_3 '; basic(1906) = 1
1171 126 : names(1907)='sigph_bsum_4 '; basic(1907) = 1
1172 126 : names(1908)='sigph_prep_stern '; basic(1908) = 1
1173 126 : names(1909)='sigph_stern '; basic(1909) = 1
1174 126 : names(1910)='sigph_post_stern '; basic(1910) = 1
1175 :
1176 : ! GWR code
1177 126 : names(1919)='ugb_from_diago '; basic(1919) = 1
1178 126 : names(1920)='gwr_init '; basic(1920) = 1
1179 126 : names(1921)='gwr_read_ugb_from_wfk '; basic(1921) = 1
1180 126 : names(1922)='gwr_build_green '; basic(1922) = 1
1181 126 : names(1923)='gwr_build_tchi '; basic(1923) = 1
1182 126 : names(1924)='gwr_build_wc '; basic(1924) = 1
1183 126 : names(1925)='gwr_build_sigmac '; basic(1925) = 1
1184 126 : names(1926)='gwr_build_sigxme '; basic(1926) = 1
1185 126 : names(1927)='gwr_build_head_wings '; basic(1927) = 1
1186 126 : names(1928)='gwr_rpa_energy '; basic(1928) = 1
1187 : !names(1929)='gwr_gk_to_scbox '; basic(1929) = 1
1188 : !names(1930)='gwr_wcq_to_scbox '; basic(1930) = 1
1189 : !names(1931)='gsph2box '; basic(1931) = 1
1190 :
1191 : ! GWPT code
1192 126 : names(1940)='ik_preamble '; basic(1940) = 1
1193 126 : names(1941)='ip_preamble '; basic(1941) = 1
1194 126 : names(1942)='ibsum_preamble1 '; basic(1942) = 1
1195 126 : names(1943)='ibsum_preamble2 '; basic(1943) = 1
1196 126 : names(1944)='pert_loop1 '; basic(1944) = 1
1197 126 : names(1945)='pert_loop2 '; basic(1945) = 1
1198 :
1199 : ! xg_t (2nd part)
1200 126 : names(2000)='xgBlock_scale '; basic(2000) = 1
1201 126 : names(2001)='xgBlock_colwiseDotProduct '; basic(2001) = 1
1202 126 : names(2002)='xgBlock_colwiseMul '; basic(2002) = 1
1203 126 : names(2003)='xgBlock_colwiseCymax '; basic(2003) = 1
1204 126 : names(2004)='xgBlock_colwiseDivision '; basic(2004) = 1
1205 126 : names(2005)='xgBlock_colwiseNorm2 '; basic(2005) = 1
1206 126 : names(2006)='xgBlock_saxpy '; basic(2006) = 1
1207 126 : names(2007)='xgBlock_minmax '; basic(2007) = 1
1208 126 : names(2008)='xgBlock_partialcopy '; basic(2008) = 1
1209 126 : names(2009)='xgBlock_gemmcyclic '! not basic, contain partialcopy
1210 126 : names(2010)='xgBlock_yxmax '; basic(2010) = 1
1211 126 : names(2011)='xgBlock_ymax '; basic(2011) = 1
1212 126 : names(2012)='xgBlock_add '; basic(2012) = 1
1213 126 : names(2013)='xgBlock_add_diag '; basic(2013) = 1
1214 126 : names(2014)='xgBlock_invert '; basic(2014) = 1
1215 126 : names(2015)='xgBlock_invert_sy '; basic(2015) = 1
1216 126 : names(2016)='xgBlock_dot '; basic(2016) = 1
1217 :
1218 : ! lobpcg2_cprj
1219 126 : names(2030) = 'lobpcgwf2_cprj ';
1220 126 : names(2031) = 'lobpcg_Bortho(X) '
1221 126 : names(2032) = 'lobpcg_Bortho(XW) '
1222 126 : names(2033) = 'lobpcg_Bortho(XWP) '
1223 126 : names(2034) = 'lobpcg_Bortho(Xall) '
1224 126 : names(2035) = 'lobpcg_RR(X) '
1225 126 : names(2036) = 'lobpcg_RR(XW) '
1226 126 : names(2037) = 'lobpcg_RR(XWP) '
1227 126 : names(2038) = 'lobpcg_RR(Xall) '
1228 126 : names(2039) = 'lobpcg_transpose '
1229 126 : names(2040) = 'lobpcg_init '
1230 126 : names(2041) = 'lobpcg_free '
1231 126 : names(2042) = 'lobpcg_copy '
1232 126 : names(2043) = 'lobpcg_cprj '
1233 126 : names(2044) = 'lobpcg_orthoWrtPrev '
1234 126 : names(2045) = 'lobpcg_nbdbuf '
1235 126 : names(2046) = 'lobpcg_maxResidu '
1236 126 : names(2047) = 'lobpcg_pcond '
1237 126 : names(2048) = 'lobpcg_AX(kin) '
1238 126 : names(2049) = 'lobpcg_AX(loc) '
1239 126 : names(2050) = 'lobpcg_AX(nl) '
1240 126 : names(2051) = 'lobpcg_enl '
1241 126 : names(2059) = 'lobpcg(other) '
1242 :
1243 : ! chebfi2_cprj
1244 126 : names(2060) = 'chebfiwf2_cprj '
1245 126 : names(2061) = 'chebfi2_init '
1246 126 : names(2062) = 'chebfi2_free '
1247 126 : names(2063) = 'chebfi2_cprj '
1248 126 : names(2065) = 'chebfi2_invovl '
1249 126 : names(2066) = 'chebfi2_residu '
1250 126 : names(2067) = 'chebfi2_RayleighRitz '
1251 126 : names(2068) = 'chebfi2_transpose '
1252 126 : names(2069) = 'chebfi2_RR_q '
1253 126 : names(2070) = 'chebfi2_postinvovl '
1254 126 : names(2071) = 'chebfi2_swap '
1255 126 : names(2072) = 'chebfi2_amp_f '
1256 126 : names(2073) = 'chebfi2_oracle '
1257 126 : names(2074) = 'chebfi2_barrier '
1258 126 : names(2075) = 'chebfi2_copy '
1259 126 : names(2076) = 'chebfi2_AX(kin) '
1260 126 : names(2077) = 'chebfi2_AX(loc) '
1261 126 : names(2078) = 'chebfi2_AX(nl) '
1262 126 : names(2079) = 'chebfi2_enl '
1263 126 : names(2080) = 'chebfi2(other) '
1264 :
1265 : ! xg_nonlop
1266 126 : names(2100)='xg_nonlop '
1267 126 : names(2101)='xg_nonlop%getcprj '
1268 126 : names(2102)='xg_nonlop%apply_prj '
1269 126 : names(2103)='xg_nonlop%apply_Aij '; basic(2103)=1
1270 126 : names(2104)='xg_nonlop%mult_cprj '
1271 126 : names(2105)='xg_nonlop%make_k '
1272 126 : names(2106)='xg_nonlop%make_Dij '; basic(2106)=1
1273 126 : names(2107)='xg_nonlop%make_Sij '
1274 126 : names(2108)='xg_nonlop%make_ekb '; basic(2108)=1
1275 126 : names(2109)='xg_nonlop%apply_diag '; basic(2109)=1
1276 126 : names(2110)='xg_nonlop%init '; basic(2110)=1
1277 :
1278 126 : names(2120)='xg_nonlop%getXSX '
1279 126 : names(2121)='xg_nonlop%getXHX '
1280 126 : names(2122)='xg_nonlop%getHmeSX '
1281 126 : names(2123)='xg_nonlop%inv_AXeB '
1282 :
1283 126 : names(2130)='xg_nl%getcprj(gemm) '
1284 126 : names(2131)='xg_nl%getcprj(copy) '
1285 126 : names(2132)='xg_nl%getcprj(mpi) '; basic(2132)=1
1286 126 : names(2133)='xg_nl%getcprj(proj-otf) '; basic(2133)=1
1287 126 : names(2134)='xg_nl%getcprj(other) '; basic(2134)=1
1288 :
1289 126 : names(2135)='xg_nl%apply_prj(gemm) '
1290 126 : names(2136)='xg_nl%apply_prj(copy) '
1291 126 : names(2137)='xg_nl%apply_prj(mpi) '; basic(2137)=1
1292 126 : names(2138)='xg_nl%apply_prj(proj-otf) '; basic(2138)=1
1293 126 : names(2139)='xg_nl%apply_prj(other) '; basic(2139)=1
1294 :
1295 126 : names(2140)='xg_nl%multcprj(gemm) '
1296 126 : names(2141)='xg_nl%multcprj(copy) '
1297 126 : names(2142)='xg_nl%multcprj(mpi) '; basic(2142)=1
1298 126 : names(2143)='xg_nl%multcprj(other) '; basic(2143)=1
1299 :
1300 126 : names(2150)='xg_nonlop_forces_stress '
1301 126 : names(2151)='xg_nl_fst%start '
1302 126 : names(2152)='xg_nl_fst%cprj_deriv_f '
1303 126 : names(2153)='xg_nl_fst%cprj_deriv_str '
1304 126 : names(2154)='xg_nl_fst%mult_cprj_f '
1305 126 : names(2155)='xg_nl_fst%mult_cprj_str '
1306 126 : names(2156)='xg_nl_fst%work_str '
1307 126 : names(2159)='xg_nl_fst(other) '
1308 :
1309 : ! spectrum slicing routines
1310 : ! TODO IML timers become negative if we mix chebfi and slice must separate
1311 126 : names(2160) = 'slicewf '
1312 126 : names(2161) = 'slice_sched '
1313 126 : names(2162) = 'slice1_diago '
1314 126 : names(2163) = 'slice2_diago '
1315 126 : names(2164) = 'slice3_diago '
1316 126 : names(2165) = 'sliceX_diago '
1317 126 : names(2166) = 'slice(other) '
1318 126 : names(2167) = 'slicingLanczos '
1319 126 : names(2168) = 'slicingTrace '
1320 :
1321 : ! slice_cprj
1322 126 : names(2170) = 'slicewf_cprj '
1323 126 : names(2171) = 'slice_init '
1324 126 : names(2172) = 'slice_free '
1325 126 : names(2173) = 'slice_cprj '
1326 126 : names(2174) = 'slice_invovl '
1327 126 : names(2175) = 'slice_residu '
1328 126 : names(2176) = 'slice_RayleighRitz '
1329 126 : names(2177) = 'slice_transpose '
1330 126 : names(2178) = 'slice_RR_q '
1331 126 : names(2179) = 'slice_postinvovl '
1332 126 : names(2180) = 'slice_swap '
1333 126 : names(2181) = 'slice_amp_f '
1334 126 : names(2182) = 'slice_barrier '
1335 126 : names(2183) = 'slice_copy '
1336 126 : names(2184) = 'slice_AX(kin) '
1337 126 : names(2185) = 'slice_AX(loc) '
1338 126 : names(2186) = 'slice_AX(nl) '
1339 126 : names(2187) = 'slice_enl '
1340 126 : names(2188) = 'slice_ortho '
1341 126 : names(2189) = 'slice(other) '
1342 :
1343 126 : names(2190) = 'slice1(filter) '
1344 126 : names(2191) = 'slice1(RR) '
1345 126 : names(2192) = 'slice1(probe) '
1346 126 : names(2193) = 'slice2(filter) '
1347 126 : names(2194) = 'slice2(RR) '
1348 126 : names(2195) = 'slice2(probe) '
1349 :
1350 : ! TIMER_SIZE is 2199. See m_time
1351 126 : names(TIMER_SIZE)='(other) ' ! This is a generic slot, to compute a complement
1352 :
1353 : !==================================================================================
1354 :
1355 126 : spaceworld= mpi_enreg%comm_world
1356 126 : nproc = mpi_enreg%nproc
1357 126 : me = mpi_enreg%me
1358 : nthreads = 1
1359 126 : nthreads = xomp_get_num_threads(open_parallel=.true.)
1360 126 : if(nthreads<1) nthreads=1
1361 :
1362 126 : call timab(49,2,tsec)
1363 :
1364 126 : if(abs(timopt)==1 .or. timopt==-3 .or. timopt==-4)then ! Time the timing routine (precision should be better than 3%)
1365 : ltimab=1
1366 : utimab=1000
1367 : maxii=20
1368 : ! maxii=1 ! Uncomment this line if no timer is provided in timein.f
1369 573 : do ii=1,20
1370 :
1371 573 : call timab(50,1,tsec)
1372 7913534 : do itimab=ltimab,utimab
1373 : ! The channel 51 is here used as a dummy channel
1374 7912961 : call timab(51,1,tsec)
1375 7913534 : call timab(51,2,tsec)
1376 : end do
1377 573 : call timab(50,2,tsec)
1378 573 : call time_accu(50,return_ncount,tsec, lflops, ftsec)
1379 : ! Exit the timing loop if the CPU time is bigger than 0.10 second
1380 : ! of if the number of calls is too large.
1381 : ! Since the accuracy of the timing is expected to be better than 0.01 sec,
1382 : ! gives about 10% accuracy
1383 573 : if(tsec(1)>0.10_dp)then
1384 : exit
1385 : else
1386 532 : ltimab=utimab+1
1387 : ! Increase the number of timab calls in a block.
1388 : ! This small factor of increase allows to have less than
1389 : ! 0.15 second for this testing
1390 532 : utimab=(3*utimab)/2
1391 : end if
1392 : end do
1393 : ! Get the time per combined call timab(*,1,tsec) + timab(*,2,tsec)
1394 41 : timab_cpu=tsec(1)/utimab
1395 41 : timab_wall=tsec(2)/utimab
1396 41 : if(timopt<0 .and. me==0 .and. timopt/=-2)then
1397 25 : write(ount,*)
1398 25 : write(ount,*)'Test the timer : '
1399 25 : write(ount,*)' a combined call timab(*,1,tsec) + timab(*,2,tsec) is '
1400 25 : write(ount, '(a,es14.4,a,es14.4,a)' )'- CPU time =',timab_cpu,' sec, Wall time =',timab_wall,' sec'
1401 : end if
1402 : else
1403 85 : timab_cpu=zero; timab_wall=zero
1404 : end if
1405 :
1406 : !Eventually reenable the timab routine
1407 126 : call timab(1,5,tsec)
1408 :
1409 : !Get overall elapsed cpu and wall clock time
1410 126 : call timab(1,2,tsec)
1411 126 : call time_accu(1,return_ncount,tsec,lflops,ftsec)
1412 126 : ncount(1)=return_ncount
1413 :
1414 : !Sum over all procs
1415 126 : my_tsec(:)=tsec(:)
1416 126 : call xmpi_sum(my_tsec,tsec,2,spaceworld,ierr)
1417 :
1418 : !Only the world master writes
1419 126 : if (me==0) then
1420 63 : write(ount,'(/,a,f13.1,f12.2,f11.3)')'- Total cpu time (s,m,h):',tsec(1),tsec(1)/60._dp,tsec(1)/3600._dp
1421 63 : write(ount,'(a,f13.1,f12.2,f11.3)') '- Total wall clock time (s,m,h):',tsec(2),tsec(2)/60._dp,tsec(2)/3600._dp
1422 : end if
1423 :
1424 : !Get separate time reports from all timed sections
1425 126 : totcount=0
1426 277200 : do itim=1,TIMER_SIZE
1427 277074 : call time_accu(itim,return_ncount,times(:,itim),nflops(itim),ftimes(:,itim))
1428 277074 : ncount(itim)=return_ncount
1429 277200 : totcount=totcount+return_ncount
1430 : end do
1431 :
1432 : !Estimate additional timings.
1433 :
1434 : !Estimate the values associated with timab, put it in channel 51
1435 126 : ncount(51)=totcount
1436 126 : times(1,51)=timab_cpu*totcount
1437 126 : times(2,51)=timab_wall*totcount
1438 :
1439 : !Gather the different parts of selected time slots
1440 : !Or, alternatively, deduce the value of the complement of some time slots.
1441 : !This loop is finished when the default case is hit (see below)
1442 277200 : do ii=1,TIMER_SIZE
1443 :
1444 277074 : tslots(:)=0
1445 :
1446 : ! List first the time slot in which the result will be accumulated.
1447 : ! If this number is negative, the positive value will be used for the time slot, but the ncount will be set to -1 .
1448 : ! Then, list the time slots whose value will be either accumulate or subtracted. The latter is obtained by
1449 : ! entering a minus sign in front of the time slot number ...
1450 : ! If a negative number is present in the list, while the accumulated time slot is positive,
1451 : ! then the number of counts will be set to the value of the first routine to be accumulated.
1452 : select case(ii)
1453 : ! Gather the different parts of nonlop (SHOULD BE REEXAMINED !)
1454 : case(1)
1455 882 : tslots(:6)=(/75, 221,223,229,233,237/)
1456 : case(2)
1457 630 : tslots(:4)=(/76, 222,225,227/)
1458 : case(3)
1459 378 : tslots(:2)=(/77, 224/)
1460 : case(4)
1461 378 : tslots(:2)=(/78, 226/)
1462 : case(5)
1463 378 : tslots(:2)=(/79, 228/)
1464 : case(6)
1465 : ! Gather the different parts of selected time channels
1466 1386 : tslots(:10)=(/97, 75,76,77,78,79,220,230,231,232/)
1467 : case(7)
1468 : ! Gather the different parts of fourwf (NOTE : should attribute the channel 840 to one of the 4 modes !!!)
1469 504 : tslots(:3)=(/802, 841,844/)
1470 : case(8)
1471 630 : tslots(:4)=(/803, 842,843,846/)
1472 : case(9)
1473 1512 : tslots(:11)=(/804, 845,847,848,850,854,858,859,861,862,880/)
1474 : case(10)
1475 882 : tslots(:6)=(/805, 849,851,857,871,872/)
1476 : case(11)
1477 : ! In the following, the part coming from the prep_fourwf interface is added to the total.
1478 1008 : tslots(:7)=(/801, 802,803,804,805,840,856/)
1479 : case(13)
1480 : ! Gather the different parts of prep_fourwf
1481 504 : tslots(:3)=(/539, 537,538/)
1482 : case(14)
1483 : ! Gather the different parts of fourdp
1484 1638 : tslots(:12)=(/9, 1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270/)
1485 : case(15)
1486 : ! Gather the different parts of getghc
1487 1260 : tslots(:9)=(/350,351,352,353,354,355,356,357,358/)
1488 : case(16)
1489 : ! Gather the different parts of projbd
1490 504 : tslots(:3)=(/210, 211,212/)
1491 : case(17)
1492 : ! Gather the different parts of rwwf (wavefunctions read/write)
1493 : tslots(:24)=&
1494 3150 : & (/14, 270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292/)
1495 : case(18)
1496 : ! Estimate the complement of getghc (non fourwf, non fourdp, non nonlop, non fock_XX)
1497 1134 : tslots(:8)=(/-359, 350,-221,-235,-236,-841,-360,-1580/)
1498 : case(19)
1499 : ! Estimate the complement of cgwf (non getghc,projbd)
1500 882 : tslots(:6)=(/-40, 22,530,1300,-351,-211/)
1501 : case(20)
1502 : ! Estimate the complement of dfpt_cgwf (non getghc,projbd,nonlop,fourwf)
1503 : ! tslots(:8)=(/-140, 122,-202,-197,-212,-227,-228,-844/) ! 197 includes some nonlop and fourwf, so there is double counting ...
1504 1008 : tslots(:7)=(/-140, 122,-352,-212,-227,-228,-844/)
1505 : case(21)
1506 : ! Estimate different complements in vtowfk
1507 : ! vtowfk(ssdiag) (= vtowfk(loop) -cgwf -lobpcgwf_old -cgwf_cprj -lobpcgwf2 -chebfi
1508 : ! -getcprj(vtowfk) -getcsc(subovl)) -chebfiwf2 -lobpcgwf2_cprj -chebfiwf2_cprj
1509 1638 : tslots(:12)=(/-588, 39,-22,-530,-1300,-1600,-1640,-1295,-1364,-1750,-2030,-2060/)
1510 : case(22)
1511 : ! vtowfk(contrib) (= vtowfk (afterloop) - nonlop%vtowfk - fourwf%vtowfk )
1512 630 : tslots(:4)=(/589, 30,-222,-842/)
1513 : case(23)
1514 : ! vtowfk (1) = vtowfk - vtowfk(loop) - vtowfk(afterloop)
1515 630 : tslots(:4)=(/31, 28,-39,-30/)
1516 : case(24)
1517 : ! Estimate different complements in dfpt_vtowfk
1518 : ! dfpt_vtowfk(contrib) (= vtowfk3(loop) - cgwf - fourwf%vtowfk3 - rwwf%vtowfk3 - corrmetalwf1)
1519 882 : tslots(:6)=(/-113, 139,-122,-845,-288,-214/)
1520 : case(25)
1521 : ! vtowfk (1) = dfpt_vtowfk - vtowfk3(loop) - vtowfk3 (3)
1522 630 : tslots(:4)=(/ 131, 128,-139,-130/)
1523 : case(28)
1524 : ! dfpt_vtorho-kpt loop (= dfpt_vtowfk (2) - vtowfk3 - rwwf)
1525 630 : tslots(:4)=(/126,125,-128,-287/)
1526 : case(29)
1527 : ! Estimate complement in mkrho
1528 504 : tslots(:3)=(/798,799,-843/)
1529 : case(30)
1530 : ! Estimate complement in dfpt_looppert
1531 : ! dfpt_looppert(other) (= loper3 - loper3(kpgio) - loper3(getmpw) - loper3(inwffil)
1532 : ! dfpt_scfcv - dfpt_looppert(outwf) -loper3(eigt2tot)
1533 1134 : tslots(:8)=(/145,141,-142,-143,-144,-120,-146,-147/)
1534 : case(31)
1535 : ! Estimate complement in sigma
1536 : ! sigma/=fourdp = sigma - fourdp%rhotwg%si - fourdp%fftwfn%si
1537 630 : tslots(:4)=(/410,401,-262,-265/)
1538 : case(32)
1539 : ! Estimate complement in bethe_salpeter
1540 378 : tslots(:2)=(/699,650/)
1541 : case(33)
1542 : ! Estimate complement in susk
1543 : ! NOTE : fourwf%susk _PAW should actually be split between susk (loop except FFT)
1544 : ! and susk (accumul.except FFT . But a renumbering of the fourwf splitting should be done ...
1545 : ! susk (loop except FFT) = susk (loop) - fourwf%susk !0 - fourwf%susk !3
1546 630 : tslots(:4)=(/756,752,-848,-849/)
1547 : case(34)
1548 : ! susk (accumul.except FFT = susk (accumul) - fourwf%susk !3bis - fourwf%susk _PAW
1549 630 : tslots(:4)=(/757,754,-859,-857/)
1550 : case(35)
1551 : ! Estimate complement in suskmm
1552 : ! NOTE : fourwf%susk _PAW should actually be split between susk (loop except FFT)
1553 : ! and suskmm (accum.except FFT . But a renumbering of the fourwf splitting should be done ...
1554 : ! suskmm (loop except FFT) = suskmm (loop) - fourwf%suskmm !0 part 1 - fourwf%suskmm !3 part 1
1555 630 : tslots(:4)=(/764,762,-861,-871/)
1556 : case(36)
1557 : ! suskmm (accum.except FFT = suskmm (accumul) - fourwf%suskmm !0 part 2 - fourwf%suskmm !3 part 2 - fourwf%susk _PAW
1558 756 : tslots(:5)=(/765,763,-862,-872,-857/)
1559 : case(37)
1560 : ! inwffil(excl. calls) = inwffil - inwffil(call wfsinp) - inwffil(call newkpt);
1561 630 : tslots(:4)=(/718,710,-714,-717/)
1562 : case(38)
1563 : ! wfsinp(excl. calls) = wfsinp - wfsinp(call initwf) - wfsinp(call rwwf)
1564 630 : tslots(:4)=(/728,720,-724,-727/)
1565 : case(39)
1566 : ! newkpt(excl. rwwf )=newkpt(before loop) + newkpt(before rwwf) + newkpt(after rwwf)
1567 : ! newkpt(call wfconv) + newkpt(finalize loop) + newkpt(after loop )
1568 1008 : tslots(:7)=(/-788,781,782,783,784,785,786/)
1569 : case(40)
1570 : ! More complements in vtowfk
1571 : ! vtowfk (2) = vtowfk (loop) - cgwf - lobpcg - subdiago - pw_orthon - cprj_rotate - getcprj(vtowfk)
1572 1386 : tslots(:10)=(/-590,39,-22,-1300,-1600,-530,-585,-583,-578,-1295/)
1573 : case(41)
1574 : ! vtowfk (3) = vtowfk (afterloop) - nonlop%vtowfk - prep_nonlop%vtowfk - fourwf%vtowfk - prep_fourwf%vtowfk - vtowfk(nonlocalpart)
1575 1008 : tslots(:7)=(/-591,30,-222,-572,-842,-537,-586/)
1576 : case(43)
1577 : ! mkrho = mkrho%gstate + mkrho%vtorho + mkrho%energy + mkrho%respfn + mkrho%afterscfloop + mkrho%scfcv_core
1578 1008 : tslots(:7)=(/790,791,792,793,794,795,796/)
1579 : case(44)
1580 : ! Estimate the complement of dmft (in vtorho, only)
1581 1386 : tslots(:10)=(/-626, 991,-620,-621,-622,-623,-624,-625,-627,-628/)
1582 : ! case(45)
1583 : !! Estimate the complement of nonlop_ylm
1584 : ! tslots(:10)=(/1119,1100,-1101,-1102,-1103,-1104,-1105,-1106,-1107,-1108/)
1585 : case(46)
1586 : ! Sum the calls of getcprj
1587 630 : tslots(:4)=(/1290,1293,1294,1295/)
1588 : case(47)
1589 : ! Estimate the complement of getcprj
1590 756 : tslots(:5)=(/1299,1290,-1293,-1294,-1295/)
1591 : case(48)
1592 : ! Estimate the complement of cgwf_cprj
1593 1638 : tslots(:12)=(/1301,1300,-1302,-1303,-1304,-1305,-1293,-1363,-1370,-351,-211,-880/)
1594 : case(49)
1595 : ! Sum calls of getcsc
1596 504 : tslots(:3)=(/1360,1363,1364/)
1597 : case(50)
1598 : ! Estimate the complement of getcsc
1599 630 : tslots(:4)=(/1362,1360,-1363,-1364/)
1600 : case(51)
1601 : ! Estimate the complement of getchc
1602 756 : tslots(:5)=(/1375,1370,-235,-1371,-1372/)
1603 : case(52)
1604 : ! Total of xg_nonlop
1605 1512 : tslots(:11)=(/2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110/)
1606 : case(53)
1607 : ! Estimate the complement of xg_nonlop%getcprj
1608 882 : tslots(:6)=(/2134,2101,-2130,-2131,-2132,-2133/)
1609 : case(54)
1610 : ! Estimate the complement of xg_nonlop%apply_prj
1611 882 : tslots(:6)=(/2139,2102,-2135,-2136,-2137,-2138/)
1612 : case(55)
1613 : ! Estimate the complement of xg_nonlop%multcprj
1614 756 : tslots(:5)=(/2143,2104,-2140,-2141,-2142/)
1615 : case(56)
1616 : ! Estimate the complement of lobpcgwf2
1617 2898 : tslots(:22)=(/1661,1640,(ii,ii=-1641,-1660,-1)/)
1618 : case(57)
1619 : ! Estimate the complement of lobpcgwf2_cprj
1620 3024 : tslots(:23)=(/2059,2030,(ii,ii=-2031,-2051,-1)/)
1621 : case(58)
1622 : ! Estimate the complement of chebfi2
1623 3906 : tslots(:30)=(/1779,1750,(ii,ii=-1751,-1778,-1)/)
1624 : case(59)
1625 : ! Estimate the complement of chebfi2_cprj
1626 2772 : tslots(:21)=(/2080,2060,(ii,ii=-2061,-2079,-1)/)
1627 : case(60)
1628 : ! Estimate the complement of xg_nonlop_forces_stress
1629 1134 : tslots(:8)=(/2159,2150,-2151,-2152,-2153,-2154,-2155,-2156/)
1630 : case(61)
1631 : ! Estimate the complement of slice
1632 1260 : tslots(:9)=(/2166,2160,-2161,-2162,-2163,-2164,-2165,-2167,-2168/)
1633 : case(62)
1634 : ! Estimate the complement of slice_cprj
1635 2646 : tslots(:20)=(/2189,2170,(ii,ii=-2171,-2188,-1)/)
1636 :
1637 : case default
1638 277074 : cycle
1639 : end select
1640 :
1641 7182 : tslot=tslots(1)
1642 7182 : aslot=abs(tslot)
1643 7182 : ncount( aslot)=0 ; if (tslot<0)ncount(aslot)=-1
1644 21546 : times(1:2, aslot)=zero
1645 7182 : nflops( aslot)=zero
1646 21546 : ftimes(1:2,aslot)=zero
1647 : flag_count=1
1648 55440 : do islot=2,TIMER_SIZE
1649 55440 : bslot=tslots(islot)
1650 55440 : cslot=abs(bslot)
1651 55440 : if(bslot>0)then
1652 19782 : if(tslot>0)ncount(aslot)=ncount(aslot)+ncount(cslot)
1653 59346 : times(1:2, aslot)=times(1:2, aslot)+times(1:2,cslot)
1654 19782 : nflops( aslot)=nflops( aslot)+nflops( cslot)
1655 59346 : ftimes(1:2,aslot)=ftimes(1:2,aslot)+ftimes(1:2,cslot)
1656 35658 : else if(bslot<0)then
1657 28476 : if(tslot>0)flag_count=-1
1658 85428 : times(1:2, aslot)=times(1:2, aslot)-times(1:2,cslot)
1659 28476 : nflops( aslot)=nflops( aslot)-nflops( cslot)
1660 85428 : ftimes(1:2,aslot)=ftimes(1:2,aslot)-ftimes(1:2,cslot)
1661 : else if(bslot==0)then
1662 : exit
1663 : end if
1664 : end do
1665 7308 : if(flag_count==-1)ncount(aslot)=ncount(abs(tslots(2)))
1666 : end do
1667 :
1668 : !For the following sections, the number of counts is non standard, and thus these sections have not been placed
1669 : !in the previous doloop.
1670 :
1671 : !Compute xc part of rhotoxc and dfpt_mkvxc, minus the calls to fourdp inside that part
1672 126 : ncount(11)=ncount(81)+ncount(181)
1673 378 : times(1:2,11)=times(1:2,81)+times(1:2,181)-times(1:2,82)
1674 378 : ftimes(1:2,11)=ftimes(1:2,81)+ftimes(1:2,181)-ftimes(1:2,82)
1675 126 : nflops(11)=nflops(81)+nflops(181)-nflops(82)
1676 :
1677 : !Estimate different complements in dfpt_vtorho
1678 : !dfpt_vtorho (1) (= vtorho3 (1,2) - vtorho3(2) - vtorho3:synchro )
1679 126 : ncount(118)=ncount(121)
1680 378 : times(1:2,118)=times(1:2,124)-times(1:2,125)-times(1:2,166)
1681 378 : ftimes(1:2,118)=ftimes(1:2,124)-ftimes(1:2,125)-ftimes(1:2,166)
1682 126 : nflops(118)=nflops(124)-nflops(125)-nflops(166)
1683 :
1684 : !Calculating Gigaflops for all cases
1685 277200 : do itim=1,TIMER_SIZE
1686 277074 : mflops(itim)=-2
1687 277200 : if(abs(ftimes(1,itim)) > tol10) then ! VALGRIND complains that here there is a jump on uninitialized values
1688 0 : mflops(itim)=nflops(itim)*1.e-9/ftimes(1,itim)
1689 : else
1690 277074 : mflops(itim)=-1
1691 : end if
1692 : end do
1693 :
1694 : !Warning if the time is negative
1695 277200 : do itim=1,TIMER_SIZE
1696 277200 : if(times(1,itim)<-tol6 .or. times(2,itim)<-tol6 .or. ncount(itim)<-1 )then
1697 100 : write(msg, '(6a,i4,4a,es16.6,a,es16.6,a,i6,a,es16.6)' ) ch10,&
1698 100 : ' timana: WARNING -',ch10,&
1699 100 : ' One among cpu, wall and ncount is negative.',ch10,&
1700 100 : ' Timing section #',itim,', name : ',names(itim),ch10,&
1701 200 : ' CPU =',times(1,itim),', Wall=',times(2,itim),' ncount=',ncount(itim),' flops=',nflops(itim)
1702 100 : call wrtout(std_out,msg,'PERS')
1703 : end if
1704 : end do
1705 :
1706 : !List of major independent code sections
1707 126 : ABI_MALLOC(list, (TIMER_SIZE))
1708 277200 : list(:)=0
1709 126 : nlist=0
1710 277200 : do itim=1,TIMER_SIZE
1711 277200 : if(basic(itim)/=0)then
1712 27342 : nlist=nlist+1
1713 27342 : list(nlist)=itim
1714 : end if
1715 : end do
1716 :
1717 126 : percent_limit=0.5_dp
1718 126 : if (timopt<0) percent_limit=0.0001_dp
1719 : !if (timopt<0) percent_limit=tol12
1720 :
1721 : !In case there is parallelism, report times for node 0
1722 : !if (me==0 .and. nproc>1) then
1723 126 : if (me==0) then
1724 :
1725 : ! Find normalization to report timing as % total time
1726 63 : cpunm=100._dp/tsec(1)
1727 63 : wallnm=100._dp/tsec(2)
1728 :
1729 : ! (0) Take care of major independent code sections for this account of node 0 timing
1730 :
1731 63 : write(ount, '(a,a,a,a,/,a,a,a)' ) '-',ch10,&
1732 63 : '- For major independent code sections,',' cpu and wall times (sec),',&
1733 63 : '- as well as % of the time and number of calls for node 0',ch10,&
1734 126 : '-'
1735 :
1736 : write(ount,"(3(a,i0),a)")&
1737 63 : "-<BEGIN_TIMER mpi_nprocs = ",nproc,", omp_nthreads = ",nthreads,", mpi_rank = ",me,">"
1738 :
1739 : ! write(ount,"(2(a,f13.1))")"- tot_cpu_time = ",tsec(1), ", tot_wall_time = ",tsec(2)
1740 63 : write(ount,"(2(a,f13.1))")"- cpu_time = ",my_tsec(1),", wall_time = ",my_tsec(2)
1741 63 : write(ount,"(a)")"-"
1742 :
1743 : write(ount,format_head1)&
1744 63 : '- routine','cpu','%','wall','%',' number of calls ',' Gflops ', 'Speedup', 'Efficacity'
1745 : write(ount,format_head2)&
1746 63 : '- ',' ',' ',' ',' ',' (-1=no count)'
1747 :
1748 : ! Sort the list by decreasing CPU time
1749 13734 : do ii=1,nlist
1750 2966670 : do ilist=1,nlist-1
1751 2966607 : if (times(1,list(ilist))<times(1,list(ilist+1))) then
1752 69281 : temp_list=list(ilist)
1753 69281 : list(ilist)=list(ilist+1)
1754 69281 : list(ilist+1)=temp_list
1755 : end if
1756 : end do
1757 : end do
1758 :
1759 63 : subcpu=zero; subwal=zero; other_cpu=zero; other_wal=zero; nothers=0
1760 :
1761 13734 : do ilist=1,nlist
1762 13671 : isort = list(ilist)
1763 :
1764 : if ( ((times(1,isort)*cpunm > percent_limit .and. &
1765 : times(2,isort)*wallnm > percent_limit ).or. &
1766 : ! Also print the name of routines with anomalous negative timing. This is to help debugging.
1767 : (times(1,isort)*cpunm < -tol3 .or. &
1768 : times(2,isort)*wallnm < -tol3 )) &
1769 13671 : .and. ncount(isort) /= 0) then ! Timing analysis
1770 :
1771 1265 : times(2,isort)=times(2,isort)+tol14
1772 1265 : write(ount,format01041)names(isort),&
1773 1265 : times(1,isort),times(1,isort)*cpunm,times(2,isort),times(2,isort)*wallnm,ncount(isort),mflops(isort), &
1774 2530 : times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
1775 : else
1776 12406 : nothers=nothers+1
1777 12406 : other_cpu=other_cpu+times(1,isort)
1778 12406 : other_wal=other_wal+times(2,isort)
1779 : end if
1780 :
1781 13671 : subcpu=subcpu+times(1,isort)
1782 13734 : subwal=subwal+times(2,isort)
1783 : end do
1784 :
1785 63 : write(entry_name,"(a,i0,a)")"others (",nothers,")"
1786 63 : other_wal = other_wal + tol14
1787 63 : write(ount,format01041)entry_name,other_cpu,other_cpu*cpunm,other_wal,other_wal*wallnm,-1,-1.0, &
1788 126 : other_cpu/other_wal,other_cpu/other_wal/nthreads
1789 63 : write(ount,"(a)")"-<END_TIMER>"
1790 :
1791 63 : write(ount,'(a)' ) '-'
1792 63 : subwal = subwal + tol14
1793 63 : write(ount,01200) subcpu,subcpu*cpunm,subwal,subwal*wallnm,subcpu/subwal,subcpu/subwal/nthreads
1794 : end if
1795 :
1796 : !Now, gather all information
1797 126 : call xmpi_sum(times,spaceworld,ierr)
1798 126 : call xmpi_sum(ncount,spaceworld,ierr)
1799 126 : call xmpi_sum(ftimes,spaceworld,ierr)
1800 126 : call xmpi_sum(nflops,spaceworld,ierr)
1801 :
1802 126 : if (me==0) then ! Only the world master writes
1803 :
1804 : ! Find normalization to report timing as % total time
1805 63 : cpunm=100._dp/tsec(1)
1806 63 : wallnm=100._dp/tsec(2)
1807 :
1808 : ! Calculating Gigaflops for all process
1809 138600 : do itim=1,TIMER_SIZE
1810 138537 : mflops(itim)=-2
1811 138600 : if(abs(ftimes(1,itim)) > tol10) then ! VALGRIND complains that here there is a jump on uninitialized values
1812 0 : mflops(itim)=nflops(itim)*1.e-9/ftimes(1,itim)
1813 : else
1814 138537 : mflops(itim)=-1
1815 : end if
1816 : end do
1817 :
1818 : ! _______________________________________
1819 :
1820 : ! Write timing output for cpu times
1821 :
1822 : ! (1) Take care of major independent code sections
1823 : write(ount,'(/,a,/,a,/)' )&
1824 63 : '- For major independent code sections, cpu and wall times (sec),',&
1825 126 : '- as well as % of the total time and number of calls '
1826 :
1827 : write(ount,"(2(a,i0),a)")&
1828 63 : "-<BEGIN_TIMER mpi_nprocs = ",nproc,", omp_nthreads = ",nthreads,", mpi_rank = world>"
1829 :
1830 63 : write(ount,"(2(a,f13.1))")"- cpu_time = ",tsec(1), ", wall_time = ",tsec(2)
1831 63 : write(ount,"(a)")"-"
1832 :
1833 : write(ount,format_head1)&
1834 63 : '- routine ','cpu','%','wall','%', ' number of calls ',' Gflops ', &
1835 126 : 'Speedup', 'Efficacity'
1836 : write(ount,format_head2)&
1837 63 : '- ',' ',' ',' ',' ',' (-1=no count)'
1838 :
1839 : ! Sort the list by decreasing CPU time
1840 13734 : do ii=1,nlist
1841 2966670 : do ilist=1,nlist-1
1842 2966607 : if(times(1,list(ilist))<times(1,list(ilist+1)))then
1843 953 : temp_list=list(ilist)
1844 953 : list(ilist)=list(ilist+1)
1845 953 : list(ilist+1)=temp_list
1846 : end if
1847 : end do
1848 : end do
1849 :
1850 63 : subcpu=zero; subwal=zero; other_cpu=zero; other_wal=zero; nothers=0
1851 :
1852 13734 : do ilist=1,nlist
1853 13671 : isort = list(ilist)
1854 13671 : if( (times(1,isort)*cpunm > percent_limit .and. times(2,isort)*wallnm> percent_limit) .and. ncount(isort)/=0 )then
1855 :
1856 1393 : times(2,isort)=times(2,isort)+tol14
1857 1393 : write(ount,format01041)names(isort),&
1858 1393 : times(1,isort),times(1,isort)*cpunm,times(2,isort),times(2,isort)*wallnm,ncount(isort),mflops(isort), &
1859 2786 : times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
1860 : else
1861 12278 : nothers=nothers+1
1862 12278 : other_cpu=other_cpu+times(1,isort)
1863 12278 : other_wal=other_wal+times(2,isort)
1864 : end if
1865 13671 : subcpu=subcpu+times(1,isort)
1866 13734 : subwal=subwal+times(2,isort)
1867 : end do
1868 :
1869 63 : other_wal = other_wal + tol14
1870 63 : write(entry_name,"(a,i0,a)")"others (",nothers,")"
1871 63 : write(ount,format01041)entry_name,other_cpu,other_cpu*cpunm,other_wal,other_wal*wallnm,-1,-1.0, &
1872 126 : other_cpu/other_wal,other_cpu/other_wal/nthreads
1873 :
1874 63 : write(ount,"(a)")"-<END_TIMER>"
1875 :
1876 63 : subwal = subwal + tol14
1877 63 : write(ount,01201) subcpu,subcpu*cpunm,subwal,subwal*wallnm,subcpu/subwal,subcpu/subwal/nthreads
1878 :
1879 : ! (2) Partitionings
1880 63 : if (timopt<0) then
1881 :
1882 : npart=1000
1883 28028 : do ipart=1,npart
1884 61600000 : list(:)=0
1885 : select case(ipart)
1886 :
1887 : case(1)
1888 308 : list(:10)=(/1,101,102,103,104,640,105,49,50,TIMER_SIZE/) ; msg='abinit '
1889 : case(2)
1890 392 : list(:13)=(/640,641,642,700,132,84,301,401,501,650,643,644,TIMER_SIZE/) ; msg='driver '
1891 : case(3)
1892 924 : list(:32)=(/ (ii,ii=1200,1231,1) /) ; msg='gstateimg+gstate '
1893 : case(4)
1894 700 : list(:24)=(/ (ii,ii=1440,1462,1),TIMER_SIZE/) ; msg='scfcv_core '
1895 : case(5)
1896 224 : list(:7)=(/940,941,942,943,944,945,TIMER_SIZE/) ; msg= 'rhotov '
1897 : case(6)
1898 616 : list(:21)=(/980,981,982,983,984,28,985,271,986,987,988,989,990,991,992,993,994,995,996,997,TIMER_SIZE/)
1899 28 : msg= 'vtorho '
1900 : case(7)
1901 532 : list(:18)=(/28,31,22,530,585,583,590,222,572,842,537,586,591,578,1295,1300,1600,TIMER_SIZE/) ; msg='vtowfk '
1902 : case(8)
1903 28 : if(abs(timopt)==3)then
1904 0 : list(:11)=(/530,354,355,571,532,533,630,535,536,584,587/) ; msg='lobpcgwf (abs(timopt)==3)'
1905 28 : else if(abs(timopt)==4)then
1906 0 : list(:8)=(/530,520,521,522,523,524,525,526/) ; msg='lobpcgwf (abs(timopt)==4)'
1907 : ! else
1908 : ! list(:3)=(/530,354,355/)
1909 : ! msg='lobpcgwf (light analysis: for a deeper one, use abs(timopt)=3 or 4)'
1910 : end if
1911 : case(9)
1912 140 : list(:4)=(/22,351,40,211/) ; msg='cgwf '
1913 : case(10)
1914 252 : list(:8)=(/132,133,134,135,136,137,138,141/) ; msg='respfn '
1915 : case(11)
1916 252 : list(:8)=(/141,142,143,144,120,146,147,TIMER_SIZE/) ; msg='dfpt_looppert '
1917 : case(12)
1918 280 : list(:9)=(/120,154,121,157,152,158,160,150,564/) ; msg='dfpt_scfcv '
1919 : case(13)
1920 280 : list(:9)=(/121,118,128,126,287,166,129,127,556/) ; msg='dfpt_vtorho '
1921 : case(14)
1922 280 : list(:9)=(/128,131,122,845,288,214,113,130,565/) ; msg='dfpt_vtowfk '
1923 : case(15)
1924 252 : list(:8)=(/122,140,352,197,212,227,228,844/) ; msg='dfpt_cgwf '
1925 : case(16)
1926 252 : list(:8)=(/350,841,221,359,235,236,360,1580/) ; msg='getghc '
1927 : case(17)
1928 616 : list(:21)=(/801,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,880/)
1929 28 : msg='fourwf (upwards partitioning)'
1930 : case(18)
1931 168 : list(:5)=(/933,934,936,937,938/) ; msg='outkss '
1932 : case(19)
1933 420 : list(:14)=(/301,302,315,316,319,304,305,320,321,306,307,308,309,310/)
1934 28 : msg='screening '
1935 : case(20)
1936 392 : list(:13)=(/401,402,403,404,405,406,407,408,409,421,423,424,425/); msg='sigma '
1937 : case(21)
1938 280 : list(:9)=(/431,432,433,434,435,445,440,441,442/) ; msg='calc_sigc_me '
1939 : case(23)
1940 336 : list(:11)=(/630,631,632,633,634,545,635,636,637,638,TIMER_SIZE/) ; msg='prep_getghc '
1941 : case(24)
1942 140 : list(:4)=(/539,856,547,548/) ; msg='prep_fourwf '
1943 : case(25)
1944 168 : list(:5)=(/570,231,232,581,TIMER_SIZE/) ; msg='prep_nonlop '
1945 : case(26)
1946 196 : list(:6)=(/(ii,ii=790,795,1)/) ; msg='mkrho (upwards partitioning)'
1947 : ! Disabled (temporarily ?) because the partitioning was not correct
1948 : ! case(27);list(:17)=(/600,601,602,603,604,605,617,606,607,608,609,610,611,612,613,614,615/)
1949 : ! msg='vtorhorec '
1950 : case(28)
1951 308 : list(:10)=(/650,651,653,654,655,656,658,659,660,661/) ; msg='bethe_salpeter '
1952 : case(29)
1953 252 : list(:8)=(/ (ii,ii=740,747,1) /) ; msg='suscep_stat '
1954 : case(30)
1955 280 : list(:9)=(/750,751,848,849,753,756,859,757,755/) ; msg='susk '
1956 : case(31)
1957 252 : list(:8)=(/760,761,764,861,871,765,862,872/) ; msg='suskmm '
1958 : case(32)
1959 252 : list(:8)=(/ (ii,ii=710,717,1) /) ; msg='inwffil '
1960 : case(33)
1961 308 : list(:10)=(/720,721,722,723,724,725,726,727,67,TIMER_SIZE/) ; msg='wfsinp '
1962 : case(34)
1963 168 : list(:5)=(/770,771,772,272,290/) ; msg='initwf '
1964 : case(35)
1965 280 : list(:9)=(/780,781,782,783,784,785,786,291,292/) ; msg='newkpt '
1966 : case(36)
1967 252 : list(:8)=(/93,901,902,903,904,905,268,TIMER_SIZE/) ; msg='newvtr '
1968 : case(37)
1969 84 : list(:2)=(/94,269/) ; msg='newrho '
1970 : case(38)
1971 364 : list(:12)=(/9,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270/) ; msg='fourdp (upwards partitioning)'
1972 : case(39)
1973 252 : list(:8)=(/ (ii,ii=250,257,1) /) ; msg='afterscfloop '
1974 : case(40)
1975 168 : list(:5)=(/ (ii,ii=910,914,1) /) ; msg='forstr '
1976 : case(41)
1977 280 : list(:9)=(/920,921,922,923,924,925,926,927,928/) ; msg='forstrnps '
1978 : case(42)
1979 140 : list(:4)=(/670,671,672,673/) ; msg='exc_build_ham '
1980 : case(43)
1981 224 : list(:7)=(/ (ii,ii=680,686,1) /) ; msg='exc_build_block'
1982 : case(44)
1983 252 : list(:8)=(/ (ii,ii=690,697,1) /) ; msg='exc_haydock_driver '
1984 : case(45)
1985 1428 : list(:50)=(/ (ii,ii=1150,1199,1) /) ; msg='outscfcv '
1986 : case(46)
1987 280 : list(:9)=(/ (ii,ii=620,628,1) /) ; msg='dmft '
1988 : case(47)
1989 280 : list(:9)=(/ (ii,ii=1001,1009,1) /) ; msg='initberry '
1990 : case(48)
1991 168 : list(:5)=(/ (ii,ii=701,705,1) /) ; msg='dmft%impurity_solve: qmc_prep_ctqmc'
1992 : case(50)
1993 168 : list(:5)=(/1560,1561,1562,1563,1565/) ; msg='fock2ACE '
1994 : case(51)
1995 168 : list(:5)=(/1504,1515,850,1270,237/) ; msg='fock_getghc -original'
1996 : case(52)
1997 168 : list(:5)=(/1504,1515,1512,1513,1514/) ; msg='fock_getghc -tight'
1998 : case(53)
1999 140 : list(:4)=(/1504,1505,1506,1507/) ; msg='fock_getghc big blocs'
2000 : case(54)
2001 336 : list(:11)=(/1504,1505,(ii,ii=1521,1528,1),1507/) ; msg='fock_getghc small blocs'
2002 : case(55)
2003 448 : list(:15)=(/1504,1512,1513,1514,1541,1521,1542,1523,1544,1545,1546,1527,1528,1547,1548/)
2004 28 : msg='fock_getghc small blocs + fourXX, nonlop, xmpi_sum '
2005 : case(60)
2006 392 : list(:13)=(/1600,1607,1630,1631,1632,1601,1603,1604,1605,1606,1608,1609,1610/) ; msg = 'chebfi'
2007 : case(61)
2008 112 : list(:3)=(/1620,1621,1622/) ; msg = 'mkinvovl'
2009 : case(70)
2010 168 : list(:5)=(/1701,1702,1703,1721,1722/) ; msg='gwls GW code'
2011 : case(71)
2012 476 : list(:16)=(/ (ii,ii=1703,1718,1) /) ; msg='gwls: compute_correlations_shift_lanczos'
2013 : case(72)
2014 308 : list(:10)=(/ (ii,ii=1724,1733,1) /) ; msg='gwls: Applying the susceptibility Pk'
2015 : case(73)
2016 224 : list(:7)=(/ (ii,ii=1734,1740,1) /) ; msg='gwls: Applying the model susceptibility Pk_model'
2017 : case(74)
2018 224 : list(:7)=(/ (ii,ii=1741,1747,1) /) ; msg='gwls: computing the matrix elements of eps_model^{-1}(w) -1 '
2019 : case(75)
2020 616 : list(:21)=(/ (ii,ii=1640,1649,1), (ii,ii=1651,1660,1), 1661/) ; msg='lobpcgwf2 core engine '
2021 : case(76)
2022 672 : list(:23)=(/ (ii,ii=2030,2051,1),2059/) ; msg='lobpcgwf2_cprj core engine '
2023 : case(77)
2024 868 : list(:30)=(/ (ii,ii=1750,1778,1),1779 /) ; msg='chebfiwf2 core engine '
2025 : case(78)
2026 616 : list(:21)=(/ (ii,ii=2060,2079,1),2080 /) ; msg='chebfiwf2_cprj core engine '
2027 : case(79)
2028 168 : list(:5)=(/1690,1691,1692,1693,1694/) ; msg='low-level xgScalapack type '
2029 : case(80)
2030 252 : list(:8)=(/1662,1663,1664,1665,1666,1667,1668,1669/) ; msg='low-level xgTransposer type '
2031 : case(81)
2032 364 : list(:12)=(/1300,1293,1302,1303,1304,1305,1363,1370,351,211,880,1301/) ; msg='cgwf_cprj'
2033 : case(82)
2034 168 : list(:5)=(/1290,1293,1294,1295,1299/) ; msg='getcprj'
2035 : case(83)
2036 140 : list(:4)=(/1360,1363,1364,1362/) ; msg='getcsc'
2037 : case(84)
2038 168 : list(:5)=(/1370,235,1371,1372,1375/) ; msg='getchc'
2039 : case(85)
2040 448 : list(:15)=(/2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2120,2121,2122,2123/) ; msg='xg_nonlop'
2041 : case(86)
2042 196 : list(:6)=(/2101,2130,2131,2132,2133,2134/) ; msg='xg_nonlop%getcprj'
2043 : case(87)
2044 196 : list(:6)=(/2102,2135,2136,2137,2138,2139/) ; msg='xg_nonlop%apply_prj'
2045 : case(88)
2046 168 : list(:5)=(/2104,2140,2141,2142,2143/) ; msg='xg_nonlop%multcprj'
2047 : case(89)
2048 252 : list(:8)=(/2150,2151,2152,2153,2154,2155,2156,2159/) ; msg='xg_nonlop%forces_stress'
2049 : case(90)
2050 1064 : list(:37)=(/ (ii,ii=1670,1689,1),(ii,ii=2000,2016,1) /) ; msg='low-level xgBlock type '
2051 : case(91)
2052 280 : list(:9)=(/(ii,ii=2160,2168,1)/); msg='slicewf core engine '
2053 : case(92)
2054 196 : list(:6)=(/ (ii,ii=2190,2195,1) /) ; msg='slicewf_cprj core engine '
2055 : case default
2056 28000 : cycle ! This allows one to disable temporarily some partitionings
2057 :
2058 : end select
2059 :
2060 2156 : nlist=0
2061 24864 : do itim=1,TIMER_SIZE
2062 24864 : if(list(itim)/=0)then
2063 22708 : nlist=nlist+1
2064 : else
2065 : exit
2066 : end if
2067 : end do
2068 :
2069 2156 : if(nlist==0)then
2070 : cycle
2071 : end if
2072 :
2073 2156 : if(ncount(list(1))/=0)then
2074 513 : write(ount,'(/,a,a)')' Partitioning of ',trim(msg)
2075 513 : subcpu=zero
2076 513 : subwal=zero
2077 8024 : do ilist=1,nlist
2078 7511 : isort = list(ilist)
2079 : ! When the LAST item is TIMER_SIZE, a complement is evaluated (count number set to -1)
2080 7511 : if(ilist==nlist .and. list(nlist)==TIMER_SIZE)then
2081 188 : times(1,TIMER_SIZE)=times(1,list(1))-subcpu
2082 188 : times(2,TIMER_SIZE)=times(2,list(1))-subwal
2083 188 : ncount(TIMER_SIZE)=-1
2084 188 : ftimes(1,TIMER_SIZE)=zero
2085 188 : mflops(TIMER_SIZE)=0
2086 : #if defined HAVE_TEST_TIME_PARTITIONING
2087 : if(times(2,TIMER_SIZE)>1.2d0 .and. wallnm*times(2,TIMER_SIZE)>3.d0)then
2088 : write(ount, '(3a,es16.6,4a,es16.6,2a)')&
2089 : ' Note : the partitioning does not work well for this routine.',ch10,&
2090 : ' The (other) Wall time ',times(2,TIMER_SIZE),ch10,&
2091 : ' is bigger than 1.2 secs. ',ch10,&
2092 : ' The (other) Wall time percentage ',wallnm*times(2,TIMER_SIZE),ch10,&
2093 : ' is bigger than 3% '
2094 : else if (times(2,TIMER_SIZE)<0.2d0 .and. wallnm*times(2,TIMER_SIZE)<-0.2d0)then
2095 : write(ount, '(3a,es16.6,2a)')&
2096 : ' Note : the partitioning does not work well for this routine.',ch10,&
2097 : ' The (other) Wall time percentage ',wallnm*times(2,TIMER_SIZE),ch10,&
2098 : ' is negative '
2099 : end if
2100 : #endif
2101 : end if
2102 8024 : if(ncount(isort)/=0)then
2103 : ! Do not write a slot if the wall time ratio is below a threshold
2104 : ! However, also identifies when the wall time of a slot (here, a complement) is negative
2105 4586 : if(times(2,isort)*wallnm>0.02d0 .or. ilist==1 .or. times(2,isort)*wallnm<-tol3)then
2106 2268 : if((times(2,isort)*wallnm>0.02d0.or.ilist==1).and.times(2,isort) < 0.0001)times(2,isort)=-1.d0
2107 2268 : times(2,isort)=times(2,isort)+tol14
2108 2268 : write(ount,format01040)names(isort),&
2109 2268 : times(1,isort),times(1,isort)*cpunm,&
2110 2268 : times(2,isort),times(2,isort)*wallnm,ncount(isort), &
2111 4536 : times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
2112 : end if
2113 4586 : if(ilist/=1)then
2114 4073 : subcpu=subcpu+times(1,isort)
2115 4073 : subwal=subwal+times(2,isort)
2116 : else
2117 513 : write(ount, '(a)' ) ' '
2118 : end if
2119 : end if
2120 : end do
2121 :
2122 513 : subwal = subwal + tol14
2123 513 : write(ount, 01201 ) subcpu,subcpu*cpunm,subwal,subwal*wallnm, subcpu/subwal,subcpu/subwal/nthreads
2124 : #ifdef HAVE_TEST_TIME_PARTITIONING
2125 : if( wallnm*abs(subwal-times(2,list(1)))>1.d0 .and. abs(subwal-times(2,list(1)))>0.2d0 )then
2126 : write(ount, '(3a,es16.6,2a,es16.6,4a,es16.6,2a,es16.6,6a,i4)')&
2127 : ' Note : the partitioning does not work well for this routine.',ch10,&
2128 : ' The subtotal Wall time ',subwal,ch10,&
2129 : ' differs from the total Wall time ',times(2,list(1)),ch10,&
2130 : ' by more than 0.2 secs.',ch10,&
2131 : ' The subtotal Wall time percentage ',wallnm*subwal,ch10,&
2132 : ' differs from the total Wall time %',wallnm*times(2,list(1)),ch10,&
2133 : ' by more than 1%. ',ch10,&
2134 : ' The partitioning might not have been coded properly.',ch10,&
2135 : ' nlist=',nlist
2136 : do ilist=1,nlist
2137 : write(ount, '(a,i4,i4,es16.6,i8)' )&
2138 : ' ilist,list(ilist),wallnm*times(2,list(ilist)),ncount(list(ilist))=',&
2139 : ilist,isort,wallnm*times(2,isort),ncount(isort)
2140 : end do
2141 : end if
2142 : #endif
2143 : end if
2144 :
2145 : end do ! End of loop on partitionings
2146 :
2147 : ! For parallel case
2148 : if(xmpi_paral==1)then
2149 28 : write(ount, '(a,/,a)' )'-','-Synchronisation (=leave_test) and MPI calls '
2150 28 : nlist=14
2151 420 : list(:nlist)=(/48,61,62,63,64,65,66,67,71,85,86,543,544,787/)
2152 28 : subcpu=zero; subwal=zero
2153 28 : if(ncount(list(1))/=0)then
2154 420 : do ilist=1,nlist
2155 392 : isort = list(ilist)
2156 : !
2157 420 : if (ncount(isort)/=0) then
2158 65 : times(2,isort)=times(2,isort)+tol14
2159 65 : write(ount,format01040)names(isort),&
2160 65 : times(1,isort),times(1,isort)*cpunm,&
2161 65 : times(2,isort),times(2,isort)*wallnm,ncount(isort), &
2162 130 : times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
2163 :
2164 65 : if(ilist/=1)then
2165 37 : subcpu=subcpu+times(1,isort)
2166 37 : subwal=subwal+times(2,isort)
2167 : else
2168 28 : write(ount, '(a)' ) '-'
2169 : end if
2170 : end if !ncount
2171 : end do !ilist
2172 :
2173 28 : subwal = subwal + tol14
2174 28 : write(ount, 01200 ) subcpu,subcpu*cpunm,subwal,subwal*wallnm, subcpu/subwal,subcpu/subwal/nthreads
2175 : end if !ncount
2176 : end if !xmpi_paral
2177 :
2178 784 : nlist=27
2179 784 : list(:nlist)=(/47,49,51,801,72,73,74,77,78,79,97,82,87,88,436,437,438,439,443,444,804,805,331,332,333,1280,1281/)
2180 : flag_write=1
2181 784 : do ilist=1,nlist
2182 756 : isort = list(ilist)
2183 784 : if(ncount(isort)/=0)then
2184 186 : if(flag_write==1)then
2185 28 : write(ount, '(/,a)' ) ' Additional information'
2186 28 : flag_write=0
2187 : end if
2188 186 : times(2,isort)=times(2,isort)+tol14
2189 186 : write(ount,format01040)names(isort),&
2190 186 : times(1,isort),times(1,isort)*cpunm,times(2,isort),times(2,isort)*wallnm,ncount(isort), &
2191 372 : times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
2192 : end if
2193 : end do
2194 :
2195 672 : nlist=23
2196 672 : list(:nlist)=(/550,551,552,553,554,555,556,558,559,560,561,562,563,564,565,566,567,593,594,595,596,597,598/)
2197 : flag_write=1
2198 672 : do ilist=1,nlist
2199 644 : isort = list(ilist)
2200 672 : if(ncount(isort)/=0)then
2201 11 : if(flag_write==1)then
2202 1 : write(ount, '(/,a)' ) ' Additional information about PAW segments'
2203 1 : flag_write=0
2204 : end if
2205 11 : times(2,isort)=times(2,isort)+tol14
2206 11 : write(ount,format01040)names(isort),&
2207 11 : times(1,isort),times(1,isort)*cpunm,times(2,isort),times(2,isort)*wallnm,ncount(isort), &
2208 22 : times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
2209 : end if
2210 : end do
2211 :
2212 112 : nlist=3
2213 112 : list(:nlist)=(/1795,1796,1797/)
2214 : flag_write=1
2215 112 : do ilist=1,nlist
2216 84 : isort = list(ilist)
2217 112 : if(ncount(isort)/=0)then
2218 12 : if(flag_write==1)then
2219 4 : write(ount, '(/,a)' ) ' Additional information about diagonalization algorithm segments'
2220 4 : flag_write=0
2221 : end if
2222 12 : times(2,isort)=times(2,isort)+tol14
2223 12 : write(ount,format01040)names(isort),&
2224 12 : times(1,isort),times(1,isort)*cpunm,times(2,isort),times(2,isort)*wallnm,ncount(isort), &
2225 24 : times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
2226 : end if
2227 : end do
2228 :
2229 : ! The detailed analysis cannot be done in the multidataset mode
2230 28 : if(ndtset<2)then
2231 : write(ount, '(/,/,a,/,a,/,a)' ) &
2232 15 : ' Detailed analysis of some time consuming routines ',&
2233 15 : ' tcpu ncalls tcpu/ncalls ndata tcpu/ncalls/ndata',&
2234 30 : ' (sec) (msec) (microsec)'
2235 15 : nlist=9
2236 150 : list(:nlist)=(/802,803,9,75,76,77,210,11,1795/)
2237 150 : do ilist=1,nlist
2238 135 : isort = list(ilist)
2239 150 : if(ncount(isort)/=0)then
2240 74 : write(ount, '(a,a24,f12.3,i10,f12.3,i10,f12.3)' )'- ',names(isort),&
2241 74 : times(1,isort),ncount(isort),&
2242 74 : 1000.0_dp*times(1,isort)/dble(ncount(isort)),ndata(isort),&
2243 148 : 1000000.0_dp*times(1,isort)/dble(ncount(isort)*dble(ndata(isort)))
2244 : else
2245 61 : write(ount, '(a,a24,f12.3,i10)' )'- ',names(isort),times(1,isort),ncount(isort)
2246 : end if
2247 : end do !ilist
2248 : else
2249 13 : write(ount,'(/,a)') ' timana : in multi dataset mode, the more detailed analysis is not done.'
2250 : end if !ndtset
2251 :
2252 : end if ! End the condition of timopt<0
2253 :
2254 : end if ! me==0
2255 :
2256 126 : ABI_FREE(list)
2257 :
2258 126 : end subroutine timana
2259 : !!***
2260 :
2261 : end module m_timana
2262 : !!***
|