ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE_old/src/mdtools/libmdCode/calc_dipole_dipole.F90
(Generate patch)

Comparing trunk/OOPSE_old/src/mdtools/libmdCode/calc_dipole_dipole.F90 (file contents):
Revision 307 by chuckv, Mon Mar 10 19:37:48 2003 UTC vs.
Revision 317 by gezelter, Tue Mar 11 23:13:06 2003 UTC

# Line 4 | Line 4 | module dipole_dipole
4    use definitions
5    use forceGlobals
6    use atype_typedefs
7 +  use vector_class
8 + #ifdef IS_MPI
9 +  use mpiSimulation
10 + #endif
11 +  implicit none
12    
13    contains
14    
15 <  subroutine dipole_dipole(atom1, atom2, atype1, atype2, dx, dy, dz, rij, &
11 <       ul1, ul2, rt, rrf, pot)
15 >  subroutine do_dipole_pair(atom1, atom2, d, rij, pot, u_l, f, t)
16      
17 <    
18 <    integer atom1, atom2
15 <    double precision dx, dy, dz, rij
17 >    integer atom1, atom2, me1, me2
18 >    double precision rij, mu1, mu2
19      double precision dfact1, dfact2, dip2, r2, r3, r5, pre
20      double precision dudx, dudy, dudz, dudu1x, dudu1y, dudu1z
21      double precision dudu2x, dudu2y, dudu2z, rdotu1, rdotu2, u1dotu2
22      double precision taper, dtdr, vterm
23 +
24 +    real( kind = dp ) :: pot, rt, rrf
25 +    real( kind = dp ), dimension(3) :: d
26 +    real( kind = dp ), dimension(3,getNlocal()) :: u_l
27 +    real( kind = dp ), dimension(3,getNlocal()) :: f
28 +    real( kind = dp ), dimension(3,getNlocal()) :: t
29      
30      real (kind = dp), dimension(3) :: ul1
31      real (kind = dp), dimension(3) :: ul2
32 <    type (atype), pointer :: atype1
24 <    type (atype), pointer :: atype2
32 >
33      
34 + #ifdef IS_MPI
35 +    me1 = atid_Row(atom1)
36 +    ul1(1) = u_l_Row(1,atom1)
37 +    ul1(2) = u_l_Row(2,atom1)
38 +    ul1(3) = u_l_Row(3,atom1)
39 +
40 +    me2 = atid_Col(atom2)
41 +    ul2(1) = u_l_Col(1,atom2)
42 +    ul2(2) = u_l_Col(2,atom2)
43 +    ul2(3) = u_l_Col(3,atom2)
44 + #else
45 +    me1 = atid(atom1)
46 +    ul1(1) = u_l(1,atom1)
47 +    ul1(2) = u_l(2,atom1)
48 +    ul1(3) = u_l(3,atom1)
49 +
50 +    me2 = atid(atom2)
51 +    ul2(1) = u_l(1,atom2)
52 +    ul2(2) = u_l(2,atom2)
53 +    ul2(3) = u_l(3,atom2)
54 + #endif
55 +
56 +    call getElementProperty(atypes, me1, "dipole_moment", mu1)
57 +    call getElementProperty(atypes, me2, "dipole_moment", mu2)
58 +
59 +    rrf = getRrf()
60 +    rt = getRt()
61 +
62      ! pre converts from mu in units of debye to kcal/mol
63      pre = 14.38362d0
64      
# Line 40 | Line 76 | module dipole_dipole
76         r3 = r2*rij
77         r5 = r3*r2
78        
79 <       rdotu1 = dx*ul1(1) + dy*ul1(2) + dz*ul1(3)
80 <       rdotu2 = dx*ul2(1) + dy*ul2(2) + dz*ul2(3)
79 >       rdotu1 = d(1)*ul1(1) + d(2)*ul1(2) + d(3)*ul1(3)
80 >       rdotu2 = d(1)*ul2(1) + d(2)*ul2(2) + d(3)*ul2(3)
81         u1dotu2 = ul1(1)*ul2(1) + ul1(2)*ul2(2) + ul1(3)*ul2(3)
82        
83 <       dip2 = pre * atype1%dipole_moment * atype2%dipole_moment
83 >       dip2 = pre * mu1 * mu2
84        
85         dfact1 = 3.0d0*dip2 / r2
86         dfact2 = 3.0d0*dip2 / r5
87        
88         vterm = dip2*((u1dotu2/r3) - 3.0d0*(rdotu1*rdotu2/r5))
89        
90 + #ifdef IS_MPI
91 +       pot_row(atom1) = pot_row(atom1) + 0.5d0*vterm*taper
92 +       pot_col(atom2) = pot_col(atom2) + 0.5d0*vterm*taper
93 + #else
94         pot = pot + vterm*taper
95 + #endif
96        
97 <       dudx = (-dfact1 * dx * ((u1dotu2/r3) - &
97 >       dudx = (-dfact1 * d(1) * ((u1dotu2/r3) - &
98              (5.0d0*(rdotu1*rdotu2)/r5)) -  &
99              dfact2*(ul1(1)*rdotu2 + ul2(1)*rdotu1))*taper + &
100 <            vterm*dtdr*dx/rij
100 >            vterm*dtdr*d(1)/rij
101        
102 <       dudy = (-dfact1 * dy * ((u1dotu2/r3) - &
102 >       dudy = (-dfact1 * d(2) * ((u1dotu2/r3) - &
103              (5.0d0*(rdotu1*rdotu2)/r5)) -  &
104              dfact2*(ul1(2)*rdotu2 + ul2(2)*rdotu1))*taper + &
105 <            vterm*dtdr*dy/rij
105 >            vterm*dtdr*d(2)/rij
106        
107 <       dudz = (-dfact1 * dz * ((u1dotu2/r3) - &
107 >       dudz = (-dfact1 * d(3) * ((u1dotu2/r3) - &
108              (5.0d0*(rdotu1*rdotu2)/r5)) -  &
109              dfact2*(ul1(3)*rdotu2 + ul2(3)*rdotu1))*taper +  &
110 <            vterm*dtdr*dz/rij
110 >            vterm*dtdr*d(3)/rij
111        
112 <       dudu1x = (dip2*((ul2(1)/r3) - (3.0d0*dx*rdotu2/r5)))*taper
113 <       dudu1y = (dip2*((ul2(2)/r3) - (3.0d0*dy*rdotu2/r5)))*taper
114 <       dudu1z = (dip2*((ul2(3)/r3) - (3.0d0*dz*rdotu2/r5)))*taper
112 >       dudu1x = (dip2*((ul2(1)/r3) - (3.0d0*d(1)*rdotu2/r5)))*taper
113 >       dudu1y = (dip2*((ul2(2)/r3) - (3.0d0*d(2)*rdotu2/r5)))*taper
114 >       dudu1z = (dip2*((ul2(3)/r3) - (3.0d0*d(3)*rdotu2/r5)))*taper
115        
116 <       dudu2x = (dip2*((ul1(1)/r3) - (3.0d0*dx*rdotu1/r5)))*taper
117 <       dudu2y = (dip2*((ul1(2)/r3) - (3.0d0*dy*rdotu1/r5)))*taper
118 <       dudu2z = (dip2*((ul1(3)/r3) - (3.0d0*dz*rdotu1/r5)))*taper
116 >       dudu2x = (dip2*((ul1(1)/r3) - (3.0d0*d(1)*rdotu1/r5)))*taper
117 >       dudu2y = (dip2*((ul1(2)/r3) - (3.0d0*d(2)*rdotu1/r5)))*taper
118 >       dudu2z = (dip2*((ul1(3)/r3) - (3.0d0*d(3)*rdotu1/r5)))*taper
119        
120        
121   #ifdef IS_MPI
122 <       fRow(1,atom1) = fRow(1,atom1) + dudx
123 <       fRow(2,atom1) = fRow(2,atom1) + dudy
124 <       fRow(3,atom1) = fRow(3,atom1) + dudz
122 >       f_Row(1,atom1) = f_Row(1,atom1) + dudx
123 >       f_Row(2,atom1) = f_Row(2,atom1) + dudy
124 >       f_Row(3,atom1) = f_Row(3,atom1) + dudz
125  
126 <       fCol(1,atom2) = fCol(1,atom2) - dudx
127 <       fCol(2,atom2) = fCol(2,atom2) - dudy
128 <       fCol(3,atom2) = fCol(3,atom2) - dudz
126 >       f_Col(1,atom2) = f_Col(1,atom2) - dudx
127 >       f_Col(2,atom2) = f_Col(2,atom2) - dudy
128 >       f_Col(3,atom2) = f_Col(3,atom2) - dudz
129        
130 <       tRow(1,atom1) = tRow(1,atom1) - ul1(2)*dudu1z + ul1(3)*dudu1y
131 <       tRow(2,atom1) = tRow(2,atom1) - ul1(3)*dudu1x + ul1(1)*dudu1z
132 <       tRow(3,atom1) = tRow(3,atom1) - ul1(1)*dudu1y + ul1(2)*dudu1x
130 >       t_Row(1,atom1) = t_Row(1,atom1) - ul1(2)*dudu1z + ul1(3)*dudu1y
131 >       t_Row(2,atom1) = t_Row(2,atom1) - ul1(3)*dudu1x + ul1(1)*dudu1z
132 >       t_Row(3,atom1) = t_Row(3,atom1) - ul1(1)*dudu1y + ul1(2)*dudu1x
133        
134 <       tCol(1,atom2) = tCol(1,atom2) - ul2(2)*dudu2z + ul2(3)*dudu2y
135 <       tCol(2,atom2) = tCol(2,atom2) - ul2(3)*dudu2x + ul2(1)*dudu2z
136 <       tCol(3,atom2) = tCol(3,atom2) - ul2(1)*dudu2y + ul2(2)*dudu2x
134 >       t_Col(1,atom2) = t_Col(1,atom2) - ul2(2)*dudu2z + ul2(3)*dudu2y
135 >       t_Col(2,atom2) = t_Col(2,atom2) - ul2(3)*dudu2x + ul2(1)*dudu2z
136 >       t_Col(3,atom2) = t_Col(3,atom2) - ul2(1)*dudu2y + ul2(2)*dudu2x
137   #else
138 <       fTemp(1,atom1) = fTemp(1,atom1) + dudx
139 <       fTemp(2,atom1) = fTemp(2,atom1) + dudy
140 <       fTemp(3,atom1) = fTemp(3,atom1) + dudz
138 >       f(1,atom1) = f(1,atom1) + dudx
139 >       f(2,atom1) = f(2,atom1) + dudy
140 >       f(3,atom1) = f(3,atom1) + dudz
141        
142 <       fTemp(1,atom2) = fTemp(1,atom2) - dudx
143 <       fTemp(2,atom2) = fTemp(2,atom2) - dudy
144 <       fTemp(3,atom2) = fTemp(3,atom2) - dudz
142 >       f(1,atom2) = f(1,atom2) - dudx
143 >       f(2,atom2) = f(2,atom2) - dudy
144 >       f(3,atom2) = f(3,atom2) - dudz
145        
146 <       tTemp(1,atom1) = tTemp(1,atom1) - ul1(2)*dudu1z + ul1(3)*dudu1y
147 <       tTemp(2,atom1) = tTemp(2,atom1) - ul1(3)*dudu1x + ul1(1)*dudu1z
148 <       tTemp(3,atom1) = tTemp(3,atom1) - ul1(1)*dudu1y + ul1(2)*dudu1x
146 >       t(1,atom1) = t(1,atom1) - ul1(2)*dudu1z + ul1(3)*dudu1y
147 >       t(2,atom1) = t(2,atom1) - ul1(3)*dudu1x + ul1(1)*dudu1z
148 >       t(3,atom1) = t(3,atom1) - ul1(1)*dudu1y + ul1(2)*dudu1x
149        
150 <       tTemp(1,atom2) = tTemp(1,atom2) - ul2(2)*dudu2z + ul2(3)*dudu2y
151 <       tTemp(2,atom2) = tTemp(2,atom2) - ul2(3)*dudu2x + ul2(1)*dudu2z
152 <       tTemp(3,atom2) = tTemp(3,atom2) - ul2(1)*dudu2y + ul2(2)*dudu2x
150 >       t(1,atom2) = t(1,atom2) - ul2(2)*dudu2z + ul2(3)*dudu2y
151 >       t(2,atom2) = t(2,atom2) - ul2(3)*dudu2x + ul2(1)*dudu2z
152 >       t(3,atom2) = t(3,atom2) - ul2(1)*dudu2y + ul2(2)*dudu2x
153   #endif
154        
155 <       if (do_stress) then
156 <          tauTemp(1) = tauTemp(1) + dudx * dx
157 <          tauTemp(2) = tauTemp(2) + dudx * dy
158 <          tauTemp(3) = tauTemp(3) + dudx * dz
159 <          tauTemp(4) = tauTemp(4) + dudy * dx
160 <          tauTemp(5) = tauTemp(5) + dudy * dy
161 <          tauTemp(6) = tauTemp(6) + dudy * dz
162 <          tauTemp(7) = tauTemp(7) + dudz * dx
163 <          tauTemp(8) = tauTemp(8) + dudz * dy
164 <          tauTemp(9) = tauTemp(9) + dudz * dz
165 <          virialTemp = virialTemp + ( tauTemp(1) + tauTemp(5) + tauTemp(9) )
155 >       if (doStress()) then          
156 >          tau_Temp(1) = tau_Temp(1) + dudx * d(1)
157 >          tau_Temp(2) = tau_Temp(2) + dudx * d(2)
158 >          tau_Temp(3) = tau_Temp(3) + dudx * d(3)
159 >          tau_Temp(4) = tau_Temp(4) + dudy * d(1)
160 >          tau_Temp(5) = tau_Temp(5) + dudy * d(2)
161 >          tau_Temp(6) = tau_Temp(6) + dudy * d(3)
162 >          tau_Temp(7) = tau_Temp(7) + dudz * d(1)
163 >          tau_Temp(8) = tau_Temp(8) + dudz * d(2)
164 >          tau_Temp(9) = tau_Temp(9) + dudz * d(3)
165 >          virial_Temp = virial_Temp + (tau_Temp(1) + tau_Temp(5) + tau_Temp(9))
166         endif
167        
168      endif
169      
170      return
171 <  end subroutine dipole_dipole
172 <
171 >  end subroutine do_dipole_pair
172 >  
173   end module dipole_dipole

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines