ls1-MarDyn
ls1-MarDyn molecular dynamics code
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
FullMolecule Class Reference

FullMolecule modeled as LJ sphere with point polarities. More...

#include <FullMolecule.h>

Inheritance diagram for FullMolecule:
MoleculeInterface

Public Member Functions

 FullMolecule (unsigned long id=0, Component *component=nullptr, double rx=0., double ry=0., double rz=0., double vx=0., double vy=0., double vz=0., double q0=1., double q1=1., double q2=0., double q3=0., double Dx=0., double Dy=0., double Dz=0.)
 
 FullMolecule (const FullMolecule &m)
 
FullMoleculeoperator= (const FullMolecule &m)
 
unsigned long getID () const override
 
void setid (unsigned long id) override
 
void setComponent (Component *component) override
 
Componentcomponent () const override
 
unsigned getComponentLookUpID () const override
 
double r (unsigned short d) const override
 
void setr (unsigned short d, double r) override
 
double v (unsigned short d) const override
 
void setv (unsigned short d, double v) override
 
double mass () const override
 
void setF (unsigned short d, double F) override
 
double F (unsigned short d) const override
 
const Quaternionq () const override
 
void setq (Quaternion q) override
 
double D (unsigned short d) const override
 
double M (unsigned short d) const override
 
double Vi (unsigned short d) const override
 
void setD (unsigned short d, double D) override
 
void move (int d, double dr) override
 
double getI (unsigned short d) const override
 
void updateMassInertia () override
 
double v2 () const override
 
double L2 () const override
 
double F2 () const override
 
double M2 () const override
 
double U_trans () const override
 
double U_trans_2 () const override
 
double U_rot () override
 
double U_rot_2 () override
 
double U_kin () override
 
void setupSoACache (CellDataSoABase *s, unsigned iLJ, unsigned iC, unsigned iD, unsigned iQ) override
 
void setSoA (CellDataSoABase *s) override
 
void setStartIndexSoA_LJ (unsigned i) override
 
void setStartIndexSoA_C (unsigned i) override
 
void setStartIndexSoA_D (unsigned i) override
 
void setStartIndexSoA_Q (unsigned i) override
 
unsigned int numSites () const override
 
unsigned int numOrientedSites () const override
 
unsigned int numLJcenters () const override
 
unsigned int numCharges () const override
 
unsigned int numDipoles () const override
 
unsigned int numQuadrupoles () const override
 
std::array< double, 3 > site_d (unsigned int i) const override
 
std::array< double, 3 > ljcenter_d (unsigned int i) const override
 
std::array< double, 3 > charge_d (unsigned int i) const override
 
std::array< double, 3 > dipole_d (unsigned int i) const override
 
std::array< double, 3 > quadrupole_d (unsigned int i) const override
 
std::array< double, 3 > site_d_abs (unsigned int i) const override
 
std::array< double, 3 > ljcenter_d_abs (unsigned int i) const override
 
std::array< double, 3 > charge_d_abs (unsigned int i) const override
 
std::array< double, 3 > dipole_d_abs (unsigned int i) const override
 
std::array< double, 3 > quadrupole_d_abs (unsigned int i) const override
 
std::array< double, 3 > dipole_e (unsigned int i) const override
 
std::array< double, 3 > quadrupole_e (unsigned int i) const override
 
std::array< double, 3 > site_F (unsigned int i) const override
 
std::array< double, 3 > ljcenter_F (unsigned int i) const override
 
std::array< double, 3 > charge_F (unsigned int i) const override
 
std::array< double, 3 > dipole_F (unsigned int i) const override
 
std::array< double, 3 > quadrupole_F (unsigned int i) const override
 
void normalizeQuaternion () override
 
std::array< double, 3 > computeLJcenter_d (unsigned int i) const override
 
std::array< double, 3 > computeCharge_d (unsigned int i) const override
 
std::array< double, 3 > computeDipole_d (unsigned int i) const override
 
std::array< double, 3 > computeQuadrupole_d (unsigned int i) const override
 
std::array< double, 3 > computeDipole_e (unsigned int i) const override
 
std::array< double, 3 > computeQuadrupole_e (unsigned int i) const override
 
unsigned long totalMemsize () const override
 
double dist2 (const FullMolecule &molecule2, double dr[3]) const
 
void setF (double F[3]) override
 
void setM (double M[3]) override
 
void setVi (double Vi[3]) override
 
void Fadd (const double a[]) override
 
void Madd (const double a[]) override
 
void Viadd (const double a[]) override
 
void vadd (const double ax, const double ay, const double az) override
 
void vsub (const double ax, const double ay, const double az) override
 
