LCOV - code coverage report
Current view: top level - src/55_abiutil - m_timana.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 99.7 % 1430 1426
Test Date: 2026-09-21 19:39:32 Functions: 100.0 % 1 1

            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          572 :    do ii=1,20
    1370              : 
    1371          572 :      call timab(50,1,tsec)
    1372      7848673 :      do itimab=ltimab,utimab
    1373              : !      The channel 51 is here used as a dummy channel
    1374      7848101 :        call timab(51,1,tsec)
    1375      7848673 :        call timab(51,2,tsec)
    1376              :      end do
    1377          572 :      call timab(50,2,tsec)
    1378          572 :      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          572 :      if(tsec(1)>0.10_dp)then
    1384              :        exit
    1385              :      else
    1386          531 :        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          531 :        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        69306 :          temp_list=list(ilist)
    1753        69306 :          list(ilist)=list(ilist+1)
    1754        69306 :          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         1260 :        times(2,isort)=times(2,isort)+tol14
    1772         1260 :        write(ount,format01041)names(isort),&
    1773         1260 :          times(1,isort),times(1,isort)*cpunm,times(2,isort),times(2,isort)*wallnm,ncount(isort),mflops(isort), &
    1774         2520 :          times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
    1775              :      else
    1776        12411 :        nothers=nothers+1
    1777        12411 :        other_cpu=other_cpu+times(1,isort)
    1778        12411 :        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          969 :          temp_list=list(ilist)
    1844          969 :          list(ilist)=list(ilist+1)
    1845          969 :          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         1384 :        times(2,isort)=times(2,isort)+tol14
    1857         1384 :        write(ount,format01041)names(isort),&
    1858         1384 :          times(1,isort),times(1,isort)*cpunm,times(2,isort),times(2,isort)*wallnm,ncount(isort),mflops(isort), &
    1859         2768 :          times(1,isort)/times(2,isort),times(1,isort)/times(2,isort)/nthreads
    1860              :      else
    1861        12287 :        nothers=nothers+1
    1862        12287 :        other_cpu=other_cpu+times(1,isort)
    1863        12287 :        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         2271 :                if((times(2,isort)*wallnm>0.02d0.or.ilist==1).and.times(2,isort) < 0.0001)times(2,isort)=-1.d0
    2107         2271 :                times(2,isort)=times(2,isort)+tol14
    2108         2271 :                write(ount,format01040)names(isort),&
    2109         2271 :                  times(1,isort),times(1,isort)*cpunm,&
    2110         2271 :                  times(2,isort),times(2,isort)*wallnm,ncount(isort), &
    2111         4542 :                  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              : !!***
        

Generated by: LCOV version 2.3-1