ls1-MarDyn
ls1-MarDyn molecular dynamics code
Component.h
1#ifndef COMPONENT_H_
2#define COMPONENT_H_
3
4#include <vector>
5#include <string>
6
7#include "molecules/Site.h"
8
14class Component {
15public:
16 Component(unsigned int id = 0);
17
28 void readXML(XMLfileUnits& xmlconfig);
29
31 void setID(unsigned int id) { _id = id; }
33 unsigned int ID() const { return _id; }
34
36 unsigned int numSites() const {
37 return this->numLJcenters() + this->numCharges()
38 + this->numDipoles()
39 + this->numQuadrupoles();
40 }
42 unsigned int numOrientedSites() const { return numDipoles() + numQuadrupoles(); }
44 unsigned int numLJcenters() const { return _ljcenters.size(); }
46 unsigned int numCharges() const { return _charges.size(); }
48 unsigned int numDipoles() const { return _dipoles.size(); }
50 unsigned int numQuadrupoles() const { return _quadrupoles.size(); }
51
53 double m() const { return _m; }
54 double I11() const { return _Ipa[0]; }
55 double I22() const { return _Ipa[1]; }
56 double I33() const { return _Ipa[2]; }
57 void setI11(double I) { _Ipa[0]=I; }
58 void setI22(double I) { _Ipa[1]=I; }
59 void setI33(double I) { _Ipa[2]=I; }
60
62 unsigned int getRotationalDegreesOfFreedom() const { return _rot_dof; }
63
64 const std::vector<LJcenter>& ljcenters() const { return _ljcenters; }
65 LJcenter& ljcenter(unsigned int i) { return _ljcenters[i]; }
66 const LJcenter& ljcenter(unsigned int i) const { return _ljcenters[i]; }
67 const std::vector<Charge>& charges() const { return _charges; }
68 Charge& charge(unsigned i) { return _charges[i]; }
69 const Charge& charge(unsigned i) const { return _charges[i]; }
70 const std::vector<Dipole>& dipoles() const { return _dipoles; }
71 Dipole& dipole(unsigned int i) { return _dipoles[i]; }
72 const Dipole& dipole(unsigned int i) const { return _dipoles[i]; }
73 const std::vector<Quadrupole>& quadrupoles() const { return _quadrupoles; }
74 Quadrupole& quadrupole(unsigned int i) { return _quadrupoles[i]; }
75 const Quadrupole& quadrupole(unsigned int i) const { return _quadrupoles[i]; }
76
77 void setNumMolecules(unsigned long num) { _numMolecules = num; }
78 void incNumMolecules() { ++_numMolecules; }
79 void incNumMolecules(int N) { _numMolecules += N; }
80 unsigned long getNumMolecules() const { return _numMolecules; }
82 void addLJcenter(LJcenter& ljsite);
83 void addLJcenter(
84 double x, double y, double z, double m, double eps,
85 double sigma, double rc = 0, bool TRUNCATED_SHIFTED = 0
86 );
87 void addCharge(Charge& chargesite);
88 void addCharge(double x, double y, double z, double m, double q);
89 void addDipole(Dipole& dipolesite);
90 void addDipole(double x, double y, double z,
91 double eMyx, double eMyy, double eMyz, double eMyabs);
92 void addQuadrupole(Quadrupole& quadrupolesite);
93 void addQuadrupole(double x, double y, double z,
94 double eQx, double eQy, double eQz, double eQabs);
95
97 void deleteLJCenter() { _ljcenters.pop_back() ;}
98 void deleteCharge() { _charges.pop_back() ;}
99 void deleteDipole() { _dipoles.pop_back() ;}
100 void deleteQuadrupole() { _quadrupoles.pop_back() ;}
101
102
106 void updateMassInertia();
107
109 void write(std::ostream& ostrm) const;
110
111 void writeVIM(std::ostream& ostrm);
112
113 void setE_trans(double E) { _E_trans = E; }
114 void setE_rot(double E) { _E_rot = E; }
115 void setT(double T) { _T = T; }
116 double E_trans() const { return _E_trans; }
117 double E_rot() const { return _E_rot; }
118 double E() const { return _E_trans + _E_rot; }
119 double T() const { return _T; }
120 void setName(std::string name) { _name = name; }
121 std::string getName() const { return _name; }
122
125 double getEps(unsigned int i) const {return _ljcenters[i].eps();}
126 double getSigma(unsigned int i) const {return _ljcenters[i].sigma();}
127
128 unsigned getLookUpId() const {
129 return _lookUpID;
130 }
131
132 void setLookUpId(unsigned lookUpId) {
133 _lookUpID = lookUpId;
134 }
135
136private:
137
138 void updateMassInertia(Site& site);
139
140 unsigned int _id;
141 // LJcenter,Dipole,Quadrupole have different size -> not suitable to store in a _Site_-array
142 //std::vector<Site> _sites;
143 // use separate vectors instead...
144 std::vector<LJcenter> _ljcenters;
145 std::vector<Charge> _charges;
146 std::vector<Dipole> _dipoles;
147 std::vector<Quadrupole> _quadrupoles;
148 /* for performance reasons better(?) omit Site-class indirection and use cached values */
149 double _m;
153 double _I[6];
154 double _Ipa[3];
155 unsigned long _rot_dof;
157 /* cached values, set by ensemble class! */
158 unsigned long _numMolecules; // number of molecules for this molecule type
159 double _E_trans; // translational energy
160 double _E_rot; // rotational energy
161 double _T; // temperature
162
163 bool _isStockmayer; //Checks whether component is a Stockmayer fluid to determine moments of inertia
164
165 std::string _name;
178 unsigned _lookUpID;
179};
180
181std::ostream& operator<<(std::ostream& stream, const Component& component);
182
183#endif /* COMPONENT_H_ */
Charge center.
Definition: Site.h:154
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
void setNumMolecules(unsigned long num)
Definition: Component.h:77
unsigned int numQuadrupoles() const
Definition: Component.h:50
unsigned int numCharges() const
Definition: Component.h:46
unsigned int getRotationalDegreesOfFreedom() const
Definition: Component.h:62
unsigned int numSites() const
Definition: Component.h:36
double m() const
Definition: Component.h:53
void setID(unsigned int id)
Definition: Component.h:31
void write(std::ostream &ostrm) const
Definition: Component.cpp:207
unsigned int numDipoles() const
Definition: Component.h:48
void incNumMolecules(int N)
Definition: Component.h:79
unsigned long getNumMolecules() const
Definition: Component.h:80
double getEps(unsigned int i) const
Definition: Component.h:125
void deleteLJCenter()
Definition: Component.h:97
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for a component and all its included objects.
Definition: Component.cpp:32
void updateMassInertia()
Definition: Component.cpp:126
unsigned int ID() const
Definition: Component.h:33
void incNumMolecules()
Definition: Component.h:78
Dipole center.
Definition: Site.h:266
Lennard-Jones 12-6 center.
Definition: Site.h:84
Quadrupole center.
Definition: Site.h:328
The Site class is the basis for the implementation of physical interactions.
Definition: Site.h:20
XML file with unit attributes abstraction.
Definition: xmlfileUnits.h:25
std::ostream & operator<<(std::ostream &stream, const Vector3< type > &v)
Definition: Vector3.h:22
::xsd::cxx::tree::name< char, token > name
C++ type corresponding to the Name XML Schema built-in type.
Definition: vtk-punstructured.h:288
::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