void Fljcenteradd (unsigned int i, double a[]) override
 
void Fljcentersub (unsigned int i, double a[]) override
 
void Fchargeadd (unsigned int i, double a[]) override
 
void Fchargesub (unsigned int i, double a[]) override
 
void Fdipoleadd (unsigned int i, double a[]) override
 
void Fdipolesub (unsigned int i, double a[]) override
 
void Fquadrupoleadd (unsigned int i, double a[]) override
 
void Fquadrupolesub (unsigned int i, double a[]) override
 
void upd_preF (double dt) override
 
void upd_postF (double dt_halve, double &summv2, double &sumIw2) override
 
void calculate_mv2_Iw2 (double &summv2, double &sumIw2) override
 Calculate twice the translational and rotational kinetic energies. More...
 
void calculate_mv2_Iw2 (double &summv2, double &sumIw2, double offx, double offy, double offz) override
 
void write (std::ostream &ostrm) const override
 
void writeBinary (std::ostream &ostrm) const override
 
void clearFM () override
 
void calcFM () override
 
void check (unsigned long id) override
 
void buildOwnSoA () override
 
void releaseOwnSoA () override
 
- Public Member Functions inherited from MoleculeInterface
unsigned int componentid () const
 
std::array< double, 3 > r_arr () const
 
std::array< double, 3 > v_arr () const
 
virtual std::array< double, 3 > F_arr ()
 
virtual std::array< double, 3 > M_arr ()
 
virtual std::array< double, 3 > Vi_arr ()
 
std::array< double, 3 > D_arr () const
 
double dist2 (const MoleculeInterface &molecule2, double dr[3]) const
 
double orientationAngle (const MoleculeInterface &molecule2, double dr[3], double d2) const
 
void scale_v (double s)
 
void scale_v (double s, double offx, double offy, double offz)
 
void scale_F (double s)
 
void scale_D (double s)
 
void scale_M (double s)
 
void ee_upd_preF (double dt)
 
void ee_upd_postF (double dt, double &summv2)
 
bool isLessThan (const MoleculeInterface &m2) const
 find out whether m1 is before m2 (in some global ordering) More...
 
virtual bool inBox (const double l[3], const double u[3]) const
 test whether molecule is inside a cuboid region More...
 

Static Public Member Functions

static std::string getWriteFormat ()
 
- Static Public Member Functions inherited from MoleculeInterface
static std::array< vcp_real_calc, 3 > convert_double_to_vcp_real_calc (const std::array< double, 3 > &v)
 
static std::string getWriteFormat ()
 

Protected Member Functions

void calcFM_site (const std::array< double, 3 > &d, const std::array< double, 3 > &F)
 

Protected Attributes

Component_component
 
double _r [3]
 
double _F [3]
 
double _v [3]
 
Quaternion _q
 
double _M [3]
 
double _L [3]
 
double _Vi [3]
 
unsigned long _id
 
double _m
 
double _I [3] {0.,0.,0.}
 
double _invI [3] {0.,0.,0.}
 
CellDataSoA_soa
 
unsigned _soa_index_lj
 
unsigned _soa_index_c
 
unsigned _soa_index_d
 
unsigned _soa_index_q
 

Detailed Description

FullMolecule modeled as LJ sphere with point polarities.

Member Function Documentation

◆ buildOwnSoA()

void FullMolecule::buildOwnSoA ( )
overridevirtual

In almost all cases, molecule's caches are stored in SoAs. In some rare instances (e.g. ParticleContainer::getEnergy()) a molecule should rather better exist alone and not be part of a particleCell. This function allocates a new SoA. Remember to release it when no longer necessary!

Implements MoleculeInterface.

◆ calcFM()

void FullMolecule::calcFM ( )
overridevirtual

calculate forces and moments for already given site forces

Implements MoleculeInterface.

◆ calcFM_site()

void FullMolecule::calcFM_site ( const std::array< double, 3 > &  d,
const std::array< double, 3 > &  F 
)
protected

calculate forces and moments for already given site forces, for this precise site

◆ calculate_mv2_Iw2() [1/2]

void FullMolecule::calculate_mv2_Iw2 ( double &  summv2,
double &  sumIw2 
)
overridevirtual

Calculate twice the translational and rotational kinetic energies.

Parameters
[out]summv2twice the translational kinetic energy $ m v^2 $
[out]sumIw2twice the rotational kinetic energy $ I \omega^2 $

Implements MoleculeInterface.

◆ calculate_mv2_Iw2() [2/2]

void FullMolecule::calculate_mv2_Iw2 ( double &  summv2,
double &  sumIw2,
double  offx,
double  offy,
double  offz 
)
overridevirtual

