forceh.f Source File


Source Code

      !-------------------------------------------------------------------------------
      !> Summary: Calculates fore on nucleaus with Hellmann-Feynmann theorem
      !> Author: 
      !>
      !> Calculates the force on nucleus m with Hellmann - Feynman theorem
      !> from a given non spherical charge density at the nucleus site r
      !-------------------------------------------------------------------------------
      MODULE MOD_FORCEH
      CONTAINS
      !-------------------------------------------------------------------------------
      !> Summary: Calculates fore on nucleaus with Hellmann-Feynmann theorem
      !> Author: 
      !> Category: KKRimp, physical-observables
      !> Deprecated: False 
      !>
      !> Calculates the force on nucleus m with Hellmann - Feynman theorem
      !> from a given non spherical charge density at the nucleus site r
      !-------------------------------------------------------------------------------
      SUBROUTINE FORCEH(CMOM,FLMH,LMAX,LMPOTD,NSPIN,NATOM,
     +                  CELL,DENSITY,VPOT,
     +                  IRMD, ZATOM,INS) !,NCORE,IRWS,Z)
      USE TYPE_DENSITY
      USE TYPE_CELL
      USE MOD_SIMP3

        IMPLICIT NONE
C     .. Parameters ..
!       include 'inc.p'
!       INTEGER LMPOTD
!       PARAMETER (LMPOTD= (LPOTD+1)**2)
C     ..
C     .. Scalar Arguments ..
      INTEGER LMPOTD,NATOM,IRMD,INS
      INTEGER LMAX,NSPIN
      TYPE(DENSITY_TYPE) :: DENSITY(NATOM)
      TYPE(CELL_TYPE)    :: CELL(NATOM)
C     ..
C     .. Array Arguments ..
      DOUBLE PRECISION CMOM(LMPOTD,NATOM),FLMH(-1:1,NATOM),
     +       VPOT(IRMD,LMPOTD,NSPIN,NATOM),ZATOM(NATOM)
!       INTEGER IRWS(NATOM)
C     ..
C     .. Local Scalars ..
      DOUBLE PRECISION RWS,VINT1
      INTEGER I,IATOM,IRWS1,LM,M
C     ..
C     .. Local Arrays ..
      DOUBLE PRECISION FLM(-1:1,2),V1(IRMD)
C     ..
C     .. External Subroutines ..
!       EXTERNAL SIMP3
C     ..
C     .. Save statement ..
!       SAVE PI
C     ..
c
C     .. Intrinsic Functions ..
      INTRINSIC ATAN
C     ..
!       PI = 4.D0*ATAN(1.D0)
      IF (LMAX.LT.1) THEN
         WRITE (6,FMT=9000)
         STOP
 
      END IF
c
c---> loop over the rep. atoms
c
      DO 10 IATOM = 1,NATOM
c
c---> reading the right Wigner-S. radius
c
         IF (INS==1) THEN
           IRWS1 = CELL(IATOM)%NRCORE !IRWS(IATOM)
         ELSE
           IRWS1 = CELL(IATOM)%NRMAX !IRWS(IATOM)
         END IF
!          IRWS1 = CELL(NATOM)%NRMAX !IRWS(IATOM)
         RWS = CELL(NATOM)%RMESH(IRWS1)
c
c---> determine the right potential numbers
c
!          IPOT = NSPIN* (IATOM-1) + 1
 
         DO 20 M = -1,1
            LM = 2 + M + 1
c
            V1(1) = 0.0D0
            DO 30 I = 2,IRWS1
               V1(I) = DENSITY(IATOM)%RHO2NS(I,LM,1)* 
     +         (CELL(IATOM)%RMESH(I)** (-2.0D0))
   30       CONTINUE
c
c---> integrate with simpson subroutine
c
            CALL SIMP3(V1,VINT1,1,IRWS1,CELL(IATOM)%DRMESHDI)
c
            FLM(M,1) = 2.0D0*VINT1
c
c---> use coulomb potential to determine extra atomic contribution
c
            FLM(M,2) = VPOT(IRWS1,LM,1,IATOM)* (3.0D0/ 
     +                 (4.0D0*PI*RWS)) -
     +                 2.0D0*CMOM(LM,IATOM)/ (RWS**3)
c
c---> total Hellman-Feynman force
c
            FLMH(M,IATOM) = (FLM(M,1)+FLM(M,2))*ZATOM(IATOM)
   20    CONTINUE
   10 CONTINUE
c
c
 9000 FORMAT (13x,'error stop in subroutine force :',
     +       ' the charge density has to contain non spherical',
     +       ' contributions up to l=1 at least ')
 
      END SUBROUTINE
      END MODULE MOD_FORCEH