8#ifndef TEMPERATURECONTROL_H_
9#define TEMPERATURECONTROL_H_
15#include "ThermostatVariables.h"
16#include "integrators/Integrator.h"
17#include "molecules/Molecule.h"
18#include "plugins/NEMD/DistControl.h"
19#include "utils/CommVar.h"
20#include "utils/ObserverBase.h"
21#include "utils/Random.h"
22#include "utils/Region.h"
84 unsigned int GetID() {
return _nID; }
88 void ControlTemperature(
Molecule* mol);
89 void ResetLocalValues();
92 void InitBetaLogfile();
93 void WriteBetaLogfile(
unsigned long simstep);
95 enum LocalControlMethod {
99 LocalControlMethod _localMethod;
101 void registerAsObserver();
105 void writeAddedEkin(
DomainDecompBase* domainDecomp,
const uint64_t& simstep);
115 static unsigned short _nStaticID;
117 unsigned int _nNumSlabs;
123 std::vector<std::vector<LocalThermostatVariables>> _localThermVarsThreadBuffer;
124 std::vector<GlobalThermostatVariables> _globalThermVars;
126 double _dTargetTemperature;
127 double _dTemperatureExponent;
128 unsigned int _nTargetComponentID;
129 unsigned short _nNumThermostatedTransDirections;
134 unsigned long _nWriteFreqBeta;
135 unsigned long _numSampledConfigs;
136 double _dBetaTransSumGlobal;
137 double _dBetaRotSumGlobal;
153 std::vector<std::vector<double>> _addedEkinLocalThreadBuffer;
157 float start, end, delta, slope;
159 uint64_t start, stop, delta, elapsed;
171 std::string getShortName()
override {
return "TeC"; }
174 int GetNumRegions() {
return _vecControlRegions.size(); }
176 return _vecControlRegions.at(nRegionID - 1);
178 void prepare_start();
180 void Init(
unsigned long simstep);
182 void CalcGlobalValues(
DomainDecompBase* domainDecomp,
unsigned long simstep);
183 void ControlTemperature(
Molecule* mol,
unsigned long simstep);
185 unsigned long GetStart() {
return _nStart; }
186 unsigned long GetStop() {
return _nStop; }
189 void InitBetaLogfiles();
190 void WriteBetaLogfiles(
unsigned long simstep);
197 void writeAddedEkin(
DomainDecompBase* domainDecomp,
const uint64_t& simstep);
200 std::vector<ControlRegionT*> _vecControlRegions;
201 unsigned long _nControlFreq;
202 unsigned long _nStart;
203 unsigned long _nStop;
205 enum ControlMethod { VelocityScaling, Andersen, Mixed };
206 ControlMethod _method = VelocityScaling;
213 bool _accumulateX, _accumulateY, _accumulateZ;
216 Accumulator(
bool accX,
bool accY,
bool accZ) : _accumulateX(accX), _accumulateY(accY), _accumulateZ(accZ) {}
218 double CalcKineticEnergyContribution(
Molecule* mol) {
219 double vx = _accumulateX ? mol->
v(0) : 0.0;
220 double vy = _accumulateY ? mol->
v(1) : 0.0;
221 double vz = _accumulateZ ? mol->
v(2) : 0.0;
222 double m = mol->
mass();
224 return m * (vx * vx + vy * vy + vz * vz);
226 void ScaleVelocityComponents(
Molecule* mol,
double vcorr) {
227 if (_accumulateX) mol->
setv(0, mol->
v(0) * vcorr);
228 if (_accumulateY) mol->
setv(1, mol->
v(1) * vcorr);
229 if (_accumulateZ) mol->
setv(2, mol->
v(2) * vcorr);
Definition: TemperatureControl.h:211
Definition: TemperatureControl.h:30
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for TemperatureControl and all its included objects.
Definition: TemperatureControl.cpp:90
Definition: DistControl.h:48
handle boundary region and multiple processes
Definition: DomainDecompBase.h:51
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
void setv(unsigned short d, double v) override
Definition: FullMolecule.h:57
double mass() const override
Definition: FullMolecule.h:59
double v(unsigned short d) const override
Definition: FullMolecule.h:55
This Interface is used to get access to particles and pairs of particles.
Definition: ParticleContainer.h:69
Definition: ObserverBase.h:20
Definition: TemperatureControl.h:166
void DoLoopsOverMolecules(DomainDecompBase *, ParticleContainer *particleContainer, unsigned long simstep)
Decide which ControlMethod to use.
Definition: TemperatureControl.cpp:685
void VelocityScalingPreparation(DomainDecompBase *, ParticleContainer *, unsigned long simstep)
Prepare for VelocityScaling control method.
Definition: TemperatureControl.cpp:716
XML file with unit attributes abstraction.
Definition: xmlfileUnits.h:25
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.
Definition: vtk-punstructured.h:270
Definition: TemperatureControl.h:158