Implements MoleculeInterface.

◆ charge_d()

std::array<double, 3> FullMolecule::charge_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ charge_d_abs()

std::array< double, 3 > FullMolecule::charge_d_abs ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ charge_F()

std::array< double, 3 > FullMolecule::charge_F ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ check()

void FullMolecule::check ( unsigned long  id)
overridevirtual

perform data consistency check for the molecule (only debug mode)

catches NaN values and missing data

Implements MoleculeInterface.

◆ clearFM()

void FullMolecule::clearFM ( )
overridevirtual

clear forces and moments

Implements MoleculeInterface.

◆ component()

Component* FullMolecule::component ( ) const
inlineoverridevirtual

return pointer to component to which the molecule belongs

Implements MoleculeInterface.

◆ computeCharge_d()

std::array<double, 3> FullMolecule::computeCharge_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ computeDipole_d()

std::array<double, 3> FullMolecule::computeDipole_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ computeDipole_e()

std::array<double, 3> FullMolecule::computeDipole_e ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ computeLJcenter_d()

std::array<double, 3> FullMolecule::computeLJcenter_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ computeQuadrupole_d()

std::array<double, 3> FullMolecule::computeQuadrupole_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ computeQuadrupole_e()

std::array<double, 3> FullMolecule::computeQuadrupole_e ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ D()

double FullMolecule::D ( unsigned short  d) const
inlineoverridevirtual

get coordinate of the rotatational speed

Implements MoleculeInterface.

◆ dipole_d()

std::array<double, 3> FullMolecule::dipole_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ dipole_d_abs()

std::array< double, 3 > FullMolecule::dipole_d_abs ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ dipole_e()

std::array< double, 3 > FullMolecule::dipole_e ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ dipole_F()

std::array< double, 3 > FullMolecule::dipole_F ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ dist2()

double FullMolecule::dist2 ( const FullMolecule molecule2,
double  dr[3] 
) const
inline

Calculate the difference vector and return the square (euclidean) distance.

Parameters
molecule2molecule to which the distance shall be calculated

◆ F()

double FullMolecule::F ( unsigned short  d) const
inlineoverridevirtual

get coordinate of current force onto molecule

Implements MoleculeInterface.

◆ F2()

double FullMolecule::F2 ( ) const
inlineoverridevirtual

calculate and return the square force

Reimplemented from MoleculeInterface.

◆ Fadd()

void FullMolecule::Fadd ( const double  a[])
inlineoverridevirtual

Implements MoleculeInterface.

◆ Fchargeadd()

void FullMolecule::Fchargeadd ( unsigned int  i,
double  a[] 
)
overridevirtual

Implements MoleculeInterface.

◆ Fchargesub()

void FullMolecule::Fchargesub ( unsigned int  i,
double  a[] 
)
overridevirtual

Implements MoleculeInterface.

◆ Fdipoleadd()

void FullMolecule::Fdipoleadd ( unsigned int  i,
double  a[] 
)
overridevirtual

Implements MoleculeInterface.

◆ Fdipolesub()

void FullMolecule::Fdipolesub ( unsigned int  i,
double  a[] 
)
overridevirtual

Implements MoleculeInterface.

◆ Fljcenteradd()

void FullMolecule::Fljcenteradd ( unsigned int  i,
double  a[] 
)
overridevirtual

Implements MoleculeInterface.

◆ Fljcentersub()

void FullMolecule::Fljcentersub ( unsigned int  i,
double  a[] 
)
overridevirtual

Implements MoleculeInterface.

◆ Fquadrupoleadd()

void FullMolecule::Fquadrupoleadd ( unsigned int  i,
double  a[] 
)
overridevirtual

Implements MoleculeInterface.

◆ Fquadrupolesub()

void FullMolecule::Fquadrupolesub ( unsigned int  i,
double  a[] 
)
overridevirtual

Implements MoleculeInterface.

◆ getComponentLookUpID()

unsigned FullMolecule::getComponentLookUpID ( ) const
inlineoverridevirtual

get component lookUpID

Reimplemented from MoleculeInterface.

◆ getI()

double FullMolecule::getI ( unsigned short  d) const
inlineoverridevirtual

get the moment of inertia of a particle

Implements MoleculeInterface.

◆ getID()

unsigned long FullMolecule::getID ( ) const
inlineoverridevirtual

get molecule ID

Implements MoleculeInterface.

◆ getWriteFormat()

std::string FullMolecule::getWriteFormat ( )
static
Returns
format of the function write(...)

◆ L2()

double FullMolecule::L2 ( ) const
inlineoverridevirtual

