4#include "MoleculeInterface.h"
5#include "molecules/Comp2Param.h"
6#include "molecules/Site.h"
10#include "utils/mardyn_assert.h"
26 double rx = 0.,
double ry = 0.,
double rz = 0.,
27 double vx = 0.,
double vy = 0.,
double vz = 0.,
28 double q0 = 1.,
double q1 = 1.,
double q2 = 0.,
double q3 = 0.,
29 double Dx = 0.,
double Dy = 0.,
double Dz = 0.
41 unsigned long getID()
const override {
return _id; }
51 double r(
unsigned short d)
const override {
return _r[d]; }
53 void setr(
unsigned short d,
double r)
override {
_r[d] =
r; }
55 double v(
unsigned short d)
const override {
return _v[d]; }
57 void setv(
unsigned short d,
double v)
override {
_v[d] =
v; }
59 double mass()
const override {
return _m; }
61 void setF(
unsigned short d,
double F)
override {
_F[d] =
F; }
63 double F(
unsigned short d)
const override {
return _F[d]; }
73 double D(
unsigned short d)
const override {
return _L[d]; }
76 double M(
unsigned short d)
const override {
return _M[d]; }
79 double Vi(
unsigned short d)
const override {
return _Vi[d];}
81 void setD(
unsigned short d,
double D)
override { this->
_L[d] =
D; }
83 inline void move(
int d,
double dr)
override {
_r[d] += dr; }
86 double getI(
unsigned short d)
const override {
return _I[d]; }
94 for (
unsigned short d = 0; d < 3; ++d) {
96 _invI[d] = 1. / _I[d];
117 double U_trans_2()
const override {
return _m *
v2(); }
119 double U_rot()
override ;
120 double U_rot_2()
override ;
124 void setupSoACache(
CellDataSoABase * s,
unsigned iLJ,
unsigned iC,
unsigned iD,
unsigned iQ)
override;
127 void setStartIndexSoA_LJ(
unsigned i)
override {_soa_index_lj = i;}
128 void setStartIndexSoA_C(
unsigned i)
override {_soa_index_c = i;}
129 void setStartIndexSoA_D(
unsigned i)
override {_soa_index_d = i;}
130 void setStartIndexSoA_Q(
unsigned i)
override {_soa_index_q = i;}
143 std::array<double, 3> site_d(
unsigned int i)
const override {
144 const unsigned n1 = numLJcenters(), n2 = numCharges()+ n1, n3 = numDipoles() + n2;
146 const unsigned n4 = numQuadrupoles() + n3;
149 return ljcenter_d(i);
151 return charge_d(i - n1);
153 return dipole_d(i - n2);
154 }
else { mardyn_assert(i < n4);
155 return quadrupole_d(i - n3);
158 std::array<double, 3> ljcenter_d(
unsigned int i)
const override {
159 return computeLJcenter_d(i);
161 std::array<double, 3> charge_d(
unsigned int i)
const override {
162 return computeCharge_d(i);
164 std::array<double, 3> dipole_d(
unsigned int i)
const override {
165 return computeDipole_d(i);
167 std::array<double, 3> quadrupole_d(
unsigned int i)
const override {
168 return computeQuadrupole_d(i);
171 std::array<double, 3> site_d_abs(
unsigned int i)
const override {
172 const unsigned n1 = numLJcenters(), n2 = numCharges()+ n1, n3 = numDipoles() + n2;
174 const unsigned n4 = numQuadrupoles() + n3;
177 return ljcenter_d_abs(i);
179 return charge_d_abs(i - n1);
181 return dipole_d_abs(i - n2);
182 }
else { mardyn_assert(i < n4);
183 return quadrupole_d_abs(i - n3);
186 std::array<double, 3> ljcenter_d_abs(
unsigned int i)
const override;
187 std::array<double, 3> charge_d_abs(
unsigned int i)
const override;
188 std::array<double, 3> dipole_d_abs(
unsigned int i)
const override;
189 std::array<double, 3> quadrupole_d_abs(
unsigned int i)
const override;
191 std::array<double, 3> dipole_e(
unsigned int i)
const override;
192 std::array<double, 3> quadrupole_e(
unsigned int i)
const override;
194 std::array<double, 3> site_F(
unsigned int i)
const override {
195 const unsigned n1 = numLJcenters(), n2 = numCharges()+ n1, n3 = numDipoles() + n2;
197 const unsigned n4 = numQuadrupoles() + n3;
200 return ljcenter_F(i);
202 return charge_F(i - n1);
204 return dipole_F(i - n2);
205 }
else { mardyn_assert(i < n4);
206 return quadrupole_F(i - n3);
209 std::array<double, 3> ljcenter_F(
unsigned int i)
const override;
210 std::array<double, 3> charge_F(
unsigned int i)
const override;
211 std::array<double, 3> dipole_F(
unsigned int i)
const override;
212 std::array<double, 3> quadrupole_F(
unsigned int i)
const override;
214 void normalizeQuaternion()
override {
217 std::array<double, 3> computeLJcenter_d(
unsigned int i)
const override {
218 mardyn_assert(
_q.isNormalized());
221 std::array<double, 3> computeCharge_d(
unsigned int i)
const override {
222 mardyn_assert(
_q.isNormalized());
225 std::array<double, 3> computeDipole_d(
unsigned int i)
const override {
226 mardyn_assert(
_q.isNormalized());
229 std::array<double, 3> computeQuadrupole_d(
unsigned int i)
const override {
230 mardyn_assert(
_q.isNormalized());
233 std::array<double, 3> computeDipole_e(
unsigned int i)
const override {
234 mardyn_assert(
_q.isNormalized());
237 std::array<double, 3> computeQuadrupole_e(
unsigned int i)
const override {
238 mardyn_assert(
_q.isNormalized());
258 for (
unsigned short d = 0; d < 3; d++) {
259 dr[d] = molecule2.
_r[d] -
_r[d];
268 void setF(
double F[3])
override {
for(
int d = 0; d < 3; d++ ) {
_F[d] =
F[d]; } }
273 void setM(
double M[3])
override {
for(
int d = 0; d < 3; d++ ) {
_M[d] =
M[d]; } }
274 void setVi(
double Vi[3])
override {
for(
int d = 0; d < 3; d++) { _Vi[d] =
Vi[d]; } }
276 void Fadd(
const double a[])
override {
for(
unsigned short d=0;d<3;++d)
_F[d]+=a[d]; }
277 void Madd(
const double a[])
override {
for(
unsigned short d=0;d<3;++d)
_M[d]+=a[d]; }
278 void Viadd(
const double a[])
override {
for(
unsigned short d=0;d<3;++d) _Vi[d]+=a[d]; }
279 void vadd(
const double ax,
const double ay,
const double az)
override {
280 _v[0] += ax;
_v[1] += ay;
_v[2] += az;
282 void vsub(
const double ax,
const double ay,
const double az)
override {
283 _v[0] -= ax;
_v[1] -= ay;
_v[2] -= az;
286 void Fljcenteradd(
unsigned int i,
double a[])
override;
287 void Fljcentersub(
unsigned int i,
double a[])
override;
288 void Fchargeadd(
unsigned int i,
double a[])
override;
289 void Fchargesub(
unsigned int i,
double a[])
override;
290 void Fdipoleadd(
unsigned int i,
double a[])
override;
291 void Fdipolesub(
unsigned int i,
double a[])
override;
292 void Fquadrupoleadd(
unsigned int i,
double a[])
override;
293 void Fquadrupolesub(
unsigned int i,
double a[])
override;
298 void upd_postF(
double dt_halve,
double& summv2,
double& sumIw2)
override;
305 void calculate_mv2_Iw2(
double& summv2,
double& sumIw2,
double offx,
double offy,
double offz)
override;
313 void write(std::ostream& ostrm)
const override;
316 void writeBinary(std::ostream& ostrm)
const override;
324 void check(
unsigned long id)
override;
338 void calcFM_site(
const std::array<double, 3>& d,
const std::array<double, 3>&
F);
351 double _I[3]{0.,0.,0.},_invI[3]{0.,0.,0.};
355 unsigned _soa_index_lj;
356 unsigned _soa_index_c;
357 unsigned _soa_index_d;
358 unsigned _soa_index_q;
Definition: CellDataSoABase.h:13
Structure of Arrays for vectorized force calculation.
Definition: CellDataSoA.h:22
Class implementing molecules as rigid rotators consisting out of different interaction sites (LJcente...
Definition: Component.h:14
unsigned int numOrientedSites() const
Definition: Component.h:42
unsigned int numLJcenters() const
Definition: Component.h:44
unsigned int numQuadrupoles() const
Definition: Component.h:50
unsigned int numCharges() const
Definition: Component.h:46
unsigned int numSites() const
Definition: Component.h:36
double m() const
Definition: Component.h:53
unsigned int numDipoles() const
Definition: Component.h:48
This class is used to read in the phasespace and to handle macroscopic values.
Definition: Domain.h:47
FullMolecule modeled as LJ sphere with point polarities.
Definition: FullMolecule.h:18
const Quaternion & q() const override
Definition: FullMolecule.h:66
double _F[3]
Definition: FullMolecule.h:342
double _L[3]
Definition: FullMolecule.h:346
void setid(unsigned long id) override
Definition: FullMolecule.h:43
Quaternion _q
Definition: FullMolecule.h:344
unsigned int numSites() const override
Definition: FullMolecule.h:136
void setF(double F[3]) override
Definition: FullMolecule.h:268
void clearFM() override
Definition: FullMolecule.cpp:479
void check(unsigned long id) override
Definition: FullMolecule.cpp:636
double Vi(unsigned short d) const override
Definition: FullMolecule.h:79
Component * component() const override
Definition: FullMolecule.h:47
double F2() const override
Definition: FullMolecule.h:110
unsigned long totalMemsize() const override
double M(unsigned short d) const override
Definition: FullMolecule.h:76
double F(unsigned short d) const override
Definition: FullMolecule.h:63
unsigned long getID() const override
Definition: FullMolecule.h:41
void setv(unsigned short d, double v) override
Definition: FullMolecule.h:57
double U_rot() override
Definition: FullMolecule.cpp:392
double _M[3]
Definition: FullMolecule.h:345
void buildOwnSoA() override
void updateMassInertia() override
Definition: FullMolecule.h:88
double mass() const override
Definition: FullMolecule.h:59
double getI(unsigned short d) const override
Definition: FullMolecule.h:86
double v(unsigned short d) const override
Definition: FullMolecule.h:55
double L2() const override
Definition: FullMolecule.h:107
double v2() const override
Definition: FullMolecule.h:104
double _v[3]
Definition: FullMolecule.h:343
unsigned long _id
Definition: FullMolecule.h:348
void setq(Quaternion q) override
Definition: FullMolecule.h:70
void setComponent(Component *component) override
Definition: FullMolecule.h:45
void setM(double M[3]) override
Definition: FullMolecule.h:273
double U_kin() override
Definition: FullMolecule.h:122
double dist2(const FullMolecule &molecule2, double dr[3]) const
Definition: FullMolecule.h:256
void upd_postF(double dt_halve, double &summv2, double &sumIw2) override
Definition: FullMolecule.cpp:366
double U_trans() const override
Definition: FullMolecule.h:116
void writeBinary(std::ostream &ostrm) const override
Definition: FullMolecule.cpp:451
void calcFM() override
Definition: FullMolecule.cpp:551
void upd_preF(double dt) override
Definition: FullMolecule.cpp:334
void calcFM_site(const std::array< double, 3 > &d, const std::array< double, 3 > &F)
Definition: FullMolecule.cpp:526
void calculate_mv2_Iw2(double &summv2, double &sumIw2) override
Calculate twice the translational and rotational kinetic energies.
Definition: FullMolecule.cpp:412
double D(unsigned short d) const override
Definition: FullMolecule.h:73
static std::string getWriteFormat()
Definition: FullMolecule.cpp:438
Component * _component
Definition: FullMolecule.h:340
void setr(unsigned short d, double r) override
Definition: FullMolecule.h:53
double r(unsigned short d) const override
Definition: FullMolecule.h:51
unsigned getComponentLookUpID() const override
Definition: FullMolecule.h:49
void write(std::ostream &ostrm) const override
Definition: FullMolecule.cpp:442
double _r[3]
Definition: FullMolecule.h:341
double _m
Definition: FullMolecule.h:350
void releaseOwnSoA() override
double M2() const override
Definition: FullMolecule.h:113
Definition: MoleculeInterface.h:18
std::array< double, 3 > e() const
Definition: Site.h:205
Definition: Quaternion.h:10
std::array< double, 3 > rotate(const std::array< double, 3 > &d) const
Definition: Quaternion.cpp:43
std::array< double, 3 > r() const
Definition: Site.h:25
std::ostream & operator<<(std::ostream &stream, const Vector3< type > &v)
Definition: Vector3.h:22
::xsd::cxx::tree::id< char, ncname > id
C++ type corresponding to the ID XML Schema built-in type.
Definition: vtk-punstructured.h:322
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.
Definition: vtk-punstructured.h:270