1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #include <iostream>
- #include <Eigen/Core>
- using 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;
- }
|