calculate and return the square angular momentum

Reimplemented from MoleculeInterface.

◆ ljcenter_d()

std::array<double, 3> FullMolecule::ljcenter_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ ljcenter_d_abs()

std::array< double, 3 > FullMolecule::ljcenter_d_abs ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ ljcenter_F()

std::array< double, 3 > FullMolecule::ljcenter_F ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ M()

double FullMolecule::M ( unsigned short  d) const
inlineoverridevirtual

get coordinate of the current angular momentum onto molecule

Implements MoleculeInterface.

◆ M2()

double FullMolecule::M2 ( ) const
inlineoverridevirtual

calculate and return the square torque

Reimplemented from MoleculeInterface.

◆ Madd()

void FullMolecule::Madd ( const double  a[])
inlineoverridevirtual

Implements MoleculeInterface.

◆ mass()

double FullMolecule::mass ( ) const
inlineoverridevirtual

get molecule's mass

Reimplemented from MoleculeInterface.

◆ move()

void FullMolecule::move ( int  d,
double  dr 
)
inlineoverridevirtual

Implements MoleculeInterface.

◆ normalizeQuaternion()

void FullMolecule::normalizeQuaternion ( )
inlineoverridevirtual

Implements MoleculeInterface.

◆ numCharges()

unsigned int FullMolecule::numCharges ( ) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ numDipoles()

unsigned int FullMolecule::numDipoles ( ) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ numLJcenters()

unsigned int FullMolecule::numLJcenters ( ) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ numOrientedSites()

unsigned int FullMolecule::numOrientedSites ( ) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ numQuadrupoles()

unsigned int FullMolecule::numQuadrupoles ( ) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ numSites()

unsigned int FullMolecule::numSites ( ) const
inlineoverridevirtual

get number of sites

Implements MoleculeInterface.

◆ q()

const Quaternion& FullMolecule::q ( ) const
inlineoverridevirtual

get molecule's orientation

Implements MoleculeInterface.

◆ quadrupole_d()

std::array<double, 3> FullMolecule::quadrupole_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ quadrupole_d_abs()

std::array< double, 3 > FullMolecule::quadrupole_d_abs ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ quadrupole_e()

std::array< double, 3 > FullMolecule::quadrupole_e ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ quadrupole_F()

std::array< double, 3 > FullMolecule::quadrupole_F ( unsigned int  i) const
overridevirtual

Implements MoleculeInterface.

◆ r()

double FullMolecule::r ( unsigned short  d) const
inlineoverridevirtual

get position coordinate

Implements MoleculeInterface.

◆ releaseOwnSoA()

void FullMolecule::releaseOwnSoA ( )
overridevirtual

See above comment.

Implements MoleculeInterface.

◆ setComponent()

void FullMolecule::setComponent ( Component component)
inlineoverridevirtual

set the molecule's component

Implements MoleculeInterface.

◆ setD()

void FullMolecule::setD ( unsigned short  d,
double  D 
)
inlineoverridevirtual

Implements MoleculeInterface.

◆ setF() [1/2]

void FullMolecule::setF ( double  F[3])
inlineoverridevirtual

set force acting on molecule

Parameters
[out]Fforce vector (x,y,z)

Implements MoleculeInterface.

◆ setF() [2/2]

void FullMolecule::setF ( unsigned short  d,
double  F 
)
inlineoverridevirtual

Implements MoleculeInterface.

◆ setid()

void FullMolecule::setid ( unsigned long  id)
inlineoverridevirtual

set molecule ID

Implements MoleculeInterface.

◆ setM()

void FullMolecule::setM ( double  M[3])
inlineoverridevirtual

set momentum acting on molecule

Parameters
Mforce vector (x,y,z)

Implements MoleculeInterface.

◆ setq()

void FullMolecule::setq ( Quaternion  q)
inlineoverridevirtual

set molecule's orientation

Implements MoleculeInterface.

◆ setr()

void FullMolecule::setr ( unsigned short  d,
double  r 
)
inlineoverridevirtual

set position coordinate

Implements MoleculeInterface.

◆ setSoA()

void FullMolecule::setSoA ( CellDataSoABase s)
overridevirtual

Implements MoleculeInterface.

◆ setStartIndexSoA_C()

void FullMolecule::setStartIndexSoA_C ( unsigned  i)
inlineoverridevirtual

Implements MoleculeInterface.

◆ setStartIndexSoA_D()

void FullMolecule::setStartIndexSoA_D ( unsigned  i)
inlineoverridevirtual

Implements MoleculeInterface.

◆ setStartIndexSoA_LJ()

void FullMolecule::setStartIndexSoA_LJ ( unsigned  i)
inlineoverridevirtual

