LCOV - code coverage report
Current view: top level - juphon - dfpt_cdnval.F90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 0 134 0.0 %
Date: 2024-05-15 04:28:08 Functions: 0 1 0.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------
       2             : ! Copyright (c) 2022 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
       3             : ! This file is part of FLEUR and available as free software under the conditions
       4             : ! of the MIT license as expressed in the LICENSE file in more detail.
       5             : !--------------------------------------------------------------------------------
       6             : 
       7             : MODULE m_dfpt_cdnval
       8             : 
       9             : USE m_juDFT
      10             : #ifdef CPP_MPI
      11             : use mpi
      12             : #endif
      13             : 
      14             : CONTAINS
      15             : 
      16           0 : SUBROUTINE dfpt_cdnval(eig_id, dfpt_eig_id, fmpi,kpts,jspin,noco,nococonv,input,banddosdummy,cell,atoms,enpara,stars,&
      17             :                   vacuum,sphhar,sym,juphon,vTot,cdnvalJob,den,dosdummy,vacdosdummy,&
      18             :                   hub1inp, cdnvalJob1, resultsdummy, resultsdummy1, bqpt, iDtype, iDir, denIm, l_real,&
      19             :                   qm_eid_id,dfpt_eigm_id,starsmq,resultsdummy1m,cdnvalJob1m)
      20             : 
      21             :    USE m_types
      22             :    USE m_constants
      23             :    USE m_eig66_io
      24             :    USE m_abcof
      25             :    USE m_pwden
      26             :    USE m_vacden
      27             :    USE m_cdnmt       ! calculate the density and orbital moments etc.
      28             :    USE m_types_dos
      29             :    USE m_types_vacdos
      30             : #ifdef CPP_MPI
      31             :    USE m_mpi_col_den ! collect density data from parallel nodes
      32             : #endif
      33             :    USE m_dfpt_rhomt
      34             :    USE m_dfpt_rhonmt
      35             :    USE m_genMTBasis
      36             :    USE m_npy
      37             : 
      38             :    IMPLICIT NONE
      39             : 
      40             :    TYPE(t_mpi),           INTENT(IN)    :: fmpi
      41             : 
      42             :    TYPE(t_enpara),        INTENT(IN)    :: enpara
      43             :    TYPE(t_banddos),       INTENT(IN)    :: banddosdummy
      44             :    TYPE(t_dos),           INTENT(INOUT) :: dosdummy
      45             :    TYPE(t_vacdos),        INTENT(INOUT) :: vacdosdummy
      46             :    TYPE(t_input),         INTENT(IN)    :: input
      47             :    TYPE(t_vacuum),        INTENT(IN)    :: vacuum
      48             :    TYPE(t_noco),          INTENT(IN)    :: noco
      49             :    TYPE(t_nococonv),      INTENT(IN)    :: nococonv
      50             :    TYPE(t_sym),           INTENT(IN)    :: sym
      51             :    TYPE(t_juphon),        INTENT(IN)    :: juphon
      52             :    TYPE(t_stars),         INTENT(IN)    :: stars
      53             :    TYPE(t_cell),          INTENT(IN)    :: cell
      54             :    TYPE(t_kpts),          INTENT(IN)    :: kpts
      55             :    TYPE(t_sphhar),        INTENT(IN)    :: sphhar
      56             :    TYPE(t_atoms),         INTENT(IN)    :: atoms
      57             :    TYPE(t_hub1inp),       INTENT(IN)    :: hub1inp
      58             :    TYPE(t_potden),        INTENT(IN)    :: vTot
      59             :    TYPE(t_cdnvalJob),     INTENT(IN)    :: cdnvalJob, cdnvalJob1
      60             :    TYPE(t_results),       INTENT(INOUT) :: resultsdummy, resultsdummy1
      61             :    TYPE(t_potden),        INTENT(INOUT) :: den, denIm
      62             : 
      63             :    ! Scalar Arguments
      64             :    INTEGER,               INTENT(IN)    :: eig_id, dfpt_eig_id, jspin, iDtype, iDir
      65             :    LOGICAL,               INTENT(IN)    :: l_real
      66             : 
      67             :    REAL, INTENT(IN) :: bqpt(3)
      68             : 
      69             :    INTEGER, OPTIONAL, INTENT(IN)    :: qm_eid_id, dfpt_eigm_id
      70             :    TYPE(t_stars), OPTIONAL, INTENT(IN)         :: starsmq
      71             :    TYPE(t_results), OPTIONAL, INTENT(INOUT)    :: resultsdummy1m
      72             :    TYPE(t_cdnvalJob), OPTIONAL, INTENT(IN)    :: cdnvalJob1m
      73             : 
      74             :    ! Local Scalars
      75             :    INTEGER :: ikpt,ikpt_i,jsp_start,jsp_end,ispin,jsp,iType,ikG,iqdir
      76             :    INTEGER :: iErr,nbands,noccbd,nbands1,iLo,l,imLo,ikLo,ikGLo,nbands1m
      77             :    INTEGER :: skip_t,skip_tt,nbasfcn,nbasfcnq,nbasfcnmq
      78             :    REAL    :: gExt(3), q_loop(3), bkpt(3)
      79             : 
      80             :    ! Local Arrays
      81           0 :    COMPLEX ::  f_b8_dummy(3, atoms%ntype)
      82           0 :    REAL,ALLOCATABLE :: we(:),eig(:),we1(:),eig1(:),we1m(:),eig1m(:)
      83           0 :    INTEGER,ALLOCATABLE :: ev_list(:)
      84           0 :    REAL,    ALLOCATABLE :: f(:,:,:,:),g(:,:,:,:),flo(:,:,:,:) ! radial functions
      85             : 
      86           0 :    TYPE (t_lapw)              :: lapw, lapwq, lapwmq
      87           0 :    TYPE (t_orb)               :: orbdummy
      88           0 :    TYPE (t_denCoeffs)         :: denCoeffs
      89           0 :    TYPE (t_denCoeffsOffdiag)  :: denCoeffsOffdiag
      90           0 :    TYPE (t_eigVecCoeffs)      :: eigVecCoeffs, eigVecCoeffs1, eigVecCoeffsPref, eigVecCoeffs1m
      91           0 :    TYPE (t_usdus)             :: usdus
      92           0 :    TYPE (t_mat)               :: zMat, zMat1, zMatPref, zMat1m
      93           0 :    TYPE(t_kpts)               :: kpts_mod
      94             : 
      95             :    LOGICAL :: l_minusq
      96             : 
      97           0 :    CALL timestart("dfpt_cdnval")
      98             : 
      99           0 :    call timestart("init")
     100             : 
     101           0 :    l_minusq = PRESENT(qm_eid_id)
     102           0 :    IF (noco%l_mperp) THEN
     103             :       ! when the off-diag. part of the density matrix, i.e. m_x and
     104             :       ! m_y, is calculated inside the muffin-tins (l_mperp = T), cdnval
     105             :       ! is called only once. therefore, several spin loops have been
     106             :       ! added. if l_mperp = F, these loops run only from jspin - jspin.
     107           0 :       jsp_start = 1
     108           0 :       jsp_end   = 2
     109             :    ELSE
     110           0 :       jsp_start = jspin
     111           0 :       jsp_end   = jspin
     112             :    END IF
     113             : 
     114           0 :    ALLOCATE (f(atoms%jmtd,2,0:atoms%lmaxd,input%jspins)) ! Deallocation before mpi_col_den
     115           0 :    ALLOCATE (g(atoms%jmtd,2,0:atoms%lmaxd,input%jspins))
     116           0 :    ALLOCATE (flo(atoms%jmtd,2,atoms%nlod,input%jspins))
     117             : 
     118             :    ! Initializations
     119           0 :    CALL usdus%init(atoms,input%jspins)
     120           0 :    CALL denCoeffs%init(atoms,sphhar,jsp_start,jsp_end)
     121             :    ! The last entry in denCoeffsOffdiag%init is l_fmpl. It is meant as a switch to a plot of the full magnet.
     122             :    ! density without the atomic sphere approximation for the magnet. density.
     123           0 :    CALL denCoeffsOffdiag%init(atoms,noco,sphhar,banddosdummy%l_jDOS,any(noco%l_unrestrictMT).OR.noco%l_mperp)
     124             :    !CALL orbdummy%init(atoms,noco,jsp_start,jsp_end)
     125             : 
     126           0 :    IF (denCoeffsOffdiag%l_fmpl.AND.(.NOT.noco%l_mperp)) CALL juDFT_error("for fmpl set noco%l_mperp = T!" ,calledby ="cdnval")
     127             : 
     128           0 :    DO iType = 1, atoms%ntype
     129           0 :       DO ispin = 1, input%jspins
     130           0 :          CALL genMTBasis(atoms,enpara,vTot,fmpi,iType,ispin,usdus,f(:,:,0:,ispin),g(:,:,0:,ispin),flo(:,:,:,ispin))
     131             :       END DO
     132             :    END DO
     133           0 :    DEALLOCATE (f,g,flo)
     134             : 
     135           0 :    skip_tt = dot_product(enpara%skiplo(:atoms%ntype,jspin),atoms%neq(:atoms%ntype))
     136             :    IF (noco%l_soc.OR.noco%l_noco) skip_tt = 2 * skip_tt
     137             : 
     138           0 :    jsp = MERGE(1,jspin,noco%l_noco)
     139             : 
     140             :    ! TODO: There was the idea that some problems stemmed from k+q>0.5, so we tried implementing
     141             :    !       a backfolding option. This turned out to be unnecessary, but I leave it here for possible
     142             :    !       future application
     143           0 :    kpts_mod = kpts
     144           0 :    DO ikpt_i = 1, size(cdnvalJob%k_list)
     145           0 :       ikpt=fmpi%k_list(ikpt_i)
     146           0 :       bkpt = kpts%bk(:, ikpt)
     147             :       DO iqdir = 1, 3
     148             :          !IF (bkpt(iqdir)+bqpt(iqdir)>=0.5) bkpt(iqdir) = bkpt(iqdir) - 1.0
     149             :          !IF (bkpt(iqdir)+bqpt(iqdir)<-0.5) bkpt(iqdir) = bkpt(iqdir) + 1.0
     150             :          !IF (bkpt(iqdir)+bqpt(iqdir)>=0.5.AND.ABS(bqpt(iqdir))>1e-8) bkpt(iqdir) = bkpt(iqdir) - 1.0
     151             :          !IF (bkpt(iqdir)+bqpt(iqdir)<-0.5.AND.ABS(bqpt(iqdir))>1e-8) bkpt(iqdir) = bkpt(iqdir) + 1.0
     152             :       END DO
     153           0 :       kpts_mod%bk(:, ikpt) = bkpt
     154             :    END DO
     155             : 
     156           0 :    call timestop("init")
     157             : 
     158           0 :    DO ikpt_i = 1,size(cdnvalJob%k_list)
     159           0 :       ikpt=cdnvalJob%k_list(ikpt_i)
     160             : 
     161           0 :       CALL lapw%init(input,noco,nococonv, kpts,atoms,sym,ikpt,cell, fmpi)
     162           0 :       CALL lapwq%init(input,noco,nococonv, kpts_mod,atoms,sym,ikpt,cell, fmpi, bqpt)
     163             : 
     164           0 :       IF (l_minusq) CALL lapwmq%init(input,noco,nococonv, kpts_mod,atoms,sym,ikpt,cell, fmpi, -bqpt)
     165             : 
     166             :       skip_t = skip_tt
     167           0 :       ev_list=cdnvaljob%compact_ev_list(ikpt_i,.FALSE.)
     168           0 :       noccbd = SIZE(ev_list)
     169             : 
     170           0 :       we  = cdnvalJob%weights(ev_list,ikpt)
     171           0 :       we1  = cdnvalJob1%weights(ev_list,ikpt)
     172           0 :       eig = resultsdummy%eig(ev_list,ikpt,jsp)
     173           0 :       eig1 = resultsdummy1%eig(ev_list,ikpt,jsp)
     174             : 
     175           0 :       IF (l_minusq) THEN
     176           0 :          we1m = cdnvalJob1m%weights(ev_list,ikpt)
     177           0 :          eig1m = resultsdummy1m%eig(ev_list,ikpt,jsp)
     178             :       END IF
     179             : 
     180             :       IF (cdnvalJob%l_evp) THEN
     181             :          IF (minval(ev_list) > skip_tt) skip_t = 0
     182             :          IF (maxval(ev_list) <= skip_tt) skip_t = noccbd
     183             :          IF ((minval(ev_list) <= skip_tt).AND.(maxval(ev_list) > skip_tt)) skip_t = mod(skip_tt,noccbd)
     184             :       END IF
     185             : 
     186           0 :       nbasfcn = MERGE(lapw%nv(1)+lapw%nv(2)+2*atoms%nlotot,lapw%nv(1)+atoms%nlotot,noco%l_noco)
     187           0 :       nbasfcnq = MERGE(lapwq%nv(1)+lapwq%nv(2)+2*atoms%nlotot,lapwq%nv(1)+atoms%nlotot,noco%l_noco)
     188             : 
     189           0 :       IF (l_minusq) nbasfcnmq = MERGE(lapwmq%nv(1)+lapwmq%nv(2)+2*atoms%nlotot,lapwmq%nv(1)+atoms%nlotot,noco%l_noco)
     190             : 
     191           0 :       CALL zMat%init(l_real,nbasfcn,noccbd)
     192           0 :       CALL zMat1%init(.FALSE.,nbasfcnq,noccbd)
     193           0 :       CALL zMatPref%init(.FALSE.,nbasfcn,noccbd)
     194             : 
     195           0 :       IF (l_minusq) THEN
     196           0 :          CALL zMat1m%init(.FALSE.,nbasfcnmq,noccbd)
     197             :       END IF
     198             : 
     199           0 :       CALL read_eig(eig_id,ikpt,jsp,list=ev_list,neig=nbands,zmat=zMat)
     200           0 :       CALL read_eig(dfpt_eig_id,ikpt,jsp,list=ev_list,neig=nbands1,zmat=zMat1)
     201             : 
     202           0 :       IF (l_minusq) CALL read_eig(dfpt_eigm_id,ikpt,jsp,list=ev_list,neig=nbands1m,zmat=zMat1m)
     203             : 
     204             :       ! TODO: Implement correct spin logic here! Only collinear operational for now!
     205           0 :       DO ikG = 1, lapw%nv(jsp)
     206           0 :          gExt = MATMUL(lapw%vk(:, ikG, jsp),cell%bmat)
     207           0 :          IF (zMat%l_real) THEN
     208           0 :             zMatPref%data_c(ikG,:) = ImagUnit * gExt(idir) * zMat%data_r(ikG, :)
     209             :          ELSE
     210           0 :             zMatPref%data_c(ikG,:) = ImagUnit * gExt(idir) * zMat%data_c(ikG, :)
     211             :          END IF
     212             :       END DO
     213             : 
     214             :       ! TODO: LOs matching coefficients are unperturbed for now, because they derailed
     215             :       !       the calculation. Find out why; forces can use the perturbation!
     216             :       !DO ikG = lapw%nv(jsp) + 1, lapw%nv(jsp) + atoms%nlo(iDtype)
     217             :       !   iLo = ikG-lapw%nv(jsp)
     218             :       !   l = atoms%llo(iLo, iDtype)
     219             :       !   DO imLo = 1, 2*l+1
     220             :       !      ikLo = lapw%kvec(imLo,iLo,iDtype)
     221             :       !      ikGLo = lapw%nv(jsp) + lapw%index_lo(iLo,iDtype) + imLo
     222             :       !      !gExt = MATMUL(cell%bmat,lapw%vk(:,ikLo, jsp))
     223             :       !      gExt = MATMUL(cell%bmat,lapw%bkpt)
     224             :       !      IF (zMat%l_real) THEN
     225             :       !         zMatPref%data_c(ikGLo,:) = ImagUnit * gExt(idir) * zMat%data_r(ikGLo, :)
     226             :       !      ELSE
     227             :       !         zMatPref%data_c(ikGLo,:) = ImagUnit * gExt(idir) * zMat%data_c(ikGLo, :)
     228             :       !      END IF
     229             :       !   END DO
     230             :       !END DO
     231             : 
     232             :       !IF (.NOT.(nbands==nbands1)) TODO: Can this ever be a problem?
     233             : #ifdef CPP_MPI
     234           0 :       CALL MPI_BARRIER(fmpi%mpi_comm,iErr) ! Synchronizes the RMA operations
     235             : #endif
     236             : 
     237           0 :       IF (noccbd.LE.0) CYCLE ! Note: This jump has to be after the MPI_BARRIER is called
     238             : 
     239             :       ! valence density in the atomic spheres
     240           0 :       CALL eigVecCoeffs%init(input,atoms,jspin,noccbd,noco%l_mperp)
     241           0 :       CALL eigVecCoeffs1%init(input,atoms,jspin,noccbd,noco%l_mperp)
     242           0 :       IF (juphon%l_phonon) CALL eigVecCoeffsPref%init(input,atoms,jspin,noccbd,noco%l_mperp)
     243             : 
     244           0 :       IF (l_minusq) CALL eigVecCoeffs1m%init(input,atoms,jspin,noccbd,noco%l_mperp)
     245             : 
     246           0 :       DO ispin = jsp_start, jsp_end
     247             :          ! TODO: Does this spin logic hold for noco?
     248             :          CALL abcof(input,atoms,sym,cell,lapw,noccbd,usdus,noco,nococonv,ispin,&
     249             :                     eigVecCoeffs%abcof(:,0:,0,:,ispin),eigVecCoeffs%abcof(:,0:,1,:,ispin),&
     250           0 :                     eigVecCoeffs%ccof(-atoms%llod:,:,:,:,ispin),zMat)
     251             :          CALL abcof(input,atoms,sym,cell,lapwq,noccbd,usdus,noco,nococonv,ispin,&
     252             :                     eigVecCoeffs1%abcof(:,0:,0,:,ispin),eigVecCoeffs1%abcof(:,0:,1,:,ispin),&
     253           0 :                     eigVecCoeffs1%ccof(-atoms%llod:,:,:,:,ispin),zMat1)
     254           0 :          IF (juphon%l_phonon) CALL abcof(input,atoms,sym,cell,lapw,noccbd,usdus,noco,nococonv,ispin,&
     255             :                                    eigVecCoeffsPref%abcof(:,0:,0,:,ispin),eigVecCoeffsPref%abcof(:,0:,1,:,ispin),&
     256           0 :                                    eigVecCoeffsPref%ccof(-atoms%llod:,:,:,:,ispin),zMatPref)
     257           0 :          IF (l_minusq) CALL abcof(input,atoms,sym,cell,lapwmq,noccbd,usdus,noco,nococonv,ispin,&
     258             :                                   eigVecCoeffs1m%abcof(:,0:,0,:,ispin),eigVecCoeffs1m%abcof(:,0:,1,:,ispin),&
     259           0 :                                   eigVecCoeffs1m%ccof(-atoms%llod:,:,:,:,ispin),zMat1)
     260             : 
     261           0 :          IF (juphon%l_phonon) THEN
     262           0 :             eigVecCoeffs1%abcof(:,0:,:,iDtype,ispin) = eigVecCoeffs1%abcof(:,0:,:,iDtype,ispin) + eigVecCoeffsPref%abcof(:,0:,:,iDtype,ispin)
     263           0 :             eigVecCoeffs1%ccof(-atoms%llod:,:,:,iDtype,ispin) = eigVecCoeffs1%ccof(-atoms%llod:,:,:,iDtype,ispin) + eigVecCoeffsPref%ccof(-atoms%llod:,:,:,iDtype,ispin)
     264             :          END IF
     265             : 
     266           0 :          IF (l_minusq.AND.juphon%l_phonon) THEN
     267           0 :             eigVecCoeffs1m%abcof(:,0:,:,iDtype,ispin) = eigVecCoeffs1m%abcof(:,0:,:,iDtype,ispin) + eigVecCoeffsPref%abcof(:,0:,:,iDtype,ispin)
     268           0 :             eigVecCoeffs1m%ccof(-atoms%llod:,:,:,iDtype,ispin) = eigVecCoeffs1m%ccof(-atoms%llod:,:,:,iDtype,ispin) + eigVecCoeffsPref%ccof(-atoms%llod:,:,:,iDtype,ispin)
     269             :          END IF
     270             : 
     271           0 :          IF (l_minusq) THEN
     272           0 :             CALL dfpt_rhomt(atoms,we,we1,noccbd,ispin,ispin,-bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     273           0 :             CALL dfpt_rhonmt(atoms,sphhar,we,we1,noccbd,ispin,ispin,-bqpt,.TRUE.,.FALSE.,sym,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     274           0 :             CALL dfpt_rhomtlo(atoms,noccbd,we,we1,ispin,ispin,-bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     275           0 :             CALL dfpt_rhonmtlo(atoms,sphhar,sym,noccbd,we,we1,eigVecCoeffs,eigVecCoeffs1,denCoeffs,ispin,ispin,.TRUE.,-bqpt,eigVecCoeffs1m)
     276             :          ELSE
     277           0 :             CALL dfpt_rhomt(atoms,we,we1,noccbd,ispin,ispin,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     278           0 :             CALL dfpt_rhonmt(atoms,sphhar,we,we1,noccbd,ispin,ispin,bqpt,.TRUE.,.FALSE.,sym,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     279           0 :             CALL dfpt_rhomtlo(atoms,noccbd,we,we1,ispin,ispin,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     280           0 :             CALL dfpt_rhonmtlo(atoms,sphhar,sym,noccbd,we,we1,eigVecCoeffs,eigVecCoeffs1,denCoeffs,ispin,ispin,.TRUE.,bqpt)
     281             :          END IF
     282             :       END DO ! end loop over ispin
     283           0 :       IF (noco%l_mperp) then
     284           0 :          IF (.NOT.l_minusq) THEN
     285           0 :             call timestart("denCoeffsOffdiag%calcCoefficients")
     286           0 :             CALL dfpt_rhomt(atoms,we,we1,noccbd,2,1,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     287           0 :             CALL dfpt_rhonmt(atoms,sphhar,we,we1,noccbd,2,1,bqpt,.TRUE.,.FALSE.,sym,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     288           0 :             CALL dfpt_rhomtlo(atoms,noccbd,we,we1,2,1,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     289           0 :             CALL dfpt_rhonmtlo(atoms,sphhar,sym,noccbd,we,we1,eigVecCoeffs,eigVecCoeffs1,denCoeffs,2,1,.TRUE.,bqpt,eigVecCoeffs1m)
     290           0 :             CALL dfpt_rhomt(atoms,we,we1,noccbd,1,2,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     291           0 :             CALL dfpt_rhonmt(atoms,sphhar,we,we1,noccbd,1,2,bqpt,.TRUE.,.FALSE.,sym,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     292           0 :             CALL dfpt_rhomtlo(atoms,noccbd,we,we1,1,2,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs,eigVecCoeffs1m)
     293           0 :             CALL dfpt_rhonmtlo(atoms,sphhar,sym,noccbd,we,we1,eigVecCoeffs,eigVecCoeffs1,denCoeffs,1,2,.TRUE.,bqpt,eigVecCoeffs1m)
     294           0 :             call timestop("denCoeffsOffdiag%calcCoefficients")
     295             :          ELSE
     296           0 :             call timestart("denCoeffsOffdiag%calcCoefficients")
     297           0 :             CALL dfpt_rhomt(atoms,we,we1,noccbd,2,1,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     298           0 :             CALL dfpt_rhonmt(atoms,sphhar,we,we1,noccbd,2,1,bqpt,.TRUE.,.FALSE.,sym,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     299           0 :             CALL dfpt_rhomtlo(atoms,noccbd,we,we1,2,1,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     300           0 :             CALL dfpt_rhonmtlo(atoms,sphhar,sym,noccbd,we,we1,eigVecCoeffs,eigVecCoeffs1,denCoeffs,2,1,.TRUE.,bqpt)
     301           0 :             CALL dfpt_rhomt(atoms,we,we1,noccbd,1,2,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     302           0 :             CALL dfpt_rhonmt(atoms,sphhar,we,we1,noccbd,1,2,bqpt,.TRUE.,.FALSE.,sym,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     303           0 :             CALL dfpt_rhomtlo(atoms,noccbd,we,we1,1,2,bqpt,.TRUE.,eigVecCoeffs,eigVecCoeffs1,denCoeffs)
     304           0 :             CALL dfpt_rhonmtlo(atoms,sphhar,sym,noccbd,we,we1,eigVecCoeffs,eigVecCoeffs1,denCoeffs,1,2,.TRUE.,bqpt)
     305           0 :             call timestop("denCoeffsOffdiag%calcCoefficients")
     306             :          END IF
     307             :       endif
     308             : 
     309             :       ! valence density in the interstitial and vacuum region has to be called only once (if jspin=1) in the non-collinear case
     310           0 :       IF (.NOT.((jspin.EQ.2).AND.noco%l_noco)) THEN
     311             :          ! valence density in the interstitial region
     312           0 :          IF (.NOT.l_minusq) THEN
     313             :             CALL pwden(stars,kpts,banddosdummy ,input,fmpi,noco,nococonv,cell,atoms,sym,ikpt,&
     314           0 :                        jspin,lapw,noccbd,ev_list,we,eig,den,resultsdummy,f_b8_dummy,zMat,dosdummy,bqpt,lapwq,we1,zMat1,iDir)
     315             :          ELSE
     316             :             CALL pwden(stars,kpts,banddosdummy ,input,fmpi,noco,nococonv,cell,atoms,sym,ikpt,&
     317           0 :                        jspin,lapw,noccbd,ev_list,we,eig,den,resultsdummy,f_b8_dummy,zMat,dosdummy,bqpt,lapwq,we1,zMat1,iDir,lapwmq,zMat1m)
     318             :          END IF
     319           0 :          IF (input%film) THEN
     320             :             CALL vacden(vacuum,stars,input,cell,atoms,noco,nococonv,banddosdummy,&
     321           0 :                         we,ikpt,jspin,REAL(vTot%vac(:,1,:,:)),noccbd,ev_list,lapw,enpara%evac,den,zMat,vacdosdummy,dosdummy,lapwq,we1,zMat1)
     322             :          END IF
     323             :       END IF
     324             :    END DO ! end of k-point loop
     325             : 
     326             : #ifdef CPP_MPI
     327           0 :    DO ispin = jsp_start,jsp_end
     328             :       CALL mpi_col_den(fmpi,sphhar,atoms,stars,vacuum,input,noco,ispin,dosdummy,vacdosdummy,&
     329           0 :                        resultsdummy,denCoeffs,orbdummy,denCoeffsOffdiag,den)
     330             :    END DO
     331             : #endif
     332             : 
     333           0 :    IF (fmpi%irank==0) THEN
     334           0 :       CALL timestart("cdnmt")
     335             :       CALL cdnmt(input%jspins,input,atoms,sym,sphhar,noco,jsp_start,jsp_end,enpara,banddosdummy,&
     336           0 :                  vTot%mt(:,0,:,:),denCoeffs,usdus,orbdummy,denCoeffsOffdiag,den%mt,hub1inp,rhoIm=denIm%mt)
     337           0 :       CALL timestop("cdnmt")
     338             :    END IF
     339             : 
     340           0 :    CALL timestop("dfpt_cdnval")
     341             : 
     342           0 : END SUBROUTINE dfpt_cdnval
     343             : 
     344             : END MODULE m_dfpt_cdnval

Generated by: LCOV version 1.14