next up previous contents
Next: Complementary Error Function Up: Appendix A: Code Previous: Self Interaction Term   Contents


Real Space Term

c **********************************************************************
c     selfTerm.F
c **********************************************************************
      subroutine  CalcReal
c **********************************************************************
      use global_parameters
      use scalars
      use serial_arrays
      use pmeVar

      implicit none
      integer i, j, k
      real dX, dY, dZ, dsq, d
      real derfc

      pi = two*asin(one)
      rtPi = sqrt(pi)
      rcutsq = rcut*rcut
      realTerm = zero

c     calculate real sum using only terms within rcut
      do i = 1, numa(0)
         do j = 0, numa(0)
            if (i .ne. j) then
c     nested ifs are used to reduce the array iterations that must be computed
c     if the difference in x, y, or z coordinate alone is greater than rcut

c     minimum image is handled peacewise as each term is evaluated to be less 
c     than rcut

               dX = atom(1, i) - atom(1, j)
               dX = dX - anint(dX)            
               if (abs(dX) < rcut) then
                  dY = atom(2, i) - atom(2, j)
                  dY = dY - anint(dY)
                  if (abs(dY) < rcut) then
                     dZ = atom(3, i) - atom(3, j)
                     dZ = dZ - anint(dZ)
                     if (abs(dZ) < rcut) then
                        dsq = dX*dX + dY*dY + dZ*dZ
                        if (dsq < rcutsq) then
                           d = sqrt(dsq)
                           if (d .ne. 0) then
                              realTerm = realTerm + derfc(alpha*d)/d

                           end if
                        endif
                     endif
                  endif
               endif
            end if
         end do
      end do

      return

      end


Subsections

Thomas G Dimiduk 2004-04-15