// Dynamole - Compute molecular interactions
// Copyright (C) 2018-2026 Eric Bechet - bechet@cadxfem.org
//
// See the LICENSE file for license information and contributions.
// Please report all bugs and problems to <bechet@cadxfem.org>.
#include <vector>
#include "npoint.h"

class molecule
{
  static int ndx;
public:
  molecule(void) {}
  molecule(double charge_,double dipole_,double polar_):charge(charge_),dipole(dipole_),polar(polar_) {id=ndx++;}
  int id;
  double charge; // electric charge
  double dipole; // dipole moment
  double polar; // polarizability
  npoint3 pos; // 3D position
  npoint3 vel; // 3D velocity
};

const double pi=3.141592653589793238462643383279502884;
const double perm0=8.85418782e-12;//vaccuum permeability 
const double bltz=1.38064852e-23;//bolzmann
const double h=6.626070040e-34;//planck
const double ele_charge=1.6021766209e-19;//elementary charge
const double debye=3.33564e-30 ;//debye dipole measure


typedef  std::vector<molecule> molecular_group;

class interactions
{
  molecular_group group;
public :
  interactions(double Temp=300,double nu_=600e12):T(Temp),nu(nu_) {}
  void interforce(const molecule &m1,const molecule &m2,npoint3 &f, npoint3 df[3]); // force & grad between 2 molecules
  void force(const molecule& m1, npoint3& f, npoint3 df[3]); // resulting force for one molecule & grad
  void add_molecule(const molecule m);
  molecule& get_molecule(int n) { return group[n];}
  int nb_molecules(void) {return group.size();}
  const double T;// =300;
  const double nu;// =1e12; // elec absorption freq
};
