ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/calc_gb.F90
(Generate patch)

Comparing trunk/OOPSE/libmdtools/calc_gb.F90 (file contents):
Revision 898 by chuckv, Mon Jan 5 22:49:14 2004 UTC vs.
Revision 1192 by gezelter, Mon May 24 21:03:30 2004 UTC

# Line 47 | Line 47 | contains
47    end subroutine set_gb_pair_params
48  
49  
50 <  subroutine do_gb_pair(atom1, atom2, d, r, r2, u_l, pot, f, t, &
51 <       do_pot, do_stress)
50 >  subroutine do_gb_pair(atom1, atom2, d, r, r2, sw, vpair, fpair, &
51 >       pot, u_l, f, t, do_pot)
52      
53      integer, intent(in) :: atom1, atom2
54      integer :: id1, id2
55      real (kind=dp), intent(inout) :: r, r2
56      real (kind=dp), dimension(3), intent(in) :: d
57 <    real (kind=dp) :: pot
57 >    real (kind=dp), dimension(3), intent(inout) :: fpair
58 >    real (kind=dp) :: pot, sw, vpair
59      real (kind=dp), dimension(3,nLocal) :: u_l
60      real (kind=dp), dimension(3,nLocal) :: f
61      real (kind=dp), dimension(3,nLocal) :: t
62 <    logical, intent(in) :: do_pot, do_stress
62 >    logical, intent(in) :: do_pot
63      real (kind = dp), dimension(3) :: ul1
64      real (kind = dp), dimension(3) :: ul2
65  
# Line 307 | Line 308 | contains
308      mess1 = gmu*R137
309      mess2 = R126*gb_mu*gmum
310      
311 <    dUdx = 4.0d0*gb_eps*enu*(mess1*dBigRdx + mess2*dgpdx)
312 <    dUdy = 4.0d0*gb_eps*enu*(mess1*dBigRdy + mess2*dgpdy)
313 <    dUdz = 4.0d0*gb_eps*enu*(mess1*dBigRdz + mess2*dgpdz)
311 >    dUdx = 4.0d0*gb_eps*enu*(mess1*dBigRdx + mess2*dgpdx)*sw
312 >    dUdy = 4.0d0*gb_eps*enu*(mess1*dBigRdy + mess2*dgpdy)*sw
313 >    dUdz = 4.0d0*gb_eps*enu*(mess1*dBigRdz + mess2*dgpdz)*sw
314      
315 <    dUdu1x = 4.0d0*(R126*depsdu1x + eps*R137*dBigRdu1x)
316 <    dUdu1y = 4.0d0*(R126*depsdu1y + eps*R137*dBigRdu1y)
317 <    dUdu1z = 4.0d0*(R126*depsdu1z + eps*R137*dBigRdu1z)
318 <    dUdu2x = 4.0d0*(R126*depsdu2x + eps*R137*dBigRdu2x)
319 <    dUdu2y = 4.0d0*(R126*depsdu2y + eps*R137*dBigRdu2y)
320 <    dUdu2z = 4.0d0*(R126*depsdu2z + eps*R137*dBigRdu2z)
315 >    dUdu1x = 4.0d0*(R126*depsdu1x + eps*R137*dBigRdu1x)*sw
316 >    dUdu1y = 4.0d0*(R126*depsdu1y + eps*R137*dBigRdu1y)*sw
317 >    dUdu1z = 4.0d0*(R126*depsdu1z + eps*R137*dBigRdu1z)*sw
318 >    dUdu2x = 4.0d0*(R126*depsdu2x + eps*R137*dBigRdu2x)*sw
319 >    dUdu2y = 4.0d0*(R126*depsdu2y + eps*R137*dBigRdu2y)*sw
320 >    dUdu2z = 4.0d0*(R126*depsdu2z + eps*R137*dBigRdu2z)*sw
321        
322   #ifdef IS_MPI
323      f_Row(1,atom1) = f_Row(1,atom1) + dUdx
# Line 351 | Line 352 | contains
352      t(2,atom2) = t(2,atom2) - ul2(3)*dUdu2x + ul2(1)*dUdu2z
353      t(3,atom2) = t(3,atom2) - ul2(1)*dUdu2y + ul2(2)*dUdu2x
354   #endif
355 <    
355 <    if (do_stress) then          
356 <
357 < #ifdef IS_MPI
358 <          id1 = tagRow(atom1)
359 <          id2 = tagColumn(atom2)
360 < #else
361 <          id1 = atom1
362 <          id2 = atom2
363 < #endif                
364 <
365 <       if (molMembershipList(id1) .ne. molMembershipList(id2)) then
366 <
367 <          ! because the d vector is the rj - ri vector, and
368 <          ! because dUdx, dUdy, dUdz are the force on atom i, we need a
369 <          ! negative sign here:
370 <          
371 <          tau_Temp(1) = tau_Temp(1) - d(1) * dUdx
372 <          tau_Temp(2) = tau_Temp(2) - d(1) * dUdy
373 <          tau_Temp(3) = tau_Temp(3) - d(1) * dUdz
374 <          tau_Temp(4) = tau_Temp(4) - d(2) * dUdx
375 <          tau_Temp(5) = tau_Temp(5) - d(2) * dUdy
376 <          tau_Temp(6) = tau_Temp(6) - d(2) * dUdz
377 <          tau_Temp(7) = tau_Temp(7) - d(3) * dUdx
378 <          tau_Temp(8) = tau_Temp(8) - d(3) * dUdy
379 <          tau_Temp(9) = tau_Temp(9) - d(3) * dUdz
380 <          
381 <          virial_Temp = virial_Temp + (tau_Temp(1) + tau_Temp(5) + tau_Temp(9))
382 <       endif
383 <    endif
384 <        
355 >            
356      if (do_pot) then
357   #ifdef IS_MPI
358 <       pot_row(atom1) = pot_row(atom1) + 2.0d0*eps*R126
359 <       pot_col(atom2) = pot_col(atom2) + 2.0d0*eps*R126
358 >       pot_row(atom1) = pot_row(atom1) + 2.0d0*eps*R126*sw
359 >       pot_col(atom2) = pot_col(atom2) + 2.0d0*eps*R126*sw
360   #else
361 <       pot = pot + 4.0*eps*R126
361 >       pot = pot + 4.0*eps*R126*sw
362   #endif
363      endif
364 +
365 +    vpair = vpair + 4.0*eps*R126
366 +    fpair(1) = fpair(1) + dUdx
367 +    fpair(2) = fpair(2) + dUdy
368 +    fpair(3) = fpair(3) + dUdz
369      
370      return
371    end subroutine do_gb_pair

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines