vxcdrv.f90 Source File


Source Code

!------------------------------------------------------------------------------------
!> Summary: Driver for the exchange-correlation potential and energy calculation
!> Author: 
!> Driver for the exchange-correlation potential and energy calculation. It wraps
!> all the different exchange-correlation potentials and make sure to call the 
!> appropriate subroutines depending on the type of exchange correlation potential
!> indicated in the `inputcard`
!------------------------------------------------------------------------------------
      MODULE mod_vxcdrv_kkrimp
      CONTAINS
!   call vxcdrv(energyparts%exc,config%kte,config%kxc,nspin,natom,density, & 
!               vpot_out, cell,config%kshape,gauntshape, shapefun,lmaxd, & 
!               (2*lmaxd), (2*lmaxd+1)**2, (4*lmaxd+1)**2, cell(1)%nrmaxd, lmaxatom)
  !-------------------------------------------------------------------------------
  !> Summary: Driver for the exchange-correlation potential and energy calculation
  !> Author:
  !> Category: xc-potential, KKRimp
  !> Deprecated: False 
  !> Driver for the exchange-correlation potential and energy calculation. It wraps
  !> all the different exchange-correlation potentials and make sure to call the 
  !> appropriate subroutines depending on the type of exchange correlation potential
  !> indicated in the `inputcard`
  !-------------------------------------------------------------------------------
      SUBROUTINE VXCDRV(EXC,KTE,NSPIN,NATOM,DENSITY,VONS, &
                        CELL,KSHAPE,gauntshape,&
                        SHAPEFUN,LMAXD,LPOTD,LMPOTD,LMXSPD,nrmaxd,lmaxatom,ins)
      USE TYPE_CELL
      USE TYPE_DENSITY
      USE TYPE_SHAPEFUN
      USE TYPE_GAUNTSHAPE
      USE MOD_EXCHANGECORRELATION
      use mod_vxcspo, only: vxcspo
      use mod_vxclm, only: vxclm
      use mod_vxcgga, only: vxcgga
      use global_variables, only: ipand, irmd, ngshd, irid, nfund
      IMPLICIT NONE

!       INCLUDE 'inc.p'
!interface
       DOUBLE PRECISION       :: EXC(0:LPOTD,NATOM)
       INTEGER                :: KTE
!        INTEGER                :: KXC
       INTEGER                :: LPOT
       INTEGER                :: NSPIN
       INTEGER                :: NATOM
       type(density_type)     :: density(natom)
       DOUBLE PRECISION       :: VONS(nrmaxd,LMPOTD,NSPIN,NATOM)
       TYPE(CELL_TYPE)        ::  CELL(NATOM)
       INTEGER                :: kshape
       TYPE(GAUNTSHAPE_TYPE)  :: GAUNTSHAPE(LMAXD)
       type(shapefun_type)    :: shapefun(natom)
       INTEGER                ::  LMAXD
       INTEGER                :: LPOTD
       INTEGER                :: LMPOTD
       INTEGER                :: LMXSPD
       INTEGER                :: nrmaxd
       INTEGER                :: lmaxatom(natom)
       INTEGER                :: INS
!local
       INTEGER                :: LMAX
       INTEGER                :: LMPOT
       INTEGER, parameter     :: IJD=434 !LMXSPD

      DOUBLE PRECISION        :: DYLMF1(IJD,LMPOTD),DYLMF2(IJD,LMPOTD), &
                                 DYLMT1(IJD,LMPOTD),DYLMT2(IJD,LMPOTD), &
                                 DYLMTF(IJD,LMPOTD),RHO2IAT(nrmaxd,LMPOTD,2), &
                                 RIJ(IJD,3), RIJ_NOGGA(IJD,3),&
                                 THET(IJD),& 
                                 WTYR(IJD,LMPOTD),WTYR_NOGGA(IJD,LMPOTD), &
                                 YLM(IJD,LMPOTD),&
                                 YR(IJD,LMPOTD),YR_NOGGA(IJD,LMPOTD)
      INTEGER                 :: IFUNMIAT(LMXSPD),LMSPIAT(LMXSPD)
      INTEGER                 :: IATOM,ISPIN,LMX1,LM

!       IF (KXC.LT.3) THEN
        CALL SPHERE_NOGGA(LPOTD,YR_NOGGA,WTYR_NOGGA,RIJ_NOGGA,IJD)
!         write(144,*) LPOTD,YR_NOGGA,WTYR_NOGGA,RIJ_NOGGA,IJD
!       ELSE
!         write(154,*)LPOTD,YR,WTYR,RIJ,IJD,LMPOTD,THET,YLM,DYLMT1, &
!                         DYLMT2,DYLMF1,DYLMF2,DYLMTF
        CALL SPHERE_GGA(LPOTD,YR,WTYR,RIJ,IJD,LMPOTD,THET,YLM,DYLMT1, &
                        DYLMT2,DYLMF1,DYLMF2,DYLMTF)
