mirror of
https://github.com/pfloos/quack
synced 2024-10-15 20:42:01 +02:00
51 lines
996 B
Fortran
51 lines
996 B
Fortran
|
subroutine drift(nWalk,r,r12,g,dg,F)
|
||
|
|
||
|
! Compute quantum force
|
||
|
|
||
|
implicit none
|
||
|
include 'parameters.h'
|
||
|
|
||
|
! Input variables
|
||
|
|
||
|
integer,intent(in) :: nWalk
|
||
|
double precision,intent(in) :: r(nWalk,2,3),r12(nWalk),g(nWalk,2),dg(nWalk,2,3)
|
||
|
|
||
|
! Local variables
|
||
|
|
||
|
logical :: smoothDrift
|
||
|
double precision :: rij,rijSq,w,wSq,damp
|
||
|
integer :: iW
|
||
|
|
||
|
! Output variables
|
||
|
|
||
|
double precision,intent(out) :: F(nWalk,2,3)
|
||
|
|
||
|
! Compute
|
||
|
|
||
|
smoothDrift = .false.
|
||
|
w = 0.1d0
|
||
|
wSq = w*w
|
||
|
|
||
|
do iW=1,nWalk
|
||
|
|
||
|
rij = r12(iW)
|
||
|
rijSq = rij*rij
|
||
|
|
||
|
F(iW,1,1:3) = dg(iW,1,1:3)/g(iW,1)
|
||
|
F(iW,2,1:3) = dg(iW,2,1:3)/g(iW,2)
|
||
|
|
||
|
if(smoothDrift) then
|
||
|
damp = 1d0 + 2d0*w/sqrt(pi)*rij*exp(-wSq*rijSq)/erfc(w*rij)
|
||
|
else
|
||
|
damp = 1d0
|
||
|
endif
|
||
|
|
||
|
F(iW,1,1:3) = F(iW,1,1:3) - damp*(r(iW,2,1:3) - r(iW,1,1:3))/rijSq
|
||
|
F(iW,2,1:3) = F(iW,2,1:3) - damp*(r(iW,2,1:3) - r(iW,1,1:3))/rijSq
|
||
|
|
||
|
enddo
|
||
|
|
||
|
! print*,' F',F
|
||
|
|
||
|
end subroutine drift
|