|
6 | 6 | #include "ff/hippo/cflux.h" |
7 | 7 | #include "ff/hippo/expol.h" |
8 | 8 | #include "ff/hippo/induce.h" |
9 | | -#include "ff/nblist.h" |
10 | 9 | #include "ff/potent.h" |
11 | 10 | #include "math/zero.h" |
12 | 11 | #include "tool/externfunc.h" |
@@ -46,9 +45,8 @@ void epolarChgpenData(RcOp op) |
46 | 45 | darray::deallocate(work01_, work02_, work03_, work04_, work05_); |
47 | 46 |
|
48 | 47 | if (polpred == UPred::ASPC) { |
49 | | - darray::deallocate(udalt_00, udalt_01, udalt_02, udalt_03, udalt_04, udalt_05, udalt_06, |
50 | | - udalt_07, udalt_08, udalt_09, udalt_10, udalt_11, udalt_12, udalt_13, udalt_14, |
51 | | - udalt_15); |
| 48 | + darray::deallocate(udalt_00, udalt_01, udalt_02, udalt_03, udalt_04, udalt_05, udalt_06, udalt_07, udalt_08, |
| 49 | + udalt_09, udalt_10, udalt_11, udalt_12, udalt_13, udalt_14, udalt_15); |
52 | 50 | } else if (polpred == UPred::GEAR) { |
53 | 51 | darray::deallocate(udalt_00, udalt_01, udalt_02, udalt_03, udalt_04, udalt_05); |
54 | 52 | } else if (polpred == UPred::LSQR) { |
@@ -99,26 +97,22 @@ void epolarChgpenData(RcOp op) |
99 | 97 |
|
100 | 98 | if (polpred == UPred::ASPC) { |
101 | 99 | maxualt = 16; |
102 | | - darray::allocate(n, &udalt_00, &udalt_01, &udalt_02, &udalt_03, &udalt_04, &udalt_05, |
103 | | - &udalt_06, &udalt_07, &udalt_08, &udalt_09, &udalt_10, &udalt_11, &udalt_12, &udalt_13, |
104 | | - &udalt_14, &udalt_15); |
105 | | - darray::zero(g::q0, n, udalt_00, udalt_01, udalt_02, udalt_03, udalt_04, udalt_05, |
106 | | - udalt_06, udalt_07, udalt_08, udalt_09, udalt_10, udalt_11, udalt_12, udalt_13, |
107 | | - udalt_14, udalt_15); |
| 100 | + darray::allocate(n, &udalt_00, &udalt_01, &udalt_02, &udalt_03, &udalt_04, &udalt_05, &udalt_06, &udalt_07, |
| 101 | + &udalt_08, &udalt_09, &udalt_10, &udalt_11, &udalt_12, &udalt_13, &udalt_14, &udalt_15); |
| 102 | + darray::zero(g::q0, n, udalt_00, udalt_01, udalt_02, udalt_03, udalt_04, udalt_05, udalt_06, udalt_07, |
| 103 | + udalt_08, udalt_09, udalt_10, udalt_11, udalt_12, udalt_13, udalt_14, udalt_15); |
108 | 104 | } else if (polpred == UPred::GEAR) { |
109 | 105 | maxualt = 6; |
110 | 106 | darray::allocate(n, &udalt_00, &udalt_01, &udalt_02, &udalt_03, &udalt_04, &udalt_05); |
111 | 107 | darray::zero(g::q0, n, udalt_00, udalt_01, udalt_02, udalt_03, udalt_04, udalt_05); |
112 | 108 | } else if (polpred == UPred::LSQR) { |
113 | 109 | maxualt = 7; |
114 | | - darray::allocate( |
115 | | - n, &udalt_00, &udalt_01, &udalt_02, &udalt_03, &udalt_04, &udalt_05, &udalt_06); |
| 110 | + darray::allocate(n, &udalt_00, &udalt_01, &udalt_02, &udalt_03, &udalt_04, &udalt_05, &udalt_06); |
116 | 111 | int lenb = maxualt - 1; |
117 | 112 | int lena = lenb * lenb; // lenb*(lenb+1)/2 should be plenty. |
118 | 113 | darray::allocate(lena, &udalt_lsqr_a); |
119 | 114 | darray::allocate(lenb, &udalt_lsqr_b); |
120 | | - darray::zero( |
121 | | - g::q0, n, udalt_00, udalt_01, udalt_02, udalt_03, udalt_04, udalt_05, udalt_06); |
| 115 | + darray::zero(g::q0, n, udalt_00, udalt_01, udalt_02, udalt_03, udalt_04, udalt_05, udalt_06); |
122 | 116 | } |
123 | 117 | } |
124 | 118 |
|
@@ -270,3 +264,53 @@ void epolarChgpen(int vers) |
270 | 264 | } |
271 | 265 | } |
272 | 266 | } |
| 267 | + |
| 268 | +namespace tinker { |
| 269 | +TINKER_FVOID2(acc1, cu1, epolarAplusEwaldReal, int, int, const real (*)[3]); |
| 270 | +static void epolarAplusEwaldReal(int vers, int use_cf) |
| 271 | +{ |
| 272 | + TINKER_FCALL2(acc1, cu1, epolarAplusEwaldReal, vers, use_cf, uind); |
| 273 | +} |
| 274 | + |
| 275 | +static void epolarAplusEwaldRecipSelf(int vers, int use_cf) |
| 276 | +{ |
| 277 | + epolarChgpenEwaldRecipSelf(vers, use_cf); |
| 278 | +} |
| 279 | + |
| 280 | +void epolarAplusEwald(int vers, int use_cf) |
| 281 | +{ |
| 282 | + auto edot = vers & calc::energy; // if not do_e, edot = false |
| 283 | + if (vers & calc::energy and vers & calc::analyz) |
| 284 | + edot = 0; // if do_e and do_a, edot = false |
| 285 | + int ver2 = vers; |
| 286 | + if (edot) |
| 287 | + ver2 &= ~calc::energy; // toggle off the calc::energy flag |
| 288 | + |
| 289 | + induce2(uind); |
| 290 | + if (edot) |
| 291 | + epolar0DotProd(uind, udir); |
| 292 | + if (vers != calc::v0) { |
| 293 | + epolarAplusEwaldReal(ver2, use_cf); |
| 294 | + epolarAplusEwaldRecipSelf(ver2, use_cf); |
| 295 | + } |
| 296 | +} |
| 297 | +} |
| 298 | + |
| 299 | +namespace tinker { |
| 300 | +TINKER_FVOID2(acc1, cu1, epolarAplusNonEwald, int, int, const real (*)[3]); |
| 301 | +void epolarAplusNonEwald(int vers, int use_cf) |
| 302 | +{ |
| 303 | + auto edot = vers & calc::energy; // if not do_e, edot = false |
| 304 | + if (vers & calc::energy and vers & calc::analyz) |
| 305 | + edot = 0; // if do_e and do_a, edot = false |
| 306 | + int ver2 = vers; |
| 307 | + if (edot) |
| 308 | + ver2 &= ~calc::energy; // toggle off the calc::energy flag |
| 309 | + |
| 310 | + induce2(uind); |
| 311 | + if (edot) |
| 312 | + epolar0DotProd(uind, udir); |
| 313 | + if (vers != calc::v0) |
| 314 | + TINKER_FCALL2(acc1, cu1, epolarAplusNonEwald, ver2, use_cf, uind); |
| 315 | +} |
| 316 | +} |
0 commit comments