1 |
gezelter |
953 |
subroutine do_electrostatic_new() |
2 |
|
|
|
3 |
|
|
ci = ElectrostaticMap(me1)%charge |
4 |
|
|
|
5 |
|
|
mui = ElectrostaticMap(me1)%dipole_moment |
6 |
|
|
Thetai = ElectrostaticMap(me1)%quadrupole_moments |
7 |
|
|
eFramei = eFrame(atom1) |
8 |
|
|
uz_i = eFramei(:,3) |
9 |
|
|
|
10 |
|
|
|
11 |
|
|
di = mui * uz_i |
12 |
|
|
qi = Thetai(:)*eFramei |
13 |
|
|
|
14 |
|
|
|
15 |
|
|
f = electric / dielec |
16 |
|
|
xji = x(jj) - x(ii) |
17 |
|
|
yji = y(jj) - y(ii) |
18 |
|
|
zji = z(jj) - z(ii) |
19 |
|
|
r2 = xji*xji + yji*yji + zji*zji |
20 |
|
|
r = sqrt(r2) |
21 |
|
|
rr1 = 1.0d0 / r |
22 |
|
|
rr3 = rr1 / r2 |
23 |
|
|
rr5 = 3.0d0 * rr3 / r2 |
24 |
|
|
rr7 = 5.0d0 * rr5 / r2 |
25 |
|
|
rr9 = 7.0d0 * rr7 / r2 |
26 |
|
|
rr11 = 9.0d0 * rr9 / r2 |
27 |
|
|
|
28 |
|
|
! construct auxiliary vectors |
29 |
|
|
|
30 |
|
|
qir(1) = qi(1)*xji + qi(4)*yji + qi(7)*zji |
31 |
|
|
qir(2) = qi(2)*xji + qi(5)*yji + qi(8)*zji |
32 |
|
|
qir(3) = qi(3)*xji + qi(6)*yji + qi(9)*zji |
33 |
|
|
qjr(1) = qj(1)*xji + qj(4)*yji + qj(7)*zji |
34 |
|
|
qjr(2) = qj(2)*xji + qj(5)*yji + qj(8)*zji |
35 |
|
|
qjr(3) = qj(3)*xji + qj(6)*yji + qj(9)*zji |
36 |
|
|
|
37 |
|
|
! get intermediate variables for energy terms |
38 |
|
|
|
39 |
|
|
sc(2) = di(1)*dj(1) + di(2)*dj(2) + di(3)*dj(3) |
40 |
|
|
sc(3) = di(1)*xji + di(2)*yji + di(3)*zji |
41 |
|
|
sc(4) = dj(1)*xji + dj(2)*yji + dj(3)*zji |
42 |
|
|
sc(5) = qir(1)*xji + qir(2)*yji + qir(3)*zji |
43 |
|
|
sc(6) = qjr(1)*xji + qjr(2)*yji + qjr(3)*zji |
44 |
|
|
sc(7) = qir(1)*dj(1) + qir(2)*dj(2) + qir(3)*dj(3) |
45 |
|
|
sc(8) = qjr(1)*di(1) + qjr(2)*di(2) + qjr(3)*di(3) |
46 |
|
|
sc(9) = qir(1)*qjr(1) + qir(2)*qjr(2) + qir(3)*qjr(3) |
47 |
|
|
sc(10) = qi(1)*qj(1) + qi(2)*qj(2) + qi(3)*qj(3) & |
48 |
|
|
+ qi(4)*qj(4) + qi(5)*qj(5) + qi(6)*qj(6) & |
49 |
|
|
+ qi(7)*qj(7) + qi(8)*qj(8) + qi(9)*qj(9) |
50 |
|
|
|
51 |
|
|
! calculate the gl functions for potential energy |
52 |
|
|
|
53 |
|
|
gl(0) = ci*cj |
54 |
|
|
gl(1) = cj*sc(3) - ci*sc(4) |
55 |
|
|
gl(2) = ci*sc(6) + cj*sc(5) - sc(3)*sc(4) |
56 |
|
|
gl(3) = sc(3)*sc(6) - sc(4)*sc(5) |
57 |
|
|
gl(4) = sc(5)*sc(6) |
58 |
|
|
gl(6) = sc(2) |
59 |
|
|
gl(7) = 2.0d0 * (sc(7)-sc(8)) |
60 |
|
|
gl(8) = 2.0d0 * sc(10) |
61 |
|
|
gl(5) = -4.0d0 * sc(9) |
62 |
|
|
|
63 |
|
|
! get the permanent multipole energy |
64 |
|
|
|
65 |
|
|
e = rr1*gl(0) + rr3*(gl(1)+gl(6)) & |
66 |
|
|
+ rr5*(gl(2)+gl(7)+gl(8)) & |
67 |
|
|
+ rr7*(gl(3)+gl(5)) + rr9*gl(4) |
68 |
|
|
|
69 |
|
|
! intermediate variables for the multipole terms |
70 |
|
|
|
71 |
|
|
gf(1) = rr3*gl(0) + rr5*(gl(1)+gl(6)) & |
72 |
|
|
+ rr7*(gl(2)+gl(7)+gl(8)) & |
73 |
|
|
+ rr9*(gl(3)+gl(5)) + rr11*gl(4) |
74 |
|
|
gf(2) = -cj*rr3 + sc(4)*rr5 - sc(6)*rr7 |
75 |
|
|
gf(3) = ci*rr3 + sc(3)*rr5 + sc(5)*rr7 |
76 |
|
|
gf(4) = 2.0d0 * rr5 |
77 |
|
|
gf(5) = 2.0d0 * (-cj*rr5+sc(4)*rr7-sc(6)*rr9) |
78 |
|
|
gf(6) = 2.0d0 * (-ci*rr5-sc(3)*rr7-sc(5)*rr9) |
79 |
|
|
gf(7) = 4.0d0 * rr7 |
80 |
|
|
|
81 |
|
|
! get the force |
82 |
|
|
|
83 |
|
|
ftm2(1) = gf(1)*xji + gf(2)*di(1) + gf(3)*dj(1) & |
84 |
|
|
+ gf(4)*(qjdi(1)-qidj(1)) + gf(5)*qir(1) & |
85 |
|
|
+ gf(6)*qjr(1) + gf(7)*(qiqjr(1)+qjqir(1)) |
86 |
|
|
ftm2(2) = gf(1)*yji + gf(2)*di(2) + gf(3)*dj(2) & |
87 |
|
|
+ gf(4)*(qjdi(2)-qidj(2)) + gf(5)*qir(2) & |
88 |
|
|
+ gf(6)*qjr(2) + gf(7)*(qiqjr(2)+qjqir(2)) |
89 |
|
|
ftm2(3) = gf(1)*zji + gf(2)*di(3) + gf(3)*dj(3) & |
90 |
|
|
+ gf(4)*(qjdi(3)-qidj(3)) + gf(5)*qir(3) & |
91 |
|
|
+ gf(6)*qjr(3) + gf(7)*(qiqjr(3)+qjqir(3)) |
92 |
|
|
|
93 |
|
|
! now perform the torque calculation |
94 |
|
|
|
95 |
|
|
! get the interaction torques |
96 |
|
|
|
97 |
|
|
ttm2(1) = -rr3*dixdj(1) + gf(2)*dixr(1)-gf(5)*rxqir(1) & |
98 |
|
|
+ gf(4)*(dixqjr(1)+djxqir(1)+rxqidj(1)-2.0d0*qixqj(1))& |
99 |
|
|
- gf(7)*(rxqijr(1)+qjrxqir(1)) |
100 |
|
|
ttm2(2) = -rr3*dixdj(2) + gf(2)*dixr(2)-gf(5)*rxqir(2) & |
101 |
|
|
+ gf(4)*(dixqjr(2)+djxqir(2)+rxqidj(2)-2.0d0*qixqj(2))& |
102 |
|
|
- gf(7)*(rxqijr(2)+qjrxqir(2)) |
103 |
|
|
ttm2(3) = -rr3*dixdj(3) + gf(2)*dixr(3)-gf(5)*rxqir(3) & |
104 |
|
|
+ gf(4)*(dixqjr(3)+djxqir(3)+rxqidj(3)-2.0d0*qixqj(3))& |
105 |
|
|
- gf(7)*(rxqijr(3)+qjrxqir(3)) |
106 |
|
|
ttm3(1) = rr3*dixdj(1) + gf(3)*djxr(1) -gf(6)*rxqjr(1) & |
107 |
|
|
- gf(4)*(dixqjr(1)+djxqir(1)+rxqjdi(1)-2.0d0*qixqj(1))& |
108 |
|
|
- gf(7)*(rxqjir(1)-qjrxqir(1)) |
109 |
|
|
ttm3(2) = rr3*dixdj(2) + gf(3)*djxr(2) -gf(6)*rxqjr(2) & |
110 |
|
|
- gf(4)*(dixqjr(2)+djxqir(2)+rxqjdi(2)-2.0d0*qixqj(2))& |
111 |
|
|
- gf(7)*(rxqjir(2)-qjrxqir(2)) |
112 |
|
|
ttm3(3) = rr3*dixdj(3) + gf(3)*djxr(3) -gf(6)*rxqjr(3) & |
113 |
|
|
- gf(4)*(dixqjr(3)+djxqir(3)+rxqjdi(3)-2.0d0*qixqj(3))& |
114 |
|
|
- gf(7)*(rxqjir(3)-qjrxqir(3)) |
115 |
|
|
|
116 |
|
|
! update force and torque on site j |
117 |
|
|
|
118 |
|
|
ftm1(1,j) = ftm1(1,j) + ftm2(1) |
119 |
|
|
ftm1(2,j) = ftm1(2,j) + ftm2(2) |
120 |
|
|
ftm1(3,j) = ftm1(3,j) + ftm2(3) |
121 |
|
|
ttm1(1,j) = ttm1(1,j) + ttm3(1) |
122 |
|
|
ttm1(2,j) = ttm1(2,j) + ttm3(2) |
123 |
|
|
ttm1(3,j) = ttm1(3,j) + ttm3(3) |
124 |
|
|
|
125 |
|
|
! update force and torque on site i |
126 |
|
|
|
127 |
|
|
ftm1(1,i) = ftm1(1,i) - ftm2(1) |
128 |
|
|
ftm1(2,i) = ftm1(2,i) - ftm2(2) |
129 |
|
|
ftm1(3,i) = ftm1(3,i) - ftm2(3) |
130 |
|
|
ttm1(1,i) = ttm1(1,i) + ttm2(1) |
131 |
|
|
ttm1(2,i) = ttm1(2,i) + ttm2(2) |
132 |
|
|
ttm1(3,i) = ttm1(3,i) + ttm2(3) |