!         write(155,*) LPOTD,YR,WTYR,RIJ,IJD,LMPOTD,THET,YLM,DYLMT1, &
!                         DYLMT2,DYLMF1,DYLMF2,DYLMTF
!       END IF
!         write(145,*) LPOTD,YR_NOGGA,WTYR_NOGGA,RIJ_NOGGA,IJD

      DO IATOM = 1,NATOM
        LMAX =  LMAXATOM(IATOM)
        LPOT =2*LMAXATOM(IATOM)
        LMPOT=(LPOT+1)**2

        IFUNMIAT=0
        LMSPIAT=0

        if (ins/=0) then
          DO LMX1 = 1,(4*LMAXATOM(IATOM)+1)**2
            IFUNMIAT(LMX1) = SHAPEFUN(IATOM)%LM2INDEX(LMX1)
            LMSPIAT(LMX1) =  SHAPEFUN(IATOM)%LMUSED(LMX1)
          END DO
        END IF

        RHO2IAT=0.0D0
        DO ISPIN=1, NSPIN
          DO LM=1,(2*LMAXATOM(IATOM)+1)**2
            RHO2IAT(:CELL(IATOM)%NRMAX,LM,ISPIN)=DENSITY(IATOM)%RHO2NS(:,LM,ISPIN)
          END DO !LM
        END DO !ISPIN
! *************  old **********************************
!         CALL DCOPY(nrmaxd*LMPOTD,DENSITY(IATOM)%RHO2NS(1,1,1),1,RHO2IAT(1,1,1),1)
!         IF (NSPIN.EQ.2) THEN
!           CALL DCOPY(nrmaxd*LMPOTD,DENSITY(IATOM)%RHO2NS(1,1,IATOM,2),1,RHO2IAT(1,1,2),1)
!         END IF

!           write(244,*) EXC,KTE,KXC,LPOT,NSPIN,IATOM
!           write(245,*) RHO2IAT
!                      VONS(:,:,:,IATOM),CELL(IATOM)%RMESH,CELL(IATOM)%DRMESHDI,&
!                      CELL(IATOM)%NRMAX,CELL(IATOM)%NRCUT,CELL(IATOM)%NPAN,&
!                      KSHAPE,GAUNTSHAPE(LMAX)%GSH,GAUNTSHAPE(LMAX)%ILM,GAUNTSHAPE(LMAX)%IMAXSH,IFUNMIAT,SHAPEFUN(IATOM)%THETAS,&
!                      YR_NOGGA,WTYR_NOGGA,IJD,LMSPIAT,&
!                      LMPOTD,2*LMAXD,LMXSPD,nrmaxd,SHAPEFUN(IATOM)%NLMSHAPED,SHAPEFUN(IATOM)%NRSHAPED,GAUNTSHAPE(LMAX)%NGSHD,&
!                      CELL(IATOM)%NPAND



        ! these values will be used in vxclm from global_variables module, so we set them here for each atom
        irmd = nrmaxd
        nfund = SHAPEFUN(IATOM)%NLMSHAPED
        irid = SHAPEFUN(IATOM)%NRSHAPED
        ngshd = GAUNTSHAPE(LMAX)%NGSHD
        ipand = CELL(IATOM)%NPAND

        IF (CELL(IATOM)%KXC.LT.3) THEN
          

          CALL VXCLM(EXC,KTE,CELL(IATOM)%KXC,LPOT,NSPIN,IATOM,RHO2IAT, &
                     VONS(:,:,:,IATOM),CELL(IATOM)%RMESH,CELL(IATOM)%DRMESHDI,&
                     CELL(IATOM)%NRMAX,CELL(IATOM)%NRCUT,CELL(IATOM)%NPAN,&
                     KSHAPE,GAUNTSHAPE(LMAX)%GSH,GAUNTSHAPE(LMAX)%ILM,GAUNTSHAPE(LMAX)%IMAXSH,IFUNMIAT,SHAPEFUN(IATOM)%THETAS,&
                     YR_NOGGA,WTYR_NOGGA,IJD,LMSPIAT)!,&
!                    lmpotd, lpotd, lmxspd, irmd , nfund                   , irid                   , ngshd, 
                     !LMPOTD,2*LMAXD,LMXSPD,nrmaxd,SHAPEFUN(IATOM)%NLMSHAPED,SHAPEFUN(IATOM)%NRSHAPED,GAUNTSHAPE(LMAX)%NGSHD,&
!                    ipand
                     !CELL(IATOM)%NPAND) 


!      +                 LMPOTD,LPOTD,LMXSPD,IRMD,NFUND,IRID,NGSHD,IPAND)
        ELSE
! c
! c GGA EX-COR POTENTIAL
! c
          CALL VXCGGA(EXC,KTE,CELL(IATOM)%KXC,LPOT,NSPIN,IATOM,RHO2IAT, &
                      VONS(:,:,:,IATOM),CELL(IATOM)%RMESH,CELL(IATOM)%DRMESHDI,CELL(IATOM)%LOGPARAMS(1), &
                      CELL(IATOM)%NRMAX,CELL(IATOM)%NRCUT,CELL(IATOM)%NPAN, &
                      KSHAPE,GAUNTSHAPE(LMAX)%GSH,GAUNTSHAPE(LMAX)%ILM,GAUNTSHAPE(LMAX)%IMAXSH,IFUNMIAT,SHAPEFUN(IATOM)%THETAS, &
                      !YR,WTYR,IJD,LMSPIAT,THET,YLM,DYLMT1,DYLMT2, &
                      WTYR,IJD,LMSPIAT,THET,YLM,DYLMT1,DYLMT2, &
                      DYLMF1,DYLMF2,DYLMTF)!, &
                      !LMPOTD,2*LMAXD,LMXSPD,nrmaxd,SHAPEFUN(IATOM)%NLMSHAPED,SHAPEFUN(IATOM)%NRSHAPED,GAUNTSHAPE(LMAX)%NGSHD,&
                      !CELL(IATOM)%NPAND) 
!      +                 LMPOTD,LPOTD,LMXSPD,IRMD,NFUND,IRID,NGSHD,IPAND)
        END IF
      END DO



      END SUBROUTINE VXCDRV
      END MODULE mod_vxcdrv_kkrimp