@@ -228,3 +228,121 @@ TEST_CASE("ExchangePolarization-4", "[ff][hippo][expol]")
228228 finish ();
229229 testEnd ();
230230}
231+
232+ TEST_CASE (" ExchangePolarization-5" , " [ff][hippo][expol]" )
233+ {
234+ const char * xn = " crys.xyz" ;
235+ const char * kn = " expols2.key" ;
236+ const char * argv[] = {" dummy" , xn, " -k" , kn};
237+ int argc = 4 ;
238+
239+ TestFile fx1 (TINKER9_DIRSTR " /test/file/expol/crys.xyz" );
240+ TestFile fk1 (TINKER9_DIRSTR " /test/file/expol/expol.key" , kn,
241+ " \n "
242+ " exchange-polar s2"
243+ " \n " );
244+ TestFile fp1 (TINKER9_DIRSTR " /test/file/expol/expol.prm" );
245+
246+ const double eps_e = testGetEps (0.0001 , 0.0001 );
247+ const double eps_g = testGetEps (0.0001 , 0.0001 );
248+ const double eps_v = testGetEps (0.001 , 0.001 );
249+
250+ TestReference r (TINKER9_DIRSTR " /test/ref/expol.5.txt" );
251+ auto ref_c = r.getCount ();
252+ auto ref_e = r.getEnergy ();
253+ auto ref_v = r.getVirial ();
254+ auto ref_g = r.getGradient ();
255+
256+ rc_flag = calc::xyz | calc::vmask;
257+ testBeginWithArgs (argc, argv);
258+ initialize ();
259+
260+ energy (calc::v0);
261+ COMPARE_REALS (esum, ref_e, eps_e);
262+
263+ energy (calc::v1);
264+ COMPARE_REALS (esum, ref_e, eps_e);
265+ COMPARE_GRADIENT (ref_g, eps_g);
266+ for (int i = 0 ; i < 3 ; ++i)
267+ for (int j = 0 ; j < 3 ; ++j)
268+ COMPARE_REALS (vir[i * 3 + j], ref_v[i][j], eps_v);
269+
270+ energy (calc::v3);
271+ COMPARE_REALS (esum, ref_e, eps_e);
272+ COMPARE_INTS (countReduce (nep), ref_c);
273+
274+ energy (calc::v4);
275+ COMPARE_REALS (esum, ref_e, eps_e);
276+ COMPARE_GRADIENT (ref_g, eps_g);
277+
278+ energy (calc::v5);
279+ COMPARE_GRADIENT (ref_g, eps_g);
280+
281+ energy (calc::v6);
282+ COMPARE_GRADIENT (ref_g, eps_g);
283+ for (int i = 0 ; i < 3 ; ++i)
284+ for (int j = 0 ; j < 3 ; ++j)
285+ COMPARE_REALS (vir[i * 3 + j], ref_v[i][j], eps_v);
286+
287+ finish ();
288+ testEnd ();
289+ }
290+
291+ TEST_CASE (" ExchangePolarization-6" , " [ff][hippo][expol]" )
292+ {
293+ const char * xn = " crys.xyz" ;
294+ const char * kn = " expolg.key" ;
295+ const char * argv[] = {" dummy" , xn, " -k" , kn};
296+ int argc = 4 ;
297+
298+ TestFile fx1 (TINKER9_DIRSTR " /test/file/expol/crys.xyz" );
299+ TestFile fk1 (TINKER9_DIRSTR " /test/file/expol/expol.key" , kn,
300+ " \n "
301+ " exchange-polar g"
302+ " \n " );
303+ TestFile fp1 (TINKER9_DIRSTR " /test/file/expol/expol.prm" );
304+
305+ const double eps_e = testGetEps (0.0001 , 0.0001 );
306+ const double eps_g = testGetEps (0.0001 , 0.0001 );
307+ const double eps_v = testGetEps (0.001 , 0.001 );
308+
309+ TestReference r (TINKER9_DIRSTR " /test/ref/expol.6.txt" );
310+ auto ref_c = r.getCount ();
311+ auto ref_e = r.getEnergy ();
312+ auto ref_v = r.getVirial ();
313+ auto ref_g = r.getGradient ();
314+
315+ rc_flag = calc::xyz | calc::vmask;
316+ testBeginWithArgs (argc, argv);
317+ initialize ();
318+
319+ energy (calc::v0);
320+ COMPARE_REALS (esum, ref_e, eps_e);
321+
322+ energy (calc::v1);
323+ COMPARE_REALS (esum, ref_e, eps_e);
324+ COMPARE_GRADIENT (ref_g, eps_g);
325+ for (int i = 0 ; i < 3 ; ++i)
326+ for (int j = 0 ; j < 3 ; ++j)
327+ COMPARE_REALS (vir[i * 3 + j], ref_v[i][j], eps_v);
328+
329+ energy (calc::v3);
330+ COMPARE_REALS (esum, ref_e, eps_e);
331+ COMPARE_INTS (countReduce (nep), ref_c);
332+
333+ energy (calc::v4);
334+ COMPARE_REALS (esum, ref_e, eps_e);
335+ COMPARE_GRADIENT (ref_g, eps_g);
336+
337+ energy (calc::v5);
338+ COMPARE_GRADIENT (ref_g, eps_g);
339+
340+ energy (calc::v6);
341+ COMPARE_GRADIENT (ref_g, eps_g);
342+ for (int i = 0 ; i < 3 ; ++i)
343+ for (int j = 0 ; j < 3 ; ++j)
344+ COMPARE_REALS (vir[i * 3 + j], ref_v[i][j], eps_v);
345+
346+ finish ();
347+ testEnd ();
348+ }
0 commit comments