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 312 by gezelter, Tue Mar 11 17:46:18 2003 UTC vs.
Revision 329 by gezelter, Wed Mar 12 22:27:59 2003 UTC

# Line 2 | Line 2 | module dipole_dipole
2    
3    use simulation
4    use definitions
5 <  use forceGlobals
6 <  use atype_typedefs
5 >  use atype_module
6 >  use vector_class
7   #ifdef IS_MPI
8    use mpiSimulation
9   #endif
# Line 11 | Line 11 | module dipole_dipole
11    
12    contains
13    
14 <  subroutine do_dipole_pair(atom1, atom2, atype1, atype2, dx, dy, dz, rij, &
15 <       pot, u_l, f, t)
14 >  subroutine do_dipole_pair(atom1, atom2, d, rij, pot, u_l, f, t, &
15 >       do_pot, do_stress)
16      
17 <    integer atom1, atom2
18 <    double precision dx, dy, dz, rij
17 >    logical :: do_pot, do_stress
18 >
19 >    integer atom1, atom2, me1, me2
20 >    double precision rij, mu1, mu2
21      double precision dfact1, dfact2, dip2, r2, r3, r5, pre
22      double precision dudx, dudy, dudz, dudu1x, dudu1y, dudu1z
23      double precision dudu2x, dudu2y, dudu2z, rdotu1, rdotu2, u1dotu2
24      double precision taper, dtdr, vterm
25  
26      real( kind = dp ) :: pot, rt, rrf
27 +    real( kind = dp ), dimension(3) :: d
28      real( kind = dp ), dimension(3,getNlocal()) :: u_l
29      real( kind = dp ), dimension(3,getNlocal()) :: f
30      real( kind = dp ), dimension(3,getNlocal()) :: t
31      
32      real (kind = dp), dimension(3) :: ul1
33      real (kind = dp), dimension(3) :: ul2
34 <    type (atype), pointer :: atype1
32 <    type (atype), pointer :: atype2
34 >
35      
36   #ifdef IS_MPI
37 +    me1 = atid_Row(atom1)
38      ul1(1) = u_l_Row(1,atom1)
39      ul1(2) = u_l_Row(2,atom1)
40      ul1(3) = u_l_Row(3,atom1)
41  
42 +    me2 = atid_Col(atom2)
43      ul2(1) = u_l_Col(1,atom2)
44      ul2(2) = u_l_Col(2,atom2)
45      ul2(3) = u_l_Col(3,atom2)
46   #else
47 +    me1 = atid(atom1)
48      ul1(1) = u_l(1,atom1)
49      ul1(2) = u_l(2,atom1)
50      ul1(3) = u_l(3,atom1)
51  
52 <    ul1(1) = u_l(1,atom2)
53 <    ul1(2) = u_l(2,atom2)
54 <    ul1(3) = u_l(3,atom2)
52 >    me2 = atid(atom2)
53 >    ul2(1) = u_l(1,atom2)
54 >    ul2(2) = u_l(2,atom2)
55 >    ul2(3) = u_l(3,atom2)
56   #endif
57  
58 +    call getElementProperty(atypes, me1, "dipole_moment", mu1)
59 +    call getElementProperty(atypes, me2, "dipole_moment", mu2)
60 +
61      rrf = getRrf()
62      rt = getRt()
63  
# Line 69 | Line 78 | module dipole_dipole
78         r3 = r2*rij
79         r5 = r3*r2
80        
81 <       rdotu1 = dx*ul1(1) + dy*ul1(2) + dz*ul1(3)
82 <       rdotu2 = dx*ul2(1) + dy*ul2(2) + dz*ul2(3)
81 >       rdotu1 = d(1)*ul1(1) + d(2)*ul1(2) + d(3)*ul1(3)
82 >       rdotu2 = d(1)*ul2(1) + d(2)*ul2(2) + d(3)*ul2(3)
83         u1dotu2 = ul1(1)*ul2(1) + ul1(2)*ul2(2) + ul1(3)*ul2(3)
84        
85 <       dip2 = pre * atype1%dipole_moment * atype2%dipole_moment
85 >       dip2 = pre * mu1 * mu2
86        
87         dfact1 = 3.0d0*dip2 / r2
88         dfact2 = 3.0d0*dip2 / r5
89        
90         vterm = dip2*((u1dotu2/r3) - 3.0d0*(rdotu1*rdotu2/r5))
91        
92 +       if (do_pot) then
93   #ifdef IS_MPI
94 <       pot_row(atom1) = pot_row(atom1) + 0.5d0*vterm*taper
95 <       pot_col(atom2) = pot_col(atom2) + 0.5d0*vterm*taper
94 >          pot_row(atom1) = pot_row(atom1) + 0.5d0*vterm*taper
95 >          pot_col(atom2) = pot_col(atom2) + 0.5d0*vterm*taper
96   #else
97 <       pot = pot + vterm*taper
97 >          pot = pot + vterm*taper
98   #endif
99 +       endif
100        
101 <       dudx = (-dfact1 * dx * ((u1dotu2/r3) - &
101 >       dudx = (-dfact1 * d(1) * ((u1dotu2/r3) - &
102              (5.0d0*(rdotu1*rdotu2)/r5)) -  &
103              dfact2*(ul1(1)*rdotu2 + ul2(1)*rdotu1))*taper + &
104 <            vterm*dtdr*dx/rij
104 >            vterm*dtdr*d(1)/rij
105        
106 <       dudy = (-dfact1 * dy * ((u1dotu2/r3) - &
106 >       dudy = (-dfact1 * d(2) * ((u1dotu2/r3) - &
107              (5.0d0*(rdotu1*rdotu2)/r5)) -  &
108              dfact2*(ul1(2)*rdotu2 + ul2(2)*rdotu1))*taper + &
109 <            vterm*dtdr*dy/rij
109 >            vterm*dtdr*d(2)/rij
110        
111 <       dudz = (-dfact1 * dz * ((u1dotu2/r3) - &
111 >       dudz = (-dfact1 * d(3) * ((u1dotu2/r3) - &
112              (5.0d0*(rdotu1*rdotu2)/r5)) -  &
113              dfact2*(ul1(3)*rdotu2 + ul2(3)*rdotu1))*taper +  &
114 <            vterm*dtdr*dz/rij
114 >            vterm*dtdr*d(3)/rij
115        
116 <       dudu1x = (dip2*((ul2(1)/r3) - (3.0d0*dx*rdotu2/r5)))*taper
117 <       dudu1y = (dip2*((ul2(2)/r3) - (3.0d0*dy*rdotu2/r5)))*taper
118 <       dudu1z = (dip2*((ul2(3)/r3) - (3.0d0*dz*rdotu2/r5)))*taper
116 >       dudu1x = (dip2*((ul2(1)/r3) - (3.0d0*d(1)*rdotu2/r5)))*taper
117 >       dudu1y = (dip2*((ul2(2)/r3) - (3.0d0*d(2)*rdotu2/r5)))*taper
118 >       dudu1z = (dip2*((ul2(3)/r3) - (3.0d0*d(3)*rdotu2/r5)))*taper
119        
120 <       dudu2x = (dip2*((ul1(1)/r3) - (3.0d0*dx*rdotu1/r5)))*taper
121 <       dudu2y = (dip2*((ul1(2)/r3) - (3.0d0*dy*rdotu1/r5)))*taper
122 <       dudu2z = (dip2*((ul1(3)/r3) - (3.0d0*dz*rdotu1/r5)))*taper
120 >       dudu2x = (dip2*((ul1(1)/r3) - (3.0d0*d(1)*rdotu1/r5)))*taper
121 >       dudu2y = (dip2*((ul1(2)/r3) - (3.0d0*d(2)*rdotu1/r5)))*taper
122 >       dudu2z = (dip2*((ul1(3)/r3) - (3.0d0*d(3)*rdotu1/r5)))*taper
123        
124        
125   #ifdef IS_MPI
# Line 145 | Line 156 | module dipole_dipole
156         t(3,atom2) = t(3,atom2) - ul2(1)*dudu2y + ul2(2)*dudu2x
157   #endif
158        
159 <       if (doStress()) then          
160 <          tau_Temp(1) = tau_Temp(1) + dudx * dx
161 <          tau_Temp(2) = tau_Temp(2) + dudx * dy
162 <          tau_Temp(3) = tau_Temp(3) + dudx * dz
163 <          tau_Temp(4) = tau_Temp(4) + dudy * dx
164 <          tau_Temp(5) = tau_Temp(5) + dudy * dy
165 <          tau_Temp(6) = tau_Temp(6) + dudy * dz
166 <          tau_Temp(7) = tau_Temp(7) + dudz * dx
167 <          tau_Temp(8) = tau_Temp(8) + dudz * dy
168 <          tau_Temp(9) = tau_Temp(9) + dudz * dz
159 >       if (do_stress) then          
160 >          tau_Temp(1) = tau_Temp(1) + dudx * d(1)
161 >          tau_Temp(2) = tau_Temp(2) + dudx * d(2)
162 >          tau_Temp(3) = tau_Temp(3) + dudx * d(3)
163 >          tau_Temp(4) = tau_Temp(4) + dudy * d(1)
164 >          tau_Temp(5) = tau_Temp(5) + dudy * d(2)
165 >          tau_Temp(6) = tau_Temp(6) + dudy * d(3)
166 >          tau_Temp(7) = tau_Temp(7) + dudz * d(1)
167 >          tau_Temp(8) = tau_Temp(8) + dudz * d(2)
168 >          tau_Temp(9) = tau_Temp(9) + dudz * d(3)
169            virial_Temp = virial_Temp + (tau_Temp(1) + tau_Temp(5) + tau_Temp(9))
170         endif
171        

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines