#include <Eigen/Array>

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;
}