Implements MoleculeInterface.

◆ setStartIndexSoA_Q()

void FullMolecule::setStartIndexSoA_Q ( unsigned  i)
inlineoverridevirtual

Implements MoleculeInterface.

◆ setupSoACache()

void FullMolecule::setupSoACache ( CellDataSoABase s,
unsigned  iLJ,
unsigned  iC,
unsigned  iD,
unsigned  iQ 
)
overridevirtual

Implements MoleculeInterface.

◆ setv()

void FullMolecule::setv ( unsigned short  d,
double  v 
)
inlineoverridevirtual

set velocity

Implements MoleculeInterface.

◆ setVi()

void FullMolecule::setVi ( double  Vi[3])
inlineoverridevirtual

Implements MoleculeInterface.

◆ site_d()

std::array<double, 3> FullMolecule::site_d ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ site_d_abs()

std::array<double, 3> FullMolecule::site_d_abs ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ site_F()

std::array<double, 3> FullMolecule::site_F ( unsigned int  i) const
inlineoverridevirtual

Implements MoleculeInterface.

◆ totalMemsize()

unsigned long FullMolecule::totalMemsize ( ) const
overridevirtual

get the total object memory size, together with all its members \Note You can retrieve the size of the molecule class itself simply with the sizeof()-operator.

Implements MoleculeInterface.

◆ U_kin()

double FullMolecule::U_kin ( )
inlineoverridevirtual

return total kinetic energy of the molecule

Reimplemented from MoleculeInterface.

◆ U_rot()

double FullMolecule::U_rot ( )
overridevirtual

return the rotational energy of the molecule

Implements MoleculeInterface.

◆ U_rot_2()

double FullMolecule::U_rot_2 ( )
overridevirtual

Implements MoleculeInterface.

◆ U_trans()

double FullMolecule::U_trans ( ) const
inlineoverridevirtual

return the translational energy of the molecule

Reimplemented from MoleculeInterface.

◆ U_trans_2()

double FullMolecule::U_trans_2 ( ) const
inlineoverridevirtual

Reimplemented from MoleculeInterface.

◆ upd_postF()

void FullMolecule::upd_postF ( double  dt_halve,
double &  summv2,
double &  sumIw2 
)
overridevirtual

second step of the leap frog integrator

Implements MoleculeInterface.

◆ upd_preF()

void FullMolecule::upd_preF ( double  dt)
overridevirtual

First step of the leap frog integrator

Implements MoleculeInterface.

◆ updateMassInertia()

void FullMolecule::updateMassInertia ( )
inlineoverridevirtual

update mass and moment of inertia by component definition

Implements MoleculeInterface.

◆ v()

double FullMolecule::v ( unsigned short  d) const
inlineoverridevirtual

get velocity coordinate

Implements MoleculeInterface.

◆ v2()

double FullMolecule::v2 ( ) const
inlineoverridevirtual

calculate and return the square velocity

Reimplemented from MoleculeInterface.

◆ vadd()

void FullMolecule::vadd ( const double  ax,
const double  ay,
const double  az 
)
inlineoverridevirtual

Implements MoleculeInterface.

◆ Vi()

double FullMolecule::Vi ( unsigned short  d) const
inlineoverridevirtual

get the virial

Implements MoleculeInterface.

◆ Viadd()

void FullMolecule::Viadd ( const double  a[])
inlineoverridevirtual

Implements MoleculeInterface.

◆ vsub()

void FullMolecule::vsub ( const double  ax,
const double  ay,
const double  az 
)
inlineoverridevirtual

Implements MoleculeInterface.

◆ write()

void FullMolecule::write ( std::ostream &  ostrm) const
overridevirtual

write information to stream

Implements MoleculeInterface.

◆ writeBinary()

void FullMolecule::writeBinary ( std::ostream &  ostrm) const
overridevirtual

write binary information to stream

Implements MoleculeInterface.

Member Data Documentation

◆ _component

Component* FullMolecule::_component
protected

IDentification number of its component type

◆ _F

double FullMolecule::_F[3]
protected

forces

◆ _id

unsigned long FullMolecule::_id
protected

Virial tensor IDentification number of that molecule

◆ _L

double FullMolecule::_L[3]
protected

angular momentum

◆ _M

double FullMolecule::_M[3]
protected

torsional moment

◆ _m

double FullMolecule::_m
protected

total mass

◆ _q

Quaternion FullMolecule::_q
protected

angular orientation

◆ _r

double FullMolecule::_r[3]
protected

position coordinates

◆ _v

double FullMolecule::_v[3]
protected

velocity


The documentation for this class was generated from the following files: