|  | #include <Eigen/Array> | 
|  |  | 
|  | USING_PART_OF_NAMESPACE_EIGEN | 
|  |  | 
|  | #ifndef SCALAR | 
|  | #define SCALAR float | 
|  | #endif | 
|  |  | 
|  | #ifndef SIZE | 
|  | #define SIZE 10000 | 
|  | #endif | 
|  |  | 
|  | #ifndef REPEAT | 
|  | #define REPEAT 10000 | 
|  | #endif | 
|  |  | 
|  | typedef Matrix<SCALAR, Eigen::Dynamic, 1> Vec; | 
|  |  | 
|  | using namespace std; | 
|  |  | 
|  | SCALAR E_VDW(const Vec &interactions1, const Vec &interactions2) | 
|  | { | 
|  | return (interactions2.cwise()/interactions1) | 
|  | .cwise().cube() | 
|  | .cwise().square() | 
|  | .cwise().square() | 
|  | .sum(); | 
|  | } | 
|  |  | 
|  | int main() | 
|  | { | 
|  | // | 
|  | //          1   2   3   4  ... (interactions) | 
|  | // ka       .   .   .   .  ... | 
|  | // rab      .   .   .   .  ... | 
|  | // energy   .   .   .   .  ... | 
|  | // ...     ... ... ... ... ... | 
|  | // (variables | 
|  | //    for | 
|  | // interaction) | 
|  | // | 
|  | Vec interactions1(SIZE), interactions2(SIZE); // SIZE is the number of vdw interactions in our system | 
|  | // SetupCalculations() | 
|  | SCALAR rab = 1.0; | 
|  | interactions1.setConstant(2.4); | 
|  | interactions2.setConstant(rab); | 
|  |  | 
|  | // Energy() | 
|  | SCALAR energy = 0.0; | 
|  | for (unsigned int i = 0; i<REPEAT; ++i) { | 
|  | energy += E_VDW(interactions1, interactions2); | 
|  | energy *= 1 + 1e-20 * i; // prevent compiler from optimizing the loop | 
|  | } | 
|  | cout << "energy = " << energy << endl; | 
|  | } |