force.f90 Source File


Source Code

  !-------------------------------------------------------------------------------
  !> Summary: Calculates force on nucleus with core contribution (Coulomb contribution)
  !> Author: 
  !>
  !> Calculates the force on nucleus m
  !> from a given non spherical charge density at the nucleus site r
  !> with core correction (coulomb contribution)
  !-------------------------------------------------------------------------------
      MODULE MOD_FORCE
      CONTAINS
  !-------------------------------------------------------------------------------
  !> Summary: Calculates force on nucleus with core contribution (Coulomb contribution)
  !> Author: 
  !> Category: KKRimp, physical-observables
  !> Deprecated: False
  !>
  !> Calculates the force on nucleus m
  !> from a given non spherical charge density at the nucleus site r
  !> with core correction (coulomb contribution)
  !-------------------------------------------------------------------------------
      SUBROUTINE FORCE(FLM,FLMC,LMAX,NSPIN,NATOM,VPOT,DENSITY,CELL, &
                       IRMD,LMPOTD,INS)
      USE MOD_SIMP3
      USE TYPE_DENSITY
      USE TYPE_CELL
      IMPLICIT NONE
!C     .. Parameters ..
!       include 'inc.p'
!       INTEGER LMPOTD
!       PARAMETER (LMPOTD= (LPOTD+1)**2)
!C     ..
!C     .. Scalar Arguments ..
      INTEGER :: IRMD,LMPOTD,INS
      INTEGER LMAX,NATOM,NSPIN
      TYPE(CELL_TYPE) :: CELL(NATOM)
      TYPE(DENSITY_TYPE) :: DENSITY(NATOM)
!C     ..
!C     .. Array Arguments ..
!       DOUBLE PRECISION DRDI(IRMD,*),FLM(-1:1,*),FLMC(-1:1,*),R(IRMD,*),
!      +       RHOC(IRMD,*),VPOT(IRMD,LMPOTD,*)
      DOUBLE PRECISION FLM(-1:1,NATOM),FLMC(-1:1,NATOM)
      DOUBLE PRECISION VPOT(IRMD,LMPOTD,NSPIN,NATOM)
!       INTEGER IRWS(*)
!C     ..
!C     .. Local Scalars ..
      DOUBLE PRECISION DV,FAC,RWS,VINT1
      INTEGER I,IATOM,IRWS1,ISPIN,LM,M
!C     ..
!C     .. Local Arrays ..
      DOUBLE PRECISION FLMH(-1:1,NATOM),V1(IRMD)
!C     ..
!C     .. External Subroutines ..
!       EXTERNAL SIMP3
!C     ..
!C     .. Save statement ..
!       SAVE PI
!C     ..
!c
!C     .. Intrinsic Functions ..
      INTRINSIC ATAN,DSQRT
!C     ..
!       PI = 4.D0*ATAN(1.D0)
      FAC = DSQRT((4.0D0*PI)/3.0D0)
      IF (LMAX.LT.1) THEN
         WRITE (6,FMT=9000)
         STOP
 
      END IF
!c
!c---> loop over rep. atoms
!c
      DO IATOM = 1,NATOM
!c
!c
         IF (INS==1) THEN
           IRWS1 = CELL(IATOM)%NRCORE !IRWS(IATOM)
         ELSE
           IRWS1 = CELL(IATOM)%NRMAX !IRWS(IATOM)
         END IF

!          IRWS1 = CELL(IATOM)%NRMAX !IRWS(IATOM)
         RWS =   CELL(IATOM)%RMESH(IRWS1)
!c
!c
 
         DO M = -1,1
            LM = 2 + M + 1
!c
!c---> initialize v1
!c
            DO  I = 1,IRWS1
               V1(I) = 0.0D0
            END DO
!c
            DO  ISPIN = 1,NSPIN
