50 |
|
!! @author Matthew Meineke |
51 |
|
!! @author Christopher Fennell |
52 |
|
!! @author J. Daniel Gezelter |
53 |
< |
!! @version $Id: sticky.F90,v 1.12 2005-05-18 19:06:22 chrisfen Exp $, $Date: 2005-05-18 19:06:22 $, $Name: not supported by cvs2svn $, $Revision: 1.12 $ |
53 |
> |
!! @version $Id: sticky.F90,v 1.13 2005-05-29 21:16:25 chrisfen Exp $, $Date: 2005-05-29 21:16:25 $, $Name: not supported by cvs2svn $, $Revision: 1.13 $ |
54 |
|
|
55 |
|
module sticky |
56 |
|
|
512 |
|
if(allocated(StickyMap)) deallocate(StickyMap) |
513 |
|
end subroutine destroyStickyTypes |
514 |
|
|
515 |
< |
subroutine do_sticky_power_pair(atom1, atom2, d, rij, r2, sw, vpair, fpair, & |
516 |
< |
pot, A, f, t, do_pot, ebalance) |
515 |
> |
subroutine do_sticky_power_pair(atom1, atom2, d, rij, r2, sw, vpair, fpair, & |
516 |
> |
pot, A, f, t, do_pot) |
517 |
|
!! We assume that the rotation matrices have already been calculated |
518 |
|
!! and placed in the A array. |
519 |
< |
|
519 |
> |
|
520 |
|
!! i and j are pointers to the two SSD atoms |
521 |
< |
|
521 |
> |
|
522 |
|
integer, intent(in) :: atom1, atom2 |
523 |
|
real (kind=dp), intent(inout) :: rij, r2 |
524 |
|
real (kind=dp), dimension(3), intent(in) :: d |
527 |
|
real (kind=dp), dimension(9,nLocal) :: A |
528 |
|
real (kind=dp), dimension(3,nLocal) :: f |
529 |
|
real (kind=dp), dimension(3,nLocal) :: t |
530 |
– |
real (kind=dp), intent(in) :: ebalance |
530 |
|
logical, intent(in) :: do_pot |
531 |
|
|
532 |
|
real (kind=dp) :: xi, yi, zi, xj, yj, zj, xi2, yi2, zi2, xj2, yj2, zj2 |
533 |
|
real (kind=dp) :: xihat, yihat, zihat, xjhat, yjhat, zjhat |
534 |
|
real (kind=dp) :: rI, rI2, rI3, rI4, rI5, rI6, rI7, s, sp, dsdr, dspdr |
535 |
< |
real (kind=dp) :: wi, wj, w, wi2, wj2 |
535 |
> |
real (kind=dp) :: wi, wj, w, wi2, wj2, eScale, v0scale |
536 |
|
real (kind=dp) :: dwidx, dwidy, dwidz, dwjdx, dwjdy, dwjdz |
537 |
|
real (kind=dp) :: dwidux, dwiduy, dwiduz, dwjdux, dwjduy, dwjduz |
538 |
|
real (kind=dp) :: drdx, drdy, drdz |
650 |
|
|
651 |
|
call calc_sw_fnc(rij, rl, ru, rlp, rup, s, sp, dsdr, dspdr) |
652 |
|
|
653 |
< |
frac1 = 1.5d0 |
654 |
< |
frac2 = 0.5d0 |
653 |
> |
frac1 = 0.25d0 |
654 |
> |
frac2 = 0.75d0 |
655 |
|
|
656 |
|
wi = 2.0d0*(xi2-yi2)*zi*rI3 |
657 |
|
wj = 2.0d0*(xj2-yj2)*zj*rI3 |
659 |
|
wi2 = wi*wi |
660 |
|
wj2 = wj*wj |
661 |
|
|
662 |
< |
w = frac1*wi*wi2 + frac2*wi + frac1*wj*wj2 + frac2*wj |
662 |
> |
w = frac1*wi*wi2 + frac2*wi + frac1*wj*wj2 + frac2*wj + v0p |
663 |
|
|
664 |
< |
vpair = vpair + 0.5d0*(v0*s*w) + ebalance |
664 |
> |
vpair = vpair + 0.5d0*(v0*s*w) |
665 |
|
|
666 |
|
if (do_pot) then |
667 |
|
#ifdef IS_MPI |
668 |
|
pot_row(atom1) = pot_row(atom1) + 0.25d0*(v0*s*w)*sw |
669 |
|
pot_col(atom2) = pot_col(atom2) + 0.25d0*(v0*s*w)*sw |
670 |
|
#else |
671 |
< |
pot = pot + 0.5d0*(v0*s*w)*sw + ebalance |
671 |
> |
pot = pot + 0.5d0*(v0*s*w)*sw |
672 |
|
#endif |
673 |
|
endif |
674 |
|
|
804 |
|
|
805 |
|
! now assemble these with the radial-only terms: |
806 |
|
|
807 |
< |
fxradial = 0.5d0*(v0*dsdr*w*drdx + fxii + fxji + ebalance*xihat) |
808 |
< |
fyradial = 0.5d0*(v0*dsdr*w*drdy + fyii + fyji + ebalance*yihat) |
809 |
< |
fzradial = 0.5d0*(v0*dsdr*w*drdz + fzii + fzji + ebalance*zihat) |
807 |
> |
fxradial = 0.5d0*(v0*dsdr*w*drdx + fxii + fxji) |
808 |
> |
fyradial = 0.5d0*(v0*dsdr*w*drdy + fyii + fyji) |
809 |
> |
fzradial = 0.5d0*(v0*dsdr*w*drdz + fzii + fzji) |
810 |
|
|
811 |
|
#ifdef IS_MPI |
812 |
|
f_Row(1,atom1) = f_Row(1,atom1) + fxradial |