8#ifndef REGIONSAMPLING_H_
9#define REGIONSAMPLING_H_
11#include "utils/ObserverBase.h"
12#include "utils/Region.h"
13#include "molecules/MoleculeForwardDeclaration.h"
14#include "plugins/PluginBase.h"
20enum RegionSamplingDimensions
27enum RegionSamplingFileTypes : uint8_t
35 bool bSamplingEnabled;
37 double dVelocityClassWidth;
38 double dInvVelocityClassWidth;
39 uint32_t numVelocityClasses;
41 uint32_t nOffsetDataStructure;
42 std::vector<double> dDiscreteVelocityValues;
60 void setParamProfiles(
unsigned long initSamplingProfiles,
unsigned long writeFrequencyProfiles,
unsigned long stopSamplingProfiles)
62 _initSamplingProfiles = initSamplingProfiles;
63 _writeFrequencyProfiles = writeFrequencyProfiles;
64 _stopSamplingProfiles = stopSamplingProfiles;
65 _SamplingEnabledProfiles =
true;
66 _dInvertNumSamplesProfiles = 1. / ( (double)(_writeFrequencyProfiles) );
68 void setParamProfiles()
70 _SamplingEnabledProfiles =
true;
71 _dInvertNumSamplesProfiles = 1. / ( (double)(_writeFrequencyProfiles) );
75 void setSubdivisionProfiles(
const unsigned int& nNumSlabs) {_nNumBinsProfiles = nNumSlabs; _nSubdivisionOptProfiles = SDOPT_BY_NUM_SLABS;}
76 void setSubdivisionProfiles(
const double& dSlabWidth) {_dBinWidthProfilesInit = dSlabWidth; _nSubdivisionOptProfiles = SDOPT_BY_SLAB_WIDTH;}
77 void setSubdivisionVDF(
const unsigned int& nNumSlabs) {_numBinsVDF = nNumSlabs; _nSubdivisionOptVDF = SDOPT_BY_NUM_SLABS;}
78 void setSubdivisionVDF(
const double& dSlabWidth) {_dBinWidthVDFInit = dSlabWidth; _nSubdivisionOptVDF = SDOPT_BY_SLAB_WIDTH;}
79 void prepareSubdivisionProfiles();
80 void prepareSubdivisionVDF();
81 void prepareSubdivisionFieldYR();
85 void initSamplingProfiles(
int nDimension);
86 void initSamplingVDF(
int nDimension);
87 void initSamplingFieldYR(
int nDimension);
88 void doDiscretisationProfiles(
int nDimension);
89 void doDiscretisationVDF(
int nDimension);
90 void doDiscretisationFieldYR(
int nDimension);
93 void sampleProfiles(
Molecule* molecule,
int nDimension);
94 void sampleVDF(
Molecule* molecule,
int nDimension);
95 void sampleFieldYR(
Molecule* molecule);
99 void calcGlobalValuesVDF();
107 void updateSlabParameters();
111 void resetLocalValuesProfiles();
112 void resetOutputDataProfiles();
113 void resetLocalValuesVDF();
114 void resetLocalValuesFieldYR();
116 void initComponentSpecificParamsVDF();
117 void showComponentSpecificParamsVDF();
119 static void get_v(
double* q,
Molecule* mol);
120 static void get_F(
double* q,
Molecule* mol);
121 static void get_v2(
double& q,
Molecule* mol);
122 static void get_F2(
double& q,
Molecule* mol);
131 void resizeExactly(std::vector<T>& v,
unsigned int numElements)
const {
132 v.reserve(numElements);
133 v.resize(numElements);
137 static unsigned short _nStaticID;
139 uint32_t _numComponents;
148 bool _bDiscretisationDoneProfiles;
149 bool _SamplingEnabledProfiles;
150 int _nSubdivisionOptProfiles;
153 unsigned long _initSamplingProfiles;
154 unsigned long _writeFrequencyProfiles;
155 unsigned long _stopSamplingProfiles;
156 unsigned int _nNumBinsProfiles;
158 double _dBinWidthProfiles;
159 double _dBinWidthProfilesInit;
160 double _dBinVolumeProfiles;
161 std::vector<double> _dBinMidpointsProfiles;
165 std::array<std::vector<unsigned long>, 3> _nOffsetScalar;
166 std::array<std::array<std::vector<unsigned long>, 3>, 3> _nOffsetVector;
168 unsigned long _nNumValsScalar;
169 unsigned long _nNumValsVector;
171 std::vector<double> _vecMass;
172 double _dInvertNumSamplesProfiles;
173 double _dInvertBinVolumeProfiles;
174 double _dInvertBinVolSamplesProfiles;
178 std::vector<unsigned long> _nNumMoleculesLocal;
179 std::vector<unsigned long> _nNumMoleculesGlobal;
180 std::vector<unsigned long> _nRotDOFLocal;
181 std::vector<unsigned long> _nRotDOFGlobal;
182 std::vector<double> _d2EkinRotLocal;
183 std::vector<double> _d2EkinRotGlobal;
186 std::vector<double> _dDensity;
187 std::vector<double> _d2EkinTotal;
188 std::vector<double> _d2EkinTrans;
189 std::vector<double> _d2EkinDrift;
190 std::vector<double> _d2EkinRot;
191 std::vector<double> _d2EkinT;
192 std::vector<double> _dTemperature;
193 std::vector<double> _dTemperatureTrans;
194 std::vector<double> _dTemperatureRot;
198 std::vector<double> _dVelocityLocal;
199 std::vector<double> _dVelocityGlobal;
200 std::vector<double> _dSquaredVelocityLocal;
201 std::vector<double> _dSquaredVelocityGlobal;
202 std::vector<double> _dForceLocal;
203 std::vector<double> _dForceGlobal;
206 std::vector<double> _dForce;
207 std::vector<double> _dDriftVelocity;
208 std::vector<double> _d2EkinTransComp;
209 std::vector<double> _d2EkinDriftComp;
210 std::vector<double> _dTemperatureComp;
215 unsigned long _initSamplingVDF;
216 unsigned long _writeFrequencyVDF;
217 unsigned long _stopSamplingVDF;
220 bool _bDiscretisationDoneVDF;
221 bool _SamplingEnabledVDF;
222 int _nSubdivisionOptVDF;
224 double _dBinWidthVDF;
225 double _dInvBinWidthVDF;
226 double _dBinWidthVDFInit;
227 std::vector<double> _dBinMidpointsVDF;
230 std::vector<ComponentSpecificParamsVDF> _vecComponentSpecificParamsVDF;
233 uint32_t _numBinsVDF;
234 uint32_t _numValsVDF;
237 std::vector<uint64_t> _VDF_pjy_abs_local;
238 std::vector<uint64_t> _VDF_pjy_pvx_local;
239 std::vector<uint64_t> _VDF_pjy_pvy_local;
240 std::vector<uint64_t> _VDF_pjy_pvz_local;
241 std::vector<uint64_t> _VDF_pjy_nvx_local;
242 std::vector<uint64_t> _VDF_pjy_nvz_local;
244 std::vector<uint64_t> _VDF_njy_abs_local;
245 std::vector<uint64_t> _VDF_njy_pvx_local;
246 std::vector<uint64_t> _VDF_njy_pvz_local;
247 std::vector<uint64_t> _VDF_njy_nvx_local;
248 std::vector<uint64_t> _VDF_njy_nvy_local;
249 std::vector<uint64_t> _VDF_njy_nvz_local;
252 std::vector<uint64_t> _VDF_pjy_abs_global;
253 std::vector<uint64_t> _VDF_pjy_pvx_global;
254 std::vector<uint64_t> _VDF_pjy_pvy_global;
255 std::vector<uint64_t> _VDF_pjy_pvz_global;
256 std::vector<uint64_t> _VDF_pjy_nvx_global;
257 std::vector<uint64_t> _VDF_pjy_nvz_global;
259 std::vector<uint64_t> _VDF_njy_abs_global;
260 std::vector<uint64_t> _VDF_njy_pvx_global;
261 std::vector<uint64_t> _VDF_njy_pvz_global;
262 std::vector<uint64_t> _VDF_njy_nvx_global;
263 std::vector<uint64_t> _VDF_njy_nvy_global;
264 std::vector<uint64_t> _VDF_njy_nvz_global;
266 std::array<std::array<uint64_t*,4>,3> _dataPtrs;
272 bool _bDiscretisationDoneFieldYR;
273 bool _SamplingEnabledFieldYR;
274 int _nSubdivisionOptFieldYR_Y;
275 int _nSubdivisionOptFieldYR_R;
278 uint64_t _initSamplingFieldYR;
279 uint64_t _writeFrequencyFieldYR;
280 uint64_t _stopSamplingFieldYR;
281 uint32_t _nNumBinsFieldYR;
282 uint32_t _nNumShellsFieldYR;
283 double _dBinWidthInitFieldYR;
284 double _dShellWidthInitFieldYR;
286 double _dBinWidthFieldYR;
287 double _dShellWidthFieldYR;
288 double _dShellWidthSquaredFieldYR;
289 std::vector<double> _dBinMidpointsFieldYR;
290 std::vector<double> _dShellMidpointsFieldYR;
291 std::vector<double> _dShellVolumesFieldYR;
292 std::vector<double> _dInvShellVolumesFieldYR;
294 double _dShellVolumeFieldYR;
295 double _dInvShellVolumeFieldYR;
298 std::array<std::array<std::vector<std::vector<uint64_t>>, 3>, 3> _nOffsetFieldYR;
299 uint64_t _nNumValsFieldYR;
303 std::vector<uint64_t> _nNumMoleculesFieldYRLocal;
304 std::vector<uint64_t> _nNumMoleculesFieldYRGlobal;
307 std::vector<double> _dDensityFieldYR;
311 uint8_t _nFileTypeFieldYR;
313 bool _boolSingleComp;
323 std::string getShortName()
override {
return "ReS";}
399 unsigned long simstep
405 unsigned long simstep)
override;
415 int getNumRegions() {
return _vecSampleRegions.size();}
416 SampleRegion* getSampleRegion(
unsigned short nRegionID) {
return _vecSampleRegions.at(nRegionID-1); }
422 void prepareRegionSubdivisions();
425 std::vector<SampleRegion*> _vecSampleRegions;
427 unsigned long _initSamplingProfiles;
428 unsigned long _writeFrequencyProfiles;
429 unsigned long _initSamplingVDF;
430 unsigned long _writeFrequencyVDF;
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
This Interface is used to get access to particles and pairs of particles.
Definition: ParticleContainer.h:69
The PluginBase class provides the interface for any kind of output/plugin classes - called "(output) ...
Definition: PluginBase.h:47
Definition: RegionSampling.h:318
std::string getPluginName() override
return the name of the plugin
Definition: RegionSampling.h:410
void readXML(XMLfileUnits &xmlconfig) override
Read in XML configuration for DistControl and all its included objects.
Definition: RegionSampling.cpp:1995
void endStep(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain, unsigned long simstep) override
Method endStep will be called at the end of each time step.
Definition: RegionSampling.cpp:2051
void afterForces(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, unsigned long simstep) override
Method afterForces will be called after forcefields have been applied no sitewise Forces can be appli...
Definition: RegionSampling.h:397
void finish(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain) override
Method finish will be called at the end of the simulation.
Definition: RegionSampling.h:407
void init(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain) override
Method init will be called at the begin of the simulation.
Definition: RegionSampling.cpp:2035
Definition: RegionSampling.h:52
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: RegionSampling.h:34