!c
!c---> determine the right potential numbers
!c
!                IPOT = NSPIN* (IATOM-1) + ISPIN
!c
!c---> determine the derivative of the potential using a 5-point formular
!c
               DV = (-3.0D0*VPOT(1,LM,ISPIN,IATOM)-10.0D0*VPOT(2,LM,ISPIN,IATOM)+ &
                  18.0D0*VPOT(3,LM,ISPIN,IATOM)-6.0D0*VPOT(4,LM,ISPIN,IATOM)+VPOT(5,LM,ISPIN,IATOM))/ &
                    (12.0D0*CELL(IATOM)%DRMESHDI(2))
!c
               V1(2) = DENSITY(IATOM)%RHOC(2,ISPIN)* (2.0D0*VPOT(2,LM,ISPIN,IATOM)/CELL(IATOM)%RMESH(2)+DV)/&
                       (4.0D0*PI) + V1(2)
!c
               DO  I = 3,IRWS1 - 2
!c
                  DV = (VPOT(I-2,LM,ISPIN,IATOM)-VPOT(I+2,LM,ISPIN,IATOM)+ &
                       8.0D0* (VPOT(I+1,LM,ISPIN,IATOM)-VPOT(I-1,LM,ISPIN,IATOM)))/ &
                       (12.0D0*CELL(IATOM)%DRMESHDI(I))
!c
                  V1(I) = DENSITY(IATOM)%RHOC(I,ISPIN)* (2.0D0*VPOT(I,LM,ISPIN,IATOM)/CELL(IATOM)%RMESH(I)+ &
                          DV)/ (4.0D0*PI) + V1(I)
               END DO !I
!c
               DV = (-VPOT(IRWS1-4,LM,ISPIN,IATOM)+6.0D0*VPOT(IRWS1-3,LM,ISPIN,IATOM)- &
                    18.0D0*VPOT(IRWS1-2,LM,ISPIN,IATOM)+10.0D0*VPOT(IRWS1-1,LM,ISPIN,IATOM)+ &
                   3.0D0*VPOT(IRWS1,LM,ISPIN,IATOM))/ (12.0D0*CELL(IATOM)%DRMESHDI(IRWS1-1))
               V1(IRWS1-1) = DENSITY(IATOM)%RHOC(IRWS1-1,ISPIN)* &
                             (2.0D0*VPOT(IRWS1-1,LM,ISPIN,IATOM)/CELL(IATOM)%RMESH(IRWS1-1)+ &
                             DV)/ (4.0D0*PI) + V1(IRWS1-1)
!c
               DV = (3.0D0*VPOT(IRWS1-4,LM,ISPIN,IATOM)-16.0D0*VPOT(IRWS1-3,LM,ISPIN,IATOM)+ &
                    36.0D0*VPOT(IRWS1-2,LM,ISPIN,IATOM)-48.0D0*VPOT(IRWS1-1,LM,ISPIN,IATOM)+ &
                    25.0D0*VPOT(IRWS1,LM,ISPIN,IATOM))/ (12.0D0*CELL(IATOM)%DRMESHDI(IRWS1))
!c
               V1(IRWS1) = DENSITY(IATOM)%RHOC(IRWS1,ISPIN)* &
                           (2.0D0*VPOT(IRWS1,LM,ISPIN,IATOM)/CELL(IATOM)%RMESH(IRWS1)+DV)/ &
                           (4.0D0*PI) + V1(IRWS1)
            END DO !ISPIN
!c
!c---> integrate with simpson subroutine
!c
            CALL SIMP3(V1,VINT1,1,IRWS1,CELL(IATOM)%DRMESHDI(1))
!c
            FLMH(M,IATOM) = FAC*FLM(M,IATOM)
            FLMC(M,IATOM) = -FAC*VINT1
            FLM(M,IATOM) = FLMH(M,IATOM) + FLMC(M,IATOM)
!c
 
         END DO !M
!c
!c
      END DO !NATOM
!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_FORCE