4#include "utils/mardyn_assert.h"
6#include "utils/Logger.h"
22 double rx()
const {
return _r[0]; }
23 double ry()
const {
return _r[1]; }
24 double rz()
const {
return _r[2]; }
25 std::array<double, 3>
r()
const {
return _r; }
26 double m()
const {
return _m; }
48 xmlconfig.getNodeValueReduced(
"coords/x",
_r[0]);
49 xmlconfig.getNodeValueReduced(
"coords/y",
_r[1]);
50 xmlconfig.getNodeValueReduced(
"coords/z",
_r[2]);
51 xmlconfig.getNodeValueReduced(
"mass",
_m);
56 virtual void write(std::ostream& ostrm)
const {
57 ostrm <<
_r[0] <<
" " <<
_r[1] <<
" " <<
_r[2];
68 Site(
double x = 0.,
double y = 0.,
double z = 0.,
double m = 0.) :
_r{{x, y, z}}, _m(m) {}
70 std::array<double, 3>
_r;
87 LJcenter():
Site(0., 0., 0., 0.), _epsilon(0.), _sigma(0.), _uLJshift6(0.) {}
97 LJcenter(
double x,
double y,
double z,
double m,
double epsilon,
double sigma,
double shift)
98 :
Site(x, y, z,
m), _epsilon(epsilon), _sigma(
sigma), _uLJshift6(shift) {}
114 xmlconfig.getNodeValueReduced(
"epsilon", _epsilon);
115 xmlconfig.getNodeValueReduced(
"sigma", _sigma);
116 xmlconfig.getNodeValueReduced(
"shifted", _uLJshift6);
120 void write(std::ostream& ostrm)
const {
125 double eps()
const {
return _epsilon; }
126 double sigma()
const {
return _sigma; }
127 double shift6()
const {
return _uLJshift6; }
130 void setEps(
double epsilon) { _epsilon = epsilon; }
164 Charge(
double x,
double y,
double z,
double m,
double q) :
Site(x, y, z,
m), _q(
q) {}
179 xmlconfig.getNodeValueReduced(
"charge", _q);
183 void write(std::ostream& ostrm)
const {
184 ostrm <<
_r[0] <<
" " <<
_r[1] <<
" " <<
_r[2] <<
"\t" <<
_m <<
" " << _q;
187 double q()
const {
return _q; }
202 double ex()
const {
return _e[0]; }
203 double ey()
const {
return _e[1]; }
204 double ez()
const {
return _e[2]; }
205 std::array<double, 3>
e()
const {
return _e; }
210 void write(std::ostream& ostrm)
const {
212 ostrm <<
"\t" <<
ex() <<
" " <<
ey() <<
" " <<
ez() <<
"\t" <<
abs();
220 const double fac = M_PI / 180.;
221 double theta_rad = theta_deg * fac;
222 double phi_rad = phi_deg * fac;
223 _e[0] = sin(theta_rad) * cos(phi_rad);
224 _e[1] = sin(theta_rad) * sin(phi_rad);
225 _e[2] = cos(theta_rad);
235 mardyn_assert(d < 3);
241 for(
int d = 0; d < 3; ++d) {
_e[d] /=
_abs; }
254 OrientedSite(
double x = 0.,
double y = 0.,
double z = 0.,
double m = 0.,
double ex = 0.,
double ey = 0.,
double ez = 0.,
double abs = 0.)
257 std::array<double, 3>
_e;
278 Dipole(
double x,
double y,
double z,
double eMyx,
double eMyy,
double eMyz,
double absMy)
300 bool bAngleInput =
true;
302 bAngleInput = bAngleInput && xmlconfig.getNodeValueReduced(
"dipolemoment/theta", theta);
303 bAngleInput = bAngleInput && xmlconfig.getNodeValueReduced(
"dipolemoment/phi", phi);
304 if(
true == bAngleInput) {
307 xmlconfig.getNodeValueReduced(
"dipolemoment/x",
_e[0]);
308 xmlconfig.getNodeValueReduced(
"dipolemoment/y",
_e[1]);
309 xmlconfig.getNodeValueReduced(
"dipolemoment/z",
_e[2]);
312 xmlconfig.getNodeValueReduced(
"dipolemoment/abs",
_abs);
340 Quadrupole(
double x,
double y,
double z,
double eQx,
double eQy,
double eQz,
double absQ)
362 bool bAngleInput =
true;
364 bAngleInput = bAngleInput && xmlconfig.getNodeValueReduced(
"quadrupolemoment/theta", theta);
365 bAngleInput = bAngleInput && xmlconfig.getNodeValueReduced(
"quadrupolemoment/phi", phi);
366 if(
true == bAngleInput) {
369 xmlconfig.getNodeValueReduced(
"quadrupolemoment/x",
_e[0]);
370 xmlconfig.getNodeValueReduced(
"quadrupolemoment/y",
_e[1]);
371 xmlconfig.getNodeValueReduced(
"quadrupolemoment/z",
_e[2]);
374 xmlconfig.getNodeValueReduced(
"quadrupolemoment/abs",
_abs);
Charge center.
Definition: Site.h:154
void setQ(double q)
Definition: Site.h:190
void write(std::ostream &ostrm) const
write to stream
Definition: Site.h:183
double q() const
Definition: Site.h:187
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for a Charge and all its included objects.
Definition: Site.h:177
Charge(double x, double y, double z, double m, double q)
Constructor.
Definition: Site.h:164
Dipole center.
Definition: Site.h:266
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for a Dipole and all its included objects.
Definition: Site.h:298
void setAbyMy(double my)
Definition: Site.h:321
Dipole(double x, double y, double z, double eMyx, double eMyy, double eMyz, double absMy)
Constructor.
Definition: Site.h:278
double absMy() const
Definition: Site.h:315
Lennard-Jones 12-6 center.
Definition: Site.h:84
void setULJShift6(double uLJshift6)
Definition: Site.h:134
void setSigma(double sigma)
Definition: Site.h:132
LJcenter(double x, double y, double z, double m, double epsilon, double sigma, double shift)
Constructor.
Definition: Site.h:97
void setEps(double epsilon)
Definition: Site.h:130
double sigma() const
Definition: Site.h:126
void write(std::ostream &ostrm) const
write to stream
Definition: Site.h:120
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for a LJcenter and all its included objects.
Definition: Site.h:112
LJcenter()
Constructor.
Definition: Site.h:87
double eps() const
Definition: Site.h:125
double shift6() const
Definition: Site.h:127
The OrientedSite class is the basis for the implementation of physical interactions based on directed...
Definition: Site.h:200
std::array< double, 3 > e() const
Definition: Site.h:205
double abs() const
Definition: Site.h:206
double ex() const
Definition: Site.h:202
void write(std::ostream &ostrm) const
write to stream
Definition: Site.h:210
OrientedSite(double x=0., double y=0., double z=0., double m=0., double ex=0., double ey=0., double ez=0., double abs=0.)
Constructor.
Definition: Site.h:254
double _abs
Definition: Site.h:258
std::array< double, 3 > _e
Definition: Site.h:257
void normalize_e()
Definition: Site.h:239
void setE(int d, double e)
Definition: Site.h:234
void setOrientationVectorByPolarAngles(const double &theta_deg, const double &phi_deg)
set orientation vector using polar angles
Definition: Site.h:219
double ez() const
Definition: Site.h:204
void setAbs(double abs)
Definition: Site.h:228
double ey() const
Definition: Site.h:203
Quadrupole center.
Definition: Site.h:328
Quadrupole(double x, double y, double z, double eQx, double eQy, double eQz, double absQ)
Constructor.
Definition: Site.h:340
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for a Dipole and all its included objects.
Definition: Site.h:360
double absQ() const
Definition: Site.h:377
void setAbsQ(double q)
Definition: Site.h:383
The Site class is the basis for the implementation of physical interactions.
Definition: Site.h:20
double rz() const
Definition: Site.h:24
double rx() const
Definition: Site.h:22
void setR(int d, double r)
Definition: Site.h:29
void setM(double m)
Definition: Site.h:35
double ry() const
Definition: Site.h:23
double m() const
Definition: Site.h:26
virtual void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for a site and all its included objects.
Definition: Site.h:47
std::array< double, 3 > r() const
Definition: Site.h:25
Site(double x=0., double y=0., double z=0., double m=0.)
Constructor.
Definition: Site.h:68
std::array< double, 3 > _r
Definition: Site.h:70
double _m
Definition: Site.h:71
XML file with unit attributes abstraction.
Definition: xmlfileUnits.h:25
XML input file with unit handling/conversion support.