1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream>
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Core>
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen;
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef SCALAR
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define SCALAR float
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef SIZE
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define SIZE 10000
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef REPEAT
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define REPEAT 10000
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef Matrix<SCALAR, Eigen::Dynamic, 1> Vec;
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std;
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathSCALAR E_VDW(const Vec &interactions1, const Vec &interactions2)
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  return (interactions2.cwise()/interactions1)
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath         .cwise().cube()
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath         .cwise().square()
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath         .cwise().square()
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath         .sum();
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main()
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  //
34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  //          1   2   3   4  ... (interactions)
35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // ka       .   .   .   .  ...
36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // rab      .   .   .   .  ...
37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // energy   .   .   .   .  ...
38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // ...     ... ... ... ... ...
39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // (variables
40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  //    for
41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // interaction)
42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  //
43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  Vec interactions1(SIZE), interactions2(SIZE); // SIZE is the number of vdw interactions in our system
44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // SetupCalculations()
45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  SCALAR rab = 1.0;
46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  interactions1.setConstant(2.4);
47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  interactions2.setConstant(rab);
48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // Energy()
50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  SCALAR energy = 0.0;
51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  for (unsigned int i = 0; i<REPEAT; ++i) {
52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    energy += E_VDW(interactions1, interactions2);
53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    energy *= 1 + 1e-20 * i; // prevent compiler from optimizing the loop
54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  }
55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  cout << "energy = " << energy << endl;
56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
57