From e471b72bdaf404c72b0695440fde632f744e336b Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 25 Feb 2022 15:10:07 +0100 Subject: [PATCH 01/76] First version of direct sampling of chemical potential --- src/plugins/ChemPotSampling.cpp | 203 ++++++++++++++++++++++++++++ src/plugins/ChemPotSampling.h | 71 ++++++++++ src/plugins/NEMD/RegionSampling.cpp | 2 +- src/plugins/PluginFactory.cpp | 2 + 4 files changed, 277 insertions(+), 1 deletion(-) create mode 100755 src/plugins/ChemPotSampling.cpp create mode 100755 src/plugins/ChemPotSampling.h diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp new file mode 100755 index 0000000000..e1d93f2960 --- /dev/null +++ b/src/plugins/ChemPotSampling.cpp @@ -0,0 +1,203 @@ +/* + * ChemPotSampling.cpp + * + * Created on: Feb 2022 + * Author: homes + */ + +#include "ChemPotSampling.h" + +#include "particleContainer/ParticleContainer.h" +#include "particleContainer/adapter/ParticlePairs2PotForceAdapter.h" + +#include + + +ChemPotSampling::ChemPotSampling(){} + +ChemPotSampling::~ChemPotSampling(){} + +void ChemPotSampling::init(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* domain){ + global_log -> info() << "[ChemPotSampling] Init" << std::endl; + + double _globalBoxLengthY = domain->getGlobalLength(1); + + _numBinsGlobal = static_cast(domain->getGlobalLength(1)/_binwidth); + if (_globalBoxLengthY/_binwidth != static_cast(_numBinsGlobal)) { + global_log -> error() << "[ChemPotSampling] Can not divide domain without remainder! Change binwidth" << std::endl; + Simulation::exit(-1); + } + _slabVolume = domain->getGlobalLength(0)*domain->getGlobalLength(2)*_binwidth; + + _chemPotSum.local.resize(_numBinsGlobal); + _temperatureSum.local.resize(_numBinsGlobal); + _numMoleculesSum.local.resize(_numBinsGlobal); + + _chemPotSum.global.resize(_numBinsGlobal); + _temperatureSum.global.resize(_numBinsGlobal); + _numMoleculesSum.global.resize(_numBinsGlobal); + + _cellProcessor = _simulation.getCellProcessor(); + _mTest = Molecule(std::numeric_limits::max()-domainDecomp->getRank(), &_simulation.getEnsemble()->getComponents()->at(0)); + + resetVectors(); + +} + +void ChemPotSampling::readXML(XMLfileUnits& xmlconfig){ + + xmlconfig.getNodeValue("binwidth", _binwidth); + xmlconfig.getNodeValue("start", _startSampling); + xmlconfig.getNodeValue("writefrequency", _writeFrequency); + xmlconfig.getNodeValue("stop", _stopSampling); + + global_log -> info() << "[ChemPotSampling] Start:Freq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; + global_log -> info() << "[ChemPotSampling] Binwidth: " << _binwidth << std::endl; + +} + +void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain, + unsigned long simstep) { + + double regionLowCorner[3], regionHighCorner[3]; + ParticlePairs2PotForceAdapter particlePairsHandler(*domain); + + double mass = 1.0; + + // Accumulated over one sampling step + CommVar> ekin2; + std::array>, 3> velocity; // Array for x,y,z values (local and global) including vectors for bins + CommVar> numMols; + + for (unsigned d = 0; d < 3; d++) { + regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); + regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); + } + + // Sample temperature and number of molecules + for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { + // sample density profile + double ry = pit->r(1); + uint16_t index = static_cast(_globalBoxLengthY/ry); // Index of bin + + _numMoleculesSum.local.at(index) += 1; + + double v[3]; + v[0] = pit->v(0); + v[1] = pit->v(1); + v[2] = pit->v(2); + + ekin2.local.at(index) += pit->U_trans_2() + pit->U_rot_2(); + + velocity[0].local.at(index) += v[0]; + velocity[1].local.at(index) += v[1]; + velocity[2].local.at(index) += v[2]; + + numMols.local.at(index) += 1; + } + +#ifdef ENABLE_MPI + MPI_Reduce(numMols.local.data(), numMols.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(ekin2.local.data(), ekin2.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(velocity[0].local.data(), velocity[0].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(velocity[1].local.data(), velocity[1].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(velocity[2].local.data(), velocity[2].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); +#else + for (unsigned int i = 0; i < _numBinsGlobal; i++) { + numMols.global.at(i) = numMols.local.at(i); + ekin2.global.at(i) = ekin2.local.at(i); + velocity[0].global.at(i) = velocity[0].local.at(i); + velocity[1].global.at(i) = velocity[1].local.at(i); + velocity[2].global.at(i) = velocity[2].local.at(i); + } +#endif + + double temperatureStep[_numBinsGlobal] = {0.0}; + for (uint16_t i = 0; i < _numBinsGlobal; i++) { + double vDrift2 = velocity[0].global.at(i) * velocity[0].global.at(i) + + velocity[1].global.at(i) * velocity[1].global.at(i) + + velocity[2].global.at(i) * velocity[2].global.at(i); + // Temperature in the present sampling step + temperatureStep[i] = (ekin2.global.at(i) - vDrift2*vDrift2*mass)/(numMols.global.at(i)*3); + } + + // Insert particles in lattice structure and sample chem. pot. + double dX = 0.25; + double dZ = dX; + double dY = 0.25; + + for (int iY = regionLowCorner[1]; iY < regionHighCorner[1]; iY += dY) { + uint16_t index = static_cast(_globalBoxLengthY/iY); // Index of bin + + for (int iX = regionLowCorner[1]; iX < regionHighCorner[1]; iX += dX) { + for (int iZ = regionLowCorner[1]; iZ < regionHighCorner[1]; iZ += dZ) { + _mTest.setr(0,iX); + _mTest.setr(1,iY); + _mTest.setr(2,iZ); + double deltaUpot = particleContainer->getEnergy(&particlePairsHandler, &_mTest, *_cellProcessor); + cout << "Inserting molecule at " << _mTest.r(0) << " " << _mTest.r(0) << " " << _mTest.r(0) << " ; dU = " << deltaUpot << std::endl; + _chemPotSum.local.at(index) += exp(-deltaUpot/temperatureStep[index]); + } + } + + } + + // sampling starts after initial timestep and with respect to write frequency + if ( (simstep - _startSampling) % _writeFrequency != 0 ) { + return; + } + if ( (simstep <= _startSampling) or (simstep > _stopSampling)) { + return; + } + // do not write data directly after (re)start + if ( simstep == global_simulation->getNumInitTimesteps() ) { + return; + } + +#ifdef ENABLE_MPI + MPI_Reduce(_numMoleculesSum.local.data(), _numMoleculesSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(_temperatureSum.local.data(), _temperatureSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(_chemPotSum.local.data(), _chemPotSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); +#else + for (unsigned int i = 0; i < _numBinsGlobal; i++) { + _numMoleculesSum.global.at(i) = _numMoleculesSum.local.at(i); + _temperatureSum.global.at(i) = _temperatureSum.local.at(i); + _chemPotSum.global.at(i) = _chemPotSum.local.at(i); + } +#endif + + if (domainDecomp->getRank() != 0) { + // write output + std::stringstream ss; + ss << std::setw(9) << std::setfill('0') << simstep; + const std::string fname = "ChemPotSampling_TS"+ss.str()+".dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::out); + ofs << setw(12) << "pos" << setw(12) << "numMols" << setw(12) << "density" << setw(12) << "temperature" << setw(12) << "chemPot" << std::endl; + for (uint16_t i = 0; i < _numBinsGlobal; i++) { + double T = _temperatureSum.global.at(i)/_writeFrequency; + double chemPot = -T*log(_chemPotSum.global.at(i)/_writeFrequency); + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _numMoleculesSum.global.at(i)/_writeFrequency; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _numMoleculesSum.global.at(i)/(_writeFrequency*_slabVolume); + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot; + } + ofs.close(); + } + + // reset vectors to zero + resetVectors(); +} + + +// Filling vectors with zeros +void ChemPotSampling::resetVectors() { + std::fill(_chemPotSum.local.begin(), _chemPotSum.local.end(), 0); + std::fill(_temperatureSum.local.begin(), _temperatureSum.local.end(), 0); + std::fill(_numMoleculesSum.local.begin(), _numMoleculesSum.local.end(), 0); + + std::fill(_chemPotSum.global.begin(), _chemPotSum.global.end(), 0); + std::fill(_temperatureSum.global.begin(), _temperatureSum.global.end(), 0); + std::fill(_numMoleculesSum.global.begin(), _numMoleculesSum.global.end(), 0); +} \ No newline at end of file diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h new file mode 100755 index 0000000000..2c2244a01c --- /dev/null +++ b/src/plugins/ChemPotSampling.h @@ -0,0 +1,71 @@ +/* + * ChemPotSampling.h + * + * Created on: Feb 2022 + * Author: homes + */ + +#ifndef MARDYN_TRUNK_CHEMPOTSAMPLING_H +#define MARDYN_TRUNK_CHEMPOTSAMPLING_H + +#include "PluginBase.h" +#include "particleContainer/ParticleContainer.h" +#include "Domain.h" +#include "utils/CommVar.h" +#include "parallel/DomainDecompBase.h" + +/** @brief +* Plugin: can be enabled via config.xml
+* +* Samples chemical potential binwise in y-direction ONLY FOR ONE-CENTERED LJ PARTICLES +* \code{.xml} +* +* 1 +* +* \endcode +*/ +class ChemPotSampling : public PluginBase{ + +private: + float _binwidth {1.0f}; + uint16_t _numBinsGlobal; + double _globalBoxLengthY; + double _slabVolume; + + unsigned long _startSampling {0ul}; + unsigned long _writeFrequency {10000ul}; + unsigned long _stopSampling {1000000000ul}; + + // Accumulated over + CommVar> _chemPotSum; + CommVar> _temperatureSum; + CommVar> _numMoleculesSum; + + CellProcessor* _cellProcessor; + Molecule _mTest; + + void resetVectors(); + +public: + ChemPotSampling(); + ~ChemPotSampling(); + + void init(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* domain) override; + + void readXML (XMLfileUnits& xmlconfig) override; + + void endStep( + ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, + Domain *domain, unsigned long simstep) override; + + void finish(ParticleContainer *particleContainer, + DomainDecompBase *domainDecomp, Domain *domain) override {} + + std::string getPluginName()override {return std::string("ChemPotSampling");} + + static PluginBase* createInstance(){return new ChemPotSampling();} + +}; + + +#endif //MARDYN_TRUNK_CHEMPOTSAMPLING_H diff --git a/src/plugins/NEMD/RegionSampling.cpp b/src/plugins/NEMD/RegionSampling.cpp index 80c7396271..ee6457400f 100644 --- a/src/plugins/NEMD/RegionSampling.cpp +++ b/src/plugins/NEMD/RegionSampling.cpp @@ -1802,7 +1802,7 @@ void SampleRegion::writeDataFieldYR(DomainDecompBase* domainDecomp, unsigned lon return; // sampling starts after initial timestep (_initSamplingFieldYR) and with respect to write frequency (_writeFrequencyFieldYR) - if( simstep <= _initSamplingFieldYR ) + if( simstep >= _stopSamplingFieldYR or simstep <= _initSamplingFieldYR ) return; if( (simstep - _initSamplingFieldYR) % _writeFrequencyFieldYR != 0 ) diff --git a/src/plugins/PluginFactory.cpp b/src/plugins/PluginFactory.cpp index a35d40b140..0c3a6fb034 100644 --- a/src/plugins/PluginFactory.cpp +++ b/src/plugins/PluginFactory.cpp @@ -39,6 +39,7 @@ #include "io/XyzWriter.h" // General plugins +#include "plugins/ChemPotSampling.h" #include "plugins/COMaligner.h" #include "plugins/DirectedPM.h" #include "plugins/Dropaccelerator.h" @@ -82,6 +83,7 @@ void PluginFactory::registerDefaultPlugins() { #ifdef ENABLE_ADIOS2 REGISTER_PLUGIN(Adios2Writer); #endif + REGISTER_PLUGIN(ChemPotSampling); REGISTER_PLUGIN(COMaligner); REGISTER_PLUGIN(CavityWriter); REGISTER_PLUGIN(CheckpointWriter); From b69d4a0c6b2c4385ec4136e1dcae982ceef3c859 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 1 Mar 2022 12:11:04 +0100 Subject: [PATCH 02/76] Fixes in ChemPotSampling --- src/plugins/ChemPotSampling.cpp | 65 ++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index e1d93f2960..b7c7174287 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -20,9 +20,9 @@ ChemPotSampling::~ChemPotSampling(){} void ChemPotSampling::init(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* domain){ global_log -> info() << "[ChemPotSampling] Init" << std::endl; - double _globalBoxLengthY = domain->getGlobalLength(1); + _globalBoxLengthY = domain->getGlobalLength(1); - _numBinsGlobal = static_cast(domain->getGlobalLength(1)/_binwidth); + _numBinsGlobal = static_cast(_globalBoxLengthY/_binwidth); if (_globalBoxLengthY/_binwidth != static_cast(_numBinsGlobal)) { global_log -> error() << "[ChemPotSampling] Can not divide domain without remainder! Change binwidth" << std::endl; Simulation::exit(-1); @@ -69,6 +69,18 @@ void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecomp std::array>, 3> velocity; // Array for x,y,z values (local and global) including vectors for bins CommVar> numMols; + ekin2.local.resize(_numBinsGlobal); + numMols.local.resize(_numBinsGlobal); + velocity[0].local.resize(_numBinsGlobal); + velocity[1].local.resize(_numBinsGlobal); + velocity[2].local.resize(_numBinsGlobal); + + ekin2.global.resize(_numBinsGlobal); + numMols.global.resize(_numBinsGlobal); + velocity[0].global.resize(_numBinsGlobal); + velocity[1].global.resize(_numBinsGlobal); + velocity[2].global.resize(_numBinsGlobal); + for (unsigned d = 0; d < 3; d++) { regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); @@ -78,7 +90,7 @@ void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecomp for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { // sample density profile double ry = pit->r(1); - uint16_t index = static_cast(_globalBoxLengthY/ry); // Index of bin + uint16_t index = static_cast(ry/_binwidth); // Index of bin _numMoleculesSum.local.at(index) += 1; @@ -97,7 +109,7 @@ void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecomp } #ifdef ENABLE_MPI - MPI_Reduce(numMols.local.data(), numMols.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(numMols.local.data(), numMols.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(ekin2.local.data(), ekin2.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(velocity[0].local.data(), velocity[0].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(velocity[1].local.data(), velocity[1].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); @@ -112,35 +124,46 @@ void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecomp } #endif - double temperatureStep[_numBinsGlobal] = {0.0}; + std::vector temperatureStep; + temperatureStep.resize(_numBinsGlobal); for (uint16_t i = 0; i < _numBinsGlobal; i++) { - double vDrift2 = velocity[0].global.at(i) * velocity[0].global.at(i) + double vDrift2 = (velocity[0].global.at(i) * velocity[0].global.at(i) + velocity[1].global.at(i) * velocity[1].global.at(i) - + velocity[2].global.at(i) * velocity[2].global.at(i); + + velocity[2].global.at(i) * velocity[2].global.at(i))/numMols.global.at(i); // Temperature in the present sampling step - temperatureStep[i] = (ekin2.global.at(i) - vDrift2*vDrift2*mass)/(numMols.global.at(i)*3); + cout << "velo " << velocity[0].global.at(i) << " " << velocity[1].global.at(i) << " " << velocity[2].global.at(i) << std::endl; + temperatureStep.at(i) = (ekin2.global.at(i) - vDrift2*vDrift2*mass)/(numMols.global.at(i)*3); + cout << "vDrift2 " << vDrift2 << " ekin2 " << ekin2.global.at(i) << " 3*numMols " << numMols.global.at(i)*3 << " T " << temperatureStep.at(i) << std::endl; } +cout << "temperatureStep "; +for (auto ele : temperatureStep) { + cout << ele << " "; +} +cout << std::endl; + // Insert particles in lattice structure and sample chem. pot. - double dX = 0.25; + double dX = 1.0; double dZ = dX; - double dY = 0.25; - - for (int iY = regionLowCorner[1]; iY < regionHighCorner[1]; iY += dY) { - uint16_t index = static_cast(_globalBoxLengthY/iY); // Index of bin + double dY = 1.0; +/* + for (double iY = regionLowCorner[1]; iY < regionHighCorner[1]; iY += dY) { + uint16_t index = static_cast(iY/_binwidth); // Index of bin - for (int iX = regionLowCorner[1]; iX < regionHighCorner[1]; iX += dX) { - for (int iZ = regionLowCorner[1]; iZ < regionHighCorner[1]; iZ += dZ) { + for (double iX = regionLowCorner[0]; iX < regionHighCorner[0]; iX += dX) { + for (double iZ = regionLowCorner[2]; iZ < regionHighCorner[2]; iZ += dZ) { _mTest.setr(0,iX); _mTest.setr(1,iY); _mTest.setr(2,iZ); double deltaUpot = particleContainer->getEnergy(&particlePairsHandler, &_mTest, *_cellProcessor); - cout << "Inserting molecule at " << _mTest.r(0) << " " << _mTest.r(0) << " " << _mTest.r(0) << " ; dU = " << deltaUpot << std::endl; - _chemPotSum.local.at(index) += exp(-deltaUpot/temperatureStep[index]); + // cout << "Inserting molecule at " << _mTest.r(0) << " " << _mTest.r(1) << " " << _mTest.r(2) << " ; dU = " << deltaUpot << " index " << index << std::endl; + _chemPotSum.local.at(index) += exp(-deltaUpot/temperatureStep.at(index)); } } } +*/ + cout << "CPS 6" << std::endl; // sampling starts after initial timestep and with respect to write frequency if ( (simstep - _startSampling) % _writeFrequency != 0 ) { @@ -155,7 +178,7 @@ void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecomp } #ifdef ENABLE_MPI - MPI_Reduce(_numMoleculesSum.local.data(), _numMoleculesSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(_numMoleculesSum.local.data(), _numMoleculesSum.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(_temperatureSum.local.data(), _temperatureSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(_chemPotSum.local.data(), _chemPotSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); #else @@ -166,6 +189,8 @@ void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecomp } #endif +cout << "CPS 7" << std::endl; + if (domainDecomp->getRank() != 0) { // write output std::stringstream ss; @@ -186,8 +211,12 @@ void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecomp ofs.close(); } + cout << "CPS 8" << std::endl; + // reset vectors to zero resetVectors(); + + cout << "CPS 9" << std::endl; } From 221cf37acefb205913ba141366d64249dbb18d75 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 1 Mar 2022 17:21:45 +0100 Subject: [PATCH 03/76] Fixes in chem. pot. sampling --- src/plugins/ChemPotSampling.cpp | 215 +++++++++++++++----------------- src/plugins/ChemPotSampling.h | 34 ++--- 2 files changed, 116 insertions(+), 133 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index b7c7174287..b73adc40a9 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -13,75 +13,89 @@ #include -ChemPotSampling::ChemPotSampling(){} +ChemPotSampling::ChemPotSampling() + : + _binwidth(1.0f), + _factorNumTest(4.0f), + _startSampling(0ul), + _writeFrequency(5000ul), + _stopSampling(_simulation.getNumTimesteps()) +{} -ChemPotSampling::~ChemPotSampling(){} +ChemPotSampling::~ChemPotSampling() {} -void ChemPotSampling::init(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* domain){ - global_log -> info() << "[ChemPotSampling] Init" << std::endl; +void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) { - _globalBoxLengthY = domain->getGlobalLength(1); + _globalBoxLength[0] = domain->getGlobalLength(0); + _globalBoxLength[1] = domain->getGlobalLength(1); + _globalBoxLength[2] = domain->getGlobalLength(2); - _numBinsGlobal = static_cast(_globalBoxLengthY/_binwidth); - if (_globalBoxLengthY/_binwidth != static_cast(_numBinsGlobal)) { + _numBinsGlobal = static_cast(_globalBoxLength[1]/_binwidth); + if (_globalBoxLength[1]/_binwidth != static_cast(_numBinsGlobal)) { global_log -> error() << "[ChemPotSampling] Can not divide domain without remainder! Change binwidth" << std::endl; Simulation::exit(-1); } _slabVolume = domain->getGlobalLength(0)*domain->getGlobalLength(2)*_binwidth; _chemPotSum.local.resize(_numBinsGlobal); - _temperatureSum.local.resize(_numBinsGlobal); - _numMoleculesSum.local.resize(_numBinsGlobal); - _chemPotSum.global.resize(_numBinsGlobal); - _temperatureSum.global.resize(_numBinsGlobal); - _numMoleculesSum.global.resize(_numBinsGlobal); + _temperatureSumGlobal.resize(_numBinsGlobal); + _numMoleculesSumGlobal.resize(_numBinsGlobal); + + // CHANGE OF CELL PROCESSOR DURING SIMULATION??? _cellProcessor = _simulation.getCellProcessor(); - _mTest = Molecule(std::numeric_limits::max()-domainDecomp->getRank(), &_simulation.getEnsemble()->getComponents()->at(0)); + // CHANGE OF PP HANDLER DURING SIMULATION??? + _particlePairsHandler = new ParticlePairs2PotForceAdapter(*domain); + // MolID is maximum possible number minus rank to prevent duplicate IDs + // Always insert molecule of first component + const unsigned long molID = std::numeric_limits::max()-static_cast(domainDecomp->getRank()); + _mTest = Molecule(molID, &_simulation.getEnsemble()->getComponents()->at(0)); resetVectors(); - } -void ChemPotSampling::readXML(XMLfileUnits& xmlconfig){ +void ChemPotSampling::readXML(XMLfileUnits& xmlconfig) { - xmlconfig.getNodeValue("binwidth", _binwidth); - xmlconfig.getNodeValue("start", _startSampling); - xmlconfig.getNodeValue("writefrequency", _writeFrequency); - xmlconfig.getNodeValue("stop", _stopSampling); + xmlconfig.getNodeValue("binwidth", _binwidth); // Default: 1.0 + xmlconfig.getNodeValue("numTest", _factorNumTest); // Default: 4.0 + xmlconfig.getNodeValue("start", _startSampling); // Default: 0 + xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 + xmlconfig.getNodeValue("stop", _stopSampling); // Default: Maximum number of timesteps in simulation global_log -> info() << "[ChemPotSampling] Start:Freq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; global_log -> info() << "[ChemPotSampling] Binwidth: " << _binwidth << std::endl; - } -void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain, +void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* /* domain */, unsigned long simstep) { + + // sampling starts after _startSampling and is conducted up to _stopSampling + if ((simstep <= _startSampling) or (simstep > _stopSampling)) { + return; + } + // do not write data directly after (re)start + if ( simstep == global_simulation->getNumInitTimesteps() ) { + return; + } double regionLowCorner[3], regionHighCorner[3]; - ParticlePairs2PotForceAdapter particlePairsHandler(*domain); - - double mass = 1.0; // Accumulated over one sampling step CommVar> ekin2; - std::array>, 3> velocity; // Array for x,y,z values (local and global) including vectors for bins CommVar> numMols; ekin2.local.resize(_numBinsGlobal); numMols.local.resize(_numBinsGlobal); - velocity[0].local.resize(_numBinsGlobal); - velocity[1].local.resize(_numBinsGlobal); - velocity[2].local.resize(_numBinsGlobal); - ekin2.global.resize(_numBinsGlobal); numMols.global.resize(_numBinsGlobal); - velocity[0].global.resize(_numBinsGlobal); - velocity[1].global.resize(_numBinsGlobal); - velocity[2].global.resize(_numBinsGlobal); - for (unsigned d = 0; d < 3; d++) { + std::fill(ekin2.local.begin(), ekin2.local.end(), 0.0); + std::fill(numMols.local.begin(), numMols.local.end(), 0); + std::fill(ekin2.global.begin(), ekin2.global.end(), 0.0); + std::fill(numMols.global.begin(), numMols.global.end(), 0); + + for (int d = 0; d < 3; d++) { regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); } @@ -90,143 +104,110 @@ void ChemPotSampling::endStep(ParticleContainer *particleContainer, DomainDecomp for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { // sample density profile double ry = pit->r(1); - uint16_t index = static_cast(ry/_binwidth); // Index of bin - - _numMoleculesSum.local.at(index) += 1; - - double v[3]; - v[0] = pit->v(0); - v[1] = pit->v(1); - v[2] = pit->v(2); - - ekin2.local.at(index) += pit->U_trans_2() + pit->U_rot_2(); - - velocity[0].local.at(index) += v[0]; - velocity[1].local.at(index) += v[1]; - velocity[2].local.at(index) += v[2]; + uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin numMols.local.at(index) += 1; + ekin2.local.at(index) += pit->U_trans_2() + pit->U_rot_2(); } #ifdef ENABLE_MPI - MPI_Reduce(numMols.local.data(), numMols.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(ekin2.local.data(), ekin2.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(velocity[0].local.data(), velocity[0].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(velocity[1].local.data(), velocity[1].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(velocity[2].local.data(), velocity[2].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Allreduce(numMols.local.data(), numMols.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(ekin2.local.data(), ekin2.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); #else for (unsigned int i = 0; i < _numBinsGlobal; i++) { numMols.global.at(i) = numMols.local.at(i); ekin2.global.at(i) = ekin2.local.at(i); - velocity[0].global.at(i) = velocity[0].local.at(i); - velocity[1].global.at(i) = velocity[1].local.at(i); - velocity[2].global.at(i) = velocity[2].local.at(i); } #endif - std::vector temperatureStep; - temperatureStep.resize(_numBinsGlobal); + std::vector temperatureStep(_numBinsGlobal, 0.0); for (uint16_t i = 0; i < _numBinsGlobal; i++) { - double vDrift2 = (velocity[0].global.at(i) * velocity[0].global.at(i) - + velocity[1].global.at(i) * velocity[1].global.at(i) - + velocity[2].global.at(i) * velocity[2].global.at(i))/numMols.global.at(i); - // Temperature in the present sampling step - cout << "velo " << velocity[0].global.at(i) << " " << velocity[1].global.at(i) << " " << velocity[2].global.at(i) << std::endl; - temperatureStep.at(i) = (ekin2.global.at(i) - vDrift2*vDrift2*mass)/(numMols.global.at(i)*3); - cout << "vDrift2 " << vDrift2 << " ekin2 " << ekin2.global.at(i) << " 3*numMols " << numMols.global.at(i)*3 << " T " << temperatureStep.at(i) << std::endl; + temperatureStep.at(i) = ekin2.global.at(i)/(numMols.global.at(i)*3); // Drift does not seem to play a role + _temperatureSumGlobal.at(i) += temperatureStep.at(i); + _numMoleculesSumGlobal.at(i) += numMols.global.at(i); } -cout << "temperatureStep "; -for (auto ele : temperatureStep) { - cout << ele << " "; -} -cout << std::endl; - // Insert particles in lattice structure and sample chem. pot. - double dX = 1.0; - double dZ = dX; - double dY = 1.0; -/* - for (double iY = regionLowCorner[1]; iY < regionHighCorner[1]; iY += dY) { - uint16_t index = static_cast(iY/_binwidth); // Index of bin - - for (double iX = regionLowCorner[0]; iX < regionHighCorner[0]; iX += dX) { - for (double iZ = regionLowCorner[2]; iZ < regionHighCorner[2]; iZ += dZ) { - _mTest.setr(0,iX); - _mTest.setr(1,iY); - _mTest.setr(2,iZ); - double deltaUpot = particleContainer->getEnergy(&particlePairsHandler, &_mTest, *_cellProcessor); - // cout << "Inserting molecule at " << _mTest.r(0) << " " << _mTest.r(1) << " " << _mTest.r(2) << " ; dU = " << deltaUpot << " index " << index << std::endl; + std::vector dX(_numBinsGlobal, 0.0); + std::vector dY(_numBinsGlobal, 0.0); + std::vector dZ(_numBinsGlobal, 0.0); + for (uint16_t i = 0; i < _numBinsGlobal; i++) { + const unsigned long nTest = _factorNumTest*numMols.global.at(i); + const unsigned long nY = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[0]),(1./3.))); + dY.at(i) = _binwidth/nY; + const unsigned long nX = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[0]),(1./3.))); + dX.at(i) = _globalBoxLength[0]/nX; + const unsigned long nZ = nTest/(nX*nY); + dZ.at(i) = _globalBoxLength[2]/nZ; + } + + double rY = regionLowCorner[1]+0.5*dY.at(0); + while (rY < regionHighCorner[1]) { + uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin + + double rX = regionLowCorner[0]+0.5*dX.at(0); + while (rX < regionHighCorner[0]) { + + double rZ = regionLowCorner[2]+0.5*dZ.at(0); + while (rZ < regionHighCorner[2]) { + _mTest.setr(0,rX); + _mTest.setr(1,rY); + _mTest.setr(2,rZ); + double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + global_log->debug() << "Inserting molecule at x,y,z = " << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; dU = " << deltaUpot << " ; index = " << index << std::endl; _chemPotSum.local.at(index) += exp(-deltaUpot/temperatureStep.at(index)); + rZ += dZ.at(index); } + rX += dX.at(index); } - + rY += dY.at(index); } -*/ - cout << "CPS 6" << std::endl; - // sampling starts after initial timestep and with respect to write frequency + // Write out data if ( (simstep - _startSampling) % _writeFrequency != 0 ) { return; } - if ( (simstep <= _startSampling) or (simstep > _stopSampling)) { - return; - } - // do not write data directly after (re)start - if ( simstep == global_simulation->getNumInitTimesteps() ) { - return; - } #ifdef ENABLE_MPI - MPI_Reduce(_numMoleculesSum.local.data(), _numMoleculesSum.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(_temperatureSum.local.data(), _temperatureSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(_chemPotSum.local.data(), _chemPotSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); #else for (unsigned int i = 0; i < _numBinsGlobal; i++) { - _numMoleculesSum.global.at(i) = _numMoleculesSum.local.at(i); - _temperatureSum.global.at(i) = _temperatureSum.local.at(i); _chemPotSum.global.at(i) = _chemPotSum.local.at(i); } #endif -cout << "CPS 7" << std::endl; - - if (domainDecomp->getRank() != 0) { + if (domainDecomp->getRank() == 0) { // write output std::stringstream ss; ss << std::setw(9) << std::setfill('0') << simstep; const std::string fname = "ChemPotSampling_TS"+ss.str()+".dat"; std::ofstream ofs; ofs.open(fname, std::ios::out); - ofs << setw(12) << "pos" << setw(12) << "numMols" << setw(12) << "density" << setw(12) << "temperature" << setw(12) << "chemPot" << std::endl; + ofs << setw(24) << "pos" << setw(24) << "numMols" << setw(24) << "density" << setw(24) << "temperature" << setw(24) << "chemPot" << std::endl; for (uint16_t i = 0; i < _numBinsGlobal; i++) { - double T = _temperatureSum.global.at(i)/_writeFrequency; + double T = _temperatureSumGlobal.at(i)/_writeFrequency; double chemPot = -T*log(_chemPotSum.global.at(i)/_writeFrequency); + double numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_writeFrequency; // Not an int as particles change bin during simulation ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _numMoleculesSum.global.at(i)/_writeFrequency; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _numMoleculesSum.global.at(i)/(_writeFrequency*_slabVolume); + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep/_slabVolume; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot << std::endl; } ofs.close(); } - cout << "CPS 8" << std::endl; - // reset vectors to zero resetVectors(); - - cout << "CPS 9" << std::endl; } // Filling vectors with zeros void ChemPotSampling::resetVectors() { - std::fill(_chemPotSum.local.begin(), _chemPotSum.local.end(), 0); - std::fill(_temperatureSum.local.begin(), _temperatureSum.local.end(), 0); - std::fill(_numMoleculesSum.local.begin(), _numMoleculesSum.local.end(), 0); + std::fill(_chemPotSum.local.begin(), _chemPotSum.local.end(), 0.0); + std::fill(_chemPotSum.global.begin(), _chemPotSum.global.end(), 0.0); - std::fill(_chemPotSum.global.begin(), _chemPotSum.global.end(), 0); - std::fill(_temperatureSum.global.begin(), _temperatureSum.global.end(), 0); - std::fill(_numMoleculesSum.global.begin(), _numMoleculesSum.global.end(), 0); + std::fill(_temperatureSumGlobal.begin(), _temperatureSumGlobal.end(), 0.0); + std::fill(_numMoleculesSumGlobal.begin(), _numMoleculesSumGlobal.end(), 0); } \ No newline at end of file diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index 2c2244a01c..4ce5268d3b 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -27,21 +27,23 @@ class ChemPotSampling : public PluginBase{ private: - float _binwidth {1.0f}; + float _binwidth; + float _factorNumTest; + unsigned long _startSampling; + unsigned long _writeFrequency; + unsigned long _stopSampling; + uint16_t _numBinsGlobal; - double _globalBoxLengthY; + double _globalBoxLength[3]; double _slabVolume; - unsigned long _startSampling {0ul}; - unsigned long _writeFrequency {10000ul}; - unsigned long _stopSampling {1000000000ul}; - - // Accumulated over + // Accumulated over _writeFrequency CommVar> _chemPotSum; - CommVar> _temperatureSum; - CommVar> _numMoleculesSum; + std::vector _temperatureSumGlobal; + std::vector _numMoleculesSumGlobal; CellProcessor* _cellProcessor; + ParticlePairsHandler* _particlePairsHandler; Molecule _mTest; void resetVectors(); @@ -50,20 +52,20 @@ class ChemPotSampling : public PluginBase{ ChemPotSampling(); ~ChemPotSampling(); - void init(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* domain) override; + void init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) override; void readXML (XMLfileUnits& xmlconfig) override; void endStep( - ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, - Domain *domain, unsigned long simstep) override; + ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, + Domain* /* domain */, unsigned long simstep) override; - void finish(ParticleContainer *particleContainer, - DomainDecompBase *domainDecomp, Domain *domain) override {} + void finish(ParticleContainer* /* particleContainer */, + DomainDecompBase* /* domainDecomp */, Domain* /* domain */) override {} - std::string getPluginName()override {return std::string("ChemPotSampling");} + std::string getPluginName() override { return std::string("ChemPotSampling"); } - static PluginBase* createInstance(){return new ChemPotSampling();} + static PluginBase* createInstance() { return new ChemPotSampling(); } }; From 9df491a4a0fa18e2797349259b95928792b08662 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 1 Mar 2022 17:22:10 +0100 Subject: [PATCH 04/76] Fixes in DriftCtrl; Re-enable drift control in all directions --- src/plugins/NEMD/DriftCtrl.cpp | 105 +++++++++++++-------------------- 1 file changed, 40 insertions(+), 65 deletions(-) diff --git a/src/plugins/NEMD/DriftCtrl.cpp b/src/plugins/NEMD/DriftCtrl.cpp index 9ffed308b0..df623f3b8d 100644 --- a/src/plugins/NEMD/DriftCtrl.cpp +++ b/src/plugins/NEMD/DriftCtrl.cpp @@ -23,7 +23,7 @@ DriftCtrl::~DriftCtrl() void DriftCtrl::init(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* domain) { - global_log->debug() << "DriftCtrl enabled in range yl,yr=" << _range.yl << "," << _range.yr << std::endl; + global_log->debug() << "[DriftCtrl] Enabled in range yl,yr=" << _range.yl << "," << _range.yr << std::endl; // number of components uint32_t numComponents = domain->getNumberOfComponents() + 1; // + 1 because component 0 stands for all components @@ -55,40 +55,28 @@ void DriftCtrl::init(ParticleContainer* particleContainer, DomainDecompBase* dom _sampling.at(cid).momentum.at(2).local.at(yPosID) = 0.; } } - global_log->info() << "DriftCtrl: Init data structures for " << numComponents << " components." << std::endl; + global_log->info() << "[DriftCtrl] Init data structures for " << numComponents << " components." << std::endl; // init files uint64_t simstep = global_simulation->getSimulationStep(); { - // construct filename - std::stringstream fnamestream; - fnamestream << "DriftCtrl_drift.dat"; - - std::ofstream ofs(fnamestream.str().c_str(), std::ios::out); - std::stringstream outputstream; - - outputstream << " simstep"; + const std::string fname = "DriftCtrl_drift.dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::out); + ofs << " simstep"; for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) - outputstream << " bin" << fill_width('0', 4) << yPosID; - outputstream << std::endl; - - ofs << outputstream.str(); + ofs << " bin" << fill_width('0', 4) << yPosID; + ofs << std::endl; ofs.close(); } { - // construct filename - std::stringstream fnamestream; - fnamestream << "DriftCtrl_numParticles.dat"; - - std::ofstream ofs(fnamestream.str().c_str(), std::ios::out); - std::stringstream outputstream; - - outputstream << " simstep"; + const std::string fname = "DriftCtrl_numParticles.dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::out); + ofs << " simstep"; for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) - outputstream << " bin" << fill_width('0', 4) << yPosID; - outputstream << std::endl; - - ofs << outputstream.str(); + ofs << " bin" << fill_width('0', 4) << yPosID; + ofs << std::endl; ofs.close(); } } @@ -108,7 +96,7 @@ void DriftCtrl::readXML(XMLfileUnits& xmlconfig) _range.yr = 100.; xmlconfig.getNodeValue("range/yl", _range.yl); xmlconfig.getNodeValue("range/yr", _range.yr); - global_log->info() << "DriftCtrl enabled in range yl,yr=" << _range.yl << "," << _range.yr << std::endl; + global_log->info() << "[DriftCtrl] Enabled in range yl,yr=" << _range.yl << "," << _range.yr << std::endl; _range.width = _range.yr - _range.yl; // subdivision _range.subdivision.binWidth.init = 10.; @@ -129,7 +117,7 @@ void DriftCtrl::readXML(XMLfileUnits& xmlconfig) xmlconfig.getNodeValue("target/drift/vx", _target.drift.at(0)); xmlconfig.getNodeValue("target/drift/vy", _target.drift.at(1)); xmlconfig.getNodeValue("target/drift/vz", _target.drift.at(2)); - global_log->info() << "DriftCtrl: target drift vx,vy,vz=" + global_log->info() << "[DriftCtrl] Target drift vx,vy,vz=" << _target.drift.at(0) << "," << _target.drift.at(1) << "," << _target.drift.at(2) << ", cid=" << _target.cid<< endl; } @@ -146,10 +134,10 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB if(yPos <= _range.yl || yPos > _range.yr) continue; - uint32_t cid_zb = it->componentid(); - uint32_t cid_ub = cid_zb+1; - uint32_t yPosID = floor( (yPos-_range.yl) / _range.subdivision.binWidth.actual); - double mass = 1.; //TODO: get mass + const uint32_t cid_zb = it->componentid(); + const uint32_t cid_ub = cid_zb+1; + const uint32_t yPosID = floor( (yPos-_range.yl) / _range.subdivision.binWidth.actual); + const double mass = it->mass(); std::array p; // momentum p.at(0) = it->v(0) * mass; p.at(1) = it->v(1) * mass; @@ -228,16 +216,17 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB continue; // check if target component - uint32_t cid_zb = it->componentid(); - uint32_t cid_ub = cid_zb+1; - if(cid_ub != _target.cid) + const uint32_t cid_zb = it->componentid(); + const uint32_t cid_ub = cid_zb+1; + if ((cid_ub != _target.cid) and (_target.cid != 0)) { continue; + } uint32_t yPosID = floor( (yPos-_range.yl) / _range.subdivision.binWidth.actual); - - //~ it->setv(0, it->v(0) + _sampling.at(cid_ub).mom_corr.at(0).at(yPosID) ); - it->setv(1, it->v(1) + _sampling.at(cid_ub).mom_corr.at(1).at(yPosID) ); - //~ it->setv(2, it->v(2) + _sampling.at(cid_ub).mom_corr.at(2).at(yPosID) ); + const double mass = it->mass(); + it->setv(0, it->v(0) + _sampling.at(cid_ub).mom_corr.at(0).at(yPosID)/mass ); + it->setv(1, it->v(1) + _sampling.at(cid_ub).mom_corr.at(1).at(yPosID)/mass ); + it->setv(2, it->v(2) + _sampling.at(cid_ub).mom_corr.at(2).at(yPosID)/mass ); } } @@ -245,37 +234,23 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB if(simstep % _control.freq.write == 0 && nRank == 0) { { - // construct filename - std::stringstream fnamestream; - fnamestream << "DriftCtrl_drift.dat"; - - std::ofstream ofs(fnamestream.str().c_str(), std::ios::app); - std::stringstream outputstream; - //~ outputstream << " simstep" << " vy" << " vz" << std::endl; - - outputstream << setw(12) << simstep; + const std::string fname = "DriftCtrl_drift.dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::app); + ofs << setw(12) << simstep; for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) - outputstream << FORMAT_SCI_MAX_DIGITS << _sampling.at(_target.cid).momentum.at(1).global.at(yPosID); - outputstream << std::endl; - - ofs << outputstream.str(); + ofs << FORMAT_SCI_MAX_DIGITS << _sampling.at(_target.cid).momentum.at(1).global.at(yPosID); + ofs << std::endl; ofs.close(); } { - // construct filename - std::stringstream fnamestream; - fnamestream << "DriftCtrl_numParticles.dat"; - - std::ofstream ofs(fnamestream.str().c_str(), std::ios::app); - std::stringstream outputstream; - //~ outputstream << " simstep" << " vy" << " vz" << std::endl; - - outputstream << setw(12) << simstep; + const std::string fname = "DriftCtrl_numParticles.dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::app); + ofs << setw(12) << simstep; for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) - outputstream << setw(12) << _sampling.at(_target.cid).numParticles.global.at(yPosID); - outputstream << std::endl; - - ofs << outputstream.str(); + ofs << setw(12) << _sampling.at(_target.cid).numParticles.global.at(yPosID); + ofs << std::endl; ofs.close(); } } From b32c7261bbc25caa7715521763777978cbb8581b Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 1 Mar 2022 17:23:06 +0100 Subject: [PATCH 05/76] Get rid of comparison warning --- src/utils/AlignedArray.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/AlignedArray.h b/src/utils/AlignedArray.h index 002be6dc13..d71148c50a 100644 --- a/src/utils/AlignedArray.h +++ b/src/utils/AlignedArray.h @@ -114,7 +114,7 @@ class AlignedArray { mardyn_assert(n >= -2); size_t endPrefetch; - const int stride = _round_up(1); + const size_t stride = _round_up(1); switch(n) { case -1: From 114d0be5478a0aa44f155cc18dc1abcd7c0696a7 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 1 Mar 2022 22:19:03 +0100 Subject: [PATCH 06/76] Add temperature sampling including drift --- src/plugins/ChemPotSampling.cpp | 48 ++++++++++++++++++++++++++------- src/plugins/ChemPotSampling.h | 1 + 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index b73adc40a9..d8c42b0698 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -19,7 +19,7 @@ ChemPotSampling::ChemPotSampling() _factorNumTest(4.0f), _startSampling(0ul), _writeFrequency(5000ul), - _stopSampling(_simulation.getNumTimesteps()) + _stopSampling(1000000000ul) {} ChemPotSampling::~ChemPotSampling() {} @@ -32,7 +32,7 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec _numBinsGlobal = static_cast(_globalBoxLength[1]/_binwidth); if (_globalBoxLength[1]/_binwidth != static_cast(_numBinsGlobal)) { - global_log -> error() << "[ChemPotSampling] Can not divide domain without remainder! Change binwidth" << std::endl; + global_log->error() << "[ChemPotSampling] Can not divide domain without remainder! Change binwidth" << std::endl; Simulation::exit(-1); } _slabVolume = domain->getGlobalLength(0)*domain->getGlobalLength(2)*_binwidth; @@ -41,6 +41,7 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec _chemPotSum.global.resize(_numBinsGlobal); _temperatureSumGlobal.resize(_numBinsGlobal); + _temperatureWithDriftSumGlobal.resize(_numBinsGlobal); _numMoleculesSumGlobal.resize(_numBinsGlobal); // CHANGE OF CELL PROCESSOR DURING SIMULATION??? @@ -61,10 +62,10 @@ void ChemPotSampling::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("numTest", _factorNumTest); // Default: 4.0 xmlconfig.getNodeValue("start", _startSampling); // Default: 0 xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 - xmlconfig.getNodeValue("stop", _stopSampling); // Default: Maximum number of timesteps in simulation + xmlconfig.getNodeValue("stop", _stopSampling); // Default: 1000000000 - global_log -> info() << "[ChemPotSampling] Start:Freq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; - global_log -> info() << "[ChemPotSampling] Binwidth: " << _binwidth << std::endl; + global_log->info() << "[ChemPotSampling] Start:Freq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; + global_log->info() << "[ChemPotSampling] Binwidth: " << _binwidth << std::endl; } void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* /* domain */, @@ -83,6 +84,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp // Accumulated over one sampling step CommVar> ekin2; + std::array>,3> velocity; CommVar> numMols; ekin2.local.resize(_numBinsGlobal); @@ -90,6 +92,13 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp ekin2.global.resize(_numBinsGlobal); numMols.global.resize(_numBinsGlobal); + for (int d = 0; d < 3; d++) { + velocity[d].local.resize(_numBinsGlobal); + velocity[d].global.resize(_numBinsGlobal); + std::fill(velocity[d].local.begin(), velocity[d].local.end(), 0.0); + std::fill(velocity[d].global.begin(), velocity[d].global.end(), 0.0); + } + std::fill(ekin2.local.begin(), ekin2.local.end(), 0.0); std::fill(numMols.local.begin(), numMols.local.end(), 0); std::fill(ekin2.global.begin(), ekin2.global.end(), 0.0); @@ -108,22 +117,37 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp numMols.local.at(index) += 1; ekin2.local.at(index) += pit->U_trans_2() + pit->U_rot_2(); + + velocity[0].local.at(index) += pit->v(0); + velocity[1].local.at(index) += pit->v(1); + velocity[2].local.at(index) += pit->v(2); } #ifdef ENABLE_MPI MPI_Allreduce(numMols.local.data(), numMols.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, MPI_COMM_WORLD); MPI_Allreduce(ekin2.local.data(), ekin2.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(velocity[0].local.data(), velocity[0].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(velocity[1].local.data(), velocity[1].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(velocity[2].local.data(), velocity[2].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); #else for (unsigned int i = 0; i < _numBinsGlobal; i++) { numMols.global.at(i) = numMols.local.at(i); ekin2.global.at(i) = ekin2.local.at(i); + velocity[0].global.at(i) = velocity[0].local.at(i); + velocity[1].global.at(i) = velocity[1].local.at(i); + velocity[2].global.at(i) = velocity[2].local.at(i); } #endif std::vector temperatureStep(_numBinsGlobal, 0.0); for (uint16_t i = 0; i < _numBinsGlobal; i++) { - temperatureStep.at(i) = ekin2.global.at(i)/(numMols.global.at(i)*3); // Drift does not seem to play a role + double veloDrift2 = velocity[0].global.at(i) * velocity[0].global.at(i) + + velocity[1].global.at(i) * velocity[1].global.at(i) + + velocity[2].global.at(i) * velocity[2].global.at(i); + const double ekin2_T = ekin2.global.at(i) - veloDrift2/numMols.global.at(i); + temperatureStep.at(i) = ekin2_T/(numMols.global.at(i)*3.0); _temperatureSumGlobal.at(i) += temperatureStep.at(i); + _temperatureWithDriftSumGlobal.at(i) += ekin2.global.at(i)/(numMols.global.at(i)*3.0); _numMoleculesSumGlobal.at(i) += numMols.global.at(i); } @@ -141,14 +165,16 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp dZ.at(i) = _globalBoxLength[2]/nZ; } - double rY = regionLowCorner[1]+0.5*dY.at(0); + // Index of bin in which the left region boundary (y-dir) is in + uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); + double rY = regionLowCorner[1]+0.5*dY.at(idxStart); while (rY < regionHighCorner[1]) { uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin - double rX = regionLowCorner[0]+0.5*dX.at(0); + double rX = regionLowCorner[0]+0.5*dX.at(idxStart); while (rX < regionHighCorner[0]) { - double rZ = regionLowCorner[2]+0.5*dZ.at(0); + double rZ = regionLowCorner[2]+0.5*dZ.at(idxStart); while (rZ < regionHighCorner[2]) { _mTest.setr(0,rX); _mTest.setr(1,rY); @@ -184,7 +210,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp const std::string fname = "ChemPotSampling_TS"+ss.str()+".dat"; std::ofstream ofs; ofs.open(fname, std::ios::out); - ofs << setw(24) << "pos" << setw(24) << "numMols" << setw(24) << "density" << setw(24) << "temperature" << setw(24) << "chemPot" << std::endl; + ofs << setw(24) << "pos" << setw(24) << "numMols" << setw(24) << "density" << setw(24) << "temperature" << setw(24) << "temp_with_Drift" << setw(24) << "chemPot" << std::endl; for (uint16_t i = 0; i < _numBinsGlobal; i++) { double T = _temperatureSumGlobal.at(i)/_writeFrequency; double chemPot = -T*log(_chemPotSum.global.at(i)/_writeFrequency); @@ -193,6 +219,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep/_slabVolume; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _temperatureWithDriftSumGlobal.at(i)/_writeFrequency; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot << std::endl; } ofs.close(); @@ -209,5 +236,6 @@ void ChemPotSampling::resetVectors() { std::fill(_chemPotSum.global.begin(), _chemPotSum.global.end(), 0.0); std::fill(_temperatureSumGlobal.begin(), _temperatureSumGlobal.end(), 0.0); + std::fill(_temperatureWithDriftSumGlobal.begin(), _temperatureWithDriftSumGlobal.end(), 0.0); std::fill(_numMoleculesSumGlobal.begin(), _numMoleculesSumGlobal.end(), 0); } \ No newline at end of file diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index 4ce5268d3b..abb444a3b5 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -40,6 +40,7 @@ class ChemPotSampling : public PluginBase{ // Accumulated over _writeFrequency CommVar> _chemPotSum; std::vector _temperatureSumGlobal; + std::vector _temperatureWithDriftSumGlobal; std::vector _numMoleculesSumGlobal; CellProcessor* _cellProcessor; From 1d07e557cd2c11ebfaf2def72b07cbdfe8bec08e Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 2 Mar 2022 15:48:22 +0100 Subject: [PATCH 07/76] Add documentation and fixes --- src/plugins/ChemPotSampling.cpp | 4 ++-- src/plugins/ChemPotSampling.h | 8 ++++++-- src/plugins/NEMD/RegionSampling.cpp | 6 +++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index d8c42b0698..ed84dd3b9f 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -18,7 +18,7 @@ ChemPotSampling::ChemPotSampling() _binwidth(1.0f), _factorNumTest(4.0f), _startSampling(0ul), - _writeFrequency(5000ul), + _writeFrequency(10000ul), _stopSampling(1000000000ul) {} @@ -50,7 +50,7 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec _particlePairsHandler = new ParticlePairs2PotForceAdapter(*domain); // MolID is maximum possible number minus rank to prevent duplicate IDs // Always insert molecule of first component - const unsigned long molID = std::numeric_limits::max()-static_cast(domainDecomp->getRank()); + const unsigned long molID = std::numeric_limits::max() - static_cast(domainDecomp->getRank()); _mTest = Molecule(molID, &_simulation.getEnsemble()->getComponents()->at(0)); resetVectors(); diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index abb444a3b5..0101e7bdc6 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -17,10 +17,14 @@ /** @brief * Plugin: can be enabled via config.xml
* -* Samples chemical potential binwise in y-direction ONLY FOR ONE-CENTERED LJ PARTICLES +* Samples chemical potential binwise in y-direction for one component systems * \code{.xml} * -* 1 +* FLOAT + FLOAT + INT + INT + INT * * \endcode */ diff --git a/src/plugins/NEMD/RegionSampling.cpp b/src/plugins/NEMD/RegionSampling.cpp index ee6457400f..499c510d2b 100644 --- a/src/plugins/NEMD/RegionSampling.cpp +++ b/src/plugins/NEMD/RegionSampling.cpp @@ -1514,7 +1514,7 @@ void SampleRegion::writeDataProfiles(DomainDecompBase* domainDecomp, unsigned lo return; // sampling starts after initial timestep (_initSamplingProfiles) and with respect to write frequency (_writeFrequencyProfiles) - if( simstep <= _initSamplingProfiles ) + if( (simstep <= _initSamplingProfiles) or (simstep > _stopSamplingProfiles) ) return; if( (simstep - _initSamplingProfiles) % _writeFrequencyProfiles != 0 ) @@ -1677,7 +1677,7 @@ void SampleRegion::writeDataVDF(DomainDecompBase* domainDecomp, unsigned long si return; // sampling starts after initial timestep (_initSamplingVDF) and with respect to write frequency (_writeFrequencyVDF) - if( simstep <= _initSamplingVDF ) + if( (simstep <= _initSamplingVDF) or (simstep > _stopSamplingVDF) ) return; if( (simstep - _initSamplingVDF) % _writeFrequencyVDF != 0 ) @@ -1802,7 +1802,7 @@ void SampleRegion::writeDataFieldYR(DomainDecompBase* domainDecomp, unsigned lon return; // sampling starts after initial timestep (_initSamplingFieldYR) and with respect to write frequency (_writeFrequencyFieldYR) - if( simstep >= _stopSamplingFieldYR or simstep <= _initSamplingFieldYR ) + if( (simstep <= _initSamplingFieldYR) or (simstep > _stopSamplingFieldYR) ) return; if( (simstep - _initSamplingFieldYR) % _writeFrequencyFieldYR != 0 ) From a6ffa3376da625112f24a5b116b598231bff3008 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 3 Mar 2022 11:12:01 +0100 Subject: [PATCH 08/76] Minor changes for improved usability --- src/plugins/ChemPotSampling.cpp | 5 +++-- src/plugins/ChemPotSampling.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index ed84dd3b9f..e119e72c2d 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -59,13 +59,14 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec void ChemPotSampling::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("binwidth", _binwidth); // Default: 1.0 - xmlconfig.getNodeValue("numTest", _factorNumTest); // Default: 4.0 + xmlconfig.getNodeValue("factorNumTest", _factorNumTest); // Default: 4.0 xmlconfig.getNodeValue("start", _startSampling); // Default: 0 xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 xmlconfig.getNodeValue("stop", _stopSampling); // Default: 1000000000 global_log->info() << "[ChemPotSampling] Start:Freq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; global_log->info() << "[ChemPotSampling] Binwidth: " << _binwidth << std::endl; + global_log->info() << "[ChemPotSampling] " << _factorNumTest << " * numParticles will be inserted" << std::endl; } void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* /* domain */, @@ -156,7 +157,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp std::vector dY(_numBinsGlobal, 0.0); std::vector dZ(_numBinsGlobal, 0.0); for (uint16_t i = 0; i < _numBinsGlobal; i++) { - const unsigned long nTest = _factorNumTest*numMols.global.at(i); + const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMols.global.at(i)); const unsigned long nY = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[0]),(1./3.))); dY.at(i) = _binwidth/nY; const unsigned long nX = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[0]),(1./3.))); diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index 0101e7bdc6..837af71b45 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -21,7 +21,7 @@ * \code{.xml} * * FLOAT - FLOAT + FLOAT INT INT INT From 0f54e5088748d2271d74fb1ab0e424394b6ffe73 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 3 Mar 2022 11:42:47 +0100 Subject: [PATCH 09/76] Fix in ChemPotSampling --- src/plugins/ChemPotSampling.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index e119e72c2d..5f2a87ff55 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -157,7 +157,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp std::vector dY(_numBinsGlobal, 0.0); std::vector dZ(_numBinsGlobal, 0.0); for (uint16_t i = 0; i < _numBinsGlobal; i++) { - const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMols.global.at(i)); + const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMols.global.at(i))); const unsigned long nY = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[0]),(1./3.))); dY.at(i) = _binwidth/nY; const unsigned long nX = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[0]),(1./3.))); From bb9c0f31e646646f56c30c0593e0a8d8fdd09188 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 3 Mar 2022 14:29:08 +0100 Subject: [PATCH 10/76] Add documentation --- src/plugins/ChemPotSampling.cpp | 52 ++++++++++++++++++--------------- src/plugins/ChemPotSampling.h | 4 +-- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index 5f2a87ff55..d68377fab8 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -35,7 +35,7 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec global_log->error() << "[ChemPotSampling] Can not divide domain without remainder! Change binwidth" << std::endl; Simulation::exit(-1); } - _slabVolume = domain->getGlobalLength(0)*domain->getGlobalLength(2)*_binwidth; + _slabVolume = _globalBoxLength[0]*_globalBoxLength[2]*_binwidth; _chemPotSum.local.resize(_numBinsGlobal); _chemPotSum.global.resize(_numBinsGlobal); @@ -44,9 +44,9 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec _temperatureWithDriftSumGlobal.resize(_numBinsGlobal); _numMoleculesSumGlobal.resize(_numBinsGlobal); - // CHANGE OF CELL PROCESSOR DURING SIMULATION??? + // TODO: CAN CELL PROCESSOR CHANGE DURING SIMULATION??? _cellProcessor = _simulation.getCellProcessor(); - // CHANGE OF PP HANDLER DURING SIMULATION??? + // TODO: CAN PP HANDLER CHANGE DURING SIMULATION??? _particlePairsHandler = new ParticlePairs2PotForceAdapter(*domain); // MolID is maximum possible number minus rank to prevent duplicate IDs // Always insert molecule of first component @@ -72,18 +72,18 @@ void ChemPotSampling::readXML(XMLfileUnits& xmlconfig) { void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* /* domain */, unsigned long simstep) { - // sampling starts after _startSampling and is conducted up to _stopSampling + // Sampling starts after _startSampling and is conducted up to _stopSampling if ((simstep <= _startSampling) or (simstep > _stopSampling)) { return; } - // do not write data directly after (re)start + // Do not write or sample data directly after (re)start in the first step if ( simstep == global_simulation->getNumInitTimesteps() ) { return; } double regionLowCorner[3], regionHighCorner[3]; - // Accumulated over one sampling step + // Accumulated quantities over one sampling step CommVar> ekin2; std::array>,3> velocity; CommVar> numMols; @@ -110,9 +110,8 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); } - // Sample temperature and number of molecules + // Sample temperature, velocity (for drift calculation) and number of molecules for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { - // sample density profile double ry = pit->r(1); uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin @@ -140,16 +139,19 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp } #endif + // Calculate drift and temperature std::vector temperatureStep(_numBinsGlobal, 0.0); for (uint16_t i = 0; i < _numBinsGlobal; i++) { double veloDrift2 = velocity[0].global.at(i) * velocity[0].global.at(i) + velocity[1].global.at(i) * velocity[1].global.at(i) + velocity[2].global.at(i) * velocity[2].global.at(i); - const double ekin2_T = ekin2.global.at(i) - veloDrift2/numMols.global.at(i); - temperatureStep.at(i) = ekin2_T/(numMols.global.at(i)*3.0); - _temperatureSumGlobal.at(i) += temperatureStep.at(i); - _temperatureWithDriftSumGlobal.at(i) += ekin2.global.at(i)/(numMols.global.at(i)*3.0); - _numMoleculesSumGlobal.at(i) += numMols.global.at(i); + if (numMols.global.at(i) > 0) { + const double ekin2_T = ekin2.global.at(i) - veloDrift2/numMols.global.at(i); // Kinetic energy without drift + temperatureStep.at(i) = ekin2_T/(numMols.global.at(i)*3.0); + _temperatureSumGlobal.at(i) += temperatureStep.at(i); + _temperatureWithDriftSumGlobal.at(i) += ekin2.global.at(i)/(numMols.global.at(i)*3.0); + _numMoleculesSumGlobal.at(i) += numMols.global.at(i); + } } // Insert particles in lattice structure and sample chem. pot. @@ -157,16 +159,17 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp std::vector dY(_numBinsGlobal, 0.0); std::vector dZ(_numBinsGlobal, 0.0); for (uint16_t i = 0; i < _numBinsGlobal; i++) { + // Make sure, number of test particles is never zero and number of test particles per direction is at least 1 const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMols.global.at(i))); - const unsigned long nY = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[0]),(1./3.))); + const unsigned long nY = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[2]),(1./3.))); dY.at(i) = _binwidth/nY; - const unsigned long nX = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[0]),(1./3.))); + const unsigned long nX = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); dX.at(i) = _globalBoxLength[0]/nX; const unsigned long nZ = nTest/(nX*nY); dZ.at(i) = _globalBoxLength[2]/nZ; } - // Index of bin in which the left region boundary (y-dir) is in + // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); double rY = regionLowCorner[1]+0.5*dY.at(idxStart); while (rY < regionHighCorner[1]) { @@ -181,9 +184,12 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp _mTest.setr(1,rY); _mTest.setr(2,rZ); double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); - global_log->debug() << "Inserting molecule at x,y,z = " << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + global_log->debug() << "[ChemPotSampling] Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) << " ; dU = " << deltaUpot << " ; index = " << index << std::endl; - _chemPotSum.local.at(index) += exp(-deltaUpot/temperatureStep.at(index)); + if (temperatureStep.at(index) > 1e-9) { + _chemPotSum.local.at(index) += exp(-deltaUpot/temperatureStep.at(index)); + } rZ += dZ.at(index); } rX += dX.at(index); @@ -191,7 +197,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp rY += dY.at(index); } - // Write out data + // Write out data every _writeFrequency step if ( (simstep - _startSampling) % _writeFrequency != 0 ) { return; } @@ -205,13 +211,13 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp #endif if (domainDecomp->getRank() == 0) { - // write output + // Write output file std::stringstream ss; ss << std::setw(9) << std::setfill('0') << simstep; const std::string fname = "ChemPotSampling_TS"+ss.str()+".dat"; std::ofstream ofs; ofs.open(fname, std::ios::out); - ofs << setw(24) << "pos" << setw(24) << "numMols" << setw(24) << "density" << setw(24) << "temperature" << setw(24) << "temp_with_Drift" << setw(24) << "chemPot" << std::endl; + ofs << setw(24) << "pos" << setw(24) << "numMols" << setw(24) << "density" << setw(24) << "temperature" << setw(24) << "temp_with_Drift" << setw(24) << "chemPot_res" << std::endl; for (uint16_t i = 0; i < _numBinsGlobal; i++) { double T = _temperatureSumGlobal.at(i)/_writeFrequency; double chemPot = -T*log(_chemPotSum.global.at(i)/_writeFrequency); @@ -226,12 +232,12 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp ofs.close(); } - // reset vectors to zero + // Reset vectors to zero resetVectors(); } -// Filling vectors with zeros +// Fill vectors with zeros void ChemPotSampling::resetVectors() { std::fill(_chemPotSum.local.begin(), _chemPotSum.local.end(), 0.0); std::fill(_chemPotSum.global.begin(), _chemPotSum.global.end(), 0.0); diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index 837af71b45..238e4e21b7 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -17,7 +17,7 @@ /** @brief * Plugin: can be enabled via config.xml
* -* Samples chemical potential binwise in y-direction for one component systems +* Samples residual chemical potential binwise in y-direction for one component systems using the Widom insertion method * \code{.xml} * * FLOAT @@ -41,7 +41,7 @@ class ChemPotSampling : public PluginBase{ double _globalBoxLength[3]; double _slabVolume; - // Accumulated over _writeFrequency + // Accumulated quantities over _writeFrequency CommVar> _chemPotSum; std::vector _temperatureSumGlobal; std::vector _temperatureWithDriftSumGlobal; From 7324f171cacc4fef026989164401af4f7fd0fe24 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 4 Mar 2022 12:28:00 +0100 Subject: [PATCH 11/76] Fix to avoid zero-division --- src/plugins/ChemPotSampling.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index d68377fab8..57f6c47e28 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -165,7 +165,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp dY.at(i) = _binwidth/nY; const unsigned long nX = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); dX.at(i) = _globalBoxLength[0]/nX; - const unsigned long nZ = nTest/(nX*nY); + const unsigned long nZ = std::max(1ul,nTest/(nX*nY)); dZ.at(i) = _globalBoxLength[2]/nZ; } @@ -186,9 +186,10 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); global_log->debug() << "[ChemPotSampling] Inserting molecule at x,y,z = " << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) - << " ; dU = " << deltaUpot << " ; index = " << index << std::endl; + << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; if (temperatureStep.at(index) > 1e-9) { - _chemPotSum.local.at(index) += exp(-deltaUpot/temperatureStep.at(index)); + double chemPot = exp(-deltaUpot/temperatureStep.at(index)); + if (std::isfinite(chemPot)) { _chemPotSum.local.at(index) += chemPot; } } rZ += dZ.at(index); } @@ -220,7 +221,10 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp ofs << setw(24) << "pos" << setw(24) << "numMols" << setw(24) << "density" << setw(24) << "temperature" << setw(24) << "temp_with_Drift" << setw(24) << "chemPot_res" << std::endl; for (uint16_t i = 0; i < _numBinsGlobal; i++) { double T = _temperatureSumGlobal.at(i)/_writeFrequency; - double chemPot = -T*log(_chemPotSum.global.at(i)/_writeFrequency); + double chemPot = 0.0; + if (_chemPotSum.global.at(i) > 0.0) { + chemPot = -T*log(_chemPotSum.global.at(i)/_writeFrequency); + } double numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_writeFrequency; // Not an int as particles change bin during simulation ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep; From 0da51921b01ad5a8afa37f79346c2871f87dd0b8 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 4 Mar 2022 12:56:46 +0100 Subject: [PATCH 12/76] Fix to have at least one test particle per direction and process --- src/plugins/ChemPotSampling.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index 57f6c47e28..6c417f99ed 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -81,7 +81,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp return; } - double regionLowCorner[3], regionHighCorner[3]; + double regionLowCorner[3], regionHighCorner[3], regionSize[3]; // Accumulated quantities over one sampling step CommVar> ekin2; @@ -108,6 +108,7 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp for (int d = 0; d < 3; d++) { regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); + regionSize[d] = regionHighCorner[d] - regionLowCorner[d]; } // Sample temperature, velocity (for drift calculation) and number of molecules @@ -161,12 +162,15 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp for (uint16_t i = 0; i < _numBinsGlobal; i++) { // Make sure, number of test particles is never zero and number of test particles per direction is at least 1 const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMols.global.at(i))); + const unsigned long nY = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[2]),(1./3.))); - dY.at(i) = _binwidth/nY; + dY.at(i) = std::min(static_cast(_binwidth/nY), static_cast(0.5*regionSize[1])); + const unsigned long nX = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); - dX.at(i) = _globalBoxLength[0]/nX; + dX.at(i) = std::min(static_cast(_globalBoxLength[0]/nX), static_cast(0.5*regionSize[0])); + const unsigned long nZ = std::max(1ul,nTest/(nX*nY)); - dZ.at(i) = _globalBoxLength[2]/nZ; + dZ.at(i) = std::min(static_cast(_globalBoxLength[2]/nZ), static_cast(0.5*regionSize[2])); } // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary From 87c20acd2e3e03c1e7e519d08c4b174e22fb368a Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 9 Mar 2022 18:58:29 +0100 Subject: [PATCH 13/76] Add documentation of getEnergy() method --- src/particleContainer/ParticleContainer.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/particleContainer/ParticleContainer.h b/src/particleContainer/ParticleContainer.h index 384261f2c4..5fab822282 100644 --- a/src/particleContainer/ParticleContainer.h +++ b/src/particleContainer/ParticleContainer.h @@ -202,7 +202,8 @@ class ParticleContainer: public MemoryProfilable { /* TODO: Have a look on this */ virtual void deleteMolecule(ParticleIterator& moleculeIter, const bool& rebuildCaches) = 0; - /* TODO goes into grand canonical ensemble */ + /* TODO goes into grand canonical ensemble + THIS RETURNS THE WRONG ENERGY IF CALLED WHEN HALO CELLS ARE NOT EXISTENT ANYMORE */ virtual double getEnergy(ParticlePairsHandler* particlePairsHandler, Molecule* m1, CellProcessor& cellProcessor) = 0; //! @brief Update the caches of the molecules, that lie in inner cells. From 3fb1fc566f85b1466ecfb597b8a285c229e5df43 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 9 Mar 2022 19:03:49 +0100 Subject: [PATCH 14/76] Fix in MMPLD writer to get correct max. number of time steps --- src/io/MmpldWriter.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/io/MmpldWriter.cpp b/src/io/MmpldWriter.cpp index 5b29392f89..b5f795668f 100644 --- a/src/io/MmpldWriter.cpp +++ b/src/io/MmpldWriter.cpp @@ -46,7 +46,7 @@ std::string MmpldWriter::getOutputFilename() { } MmpldWriter::MmpldWriter() : - _startTimestep(0), _writeFrequency(1000), _stopTimestep(0), _writeBufferSize(32768), _outputPrefix("unknown"), + _startTimestep(0), _writeFrequency(1000), _stopTimestep(1000000000), _writeBufferSize(32768), _outputPrefix("unknown"), _bInitSphereData(ISD_READ_FROM_XML), _bWriteControlPrepared(false), _fileCount(1), _numFramesPerFile(0), _mmpldversion(MMPLD_DEFAULT_VERSION), _vertex_type(MMPLD_VERTEX_FLOAT_XYZ), _color_type(MMPLD_COLOR_NONE) {} @@ -75,7 +75,6 @@ void MmpldWriter::readXML(XMLfileUnits& xmlconfig) xmlconfig.getNodeValue("writecontrol/start", _startTimestep); xmlconfig.getNodeValue("writecontrol/writefrequency", _writeFrequency); xmlconfig.getNodeValue("writecontrol/stop", _stopTimestep); - _stopTimestep = std::min(_stopTimestep, global_simulation->getNumTimesteps()); xmlconfig.getNodeValue("writecontrol/framesperfile", _numFramesPerFile); xmlconfig.getNodeValue("writecontrol/writeBufferSize", _writeBufferSize); global_log->info() << "[MMPLD Writer] Start sampling from simstep: " << _startTimestep << endl; @@ -391,8 +390,8 @@ void MmpldWriter::PrepareWriteControl() _bWriteControlPrepared = true; _startTimestep = ( _startTimestep > _simulation.getNumInitTimesteps() ) ? _startTimestep : _simulation.getNumInitTimesteps(); - if( 0 == _stopTimestep ) - _stopTimestep = _simulation.getNumTimesteps(); + + _stopTimestep = std::min(_stopTimestep, _simulation.getNumTimesteps()); if(_stopTimestep < _startTimestep) { global_log->warning() << "[MMPLD Writer] Invalid time interval. No frames will be recorded!" << endl; From c02c78aeb173f7fda49e4f704eb1dbdb2f6babc4 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 9 Mar 2022 19:07:44 +0100 Subject: [PATCH 15/76] Add possibility to use random insertion and sample every nth step; Fix regarding getEnergy() which should be called in afterForces method --- src/plugins/ChemPotSampling.cpp | 185 ++++++++++++++++++++++++-------- src/plugins/ChemPotSampling.h | 23 ++-- 2 files changed, 153 insertions(+), 55 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index 6c417f99ed..1f3216e4d2 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -9,6 +9,7 @@ #include "particleContainer/ParticleContainer.h" #include "particleContainer/adapter/ParticlePairs2PotForceAdapter.h" +#include "utils/Random.h" #include @@ -19,7 +20,9 @@ ChemPotSampling::ChemPotSampling() _factorNumTest(4.0f), _startSampling(0ul), _writeFrequency(10000ul), - _stopSampling(1000000000ul) + _samplefrequency(50ul), + _stopSampling(1000000000ul), + _lattice(true) {} ChemPotSampling::~ChemPotSampling() {} @@ -40,6 +43,14 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec _chemPotSum.local.resize(_numBinsGlobal); _chemPotSum.global.resize(_numBinsGlobal); + _dUpotInsert.local.resize(_numBinsGlobal); + _dUpotInsert.global.resize(_numBinsGlobal); + + _countNTest.local.resize(_numBinsGlobal); + _countNTest.global.resize(_numBinsGlobal); + + _countSamples.resize(_numBinsGlobal); + _temperatureSumGlobal.resize(_numBinsGlobal); _temperatureWithDriftSumGlobal.resize(_numBinsGlobal); _numMoleculesSumGlobal.resize(_numBinsGlobal); @@ -59,23 +70,39 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec void ChemPotSampling::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("binwidth", _binwidth); // Default: 1.0 + xmlconfig.getNodeValue("lattice", _lattice); // Default: True xmlconfig.getNodeValue("factorNumTest", _factorNumTest); // Default: 4.0 xmlconfig.getNodeValue("start", _startSampling); // Default: 0 xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 + xmlconfig.getNodeValue("samplefrequency", _samplefrequency); // Default: 50 xmlconfig.getNodeValue("stop", _stopSampling); // Default: 1000000000 + string insMethod; + if (_lattice) { + insMethod = "in a lattice"; + } else { + insMethod = "randomly"; + } + + global_log->info() << "[ChemPotSampling] Start:Freq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; global_log->info() << "[ChemPotSampling] Binwidth: " << _binwidth << std::endl; - global_log->info() << "[ChemPotSampling] " << _factorNumTest << " * numParticles will be inserted" << std::endl; + global_log->info() << "[ChemPotSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; } -void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* /* domain */, - unsigned long simstep) { +// Needs to be called when halo cells are still existing +void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) { // Sampling starts after _startSampling and is conducted up to _stopSampling if ((simstep <= _startSampling) or (simstep > _stopSampling)) { return; } + + // Sample only every _samplefrequency + if ( (simstep - _startSampling) % _samplefrequency != 0 ) { + return; + } + // Do not write or sample data directly after (re)start in the first step if ( simstep == global_simulation->getNumInitTimesteps() ) { return; @@ -152,54 +179,98 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp _temperatureSumGlobal.at(i) += temperatureStep.at(i); _temperatureWithDriftSumGlobal.at(i) += ekin2.global.at(i)/(numMols.global.at(i)*3.0); _numMoleculesSumGlobal.at(i) += numMols.global.at(i); + _countSamples.at(i)++; } } - // Insert particles in lattice structure and sample chem. pot. + // Calculate number of test particles per bin std::vector dX(_numBinsGlobal, 0.0); std::vector dY(_numBinsGlobal, 0.0); std::vector dZ(_numBinsGlobal, 0.0); + std::vector nX(_numBinsGlobal, 0ul); + std::vector nY(_numBinsGlobal, 0ul); + std::vector nZ(_numBinsGlobal, 0ul); + unsigned long nTestGlobal {0ul}; + for (uint16_t i = 0; i < _numBinsGlobal; i++) { // Make sure, number of test particles is never zero and number of test particles per direction is at least 1 const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMols.global.at(i))); - const unsigned long nY = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[2]),(1./3.))); - dY.at(i) = std::min(static_cast(_binwidth/nY), static_cast(0.5*regionSize[1])); + nY.at(i) = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[2]),(1./3.))); + dY.at(i) = std::min(static_cast(_binwidth/nY.at(i)), static_cast(0.5*regionSize[1])); - const unsigned long nX = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); - dX.at(i) = std::min(static_cast(_globalBoxLength[0]/nX), static_cast(0.5*regionSize[0])); + nX.at(i) = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); + dX.at(i) = std::min(static_cast(_globalBoxLength[0]/nX.at(i)), static_cast(0.5*regionSize[0])); - const unsigned long nZ = std::max(1ul,nTest/(nX*nY)); - dZ.at(i) = std::min(static_cast(_globalBoxLength[2]/nZ), static_cast(0.5*regionSize[2])); + nZ.at(i) = std::max(1ul,nTest/(nX.at(i)*nY.at(i))); + dZ.at(i) = std::min(static_cast(_globalBoxLength[2]/nZ.at(i)), static_cast(0.5*regionSize[2])); + + nTestGlobal += nTest; } - // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary - uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); - double rY = regionLowCorner[1]+0.5*dY.at(idxStart); - while (rY < regionHighCorner[1]) { - uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin - - double rX = regionLowCorner[0]+0.5*dX.at(idxStart); - while (rX < regionHighCorner[0]) { - - double rZ = regionLowCorner[2]+0.5*dZ.at(idxStart); - while (rZ < regionHighCorner[2]) { - _mTest.setr(0,rX); - _mTest.setr(1,rY); - _mTest.setr(2,rZ); - double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); - global_log->debug() << "[ChemPotSampling] Inserting molecule at x,y,z = " - << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) - << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; - if (temperatureStep.at(index) > 1e-9) { - double chemPot = exp(-deltaUpot/temperatureStep.at(index)); - if (std::isfinite(chemPot)) { _chemPotSum.local.at(index) += chemPot; } + bool _lattice = false; + + if (_lattice) { + // Insert particles in lattice structure and sample chem. pot. + + // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary + uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); + double rY = regionLowCorner[1]+0.5*dY.at(idxStart); + while (rY < regionHighCorner[1]) { + uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin + + double rX = regionLowCorner[0]+0.5*dX.at(idxStart); + while (rX < regionHighCorner[0]) { + + double rZ = regionLowCorner[2]+0.5*dZ.at(idxStart); + while (rZ < regionHighCorner[2]) { + _mTest.setr(0,rX); + _mTest.setr(1,rY); + _mTest.setr(2,rZ); + double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + if (temperatureStep.at(index) > 1e-9) { + double chemPot = exp(-deltaUpot/temperatureStep.at(index)); + if (std::isfinite(chemPot)) { + _chemPotSum.local.at(index) += chemPot; + _dUpotInsert.local.at(index) += deltaUpot; + _countNTest.local.at(index)++; + global_log->debug() << "[ChemPotSampling] Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; + } + } + rZ += dZ.at(index); + } + rX += dX.at(index); + } + rY += dY.at(index); + } + } else { + // Random insertion + // NOTE: This differs from the lattice method as it does not take the local density into account + Random* rnd = new Random(); + + for (unsigned long i = 0; i < nTestGlobal; i++) { + double rX = regionLowCorner[0] + rnd->rnd()*regionSize[0]; + double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; + double rZ = regionLowCorner[2] + rnd->rnd()*regionSize[2]; + const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin + _mTest.setr(0,rX); + _mTest.setr(1,rY); + _mTest.setr(2,rZ); + double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + if (temperatureStep.at(index) > 1e-9) { + double chemPot = exp(-deltaUpot/temperatureStep.at(index)); + if (std::isfinite(chemPot)) { + _chemPotSum.local.at(index) += chemPot; + _dUpotInsert.local.at(index) += deltaUpot; + _countNTest.local.at(index)++; + global_log->debug() << "[ChemPotSampling] Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; } - rZ += dZ.at(index); } - rX += dX.at(index); } - rY += dY.at(index); } // Write out data every _writeFrequency step @@ -209,9 +280,13 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp #ifdef ENABLE_MPI MPI_Reduce(_chemPotSum.local.data(), _chemPotSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(_dUpotInsert.local.data(), _dUpotInsert.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(_countNTest.local.data(), _countNTest.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); #else for (unsigned int i = 0; i < _numBinsGlobal; i++) { _chemPotSum.global.at(i) = _chemPotSum.local.at(i); + _dUpotInsert.global.at(i) = _dUpotInsert.local.at(i); + _countNTest.global.at(i) = _countNTest.local.at(i); } #endif @@ -222,19 +297,29 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp const std::string fname = "ChemPotSampling_TS"+ss.str()+".dat"; std::ofstream ofs; ofs.open(fname, std::ios::out); - ofs << setw(24) << "pos" << setw(24) << "numMols" << setw(24) << "density" << setw(24) << "temperature" << setw(24) << "temp_with_Drift" << setw(24) << "chemPot_res" << std::endl; + ofs << setw(24) << "pos" // Bin position + << setw(24) << "numParts" // Average number of molecules in bin per step + << setw(24) << "density" // Density + << setw(24) << "temperature" // Temperature without drift (i.e. "real" temperature) + << setw(24) << "temp_with_drift" // Temperature with drift + << setw(24) << "numParts_test" // Number of inserted test particles per sample step + << setw(24) << "chemPot_res" // Chemical potential as known as mu_tilde (equals the ms2 value) + << std::endl; for (uint16_t i = 0; i < _numBinsGlobal; i++) { - double T = _temperatureSumGlobal.at(i)/_writeFrequency; + double T = _temperatureSumGlobal.at(i)/_countSamples.at(i); + double numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_countSamples.at(i); // Not an int as particles change bin during simulation double chemPot = 0.0; - if (_chemPotSum.global.at(i) > 0.0) { - chemPot = -T*log(_chemPotSum.global.at(i)/_writeFrequency); + double dUpotIns = 0.0; + if ((_chemPotSum.global.at(i) > 0.0) and (_countNTest.global.at(i) > 0ul)) { + chemPot = -log(_chemPotSum.global.at(i)/_countNTest.global.at(i)) + log(numMolsPerStep/_slabVolume); + dUpotIns = _dUpotInsert.global.at(i)/_countNTest.global.at(i); } - double numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_writeFrequency; // Not an int as particles change bin during simulation ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep/_slabVolume; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _temperatureWithDriftSumGlobal.at(i)/_writeFrequency; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _temperatureWithDriftSumGlobal.at(i)/_countSamples.at(i); + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _countNTest.global.at(i)/_countSamples.at(i); ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot << std::endl; } ofs.close(); @@ -247,10 +332,18 @@ void ChemPotSampling::endStep(ParticleContainer* particleContainer, DomainDecomp // Fill vectors with zeros void ChemPotSampling::resetVectors() { - std::fill(_chemPotSum.local.begin(), _chemPotSum.local.end(), 0.0); - std::fill(_chemPotSum.global.begin(), _chemPotSum.global.end(), 0.0); + std::fill(_chemPotSum.local.begin(), _chemPotSum.local.end(), 0.0f); + std::fill(_chemPotSum.global.begin(), _chemPotSum.global.end(), 0.0f); + + std::fill(_temperatureSumGlobal.begin(), _temperatureSumGlobal.end(), 0.0f); + std::fill(_temperatureWithDriftSumGlobal.begin(), _temperatureWithDriftSumGlobal.end(), 0.0f); + std::fill(_numMoleculesSumGlobal.begin(), _numMoleculesSumGlobal.end(), 0ul); + + std::fill(_countNTest.local.begin(), _countNTest.local.end(), 0ul); + std::fill(_countNTest.global.begin(), _countNTest.global.end(), 0ul); + + std::fill(_countSamples.begin(), _countSamples.end(), 0ul); - std::fill(_temperatureSumGlobal.begin(), _temperatureSumGlobal.end(), 0.0); - std::fill(_temperatureWithDriftSumGlobal.begin(), _temperatureWithDriftSumGlobal.end(), 0.0); - std::fill(_numMoleculesSumGlobal.begin(), _numMoleculesSumGlobal.end(), 0); + std::fill(_dUpotInsert.local.begin(), _dUpotInsert.local.end(), 0.0f); + std::fill(_dUpotInsert.global.begin(), _dUpotInsert.global.end(), 0.0f); } \ No newline at end of file diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index 238e4e21b7..ed6eceb0f9 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -21,10 +21,12 @@ * \code{.xml} * * FLOAT + BOOL FLOAT - INT - INT - INT + INT + INT + INT + INT * * \endcode */ @@ -36,6 +38,8 @@ class ChemPotSampling : public PluginBase{ unsigned long _startSampling; unsigned long _writeFrequency; unsigned long _stopSampling; + unsigned long _samplefrequency; + bool _lattice; uint16_t _numBinsGlobal; double _globalBoxLength[3]; @@ -45,7 +49,10 @@ class ChemPotSampling : public PluginBase{ CommVar> _chemPotSum; std::vector _temperatureSumGlobal; std::vector _temperatureWithDriftSumGlobal; + CommVar> _dUpotInsert; // Average pot. energy of inserted particles std::vector _numMoleculesSumGlobal; + CommVar> _countNTest; + std::vector _countSamples; CellProcessor* _cellProcessor; ParticlePairsHandler* _particlePairsHandler; @@ -61,12 +68,10 @@ class ChemPotSampling : public PluginBase{ void readXML (XMLfileUnits& xmlconfig) override; - void endStep( - ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, - Domain* /* domain */, unsigned long simstep) override; - - void finish(ParticleContainer* /* particleContainer */, - DomainDecompBase* /* domainDecomp */, Domain* /* domain */) override {} + void beforeForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) override {} + void afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) override; + void endStep(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain, unsigned long simstep) override {} + void finish(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain) override {} std::string getPluginName() override { return std::string("ChemPotSampling"); } From f6853bbb629c88351cd229c58d57fb7323f970a4 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 9 Mar 2022 20:29:07 +0100 Subject: [PATCH 16/76] Get rid of warning --- src/utils/AlignedArray.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/AlignedArray.h b/src/utils/AlignedArray.h index d71148c50a..7896df4c45 100644 --- a/src/utils/AlignedArray.h +++ b/src/utils/AlignedArray.h @@ -127,7 +127,7 @@ class AlignedArray { break; default: // prefetch only first n elements - endPrefetch = n; + endPrefetch = static_cast(n); } for (size_t i = 0; i < endPrefetch; i+= stride) { From 355ba31e498963415e7397db8d5e8938b30f414f Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 9 Mar 2022 20:30:33 +0100 Subject: [PATCH 17/76] Clean up and restructuring; include OPENMP --- src/plugins/ChemPotSampling.cpp | 91 +++++++++++++++++---------------- src/plugins/ChemPotSampling.h | 11 ++-- 2 files changed, 52 insertions(+), 50 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index 1f3216e4d2..d3f62684a7 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -43,9 +43,6 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec _chemPotSum.local.resize(_numBinsGlobal); _chemPotSum.global.resize(_numBinsGlobal); - _dUpotInsert.local.resize(_numBinsGlobal); - _dUpotInsert.global.resize(_numBinsGlobal); - _countNTest.local.resize(_numBinsGlobal); _countNTest.global.resize(_numBinsGlobal); @@ -70,7 +67,7 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec void ChemPotSampling::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("binwidth", _binwidth); // Default: 1.0 - xmlconfig.getNodeValue("lattice", _lattice); // Default: True + xmlconfig.getNodeValue("lattice", _lattice); // Default: true xmlconfig.getNodeValue("factorNumTest", _factorNumTest); // Default: 4.0 xmlconfig.getNodeValue("start", _startSampling); // Default: 0 xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 @@ -108,34 +105,36 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe return; } - double regionLowCorner[3], regionHighCorner[3], regionSize[3]; + std::array regionLowCorner; + std::array regionHighCorner; + std::array regionSize; - // Accumulated quantities over one sampling step CommVar> ekin2; - std::array>,3> velocity; + std::array>,3> velocity; // Local and global variable containing summed up velocity in all three directions and for all bins CommVar> numMols; + for (unsigned short d = 0; d < 3; d++) { + regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); + regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); + regionSize[d] = regionHighCorner[d] - regionLowCorner[d]; + } + ekin2.local.resize(_numBinsGlobal); - numMols.local.resize(_numBinsGlobal); ekin2.global.resize(_numBinsGlobal); - numMols.global.resize(_numBinsGlobal); - for (int d = 0; d < 3; d++) { - velocity[d].local.resize(_numBinsGlobal); - velocity[d].global.resize(_numBinsGlobal); - std::fill(velocity[d].local.begin(), velocity[d].local.end(), 0.0); - std::fill(velocity[d].global.begin(), velocity[d].global.end(), 0.0); - } + numMols.local.resize(_numBinsGlobal); + numMols.global.resize(_numBinsGlobal); std::fill(ekin2.local.begin(), ekin2.local.end(), 0.0); std::fill(numMols.local.begin(), numMols.local.end(), 0); std::fill(ekin2.global.begin(), ekin2.global.end(), 0.0); std::fill(numMols.global.begin(), numMols.global.end(), 0); - for (int d = 0; d < 3; d++) { - regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); - regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); - regionSize[d] = regionHighCorner[d] - regionLowCorner[d]; + for (unsigned short d = 0; d < 3; d++) { + velocity[d].local.resize(_numBinsGlobal); + velocity[d].global.resize(_numBinsGlobal); + std::fill(velocity[d].local.begin(), velocity[d].local.end(), 0.0); + std::fill(velocity[d].global.begin(), velocity[d].global.end(), 0.0); } // Sample temperature, velocity (for drift calculation) and number of molecules @@ -208,16 +207,14 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe nTestGlobal += nTest; } - bool _lattice = false; - if (_lattice) { // Insert particles in lattice structure and sample chem. pot. // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary - uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); + const uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); double rY = regionLowCorner[1]+0.5*dY.at(idxStart); while (rY < regionHighCorner[1]) { - uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin + const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin double rX = regionLowCorner[0]+0.5*dX.at(idxStart); while (rX < regionHighCorner[0]) { @@ -227,16 +224,17 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe _mTest.setr(0,rX); _mTest.setr(1,rY); _mTest.setr(2,rZ); - double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); if (temperatureStep.at(index) > 1e-9) { double chemPot = exp(-deltaUpot/temperatureStep.at(index)); if (std::isfinite(chemPot)) { _chemPotSum.local.at(index) += chemPot; - _dUpotInsert.local.at(index) += deltaUpot; _countNTest.local.at(index)++; - global_log->debug() << "[ChemPotSampling] Inserting molecule at x,y,z = " - << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) - << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; +#ifndef NDEBUG + std::cout << "[ChemPotSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; +#endif } } rZ += dZ.at(index); @@ -250,24 +248,36 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe // NOTE: This differs from the lattice method as it does not take the local density into account Random* rnd = new Random(); - for (unsigned long i = 0; i < nTestGlobal; i++) { - double rX = regionLowCorner[0] + rnd->rnd()*regionSize[0]; - double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; - double rZ = regionLowCorner[2] + rnd->rnd()*regionSize[2]; + const float domainShare = (regionSize[0]*regionSize[1]*regionSize[2])/(_globalBoxLength[0]*_globalBoxLength[1]*_globalBoxLength[2]); // Share of volume of present rank from whole domain + const unsigned long nTest = static_cast(domainShare*nTestGlobal); + +#ifdef _OPENMP +#pragma omp parallel +#endif + for (unsigned long i = 0; i < nTest; i++) { + const double rX = regionLowCorner[0] + rnd->rnd()*regionSize[0]; + const double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; + const double rZ = regionLowCorner[2] + rnd->rnd()*regionSize[2]; const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin _mTest.setr(0,rX); _mTest.setr(1,rY); _mTest.setr(2,rZ); - double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); if (temperatureStep.at(index) > 1e-9) { double chemPot = exp(-deltaUpot/temperatureStep.at(index)); if (std::isfinite(chemPot)) { +#ifdef _OPENMP +#pragma omp atomic +#endif + { _chemPotSum.local.at(index) += chemPot; - _dUpotInsert.local.at(index) += deltaUpot; _countNTest.local.at(index)++; - global_log->debug() << "[ChemPotSampling] Inserting molecule at x,y,z = " - << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) - << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; +#ifndef NDEBUG + std::cout << "[ChemPotSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; +#endif + } } } } @@ -280,12 +290,10 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe #ifdef ENABLE_MPI MPI_Reduce(_chemPotSum.local.data(), _chemPotSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(_dUpotInsert.local.data(), _dUpotInsert.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(_countNTest.local.data(), _countNTest.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); #else for (unsigned int i = 0; i < _numBinsGlobal; i++) { _chemPotSum.global.at(i) = _chemPotSum.local.at(i); - _dUpotInsert.global.at(i) = _dUpotInsert.local.at(i); _countNTest.global.at(i) = _countNTest.local.at(i); } #endif @@ -309,10 +317,8 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe double T = _temperatureSumGlobal.at(i)/_countSamples.at(i); double numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_countSamples.at(i); // Not an int as particles change bin during simulation double chemPot = 0.0; - double dUpotIns = 0.0; if ((_chemPotSum.global.at(i) > 0.0) and (_countNTest.global.at(i) > 0ul)) { chemPot = -log(_chemPotSum.global.at(i)/_countNTest.global.at(i)) + log(numMolsPerStep/_slabVolume); - dUpotIns = _dUpotInsert.global.at(i)/_countNTest.global.at(i); } ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep; @@ -343,7 +349,4 @@ void ChemPotSampling::resetVectors() { std::fill(_countNTest.global.begin(), _countNTest.global.end(), 0ul); std::fill(_countSamples.begin(), _countSamples.end(), 0ul); - - std::fill(_dUpotInsert.local.begin(), _dUpotInsert.local.end(), 0.0f); - std::fill(_dUpotInsert.global.begin(), _dUpotInsert.global.end(), 0.0f); } \ No newline at end of file diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index ed6eceb0f9..7176520fbe 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -37,19 +37,18 @@ class ChemPotSampling : public PluginBase{ float _factorNumTest; unsigned long _startSampling; unsigned long _writeFrequency; - unsigned long _stopSampling; unsigned long _samplefrequency; + unsigned long _stopSampling; bool _lattice; uint16_t _numBinsGlobal; - double _globalBoxLength[3]; + std::array _globalBoxLength; double _slabVolume; // Accumulated quantities over _writeFrequency CommVar> _chemPotSum; std::vector _temperatureSumGlobal; std::vector _temperatureWithDriftSumGlobal; - CommVar> _dUpotInsert; // Average pot. energy of inserted particles std::vector _numMoleculesSumGlobal; CommVar> _countNTest; std::vector _countSamples; @@ -68,10 +67,10 @@ class ChemPotSampling : public PluginBase{ void readXML (XMLfileUnits& xmlconfig) override; - void beforeForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) override {} + void beforeForces(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, unsigned long /* simstep */) override {} void afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) override; - void endStep(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain, unsigned long simstep) override {} - void finish(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain) override {} + void endStep(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */, unsigned long /* simstep */) override {} + void finish(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */) override {} std::string getPluginName() override { return std::string("ChemPotSampling"); } From cb12427cdeb52b62d03f1c482a124c418dc56c47 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 10 Mar 2022 11:03:43 +0100 Subject: [PATCH 18/76] Fix in chemical potential sampling --- src/plugins/ChemPotSampling.cpp | 10 +++++----- src/plugins/ChemPotSampling.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index d3f62684a7..75866a3f5c 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -251,8 +251,8 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe const float domainShare = (regionSize[0]*regionSize[1]*regionSize[2])/(_globalBoxLength[0]*_globalBoxLength[1]*_globalBoxLength[2]); // Share of volume of present rank from whole domain const unsigned long nTest = static_cast(domainShare*nTestGlobal); -#ifdef _OPENMP -#pragma omp parallel +#if defined(_OPENMP) + #pragma omp parallel #endif for (unsigned long i = 0; i < nTest; i++) { const double rX = regionLowCorner[0] + rnd->rnd()*regionSize[0]; @@ -266,8 +266,8 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe if (temperatureStep.at(index) > 1e-9) { double chemPot = exp(-deltaUpot/temperatureStep.at(index)); if (std::isfinite(chemPot)) { -#ifdef _OPENMP -#pragma omp atomic +#if defined(_OPENMP) + #pragma omp parallel #endif { _chemPotSum.local.at(index) += chemPot; @@ -349,4 +349,4 @@ void ChemPotSampling::resetVectors() { std::fill(_countNTest.global.begin(), _countNTest.global.end(), 0ul); std::fill(_countSamples.begin(), _countSamples.end(), 0ul); -} \ No newline at end of file +} diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index 7176520fbe..86a11e664c 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -17,7 +17,7 @@ /** @brief * Plugin: can be enabled via config.xml
* -* Samples residual chemical potential binwise in y-direction for one component systems using the Widom insertion method +* Samples residual chemical potential binwise in y-direction for the LJTS fluid (pot. energy corrections not implemented!) using the Widom insertion method * \code{.xml} * * FLOAT From 84debc36d0ae4040b1544a3a4bf98c46acb841c1 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 10 Mar 2022 11:04:22 +0100 Subject: [PATCH 19/76] Minor improvements in DriftCtrl --- src/plugins/NEMD/DriftCtrl.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/plugins/NEMD/DriftCtrl.cpp b/src/plugins/NEMD/DriftCtrl.cpp index df623f3b8d..fd7a02782d 100644 --- a/src/plugins/NEMD/DriftCtrl.cpp +++ b/src/plugins/NEMD/DriftCtrl.cpp @@ -238,8 +238,9 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB std::ofstream ofs; ofs.open(fname, std::ios::app); ofs << setw(12) << simstep; - for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) + for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) { ofs << FORMAT_SCI_MAX_DIGITS << _sampling.at(_target.cid).momentum.at(1).global.at(yPosID); + } ofs << std::endl; ofs.close(); } @@ -248,18 +249,11 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB std::ofstream ofs; ofs.open(fname, std::ios::app); ofs << setw(12) << simstep; - for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) + for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) { ofs << setw(12) << _sampling.at(_target.cid).numParticles.global.at(yPosID); + } ofs << std::endl; ofs.close(); } } } - - - - - - - - From cdd1b252b984abde3fb5b19ae5336626a8390e81 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 10 Mar 2022 14:32:54 +0100 Subject: [PATCH 20/76] Add python script to calculate shear viscosity for LJTS using Lautenschlaeger correlatoin --- tools/ppls1/ppls1/fluids/shear_visco.py | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tools/ppls1/ppls1/fluids/shear_visco.py diff --git a/tools/ppls1/ppls1/fluids/shear_visco.py b/tools/ppls1/ppls1/fluids/shear_visco.py new file mode 100644 index 0000000000..453cc7b8ca --- /dev/null +++ b/tools/ppls1/ppls1/fluids/shear_visco.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +""" +Created on 2022 + +@author: homes +""" + +import numpy as np +import pandas as pd + +#%% Get shear viscosity of LJTS fluid with correlation by Lautenschläger2019 +def eta_lauten(T,rho): + ''' + Get shear viscosity of LJTS fluid (Lautenschläger) + + :param float T: Temperature + :param float rho: Density + :return: float eta_l: Shear viscosity + ''' + + b = 0.5736 + c = 1.38 + d = 2.438 + coeff = np.matrix('0.1786, 0, 0; 0.06529, 1, 0; -1.158, 0, 1; 1.347, 0, 2; 0.3194, -1, 1') + eta_l = b*rho*np.exp(c*rho+((d*(rho**4)-rho)/T)) + for i in range(5): + eta_l = eta_l + coeff[i,0]*(T**(coeff[i,1]))*(rho**(coeff[i,2])) + return eta_l + +if __name__ == '__main__': + print('Running test with LJTS ...') + fluid = 'LJTS' + T = 0.8 + rho = 0.55 + + print('Eta Lautenschlager: '+str(eta_lauten(T,rho))) + From 8d8e1e55a98cfe0aa3b1c3a9a01771de8c124032 Mon Sep 17 00:00:00 2001 From: HomesGH <55833544+HomesGH@users.noreply.github.com> Date: Thu, 10 Mar 2022 15:47:18 +0100 Subject: [PATCH 21/76] Get rid of LGTM python warning --- tools/ppls1/ppls1/fluids/shear_visco.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/ppls1/ppls1/fluids/shear_visco.py b/tools/ppls1/ppls1/fluids/shear_visco.py index 453cc7b8ca..f4e11e6904 100644 --- a/tools/ppls1/ppls1/fluids/shear_visco.py +++ b/tools/ppls1/ppls1/fluids/shear_visco.py @@ -6,7 +6,6 @@ """ import numpy as np -import pandas as pd #%% Get shear viscosity of LJTS fluid with correlation by Lautenschläger2019 def eta_lauten(T,rho): From ba6aa144446c8429f882f73253623a4033e41151 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 11 Mar 2022 17:25:45 +0100 Subject: [PATCH 22/76] Changes in the implementation of the PeTS to get chemical potential (ms2) directly --- ...rbation theory and its applications to.pdf | Bin 1150742 -> 0 bytes tools/ppls1/ppls1/fluids/ljts/petspy/pets.F90 | 47 ++++++++++++++++++ tools/ppls1/ppls1/fluids/ljts/petspy/pets.h | 1 + .../ppls1/fluids/ljts/petspy/pets_args.py | 6 ++- 4 files changed, 52 insertions(+), 2 deletions(-) delete mode 100644 tools/ppls1/ppls1/fluids/ljts/petspy/Equation of state for the Lennard Jones truncated and shifted fluid with a cut off radius of 2 5 based on perturbation theory and its applications to.pdf diff --git a/tools/ppls1/ppls1/fluids/ljts/petspy/Equation of state for the Lennard Jones truncated and shifted fluid with a cut off radius of 2 5 based on perturbation theory and its applications to.pdf b/tools/ppls1/ppls1/fluids/ljts/petspy/Equation of state for the Lennard Jones truncated and shifted fluid with a cut off radius of 2 5 based on perturbation theory and its applications to.pdf deleted file mode 100644 index 321b7e35ebfda993734ca241cd084b5e5c36ecd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150742 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%0DH=vyg;5j= zcdPOxU)bi05^WqsQ>mm7Os1eWkNYL*ctje9qT)*e*Uq+Qn>@_yk}u=FvHtA7{e_9i zb(9RMv?^+8#2Vo%-JChTG6d6SL+$z#YNFi0g&77I*Utj0a=ov=r0m^I7V(N}O*81M z7L8@8$wsu)_qJgnDGZ>fq5|FeuCd6jUQ(hxZgA}eWT+z1eQ<=CxT@|T!f#Q@0@d7< zU4Q}bDq9f^}KT3BfzZVyuVqGp!VAqb{KT<8H7R|A_QsYKb>}W|;TDJy$ zD76&JbaKhn;6iA@<~l@$`qJFBIFj%_Ny5xazSph|qHcz3v#Myf8>DM$h(vE7?7xpx z9Z~mgW!E>Ik`-Z~%KOqU&4mFJJ`%cbZh>_<7C#F8s8d{AR9a*5Zp4-ldIztRptaO9 zBk7Fk-AN-B;K}LF%C#<*hkolm2qHK3>fyzQRly12zAY3YYv@FWO@mJdvol{D4Vb1r z2%*CcO320A8dk1dYj6f zW_X^|2*FSP;Hh1KY$-U_b&ZcG{2J>#g0qVzt>ADsNfc|6*P8gW_|YzvadFi&6c@CT!wUXvTKFv(caD3%_1v7)$~hx_r7#_adpz^X(HD>mE58pFWE?VFe(W> zjgmz*?v)Fc?}_US__7CCta2JD*F7U+tP0MrKF%7%0K6lII!8?Ts0$_-;A>UNef?*R zd4rypVyj)`eEk+77yubTf(|1w!~mxTcV~C5eS`!|Uc}pgZ%}hZoZL8+SuZ_)JDqmE zldng6PVDODvc+5D-Nd9)(KV5V=qkzM5S5Sj_x-nkeI|<#Z`bu&a7O3{AM!9c7VdsC zM$7E<9?zR%fC?H6Fa?L8p{Q#Z;AKP9J~sw9>`a4n?bZtM{DcT}`7h zkMB_|_;9DPC~6KlNUEq{e}*>|wMl#ywzfHuRHZz9TP}BUt!O#DYk6+)h)c4#kiKdL_}dS9eTIrCX-PW*mYjm7ZU5k)fh(HEJ`@%Ee=J4|>O zAhFyyF7#YcbewEU_M}(jhYfuUz|ABofP~wO!#Ft z%_*u%#8|;A?(j(&W&M2;RcWfVvrj#bT~U1x_mX%y)^1zh>9SBtF}IE1d;WavU~Iv> z@q5O;)WE*zlh6*8bJC$v?%7fMth~>xA}Kxl^*Y;m-f$#Qi>rU%7n;6Liy0Fb01+X80d9mD zF5|15lN^&Jj?xUti`#9LiIN8$7)G@UH*Ydsd5_*5L+`ZoC^dVW2rs(daN2isIWd~W z$(r@%wBHUW$0kk4z|+zIUrX0dn^kv*o9#Y$x*TrquECHfj>03(3aK&Oz8>1Qa?4vo z#B4PE{)tNMhXa(l`oURJL2HM$wT4Bg+-mNrM^W)s8JC6XgF?vrX{1HLi$TG)yJe5axs~O%{D1PubDjf&^oe1vud-QNIi2ws6 z8(l^zYn&~aHBUnky#|4IB#!PE)X)de09Wkz4VPo>0Y^uB)yD@cE-CWa*16K&LPC:Iw;%%~Cah@!` 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 z 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

e2uH06q{n$0&1$c*vKjmina>s954FY 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

  • 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%0A-$hyrK={G>mSstwdKResAzW$d0 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 (rho,T) -> (g_ms2) in analogy to ms2 +!==================================================================================================================================! +SUBROUTINE dT2g_PeTS_ms2(g,rho,T) +!----------------------------------------------------------------------------------------------------------------------------------! +! MODULES ! +! insert modules here +!----------------------------------------------------------------------------------------------------------------------------------! +IMPLICIT NONE +! INPUT / OUTPUT VARIABLES +REAL,INTENT(OUT) :: g +REAL,INTENT(IN) :: rho +REAL,INTENT(IN) :: T +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: tau,delta +REAL :: alphai00 +REAL :: alphar00,alphar01 +!=================================================================================================================================== +! calculate reduced variables +tau = Tcrit/T +delta = rho/rhocrit +!IF(delta.LT.0. .OR. tau.LT.0. .OR. T.LT.Tmin(1)) THEN + !RETURN +!ENDIF +IF(T.EQ.0.) THEN + g = Tcrit*R_mass*ig1 + RETURN +ENDIF +! gibbs energy +alphai00 = ALPHA0(tau,delta,0,0) +alphar00 = ALPHAR(tau,delta,0,0) +alphar01 = ALPHAR(tau,delta,0,1) +!g = T*R_mass*((1.0 + delta*alphar01) + (alphai00+alphar00)) +g = ((delta*alphar01) + (alphar00)) + log(rho) +END SUBROUTINE dT2g_PeTS_ms2 + + !==================================================================================================================================! !> (rho,T) -> (phase identifier) !> formula found in diff --git a/tools/ppls1/ppls1/fluids/ljts/petspy/pets.h b/tools/ppls1/ppls1/fluids/ljts/petspy/pets.h index 5e6bd26006..5595478d31 100644 --- a/tools/ppls1/ppls1/fluids/ljts/petspy/pets.h +++ b/tools/ppls1/ppls1/fluids/ljts/petspy/pets.h @@ -64,6 +64,7 @@ #define PP_GWP20 49 /* 20-year global warming potential */ #define PP_GWP500 50 /* 500-year global warming potential */ #define PP_GMASS 51 /* J/kg Mass specific Gibbs energy */ +#define PP_GMASS_MS2 512 /* J/kg Chemical potential in analogy to ms2 */ #define PP_HELMHOLTZMASS 52 /* J/kg Mass specific Helmholtz energy */ #define PP_HELMHOLTZMOLAR 53 /* J/mol Molar specific Helmholtz energy */ #define PP_HH 54 /* Health hazard */ diff --git a/tools/ppls1/ppls1/fluids/ljts/petspy/pets_args.py b/tools/ppls1/ppls1/fluids/ljts/petspy/pets_args.py index 63e5d29f77..583b3b1a19 100644 --- a/tools/ppls1/ppls1/fluids/ljts/petspy/pets_args.py +++ b/tools/ppls1/ppls1/fluids/ljts/petspy/pets_args.py @@ -19,7 +19,9 @@ 'temperature':19, 'internalEnergy':21, 'isochoricHeatCapacity':32, - 'isobaricHeatCapacity':34} + 'isobaricHeatCapacity':34, + 'gibbsEnergy':51, + 'chemicalPot':512} arguments = {'temperature':None, 'density':None, 'pressure':None} @@ -32,7 +34,7 @@ parser.add_argument('-d', '--density', type=float, help='Input: Density') parser.add_argument('-p', '--pressure', type=float, help='Input: Pressure') parser.add_argument('-o', '--output', type=str, required=True, - help='Output, e.g.: temperature, density, pressure, internalEnergy, enthalpy, entropy, isochoricHeatCapacity, isobaricHeatCapacity \n'+ + help='Output, e.g.: temperature, density, pressure, internalEnergy, enthalpy, entropy, isochoricHeatCapacity, isobaricHeatCapacity, gibbsEnergy, chemicalPot \n'+ 'Example: pets_args -T 1.22 -d 0.4 -o pressure') args = parser.parse_args() arguments['temperature'] = args.temperature From 350fb4aadf43251b073d5c96a5990ded5fbd3e03 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 14 Mar 2022 12:04:50 +0100 Subject: [PATCH 23/76] Add function to convert gibbs free energy values --- tools/ppls1/ppls1/fluids/ljts/ljts.py | 55 +++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/tools/ppls1/ppls1/fluids/ljts/ljts.py b/tools/ppls1/ppls1/fluids/ljts/ljts.py index ebf7c9ede7..d68133e2cb 100644 --- a/tools/ppls1/ppls1/fluids/ljts/ljts.py +++ b/tools/ppls1/ppls1/fluids/ljts/ljts.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- -""" -Created on Sun May 31 12:32:59 2020 -@author: mheinen/homes -""" +import numpy as np +import pandas as pd + #%% Get saturated densities by Vrabec et al., Molecular Physics 104 (2006). def rho_vrabec2006(T): @@ -22,6 +21,54 @@ def rho_vrabec2006(T): rhov=rc-a*dt**(1/3.)+b*dt+c*dt**(3/2.) return rhol,rhov +#%% Convert Gibbs free energy from PeTS to ms2 value +def g_PeTS2ms2(g_pets, T, rho): + ''' + Convert Gibbs free energy from PeTS to ms2 value + + :param float g_pets: Gibbs free energy from PeTS + :param float T: Temperature + :param float rho: Density + :return: float g_ms2: Gibbs free energy from ms2 + ''' + + rhocrit = 0.319 + Tcrit = 1.086 + delta0 = (0.001/0.8)/rhocrit + tau0 = Tcrit/0.8 + ig1 = -2.5/tau0 + ig2 = 1.5 - np.log(delta0) - 1.5*np.log(tau0) + tau = Tcrit/T + delta = rho/rhocrit + alphaId = np.log(delta) + 1.5*np.log(tau) + ig1*tau + ig2 + g_res = g_pets/T - 1.0 - alphaId + g_ms2 = g_res + np.log(rho) + return g_ms2 + +#%% Convert Gibbs free energy from ms2 to PeTS value +def g_ms22PeTS(g_ms2, T, rho): + ''' + Convert Gibbs free energy from ms2 to PeTS value + + :param float g_ms2: Gibbs free energy from ms2 + :param float T: Temperature + :param float rho: Density + :return: float g_pets: Gibbs free energy from PeTS + ''' + + rhocrit = 0.319 + Tcrit = 1.086 + delta0 = (0.001/0.8)/rhocrit + tau0 = Tcrit/0.8 + ig1 = -2.5/tau0 + ig2 = 1.5 - np.log(delta0) - 1.5*np.log(tau0) + tau = Tcrit/T + delta = rho/rhocrit + alphaId = np.log(delta) + 1.5*np.log(tau) + ig1*tau + ig2 + g_res = g_ms2 - np.log(rho) + g_pets = T*(1.0 + alphaId + g_res) + return g_pets + if __name__ == "__main__": print('Running test with T = 0.8 ...') T = 0.8 From f9ea3830353baefb0a8e956fa10c3fcec92d5b7a Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 14 Mar 2022 18:26:01 +0100 Subject: [PATCH 24/76] Add checks to prevent invalid operations --- src/plugins/ChemPotSampling.cpp | 38 ++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index 75866a3f5c..5fdbfc92da 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -40,6 +40,11 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec } _slabVolume = _globalBoxLength[0]*_globalBoxLength[2]*_binwidth; + if (_slabVolume < 1e-12) { + global_log->error() << "[ChemPotSampling] Slab volume too small!" << std::endl; + Simulation::exit(-1); + } + _chemPotSum.local.resize(_numBinsGlobal); _chemPotSum.global.resize(_numBinsGlobal); @@ -80,11 +85,14 @@ void ChemPotSampling::readXML(XMLfileUnits& xmlconfig) { } else { insMethod = "randomly"; } - - global_log->info() << "[ChemPotSampling] Start:Freq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; - global_log->info() << "[ChemPotSampling] Binwidth: " << _binwidth << std::endl; - global_log->info() << "[ChemPotSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; + global_log->info() << "[ChemPotSampling] Start:WriteFreq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; + global_log->info() << "[ChemPotSampling] Binwidth: " << _binwidth << " ; Sample frequency: " << _samplefrequency << std::endl; + global_log->info() << "[ChemPotSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; + + if (_samplefrequency > _writeFrequency) { + global_log->warning() << "[ChemPotSampling] Sample frequency is greater than write frequency! " << std::endl; + } } // Needs to be called when halo cells are still existing @@ -126,9 +134,9 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe numMols.global.resize(_numBinsGlobal); std::fill(ekin2.local.begin(), ekin2.local.end(), 0.0); - std::fill(numMols.local.begin(), numMols.local.end(), 0); + std::fill(numMols.local.begin(), numMols.local.end(), 0ul); std::fill(ekin2.global.begin(), ekin2.global.end(), 0.0); - std::fill(numMols.global.begin(), numMols.global.end(), 0); + std::fill(numMols.global.begin(), numMols.global.end(), 0ul); for (unsigned short d = 0; d < 3; d++) { velocity[d].local.resize(_numBinsGlobal); @@ -314,18 +322,24 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe << setw(24) << "chemPot_res" // Chemical potential as known as mu_tilde (equals the ms2 value) << std::endl; for (uint16_t i = 0; i < _numBinsGlobal; i++) { - double T = _temperatureSumGlobal.at(i)/_countSamples.at(i); - double numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_countSamples.at(i); // Not an int as particles change bin during simulation - double chemPot = 0.0; - if ((_chemPotSum.global.at(i) > 0.0) and (_countNTest.global.at(i) > 0ul)) { + double numMolsPerStep {0.0}; // Not an int as particles change bin during simulation + double T {0.0}; + double TDrift {0.0}; + unsigned long numTest {0ul}; + double chemPot {0.0}; + if ((_chemPotSum.global.at(i) > 0.0) and (_countNTest.global.at(i) > 0ul) and (_countSamples.at(i) > 0ul)) { + numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_countSamples.at(i); + T = _temperatureSumGlobal.at(i)/_countSamples.at(i); + TDrift = _temperatureWithDriftSumGlobal.at(i)/_countSamples.at(i); + numTest = _countNTest.global.at(i)/_countSamples.at(i); chemPot = -log(_chemPotSum.global.at(i)/_countNTest.global.at(i)) + log(numMolsPerStep/_slabVolume); } ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep/_slabVolume; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _temperatureWithDriftSumGlobal.at(i)/_countSamples.at(i); - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << _countNTest.global.at(i)/_countSamples.at(i); + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << TDrift; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numTest; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot << std::endl; } ofs.close(); From 0446f65d9c1dc1c069d0d13c6bd8d55513c77af1 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 15 Mar 2022 20:18:19 +0100 Subject: [PATCH 25/76] Abort simulation if xml-includes were not found --- src/utils/xmlfile.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/xmlfile.cpp b/src/utils/xmlfile.cpp index fbf6308d3b..12a2a2270a 100644 --- a/src/utils/xmlfile.cpp +++ b/src/utils/xmlfile.cpp @@ -17,6 +17,7 @@ //#include "utils/Logger.h" #include "rapidxml/rapidxml_print.hpp" #include "String_utils.h" +#include "Simulation.h" //#include // fseek(),fread(); should be included after mpi.h //#ifdef __linux__ @@ -197,7 +198,7 @@ bool XMLfile::initfile_local(const string& filepath) { if(!fstrm) { cerr << "ERROR opening " << filepathTrimmed << endl; clear(); - return false; + Simulation::exit(1); } ifstream::pos_type filesize=fstrm.tellg(); fstrm.close(); fstrm.clear(); From e30785eaae6e33f16e0903f0840cefac032e52e0 Mon Sep 17 00:00:00 2001 From: HomesGH <55833544+HomesGH@users.noreply.github.com> Date: Tue, 15 Mar 2022 20:20:26 +0100 Subject: [PATCH 26/76] Get rid of LGTM warning --- tools/ppls1/ppls1/fluids/ljts/ljts.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/ppls1/ppls1/fluids/ljts/ljts.py b/tools/ppls1/ppls1/fluids/ljts/ljts.py index d68133e2cb..4652ecae4a 100644 --- a/tools/ppls1/ppls1/fluids/ljts/ljts.py +++ b/tools/ppls1/ppls1/fluids/ljts/ljts.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import numpy as np -import pandas as pd #%% Get saturated densities by Vrabec et al., Molecular Physics 104 (2006). From 214db737a9fd65be1c1cc463a4be76047f089766 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 21 Mar 2022 15:21:25 +0100 Subject: [PATCH 27/76] Add debug output --- src/plugins/ChemPotSampling.cpp | 45 +++++++++++++++++++++++++++++++++ src/plugins/ChemPotSampling.h | 6 +++++ 2 files changed, 51 insertions(+) diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp index 5fdbfc92da..41c8918f71 100755 --- a/src/plugins/ChemPotSampling.cpp +++ b/src/plugins/ChemPotSampling.cpp @@ -57,6 +57,13 @@ void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDec _temperatureWithDriftSumGlobal.resize(_numBinsGlobal); _numMoleculesSumGlobal.resize(_numBinsGlobal); + _veloXSumGlobal.resize(_numBinsGlobal); + _veloYSumGlobal.resize(_numBinsGlobal); + _veloZSumGlobal.resize(_numBinsGlobal); + + _ekinSumGlobal.resize(_numBinsGlobal); + _ekinDriftSumGlobal.resize(_numBinsGlobal); + // TODO: CAN CELL PROCESSOR CHANGE DURING SIMULATION??? _cellProcessor = _simulation.getCellProcessor(); // TODO: CAN PP HANDLER CHANGE DURING SIMULATION??? @@ -151,8 +158,11 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin numMols.local.at(index) += 1; + double ekinalt = ekin2.local.at(index); ekin2.local.at(index) += pit->U_trans_2() + pit->U_rot_2(); + //cout << "CP trans+rot " << pit->getID() << " " << ekin2.local.at(index) - ekinalt << " " << pit->U_trans_2()+pit->U_rot_2() << endl; + velocity[0].local.at(index) += pit->v(0); velocity[1].local.at(index) += pit->v(1); velocity[2].local.at(index) += pit->v(2); @@ -184,9 +194,17 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe const double ekin2_T = ekin2.global.at(i) - veloDrift2/numMols.global.at(i); // Kinetic energy without drift temperatureStep.at(i) = ekin2_T/(numMols.global.at(i)*3.0); _temperatureSumGlobal.at(i) += temperatureStep.at(i); + _ekinSumGlobal.at(i) += ekin2_T; + _ekinDriftSumGlobal.at(i) += ekin2.global.at(i); _temperatureWithDriftSumGlobal.at(i) += ekin2.global.at(i)/(numMols.global.at(i)*3.0); _numMoleculesSumGlobal.at(i) += numMols.global.at(i); _countSamples.at(i)++; + _veloXSumGlobal.at(i) += velocity[0].global.at(i); + _veloYSumGlobal.at(i) += velocity[1].global.at(i); + _veloZSumGlobal.at(i) += velocity[2].global.at(i); +// if ((i==1300) and (domainDecomp->getRank() == 0)) { +// cout << simstep << " " << _countSamples.at(i) << " " << temperatureStep.at(i) << " " << numMols.global.at(i) << " " << ekin2_T << " " << ekin2.global.at(i) << " " << veloDrift2/numMols.global.at(i) << endl; + } } } @@ -319,6 +337,12 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe << setw(24) << "temperature" // Temperature without drift (i.e. "real" temperature) << setw(24) << "temp_with_drift" // Temperature with drift << setw(24) << "numParts_test" // Number of inserted test particles per sample step + << setw(24) << "ekin" + << setw(24) << "ekinPlusDrift" + << setw(24) << "T_2" + << setw(24) << "vx" + << setw(24) << "vy" + << setw(24) << "vz" << setw(24) << "chemPot_res" // Chemical potential as known as mu_tilde (equals the ms2 value) << std::endl; for (uint16_t i = 0; i < _numBinsGlobal; i++) { @@ -327,10 +351,18 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe double TDrift {0.0}; unsigned long numTest {0ul}; double chemPot {0.0}; + double vx = 0.0; + double vy = 0.0; + double vz = 0.0; + double T_2 = 0.0; if ((_chemPotSum.global.at(i) > 0.0) and (_countNTest.global.at(i) > 0ul) and (_countSamples.at(i) > 0ul)) { numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_countSamples.at(i); T = _temperatureSumGlobal.at(i)/_countSamples.at(i); + vx = velocity[0].global.at(i)/numMolsPerStep; + vy = velocity[1].global.at(i)/numMolsPerStep; + vz = velocity[2].global.at(i)/numMolsPerStep; TDrift = _temperatureWithDriftSumGlobal.at(i)/_countSamples.at(i); + T_2 = _ekinSumGlobal.at(i)/(3*_numMoleculesSumGlobal.at(i)); numTest = _countNTest.global.at(i)/_countSamples.at(i); chemPot = -log(_chemPotSum.global.at(i)/_countNTest.global.at(i)) + log(numMolsPerStep/_slabVolume); } @@ -340,6 +372,12 @@ void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDe ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << TDrift; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numTest; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << 0.5*_ekinSumGlobal.at(i)/_countSamples.at(i); + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << 0.5*_ekinDriftSumGlobal.at(i)/_countSamples.at(i); + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T_2; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << vx; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << vy; + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << vz; ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot << std::endl; } ofs.close(); @@ -359,6 +397,13 @@ void ChemPotSampling::resetVectors() { std::fill(_temperatureWithDriftSumGlobal.begin(), _temperatureWithDriftSumGlobal.end(), 0.0f); std::fill(_numMoleculesSumGlobal.begin(), _numMoleculesSumGlobal.end(), 0ul); + std::fill(_veloXSumGlobal.begin(), _veloXSumGlobal.end(), 0.0f); + std::fill(_veloYSumGlobal.begin(), _veloYSumGlobal.end(), 0.0f); + std::fill(_veloZSumGlobal.begin(), _veloZSumGlobal.end(), 0.0f); + + std::fill(_ekinSumGlobal.begin(), _ekinSumGlobal.end(), 0.0f); + std::fill(_ekinDriftSumGlobal.begin(), _ekinDriftSumGlobal.end(), 0.0f); + std::fill(_countNTest.local.begin(), _countNTest.local.end(), 0ul); std::fill(_countNTest.global.begin(), _countNTest.global.end(), 0ul); diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h index 86a11e664c..6db9442afa 100755 --- a/src/plugins/ChemPotSampling.h +++ b/src/plugins/ChemPotSampling.h @@ -48,11 +48,17 @@ class ChemPotSampling : public PluginBase{ // Accumulated quantities over _writeFrequency CommVar> _chemPotSum; std::vector _temperatureSumGlobal; + std::vector _veloXSumGlobal; + std::vector _veloYSumGlobal; + std::vector _veloZSumGlobal; std::vector _temperatureWithDriftSumGlobal; std::vector _numMoleculesSumGlobal; CommVar> _countNTest; std::vector _countSamples; + std::vector _ekinSumGlobal; + std::vector _ekinDriftSumGlobal; + CellProcessor* _cellProcessor; ParticlePairsHandler* _particlePairsHandler; Molecule _mTest; From 0554bfb63d3c4118a4dd658c37e2f5e039a5cd14 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 25 Mar 2022 20:20:38 +0100 Subject: [PATCH 28/76] Extended plugin to sample all relevant data --- src/plugins/ChemPotSampling.cpp | 411 --------------- src/plugins/ChemPotSampling.h | 88 ---- src/plugins/ExtendedProfileSampling.cpp | 652 ++++++++++++++++++++++++ src/plugins/ExtendedProfileSampling.h | 101 ++++ 4 files changed, 753 insertions(+), 499 deletions(-) delete mode 100755 src/plugins/ChemPotSampling.cpp delete mode 100755 src/plugins/ChemPotSampling.h create mode 100644 src/plugins/ExtendedProfileSampling.cpp create mode 100755 src/plugins/ExtendedProfileSampling.h diff --git a/src/plugins/ChemPotSampling.cpp b/src/plugins/ChemPotSampling.cpp deleted file mode 100755 index 41c8918f71..0000000000 --- a/src/plugins/ChemPotSampling.cpp +++ /dev/null @@ -1,411 +0,0 @@ -/* - * ChemPotSampling.cpp - * - * Created on: Feb 2022 - * Author: homes - */ - -#include "ChemPotSampling.h" - -#include "particleContainer/ParticleContainer.h" -#include "particleContainer/adapter/ParticlePairs2PotForceAdapter.h" -#include "utils/Random.h" - -#include - - -ChemPotSampling::ChemPotSampling() - : - _binwidth(1.0f), - _factorNumTest(4.0f), - _startSampling(0ul), - _writeFrequency(10000ul), - _samplefrequency(50ul), - _stopSampling(1000000000ul), - _lattice(true) -{} - -ChemPotSampling::~ChemPotSampling() {} - -void ChemPotSampling::init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) { - - _globalBoxLength[0] = domain->getGlobalLength(0); - _globalBoxLength[1] = domain->getGlobalLength(1); - _globalBoxLength[2] = domain->getGlobalLength(2); - - _numBinsGlobal = static_cast(_globalBoxLength[1]/_binwidth); - if (_globalBoxLength[1]/_binwidth != static_cast(_numBinsGlobal)) { - global_log->error() << "[ChemPotSampling] Can not divide domain without remainder! Change binwidth" << std::endl; - Simulation::exit(-1); - } - _slabVolume = _globalBoxLength[0]*_globalBoxLength[2]*_binwidth; - - if (_slabVolume < 1e-12) { - global_log->error() << "[ChemPotSampling] Slab volume too small!" << std::endl; - Simulation::exit(-1); - } - - _chemPotSum.local.resize(_numBinsGlobal); - _chemPotSum.global.resize(_numBinsGlobal); - - _countNTest.local.resize(_numBinsGlobal); - _countNTest.global.resize(_numBinsGlobal); - - _countSamples.resize(_numBinsGlobal); - - _temperatureSumGlobal.resize(_numBinsGlobal); - _temperatureWithDriftSumGlobal.resize(_numBinsGlobal); - _numMoleculesSumGlobal.resize(_numBinsGlobal); - - _veloXSumGlobal.resize(_numBinsGlobal); - _veloYSumGlobal.resize(_numBinsGlobal); - _veloZSumGlobal.resize(_numBinsGlobal); - - _ekinSumGlobal.resize(_numBinsGlobal); - _ekinDriftSumGlobal.resize(_numBinsGlobal); - - // TODO: CAN CELL PROCESSOR CHANGE DURING SIMULATION??? - _cellProcessor = _simulation.getCellProcessor(); - // TODO: CAN PP HANDLER CHANGE DURING SIMULATION??? - _particlePairsHandler = new ParticlePairs2PotForceAdapter(*domain); - // MolID is maximum possible number minus rank to prevent duplicate IDs - // Always insert molecule of first component - const unsigned long molID = std::numeric_limits::max() - static_cast(domainDecomp->getRank()); - _mTest = Molecule(molID, &_simulation.getEnsemble()->getComponents()->at(0)); - - resetVectors(); -} - -void ChemPotSampling::readXML(XMLfileUnits& xmlconfig) { - - xmlconfig.getNodeValue("binwidth", _binwidth); // Default: 1.0 - xmlconfig.getNodeValue("lattice", _lattice); // Default: true - xmlconfig.getNodeValue("factorNumTest", _factorNumTest); // Default: 4.0 - xmlconfig.getNodeValue("start", _startSampling); // Default: 0 - xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 - xmlconfig.getNodeValue("samplefrequency", _samplefrequency); // Default: 50 - xmlconfig.getNodeValue("stop", _stopSampling); // Default: 1000000000 - - string insMethod; - if (_lattice) { - insMethod = "in a lattice"; - } else { - insMethod = "randomly"; - } - - global_log->info() << "[ChemPotSampling] Start:WriteFreq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; - global_log->info() << "[ChemPotSampling] Binwidth: " << _binwidth << " ; Sample frequency: " << _samplefrequency << std::endl; - global_log->info() << "[ChemPotSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; - - if (_samplefrequency > _writeFrequency) { - global_log->warning() << "[ChemPotSampling] Sample frequency is greater than write frequency! " << std::endl; - } -} - -// Needs to be called when halo cells are still existing -void ChemPotSampling::afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) { - - // Sampling starts after _startSampling and is conducted up to _stopSampling - if ((simstep <= _startSampling) or (simstep > _stopSampling)) { - return; - } - - // Sample only every _samplefrequency - if ( (simstep - _startSampling) % _samplefrequency != 0 ) { - return; - } - - // Do not write or sample data directly after (re)start in the first step - if ( simstep == global_simulation->getNumInitTimesteps() ) { - return; - } - - std::array regionLowCorner; - std::array regionHighCorner; - std::array regionSize; - - CommVar> ekin2; - std::array>,3> velocity; // Local and global variable containing summed up velocity in all three directions and for all bins - CommVar> numMols; - - for (unsigned short d = 0; d < 3; d++) { - regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); - regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); - regionSize[d] = regionHighCorner[d] - regionLowCorner[d]; - } - - ekin2.local.resize(_numBinsGlobal); - ekin2.global.resize(_numBinsGlobal); - - numMols.local.resize(_numBinsGlobal); - numMols.global.resize(_numBinsGlobal); - - std::fill(ekin2.local.begin(), ekin2.local.end(), 0.0); - std::fill(numMols.local.begin(), numMols.local.end(), 0ul); - std::fill(ekin2.global.begin(), ekin2.global.end(), 0.0); - std::fill(numMols.global.begin(), numMols.global.end(), 0ul); - - for (unsigned short d = 0; d < 3; d++) { - velocity[d].local.resize(_numBinsGlobal); - velocity[d].global.resize(_numBinsGlobal); - std::fill(velocity[d].local.begin(), velocity[d].local.end(), 0.0); - std::fill(velocity[d].global.begin(), velocity[d].global.end(), 0.0); - } - - // Sample temperature, velocity (for drift calculation) and number of molecules - for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { - double ry = pit->r(1); - uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin - - numMols.local.at(index) += 1; - double ekinalt = ekin2.local.at(index); - ekin2.local.at(index) += pit->U_trans_2() + pit->U_rot_2(); - - //cout << "CP trans+rot " << pit->getID() << " " << ekin2.local.at(index) - ekinalt << " " << pit->U_trans_2()+pit->U_rot_2() << endl; - - velocity[0].local.at(index) += pit->v(0); - velocity[1].local.at(index) += pit->v(1); - velocity[2].local.at(index) += pit->v(2); - } - -#ifdef ENABLE_MPI - MPI_Allreduce(numMols.local.data(), numMols.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, MPI_COMM_WORLD); - MPI_Allreduce(ekin2.local.data(), ekin2.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - MPI_Allreduce(velocity[0].local.data(), velocity[0].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - MPI_Allreduce(velocity[1].local.data(), velocity[1].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - MPI_Allreduce(velocity[2].local.data(), velocity[2].global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); -#else - for (unsigned int i = 0; i < _numBinsGlobal; i++) { - numMols.global.at(i) = numMols.local.at(i); - ekin2.global.at(i) = ekin2.local.at(i); - velocity[0].global.at(i) = velocity[0].local.at(i); - velocity[1].global.at(i) = velocity[1].local.at(i); - velocity[2].global.at(i) = velocity[2].local.at(i); - } -#endif - - // Calculate drift and temperature - std::vector temperatureStep(_numBinsGlobal, 0.0); - for (uint16_t i = 0; i < _numBinsGlobal; i++) { - double veloDrift2 = velocity[0].global.at(i) * velocity[0].global.at(i) - + velocity[1].global.at(i) * velocity[1].global.at(i) - + velocity[2].global.at(i) * velocity[2].global.at(i); - if (numMols.global.at(i) > 0) { - const double ekin2_T = ekin2.global.at(i) - veloDrift2/numMols.global.at(i); // Kinetic energy without drift - temperatureStep.at(i) = ekin2_T/(numMols.global.at(i)*3.0); - _temperatureSumGlobal.at(i) += temperatureStep.at(i); - _ekinSumGlobal.at(i) += ekin2_T; - _ekinDriftSumGlobal.at(i) += ekin2.global.at(i); - _temperatureWithDriftSumGlobal.at(i) += ekin2.global.at(i)/(numMols.global.at(i)*3.0); - _numMoleculesSumGlobal.at(i) += numMols.global.at(i); - _countSamples.at(i)++; - _veloXSumGlobal.at(i) += velocity[0].global.at(i); - _veloYSumGlobal.at(i) += velocity[1].global.at(i); - _veloZSumGlobal.at(i) += velocity[2].global.at(i); -// if ((i==1300) and (domainDecomp->getRank() == 0)) { -// cout << simstep << " " << _countSamples.at(i) << " " << temperatureStep.at(i) << " " << numMols.global.at(i) << " " << ekin2_T << " " << ekin2.global.at(i) << " " << veloDrift2/numMols.global.at(i) << endl; - } - } - } - - // Calculate number of test particles per bin - std::vector dX(_numBinsGlobal, 0.0); - std::vector dY(_numBinsGlobal, 0.0); - std::vector dZ(_numBinsGlobal, 0.0); - std::vector nX(_numBinsGlobal, 0ul); - std::vector nY(_numBinsGlobal, 0ul); - std::vector nZ(_numBinsGlobal, 0ul); - unsigned long nTestGlobal {0ul}; - - for (uint16_t i = 0; i < _numBinsGlobal; i++) { - // Make sure, number of test particles is never zero and number of test particles per direction is at least 1 - const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMols.global.at(i))); - - nY.at(i) = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[2]),(1./3.))); - dY.at(i) = std::min(static_cast(_binwidth/nY.at(i)), static_cast(0.5*regionSize[1])); - - nX.at(i) = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); - dX.at(i) = std::min(static_cast(_globalBoxLength[0]/nX.at(i)), static_cast(0.5*regionSize[0])); - - nZ.at(i) = std::max(1ul,nTest/(nX.at(i)*nY.at(i))); - dZ.at(i) = std::min(static_cast(_globalBoxLength[2]/nZ.at(i)), static_cast(0.5*regionSize[2])); - - nTestGlobal += nTest; - } - - if (_lattice) { - // Insert particles in lattice structure and sample chem. pot. - - // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary - const uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); - double rY = regionLowCorner[1]+0.5*dY.at(idxStart); - while (rY < regionHighCorner[1]) { - const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin - - double rX = regionLowCorner[0]+0.5*dX.at(idxStart); - while (rX < regionHighCorner[0]) { - - double rZ = regionLowCorner[2]+0.5*dZ.at(idxStart); - while (rZ < regionHighCorner[2]) { - _mTest.setr(0,rX); - _mTest.setr(1,rY); - _mTest.setr(2,rZ); - const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); - if (temperatureStep.at(index) > 1e-9) { - double chemPot = exp(-deltaUpot/temperatureStep.at(index)); - if (std::isfinite(chemPot)) { - _chemPotSum.local.at(index) += chemPot; - _countNTest.local.at(index)++; -#ifndef NDEBUG - std::cout << "[ChemPotSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " - << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) - << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; -#endif - } - } - rZ += dZ.at(index); - } - rX += dX.at(index); - } - rY += dY.at(index); - } - } else { - // Random insertion - // NOTE: This differs from the lattice method as it does not take the local density into account - Random* rnd = new Random(); - - const float domainShare = (regionSize[0]*regionSize[1]*regionSize[2])/(_globalBoxLength[0]*_globalBoxLength[1]*_globalBoxLength[2]); // Share of volume of present rank from whole domain - const unsigned long nTest = static_cast(domainShare*nTestGlobal); - -#if defined(_OPENMP) - #pragma omp parallel -#endif - for (unsigned long i = 0; i < nTest; i++) { - const double rX = regionLowCorner[0] + rnd->rnd()*regionSize[0]; - const double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; - const double rZ = regionLowCorner[2] + rnd->rnd()*regionSize[2]; - const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin - _mTest.setr(0,rX); - _mTest.setr(1,rY); - _mTest.setr(2,rZ); - const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); - if (temperatureStep.at(index) > 1e-9) { - double chemPot = exp(-deltaUpot/temperatureStep.at(index)); - if (std::isfinite(chemPot)) { -#if defined(_OPENMP) - #pragma omp parallel -#endif - { - _chemPotSum.local.at(index) += chemPot; - _countNTest.local.at(index)++; -#ifndef NDEBUG - std::cout << "[ChemPotSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " - << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) - << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperatureStep.at(index) << " ; index = " << index << std::endl; -#endif - } - } - } - } - } - - // Write out data every _writeFrequency step - if ( (simstep - _startSampling) % _writeFrequency != 0 ) { - return; - } - -#ifdef ENABLE_MPI - MPI_Reduce(_chemPotSum.local.data(), _chemPotSum.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(_countNTest.local.data(), _countNTest.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); -#else - for (unsigned int i = 0; i < _numBinsGlobal; i++) { - _chemPotSum.global.at(i) = _chemPotSum.local.at(i); - _countNTest.global.at(i) = _countNTest.local.at(i); - } -#endif - - if (domainDecomp->getRank() == 0) { - // Write output file - std::stringstream ss; - ss << std::setw(9) << std::setfill('0') << simstep; - const std::string fname = "ChemPotSampling_TS"+ss.str()+".dat"; - std::ofstream ofs; - ofs.open(fname, std::ios::out); - ofs << setw(24) << "pos" // Bin position - << setw(24) << "numParts" // Average number of molecules in bin per step - << setw(24) << "density" // Density - << setw(24) << "temperature" // Temperature without drift (i.e. "real" temperature) - << setw(24) << "temp_with_drift" // Temperature with drift - << setw(24) << "numParts_test" // Number of inserted test particles per sample step - << setw(24) << "ekin" - << setw(24) << "ekinPlusDrift" - << setw(24) << "T_2" - << setw(24) << "vx" - << setw(24) << "vy" - << setw(24) << "vz" - << setw(24) << "chemPot_res" // Chemical potential as known as mu_tilde (equals the ms2 value) - << std::endl; - for (uint16_t i = 0; i < _numBinsGlobal; i++) { - double numMolsPerStep {0.0}; // Not an int as particles change bin during simulation - double T {0.0}; - double TDrift {0.0}; - unsigned long numTest {0ul}; - double chemPot {0.0}; - double vx = 0.0; - double vy = 0.0; - double vz = 0.0; - double T_2 = 0.0; - if ((_chemPotSum.global.at(i) > 0.0) and (_countNTest.global.at(i) > 0ul) and (_countSamples.at(i) > 0ul)) { - numMolsPerStep = static_cast(_numMoleculesSumGlobal.at(i))/_countSamples.at(i); - T = _temperatureSumGlobal.at(i)/_countSamples.at(i); - vx = velocity[0].global.at(i)/numMolsPerStep; - vy = velocity[1].global.at(i)/numMolsPerStep; - vz = velocity[2].global.at(i)/numMolsPerStep; - TDrift = _temperatureWithDriftSumGlobal.at(i)/_countSamples.at(i); - T_2 = _ekinSumGlobal.at(i)/(3*_numMoleculesSumGlobal.at(i)); - numTest = _countNTest.global.at(i)/_countSamples.at(i); - chemPot = -log(_chemPotSum.global.at(i)/_countNTest.global.at(i)) + log(numMolsPerStep/_slabVolume); - } - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep/_slabVolume; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << TDrift; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numTest; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << 0.5*_ekinSumGlobal.at(i)/_countSamples.at(i); - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << 0.5*_ekinDriftSumGlobal.at(i)/_countSamples.at(i); - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T_2; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << vx; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << vy; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << vz; - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot << std::endl; - } - ofs.close(); - } - - // Reset vectors to zero - resetVectors(); -} - - -// Fill vectors with zeros -void ChemPotSampling::resetVectors() { - std::fill(_chemPotSum.local.begin(), _chemPotSum.local.end(), 0.0f); - std::fill(_chemPotSum.global.begin(), _chemPotSum.global.end(), 0.0f); - - std::fill(_temperatureSumGlobal.begin(), _temperatureSumGlobal.end(), 0.0f); - std::fill(_temperatureWithDriftSumGlobal.begin(), _temperatureWithDriftSumGlobal.end(), 0.0f); - std::fill(_numMoleculesSumGlobal.begin(), _numMoleculesSumGlobal.end(), 0ul); - - std::fill(_veloXSumGlobal.begin(), _veloXSumGlobal.end(), 0.0f); - std::fill(_veloYSumGlobal.begin(), _veloYSumGlobal.end(), 0.0f); - std::fill(_veloZSumGlobal.begin(), _veloZSumGlobal.end(), 0.0f); - - std::fill(_ekinSumGlobal.begin(), _ekinSumGlobal.end(), 0.0f); - std::fill(_ekinDriftSumGlobal.begin(), _ekinDriftSumGlobal.end(), 0.0f); - - std::fill(_countNTest.local.begin(), _countNTest.local.end(), 0ul); - std::fill(_countNTest.global.begin(), _countNTest.global.end(), 0ul); - - std::fill(_countSamples.begin(), _countSamples.end(), 0ul); -} diff --git a/src/plugins/ChemPotSampling.h b/src/plugins/ChemPotSampling.h deleted file mode 100755 index 6db9442afa..0000000000 --- a/src/plugins/ChemPotSampling.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * ChemPotSampling.h - * - * Created on: Feb 2022 - * Author: homes - */ - -#ifndef MARDYN_TRUNK_CHEMPOTSAMPLING_H -#define MARDYN_TRUNK_CHEMPOTSAMPLING_H - -#include "PluginBase.h" -#include "particleContainer/ParticleContainer.h" -#include "Domain.h" -#include "utils/CommVar.h" -#include "parallel/DomainDecompBase.h" - -/** @brief -* Plugin: can be enabled via config.xml
    -* -* Samples residual chemical potential binwise in y-direction for the LJTS fluid (pot. energy corrections not implemented!) using the Widom insertion method -* \code{.xml} -* -* FLOAT - BOOL - FLOAT - INT - INT - INT - INT -* -* \endcode -*/ -class ChemPotSampling : public PluginBase{ - -private: - float _binwidth; - float _factorNumTest; - unsigned long _startSampling; - unsigned long _writeFrequency; - unsigned long _samplefrequency; - unsigned long _stopSampling; - bool _lattice; - - uint16_t _numBinsGlobal; - std::array _globalBoxLength; - double _slabVolume; - - // Accumulated quantities over _writeFrequency - CommVar> _chemPotSum; - std::vector _temperatureSumGlobal; - std::vector _veloXSumGlobal; - std::vector _veloYSumGlobal; - std::vector _veloZSumGlobal; - std::vector _temperatureWithDriftSumGlobal; - std::vector _numMoleculesSumGlobal; - CommVar> _countNTest; - std::vector _countSamples; - - std::vector _ekinSumGlobal; - std::vector _ekinDriftSumGlobal; - - CellProcessor* _cellProcessor; - ParticlePairsHandler* _particlePairsHandler; - Molecule _mTest; - - void resetVectors(); - -public: - ChemPotSampling(); - ~ChemPotSampling(); - - void init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) override; - - void readXML (XMLfileUnits& xmlconfig) override; - - void beforeForces(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, unsigned long /* simstep */) override {} - void afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) override; - void endStep(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */, unsigned long /* simstep */) override {} - void finish(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */) override {} - - std::string getPluginName() override { return std::string("ChemPotSampling"); } - - static PluginBase* createInstance() { return new ChemPotSampling(); } - -}; - - -#endif //MARDYN_TRUNK_CHEMPOTSAMPLING_H diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp new file mode 100644 index 0000000000..19c63431aa --- /dev/null +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -0,0 +1,652 @@ +/* + * ExtendedProfileSampling.cpp + * + * Created on: Feb 2022 + * Author: homes + */ + +#include "ExtendedProfileSampling.h" + +#include "particleContainer/ParticleContainer.h" +#include "particleContainer/adapter/ParticlePairs2PotForceAdapter.h" +#include "utils/Random.h" +#include "Simulation.h" + +#include + + +ExtendedProfileSampling::ExtendedProfileSampling() + : + // Control: general + _binwidth(1.0f), + _startSampling(0ul), + _writeFrequency(10000ul), + _stopSampling(1000000000ul), + _singleComp(false), + + // Control: chemical potential + _sampleChemPot(false), + _lattice(true), + _factorNumTest(4.0f), + _samplefrequency(50ul) +{} + +ExtendedProfileSampling::~ExtendedProfileSampling() { + delete _particlePairsHandler; +} + +void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) { + + _globalBoxLength[0] = domain->getGlobalLength(0); + _globalBoxLength[1] = domain->getGlobalLength(1); + _globalBoxLength[2] = domain->getGlobalLength(2); + + _numBinsGlobal = static_cast(_globalBoxLength[1]/_binwidth); + if (_globalBoxLength[1]/_binwidth != static_cast(_numBinsGlobal)) { + global_log->error() << "[ExtendedProfileSampling] Can not divide domain without remainder! Change binwidth" << std::endl; + Simulation::exit(-1); + } + _slabVolume = _globalBoxLength[0]*_globalBoxLength[2]*_binwidth; + + if (_slabVolume < 1e-12) { + global_log->error() << "[ExtendedProfileSampling] Slab volume too small!" << std::endl; + Simulation::exit(-1); + } + + _lenVector = (_singleComp) ? _numBinsGlobal : _numBinsGlobal * domain->getNumberOfComponents(); // Entry per component and bin index + + resizeVectors(); + resetVectors(); + + // TODO: CAN CELL PROCESSOR CHANGE DURING SIMULATION??? + _cellProcessor = _simulation.getCellProcessor(); + // TODO: CAN PP HANDLER CHANGE DURING SIMULATION??? + _particlePairsHandler = new ParticlePairs2PotForceAdapter(*domain); + // MolID is maximum possible number minus rank to prevent duplicate IDs + // Always insert molecule of first component + const unsigned long molID = std::numeric_limits::max() - static_cast(domainDecomp->getRank()); + _mTest = Molecule(molID, &(_simulation.getEnsemble()->getComponents()->at(0))); +} + +void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { + + xmlconfig.getNodeValue("binwidth", _binwidth); // Default: 1.0 + xmlconfig.getNodeValue("start", _startSampling); // Default: 0 + xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 + xmlconfig.getNodeValue("stop", _stopSampling); // Default: 1000000000 + xmlconfig.getNodeValue("singlecomponent", _singleComp); // Default: false + + xmlconfig.getNodeValue("@enable", _sampleChemPot); // Default: false + bool bCP = xmlconfig.getNodeValue("chemicalpotential/lattice", _lattice); // Default: true + bCP = bCP || xmlconfig.getNodeValue("chemicalpotential/factorNumTest", _factorNumTest); // Default: 4.0 + bCP = bCP || xmlconfig.getNodeValue("chemicalpotential/samplefrequency", _samplefrequency); // Default: 50 + + if (bCP and !_sampleChemPot) { + global_log->warning() << "[ExtendedProfileSampling] Sampling of chem. pot. disabled, but control values in config specified! " << std::endl; + } + + string insMethod; + if (_lattice) { + insMethod = "in a lattice"; + } else { + insMethod = "randomly"; + } + + global_log->info() << "[ExtendedProfileSampling] Start:WriteFreq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; + global_log->info() << "[ExtendedProfileSampling] Binwidth: " << _binwidth << std::endl; + if (_sampleChemPot) { + global_log->info() << "[ExtendedProfileSampling] Sampling of chemical potential enabled with a sampling frequency of " << _samplefrequency << std::endl; + global_log->info() << "[ExtendedProfileSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; + } + + if (_samplefrequency > _writeFrequency) { + global_log->warning() << "[ExtendedProfileSampling] Sample frequency is greater than write frequency! " << std::endl; + } +} + +// Needs to be called when halo cells are still existing +void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) { + + // Sampling starts after _startSampling and is conducted up to _stopSampling + if ((simstep <= _startSampling) or (simstep > _stopSampling)) { + return; + } + + // Sample only every _samplefrequency + if ( (simstep - _startSampling) % _samplefrequency != 0 ) { + return; + } + + // Do not write or sample data directly after (re)start in the first step + if ( simstep == global_simulation->getNumInitTimesteps() ) { + return; + } + + // Variables per step + std::array regionLowCorner; + std::array regionHighCorner; + std::array regionSize; + for (unsigned short d = 0; d < 3; d++) { + regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); + regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); + regionSize[d] = regionHighCorner[d] - regionLowCorner[d]; + } + + CommVar> numMolecules_step; + CommVar> ekin2_step; // Without drift energy + CommVar> ekin2Trans_step; // Including drift energy + CommVar> epot_step; + CommVar> chemPot_step; + CommVar> countNTest_step; + std::array>, 3> ekin2Vect_step; + std::array>, 3> velocityVect_step; + std::array>, 3> virialVect_step; + std::array>, 3> energyfluxVect_step; + + std::array, 3> veloDrift_step_global; // Drift velocity per particle; global value as calculated with global values + std::vector temperature_step_global (_lenVector, 0.0); // Required for sampling of chem. pot. + + numMolecules_step.local.resize(_lenVector); + ekin2_step.local.resize(_lenVector); + ekin2Trans_step.local.resize(_lenVector); + epot_step.local.resize(_lenVector); + chemPot_step.local.resize(_lenVector); + countNTest_step.local.resize(_lenVector); + + for (unsigned short d = 0; d < 3; d++) { + ekin2Vect_step.at(d).local.resize(_lenVector); + velocityVect_step.at(d).local.resize(_lenVector); + virialVect_step.at(d).local.resize(_lenVector); + energyfluxVect_step.at(d).local.resize(_lenVector); + + veloDrift_step_global.at(d).resize(_lenVector); + } + + numMolecules_step.global.resize(_lenVector); + ekin2_step.global.resize(_lenVector); + ekin2Trans_step.global.resize(_lenVector); + epot_step.global.resize(_lenVector); + chemPot_step.global.resize(_lenVector); + countNTest_step.global.resize(_lenVector); + + for (unsigned short d = 0; d < 3; d++) { + ekin2Vect_step.at(d).global.resize(_lenVector); + velocityVect_step.at(d).global.resize(_lenVector); + virialVect_step.at(d).global.resize(_lenVector); + energyfluxVect_step.at(d).global.resize(_lenVector); + } + + std::fill(numMolecules_step.local.begin(), numMolecules_step.local.end(), 0ul); + std::fill(ekin2_step.local.begin(), epot_step.local.end(), 0.0f); + std::fill(ekin2Trans_step.local.begin(), epot_step.local.end(), 0.0f); + std::fill(epot_step.local.begin(), epot_step.local.end(), 0.0f); + std::fill(chemPot_step.local.begin(), chemPot_step.local.end(), 0.0f); + std::fill(countNTest_step.local.begin(), countNTest_step.local.end(), 0ul); + + for (unsigned short d = 0; d < 3; d++) { + std::fill(ekin2Vect_step.at(d).local.begin(), ekin2Vect_step.at(d).local.end(), 0.0f); + std::fill(velocityVect_step.at(d).local.begin(), velocityVect_step.at(d).local.end(), 0.0f); + std::fill(virialVect_step.at(d).local.begin(), virialVect_step.at(d).local.end(), 0.0f); + std::fill(energyfluxVect_step.at(d).local.begin(), energyfluxVect_step.at(d).local.end(), 0.0f); + + std::fill(veloDrift_step_global.at(d).begin(), veloDrift_step_global.at(d).end(), 0.0f); + } + + std::fill(numMolecules_step.global.begin(), numMolecules_step.global.end(), 0ul); + std::fill(ekin2_step.global.begin(), epot_step.global.end(), 0.0f); + std::fill(ekin2Trans_step.global.begin(), epot_step.global.end(), 0.0f); + std::fill(epot_step.global.begin(), epot_step.global.end(), 0.0f); + std::fill(chemPot_step.global.begin(), chemPot_step.global.end(), 0.0f); + std::fill(countNTest_step.global.begin(), countNTest_step.global.end(), 0ul); + + for (unsigned short d = 0; d < 3; d++) { + std::fill(ekin2Vect_step.at(d).global.begin(), ekin2Vect_step.at(d).global.end(), 0.0f); + std::fill(velocityVect_step.at(d).global.begin(), velocityVect_step.at(d).global.end(), 0.0f); + std::fill(virialVect_step.at(d).global.begin(), virialVect_step.at(d).global.end(), 0.0f); + std::fill(energyfluxVect_step.at(d).global.begin(), energyfluxVect_step.at(d).global.end(), 0.0f); + } + + // Calculate drift as it is needed first + for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { + const double ry = pit->r(1); + const uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin + + numMolecules_step.local.at(index) ++; + velocityVect_step.at(0).local.at(index) += pit->v(0); + velocityVect_step.at(1).local.at(index) += pit->v(1); + velocityVect_step.at(2).local.at(index) += pit->v(2); + + if (!_singleComp) { + const unsigned int cid = pit->componentid() + 1; // 0 represents all components + const uint32_t indexCID = cid*_numBinsGlobal + index; + numMolecules_step.local.at(indexCID) ++; + velocityVect_step.at(0).local.at(indexCID) += pit->v(0); + velocityVect_step.at(1).local.at(indexCID) += pit->v(1); + velocityVect_step.at(2).local.at(indexCID) += pit->v(2); + } + } + +#ifdef ENABLE_MPI + MPI_Allreduce(numMolecules_step.local.data(), numMolecules_step.global.data(), _lenVector, MPI_UNSIGNED_LONG, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(velocityVect_step[0].local.data(), velocityVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(velocityVect_step[1].local.data(), velocityVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(velocityVect_step[2].local.data(), velocityVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); +#else + for (unsigned long i = 0; i < _lenVector; i++) { + numMolecules_step.global.at(i) = numMolecules_step.local.at(i); + velocityVect_step[0].global.at(i) = velocityVect_step[0].local.at(i); + velocityVect_step[1].global.at(i) = velocityVect_step[1].local.at(i); + velocityVect_step[2].global.at(i) = velocityVect_step[2].local.at(i); + } +#endif + + for (unsigned long i = 0; i < _lenVector; i++) { + veloDrift_step_global[0].at(i) = velocityVect_step[0].global.at(i) / numMolecules_step.global.at(i); + veloDrift_step_global[1].at(i) = velocityVect_step[1].global.at(i) / numMolecules_step.global.at(i); + veloDrift_step_global[2].at(i) = velocityVect_step[2].global.at(i) / numMolecules_step.global.at(i); + } + + for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { + const double ry = pit->r(1); + const uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin + + const double veloCorrX = pit->v(0) - veloDrift_step_global[0].at(index); + const double veloCorrY = pit->v(1) - veloDrift_step_global[1].at(index); + const double veloCorrZ = pit->v(2) - veloDrift_step_global[2].at(index); + const double veloX = pit->v(0); + const double veloY = pit->v(1); + const double veloZ = pit->v(2); + const double mass = pit->mass(); + const double epot = /* pit->U_pot() */ 0.0; + const double ekinX = mass * veloCorrX * veloCorrX + (pit->U_rot_2()/3.0); //??? + const double ekinY = mass * veloCorrY * veloCorrY + (pit->U_rot_2()/3.0); //??? + const double ekinZ = mass * veloCorrZ * veloCorrZ + (pit->U_rot_2()/3.0); //??? + ekin2_step.local.at(index) += ekinX + ekinY + ekinZ; + ekin2Trans_step.local.at(index) += pit->U_kin(); + epot_step.local.at(index) += epot; + ekin2Vect_step[0].local.at(index) += ekinX; + ekin2Vect_step[1].local.at(index) += ekinY; + ekin2Vect_step[2].local.at(index) += ekinZ; + virialVect_step[0].local.at(index) += pit->Vi(0); + virialVect_step[1].local.at(index) += pit->Vi(1); + virialVect_step[2].local.at(index) += pit->Vi(2); + energyfluxVect_step[0].local.at(index) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); + energyfluxVect_step[1].local.at(index) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); + energyfluxVect_step[2].local.at(index) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); + + if (!_singleComp) { + const unsigned int cid = pit->componentid() + 1; // 0 represents all components + const uint32_t indexCID = cid*_numBinsGlobal + index; + ekin2_step.local.at(indexCID) += ekinX + ekinY + ekinZ; + ekin2Trans_step.local.at(indexCID) += pit->U_kin(); + epot_step.local.at(indexCID) += epot; + ekin2Vect_step[0].local.at(indexCID) += ekinX; + ekin2Vect_step[1].local.at(indexCID) += ekinY; + ekin2Vect_step[2].local.at(indexCID) += ekinZ; + virialVect_step[0].local.at(indexCID) += pit->Vi(0); + virialVect_step[1].local.at(indexCID) += pit->Vi(1); + virialVect_step[2].local.at(indexCID) += pit->Vi(2); + energyfluxVect_step[0].local.at(indexCID) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); + energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); + energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); + } + } + + // Calculate temperature (without drift) per bin over all processes +#ifdef ENABLE_MPI + MPI_Allreduce(ekin2_step.local.data(), ekin2_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); +#else + for (unsigned long i = 0; i < _lenVector; i++) { + ekin2_step.global.at(i) = ekin2_step.local.at(i); + } +#endif + + for (unsigned long i = 0; i < _lenVector; i++) { + const unsigned int cid = i/_numBinsGlobal; + const unsigned int dof = _simulation.getEnsemble()->getComponent(cid)->getRotationalDegreesOfFreedom(); + const unsigned long numMols = numMolecules_step.global.at(i); + temperature_step_global.at(i) = ekin2_step.global.at(i) / ((3 + dof)*numMols); + cout << i << " " << cid << " " << dof << " " << temperature_step_global.at(i) << endl; + } + + + // Calculate chemical potential + if (_sampleChemPot) { + // Calculate number of test particles per bin + std::vector dX(_numBinsGlobal, 0.0); + std::vector dY(_numBinsGlobal, 0.0); + std::vector dZ(_numBinsGlobal, 0.0); + std::vector nX(_numBinsGlobal, 0ul); + std::vector nY(_numBinsGlobal, 0ul); + std::vector nZ(_numBinsGlobal, 0ul); + unsigned long nTestGlobal {0ul}; + + for (uint16_t i = 0; i < _numBinsGlobal; i++) { + // Make sure, number of test particles is never zero and number of test particles per direction is at least 1 + const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMolecules_step.global.at(i))); + + nY.at(i) = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[2]),(1./3.))); + dY.at(i) = std::min(static_cast(_binwidth/nY.at(i)), static_cast(0.5*regionSize[1])); + + nX.at(i) = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); + dX.at(i) = std::min(static_cast(_globalBoxLength[0]/nX.at(i)), static_cast(0.5*regionSize[0])); + + nZ.at(i) = std::max(1ul,nTest/(nX.at(i)*nY.at(i))); + dZ.at(i) = std::min(static_cast(_globalBoxLength[2]/nZ.at(i)), static_cast(0.5*regionSize[2])); + + nTestGlobal += nTest; + } + + if (_lattice) { + // Insert particles in lattice structure and sample chem. pot. + + // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary + const uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); + double rY = regionLowCorner[1]+0.5*dY.at(idxStart); + while (rY < regionHighCorner[1]) { + const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin + + double rX = regionLowCorner[0]+0.5*dX.at(idxStart); + while (rX < regionHighCorner[0]) { + + double rZ = regionLowCorner[2]+0.5*dZ.at(idxStart); + while (rZ < regionHighCorner[2]) { + _mTest.setr(0,rX); + _mTest.setr(1,rY); + _mTest.setr(2,rZ); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + if (temperature_step_global.at(index) > 1e-9) { + double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); + if (std::isfinite(chemPot)) { + chemPot_step.local.at(index) += chemPot; + countNTest_step.local.at(index)++; + #ifndef NDEBUG + std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; + #endif + } + } + rZ += dZ.at(index); + } + rX += dX.at(index); + } + rY += dY.at(index); + } + } else { + // Random insertion + // NOTE: This differs from the lattice method as it does not take the local density into account + Random* rnd = new Random(); + + const float domainShare = (regionSize[0]*regionSize[1]*regionSize[2])/(_globalBoxLength[0]*_globalBoxLength[1]*_globalBoxLength[2]); // Share of volume of present rank from whole domain + const unsigned long nTest = static_cast(domainShare*nTestGlobal); + + #if defined(_OPENMP) + #pragma omp parallel + #endif + for (unsigned long i = 0; i < nTest; i++) { + const double rX = regionLowCorner[0] + rnd->rnd()*regionSize[0]; + const double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; + const double rZ = regionLowCorner[2] + rnd->rnd()*regionSize[2]; + const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin + _mTest.setr(0,rX); + _mTest.setr(1,rY); + _mTest.setr(2,rZ); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + if (temperature_step_global.at(index) > 1e-9) { + double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); + if (std::isfinite(chemPot)) { + #if defined(_OPENMP) + #pragma omp atomic + #endif + { + chemPot_step.local.at(index) += chemPot; + countNTest_step.local.at(index)++; + #ifndef NDEBUG + std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; + #endif + } + } + } + } + } + } + + // Calculate further quantities +#ifdef ENABLE_MPI + MPI_Reduce(epot_step.local.data(), epot_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(virialVect_step[0].local.data(), virialVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(virialVect_step[1].local.data(), virialVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(virialVect_step[2].local.data(), virialVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(ekin2Vect_step[0].local.data(), ekin2Vect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(ekin2Vect_step[1].local.data(), ekin2Vect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(ekin2Vect_step[2].local.data(), ekin2Vect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(energyfluxVect_step[0].local.data(), energyfluxVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(energyfluxVect_step[1].local.data(), energyfluxVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(energyfluxVect_step[2].local.data(), energyfluxVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(chemPot_step.local.data(), chemPot_step.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(countNTest_step.local.data(), countNTest_step.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); +#else + for (unsigned long i = 0; i < _lenVector; i++) { + epot_step.global.at(i) = epot_step.local.at(i); + virialVect_step[0].global.at(i) = virialVect_step[0].local.at(i); + virialVect_step[1].global.at(i) = virialVect_step[1].local.at(i); + virialVect_step[2].global.at(i) = virialVect_step[2].local.at(i); + ekin2Vect_step[0].global.at(i) = ekin2Vect_step[0].local.at(i); + ekin2Vect_step[1].global.at(i) = ekin2Vect_step[1].local.at(i); + ekin2Vect_step[2].global.at(i) = ekin2Vect_step[2].local.at(i); + energyfluxVect_step[0].global.at(i) = energyfluxVect_step[0].local.at(i); + energyfluxVect_step[1].global.at(i) = energyfluxVect_step[1].local.at(i); + energyfluxVect_step[2].global.at(i) = energyfluxVect_step[2].local.at(i); + chemPot_step.global.at(i) = chemPot_step.local.at(i); + countNTest_step.global.at(i) = countNTest_step.local.at(i); + } +#endif + + // Only root calculates further quantities and accumulates them + if (domainDecomp->getRank() == 0) { + for (unsigned long i = 0; i < _lenVector; i++) { + const unsigned long numMols = numMolecules_step.global.at(i); + if (numMols > 0) { + const unsigned int cid = i/_numBinsGlobal; + const unsigned int dof = _simulation.getEnsemble()->getComponent(cid)->getRotationalDegreesOfFreedom(); + const double rho = numMols / _slabVolume; + const double ViX = virialVect_step[0].global.at(i); + const double ViY = virialVect_step[1].global.at(i); + const double ViZ = virialVect_step[2].global.at(i); + const double Tx = ekin2Vect_step[0].global.at(i) / ((1 + dof/3.0)*numMols); // ??? dof + const double Ty = ekin2Vect_step[1].global.at(i) / ((1 + dof/3.0)*numMols); // ??? dof + const double Tz = ekin2Vect_step[2].global.at(i) / ((1 + dof/3.0)*numMols); // ??? dof + _numMolecules_accum.at(i) += numMolecules_step.global.at(i); + _density_accum.at(i) += rho; + _temperature_accum.at(i) += temperature_step_global.at(i); // oder (Tx+Ty+Tz)/3.0 + _ekin_accum.at(i) += ekin2Trans_step.global.at(i) / numMols; + _epot_accum.at(i) += epot_step.global.at(i) / numMols; + _pressure_accum.at(i) += rho * ( (ViX + ViY + ViZ)/(3.0*numMols) + temperature_step_global.at(i) ); // ??? Welche Temperature? Mit Drift? Statisch/dynamisch? + _chemPot_accum.at(i) += chemPot_step.global.at(i); + _countNTest_accum.at(i) += countNTest_step.global.at(i); + + _temperatureVect_accum[0].at(i) += Tx; + _temperatureVect_accum[1].at(i) += Ty; + _temperatureVect_accum[2].at(i) += Tz; + _velocityVect_accum[0].at(i) += veloDrift_step_global[0].at(i); + _velocityVect_accum[1].at(i) += veloDrift_step_global[1].at(i); + _velocityVect_accum[2].at(i) += veloDrift_step_global[2].at(i); + _pressureVect_accum[0].at(i) += rho * ( ViX/numMols + Tx ); + _pressureVect_accum[1].at(i) += rho * ( ViY/numMols + Ty ); + _pressureVect_accum[2].at(i) += rho * ( ViZ/numMols + Tz ); + _energyfluxVect_accum[0].at(i) += energyfluxVect_step[0].global.at(i) / numMols; + _energyfluxVect_accum[1].at(i) += energyfluxVect_step[1].global.at(i) / numMols; + _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / numMols; + + _countSamples.at(i)++; + } + } + } + + + // Write out data every _writeFrequency step + if ( (simstep - _startSampling) % _writeFrequency != 0 ) { + return; + } + + if (domainDecomp->getRank() == 0) { + unsigned long numOutputs = (_singleComp) ? 1ul : _simulation.getEnsemble()->getComponents()->size(); + + // Write output file + std::stringstream ss; + ss << std::setw(9) << std::setfill('0') << simstep; + const std::string fname = "ExtendedProfileSampling_TS"+ss.str()+".dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::out); + ofs << setw(24) << "pos"; // Bin position + for (unsigned long cid = 0; cid < numOutputs; cid++) { + ofs << setw(24) << "numParts["< 0ul) { + numMolsPerStep = static_cast(_numMolecules_accum.at(i))/_countSamples.at(i); + rho = _density_accum.at(i) /_countSamples.at(i); + T = _temperature_accum.at(i) /_countSamples.at(i); + ekin = _ekin_accum.at(i) /_countSamples.at(i); + epot = _epot_accum.at(i) /_countSamples.at(i); + p = _pressure_accum.at(i) /_countSamples.at(i); + chemPot_res = _chemPot_accum.at(i) /_countSamples.at(i); + numTest = static_cast(_countNTest_accum.at(i))/_countSamples.at(i); + T_x = _temperatureVect_accum[0].at(i)/_countSamples.at(i); + T_y = _temperatureVect_accum[1].at(i)/_countSamples.at(i); + T_z = _temperatureVect_accum[2].at(i)/_countSamples.at(i); + v_x = _velocityVect_accum[0].at(i) /_countSamples.at(i); + v_y = _velocityVect_accum[1].at(i) /_countSamples.at(i); + v_z = _velocityVect_accum[2].at(i) /_countSamples.at(i); + p_x = _pressureVect_accum[0].at(i) /_countSamples.at(i); + p_y = _pressureVect_accum[1].at(i) /_countSamples.at(i); + p_z = _pressureVect_accum[2].at(i) /_countSamples.at(i); + jEF_x = _energyfluxVect_accum[0].at(i) /_countSamples.at(i); + jEF_y = _energyfluxVect_accum[1].at(i) /_countSamples.at(i); + jEF_z = _energyfluxVect_accum[2].at(i) /_countSamples.at(i); + numSamples = _countSamples.at(i); + } + if ((_chemPot_accum.at(i) > 0.0) and (_countNTest_accum.at(i) > 0ul) and (_countSamples.at(i) > 0ul)) { + numTest = _countNTest_accum.at(i) /_countSamples.at(i); + chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); + } + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; + for (unsigned long cid = 0; cid < numOutputs; cid++) { + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) + << numMolsPerStep + << rho + << T + << ekin + << epot + << p + << chemPot_res + << numTest + << T_x + << T_y + << T_z + << v_x + << v_y + << v_z + << p_x + << p_y + << p_z + << jEF_x + << jEF_y + << jEF_z + << numSamples; + } + ofs << std::endl; + } + ofs.close(); + } + + // Reset vectors to zero + resetVectors(); +} + +// Resize vectors +void ExtendedProfileSampling::resizeVectors() { + _numMolecules_accum.resize(_lenVector); + _density_accum.resize(_lenVector); + _temperature_accum.resize(_lenVector); + _ekin_accum.resize(_lenVector); + _epot_accum.resize(_lenVector); + _pressure_accum.resize(_lenVector); + _chemPot_accum.resize(_lenVector); + _countNTest_accum.resize(_lenVector); + + for (unsigned short d = 0; d < 3; d++) { + _temperatureVect_accum.at(d).resize(_lenVector); + _velocityVect_accum.at(d).resize(_lenVector); + _pressureVect_accum.at(d).resize(_lenVector); + _energyfluxVect_accum.at(d).resize(_lenVector); + } + + _countSamples.resize(_lenVector); +} + +// Fill vectors with zeros +void ExtendedProfileSampling::resetVectors() { + std::fill(_numMolecules_accum.begin(), _numMolecules_accum.end(), 0ul); + std::fill(_density_accum.begin(), _density_accum.end(), 0.0f); + std::fill(_temperature_accum.begin(), _temperature_accum.end(), 0.0f); + std::fill(_ekin_accum.begin(), _ekin_accum.end(), 0.0f); + std::fill(_epot_accum.begin(), _epot_accum.end(), 0.0f); + std::fill(_pressure_accum.begin(), _pressure_accum.end(), 0.0f); + std::fill(_chemPot_accum.begin(), _chemPot_accum.end(), 0.0f); + std::fill(_countNTest_accum.begin(), _countNTest_accum.end(), 0ul); + + for (unsigned short d = 0; d < 3; d++) { + std::fill(_temperatureVect_accum.at(d).begin(), _temperatureVect_accum.at(d).end(), 0.0f); + std::fill(_velocityVect_accum.at(d).begin(), _velocityVect_accum.at(d).end(), 0.0f); + std::fill(_pressureVect_accum.at(d).begin(), _pressureVect_accum.at(d).end(), 0.0f); + std::fill(_energyfluxVect_accum.at(d).begin(), _energyfluxVect_accum.at(d).end(), 0.0f); + } + + std::fill(_countSamples.begin(), _countSamples.end(), 0ul); +} diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h new file mode 100755 index 0000000000..f26a8b0d08 --- /dev/null +++ b/src/plugins/ExtendedProfileSampling.h @@ -0,0 +1,101 @@ +/* + * ExtendedProfileSampling.h + * + * Created on: Feb 2022 + * Author: homes + */ + +#ifndef MARDYN_TRUNK_EXTENDEDPROFILESAMPLING_H +#define MARDYN_TRUNK_EXTENDEDPROFILESAMPLING_H + +#include "PluginBase.h" +#include "particleContainer/ParticleContainer.h" +#include "Domain.h" +#include "utils/CommVar.h" +#include "parallel/DomainDecompBase.h" + +/** @brief +* Plugin: can be enabled via config.xml
    +* +* Samples residual chemical potential binwise in y-direction for the LJTS fluid (pot. energy corrections not implemented!) using the Widom insertion method +* \code{.xml} +* +* FLOAT + INT + INT + INT + BOOL + + BOOL + FLOAT + INT + +* +* \endcode +*/ +class ExtendedProfileSampling : public PluginBase{ + +private: + // Control: general + float _binwidth; + unsigned long _startSampling; + unsigned long _writeFrequency; + unsigned long _stopSampling; + bool _singleComp; + + // Control: chemical potential + bool _sampleChemPot; + bool _lattice; + float _factorNumTest; + unsigned long _samplefrequency; + + // Auxiliary variables + uint16_t _numBinsGlobal; + unsigned long _lenVector; + std::array _globalBoxLength; + double _slabVolume; + CellProcessor* _cellProcessor; + ParticlePairsHandler* _particlePairsHandler; + Molecule _mTest; + + // Accumulated quantities over _writeFrequency per bin + // NOTE: Only the root process knows correct values (with exceptions) + std::vector _numMolecules_accum; // Number of molecules in bin + std::vector _density_accum; // Local density + std::vector _temperature_accum; // Temperature (drift corrected) + std::vector _ekin_accum; // Kinetic energy + std::vector _epot_accum; // Potential energy + std::vector _pressure_accum; // Pressure + std::vector _chemPot_accum; // Chemical potential as sampled in ms2 (Widom insertion method) + std::vector _countNTest_accum; // Number of inserted test particles for chem. pot. sampling + std::array, 3> _temperatureVect_accum; // Kinetic temperature in each direction (drift corrected) + std::array, 3> _velocityVect_accum; // Drift velocity in each direction + std::array, 3> _pressureVect_accum; // Pressure in each direction + std::array, 3> _energyfluxVect_accum; // Energy flux (heat flux plus enthalpy flux) in each direction + + std::vector _countSamples; // Number of samples; can vary from bin to bin as some bins could be empty + + void resizeVectors(); // Change size of accumulation vectors + void resetVectors(); // Set accumulation vectors to zero + +public: + ExtendedProfileSampling(); + ~ExtendedProfileSampling(); + + void init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) override; + + void readXML (XMLfileUnits& xmlconfig) override; + + void beforeForces(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, unsigned long /* simstep */) override {} + void afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) override; + void endStep(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */, unsigned long /* simstep */) override {} + void finish(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */) override {} + + std::string getPluginName() override { return std::string("ExtendedProfileSampling"); } + + static PluginBase* createInstance() { return new ExtendedProfileSampling(); } + +}; + + +#endif //MARDYN_TRUNK_EXTENDEDPROFILESAMPLING_H From 2d229f0d5e6a729c50a9a2002b4e3598f027440e Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 25 Mar 2022 20:53:17 +0100 Subject: [PATCH 29/76] Minor fixes in sampling plugin --- src/plugins/ExtendedProfileSampling.cpp | 55 ++++++++++++++----------- src/plugins/PluginFactory.cpp | 4 +- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 19c63431aa..2e2e64a570 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -32,7 +32,7 @@ ExtendedProfileSampling::ExtendedProfileSampling() {} ExtendedProfileSampling::~ExtendedProfileSampling() { - delete _particlePairsHandler; + delete _particlePairsHandler; // ??? } void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) { @@ -53,14 +53,15 @@ void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, D Simulation::exit(-1); } - _lenVector = (_singleComp) ? _numBinsGlobal : _numBinsGlobal * domain->getNumberOfComponents(); // Entry per component and bin index + // Entry per component and bin; 0 represents all components combined + _lenVector = (_singleComp) ? _numBinsGlobal : _numBinsGlobal * (domain->getNumberOfComponents()+1); resizeVectors(); resetVectors(); - // TODO: CAN CELL PROCESSOR CHANGE DURING SIMULATION??? + // ??? TODO: CAN CELL PROCESSOR CHANGE DURING SIMULATION??? _cellProcessor = _simulation.getCellProcessor(); - // TODO: CAN PP HANDLER CHANGE DURING SIMULATION??? + // ??? TODO: CAN PP HANDLER CHANGE DURING SIMULATION??? _particlePairsHandler = new ParticlePairs2PotForceAdapter(*domain); // MolID is maximum possible number minus rank to prevent duplicate IDs // Always insert molecule of first component @@ -104,7 +105,7 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { } } -// Needs to be called when halo cells are still existing +// Needs to be called when halo cells are still existing (for sampling of chemical potential) void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) { // Sampling starts after _startSampling and is conducted up to _stopSampling @@ -241,9 +242,11 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, #endif for (unsigned long i = 0; i < _lenVector; i++) { - veloDrift_step_global[0].at(i) = velocityVect_step[0].global.at(i) / numMolecules_step.global.at(i); - veloDrift_step_global[1].at(i) = velocityVect_step[1].global.at(i) / numMolecules_step.global.at(i); - veloDrift_step_global[2].at(i) = velocityVect_step[2].global.at(i) / numMolecules_step.global.at(i); + if (numMolecules_step.global.at(i) > 0ul) { + veloDrift_step_global[0].at(i) = velocityVect_step[0].global.at(i) / numMolecules_step.global.at(i); + veloDrift_step_global[1].at(i) = velocityVect_step[1].global.at(i) / numMolecules_step.global.at(i); + veloDrift_step_global[2].at(i) = velocityVect_step[2].global.at(i) / numMolecules_step.global.at(i); + } } for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { @@ -258,9 +261,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double veloZ = pit->v(2); const double mass = pit->mass(); const double epot = /* pit->U_pot() */ 0.0; - const double ekinX = mass * veloCorrX * veloCorrX + (pit->U_rot_2()/3.0); //??? - const double ekinY = mass * veloCorrY * veloCorrY + (pit->U_rot_2()/3.0); //??? - const double ekinZ = mass * veloCorrZ * veloCorrZ + (pit->U_rot_2()/3.0); //??? + const double ekinX = mass * veloCorrX * veloCorrX + (pit->U_rot_2()/3.0); //??? Wie Rotation? + const double ekinY = mass * veloCorrY * veloCorrY + (pit->U_rot_2()/3.0); //??? Wie Rotation? + const double ekinZ = mass * veloCorrZ * veloCorrZ + (pit->U_rot_2()/3.0); //??? Wie Rotation? ekin2_step.local.at(index) += ekinX + ekinY + ekinZ; ekin2Trans_step.local.at(index) += pit->U_kin(); epot_step.local.at(index) += epot; @@ -305,7 +308,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const unsigned int cid = i/_numBinsGlobal; const unsigned int dof = _simulation.getEnsemble()->getComponent(cid)->getRotationalDegreesOfFreedom(); const unsigned long numMols = numMolecules_step.global.at(i); - temperature_step_global.at(i) = ekin2_step.global.at(i) / ((3 + dof)*numMols); + if (numMols > 0ul) { + temperature_step_global.at(i) = ekin2_step.global.at(i) / ((3 + dof)*numMols); + } cout << i << " " << cid << " " << dof << " " << temperature_step_global.at(i) << endl; } @@ -351,11 +356,11 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, double rZ = regionLowCorner[2]+0.5*dZ.at(idxStart); while (rZ < regionHighCorner[2]) { - _mTest.setr(0,rX); - _mTest.setr(1,rY); - _mTest.setr(2,rZ); - const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); if (temperature_step_global.at(index) > 1e-9) { + _mTest.setr(0,rX); + _mTest.setr(1,rY); + _mTest.setr(2,rZ); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); if (std::isfinite(chemPot)) { chemPot_step.local.at(index) += chemPot; @@ -378,7 +383,8 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // NOTE: This differs from the lattice method as it does not take the local density into account Random* rnd = new Random(); - const float domainShare = (regionSize[0]*regionSize[1]*regionSize[2])/(_globalBoxLength[0]*_globalBoxLength[1]*_globalBoxLength[2]); // Share of volume of present rank from whole domain + // Share of volume of present rank from whole domain + const float domainShare = (regionSize[0]*regionSize[1]*regionSize[2])/(_globalBoxLength[0]*_globalBoxLength[1]*_globalBoxLength[2]); const unsigned long nTest = static_cast(domainShare*nTestGlobal); #if defined(_OPENMP) @@ -389,11 +395,11 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; const double rZ = regionLowCorner[2] + rnd->rnd()*regionSize[2]; const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin - _mTest.setr(0,rX); - _mTest.setr(1,rY); - _mTest.setr(2,rZ); - const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); if (temperature_step_global.at(index) > 1e-9) { + _mTest.setr(0,rX); + _mTest.setr(1,rY); + _mTest.setr(2,rZ); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); if (std::isfinite(chemPot)) { #if defined(_OPENMP) @@ -461,7 +467,8 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double Tz = ekin2Vect_step[2].global.at(i) / ((1 + dof/3.0)*numMols); // ??? dof _numMolecules_accum.at(i) += numMolecules_step.global.at(i); _density_accum.at(i) += rho; - _temperature_accum.at(i) += temperature_step_global.at(i); // oder (Tx+Ty+Tz)/3.0 + _temperature_accum.at(i) += temperature_step_global.at(i); // ??? oder (Tx+Ty+Tz)/3.0 + cout << "EPS " << temperature_step_global.at(i) << " " << (Tx+Ty+Tz)/3.0 << endl; _ekin_accum.at(i) += ekin2Trans_step.global.at(i) / numMols; _epot_accum.at(i) += epot_step.global.at(i) / numMols; _pressure_accum.at(i) += rho * ( (ViX + ViY + ViZ)/(3.0*numMols) + temperature_step_global.at(i) ); // ??? Welche Temperature? Mit Drift? Statisch/dynamisch? @@ -493,7 +500,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } if (domainDecomp->getRank() == 0) { - unsigned long numOutputs = (_singleComp) ? 1ul : _simulation.getEnsemble()->getComponents()->size(); + unsigned long numOutputs = (_singleComp) ? 1ul : (_simulation.getDomain()->getNumberOfComponents()+1); // Write output file std::stringstream ss; @@ -572,7 +579,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, numSamples = _countSamples.at(i); } if ((_chemPot_accum.at(i) > 0.0) and (_countNTest_accum.at(i) > 0ul) and (_countSamples.at(i) > 0ul)) { - numTest = _countNTest_accum.at(i) /_countSamples.at(i); + numTest = _countNTest_accum.at(i)/_countSamples.at(i); chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); } ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; diff --git a/src/plugins/PluginFactory.cpp b/src/plugins/PluginFactory.cpp index 0c3a6fb034..7b3de463f4 100644 --- a/src/plugins/PluginFactory.cpp +++ b/src/plugins/PluginFactory.cpp @@ -39,7 +39,7 @@ #include "io/XyzWriter.h" // General plugins -#include "plugins/ChemPotSampling.h" +#include "plugins/ExtendedProfileSampling.h" #include "plugins/COMaligner.h" #include "plugins/DirectedPM.h" #include "plugins/Dropaccelerator.h" @@ -83,7 +83,7 @@ void PluginFactory::registerDefaultPlugins() { #ifdef ENABLE_ADIOS2 REGISTER_PLUGIN(Adios2Writer); #endif - REGISTER_PLUGIN(ChemPotSampling); + REGISTER_PLUGIN(ExtendedProfileSampling); REGISTER_PLUGIN(COMaligner); REGISTER_PLUGIN(CavityWriter); REGISTER_PLUGIN(CheckpointWriter); From c53f4dce963bf0621d466df2510d62dafa38687d Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 28 Mar 2022 11:20:36 +0200 Subject: [PATCH 30/76] Fix in DriftCtrl to use velocities instead of momenta --- src/plugins/NEMD/DriftCtrl.cpp | 78 ++++++++++++++++------------------ src/plugins/NEMD/DriftCtrl.h | 4 +- 2 files changed, 39 insertions(+), 43 deletions(-) diff --git a/src/plugins/NEMD/DriftCtrl.cpp b/src/plugins/NEMD/DriftCtrl.cpp index fd7a02782d..373d6a47e3 100644 --- a/src/plugins/NEMD/DriftCtrl.cpp +++ b/src/plugins/NEMD/DriftCtrl.cpp @@ -31,18 +31,18 @@ void DriftCtrl::init(ParticleContainer* particleContainer, DomainDecompBase* dom for(uint32_t cid = 0; cid < numComponents; ++cid) { // local _sampling.at(cid).numParticles.local.resize(_range.subdivision.numBins); - _sampling.at(cid).momentum.at(0).local.resize(_range.subdivision.numBins); - _sampling.at(cid).momentum.at(1).local.resize(_range.subdivision.numBins); - _sampling.at(cid).momentum.at(2).local.resize(_range.subdivision.numBins); + _sampling.at(cid).velocity.at(0).local.resize(_range.subdivision.numBins); + _sampling.at(cid).velocity.at(1).local.resize(_range.subdivision.numBins); + _sampling.at(cid).velocity.at(2).local.resize(_range.subdivision.numBins); // global _sampling.at(cid).numParticles.global.resize(_range.subdivision.numBins); - _sampling.at(cid).momentum.at(0).global.resize(_range.subdivision.numBins); - _sampling.at(cid).momentum.at(1).global.resize(_range.subdivision.numBins); - _sampling.at(cid).momentum.at(2).global.resize(_range.subdivision.numBins); + _sampling.at(cid).velocity.at(0).global.resize(_range.subdivision.numBins); + _sampling.at(cid).velocity.at(1).global.resize(_range.subdivision.numBins); + _sampling.at(cid).velocity.at(2).global.resize(_range.subdivision.numBins); // corr - _sampling.at(cid).mom_corr.at(0).resize(_range.subdivision.numBins); - _sampling.at(cid).mom_corr.at(1).resize(_range.subdivision.numBins); - _sampling.at(cid).mom_corr.at(2).resize(_range.subdivision.numBins); + _sampling.at(cid).velo_corr.at(0).resize(_range.subdivision.numBins); + _sampling.at(cid).velo_corr.at(1).resize(_range.subdivision.numBins); + _sampling.at(cid).velo_corr.at(2).resize(_range.subdivision.numBins); } // reset local values for(uint32_t cid = 0; cid < numComponents; ++cid) @@ -50,9 +50,9 @@ void DriftCtrl::init(ParticleContainer* particleContainer, DomainDecompBase* dom for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) { _sampling.at(cid).numParticles.local.at(yPosID) = 0; - _sampling.at(cid).momentum.at(0).local.at(yPosID) = 0.; - _sampling.at(cid).momentum.at(1).local.at(yPosID) = 0.; - _sampling.at(cid).momentum.at(2).local.at(yPosID) = 0.; + _sampling.at(cid).velocity.at(0).local.at(yPosID) = 0.; + _sampling.at(cid).velocity.at(1).local.at(yPosID) = 0.; + _sampling.at(cid).velocity.at(2).local.at(yPosID) = 0.; } } global_log->info() << "[DriftCtrl] Init data structures for " << numComponents << " components." << std::endl; @@ -137,16 +137,11 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB const uint32_t cid_zb = it->componentid(); const uint32_t cid_ub = cid_zb+1; const uint32_t yPosID = floor( (yPos-_range.yl) / _range.subdivision.binWidth.actual); - const double mass = it->mass(); - std::array p; // momentum - p.at(0) = it->v(0) * mass; - p.at(1) = it->v(1) * mass; - p.at(2) = it->v(2) * mass; _sampling.at(cid_ub).numParticles.local.at(yPosID)++; - _sampling.at(cid_ub).momentum.at(0).local.at(yPosID) += p.at(0); - _sampling.at(cid_ub).momentum.at(1).local.at(yPosID) += p.at(1); - _sampling.at(cid_ub).momentum.at(2).local.at(yPosID) += p.at(2); + _sampling.at(cid_ub).velocity.at(0).local.at(yPosID) += it->v(0); + _sampling.at(cid_ub).velocity.at(1).local.at(yPosID) += it->v(1); + _sampling.at(cid_ub).velocity.at(2).local.at(yPosID) += it->v(2); } } @@ -163,9 +158,9 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) { domainDecomp->collCommAppendUnsLong(_sampling.at(cid).numParticles.local.at(yPosID)); - domainDecomp->collCommAppendDouble(_sampling.at(cid).momentum.at(0).local.at(yPosID)); - domainDecomp->collCommAppendDouble(_sampling.at(cid).momentum.at(1).local.at(yPosID)); - domainDecomp->collCommAppendDouble(_sampling.at(cid).momentum.at(2).local.at(yPosID)); + domainDecomp->collCommAppendDouble(_sampling.at(cid).velocity.at(0).local.at(yPosID)); + domainDecomp->collCommAppendDouble(_sampling.at(cid).velocity.at(1).local.at(yPosID)); + domainDecomp->collCommAppendDouble(_sampling.at(cid).velocity.at(2).local.at(yPosID)); numValsCheck += 4; } } @@ -183,15 +178,15 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB double invNumParticles = 1./static_cast(numParticles); _sampling.at(cid).numParticles.global.at(yPosID) = numParticles; //~ cout << "[" << nRank << "]: cid=" << cid << ",yPosID=" << yPosID << ",numParticles=" << numParticles << endl; - _sampling.at(cid).momentum.at(0).global.at(yPosID) = domainDecomp->collCommGetDouble() * invNumParticles; - _sampling.at(cid).momentum.at(1).global.at(yPosID) = domainDecomp->collCommGetDouble() * invNumParticles; - _sampling.at(cid).momentum.at(2).global.at(yPosID) = domainDecomp->collCommGetDouble() * invNumParticles; + _sampling.at(cid).velocity.at(0).global.at(yPosID) = domainDecomp->collCommGetDouble() * invNumParticles; + _sampling.at(cid).velocity.at(1).global.at(yPosID) = domainDecomp->collCommGetDouble() * invNumParticles; + _sampling.at(cid).velocity.at(2).global.at(yPosID) = domainDecomp->collCommGetDouble() * invNumParticles; // reset local values _sampling.at(cid).numParticles.local.at(yPosID) = 0; - _sampling.at(cid).momentum.at(0).local.at(yPosID) = 0.; - _sampling.at(cid).momentum.at(1).local.at(yPosID) = 0.; - _sampling.at(cid).momentum.at(2).local.at(yPosID) = 0.; + _sampling.at(cid).velocity.at(0).local.at(yPosID) = 0.; + _sampling.at(cid).velocity.at(1).local.at(yPosID) = 0.; + _sampling.at(cid).velocity.at(2).local.at(yPosID) = 0.; } } // finalize @@ -202,9 +197,9 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB { for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) { - _sampling.at(cid).mom_corr.at(0).at(yPosID) = _target.drift.at(0) - _sampling.at(cid).momentum.at(0).global.at(yPosID); - _sampling.at(cid).mom_corr.at(1).at(yPosID) = _target.drift.at(1) - _sampling.at(cid).momentum.at(1).global.at(yPosID); - _sampling.at(cid).mom_corr.at(2).at(yPosID) = _target.drift.at(2) - _sampling.at(cid).momentum.at(2).global.at(yPosID); + _sampling.at(cid).velo_corr.at(0).at(yPosID) = _target.drift.at(0) - _sampling.at(cid).velocity.at(0).global.at(yPosID); + _sampling.at(cid).velo_corr.at(1).at(yPosID) = _target.drift.at(1) - _sampling.at(cid).velocity.at(1).global.at(yPosID); + _sampling.at(cid).velo_corr.at(2).at(yPosID) = _target.drift.at(2) - _sampling.at(cid).velocity.at(2).global.at(yPosID); } } @@ -216,17 +211,18 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB continue; // check if target component - const uint32_t cid_zb = it->componentid(); - const uint32_t cid_ub = cid_zb+1; - if ((cid_ub != _target.cid) and (_target.cid != 0)) { - continue; + uint32_t cid_ub = 0; + if (_target.cid != 0) { + cid_ub = it->componentid() + 1; + if (cid_ub != _target.cid) { + continue; + } } uint32_t yPosID = floor( (yPos-_range.yl) / _range.subdivision.binWidth.actual); - const double mass = it->mass(); - it->setv(0, it->v(0) + _sampling.at(cid_ub).mom_corr.at(0).at(yPosID)/mass ); - it->setv(1, it->v(1) + _sampling.at(cid_ub).mom_corr.at(1).at(yPosID)/mass ); - it->setv(2, it->v(2) + _sampling.at(cid_ub).mom_corr.at(2).at(yPosID)/mass ); + it->setv(0, it->v(0) + _sampling.at(cid_ub).velo_corr.at(0).at(yPosID) ); + it->setv(1, it->v(1) + _sampling.at(cid_ub).velo_corr.at(1).at(yPosID) ); + it->setv(2, it->v(2) + _sampling.at(cid_ub).velo_corr.at(2).at(yPosID) ); } } @@ -239,7 +235,7 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB ofs.open(fname, std::ios::app); ofs << setw(12) << simstep; for(uint32_t yPosID = 0; yPosID < _range.subdivision.numBins; ++yPosID) { - ofs << FORMAT_SCI_MAX_DIGITS << _sampling.at(_target.cid).momentum.at(1).global.at(yPosID); + ofs << FORMAT_SCI_MAX_DIGITS << _sampling.at(_target.cid).velocity.at(1).global.at(yPosID); } ofs << std::endl; ofs.close(); diff --git a/src/plugins/NEMD/DriftCtrl.h b/src/plugins/NEMD/DriftCtrl.h index 6c83db3f85..5fdf4e4c02 100644 --- a/src/plugins/NEMD/DriftCtrl.h +++ b/src/plugins/NEMD/DriftCtrl.h @@ -15,8 +15,8 @@ struct BinVectors { CommVar > numParticles; - std::array >,3> momentum; - std::array,3> mom_corr; + std::array >,3> velocity; + std::array,3> velo_corr; }; class ParticleContainer; From 20ef5cc7c6c82ec1aceb71467ce2b9bb3ef7777e Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 29 Mar 2022 12:30:22 +0200 Subject: [PATCH 31/76] Fix in DriftCtrl to work with all components (cid=0) --- src/plugins/NEMD/DriftCtrl.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugins/NEMD/DriftCtrl.cpp b/src/plugins/NEMD/DriftCtrl.cpp index 373d6a47e3..9648b72c59 100644 --- a/src/plugins/NEMD/DriftCtrl.cpp +++ b/src/plugins/NEMD/DriftCtrl.cpp @@ -93,9 +93,12 @@ void DriftCtrl::readXML(XMLfileUnits& xmlconfig) // range _range.yl = 0.; - _range.yr = 100.; + _range.yr = _simulation.getDomain()->getGlobalLength(1); + std::string strVal; xmlconfig.getNodeValue("range/yl", _range.yl); - xmlconfig.getNodeValue("range/yr", _range.yr); + xmlconfig.getNodeValue("range/yr", strVal); + // accept "box" as input + _range.yr = (strVal == "box") ? _simulation.getDomain()->getGlobalLength(1) : atof(strVal.c_str()); global_log->info() << "[DriftCtrl] Enabled in range yl,yr=" << _range.yl << "," << _range.yr << std::endl; _range.width = _range.yr - _range.yl; // subdivision @@ -138,10 +141,13 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB const uint32_t cid_ub = cid_zb+1; const uint32_t yPosID = floor( (yPos-_range.yl) / _range.subdivision.binWidth.actual); - _sampling.at(cid_ub).numParticles.local.at(yPosID)++; - _sampling.at(cid_ub).velocity.at(0).local.at(yPosID) += it->v(0); - _sampling.at(cid_ub).velocity.at(1).local.at(yPosID) += it->v(1); - _sampling.at(cid_ub).velocity.at(2).local.at(yPosID) += it->v(2); + std::array cids = {0, cid_ub}; // add velocities to "all components" and respective component + for (int cid : cids) { + _sampling.at(cid).numParticles.local.at(yPosID)++; + _sampling.at(cid).velocity.at(0).local.at(yPosID) += it->v(0); + _sampling.at(cid).velocity.at(1).local.at(yPosID) += it->v(1); + _sampling.at(cid).velocity.at(2).local.at(yPosID) += it->v(2); + } } } From ed94b8bdbebbb97b0af3ea6aa995dc67bf8217fd Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 29 Mar 2022 12:35:58 +0200 Subject: [PATCH 32/76] Make stop work for RegionSampling; Clearify output in MettDaemon --- src/plugins/NEMD/MettDeamon.cpp | 4 ++-- src/plugins/NEMD/RegionSampling.cpp | 21 +++++++++++++++------ src/plugins/NEMD/RegionSampling.h | 6 +++--- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/plugins/NEMD/MettDeamon.cpp b/src/plugins/NEMD/MettDeamon.cpp index 794da39fa8..94f195374f 100644 --- a/src/plugins/NEMD/MettDeamon.cpp +++ b/src/plugins/NEMD/MettDeamon.cpp @@ -1455,7 +1455,7 @@ void Reservoir::sortParticlesToBins(DomainDecompBase* domainDecomp, ParticleCont this->changeComponentID(mol, mol.componentid() ); double y = mol.r(1); nBinIndex = floor(y / _dBinWidth); - global_log->debug() << "y="< MarDyn_version.h) + $(shell sed -i "s=@MarDyn_VERSION_HASH@=$(GIT_VERSION_HASH)=g" MarDyn_version.h) + $(shell sed -i "s=@MarDyn_VERSION_IS_DIRTY@=$(GIT_VERSION_IS_DIRTY)=g" MarDyn_version.h) + ifneq ($(GIT_VERSION_HASH),) + BINARY = $(BINARY_BASENAME)_$(GIT_VERSION_HASH).$(PARTYPE)_$(TARGET)_$(VECTORIZE_CODE) else BINARY = $(BINARY_BASENAME).$(PARTYPE)_$(TARGET)_$(VECTORIZE_CODE) endif From 0c102d8fd9cd63a48c049d2a5282c060a26c79d1 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 29 Mar 2022 12:39:00 +0200 Subject: [PATCH 34/76] Extend and improve sampling of profile data --- src/plugins/ExtendedProfileSampling.cpp | 380 ++++++++++++------------ src/plugins/ExtendedProfileSampling.h | 4 +- 2 files changed, 192 insertions(+), 192 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 2e2e64a570..0c59f7ab15 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -32,7 +32,6 @@ ExtendedProfileSampling::ExtendedProfileSampling() {} ExtendedProfileSampling::~ExtendedProfileSampling() { - delete _particlePairsHandler; // ??? } void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) { @@ -77,14 +76,10 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("stop", _stopSampling); // Default: 1000000000 xmlconfig.getNodeValue("singlecomponent", _singleComp); // Default: false - xmlconfig.getNodeValue("@enable", _sampleChemPot); // Default: false - bool bCP = xmlconfig.getNodeValue("chemicalpotential/lattice", _lattice); // Default: true - bCP = bCP || xmlconfig.getNodeValue("chemicalpotential/factorNumTest", _factorNumTest); // Default: 4.0 - bCP = bCP || xmlconfig.getNodeValue("chemicalpotential/samplefrequency", _samplefrequency); // Default: 50 - - if (bCP and !_sampleChemPot) { - global_log->warning() << "[ExtendedProfileSampling] Sampling of chem. pot. disabled, but control values in config specified! " << std::endl; - } + xmlconfig.getNodeValue("chemicalpotential/@enable", _sampleChemPot); // Default: false + xmlconfig.getNodeValue("chemicalpotential/lattice", _lattice); // Default: true + xmlconfig.getNodeValue("chemicalpotential/factorNumTest", _factorNumTest); // Default: 4.0 + xmlconfig.getNodeValue("chemicalpotential/samplefrequency", _samplefrequency); // Default: 50 string insMethod; if (_lattice) { @@ -95,13 +90,14 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { global_log->info() << "[ExtendedProfileSampling] Start:WriteFreq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; global_log->info() << "[ExtendedProfileSampling] Binwidth: " << _binwidth << std::endl; + if (_singleComp) { global_log->info() << "[ExtendedProfileSampling] All components treated as single one" << std::endl; } if (_sampleChemPot) { global_log->info() << "[ExtendedProfileSampling] Sampling of chemical potential enabled with a sampling frequency of " << _samplefrequency << std::endl; global_log->info() << "[ExtendedProfileSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; - } - - if (_samplefrequency > _writeFrequency) { - global_log->warning() << "[ExtendedProfileSampling] Sample frequency is greater than write frequency! " << std::endl; + if (_samplefrequency > _writeFrequency) { + global_log->warning() << "[ExtendedProfileSampling] Sample frequency (" << _samplefrequency << ") is greater than write frequency (" + << _writeFrequency << ")! " << std::endl; + } } } @@ -113,11 +109,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, return; } - // Sample only every _samplefrequency - if ( (simstep - _startSampling) % _samplefrequency != 0 ) { - return; - } - // Do not write or sample data directly after (re)start in the first step if ( simstep == global_simulation->getNumInitTimesteps() ) { return; @@ -133,6 +124,8 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, regionSize[d] = regionHighCorner[d] - regionLowCorner[d]; } + const unsigned int numComps = _simulation.getDomain()->getNumberOfComponents(); + CommVar> numMolecules_step; CommVar> ekin2_step; // Without drift energy CommVar> ekin2Trans_step; // Including drift energy @@ -159,8 +152,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, velocityVect_step.at(d).local.resize(_lenVector); virialVect_step.at(d).local.resize(_lenVector); energyfluxVect_step.at(d).local.resize(_lenVector); - - veloDrift_step_global.at(d).resize(_lenVector); } numMolecules_step.global.resize(_lenVector); @@ -175,36 +166,38 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, velocityVect_step.at(d).global.resize(_lenVector); virialVect_step.at(d).global.resize(_lenVector); energyfluxVect_step.at(d).global.resize(_lenVector); + + veloDrift_step_global.at(d).resize(_lenVector); } std::fill(numMolecules_step.local.begin(), numMolecules_step.local.end(), 0ul); - std::fill(ekin2_step.local.begin(), epot_step.local.end(), 0.0f); - std::fill(ekin2Trans_step.local.begin(), epot_step.local.end(), 0.0f); - std::fill(epot_step.local.begin(), epot_step.local.end(), 0.0f); - std::fill(chemPot_step.local.begin(), chemPot_step.local.end(), 0.0f); - std::fill(countNTest_step.local.begin(), countNTest_step.local.end(), 0ul); + std::fill(ekin2_step.local.begin(), ekin2_step.local.end(), 0.0f); + std::fill(ekin2Trans_step.local.begin(), ekin2Trans_step.local.end(), 0.0f); + std::fill(epot_step.local.begin(), epot_step.local.end(), 0.0f); + std::fill(chemPot_step.local.begin(), chemPot_step.local.end(), 0.0f); + std::fill(countNTest_step.local.begin(), countNTest_step.local.end(), 0ul); for (unsigned short d = 0; d < 3; d++) { - std::fill(ekin2Vect_step.at(d).local.begin(), ekin2Vect_step.at(d).local.end(), 0.0f); - std::fill(velocityVect_step.at(d).local.begin(), velocityVect_step.at(d).local.end(), 0.0f); - std::fill(virialVect_step.at(d).local.begin(), virialVect_step.at(d).local.end(), 0.0f); + std::fill(ekin2Vect_step.at(d).local.begin(), ekin2Vect_step.at(d).local.end(), 0.0f); + std::fill(velocityVect_step.at(d).local.begin(), velocityVect_step.at(d).local.end(), 0.0f); + std::fill(virialVect_step.at(d).local.begin(), virialVect_step.at(d).local.end(), 0.0f); std::fill(energyfluxVect_step.at(d).local.begin(), energyfluxVect_step.at(d).local.end(), 0.0f); - - std::fill(veloDrift_step_global.at(d).begin(), veloDrift_step_global.at(d).end(), 0.0f); } std::fill(numMolecules_step.global.begin(), numMolecules_step.global.end(), 0ul); - std::fill(ekin2_step.global.begin(), epot_step.global.end(), 0.0f); - std::fill(ekin2Trans_step.global.begin(), epot_step.global.end(), 0.0f); - std::fill(epot_step.global.begin(), epot_step.global.end(), 0.0f); - std::fill(chemPot_step.global.begin(), chemPot_step.global.end(), 0.0f); - std::fill(countNTest_step.global.begin(), countNTest_step.global.end(), 0ul); + std::fill(ekin2_step.global.begin(), ekin2_step.global.end(), 0.0f); + std::fill(ekin2Trans_step.global.begin(), ekin2Trans_step.global.end(), 0.0f); + std::fill(epot_step.global.begin(), epot_step.global.end(), 0.0f); + std::fill(chemPot_step.global.begin(), chemPot_step.global.end(), 0.0f); + std::fill(countNTest_step.global.begin(), countNTest_step.global.end(), 0ul); for (unsigned short d = 0; d < 3; d++) { - std::fill(ekin2Vect_step.at(d).global.begin(), ekin2Vect_step.at(d).global.end(), 0.0f); - std::fill(velocityVect_step.at(d).global.begin(), velocityVect_step.at(d).global.end(), 0.0f); - std::fill(virialVect_step.at(d).global.begin(), virialVect_step.at(d).global.end(), 0.0f); + std::fill(ekin2Vect_step.at(d).global.begin(), ekin2Vect_step.at(d).global.end(), 0.0f); + std::fill(velocityVect_step.at(d).global.begin(), velocityVect_step.at(d).global.end(), 0.0f); + std::fill(virialVect_step.at(d).global.begin(), virialVect_step.at(d).global.end(), 0.0f); std::fill(energyfluxVect_step.at(d).global.begin(), energyfluxVect_step.at(d).global.end(), 0.0f); + + std::fill(veloDrift_step_global.at(d).begin(), veloDrift_step_global.at(d).end(), 0.0f); } // Calculate drift as it is needed first @@ -212,13 +205,10 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double ry = pit->r(1); const uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin - numMolecules_step.local.at(index) ++; - velocityVect_step.at(0).local.at(index) += pit->v(0); - velocityVect_step.at(1).local.at(index) += pit->v(1); - velocityVect_step.at(2).local.at(index) += pit->v(2); + std::vector cids = {0}; // add velocities to "all components" (0) and respective component + if (!_singleComp) { cids.push_back(pit->componentid() + 1); } - if (!_singleComp) { - const unsigned int cid = pit->componentid() + 1; // 0 represents all components + for (unsigned int cid : cids) { const uint32_t indexCID = cid*_numBinsGlobal + index; numMolecules_step.local.at(indexCID) ++; velocityVect_step.at(0).local.at(indexCID) += pit->v(0); @@ -260,25 +250,15 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double veloY = pit->v(1); const double veloZ = pit->v(2); const double mass = pit->mass(); - const double epot = /* pit->U_pot() */ 0.0; + const double epot = pit->U_pot(); const double ekinX = mass * veloCorrX * veloCorrX + (pit->U_rot_2()/3.0); //??? Wie Rotation? const double ekinY = mass * veloCorrY * veloCorrY + (pit->U_rot_2()/3.0); //??? Wie Rotation? const double ekinZ = mass * veloCorrZ * veloCorrZ + (pit->U_rot_2()/3.0); //??? Wie Rotation? - ekin2_step.local.at(index) += ekinX + ekinY + ekinZ; - ekin2Trans_step.local.at(index) += pit->U_kin(); - epot_step.local.at(index) += epot; - ekin2Vect_step[0].local.at(index) += ekinX; - ekin2Vect_step[1].local.at(index) += ekinY; - ekin2Vect_step[2].local.at(index) += ekinZ; - virialVect_step[0].local.at(index) += pit->Vi(0); - virialVect_step[1].local.at(index) += pit->Vi(1); - virialVect_step[2].local.at(index) += pit->Vi(2); - energyfluxVect_step[0].local.at(index) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); - energyfluxVect_step[1].local.at(index) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); - energyfluxVect_step[2].local.at(index) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); - - if (!_singleComp) { - const unsigned int cid = pit->componentid() + 1; // 0 represents all components + + std::vector cids = {0}; // add quantities to "all components" (0) and respective component + if (!_singleComp) { cids.push_back(pit->componentid() + 1); } + + for (unsigned int cid : cids) { const uint32_t indexCID = cid*_numBinsGlobal + index; ekin2_step.local.at(indexCID) += ekinX + ekinY + ekinZ; ekin2Trans_step.local.at(indexCID) += pit->U_kin(); @@ -306,17 +286,26 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, for (unsigned long i = 0; i < _lenVector; i++) { const unsigned int cid = i/_numBinsGlobal; - const unsigned int dof = _simulation.getEnsemble()->getComponent(cid)->getRotationalDegreesOfFreedom(); - const unsigned long numMols = numMolecules_step.global.at(i); - if (numMols > 0ul) { - temperature_step_global.at(i) = ekin2_step.global.at(i) / ((3 + dof)*numMols); + unsigned int dof_rot {0}; + unsigned int dof_total {0}; + if (cid == 0) { + for (unsigned long cj = 0; cj < numComps; cj++) { + dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); + dof_total += (3 + dof_rot)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); + } + } else { + const unsigned long numMols = numMolecules_step.global.at(i); + dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); + dof_total = (3 + dof_rot)*numMols; + } + if (dof_total > 0ul) { + temperature_step_global.at(i) = ekin2_step.global.at(i) / dof_total; } - cout << i << " " << cid << " " << dof << " " << temperature_step_global.at(i) << endl; } // Calculate chemical potential - if (_sampleChemPot) { + if (_sampleChemPot and ((simstep - _startSampling) % _samplefrequency == 0 )) { // Calculate number of test particles per bin std::vector dX(_numBinsGlobal, 0.0); std::vector dY(_numBinsGlobal, 0.0); @@ -361,7 +350,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _mTest.setr(1,rY); _mTest.setr(2,rZ); const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); - double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); + double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); // Global temperature of all components if (std::isfinite(chemPot)) { chemPot_step.local.at(index) += chemPot; countNTest_step.local.at(index)++; @@ -422,6 +411,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // Calculate further quantities #ifdef ENABLE_MPI + MPI_Reduce(ekin2Trans_step.local.data(), ekin2Trans_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(epot_step.local.data(), epot_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[0].local.data(), virialVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[1].local.data(), virialVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); @@ -436,6 +426,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, MPI_Reduce(countNTest_step.local.data(), countNTest_step.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); #else for (unsigned long i = 0; i < _lenVector; i++) { + ekin2Trans_step.global.at(i) = ekin2Trans_step.local.at(i); epot_step.global.at(i) = epot_step.local.at(i); virialVect_step[0].global.at(i) = virialVect_step[0].local.at(i); virialVect_step[1].global.at(i) = virialVect_step[1].local.at(i); @@ -451,24 +442,34 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } #endif - // Only root calculates further quantities and accumulates them + // Only root knows real quantities (MPI_Reduce instead of MPI_Allreduce) if (domainDecomp->getRank() == 0) { for (unsigned long i = 0; i < _lenVector; i++) { const unsigned long numMols = numMolecules_step.global.at(i); - if (numMols > 0) { - const unsigned int cid = i/_numBinsGlobal; - const unsigned int dof = _simulation.getEnsemble()->getComponent(cid)->getRotationalDegreesOfFreedom(); + const unsigned int cid = i/_numBinsGlobal; + unsigned int dof_rot {0}; + unsigned int dof_total {0}; + if (cid == 0) { + for (unsigned long cj = 0; cj < numComps; cj++) { + dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); + dof_total += (1 + dof_rot/3.0)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); // ??? rot dof + } + } else { + dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); + dof_total = (1 + dof_rot/3.0)*numMols; // ??? rot dof + } + if (dof_total > 0) { const double rho = numMols / _slabVolume; const double ViX = virialVect_step[0].global.at(i); const double ViY = virialVect_step[1].global.at(i); const double ViZ = virialVect_step[2].global.at(i); - const double Tx = ekin2Vect_step[0].global.at(i) / ((1 + dof/3.0)*numMols); // ??? dof - const double Ty = ekin2Vect_step[1].global.at(i) / ((1 + dof/3.0)*numMols); // ??? dof - const double Tz = ekin2Vect_step[2].global.at(i) / ((1 + dof/3.0)*numMols); // ??? dof + const double Tx = ekin2Vect_step[0].global.at(i) / dof_total; + const double Ty = ekin2Vect_step[1].global.at(i) / dof_total; + const double Tz = ekin2Vect_step[2].global.at(i) / dof_total; _numMolecules_accum.at(i) += numMolecules_step.global.at(i); _density_accum.at(i) += rho; _temperature_accum.at(i) += temperature_step_global.at(i); // ??? oder (Tx+Ty+Tz)/3.0 - cout << "EPS " << temperature_step_global.at(i) << " " << (Tx+Ty+Tz)/3.0 << endl; + // cout << "EPS " << i%_numBinsGlobal << " " << i << " " << cid << " " << temperature_step_global.at(i) << " " << (Tx+Ty+Tz)/3.0 << endl; _ekin_accum.at(i) += ekin2Trans_step.global.at(i) / numMols; _epot_accum.at(i) += epot_step.global.at(i) / numMols; _pressure_accum.at(i) += rho * ( (ViX + ViY + ViZ)/(3.0*numMols) + temperature_step_global.at(i) ); // ??? Welche Temperature? Mit Drift? Statisch/dynamisch? @@ -493,127 +494,126 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } } - // Write out data every _writeFrequency step - if ( (simstep - _startSampling) % _writeFrequency != 0 ) { - return; - } - - if (domainDecomp->getRank() == 0) { - unsigned long numOutputs = (_singleComp) ? 1ul : (_simulation.getDomain()->getNumberOfComponents()+1); - - // Write output file - std::stringstream ss; - ss << std::setw(9) << std::setfill('0') << simstep; - const std::string fname = "ExtendedProfileSampling_TS"+ss.str()+".dat"; - std::ofstream ofs; - ofs.open(fname, std::ios::out); - ofs << setw(24) << "pos"; // Bin position - for (unsigned long cid = 0; cid < numOutputs; cid++) { - ofs << setw(24) << "numParts["< 0ul) { - numMolsPerStep = static_cast(_numMolecules_accum.at(i))/_countSamples.at(i); - rho = _density_accum.at(i) /_countSamples.at(i); - T = _temperature_accum.at(i) /_countSamples.at(i); - ekin = _ekin_accum.at(i) /_countSamples.at(i); - epot = _epot_accum.at(i) /_countSamples.at(i); - p = _pressure_accum.at(i) /_countSamples.at(i); - chemPot_res = _chemPot_accum.at(i) /_countSamples.at(i); - numTest = static_cast(_countNTest_accum.at(i))/_countSamples.at(i); - T_x = _temperatureVect_accum[0].at(i)/_countSamples.at(i); - T_y = _temperatureVect_accum[1].at(i)/_countSamples.at(i); - T_z = _temperatureVect_accum[2].at(i)/_countSamples.at(i); - v_x = _velocityVect_accum[0].at(i) /_countSamples.at(i); - v_y = _velocityVect_accum[1].at(i) /_countSamples.at(i); - v_z = _velocityVect_accum[2].at(i) /_countSamples.at(i); - p_x = _pressureVect_accum[0].at(i) /_countSamples.at(i); - p_y = _pressureVect_accum[1].at(i) /_countSamples.at(i); - p_z = _pressureVect_accum[2].at(i) /_countSamples.at(i); - jEF_x = _energyfluxVect_accum[0].at(i) /_countSamples.at(i); - jEF_y = _energyfluxVect_accum[1].at(i) /_countSamples.at(i); - jEF_z = _energyfluxVect_accum[2].at(i) /_countSamples.at(i); - numSamples = _countSamples.at(i); - } - if ((_chemPot_accum.at(i) > 0.0) and (_countNTest_accum.at(i) > 0ul) and (_countSamples.at(i) > 0ul)) { - numTest = _countNTest_accum.at(i)/_countSamples.at(i); - chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); - } - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (i+0.5)*_binwidth; + if ( (simstep - _startSampling) % _writeFrequency == 0 ) { + + if (domainDecomp->getRank() == 0) { + unsigned long numOutputs = (_singleComp) ? 1ul : (_simulation.getDomain()->getNumberOfComponents()+1); + + // Write output file + std::stringstream ss; + ss << std::setw(9) << std::setfill('0') << simstep; + const std::string fname = "ExtendedProfileSampling_TS"+ss.str()+".dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::out); + ofs << setw(24) << "pos"; // Bin position for (unsigned long cid = 0; cid < numOutputs; cid++) { - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) - << numMolsPerStep - << rho - << T - << ekin - << epot - << p - << chemPot_res - << numTest - << T_x - << T_y - << T_z - << v_x - << v_y - << v_z - << p_x - << p_y - << p_z - << jEF_x - << jEF_y - << jEF_z - << numSamples; + ofs << setw(22) << "numParts["<::digits10) << (idx+0.5)*_binwidth; + for (unsigned long cid = 0; cid < numOutputs; cid++) { + unsigned long i = idx + cid*_numBinsGlobal; + double numMolsPerStep {0.0}; // Not an int as particles change bin during simulation + double rho {0.0}; + double T {0.0}; + double ekin {0.0}; + double epot {0.0}; + double p {0.0}; + double chemPot_res {0.0}; + double numTest {0.0}; + double T_x {0.0}; + double T_y {0.0}; + double T_z {0.0}; + double v_x {0.0}; + double v_y {0.0}; + double v_z {0.0}; + double p_x {0.0}; + double p_y {0.0}; + double p_z {0.0}; + double jEF_x {0.0}; + double jEF_y {0.0}; + double jEF_z {0.0}; + double numSamples {0.0}; + if (_countSamples.at(i) > 0ul) { + numMolsPerStep = static_cast(_numMolecules_accum.at(i))/_countSamples.at(i); + rho = _density_accum.at(i) /_countSamples.at(i); + T = _temperature_accum.at(i) /_countSamples.at(i); + ekin = _ekin_accum.at(i) /_countSamples.at(i); + epot = _epot_accum.at(i) /_countSamples.at(i); + p = _pressure_accum.at(i) /_countSamples.at(i); + chemPot_res = _chemPot_accum.at(i) /_countSamples.at(i); + numTest = static_cast(_countNTest_accum.at(i))/_countSamples.at(i); + T_x = _temperatureVect_accum[0].at(i)/_countSamples.at(i); + T_y = _temperatureVect_accum[1].at(i)/_countSamples.at(i); + T_z = _temperatureVect_accum[2].at(i)/_countSamples.at(i); + v_x = _velocityVect_accum[0].at(i) /_countSamples.at(i); + v_y = _velocityVect_accum[1].at(i) /_countSamples.at(i); + v_z = _velocityVect_accum[2].at(i) /_countSamples.at(i); + p_x = _pressureVect_accum[0].at(i) /_countSamples.at(i); + p_y = _pressureVect_accum[1].at(i) /_countSamples.at(i); + p_z = _pressureVect_accum[2].at(i) /_countSamples.at(i); + jEF_x = _energyfluxVect_accum[0].at(i) /_countSamples.at(i); + jEF_y = _energyfluxVect_accum[1].at(i) /_countSamples.at(i); + jEF_z = _energyfluxVect_accum[2].at(i) /_countSamples.at(i); + numSamples = _countSamples.at(i); + } + if ((_chemPot_accum.at(i) > 0.0) and (_countNTest_accum.at(i) > 0ul) and (_countSamples.at(i) > 0ul)) { + numTest = _countNTest_accum.at(i)/_countSamples.at(i); + chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); + } + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << rho + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << ekin + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << epot + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot_res + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numTest + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T_x + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T_y + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T_z + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << v_x + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << v_y + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << v_z + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p_x + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p_y + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p_z + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << jEF_x + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << jEF_y + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << jEF_z + << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numSamples; + } + ofs << std::endl; + } + ofs.close(); } - ofs.close(); - } - // Reset vectors to zero - resetVectors(); + // Reset vectors to zero + resetVectors(); + } } // Resize vectors diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index f26a8b0d08..e55deb9621 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -25,11 +25,11 @@ INT INT BOOL - + BOOL FLOAT INT - + * * \endcode */ From c51d7cac9bff619049ec9d549c0b911c45783311 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 29 Mar 2022 18:25:54 +0200 Subject: [PATCH 35/76] Enable direct sampling of energy flux when using the legacy cell processor --- src/Simulation.cpp | 4 +- src/ensemble/ChemicalPotential.cpp | 14 ++- src/longRange/Homogeneous.cpp | 10 +- src/longRange/Homogeneous.h | 3 +- src/longRange/Planar.cpp | 63 ++++++++++- src/longRange/Planar.h | 3 +- src/molecules/FullMolecule.cpp | 48 ++++++++- src/molecules/FullMolecule.h | 39 +++++-- src/molecules/MoleculeInterface.h | 18 +++- src/molecules/MoleculeRMM.h | 1 + src/molecules/potforce.h | 149 ++++++++++++++++++++++----- src/parallel/CommunicationBuffer.cpp | 14 ++- src/parallel/ParticleForceData.cpp | 8 +- src/parallel/ParticleForceData.h | 2 +- 14 files changed, 319 insertions(+), 57 deletions(-) diff --git a/src/Simulation.cpp b/src/Simulation.cpp index 0c0635047a..75b4a56de4 100644 --- a/src/Simulation.cpp +++ b/src/Simulation.cpp @@ -535,7 +535,7 @@ void Simulation::readXML(XMLfileUnits& xmlconfig) { { delete _longRangeCorrection; global_log->info() << "Initializing homogeneous LRC." << endl; - _longRangeCorrection = new Homogeneous(_cutoffRadius, _LJCutoffRadius, _domain, global_simulation); + _longRangeCorrection = new Homogeneous(_cutoffRadius, _LJCutoffRadius, _domain, _moleculeContainer, global_simulation); } else if("none" == type) { @@ -551,7 +551,7 @@ void Simulation::readXML(XMLfileUnits& xmlconfig) { } else { delete _longRangeCorrection; global_log->info() << "Initializing default homogeneous LRC, as no LRC was defined." << endl; - _longRangeCorrection = new Homogeneous(_cutoffRadius, _LJCutoffRadius, _domain, global_simulation); + _longRangeCorrection = new Homogeneous(_cutoffRadius, _LJCutoffRadius, _domain, _moleculeContainer, global_simulation); } xmlconfig.changecurrentnode(".."); /* algorithm section */ diff --git a/src/ensemble/ChemicalPotential.cpp b/src/ensemble/ChemicalPotential.cpp index 0b29593492..efc5d17471 100644 --- a/src/ensemble/ChemicalPotential.cpp +++ b/src/ensemble/ChemicalPotential.cpp @@ -471,6 +471,8 @@ void ChemicalPotential::grandcanonicalStep( bool hasInsertion = true; double ins[3]; unsigned nextid = 0; + double zeroVec[3] = {0.0, 0.0, 0.0}; + double zeroVec9[9] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; while (hasDeletion || hasInsertion) { if (hasDeletion) { auto m = this->getDeletion(moleculeContainer, minco, maxco); @@ -493,10 +495,9 @@ void ChemicalPotential::grandcanonicalStep( // m->upd_cache(); TODO what to do here? somebody deleted the method "upd_cache"!!! why??? // reset forces and momenta to zero { - double zeroVec[3] = {0.0, 0.0, 0.0}; m->setF(zeroVec); m->setM(zeroVec); - m->setVi(zeroVec); + m->setVi(zeroVec9); } this->storeMolecule(*m); @@ -538,10 +539,9 @@ void ChemicalPotential::grandcanonicalStep( // m->upd_cache(); TODO: what to do here? somebody deleted the method "upd_cache"!!! why??? -- update caches do no longer exist ;) // reset forces and torques to zero if (!this->isWidom()) { - double zeroVec[3] = { 0.0, 0.0, 0.0 }; mit->setF(zeroVec); mit->setM(zeroVec); - mit->setVi(zeroVec); + mit->setVi(zeroVec9); } mit->check(nextid); #ifndef NDEBUG @@ -573,17 +573,15 @@ void ChemicalPotential::grandcanonicalStep( #endif if (accept) { this->_localInsertionsMinusDeletions++; - double zeroVec[3] = { 0.0, 0.0, 0.0 }; - tmp.setVi(zeroVec); + tmp.setVi(zeroVec9); bool inBoxCheckedAlready = false, checkWhetherDuplicate = false, rebuildCaches = true; moleculeContainer->addParticle(tmp, inBoxCheckedAlready, checkWhetherDuplicate, rebuildCaches); } else { // moleculeContainer->deleteMolecule(m->getID(), m->r(0), m->r(1), m->r(2)); // moleculeContainer->_cells[cellid].deleteMolecule(m->getID()); - double zeroVec[3] = { 0.0, 0.0, 0.0 }; mit->setF(zeroVec); mit->setM(zeroVec); - mit->setVi(zeroVec); + mit->setVi(zeroVec9); mit->check(mit->getID()); // moleculeContainer->_particles.erase(mit); } diff --git a/src/longRange/Homogeneous.cpp b/src/longRange/Homogeneous.cpp index 95d52659e8..8004cb5796 100644 --- a/src/longRange/Homogeneous.cpp +++ b/src/longRange/Homogeneous.cpp @@ -5,16 +5,19 @@ #include "Simulation.h" #include "longRange/Homogeneous.h" //#include "LongRangeCorrection.h" +#include "molecules/Molecule.h" +#include "particleContainer/ParticleContainer.h" #include "utils/Logger.h" using Log::global_log; using namespace std; -Homogeneous::Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, Simulation* simulation) { +Homogeneous::Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, ParticleContainer* particleContainer, Simulation* simulation) { _cutoff = cutoffRadius; _cutoffLJ = cutoffRadiusLJ; _domain = domain; + _particleContainer = particleContainer; _components = simulation->getEnsemble()->getComponents(); } @@ -137,6 +140,11 @@ void Homogeneous::calculateLongRange() { << endl; _domain->setUpotCorr(UpotCorr); _domain->setVirialCorr(VirialCorr); + + for (auto tempMol = _particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); tempMol.isValid(); ++tempMol) { + tempMol->setUConstCorr(UpotCorr/globalNumMolecules); + tempMol->setViConstCorr(VirialCorr/globalNumMolecules); + } } double Homogeneous::_TICCu(int n, double rc, double sigma2) { diff --git a/src/longRange/Homogeneous.h b/src/longRange/Homogeneous.h index 2fd0ad6ae2..4362d5857a 100644 --- a/src/longRange/Homogeneous.h +++ b/src/longRange/Homogeneous.h @@ -16,7 +16,7 @@ class Homogeneous: public LongRangeCorrection{ public: // Homogeneous(); - Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, Simulation* simulation); + Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, ParticleContainer* particleContainer, Simulation* simulation); virtual ~Homogeneous() {} virtual void init(); @@ -40,6 +40,7 @@ class Homogeneous: public LongRangeCorrection{ Comp2Param _comp2params; Domain* _domain{nullptr}; + ParticleContainer* _particleContainer{nullptr}; double _cutoff{std::numeric_limits::quiet_NaN()}; double _cutoffLJ{std::numeric_limits::quiet_NaN()}; diff --git a/src/longRange/Planar.cpp b/src/longRange/Planar.cpp index acc41eb7d9..a3746d7fea 100644 --- a/src/longRange/Planar.cpp +++ b/src/longRange/Planar.cpp @@ -39,6 +39,8 @@ Planar::~Planar() { void Planar::init() { + global_log->info() << "[Long Range Correction] Initializing" << endl; + //_smooth=true; // Deactivate this for transient simulations! _smooth=false; //true; <-- only applicable to static density profiles @@ -72,6 +74,7 @@ void Planar::init() resizeExactly(uLJ, _slabs*numLJSum); resizeExactly(vNLJ, _slabs*numLJSum); resizeExactly(vTLJ, _slabs*numLJSum); + resizeExactly(vNDLJ, _slabs*numLJSum); resizeExactly(fLJ, _slabs*numLJSum); resizeExactly(rho_g, _slabs*numLJSum); resizeExactly(rho_l, _slabs*numLJSum); @@ -262,6 +265,7 @@ void Planar::calculateLongRange() { std::fill(uLJ.begin(), uLJ.end(), 0.0); std::fill(vNLJ.begin(), vNLJ.end(), 0.0); std::fill(vTLJ.begin(), vTLJ.end(), 0.0); + std::fill(vNDLJ.begin(), vNDLJ.end(), 0.0); std::fill(fLJ.begin(), fLJ.end(), 0.0); std::fill(fDipole.begin(), fDipole.end(), 0.0); @@ -371,11 +375,12 @@ void Planar::calculateLongRange() { } // Distribution of the Force, Energy and Virial to every Node - _domainDecomposition->collCommInit(_slabs*(4*numLJSum+4*numDipoleSum)); + _domainDecomposition->collCommInit(_slabs*(5*numLJSum+4*numDipoleSum)); for (unsigned i=0; i<_slabs*numLJSum; i++){ _domainDecomposition->collCommAppendDouble(uLJ[i]); _domainDecomposition->collCommAppendDouble(vNLJ[i]); _domainDecomposition->collCommAppendDouble(vTLJ[i]); + _domainDecomposition->collCommAppendDouble(vNDLJ[i]); _domainDecomposition->collCommAppendDouble(fLJ[i]); } for (unsigned i=0; i<_slabs*numDipoleSum; i++){ @@ -389,6 +394,7 @@ void Planar::calculateLongRange() { uLJ[i]=_domainDecomposition->collCommGetDouble(); vNLJ[i]=_domainDecomposition->collCommGetDouble(); vTLJ[i]=_domainDecomposition->collCommGetDouble(); + vNDLJ[i]=_domainDecomposition->collCommGetDouble(); fLJ[i]=_domainDecomposition->collCommGetDouble(); } for (unsigned i=0; i<_slabs*numDipoleSum; i++){ @@ -430,15 +436,21 @@ void Planar::calculateLongRange() { Fa[1] = fLJ[index]; Upot_c += uLJ[index]; Virial_c += 2 * vTLJ[index] + vNLJ[index]; - double Via[3] = {0.0, 0.0, 0.0}; + double Via[9] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; /**< Virial tensor all elements: rxfx, ryfy, rzfz, rxfy, rxfz, ryfz, ryfx, rzfx, rzfy */ Via[0] = vTLJ[index]; Via[1] = vNLJ[index]; Via[2] = vTLJ[index]; + Via[3] = vNDLJ[index]; + Via[4] = vTLJ[index]; + Via[5] = vNDLJ[index]; + Via[6] = vNDLJ[index]; + Via[7] = vTLJ[index]; + Via[8] = vNDLJ[index]; if ((tempMol->r(1) >= _region.actPos[0]) && (tempMol->r(1) <= _region.actPos[1])) { tempMol->Fljcenteradd(i, Fa); } tempMol->Viadd(Via); -// tempMol->Uadd(uLJ[loc+i*s+_slabs*numLJSum2[cid]]); // Storing potential energy onto the molecules is currently not implemented! + tempMol->Uadd(uLJ[index]); } if (numDipole[cid] != 0){ int loc = tempMol->r(1) * delta_inv; @@ -447,15 +459,17 @@ void Planar::calculateLongRange() { Fa[1] = fDipole[index]; Upot_c += uDipole[index]; Virial_c += 2 * vTDipole[index] + vNDipole[index]; - double Via[3] = {0.0, 0.0, 0.0}; + double Via[9] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; /**< Virial tensor all elements: rxfx, ryfy, rzfz, rxfy, rxfz, ryfz, ryfx, rzfx, rzfy */ Via[0] = vTDipole[index]; Via[1] = vNDipole[index]; Via[2] = vTDipole[index]; + Via[4] = vTDipole[index]; + Via[7] = vTDipole[index]; if ((tempMol->r(1) >= _region.actPos[0]) && (tempMol->r(1) <= _region.actPos[1])) { tempMol->Fadd(Fa); // Force is stored on the center of mass of the molecule! } tempMol->Viadd(Via); -// tempMol->Uadd(uDipole[loc+i*_slabs+_slabs*numDipoleSum2[cid]]); // Storing potential energy onto the molecules is currently not implemented! + tempMol->Uadd(uDipole[index]); } } @@ -488,6 +502,7 @@ void Planar::centerCenter(double sig, double eps,unsigned ci,unsigned cj,unsigne double termF = 8*3.1416*delta*eps*sig; double termVN = 4*3.1416*delta*eps*sig*sig; double termVT = 2*3.1416*delta*eps*sig*sig; + double termVND = 48*3.1416*delta*eps*sig; const unsigned slabsHalf = _slabs / 2; for (unsigned i=_domainDecomposition->getRank(); igetNumProcs()){ const int index_i = i+si*_slabs+_slabs*numLJSum2[ci]; @@ -518,6 +533,8 @@ void Planar::centerCenter(double sig, double eps,unsigned ci,unsigned cj,unsigne uLJ[index_j] += termU*rhoI*(r12*0.2-r6*0.5)/r2; vNLJ[index_i] += termVN*rhoJ*(r12-r6)/(r*r); vNLJ[index_j] += termVN*rhoI*(r12-r6)/(r*r); + vNDLJ[index_i] += termVND*rhoJ*(0.2*r12-(2/11)*r6)/r; + vNDLJ[index_j] += termVND*rhoI*(0.2*r12-(2/11)*r6)/r; fLJ[index_i] += -termF*rhoJ*(r12-r6)/r; fLJ[index_j] += termF*rhoI*(r12-r6)/r; } @@ -545,6 +562,8 @@ void Planar::centerCenter(double sig, double eps,unsigned ci,unsigned cj,unsigne uLJ[index_j] += termU*rhoI*(r12*0.2-r6*0.5)/r2; vNLJ[index_i] += termVN*rhoJ*(r12-r6)/(r*r); vNLJ[index_j] += termVN*rhoI*(r12-r6)/(r*r); + vNDLJ[index_i] += termVND*rhoJ*(0.2*r12-(2/11)*r6)/r; + vNDLJ[index_j] += termVND*rhoI*(0.2*r12-(2/11)*r6)/r; fLJ[index_i] += termF*rhoJ*(r12-r6)/r; fLJ[index_j] += -termF*rhoI*(r12-r6)/r; } @@ -581,6 +600,8 @@ void Planar::centerCenter(double sig, double eps,unsigned ci,unsigned cj,unsigne uLJ[index_j] += termU*rhoI*(r12*0.2-r6*0.5)/r2; vNLJ[index_i] += termVN*rhoJ*(r12-r6)/(r*r); vNLJ[index_j] += termVN*rhoI*(r12-r6)/(r*r); + vNDLJ[index_i] += termVND*rhoJ*(0.2*r12-(2/11)*r6)/r; + vNDLJ[index_j] += termVND*rhoI*(0.2*r12-(2/11)*r6)/r; fLJ[index_i] += -termF*rhoJ*(r12-r6)/r; fLJ[index_j] += termF*rhoI*(r12-r6)/r; } @@ -608,6 +629,7 @@ void Planar::centerSite(double sig, double eps,unsigned ci,unsigned cj,unsigned double termVNRC=termFRC/2; double termVTRC1=-3.1416*eps*delta*sig2/(2*t*rc)*((rcPt10-rcMt10)/5-(rcPt4-rcMt4)/2); double termVTRC2=termURC/2; + double termVNDRC=-3.1416*eps*delta*(sig2/t)*(0.44*(rcPt10-rcMt10)-1.25*(rcPt4-rcMt4)); double r,r2; double rhoI,rhoJ; for (unsigned i=_domainDecomposition->getRank(); i<_slabs/2; i+=_domainDecomposition->getNumProcs()){ @@ -641,10 +663,13 @@ void Planar::centerSite(double sig, double eps,unsigned ci,unsigned cj,unsigned double termF=-2*3.1416*eps*delta*sig2/(t*r)*((rPt10-rMt10)/5-(rPt4-rMt4)/2); double termVN=termF/2; double termVT2=termU/2; + double termVND=-3.1416*eps*delta*(sig2/t)*(0.44*(rPt10-rMt10)-1.25*(rPt4-rMt4)); uLJ[index_i]+=rhoJ*termU; uLJ[index_j]+=rhoI*termU; vNLJ[index_i]+=rhoJ*termVN*r2; vNLJ[index_j]+=rhoI*termVN*r2; + vNDLJ[index_i]+=rhoJ*termVND*r; + vNDLJ[index_j]+=rhoI*termVND*r; vTLJ[index_j]+=rhoI*termVT2; vTLJ[index_i]+=rhoJ*termVT2; fLJ[index_i]+=-rhoJ*termF*r; @@ -655,6 +680,8 @@ void Planar::centerSite(double sig, double eps,unsigned ci,unsigned cj,unsigned uLJ[index_j]+=rhoI*termURC; vNLJ[index_i]+=rhoJ*termVNRC*r2; vNLJ[index_j]+=rhoI*termVNRC*r2; + vNDLJ[index_i]+=rhoJ*termVNDRC*r; + vNDLJ[index_j]+=rhoI*termVNDRC*r; vTLJ[index_j]+=rhoI*(termVTRC1*(rc2-r2)+termVTRC2); vTLJ[index_i]+=rhoJ*(termVTRC1*(rc2-r2)+termVTRC2); fLJ[index_i]+=-rhoJ*termFRC*r; @@ -683,10 +710,13 @@ void Planar::centerSite(double sig, double eps,unsigned ci,unsigned cj,unsigned double termF=-2*3.1416*eps*delta*sig2/(t*r)*((rPt10-rMt10)/5-(rPt4-rMt4)/2); double termVN=termF/2; double termVT2=termU/2; + double termVND=-3.1416*eps*delta*(sig2/t)*(0.44*(rPt10-rMt10)-1.25*(rPt4-rMt4)); uLJ[index_i]+=rhoJ*termU; uLJ[index_j]+=rhoI*termU; vNLJ[index_i]+=rhoJ*termVN*r2; vNLJ[index_j]+=rhoI*termVN*r2; + vNDLJ[index_i]+=rhoJ*termVND*r; + vNDLJ[index_j]+=rhoI*termVND*r; vTLJ[index_i]+=rhoJ*termVT2; vTLJ[index_j]+=rhoI*termVT2; fLJ[index_i]+=rhoJ*termF*r; @@ -697,6 +727,8 @@ void Planar::centerSite(double sig, double eps,unsigned ci,unsigned cj,unsigned uLJ[index_j]+=rhoI*termURC; vNLJ[index_i]+=rhoJ*termVNRC*r2; vNLJ[index_j]+=rhoI*termVNRC*r2; + vNDLJ[index_i]+=rhoJ*termVNDRC*r; + vNDLJ[index_j]+=rhoI*termVNDRC*r; vTLJ[index_i]+=rhoJ*(termVTRC1*(rc2-r2)+termVTRC2); vTLJ[index_j]+=rhoI*(termVTRC1*(rc2-r2)+termVTRC2); fLJ[index_i]+=rhoJ*termFRC*r; @@ -737,10 +769,13 @@ void Planar::centerSite(double sig, double eps,unsigned ci,unsigned cj,unsigned double termF=-2*3.1416*eps*delta*sig2/(t*r)*((rPt10-rMt10)/5-(rPt4-rMt4)/2); double termVN=termF/2; double termVT2=termU/2; + double termVND=-3.1416*eps*delta*(sig2/t)*(0.44*(rPt10-rMt10)-1.25*(rPt4-rMt4)); uLJ[index_i]+=rhoJ*termU; uLJ[index_j]+=rhoI*termU; vNLJ[index_i]+=rhoJ*termVN*r2; vNLJ[index_j]+=rhoI*termVN*r2; + vNDLJ[index_i]+=rhoJ*termVND*r; + vNDLJ[index_j]+=rhoI*termVND*r; vTLJ[index_j]+=rhoI*termVT2; vTLJ[index_i]+=rhoJ*termVT2; fLJ[index_i]+=-rhoJ*termF*r; @@ -751,6 +786,8 @@ void Planar::centerSite(double sig, double eps,unsigned ci,unsigned cj,unsigned uLJ[index_j]+=rhoI*termURC; vNLJ[index_i]+=rhoJ*termVNRC*r2; vNLJ[index_j]+=rhoI*termVNRC*r2; + vNDLJ[index_i]+=rhoJ*termVNDRC*r; + vNDLJ[index_j]+=rhoI*termVNDRC*r; vTLJ[index_j]+=rhoI*(termVTRC1*(rc2-r2)+termVTRC2); vTLJ[index_i]+=rhoJ*(termVTRC1*(rc2-r2)+termVTRC2); fLJ[index_i]+=-rhoJ*termFRC*r; @@ -795,6 +832,7 @@ void Planar::siteSite(double sig, double eps,unsigned ci,unsigned cj,unsigned si double termVNRC=termFRC/2; double termVTRC1=3.1416*eps*delta*sig3/(4*t1*t2*rc)*((rcPtP9-rcPtM9-rcMtM9+rcMtP9)/45-(rcPtP3-rcPtM3-rcMtM3+rcMtP3)/6); double termVTRC2=termURC/2; + double termVNDRC=2*3.1416*eps*delta*sig3/(t1*t2)*((rcPtP9-rcPtM9-rcMtM9+rcMtP9)/81-(rcPtP3-rcPtM3-rcMtM3+rcMtP3)/9); double r,r2; double rhoI,rhoJ; for (unsigned i=_domainDecomposition->getRank(); i<_slabs/2; i+=_domainDecomposition->getNumProcs()) { @@ -838,10 +876,13 @@ void Planar::siteSite(double sig, double eps,unsigned ci,unsigned cj,unsigned si double termF=3.1416*eps*delta*sig3/(3*t1*t2*r)*((rPtP9-rPtM9-rMtM9+rMtP9)/15-(rPtP3-rPtM3-rMtM3+rMtP3)/2); double termVN=termF/2; double termVT2=termU/2; + double termVND=2*3.1416*eps*delta*sig3/(t1*t2)*((rPtP9-rPtM9-rMtM9+rMtP9)/81-(rPtP3-rPtM3-rMtM3+rMtP3)/9); uLJ[index_i]+=rhoJ*termU; uLJ[index_j]+=rhoI*termU; vNLJ[index_i]+=rhoJ*termVN*r2; vNLJ[index_j]+=rhoI*termVN*r2; + vNDLJ[index_i]+=rhoJ*termVND*r; + vNDLJ[index_j]+=rhoI*termVND*r; vTLJ[index_j]+=rhoI*termVT2; vTLJ[index_i]+=rhoJ*termVT2; fLJ[index_i]+=-rhoJ*termF*r; @@ -852,6 +893,8 @@ void Planar::siteSite(double sig, double eps,unsigned ci,unsigned cj,unsigned si uLJ[index_j]+=rhoI*termURC; vNLJ[index_i]+=rhoJ*termVNRC*r2; vNLJ[index_j]+=rhoI*termVNRC*r2; + vNDLJ[index_i]+=rhoJ*termVNDRC*r; + vNDLJ[index_j]+=rhoI*termVNDRC*r; vTLJ[index_j]+=rhoI*(termVTRC1*(rc2-r2)+termVTRC2); vTLJ[index_i]+=rhoJ*(termVTRC1*(rc2-r2)+termVTRC2); fLJ[index_i]+=-rhoJ*termFRC*r; @@ -890,10 +933,13 @@ void Planar::siteSite(double sig, double eps,unsigned ci,unsigned cj,unsigned si double termF=3.1416*eps*delta*sig3/(3*t1*t2*r)*((rPtP9-rPtM9-rMtM9+rMtP9)/15-(rPtP3-rPtM3-rMtM3+rMtP3)/2); double termVN=termF/2; double termVT2=termU/2; + double termVND=2*3.1416*eps*delta*sig3/(t1*t2)*((rPtP9-rPtM9-rMtM9+rMtP9)/81-(rPtP3-rPtM3-rMtM3+rMtP3)/9); uLJ[index_i]+=rhoJ*termU; uLJ[index_j]+=rhoI*termU; vNLJ[index_i]+=rhoJ*termVN*r2; vNLJ[index_j]+=rhoI*termVN*r2; + vNDLJ[index_i]+=rhoJ*termVND*r; + vNDLJ[index_j]+=rhoI*termVND*r; vTLJ[index_j]+=rhoI*termVT2; vTLJ[index_i]+=rhoJ*termVT2; fLJ[index_i]+=rhoJ*termF*r; @@ -904,6 +950,8 @@ void Planar::siteSite(double sig, double eps,unsigned ci,unsigned cj,unsigned si uLJ[index_j]+=rhoI*termURC; vNLJ[index_i]+=rhoJ*termVNRC*r2; vNLJ[index_j]+=rhoI*termVNRC*r2; + vNDLJ[index_i]+=rhoJ*termVNDRC*r; + vNDLJ[index_j]+=rhoI*termVNDRC*r; vTLJ[index_j]+=rhoI*(termVTRC1*(rc2-r2)+termVTRC2); vTLJ[index_i]+=rhoJ*(termVTRC1*(rc2-r2)+termVTRC2); fLJ[index_i]+=rhoJ*termFRC*r; @@ -954,10 +1002,13 @@ void Planar::siteSite(double sig, double eps,unsigned ci,unsigned cj,unsigned si double termF=3.1416*eps*delta*sig3/(3*t1*t2*r)*((rPtP9-rPtM9-rMtM9+rMtP9)/15-(rPtP3-rPtM3-rMtM3+rMtP3)/2); double termVN=termF/2; double termVT2=termU/2; + double termVND=2*3.1416*eps*delta*sig3/(t1*t2)*((rPtP9-rPtM9-rMtM9+rMtP9)/81-(rPtP3-rPtM3-rMtM3+rMtP3)/9); uLJ[index_i]+=rhoJ*termU; uLJ[index_j]+=rhoI*termU; vNLJ[index_i]+=rhoJ*termVN*r2; vNLJ[index_j]+=rhoI*termVN*r2; + vNDLJ[index_i]+=rhoJ*termVND*r; + vNDLJ[index_j]+=rhoI*termVND*r; vTLJ[index_j]+=rhoI*termVT2; vTLJ[index_i]+=rhoJ*termVT2; fLJ[index_i]+=-rhoJ*termF*r; @@ -968,6 +1019,8 @@ void Planar::siteSite(double sig, double eps,unsigned ci,unsigned cj,unsigned si uLJ[index_j]+=rhoI*termURC; vNLJ[index_i]+=rhoJ*termVNRC*r2; vNLJ[index_j]+=rhoI*termVNRC*r2; + vNDLJ[index_i]+=rhoJ*termVNDRC*r; + vNDLJ[index_j]+=rhoI*termVNDRC*r; vTLJ[index_j]+=rhoI*(termVTRC1*(rc2-r2)+termVTRC2); vTLJ[index_i]+=rhoJ*(termVTRC1*(rc2-r2)+termVTRC2); fLJ[index_i]+=-rhoJ*termFRC*r; diff --git a/src/longRange/Planar.h b/src/longRange/Planar.h index f06b767e6e..b8dbf26aa7 100644 --- a/src/longRange/Planar.h +++ b/src/longRange/Planar.h @@ -23,7 +23,7 @@ class ParticleContainer; class Planar : public LongRangeCorrection, public ObserverBase, public ControlInstance { public: - Planar(double cutoffT,double cutoffLJ,Domain* domain, DomainDecompBase* domainDecomposition, ParticleContainer* particleContainer, unsigned slabs, Simulation* simulation); + Planar(double cutoffT, double cutoffLJ, Domain* domain, DomainDecompBase* domainDecomposition, ParticleContainer* particleContainer, unsigned slabs, Simulation* simulation); virtual ~Planar(); /** @brief Read in XML configuration for Planar and all its included objects. @@ -86,6 +86,7 @@ class Planar : public LongRangeCorrection, public ObserverBase, public ControlIn std::vector uLJ; std::vector vNLJ; std::vector vTLJ; + std::vector vNDLJ; std::vector fLJ; std::vector rho_g; std::vector rho_l; diff --git a/src/molecules/FullMolecule.cpp b/src/molecules/FullMolecule.cpp index a7472867e7..238d846c3f 100644 --- a/src/molecules/FullMolecule.cpp +++ b/src/molecules/FullMolecule.cpp @@ -32,6 +32,15 @@ FullMolecule::FullMolecule(unsigned long id, Component *component, _Vi[0]= 0.; _Vi[1]= 0.; _Vi[2]= 0.; + _Vi[3]= 0.; + _Vi[4]= 0.; + _Vi[5]= 0.; + _Vi[6]= 0.; + _Vi[7]= 0.; + _Vi[8]= 0.; + _upot = 0; + _ViConstCorr = 0; + _upotConstCorr = 0; _soa = nullptr; _soa_index_lj = 0; @@ -67,6 +76,15 @@ FullMolecule::FullMolecule(const FullMolecule& m) { _Vi[0]= m._Vi[0]; _Vi[1]= m._Vi[1]; _Vi[2]= m._Vi[2]; + _Vi[3]= m._Vi[3]; + _Vi[4]= m._Vi[4]; + _Vi[5]= m._Vi[5]; + _Vi[6]= m._Vi[6]; + _Vi[7]= m._Vi[7]; + _Vi[8]= m._Vi[8]; + _upot = m._upot; + _ViConstCorr = m._ViConstCorr; + _upotConstCorr = m._upotConstCorr; _soa = m._soa; _soa_index_lj = m._soa_index_lj; @@ -105,6 +123,15 @@ FullMolecule& FullMolecule::operator=(const FullMolecule& m) { _Vi[0]= m._Vi[0]; _Vi[1]= m._Vi[1]; _Vi[2]= m._Vi[2]; + _Vi[3]= m._Vi[3]; + _Vi[4]= m._Vi[4]; + _Vi[5]= m._Vi[5]; + _Vi[6]= m._Vi[6]; + _Vi[7]= m._Vi[7]; + _Vi[8]= m._Vi[8]; + _upot = m._upot; + _ViConstCorr = m._ViConstCorr; + _upotConstCorr = m._upotConstCorr; _soa = m._soa; _soa_index_lj = m._soa_index_lj; @@ -480,7 +507,8 @@ void FullMolecule::clearFM() { mardyn_assert(_soa != nullptr); _F[0] = _F[1] = _F[2] = 0.; _M[0] = _M[1] = _M[2] = 0.; - _Vi[0]= _Vi[1]= _Vi[2]= 0.; + _Vi[0]= _Vi[1]= _Vi[2]=_Vi[3]= _Vi[4]= _Vi[5]=_Vi[6]= _Vi[7]= _Vi[8]= 0.; + _upot = 0.; std::array clearance = {0.0, 0.0, 0.0}; @@ -650,12 +678,22 @@ void FullMolecule::check(unsigned long id) { mardyn_assert(isfinite(_invI[d])); } _q.check(); - if (!isfinite(_Vi[0]) || !isfinite(_Vi[1]) || !isfinite(_Vi[2])) { + if (!isfinite(_Vi[0]) || !isfinite(_Vi[1]) || !isfinite(_Vi[2] + || !isfinite(_Vi[3]) || !isfinite(_Vi[4]) || !isfinite(_Vi[5]) + || !isfinite(_Vi[6]) || !isfinite(_Vi[7]) || !isfinite(_Vi[8]))) { cout << "\talert: molecule id " << id << " (internal cid " << this->_component->ID() << ") has virial _Vi = (" - << _Vi[0] << ", " << _Vi[1] << ", " << _Vi[2] << ")" << endl; + << _Vi[0] << ", " << _Vi[1] << ", " << _Vi[2] << ", " + << _Vi[3] << ", " << _Vi[4] << ", " << _Vi[5] << ", " + << _Vi[6] << ", " << _Vi[7] << ", " << _Vi[8] << ")" << endl; _Vi[0] = 0.0; _Vi[1] = 0.0; _Vi[2] = 0.0; + _Vi[3] = 0.0; + _Vi[4] = 0.0; + _Vi[5] = 0.0; + _Vi[6] = 0.0; + _Vi[7] = 0.0; + _Vi[8] = 0.0; mardyn_assert(false); } } @@ -670,7 +708,9 @@ std::ostream& operator<<( std::ostream& os, const FullMolecule& m ) { os << "F: (" << m.F(0) << ", " << m.F(1) << ", " << m.F(2) << ")\n" ; os << "q: [[" << m.q().qw() << ", " << m.q().qx() << "], [" << m.q().qy() << ", " << m.q().qz()<< "]]\n" ; os << "w: (" << m.D(0) << ", " << m.D(1) << ", " << m.D(2) << ")\n"; - os << "Vi: (" << m.Vi(0) << ", " << m.Vi(1) << ", " << m.Vi(2) << ")" ; + os << "Vi: (" << m.Vi(0) << ", " << m.Vi(3) << ", " << m.Vi(4) << ")" ; // Elements written out as in tensor + os << "Vi: (" << m.Vi(6) << ", " << m.Vi(1) << ", " << m.Vi(5) << ")" ; // Elements written out as in tensor + os << "Vi: (" << m.Vi(7) << ", " << m.Vi(8) << ", " << m.Vi(2) << ")" ; // Elements written out as in tensor return os; } diff --git a/src/molecules/FullMolecule.h b/src/molecules/FullMolecule.h index a834e221ce..e502eb07e3 100644 --- a/src/molecules/FullMolecule.h +++ b/src/molecules/FullMolecule.h @@ -69,14 +69,28 @@ class FullMolecule : public MoleculeInterface { /** set molecule's orientation */ void setq(Quaternion q) override{ _q = q; } - /** get coordinate of the rotatational speed */ + /** get coordinate of the angular momentum */ double D(unsigned short d) const override { return _L[d]; } - /** get coordinate of the current angular momentum onto molecule */ + /** get coordinate of the current torsional moment (torque) onto molecule */ double M(unsigned short d) const override { return _M[d]; } - /** get the virial **/ - double Vi(unsigned short d) const override { return _Vi[d];} + /** get the virial */ + double Vi(unsigned short d) const override { + if (d < 3) { // Correction term only added to diagonal elements + + return _Vi[d] + _ViConstCorr; + } + else { + return _Vi[d]; + } + } + + /** get the constant correction of potential energy */ + double UpotConstCorr() const override { return _upotConstCorr; } + + /** get the constant correction of one virial element */ + double ViConstCorr() const override { return _ViConstCorr; } void setD(unsigned short d, double D) override { this->_L[d] = D; } @@ -120,6 +134,8 @@ class FullMolecule : public MoleculeInterface { double U_rot_2() override ; /** return total kinetic energy of the molecule */ double U_kin() override { return U_trans() + U_rot(); } + /** return total potential energy of the molecule */ + double U_pot() override { return _upot + _upotConstCorr; } void setupSoACache(CellDataSoABase * s, unsigned iLJ, unsigned iC, unsigned iD, unsigned iQ) override; @@ -271,17 +287,23 @@ class FullMolecule : public MoleculeInterface { * @param M force vector (x,y,z) */ void setM(double M[3]) override { for(int d = 0; d < 3; d++ ) { _M[d] = M[d]; } } - void setVi(double Vi[3]) override { for(int d = 0; d < 3; d++) { _Vi[d] = Vi[d]; } } + void setVi(double Vi[9]) override { for(int d = 0; d < 9; d++) { _Vi[d] = Vi[d]; } } + void setU(const double upot) override { _upot = upot; } + + void setUConstCorr(const double a) override { _upotConstCorr = a; } + void setViConstCorr(const double a) override { _ViConstCorr = a/3.; } // LRC term assigned to the 3 diagonal elements void Fadd(const double a[]) override { for(unsigned short d=0;d<3;++d) _F[d]+=a[d]; } void Madd(const double a[]) override { for(unsigned short d=0;d<3;++d) _M[d]+=a[d]; } void Viadd(const double a[]) override { for(unsigned short d=0;d<3;++d) _Vi[d]+=a[d]; } + void ViaddAll(const double a[]) override { for(unsigned short d=0;d<9;++d) _Vi[d]+=a[d]; } void vadd(const double ax, const double ay, const double az) override { _v[0] += ax; _v[1] += ay; _v[2] += az; } void vsub(const double ax, const double ay, const double az) override { _v[0] -= ax; _v[1] -= ay; _v[2] -= az; } + void Uadd(const double upot) override { _upot += upot; } void Fljcenteradd(unsigned int i, double a[]) override; void Fljcentersub(unsigned int i, double a[]) override; @@ -344,9 +366,14 @@ class FullMolecule : public MoleculeInterface { Quaternion _q; /**< angular orientation */ double _M[3]; /**< torsional moment */ double _L[3]; /**< angular momentum */ - double _Vi[3]; /** Virial tensor **/ + double _Vi[9]; /**< Virial tensor all elements: rxfx, ryfy, rzfz, rxfy, rxfz, ryfz, ryfx, rzfx, rzfy */ unsigned long _id; /**< IDentification number of that molecule */ + double _upot; /**< potential energy */ + + double _ViConstCorr; /** Correction of one virial element, used by homogeneous LRC **/ + double _upotConstCorr; /** Correction of potential energy, used by homogeneous LRC **/ + double _m; /**< total mass */ double _I[3]{0.,0.,0.},_invI[3]{0.,0.,0.}; // moment of inertia for principal axes and it's inverse diff --git a/src/molecules/MoleculeInterface.h b/src/molecules/MoleculeInterface.h index fcee364c12..a4565dc2c7 100644 --- a/src/molecules/MoleculeInterface.h +++ b/src/molecules/MoleculeInterface.h @@ -66,8 +66,8 @@ class MoleculeInterface { std::array m_ret{M(0), M(1), M(2)}; return m_ret; } - virtual std::array Vi_arr() { - std::array vi_ret{Vi(0), Vi(1), Vi(2)}; + virtual std::array Vi_arr() { + std::array vi_ret{Vi(0), Vi(1), Vi(2), Vi(3), Vi(4), Vi(5), Vi(6), Vi(7), Vi(8)}; return vi_ret; } @@ -83,6 +83,8 @@ class MoleculeInterface { } virtual double M(unsigned short d) const = 0; virtual double Vi(unsigned short d) const = 0; + virtual double UpotConstCorr() const = 0; + virtual double ViConstCorr() const = 0; virtual void setD(unsigned short d, double D) = 0; @@ -102,6 +104,7 @@ class MoleculeInterface { virtual double U_rot() = 0; virtual double U_rot_2() = 0; virtual double U_kin() { return U_trans() + U_rot(); } + virtual double U_pot() = 0; virtual void updateMassInertia() = 0; @@ -191,7 +194,12 @@ class MoleculeInterface { virtual void setF(double F[3]) = 0; virtual void setM(double M[3]) = 0; - virtual void setVi(double Vi[3]) = 0; + virtual void setVi(double Vi[9]) = 0; + virtual void setU(const double upot) = 0; + + virtual void setUConstCorr(const double a) = 0; + virtual void setViConstCorr(const double a) = 0; + void scale_v(double s) { for(int d = 0; d < 3; ++d) { setv(d, v(d) * s); @@ -218,8 +226,12 @@ class MoleculeInterface { virtual void Fadd(const double a[]) = 0; virtual void Madd(const double a[]) = 0; virtual void Viadd(const double a[]) = 0; + virtual void ViaddAll(const double a[]) = 0; virtual void vadd(const double ax, const double ay, const double az) = 0; virtual void vsub(const double ax, const double ay, const double az) = 0; + + virtual void Uadd(const double upot) = 0; + virtual void Fljcenteradd(unsigned int i, double a[]) = 0; virtual void Fljcentersub(unsigned int i, double a[]) = 0; virtual void Fchargeadd(unsigned int i, double a[]) = 0; diff --git a/src/molecules/MoleculeRMM.h b/src/molecules/MoleculeRMM.h index 6ece45d5b6..eb3f734c87 100644 --- a/src/molecules/MoleculeRMM.h +++ b/src/molecules/MoleculeRMM.h @@ -222,6 +222,7 @@ class MoleculeRMM : public MoleculeInterface { void Fadd(const double /*a*/[]) override {} void Madd(const double /*a*/[]) override {} void Viadd(const double /*a*/[]) override {} + void ViaddAll(const double /*a*/[]) override {} void vadd(const double ax, const double ay, const double az) override { setv(0, v(0) + ax); setv(1, v(1) + ay); setv(2, v(2) + az); } diff --git a/src/molecules/potforce.h b/src/molecules/potforce.h index c4cf83d570..8428343f2b 100644 --- a/src/molecules/potforce.h +++ b/src/molecules/potforce.h @@ -286,18 +286,27 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] double f[3]; double u; double drs[3], dr2; // site distance vector & length^2 + + double upot = 0.; + + // diagonal elements of virial only Virial[0]=0.; Virial[1]=0.; Virial[2]=0.; + // LJ centers // no LJ interaction between solid atoms of the same component + double virialAll[9] = {0.}; // all elements of virial: 2 * rxfx, rxfy, rxfz, ryfx, ryfy, ryfz, rzfx, rzfy, rzfz + const unsigned int nc1 = mi.numLJcenters(); const unsigned int nc2 = mj.numLJcenters(); for (unsigned int si = 0; si < nc1; ++si) { const std::array dii = mi.ljcenter_d_abs(si); + // const std::array dsiteii = mi.ljcenter_d(si); for (unsigned int sj = 0; sj < nc2; ++sj) { const std::array djj = mj.ljcenter_d_abs(sj); + // const std::array dsitejj = mj.ljcenter_d(sj); SiteSiteDistanceAbs(dii.data(), djj.data(), drs, dr2); double eps24; params >> eps24; @@ -306,14 +315,20 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] double shift6; params >> shift6; // must be 0.0 for full LJ if (calculateLJ) { - PotForceLJ(drs, dr2, eps24, sig2, f, u); + PotForceLJ(drs, dr2, eps24, sig2, f, u); // u is 6*pot.energy u += shift6; mi.Fljcenteradd(si, f); mj.Fljcentersub(sj, f); + Upot6LJ += u; - for (unsigned short d = 0; d < 3; ++d) - Virial[d] += 0.5*drm[d] * f[d]; + upot += u/6.; + + for (unsigned short d = 0; d < 3; ++d) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] += drm[d] * f[e]; + } + } } } } @@ -341,8 +356,13 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mj.Fchargesub(sj, f); UpotXpoles += u; - for (unsigned short d = 0; d < 3; d++) - Virial[d] += 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; d++) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] += drm[d] * f[e]; + } + } } // Charge-Quadrupole for (unsigned sj = 0; sj < nq2; sj++) { @@ -358,8 +378,13 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mj.Madd(m2); UpotXpoles += u; - for (unsigned short d = 0; d < 3; d++) - Virial[d] += 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; d++) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] += drm[d] * f[e]; + } + } } // Charge-Dipole for (unsigned sj = 0; sj < nd2; sj++) { @@ -375,8 +400,13 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mj.Madd(m2); UpotXpoles += u; - for (unsigned short d = 0; d < 3; d++) - Virial[d] += 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; d++) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] += drm[d] * f[e]; + } + } } } for (unsigned int si = 0; si < nq1; ++si) { @@ -396,8 +426,13 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mi.Madd(m1); UpotXpoles += u; - for (unsigned short d = 0; d < 3; d++) - Virial[d] -= 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; d++) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] -= drm[d] * f[e]; + } + } } // Quadrupole-Quadrupole ------------------- for (unsigned int sj = 0; sj < nq2; ++sj) { @@ -415,8 +450,13 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mj.Madd(m2); UpotXpoles += u; - for (unsigned short d = 0; d < 3; ++d) - Virial[d] += 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; ++d) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] += drm[d] * f[e]; + } + } } // Quadrupole-Dipole ----------------------- for (unsigned int sj = 0; sj < nd2; ++sj) { @@ -432,9 +472,15 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mj.Fdipoleadd(sj, f); mi.Madd(m1); mj.Madd(m2); + UpotXpoles += u; - for (unsigned short d = 0; d < 3; d++) - Virial[d] -= 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; d++) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] -= drm[d] * f[e]; + } + } } } for (unsigned int si = 0; si < nd1; ++si) { @@ -453,8 +499,13 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mi.Madd(m1); UpotXpoles += u; - for (unsigned short d = 0; d < 3; d++) - Virial[d] -= 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; d++) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] -= drm[d] * f[e]; + } + } } // Dipole-Quadrupole ----------------------- for (unsigned int sj = 0; sj < nq2; ++sj) { @@ -470,9 +521,15 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mj.Fquadrupolesub(sj, f); mi.Madd(m1); mj.Madd(m2); + UpotXpoles += u; - for (unsigned short d = 0; d < 3; ++d) - Virial[d] += 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; ++d) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] += drm[d] * f[e]; + } + } } // Dipole-Dipole --------------------------- for (unsigned int sj = 0; sj < nd2; ++sj) { @@ -489,14 +546,40 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] mj.Fdipolesub(sj, f); mi.Madd(m1); mj.Madd(m2); + UpotXpoles += u; - for (unsigned short d = 0; d < 3; ++d) - Virial[d] += 0.5*drm[d] * f[d]; + upot += u; + + for (unsigned short d = 0; d < 3; ++d) { + for (unsigned e = 0; e < 3; ++e) { + virialAll[3*d+e] += drm[d] * f[e]; + } + } } } - mi.Viadd(Virial); - mj.Viadd(Virial); + // diagonal elements of virial only + Virial[0] = 0.5*virialAll[0]; + Virial[1] = 0.5*virialAll[4]; + Virial[2] = 0.5*virialAll[8]; + + // mapping the element order of virialAll to the order of the virial in "FullMolecule" class + double tempVi[9] = {0.0}; + tempVi[0]=0.5*virialAll[0]; + tempVi[1]=0.5*virialAll[4]; + tempVi[2]=0.5*virialAll[8]; + tempVi[3]=0.5*virialAll[1]; + tempVi[4]=0.5*virialAll[2]; + tempVi[5]=0.5*virialAll[5]; + tempVi[6]=0.5*virialAll[3]; + tempVi[7]=0.5*virialAll[6]; + tempVi[8]=0.5*virialAll[7]; + + mi.ViaddAll(tempVi); + mj.ViaddAll(tempVi); + + mi.Uadd(0.5*upot); + mj.Uadd(0.5*upot); // check whether all parameters were used mardyn_assert(params.eos()); @@ -528,6 +611,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* PotForceLJ(drs, dr2, eps24, sig2, f, u); u += shift6; Upot6LJ += u; + mi.Uadd(u/24); + mj.Uadd(u/24); } } } @@ -551,6 +636,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* SiteSiteDistanceAbs(dii.data(), djj.data(), drs, dr2); PotForce2Charge(drs, dr2, q1q2per4pie0, f, u); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } // Charge-Quadrupole for (unsigned sj = 0; sj < nq2; sj++) { @@ -561,6 +648,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* const std::array ejj = mj.quadrupole_e(sj); PotForceChargeQuadrupole(drs, dr2, ejj.data(), qQ05per4pie0, f, m2, u); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } // Charge-Dipole for (unsigned sj = 0; sj < nd2; sj++) { @@ -571,6 +660,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* const std::array ejj = mj.dipole_e(sj); PotForceChargeDipole(drs, dr2, ejj.data(), minusqmyper4pie0, f, m2, u); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } } for (unsigned int si = 0; si < nq1; ++si) { @@ -585,6 +676,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* minusSiteSiteDistanceAbs(dii.data(), djj.data(), drs, dr2); PotForceChargeQuadrupole(drs, dr2, eii.data(), qQ05per4pie0, f, m1, u); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } // Quadrupole-Quadrupole ------------------- for (unsigned int sj = 0; sj < nq2; ++sj) { @@ -595,6 +688,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* const std::array ejj = mj.quadrupole_e(sj); PotForce2Quadrupole(drs, dr2, eii.data(), ejj.data(), q2075, f, m1, m2, u); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } // Quadrupole-Dipole ----------------------- for (unsigned int sj = 0; sj < nd2; ++sj) { @@ -606,6 +701,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* //for(unsigned short d=0;d<3;++d) drs[d]=-drs[d]; // avoid that and toggle add/sub below PotForceDiQuadrupole(drs, dr2, ejj.data(), eii.data(), qmy15, f, m2, m1, u); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } } for (unsigned int si = 0; si < nd1; ++si) { @@ -619,6 +716,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* minusSiteSiteDistanceAbs(dii.data(), djj.data(), drs, dr2); PotForceChargeDipole(drs, dr2, eii.data(), minusqmyper4pie0, f, m1, u); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } // Dipole-Quadrupole ----------------------- for (unsigned int sj = 0; sj < nq2; ++sj) { @@ -630,6 +729,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* const std::array ejj = mj.quadrupole_e(sj); PotForceDiQuadrupole(drs, dr2, eii.data(), ejj.data(), myq15, f, m1, m2, u); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } // Dipole-Dipole --------------------------- for (unsigned int sj = 0; sj < nd2; ++sj) { @@ -643,6 +744,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* const std::array ejj = mj.dipole_e(sj); PotForce2Dipole(drs, dr2, eii.data(), ejj.data(), my2, rffac, f, m1, m2, u, MyRF); UpotXpoles += u; + mi.Uadd(u); + mj.Uadd(u); } } diff --git a/src/parallel/CommunicationBuffer.cpp b/src/parallel/CommunicationBuffer.cpp index 2a2a65e12c..b4b8cb7278 100644 --- a/src/parallel/CommunicationBuffer.cpp +++ b/src/parallel/CommunicationBuffer.cpp @@ -209,6 +209,12 @@ void CommunicationBuffer::addForceMolecule(size_t indexOfMolecule, const Molecul i_runningByte = emplaceValue(i_runningByte, m.Vi(0)); i_runningByte = emplaceValue(i_runningByte, m.Vi(1)); i_runningByte = emplaceValue(i_runningByte, m.Vi(2)); + i_runningByte = emplaceValue(i_runningByte, m.Vi(3)); + i_runningByte = emplaceValue(i_runningByte, m.Vi(4)); + i_runningByte = emplaceValue(i_runningByte, m.Vi(5)); + i_runningByte = emplaceValue(i_runningByte, m.Vi(6)); + i_runningByte = emplaceValue(i_runningByte, m.Vi(7)); + i_runningByte = emplaceValue(i_runningByte, m.Vi(8)); #endif } @@ -347,7 +353,7 @@ void CommunicationBuffer::readForceMolecule(size_t indexOfMolecule, Molecule& m) } #else - double rbuf[3], Fbuf[3], Mbuf[3], Vibuf[3]; + double rbuf[3], Fbuf[3], Mbuf[3], Vibuf[9]; unsigned long idbuf; i_runningByte = readValue(i_runningByte, idbuf); @@ -363,6 +369,12 @@ void CommunicationBuffer::readForceMolecule(size_t indexOfMolecule, Molecule& m) i_runningByte = readValue(i_runningByte, Vibuf[0]); i_runningByte = readValue(i_runningByte, Vibuf[1]); i_runningByte = readValue(i_runningByte, Vibuf[2]); + i_runningByte = readValue(i_runningByte, Vibuf[3]); + i_runningByte = readValue(i_runningByte, Vibuf[4]); + i_runningByte = readValue(i_runningByte, Vibuf[5]); + i_runningByte = readValue(i_runningByte, Vibuf[6]); + i_runningByte = readValue(i_runningByte, Vibuf[7]); + i_runningByte = readValue(i_runningByte, Vibuf[8]); m.setid(idbuf); for(int d = 0; d < 3; d++) { m.setr(d, rbuf[d]); diff --git a/src/parallel/ParticleForceData.cpp b/src/parallel/ParticleForceData.cpp index 7d51034194..5364e6990f 100644 --- a/src/parallel/ParticleForceData.cpp +++ b/src/parallel/ParticleForceData.cpp @@ -47,10 +47,16 @@ void ParticleForceData::MoleculeToParticleData(ParticleForceData &particleStruct particleStruct.Vi[0] = molecule.Vi(0); particleStruct.Vi[1] = molecule.Vi(1); particleStruct.Vi[2] = molecule.Vi(2); + particleStruct.Vi[3] = molecule.Vi(3); + particleStruct.Vi[4] = molecule.Vi(4); + particleStruct.Vi[5] = molecule.Vi(5); + particleStruct.Vi[6] = molecule.Vi(6); + particleStruct.Vi[7] = molecule.Vi(7); + particleStruct.Vi[8] = molecule.Vi(8); } void ParticleForceData::AddParticleForceDataToMolecule(ParticleForceData &particleStruct, Molecule &molecule) { molecule.Fadd(particleStruct.F); molecule.Madd(particleStruct.M); - molecule.Viadd(particleStruct.Vi); + molecule.ViaddAll(particleStruct.Vi); } diff --git a/src/parallel/ParticleForceData.h b/src/parallel/ParticleForceData.h index 89590d067b..2bcf8887eb 100644 --- a/src/parallel/ParticleForceData.h +++ b/src/parallel/ParticleForceData.h @@ -22,7 +22,7 @@ class ParticleForceData { double r[3]; //< position double F[3]; //< force double M[3]; //< torsional moment - double Vi[3]; //< virial tensor + double Vi[9]; //< virial tensor }; #endif /* ParticleForceData_H_ */ From de0101bc82b2f9ddd46f21072dd80c21ed002a10 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 1 Apr 2022 16:17:06 +0200 Subject: [PATCH 36/76] Add calculation of all virial elements using vectorization --- .../VectorizedChargeP2PCellProcessor.cpp | 187 +++- .../VectorizedChargeP2PCellProcessor.h | 4 +- .../VectorizedLJP2PCellProcessor.cpp | 130 ++- .../VectorizedLJP2PCellProcessor.h | 4 +- src/molecules/FullMolecule.cpp | 66 +- src/molecules/FullMolecule.h | 3 +- src/molecules/MoleculeInterface.h | 1 - src/molecules/MoleculeRMM.h | 1 - src/molecules/potforce.h | 4 +- src/parallel/ParticleForceData.cpp | 2 +- src/particleContainer/adapter/CellDataSoA.h | 28 +- .../adapter/VectorizedCellProcessor.cpp | 992 +++++++++++++----- .../adapter/VectorizedCellProcessor.h | 28 +- .../tests/LinkedCellsTest.cpp | 6 + 14 files changed, 1073 insertions(+), 383 deletions(-) diff --git a/src/bhfmm/cellProcessors/VectorizedChargeP2PCellProcessor.cpp b/src/bhfmm/cellProcessors/VectorizedChargeP2PCellProcessor.cpp index 0e04f12e50..720de0a1a1 100644 --- a/src/bhfmm/cellProcessors/VectorizedChargeP2PCellProcessor.cpp +++ b/src/bhfmm/cellProcessors/VectorizedChargeP2PCellProcessor.cpp @@ -151,9 +151,15 @@ void VectorizedChargeP2PCellProcessor::preprocessCell(ParticleCellPointers & c) vcp_real_accum* const soa_charges_f_x = soa.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::X); vcp_real_accum* const soa_charges_f_y = soa.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::Y); vcp_real_accum* const soa_charges_f_z = soa.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::Z); - vcp_real_accum* const soa_charges_V_x = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::X); - vcp_real_accum* const soa_charges_V_y = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Y); - vcp_real_accum* const soa_charges_V_z = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Z); + vcp_real_accum* const soa_charges_V_xx = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::X); + vcp_real_accum* const soa_charges_V_yy = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Y); + vcp_real_accum* const soa_charges_V_zz = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Z); + vcp_real_accum* const soa_charges_V_xy = soa.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::X); + vcp_real_accum* const soa_charges_V_xz = soa.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::Y); + vcp_real_accum* const soa_charges_V_yz = soa.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::Z); + vcp_real_accum* const soa_charges_V_yx = soa.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::X); + vcp_real_accum* const soa_charges_V_zx = soa.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::Y); + vcp_real_accum* const soa_charges_V_zy = soa.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::Z); size_t iCharges = 0; // For each molecule iterate over all its centers. @@ -181,9 +187,15 @@ void VectorizedChargeP2PCellProcessor::preprocessCell(ParticleCellPointers & c) soa_charges_f_x[iCharges] = 0.0; soa_charges_f_y[iCharges] = 0.0; soa_charges_f_z[iCharges] = 0.0; - soa_charges_V_x[iCharges] = 0.0; - soa_charges_V_y[iCharges] = 0.0; - soa_charges_V_z[iCharges] = 0.0; + soa_charges_V_xx[iCharges] = 0.0; + soa_charges_V_yy[iCharges] = 0.0; + soa_charges_V_zz[iCharges] = 0.0; + soa_charges_V_xy[iCharges] = 0.0; + soa_charges_V_xz[iCharges] = 0.0; + soa_charges_V_yz[iCharges] = 0.0; + soa_charges_V_yx[iCharges] = 0.0; + soa_charges_V_zx[iCharges] = 0.0; + soa_charges_V_zy[iCharges] = 0.0; //soa._charges_dist_lookup[iCharges] = 0.0; // Get the charge soa._charges_q[iCharges] = components[mol.componentid()].charge(j).q(); @@ -210,9 +222,15 @@ void VectorizedChargeP2PCellProcessor::postprocessCell(ParticleCellPointers & c) vcp_real_accum* const soa_charges_f_x = soa.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::X); vcp_real_accum* const soa_charges_f_y = soa.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::Y); vcp_real_accum* const soa_charges_f_z = soa.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::Z); - vcp_real_accum* const soa_charges_V_x = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::X); - vcp_real_accum* const soa_charges_V_y = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Y); - vcp_real_accum* const soa_charges_V_z = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Z); + vcp_real_accum* const soa_charges_V_xx = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::X); + vcp_real_accum* const soa_charges_V_yy = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Y); + vcp_real_accum* const soa_charges_V_zz = soa.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Z); + vcp_real_accum* const soa_charges_V_xy = soa.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::X); + vcp_real_accum* const soa_charges_V_xz = soa.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::Y); + vcp_real_accum* const soa_charges_V_yz = soa.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::Z); + vcp_real_accum* const soa_charges_V_yx = soa.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::X); + vcp_real_accum* const soa_charges_V_zx = soa.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::Y); + vcp_real_accum* const soa_charges_V_zy = soa.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::Z); // For each molecule iterate over all its centers. size_t iCharges = 0; @@ -233,13 +251,25 @@ void VectorizedChargeP2PCellProcessor::postprocessCell(ParticleCellPointers & c) m.Fchargeadd(j, f); // Store the resulting virial in the molecule. - double V[3]; - V[0] = static_cast(soa_charges_V_x[iCharges]*0.5); - V[1] = static_cast(soa_charges_V_y[iCharges]*0.5); - V[2] = static_cast(soa_charges_V_z[iCharges]*0.5); + double V[9]; + V[0] = static_cast(soa_charges_V_xx[iCharges]*0.5); + V[1] = static_cast(soa_charges_V_yy[iCharges]*0.5); + V[2] = static_cast(soa_charges_V_zz[iCharges]*0.5); + V[3] = static_cast(soa_charges_V_xy[iCharges]*0.5); + V[4] = static_cast(soa_charges_V_xz[iCharges]*0.5); + V[5] = static_cast(soa_charges_V_yz[iCharges]*0.5); + V[6] = static_cast(soa_charges_V_yx[iCharges]*0.5); + V[7] = static_cast(soa_charges_V_zx[iCharges]*0.5); + V[8] = static_cast(soa_charges_V_zy[iCharges]*0.5); mardyn_assert(!isnan(V[0])); mardyn_assert(!isnan(V[1])); mardyn_assert(!isnan(V[2])); + mardyn_assert(!isnan(V[3])); + mardyn_assert(!isnan(V[4])); + mardyn_assert(!isnan(V[5])); + mardyn_assert(!isnan(V[6])); + mardyn_assert(!isnan(V[7])); + mardyn_assert(!isnan(V[8])); m.Viadd(V); } } @@ -268,7 +298,9 @@ inline void VectorizedChargeP2PCellProcessor :: _loopBodyCharge( const RealCalcVec& r2_x, const RealCalcVec& r2_y, const RealCalcVec& r2_z, const RealCalcVec& qjj, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, const MaskCalcVec& forceMask) { @@ -293,14 +325,20 @@ inline void VectorizedChargeP2PCellProcessor :: _loopBodyCharge( const RealCalcVec m_dy = m1_r_y - m2_r_y; const RealCalcVec m_dz = m1_r_z - m2_r_z; - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x); - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y); - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up if (calculateMacroscopic) { const RealAccumVec upot_accum = RealAccumVec::convertCalcToAccum(upot); sum_upotXpoles = sum_upotXpoles + upot_accum; - sum_virial = sum_virial + V_x + V_y + V_z;//DoubleVec::scal_prod(m_dx, m_dy, m_dz, f_x, f_y, f_z); + sum_virial = sum_virial + V_xx + V_yy + V_zz;//DoubleVec::scal_prod(m_dx, m_dy, m_dz, f_x, f_y, f_z); } } @@ -330,9 +368,15 @@ void VectorizedChargeP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellD vcp_real_accum * const soa1_charges_f_x = soa1.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::X); vcp_real_accum * const soa1_charges_f_y = soa1.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::Y); vcp_real_accum * const soa1_charges_f_z = soa1.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::Z); - vcp_real_accum * const soa1_charges_V_x = soa1.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::X); - vcp_real_accum * const soa1_charges_V_y = soa1.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Y); - vcp_real_accum * const soa1_charges_V_z = soa1.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Z); + vcp_real_accum * const soa1_charges_V_xx = soa1.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::X); + vcp_real_accum * const soa1_charges_V_yy = soa1.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Y); + vcp_real_accum * const soa1_charges_V_zz = soa1.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Z); + vcp_real_accum * const soa1_charges_V_xy = soa1.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::X); + vcp_real_accum * const soa1_charges_V_xz = soa1.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::Y); + vcp_real_accum * const soa1_charges_V_yz = soa1.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::Z); + vcp_real_accum * const soa1_charges_V_yx = soa1.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::X); + vcp_real_accum * const soa1_charges_V_zx = soa1.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::Y); + vcp_real_accum * const soa1_charges_V_zy = soa1.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::Z); const vcp_real_calc * const soa1_charges_q = soa1._charges_q; const int * const soa1_mol_charges_num = soa1._mol_charges_num; @@ -345,9 +389,15 @@ void VectorizedChargeP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellD vcp_real_accum * const soa2_charges_f_x = soa2.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::X); vcp_real_accum * const soa2_charges_f_y = soa2.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::Y); vcp_real_accum * const soa2_charges_f_z = soa2.getBeginAccum(QuantityType::FORCE, CHARGE, Coordinate::Z); - vcp_real_accum * const soa2_charges_V_x = soa2.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::X); - vcp_real_accum * const soa2_charges_V_y = soa2.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Y); - vcp_real_accum * const soa2_charges_V_z = soa2.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Z); + vcp_real_accum * const soa2_charges_V_xx = soa2.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::X); + vcp_real_accum * const soa2_charges_V_yy = soa2.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Y); + vcp_real_accum * const soa2_charges_V_zz = soa2.getBeginAccum(QuantityType::VIRIAL, CHARGE, Coordinate::Z); + vcp_real_accum * const soa2_charges_V_xy = soa2.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::X); + vcp_real_accum * const soa2_charges_V_xz = soa2.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::Y); + vcp_real_accum * const soa2_charges_V_yz = soa2.getBeginAccum(QuantityType::VIRIALND1, CHARGE, Coordinate::Z); + vcp_real_accum * const soa2_charges_V_yx = soa2.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::X); + vcp_real_accum * const soa2_charges_V_zx = soa2.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::Y); + vcp_real_accum * const soa2_charges_V_zy = soa2.getBeginAccum(QuantityType::VIRIALND2, CHARGE, Coordinate::Z); const vcp_real_calc * const soa2_charges_q = soa2._charges_q; vcp_lookupOrMask_single* const soa2_charges_dist_lookup = my_threadData._charges_dist_lookup; @@ -403,9 +453,15 @@ void VectorizedChargeP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellD RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); // Iterate over centers of second cell size_t j = ForcePolicy::InitJ2(i_charge_idx + local_i); @@ -425,13 +481,15 @@ void VectorizedChargeP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellD const RealCalcVec m2_r_z = MaskGatherChooser::load(soa2_charges_m_r_z, j, lookupORforceMask); RealCalcVec f_x, f_y, f_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyCharge( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, q1, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, q2, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -447,13 +505,25 @@ void VectorizedChargeP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellD vcp_simd_load_sub_store(soa2_charges_f_y, j, a_fy, lookupORforceMask); vcp_simd_load_sub_store(soa2_charges_f_z, j, a_fz, lookupORforceMask); - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_charges_V_x, j, Vx, lookupORforceMask); - vcp_simd_load_add_store(soa2_charges_V_y, j, Vy, lookupORforceMask); - vcp_simd_load_add_store(soa2_charges_V_z, j, Vz, lookupORforceMask); + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_charges_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zy, j, Vzy, lookupORforceMask); } } #if VCP_VEC_TYPE == VCP_VEC_KNL_GATHER or VCP_VEC_TYPE == VCP_VEC_AVX512F_GATHER @@ -477,13 +547,15 @@ void VectorizedChargeP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellD const RealCalcVec m2_r_z = MaskGatherChooser::load(soa2_charges_m_r_z, j, lookupORforceMask); RealCalcVec f_x, f_y, f_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyCharge( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, q1, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, q2, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, sum_upotXpoles, sum_virial, remainderM); @@ -499,13 +571,25 @@ void VectorizedChargeP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellD vcp_simd_load_sub_store_masked(soa2_charges_f_y, j, a_fy, lookupORforceMask, remainderM); vcp_simd_load_sub_store_masked(soa2_charges_f_z, j, a_fz, lookupORforceMask, remainderM); - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store_masked(soa2_charges_V_x, j, Vx, lookupORforceMask, remainderM); - vcp_simd_load_add_store_masked(soa2_charges_V_y, j, Vy, lookupORforceMask, remainderM); - vcp_simd_load_add_store_masked(soa2_charges_V_z, j, Vz, lookupORforceMask, remainderM); + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store_masked(soa2_charges_V_xx, j, Vxx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_yy, j, Vyy, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_zz, j, Vzz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_xy, j, Vxy, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_xz, j, Vxz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_yz, j, Vyz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_yx, j, Vyx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_zx, j, Vzx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_zy, j, Vzy, lookupORforceMask, remainderM); } } #endif @@ -515,10 +599,15 @@ void VectorizedChargeP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellD hSum_Add_Store(soa1_charges_f_y + i_charge_idx + local_i, sum_f1_y); hSum_Add_Store(soa1_charges_f_z + i_charge_idx + local_i, sum_f1_z); // Add old virial and summed calculated virials for center 1 - hSum_Add_Store(soa1_charges_V_x + i_charge_idx + local_i, sum_V1_x); - hSum_Add_Store(soa1_charges_V_y + i_charge_idx + local_i, sum_V1_y); - hSum_Add_Store(soa1_charges_V_z + i_charge_idx + local_i, sum_V1_z); - + hSum_Add_Store(soa1_charges_V_xx + i_charge_idx + local_i, sum_V1_xx); + hSum_Add_Store(soa1_charges_V_yy + i_charge_idx + local_i, sum_V1_yy); + hSum_Add_Store(soa1_charges_V_zz + i_charge_idx + local_i, sum_V1_zz); + hSum_Add_Store(soa1_charges_V_xy + i_charge_idx + local_i, sum_V1_xy); + hSum_Add_Store(soa1_charges_V_xz + i_charge_idx + local_i, sum_V1_xz); + hSum_Add_Store(soa1_charges_V_yz + i_charge_idx + local_i, sum_V1_yz); + hSum_Add_Store(soa1_charges_V_yx + i_charge_idx + local_i, sum_V1_yx); + hSum_Add_Store(soa1_charges_V_zx + i_charge_idx + local_i, sum_V1_zx); + hSum_Add_Store(soa1_charges_V_zy + i_charge_idx + local_i, sum_V1_zy); } i_charge_idx += soa1_mol_charges_num[i]; } diff --git a/src/bhfmm/cellProcessors/VectorizedChargeP2PCellProcessor.h b/src/bhfmm/cellProcessors/VectorizedChargeP2PCellProcessor.h index f96000ac00..c340e7fed0 100644 --- a/src/bhfmm/cellProcessors/VectorizedChargeP2PCellProcessor.h +++ b/src/bhfmm/cellProcessors/VectorizedChargeP2PCellProcessor.h @@ -132,7 +132,9 @@ class VectorizedChargeP2PCellProcessor { const RealCalcVec& r2_x, const RealCalcVec& r2_y, const RealCalcVec& r2_z, const RealCalcVec& qjj, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, const MaskCalcVec& forceMask); diff --git a/src/bhfmm/cellProcessors/VectorizedLJP2PCellProcessor.cpp b/src/bhfmm/cellProcessors/VectorizedLJP2PCellProcessor.cpp index 8804481f5e..3faed9f6c3 100644 --- a/src/bhfmm/cellProcessors/VectorizedLJP2PCellProcessor.cpp +++ b/src/bhfmm/cellProcessors/VectorizedLJP2PCellProcessor.cpp @@ -181,7 +181,9 @@ void VectorizedLJP2PCellProcessor :: _loopBodyLJ( const RealCalcVec& m2_r_x, const RealCalcVec& m2_r_y, const RealCalcVec& m2_r_z, const RealCalcVec& r2_x, const RealCalcVec& r2_y, const RealCalcVec& r2_z, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& sum_upot6lj, RealAccumVec& sum_virial, const MaskCalcVec& forceMask, const RealCalcVec& eps_24, const RealCalcVec& sig2, @@ -213,9 +215,15 @@ void VectorizedLJP2PCellProcessor :: _loopBodyLJ( const RealCalcVec m_dy = m1_r_y - m2_r_y;//1FP (virial) (does not count) const RealCalcVec m_dz = m1_r_z - m2_r_z;//1FP (virial) (does not count) - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x);//1FP (virial) - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y);//1FP (virial) - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z);//1FP (virial) + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up if (calculateMacroscopic) { @@ -226,7 +234,7 @@ void VectorizedLJP2PCellProcessor :: _loopBodyLJ( sum_upot6lj = sum_upot6lj + upot_masked_accum;//1FP (sum macro) - sum_virial = sum_virial + V_x + V_y + V_z;//1 FP (sum macro) + 2 FP (virial) + sum_virial = sum_virial + V_xx + V_yy + V_zz;//1 FP (sum macro) + 2 FP (virial) } } @@ -256,9 +264,15 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS vcp_real_accum * const soa1_ljc_f_x = soa1.getBeginAccum(QuantityType::FORCE, LJC, Coordinate::X); vcp_real_accum * const soa1_ljc_f_y = soa1.getBeginAccum(QuantityType::FORCE, LJC, Coordinate::Y); vcp_real_accum * const soa1_ljc_f_z = soa1.getBeginAccum(QuantityType::FORCE, LJC, Coordinate::Z); - vcp_real_accum * const soa1_ljc_V_x = soa1.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::X); - vcp_real_accum * const soa1_ljc_V_y = soa1.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::Y); - vcp_real_accum * const soa1_ljc_V_z = soa1.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::Z); + vcp_real_accum * const soa1_ljc_V_xx = soa1.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::X); + vcp_real_accum * const soa1_ljc_V_yy = soa1.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::Y); + vcp_real_accum * const soa1_ljc_V_zz = soa1.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::Z); + vcp_real_accum * const soa1_ljc_V_xy = soa1.getBeginAccum(QuantityType::VIRIALND1, LJC, Coordinate::X); + vcp_real_accum * const soa1_ljc_V_xz = soa1.getBeginAccum(QuantityType::VIRIALND1, LJC, Coordinate::Y); + vcp_real_accum * const soa1_ljc_V_yz = soa1.getBeginAccum(QuantityType::VIRIALND1, LJC, Coordinate::Z); + vcp_real_accum * const soa1_ljc_V_yx = soa1.getBeginAccum(QuantityType::VIRIALND2, LJC, Coordinate::X); + vcp_real_accum * const soa1_ljc_V_zx = soa1.getBeginAccum(QuantityType::VIRIALND2, LJC, Coordinate::Y); + vcp_real_accum * const soa1_ljc_V_zy = soa1.getBeginAccum(QuantityType::VIRIALND2, LJC, Coordinate::Z); const int * const soa1_mol_ljc_num = soa1._mol_ljc_num; const vcp_ljc_id_t * const soa1_ljc_id = soa1._ljc_id; @@ -271,9 +285,15 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS vcp_real_accum * const soa2_ljc_f_x = soa2.getBeginAccum(QuantityType::FORCE, LJC, Coordinate::X); vcp_real_accum * const soa2_ljc_f_y = soa2.getBeginAccum(QuantityType::FORCE, LJC, Coordinate::Y); vcp_real_accum * const soa2_ljc_f_z = soa2.getBeginAccum(QuantityType::FORCE, LJC, Coordinate::Z); - vcp_real_accum * const soa2_ljc_V_x = soa2.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::X); - vcp_real_accum * const soa2_ljc_V_y = soa2.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::Y); - vcp_real_accum * const soa2_ljc_V_z = soa2.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::Z); + vcp_real_accum * const soa2_ljc_V_xx = soa2.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::X); + vcp_real_accum * const soa2_ljc_V_yy = soa2.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::Y); + vcp_real_accum * const soa2_ljc_V_zz = soa2.getBeginAccum(QuantityType::VIRIAL, LJC, Coordinate::Z); + vcp_real_accum * const soa2_ljc_V_xy = soa2.getBeginAccum(QuantityType::VIRIALND1, LJC, Coordinate::X); + vcp_real_accum * const soa2_ljc_V_xz = soa2.getBeginAccum(QuantityType::VIRIALND1, LJC, Coordinate::Y); + vcp_real_accum * const soa2_ljc_V_yz = soa2.getBeginAccum(QuantityType::VIRIALND1, LJC, Coordinate::Z); + vcp_real_accum * const soa2_ljc_V_yx = soa2.getBeginAccum(QuantityType::VIRIALND2, LJC, Coordinate::X); + vcp_real_accum * const soa2_ljc_V_zx = soa2.getBeginAccum(QuantityType::VIRIALND2, LJC, Coordinate::Y); + vcp_real_accum * const soa2_ljc_V_zy = soa2.getBeginAccum(QuantityType::VIRIALND2, LJC, Coordinate::Z); const vcp_ljc_id_t * const soa2_ljc_id = soa2._ljc_id; vcp_lookupOrMask_single* const soa2_ljc_dist_lookup = my_threadData._ljc_dist_lookup; @@ -322,9 +342,15 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS RealAccumVec sum_fy1 = RealAccumVec::zero(); RealAccumVec sum_fz1 = RealAccumVec::zero(); - RealAccumVec sum_Vx1 = RealAccumVec::zero(); - RealAccumVec sum_Vy1 = RealAccumVec::zero(); - RealAccumVec sum_Vz1 = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); const RealCalcVec c_r_x1 = RealCalcVec::broadcast(soa1_ljc_r_x + i_ljc_idx); const RealCalcVec c_r_y1 = RealCalcVec::broadcast(soa1_ljc_r_y + i_ljc_idx); @@ -346,7 +372,7 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS const size_t id_i = soa1_ljc_id[i_ljc_idx]; RealCalcVec fx, fy, fz; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; RealCalcVec eps_24; RealCalcVec sig2; @@ -359,7 +385,9 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS m1_r_x, m1_r_y, m1_r_z, c_r_x1, c_r_y1, c_r_z1, m_r_x2, m_r_y2, m_r_z2, c_r_x2, c_r_y2, c_r_z2, fx, fy, fz, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, sum_upot6lj, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask), eps_24, sig2, @@ -377,13 +405,25 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS sum_fy1 = sum_fy1 + a_fy; sum_fz1 = sum_fz1 + a_fz; - vcp_simd_load_add_store(soa2_ljc_V_x, j, Vx, lookupORforceMask); - vcp_simd_load_add_store(soa2_ljc_V_y, j, Vy, lookupORforceMask); - vcp_simd_load_add_store(soa2_ljc_V_z, j, Vz, lookupORforceMask); - - sum_Vx1 = sum_Vx1 + Vx; - sum_Vy1 = sum_Vy1 + Vy; - sum_Vz1 = sum_Vz1 + Vz; + vcp_simd_load_add_store(soa2_ljc_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_zy, j, Vzy, lookupORforceMask); + + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; } } #if VCP_VEC_TYPE == VCP_VEC_KNL_GATHER or VCP_VEC_TYPE == VCP_VEC_AVX512F_GATHER @@ -407,7 +447,7 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS const size_t id_i = soa1_ljc_id[i_ljc_idx]; RealCalcVec fx, fy, fz; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; RealCalcVec eps_24; RealCalcVec sig2; @@ -420,7 +460,9 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS m1_r_x, m1_r_y, m1_r_z, c_r_x1, c_r_y1, c_r_z1, m_r_x2, m_r_y2, m_r_z2, c_r_x2, c_r_y2, c_r_z2, fx, fy, fz, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, sum_upot6lj, sum_virial, remainderM,//use remainder mask as forcemask eps_24, sig2, @@ -438,13 +480,25 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS sum_fy1 = sum_fy1 + a_fy; sum_fz1 = sum_fz1 + a_fz; - vcp_simd_load_add_store_masked(soa2_ljc_V_x, j, Vx, lookupORforceMask, remainderM); - vcp_simd_load_add_store_masked(soa2_ljc_V_y, j, Vy, lookupORforceMask, remainderM); - vcp_simd_load_add_store_masked(soa2_ljc_V_z, j, Vz, lookupORforceMask, remainderM); - - sum_Vx1 = sum_Vx1 + Vx; - sum_Vy1 = sum_Vy1 + Vy; - sum_Vz1 = sum_Vz1 + Vz; + vcp_simd_load_add_store_masked(soa2_ljc_V_xx, j, Vxx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_yy, j, Vyy, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_zz, j, Vzz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_xy, j, Vxy, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_xz, j, Vxz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_yz, j, Vyz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_yx, j, Vyx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_zx, j, Vzx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_zy, j, Vzy, lookupORforceMask, remainderM); + + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; } } #endif @@ -453,9 +507,15 @@ void VectorizedLJP2PCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataS hSum_Add_Store(soa1_ljc_f_y + i_ljc_idx, sum_fy1); hSum_Add_Store(soa1_ljc_f_z + i_ljc_idx, sum_fz1); - hSum_Add_Store(soa1_ljc_V_x + i_ljc_idx, sum_Vx1); - hSum_Add_Store(soa1_ljc_V_y + i_ljc_idx, sum_Vy1); - hSum_Add_Store(soa1_ljc_V_z + i_ljc_idx, sum_Vz1); + hSum_Add_Store(soa1_ljc_V_xx + i_ljc_idx, sum_V1_xx); + hSum_Add_Store(soa1_ljc_V_yy + i_ljc_idx, sum_V1_yy); + hSum_Add_Store(soa1_ljc_V_zz + i_ljc_idx, sum_V1_zz); + hSum_Add_Store(soa1_ljc_V_xy + i_ljc_idx, sum_V1_xy); + hSum_Add_Store(soa1_ljc_V_xz + i_ljc_idx, sum_V1_xz); + hSum_Add_Store(soa1_ljc_V_yz + i_ljc_idx, sum_V1_yz); + hSum_Add_Store(soa1_ljc_V_yx + i_ljc_idx, sum_V1_yx); + hSum_Add_Store(soa1_ljc_V_zx + i_ljc_idx, sum_V1_zx); + hSum_Add_Store(soa1_ljc_V_zy + i_ljc_idx, sum_V1_zy); i_ljc_idx++; } diff --git a/src/bhfmm/cellProcessors/VectorizedLJP2PCellProcessor.h b/src/bhfmm/cellProcessors/VectorizedLJP2PCellProcessor.h index 247d58dde4..83561953bc 100644 --- a/src/bhfmm/cellProcessors/VectorizedLJP2PCellProcessor.h +++ b/src/bhfmm/cellProcessors/VectorizedLJP2PCellProcessor.h @@ -170,7 +170,9 @@ class VectorizedLJP2PCellProcessor : public CellProcessor { const RealCalcVec& m2_r_x, const RealCalcVec& m2_r_y, const RealCalcVec& m2_r_z, const RealCalcVec& r2_x, const RealCalcVec& r2_y, const RealCalcVec& r2_z, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& sum_upot6lj, RealAccumVec& sum_virial, const MaskCalcVec& forceMask, const RealCalcVec& eps_24, const RealCalcVec& sig2, diff --git a/src/molecules/FullMolecule.cpp b/src/molecules/FullMolecule.cpp index 238d846c3f..64d5f3a48a 100644 --- a/src/molecules/FullMolecule.cpp +++ b/src/molecules/FullMolecule.cpp @@ -584,7 +584,7 @@ void FullMolecule::calcFM() { // accumulate virial, dipoles_M and quadrupoles_M: double temp_M[3] = { 0., 0., 0. }; - double temp_Vi[3] = { 0., 0., 0. }; + double temp_Vi[9] = { 0., 0., 0., 0., 0., 0., 0., 0., 0. }; std::array interim; @@ -600,6 +600,18 @@ void FullMolecule::calcFM() { temp_Vi[0] += interim[0]; temp_Vi[1] += interim[1]; temp_Vi[2] += interim[2]; + + interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::LJC, index_in_soa); + + temp_Vi[3] += interim[0]; + temp_Vi[4] += interim[1]; + temp_Vi[5] += interim[2]; + + interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::LJC, index_in_soa); + + temp_Vi[6] += interim[0]; + temp_Vi[7] += interim[1]; + temp_Vi[8] += interim[2]; } ns = numCharges(); for (unsigned i = 0; i < ns; ++i) { @@ -613,6 +625,18 @@ void FullMolecule::calcFM() { temp_Vi[0] += interim[0]; temp_Vi[1] += interim[1]; temp_Vi[2] += interim[2]; + + interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::CHARGE, index_in_soa); + + temp_Vi[3] += interim[0]; + temp_Vi[4] += interim[1]; + temp_Vi[5] += interim[2]; + + interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::CHARGE, index_in_soa); + + temp_Vi[6] += interim[0]; + temp_Vi[7] += interim[1]; + temp_Vi[8] += interim[2]; } ns = numDipoles(); for (unsigned i = 0; i < ns; ++i) { @@ -629,6 +653,18 @@ void FullMolecule::calcFM() { temp_M[0] += _soa->_dipoles_M.x(index_in_soa); temp_M[1] += _soa->_dipoles_M.y(index_in_soa); temp_M[2] += _soa->_dipoles_M.z(index_in_soa); + + interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::DIPOLE, index_in_soa); + + temp_Vi[3] += interim[0]; + temp_Vi[4] += interim[1]; + temp_Vi[5] += interim[2]; + + interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::DIPOLE, index_in_soa); + + temp_Vi[6] += interim[0]; + temp_Vi[7] += interim[1]; + temp_Vi[8] += interim[2]; } ns = numQuadrupoles(); for (unsigned i = 0; i < ns; ++i) { @@ -645,13 +681,23 @@ void FullMolecule::calcFM() { temp_M[0] += _soa->_quadrupoles_M.x(index_in_soa); temp_M[1] += _soa->_quadrupoles_M.y(index_in_soa); temp_M[2] += _soa->_quadrupoles_M.z(index_in_soa); + + interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::QUADRUPOLE, index_in_soa); + + temp_Vi[3] += interim[0]; + temp_Vi[4] += interim[1]; + temp_Vi[5] += interim[2]; + + interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::QUADRUPOLE, index_in_soa); + + temp_Vi[6] += interim[0]; + temp_Vi[7] += interim[1]; + temp_Vi[8] += interim[2]; + } + for (unsigned i = 0; i < 9; ++i) { + temp_Vi[i] *= 0.5; + mardyn_assert(!isnan(temp_Vi[i])); } - temp_Vi[0] *= 0.5; - temp_Vi[1] *= 0.5; - temp_Vi[2] *= 0.5; - mardyn_assert(!isnan(temp_Vi[0])); - mardyn_assert(!isnan(temp_Vi[1])); - mardyn_assert(!isnan(temp_Vi[2])); Viadd(temp_Vi); Madd(temp_M); } @@ -682,9 +728,9 @@ void FullMolecule::check(unsigned long id) { || !isfinite(_Vi[3]) || !isfinite(_Vi[4]) || !isfinite(_Vi[5]) || !isfinite(_Vi[6]) || !isfinite(_Vi[7]) || !isfinite(_Vi[8]))) { cout << "\talert: molecule id " << id << " (internal cid " << this->_component->ID() << ") has virial _Vi = (" - << _Vi[0] << ", " << _Vi[1] << ", " << _Vi[2] << ", " - << _Vi[3] << ", " << _Vi[4] << ", " << _Vi[5] << ", " - << _Vi[6] << ", " << _Vi[7] << ", " << _Vi[8] << ")" << endl; + << _Vi[0] << ", " << _Vi[3] << ", " << _Vi[4] << ", " + << _Vi[6] << ", " << _Vi[1] << ", " << _Vi[5] << ", " + << _Vi[7] << ", " << _Vi[8] << ", " << _Vi[2] << ")" << endl; _Vi[0] = 0.0; _Vi[1] = 0.0; _Vi[2] = 0.0; diff --git a/src/molecules/FullMolecule.h b/src/molecules/FullMolecule.h index e502eb07e3..ed35481ee2 100644 --- a/src/molecules/FullMolecule.h +++ b/src/molecules/FullMolecule.h @@ -295,8 +295,7 @@ class FullMolecule : public MoleculeInterface { void Fadd(const double a[]) override { for(unsigned short d=0;d<3;++d) _F[d]+=a[d]; } void Madd(const double a[]) override { for(unsigned short d=0;d<3;++d) _M[d]+=a[d]; } - void Viadd(const double a[]) override { for(unsigned short d=0;d<3;++d) _Vi[d]+=a[d]; } - void ViaddAll(const double a[]) override { for(unsigned short d=0;d<9;++d) _Vi[d]+=a[d]; } + void Viadd(const double a[]) override { for(unsigned short d=0;d<9;++d) _Vi[d]+=a[d]; } void vadd(const double ax, const double ay, const double az) override { _v[0] += ax; _v[1] += ay; _v[2] += az; } diff --git a/src/molecules/MoleculeInterface.h b/src/molecules/MoleculeInterface.h index a4565dc2c7..eb9068307a 100644 --- a/src/molecules/MoleculeInterface.h +++ b/src/molecules/MoleculeInterface.h @@ -226,7 +226,6 @@ class MoleculeInterface { virtual void Fadd(const double a[]) = 0; virtual void Madd(const double a[]) = 0; virtual void Viadd(const double a[]) = 0; - virtual void ViaddAll(const double a[]) = 0; virtual void vadd(const double ax, const double ay, const double az) = 0; virtual void vsub(const double ax, const double ay, const double az) = 0; diff --git a/src/molecules/MoleculeRMM.h b/src/molecules/MoleculeRMM.h index eb3f734c87..6ece45d5b6 100644 --- a/src/molecules/MoleculeRMM.h +++ b/src/molecules/MoleculeRMM.h @@ -222,7 +222,6 @@ class MoleculeRMM : public MoleculeInterface { void Fadd(const double /*a*/[]) override {} void Madd(const double /*a*/[]) override {} void Viadd(const double /*a*/[]) override {} - void ViaddAll(const double /*a*/[]) override {} void vadd(const double ax, const double ay, const double az) override { setv(0, v(0) + ax); setv(1, v(1) + ay); setv(2, v(2) + az); } diff --git a/src/molecules/potforce.h b/src/molecules/potforce.h index 8428343f2b..da722efb32 100644 --- a/src/molecules/potforce.h +++ b/src/molecules/potforce.h @@ -575,8 +575,8 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] tempVi[7]=0.5*virialAll[6]; tempVi[8]=0.5*virialAll[7]; - mi.ViaddAll(tempVi); - mj.ViaddAll(tempVi); + mi.Viadd(tempVi); + mj.Viadd(tempVi); mi.Uadd(0.5*upot); mj.Uadd(0.5*upot); diff --git a/src/parallel/ParticleForceData.cpp b/src/parallel/ParticleForceData.cpp index 5364e6990f..6d8ac07141 100644 --- a/src/parallel/ParticleForceData.cpp +++ b/src/parallel/ParticleForceData.cpp @@ -58,5 +58,5 @@ void ParticleForceData::MoleculeToParticleData(ParticleForceData &particleStruct void ParticleForceData::AddParticleForceDataToMolecule(ParticleForceData &particleStruct, Molecule &molecule) { molecule.Fadd(particleStruct.F); molecule.Madd(particleStruct.M); - molecule.ViaddAll(particleStruct.Vi); + molecule.Viadd(particleStruct.Vi); } diff --git a/src/particleContainer/adapter/CellDataSoA.h b/src/particleContainer/adapter/CellDataSoA.h index 42c0430e95..e7b5f6bcd0 100644 --- a/src/particleContainer/adapter/CellDataSoA.h +++ b/src/particleContainer/adapter/CellDataSoA.h @@ -35,7 +35,7 @@ class CellDataSoA : public CellDataSoABase { * \brief */ enum class QuantityType { - MOL_POSITION, CENTER_POSITION, FORCE, VIRIAL + MOL_POSITION, CENTER_POSITION, FORCE, VIRIAL, VIRIALND1, VIRIALND2 }; size_t _ljc_num; @@ -56,6 +56,8 @@ class CellDataSoA : public CellDataSoABase { ConcatenatedSites _centers_r; ConcatenatedSites _centers_f; ConcatenatedSites _centers_V; + ConcatenatedSites _centers_VND1; + ConcatenatedSites _centers_VND2; // entries per lj center AlignedArray _ljc_id; @@ -95,13 +97,13 @@ class CellDataSoA : public CellDataSoABase { } vcp_inline vcp_real_accum* getBeginAccum(QuantityType qt, SiteType st, CoordinateType coord) { - mardyn_assert(qt == QuantityType::FORCE or qt == QuantityType::VIRIAL); + mardyn_assert(qt == QuantityType::FORCE or qt == QuantityType::VIRIAL or qt == QuantityType::VIRIALND1 or qt == QuantityType::VIRIALND2); ConcatenatedSites * thisQuantity = resolveQuantityAccum(qt); return thisQuantity->getBeginPointer(st, coord); } vcp_inline const vcp_real_accum* getBeginAccum(QuantityType qt, SiteType st, CoordinateType coord) const { - mardyn_assert(qt == QuantityType::FORCE or qt == QuantityType::VIRIAL); + mardyn_assert(qt == QuantityType::FORCE or qt == QuantityType::VIRIAL or qt == QuantityType::VIRIALND1 or qt == QuantityType::VIRIALND2); const ConcatenatedSites * thisQuantity = resolveQuantityAccum(qt); return thisQuantity->getBeginPointer(st, coord); } @@ -227,6 +229,8 @@ class CellDataSoA : public CellDataSoABase { _centers_r .resize(ljcenters_arg, charges_arg, dipoles_arg, quadrupoles_arg); _centers_f .resize(ljcenters_arg, charges_arg, dipoles_arg, quadrupoles_arg); _centers_V .resize(ljcenters_arg, charges_arg, dipoles_arg, quadrupoles_arg); + _centers_VND1.resize(ljcenters_arg, charges_arg, dipoles_arg, quadrupoles_arg); + _centers_VND2.resize(ljcenters_arg, charges_arg, dipoles_arg, quadrupoles_arg); // entries per lj center _ljc_id.resize_zero_shrink(_ljc_num, true); @@ -259,6 +263,8 @@ class CellDataSoA : public CellDataSoABase { total += _centers_r.get_dynamic_memory(); total += _centers_f.get_dynamic_memory(); total += _centers_V.get_dynamic_memory(); + total += _centers_VND1.get_dynamic_memory(); + total += _centers_VND2.get_dynamic_memory(); total += _dipoles_p.get_dynamic_memory(); total += _dipoles_e.get_dynamic_memory(); @@ -307,7 +313,7 @@ class CellDataSoA : public CellDataSoABase { } vcp_inline ConcatenatedSites* resolveQuantityAccum(QuantityType qt) { - mardyn_assert(qt == QuantityType::FORCE or qt == QuantityType::VIRIAL); + mardyn_assert(qt == QuantityType::FORCE or qt == QuantityType::VIRIAL or qt == QuantityType::VIRIALND1 or qt == QuantityType::VIRIALND2); ConcatenatedSites* returnQuantity; switch(qt) { case QuantityType::FORCE: @@ -316,6 +322,12 @@ class CellDataSoA : public CellDataSoABase { case QuantityType::VIRIAL: returnQuantity = &_centers_V; break; + case QuantityType::VIRIALND1: + returnQuantity = &_centers_VND1; + break; + case QuantityType::VIRIALND2: + returnQuantity = &_centers_VND2; + break; default: returnQuantity = nullptr; break; @@ -345,7 +357,7 @@ class CellDataSoA : public CellDataSoABase { } vcp_inline const ConcatenatedSites* resolveQuantityAccum(QuantityType qt) const { - mardyn_assert(qt == QuantityType::FORCE or qt == QuantityType::VIRIAL); + mardyn_assert(qt == QuantityType::FORCE or qt == QuantityType::VIRIAL or qt == QuantityType::VIRIALND1 or qt == QuantityType::VIRIALND2); const ConcatenatedSites* returnQuantity; switch(qt) { case QuantityType::FORCE: @@ -354,6 +366,12 @@ class CellDataSoA : public CellDataSoABase { case QuantityType::VIRIAL: returnQuantity = &_centers_V; break; + case QuantityType::VIRIALND1: + returnQuantity = &_centers_VND1; + break; + case QuantityType::VIRIALND2: + returnQuantity = &_centers_VND2; + break; default: returnQuantity = nullptr; break; diff --git a/src/particleContainer/adapter/VectorizedCellProcessor.cpp b/src/particleContainer/adapter/VectorizedCellProcessor.cpp index 04ff55c092..3cf46f4b66 100644 --- a/src/particleContainer/adapter/VectorizedCellProcessor.cpp +++ b/src/particleContainer/adapter/VectorizedCellProcessor.cpp @@ -177,7 +177,9 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec& m2_r_x, const RealCalcVec& m2_r_y, const RealCalcVec& m2_r_z, const RealCalcVec& r2_x, const RealCalcVec& r2_y, const RealCalcVec& r2_z, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& sum_upot6lj, RealAccumVec& sum_virial, const MaskCalcVec& forceMask, const RealCalcVec& eps_24, const RealCalcVec& sig2, @@ -208,9 +210,15 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec m_dy = m1_r_y - m2_r_y;//1FP (virial) (does not count) const RealCalcVec m_dz = m1_r_z - m2_r_z;//1FP (virial) (does not count) - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x);//1FP (virial) - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y);//1FP (virial) - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z);//1FP (virial) + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up if (calculateMacroscopic) { @@ -221,7 +229,7 @@ void VectorizedCellProcessor::endTraversal() { sum_upot6lj = sum_upot6lj + upot_accum;//1FP (sum macro) - sum_virial = sum_virial + V_x + V_y + V_z;//1 FP (sum macro) + 2 FP (virial) + sum_virial = sum_virial + V_xx + V_yy + V_zz;//1 FP (sum macro) + 2 FP (virial) } } @@ -235,7 +243,9 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec& r2_x, const RealCalcVec& r2_y, const RealCalcVec& r2_z, const RealCalcVec& qjj, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, const MaskCalcVec& forceMask) { @@ -267,14 +277,20 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec m_dy = m1_r_y - m2_r_y; const RealCalcVec m_dz = m1_r_z - m2_r_z; - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x); - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y); - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up if (calculateMacroscopic) { RealAccumVec upot_accum = RealAccumVec::convertCalcToAccum(upot); sum_upotXpoles = sum_upotXpoles + upot_accum; - sum_virial = sum_virial + V_x + V_y + V_z;//DoubleVec::scal_prod(m_dx, m_dy, m_dz, f_x, f_y, f_z); + sum_virial = sum_virial + V_xx + V_yy + V_zz;//DoubleVec::scal_prod(m_dx, m_dy, m_dz, f_x, f_y, f_z); } } @@ -288,7 +304,9 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec& e_x, const RealCalcVec& e_y, const RealCalcVec& e_z, const RealCalcVec& p, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& M_x, RealAccumVec& M_y, RealAccumVec& M_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, const MaskCalcVec& forceMask) @@ -326,9 +344,15 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec m_dy = m1_r_y - m2_r_y; const RealCalcVec m_dz = m1_r_z - m2_r_z; - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x); - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y); - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up. if (calculateMacroscopic) @@ -336,7 +360,7 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec minusUpot = qpper4pie0dr3 * re;//already masked RealAccumVec upot_accum = RealAccumVec::convertCalcToAccum(minusUpot); sum_upotXpoles = sum_upotXpoles - upot_accum; - sum_virial = sum_virial + V_x + V_y + V_z; //DoubleVec::scal_prod(m_dx, m_dy, m_dz, f_x, f_y, f_z);//already masked + sum_virial = sum_virial + V_xx + V_yy + V_zz; //DoubleVec::scal_prod(m_dx, m_dy, m_dz, f_x, f_y, f_z);//already masked } const RealCalcVec e_x_dy_minus_e_y_dx = RealCalcVec::fmsub(e_x, dy, e_y * dx); @@ -359,7 +383,9 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec& ejj_x, const RealCalcVec& ejj_y, const RealCalcVec& ejj_z, const RealCalcVec& pjj, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& M1_x, RealAccumVec& M1_y, RealAccumVec& M1_z, RealAccumVec& M2_x, RealAccumVec& M2_y, RealAccumVec& M2_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, RealAccumVec& sum_myRF, @@ -410,9 +436,15 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec m_dy = m1_r_y - m2_r_y; const RealCalcVec m_dz = m1_r_z - m2_r_z; - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x); - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y); - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up if (calculateMacroscopic) { @@ -424,7 +456,7 @@ void VectorizedCellProcessor::endTraversal() { sum_upotXpoles = sum_upotXpoles + upot_accum; //const DoubleVec virial = DoubleVec::scal_prod(m_dx, m_dy, m_dz, f_x, f_y, f_z);//already masked - sum_virial = sum_virial + V_x + V_y + V_z; + sum_virial = sum_virial + V_xx + V_yy + V_zz; RealAccumVec rf_accum = RealAccumVec::convertCalcToAccum(rffac * e1e2); sum_myRF = sum_myRF + rf_accum; @@ -453,7 +485,9 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec& ejj_x, const RealCalcVec& ejj_y, const RealCalcVec& ejj_z, const RealCalcVec& m, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& M_x, RealAccumVec& M_y, RealAccumVec& M_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, const MaskCalcVec& forceMask) { @@ -500,9 +534,15 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec m_dy = m1_r_y - m2_r_y; const RealCalcVec m_dz = m1_r_z - m2_r_z; - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x); - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y); - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up if (calculateMacroscopic) { @@ -510,7 +550,7 @@ void VectorizedCellProcessor::endTraversal() { sum_upotXpoles = sum_upotXpoles + upot_accum; - sum_virial = sum_virial + V_x + V_y + V_z; + sum_virial = sum_virial + V_xx + V_yy + V_zz; } /********** @@ -536,7 +576,9 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec& ejj_x, const RealCalcVec& ejj_y, const RealCalcVec& ejj_z, const RealCalcVec& m, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& M1_x, RealAccumVec& M1_y, RealAccumVec& M1_z, RealAccumVec& M2_x, RealAccumVec& M2_y, RealAccumVec& M2_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, @@ -608,9 +650,15 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec m_dy = m1_r_y - m2_r_y; const RealCalcVec m_dz = m1_r_z - m2_r_z; - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x); - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y); - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up if (calculateMacroscopic) { @@ -618,7 +666,7 @@ void VectorizedCellProcessor::endTraversal() { sum_upotXpoles = sum_upotXpoles + upot_accum; - sum_virial = sum_virial + V_x + V_y + V_z; + sum_virial = sum_virial + V_xx + V_yy + V_zz; } /********** @@ -660,7 +708,9 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec& ejj_x, const RealCalcVec& ejj_y, const RealCalcVec& ejj_z, const RealCalcVec& mjj, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& Mii_x, RealAccumVec& Mii_y, RealAccumVec& Mii_z, RealAccumVec& Mjj_x, RealAccumVec& Mjj_y, RealAccumVec& Mjj_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, @@ -750,9 +800,15 @@ void VectorizedCellProcessor::endTraversal() { const RealCalcVec m_dy = m1_r_y - m2_r_y; const RealCalcVec m_dz = m1_r_z - m2_r_z; - V_x = RealAccumVec::convertCalcToAccum(m_dx * f_x); - V_y = RealAccumVec::convertCalcToAccum(m_dy * f_y); - V_z = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xx = RealAccumVec::convertCalcToAccum(m_dx * f_x); + V_yy = RealAccumVec::convertCalcToAccum(m_dy * f_y); + V_zz = RealAccumVec::convertCalcToAccum(m_dz * f_z); + V_xy = RealAccumVec::convertCalcToAccum(m_dx * f_y); + V_xz = RealAccumVec::convertCalcToAccum(m_dx * f_z); + V_yz = RealAccumVec::convertCalcToAccum(m_dy * f_z); + V_yx = RealAccumVec::convertCalcToAccum(m_dy * f_x); + V_zx = RealAccumVec::convertCalcToAccum(m_dz * f_x); + V_zy = RealAccumVec::convertCalcToAccum(m_dz * f_y); // Check if we have to add the macroscopic values up for at least one of this pairs if (calculateMacroscopic) { @@ -761,7 +817,7 @@ void VectorizedCellProcessor::endTraversal() { sum_upotXpoles = sum_upotXpoles + upot_accum; - sum_virial = sum_virial + V_x + V_y + V_z; + sum_virial = sum_virial + V_xx + V_yy + V_zz; } /********** @@ -821,9 +877,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_real_accum * const soa1_ljc_f_x = soa1.getBeginAccum(QuantityType::FORCE, SiteType::LJC, Coordinate::X); vcp_real_accum * const soa1_ljc_f_y = soa1.getBeginAccum(QuantityType::FORCE, SiteType::LJC, Coordinate::Y); vcp_real_accum * const soa1_ljc_f_z = soa1.getBeginAccum(QuantityType::FORCE, SiteType::LJC, Coordinate::Z); - vcp_real_accum * const soa1_ljc_V_x = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::X); - vcp_real_accum * const soa1_ljc_V_y = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::Y); - vcp_real_accum * const soa1_ljc_V_z = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::Z); + vcp_real_accum * const soa1_ljc_V_xx = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::X); + vcp_real_accum * const soa1_ljc_V_yy = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::Y); + vcp_real_accum * const soa1_ljc_V_zz = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::Z); + vcp_real_accum * const soa1_ljc_V_xy = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::LJC, Coordinate::X); + vcp_real_accum * const soa1_ljc_V_xz = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::LJC, Coordinate::Y); + vcp_real_accum * const soa1_ljc_V_yz = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::LJC, Coordinate::Z); + vcp_real_accum * const soa1_ljc_V_yx = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::LJC, Coordinate::X); + vcp_real_accum * const soa1_ljc_V_zx = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::LJC, Coordinate::Y); + vcp_real_accum * const soa1_ljc_V_zy = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::LJC, Coordinate::Z); const int * const soa1_mol_ljc_num = soa1._mol_ljc_num; const vcp_ljc_id_t * const soa1_ljc_id = soa1._ljc_id; @@ -837,9 +899,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_real_accum * const soa2_ljc_f_x = soa2.getBeginAccum(QuantityType::FORCE, SiteType::LJC, Coordinate::X); vcp_real_accum * const soa2_ljc_f_y = soa2.getBeginAccum(QuantityType::FORCE, SiteType::LJC, Coordinate::Y); vcp_real_accum * const soa2_ljc_f_z = soa2.getBeginAccum(QuantityType::FORCE, SiteType::LJC, Coordinate::Z); - vcp_real_accum * const soa2_ljc_V_x = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::X); - vcp_real_accum * const soa2_ljc_V_y = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::Y); - vcp_real_accum * const soa2_ljc_V_z = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::Z); + vcp_real_accum * const soa2_ljc_V_xx = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::X); + vcp_real_accum * const soa2_ljc_V_yy = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::Y); + vcp_real_accum * const soa2_ljc_V_zz = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::LJC, Coordinate::Z); + vcp_real_accum * const soa2_ljc_V_xy = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::LJC, Coordinate::X); + vcp_real_accum * const soa2_ljc_V_xz = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::LJC, Coordinate::Y); + vcp_real_accum * const soa2_ljc_V_yz = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::LJC, Coordinate::Z); + vcp_real_accum * const soa2_ljc_V_yx = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::LJC, Coordinate::X); + vcp_real_accum * const soa2_ljc_V_zx = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::LJC, Coordinate::Y); + vcp_real_accum * const soa2_ljc_V_zy = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::LJC, Coordinate::Z); const vcp_ljc_id_t * const soa2_ljc_id = soa2._ljc_id; vcp_lookupOrMask_single* const soa2_ljc_dist_lookup = my_threadData._ljc_dist_lookup; @@ -851,9 +919,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_real_accum * const soa1_charges_f_x = soa1.getBeginAccum(QuantityType::FORCE, SiteType::CHARGE, Coordinate::X); vcp_real_accum * const soa1_charges_f_y = soa1.getBeginAccum(QuantityType::FORCE, SiteType::CHARGE, Coordinate::Y); vcp_real_accum * const soa1_charges_f_z = soa1.getBeginAccum(QuantityType::FORCE, SiteType::CHARGE, Coordinate::Z); - vcp_real_accum * const soa1_charges_V_x = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::X); - vcp_real_accum * const soa1_charges_V_y = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::Y); - vcp_real_accum * const soa1_charges_V_z = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::Z); + vcp_real_accum * const soa1_charges_V_xx = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::X); + vcp_real_accum * const soa1_charges_V_yy = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::Y); + vcp_real_accum * const soa1_charges_V_zz = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::Z); + vcp_real_accum * const soa1_charges_V_xy = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::CHARGE, Coordinate::X); + vcp_real_accum * const soa1_charges_V_xz = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::CHARGE, Coordinate::Y); + vcp_real_accum * const soa1_charges_V_yz = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::CHARGE, Coordinate::Z); + vcp_real_accum * const soa1_charges_V_yx = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::CHARGE, Coordinate::X); + vcp_real_accum * const soa1_charges_V_zx = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::CHARGE, Coordinate::Y); + vcp_real_accum * const soa1_charges_V_zy = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::CHARGE, Coordinate::Z); const vcp_real_calc * const soa1_charges_q = soa1._charges_q; const int * const soa1_mol_charges_num = soa1._mol_charges_num; @@ -866,9 +940,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_real_accum * const soa2_charges_f_x = soa2.getBeginAccum(QuantityType::FORCE, SiteType::CHARGE, Coordinate::X); vcp_real_accum * const soa2_charges_f_y = soa2.getBeginAccum(QuantityType::FORCE, SiteType::CHARGE, Coordinate::Y); vcp_real_accum * const soa2_charges_f_z = soa2.getBeginAccum(QuantityType::FORCE, SiteType::CHARGE, Coordinate::Z); - vcp_real_accum * const soa2_charges_V_x = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::X); - vcp_real_accum * const soa2_charges_V_y = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::Y); - vcp_real_accum * const soa2_charges_V_z = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::Z); + vcp_real_accum * const soa2_charges_V_xx = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::X); + vcp_real_accum * const soa2_charges_V_yy = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::Y); + vcp_real_accum * const soa2_charges_V_zz = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::CHARGE, Coordinate::Z); + vcp_real_accum * const soa2_charges_V_xy = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::CHARGE, Coordinate::X); + vcp_real_accum * const soa2_charges_V_xz = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::CHARGE, Coordinate::Y); + vcp_real_accum * const soa2_charges_V_yz = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::CHARGE, Coordinate::Z); + vcp_real_accum * const soa2_charges_V_yx = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::CHARGE, Coordinate::X); + vcp_real_accum * const soa2_charges_V_zx = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::CHARGE, Coordinate::Y); + vcp_real_accum * const soa2_charges_V_zy = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::CHARGE, Coordinate::Z); const vcp_real_calc * const soa2_charges_q = soa2._charges_q; vcp_lookupOrMask_single* const soa2_charges_dist_lookup = my_threadData._charges_dist_lookup; @@ -880,9 +960,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_real_accum * const soa1_dipoles_f_x = soa1.getBeginAccum(QuantityType::FORCE, SiteType::DIPOLE, Coordinate::X); vcp_real_accum * const soa1_dipoles_f_y = soa1.getBeginAccum(QuantityType::FORCE, SiteType::DIPOLE, Coordinate::Y); vcp_real_accum * const soa1_dipoles_f_z = soa1.getBeginAccum(QuantityType::FORCE, SiteType::DIPOLE, Coordinate::Z); - vcp_real_accum * const soa1_dipoles_V_x = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::X); - vcp_real_accum * const soa1_dipoles_V_y = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::Y); - vcp_real_accum * const soa1_dipoles_V_z = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::Z); + vcp_real_accum * const soa1_dipoles_V_xx = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::X); + vcp_real_accum * const soa1_dipoles_V_yy = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::Y); + vcp_real_accum * const soa1_dipoles_V_zz = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::Z); + vcp_real_accum * const soa1_dipoles_V_xy = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::DIPOLE, Coordinate::X); + vcp_real_accum * const soa1_dipoles_V_xz = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::DIPOLE, Coordinate::Y); + vcp_real_accum * const soa1_dipoles_V_yz = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::DIPOLE, Coordinate::Z); + vcp_real_accum * const soa1_dipoles_V_yx = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::DIPOLE, Coordinate::X); + vcp_real_accum * const soa1_dipoles_V_zx = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::DIPOLE, Coordinate::Y); + vcp_real_accum * const soa1_dipoles_V_zy = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::DIPOLE, Coordinate::Z); const vcp_real_calc * const soa1_dipoles_p = soa1._dipoles_p; const vcp_real_calc * const soa1_dipoles_e_x = soa1._dipoles_e.xBegin(); const vcp_real_calc * const soa1_dipoles_e_y = soa1._dipoles_e.yBegin(); @@ -901,9 +987,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_real_accum * const soa2_dipoles_f_x = soa2.getBeginAccum(QuantityType::FORCE, SiteType::DIPOLE, Coordinate::X); vcp_real_accum * const soa2_dipoles_f_y = soa2.getBeginAccum(QuantityType::FORCE, SiteType::DIPOLE, Coordinate::Y); vcp_real_accum * const soa2_dipoles_f_z = soa2.getBeginAccum(QuantityType::FORCE, SiteType::DIPOLE, Coordinate::Z); - vcp_real_accum * const soa2_dipoles_V_x = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::X); - vcp_real_accum * const soa2_dipoles_V_y = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::Y); - vcp_real_accum * const soa2_dipoles_V_z = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::Z); + vcp_real_accum * const soa2_dipoles_V_xx = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::X); + vcp_real_accum * const soa2_dipoles_V_yy = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::Y); + vcp_real_accum * const soa2_dipoles_V_zz = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::DIPOLE, Coordinate::Z); + vcp_real_accum * const soa2_dipoles_V_xy = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::DIPOLE, Coordinate::X); + vcp_real_accum * const soa2_dipoles_V_xz = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::DIPOLE, Coordinate::Y); + vcp_real_accum * const soa2_dipoles_V_yz = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::DIPOLE, Coordinate::Z); + vcp_real_accum * const soa2_dipoles_V_yx = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::DIPOLE, Coordinate::X); + vcp_real_accum * const soa2_dipoles_V_zx = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::DIPOLE, Coordinate::Y); + vcp_real_accum * const soa2_dipoles_V_zy = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::DIPOLE, Coordinate::Z); const vcp_real_calc * const soa2_dipoles_p = soa2._dipoles_p; const vcp_real_calc * const soa2_dipoles_e_x = soa2._dipoles_e.xBegin(); const vcp_real_calc * const soa2_dipoles_e_y = soa2._dipoles_e.yBegin(); @@ -921,9 +1013,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_real_accum * const soa1_quadrupoles_f_x = soa1.getBeginAccum(QuantityType::FORCE, SiteType::QUADRUPOLE, Coordinate::X); vcp_real_accum * const soa1_quadrupoles_f_y = soa1.getBeginAccum(QuantityType::FORCE, SiteType::QUADRUPOLE, Coordinate::Y); vcp_real_accum * const soa1_quadrupoles_f_z = soa1.getBeginAccum(QuantityType::FORCE, SiteType::QUADRUPOLE, Coordinate::Z); - vcp_real_accum * const soa1_quadrupoles_V_x = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::X); - vcp_real_accum * const soa1_quadrupoles_V_y = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::Y); - vcp_real_accum * const soa1_quadrupoles_V_z = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::Z); + vcp_real_accum * const soa1_quadrupoles_V_xx = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::X); + vcp_real_accum * const soa1_quadrupoles_V_yy = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::Y); + vcp_real_accum * const soa1_quadrupoles_V_zz = soa1.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::Z); + vcp_real_accum * const soa1_quadrupoles_V_xy = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::QUADRUPOLE, Coordinate::X); + vcp_real_accum * const soa1_quadrupoles_V_xz = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::QUADRUPOLE, Coordinate::Y); + vcp_real_accum * const soa1_quadrupoles_V_yz = soa1.getBeginAccum(QuantityType::VIRIALND1, SiteType::QUADRUPOLE, Coordinate::Z); + vcp_real_accum * const soa1_quadrupoles_V_yx = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::QUADRUPOLE, Coordinate::X); + vcp_real_accum * const soa1_quadrupoles_V_zx = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::QUADRUPOLE, Coordinate::Y); + vcp_real_accum * const soa1_quadrupoles_V_zy = soa1.getBeginAccum(QuantityType::VIRIALND2, SiteType::QUADRUPOLE, Coordinate::Z); const vcp_real_calc * const soa1_quadrupoles_m = soa1._quadrupoles_m; const vcp_real_calc * const soa1_quadrupoles_e_x = soa1._quadrupoles_e.xBegin(); const vcp_real_calc * const soa1_quadrupoles_e_y = soa1._quadrupoles_e.yBegin(); @@ -943,9 +1041,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_real_accum * const soa2_quadrupoles_f_x = soa2.getBeginAccum(QuantityType::FORCE, SiteType::QUADRUPOLE, Coordinate::X); vcp_real_accum * const soa2_quadrupoles_f_y = soa2.getBeginAccum(QuantityType::FORCE, SiteType::QUADRUPOLE, Coordinate::Y); vcp_real_accum * const soa2_quadrupoles_f_z = soa2.getBeginAccum(QuantityType::FORCE, SiteType::QUADRUPOLE, Coordinate::Z); - vcp_real_accum * const soa2_quadrupoles_V_x = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::X); - vcp_real_accum * const soa2_quadrupoles_V_y = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::Y); - vcp_real_accum * const soa2_quadrupoles_V_z = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::Z); + vcp_real_accum * const soa2_quadrupoles_V_xx = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::X); + vcp_real_accum * const soa2_quadrupoles_V_yy = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::Y); + vcp_real_accum * const soa2_quadrupoles_V_zz = soa2.getBeginAccum(QuantityType::VIRIAL, SiteType::QUADRUPOLE, Coordinate::Z); + vcp_real_accum * const soa2_quadrupoles_V_xy = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::QUADRUPOLE, Coordinate::X); + vcp_real_accum * const soa2_quadrupoles_V_xz = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::QUADRUPOLE, Coordinate::Y); + vcp_real_accum * const soa2_quadrupoles_V_yz = soa2.getBeginAccum(QuantityType::VIRIALND1, SiteType::QUADRUPOLE, Coordinate::Z); + vcp_real_accum * const soa2_quadrupoles_V_yx = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::QUADRUPOLE, Coordinate::X); + vcp_real_accum * const soa2_quadrupoles_V_zx = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::QUADRUPOLE, Coordinate::Y); + vcp_real_accum * const soa2_quadrupoles_V_zy = soa2.getBeginAccum(QuantityType::VIRIALND2, SiteType::QUADRUPOLE, Coordinate::Z); const vcp_real_calc * const soa2_quadrupoles_m = soa2._quadrupoles_m; const vcp_real_calc * const soa2_quadrupoles_e_x = soa2._quadrupoles_e.xBegin(); const vcp_real_calc * const soa2_quadrupoles_e_y = soa2._quadrupoles_e.yBegin(); @@ -1038,9 +1142,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_fy1 = RealAccumVec::zero(); RealAccumVec sum_fz1 = RealAccumVec::zero(); - RealAccumVec sum_Vx1 = RealAccumVec::zero(); - RealAccumVec sum_Vy1 = RealAccumVec::zero(); - RealAccumVec sum_Vz1 = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); const RealCalcVec c_r_x1 = RealCalcVec::broadcast(soa1_ljc_r_x + i_ljc_idx); const RealCalcVec c_r_y1 = RealCalcVec::broadcast(soa1_ljc_r_y + i_ljc_idx); @@ -1062,7 +1172,7 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & const vcp_ljc_id_t id_i = soa1_ljc_id[i_ljc_idx]; RealCalcVec fx, fy, fz; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; RealCalcVec eps_24; RealCalcVec sig2; @@ -1075,7 +1185,9 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & m1_r_x, m1_r_y, m1_r_z, c_r_x1, c_r_y1, c_r_z1, m_r_x2, m_r_y2, m_r_z2, c_r_x2, c_r_y2, c_r_z2, fx, fy, fz, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, sum_upot6lj, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask), eps_24, sig2, @@ -1093,13 +1205,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & sum_fy1 = sum_fy1 + a_fy; sum_fz1 = sum_fz1 + a_fz; - vcp_simd_load_add_store(soa2_ljc_V_x, j, Vx, lookupORforceMask); - vcp_simd_load_add_store(soa2_ljc_V_y, j, Vy, lookupORforceMask); - vcp_simd_load_add_store(soa2_ljc_V_z, j, Vz, lookupORforceMask); - - sum_Vx1 = sum_Vx1 + Vx; - sum_Vy1 = sum_Vy1 + Vy; - sum_Vz1 = sum_Vz1 + Vz; + vcp_simd_load_add_store(soa2_ljc_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_ljc_V_zy, j, Vzy, lookupORforceMask); + + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; } } #if VCP_VEC_TYPE == VCP_VEC_KNL_GATHER or VCP_VEC_TYPE == VCP_VEC_AVX512F_GATHER @@ -1123,7 +1247,7 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & const size_t id_i = soa1_ljc_id[i_ljc_idx]; RealCalcVec fx, fy, fz; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; RealCalcVec eps_24; RealCalcVec sig2; @@ -1136,7 +1260,9 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & m1_r_x, m1_r_y, m1_r_z, c_r_x1, c_r_y1, c_r_z1, m_r_x2, m_r_y2, m_r_z2, c_r_x2, c_r_y2, c_r_z2, fx, fy, fz, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, sum_upot6lj, sum_virial, remainderM,//use remainder mask as forcemask eps_24, sig2, @@ -1154,14 +1280,26 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & sum_fy1 = sum_fy1 + a_fy; sum_fz1 = sum_fz1 + a_fz; - vcp_simd_load_add_store_masked(soa2_ljc_V_x, j, Vx, lookupORforceMask, remainderM); - vcp_simd_load_add_store_masked(soa2_ljc_V_y, j, Vy, lookupORforceMask, remainderM); - vcp_simd_load_add_store_masked(soa2_ljc_V_z, j, Vz, lookupORforceMask, remainderM); - - - sum_Vx1 = sum_Vx1 + Vx; - sum_Vy1 = sum_Vy1 + Vy; - sum_Vz1 = sum_Vz1 + Vz; + vcp_simd_load_add_store_masked(soa2_ljc_V_xx, j, Vxx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_yy, j, Vyy, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_zz, j, Vzz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_xy, j, Vxy, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_xz, j, Vxz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_yz, j, Vyz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_yx, j, Vyx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_zx, j, Vzx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_ljc_V_zy, j, Vzy, lookupORforceMask, remainderM); + + + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; } } @@ -1171,9 +1309,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_ljc_f_y + i_ljc_idx, sum_fy1); hSum_Add_Store(soa1_ljc_f_z + i_ljc_idx, sum_fz1); - hSum_Add_Store(soa1_ljc_V_x + i_ljc_idx, sum_Vx1); - hSum_Add_Store(soa1_ljc_V_y + i_ljc_idx, sum_Vy1); - hSum_Add_Store(soa1_ljc_V_z + i_ljc_idx, sum_Vz1); + hSum_Add_Store(soa1_ljc_V_xx + i_ljc_idx, sum_V1_xx); + hSum_Add_Store(soa1_ljc_V_yy + i_ljc_idx, sum_V1_yy); + hSum_Add_Store(soa1_ljc_V_zz + i_ljc_idx, sum_V1_zz); + hSum_Add_Store(soa1_ljc_V_xy + i_ljc_idx, sum_V1_xy); + hSum_Add_Store(soa1_ljc_V_xz + i_ljc_idx, sum_V1_xz); + hSum_Add_Store(soa1_ljc_V_yz + i_ljc_idx, sum_V1_yz); + hSum_Add_Store(soa1_ljc_V_yx + i_ljc_idx, sum_V1_yx); + hSum_Add_Store(soa1_ljc_V_zx + i_ljc_idx, sum_V1_zx); + hSum_Add_Store(soa1_ljc_V_zy + i_ljc_idx, sum_V1_zy); i_ljc_idx++; } @@ -1200,9 +1344,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); // Iterate over centers of second cell size_t j = ForcePolicy::InitJ2(i_charge_idx + local_i); @@ -1222,13 +1372,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & const RealCalcVec m2_r_z = MaskGatherChooser::load(soa2_charges_m_r_z, j, lookupORforceMask); RealCalcVec f_x, f_y, f_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyCharge( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, q1, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, q2, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -1244,13 +1396,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_simd_load_sub_store(soa2_charges_f_y, j, a_f_y, lookupORforceMask); vcp_simd_load_sub_store(soa2_charges_f_z, j, a_f_z, lookupORforceMask); - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_charges_V_x, j, Vx, lookupORforceMask); - vcp_simd_load_add_store(soa2_charges_V_y, j, Vy, lookupORforceMask); - vcp_simd_load_add_store(soa2_charges_V_z, j, Vz, lookupORforceMask); + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_charges_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zy, j, Vzy, lookupORforceMask); } } #if VCP_VEC_TYPE == VCP_VEC_KNL_GATHER or VCP_VEC_TYPE == VCP_VEC_AVX512F_GATHER @@ -1274,13 +1438,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & const RealCalcVec m2_r_z = MaskGatherChooser::load(soa2_charges_m_r_z, j, lookupORforceMask); RealCalcVec f_x, f_y, f_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyCharge( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, q1, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, q2, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, sum_upotXpoles, sum_virial, remainderM); @@ -1296,13 +1462,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_simd_load_sub_store_masked(soa2_charges_f_y, j, a_f_y, lookupORforceMask, remainderM); vcp_simd_load_sub_store_masked(soa2_charges_f_z, j, a_f_z, lookupORforceMask, remainderM); - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store_masked(soa2_charges_V_x, j, Vx, lookupORforceMask, remainderM); - vcp_simd_load_add_store_masked(soa2_charges_V_y, j, Vy, lookupORforceMask, remainderM); - vcp_simd_load_add_store_masked(soa2_charges_V_z, j, Vz, lookupORforceMask, remainderM); + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store_masked(soa2_charges_V_xx, j, Vxx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_yy, j, Vyy, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_zz, j, Vzz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_xy, j, Vxy, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_xz, j, Vxz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_yz, j, Vyz, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_yx, j, Vyx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_zx, j, Vzx, lookupORforceMask, remainderM); + vcp_simd_load_add_store_masked(soa2_charges_V_zy, j, Vzy, lookupORforceMask, remainderM); } } #endif @@ -1312,9 +1490,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_charges_f_y + i_charge_idx + local_i, sum_f1_y); hSum_Add_Store(soa1_charges_f_z + i_charge_idx + local_i, sum_f1_z); // Add old virial and summed calculated virials for center 1 - hSum_Add_Store(soa1_charges_V_x + i_charge_idx + local_i, sum_V1_x); - hSum_Add_Store(soa1_charges_V_y + i_charge_idx + local_i, sum_V1_y); - hSum_Add_Store(soa1_charges_V_z + i_charge_idx + local_i, sum_V1_z); + hSum_Add_Store(soa1_charges_V_xx + i_charge_idx + local_i, sum_V1_xx); + hSum_Add_Store(soa1_charges_V_yy + i_charge_idx + local_i, sum_V1_yy); + hSum_Add_Store(soa1_charges_V_zz + i_charge_idx + local_i, sum_V1_zz); + hSum_Add_Store(soa1_charges_V_xy + i_charge_idx + local_i, sum_V1_xy); + hSum_Add_Store(soa1_charges_V_xz + i_charge_idx + local_i, sum_V1_xz); + hSum_Add_Store(soa1_charges_V_yz + i_charge_idx + local_i, sum_V1_yz); + hSum_Add_Store(soa1_charges_V_yx + i_charge_idx + local_i, sum_V1_yx); + hSum_Add_Store(soa1_charges_V_zx + i_charge_idx + local_i, sum_V1_zx); + hSum_Add_Store(soa1_charges_V_zy + i_charge_idx + local_i, sum_V1_zy); } @@ -1334,9 +1518,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); RealAccumVec sum_M_x = RealAccumVec::zero(); RealAccumVec sum_M_y = RealAccumVec::zero(); @@ -1360,13 +1550,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M_x, M_y, M_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyChargeDipole( m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, q, m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, e_x, e_y, e_z, p, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M_x, M_y, M_z, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -1384,13 +1576,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & vcp_simd_load_add_store(soa2_charges_f_z, j, a_f_z, lookupORforceMask);//newton 3 //store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_charges_V_x, j, Vx, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_charges_V_y, j, Vy, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_charges_V_z, j, Vz, lookupORforceMask);//newton 3 + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_charges_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zy, j, Vzy, lookupORforceMask); // Store torque @@ -1421,13 +1625,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M_x, M_y, M_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyChargeDipole( m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, q, m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, e_x, e_y, e_z, p, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M_x, M_y, M_z, sum_upotXpoles, sum_virial, remainderM); @@ -1446,9 +1652,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; vcp_simd_load_add_store_masked(soa2_charges_V_x, j, Vx, lookupORforceMask, remainderM);//newton 3 vcp_simd_load_add_store_masked(soa2_charges_V_y, j, Vy, lookupORforceMask, remainderM);//newton 3 @@ -1468,9 +1680,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_dipoles_f_z + i_dipole_charge_idx, sum_f1_z); // Add old virials and summed calculated virials for center 1 - hSum_Add_Store(soa1_dipoles_V_x + i_dipole_charge_idx, sum_V1_x); - hSum_Add_Store(soa1_dipoles_V_y + i_dipole_charge_idx, sum_V1_y); - hSum_Add_Store(soa1_dipoles_V_z + i_dipole_charge_idx, sum_V1_z); + hSum_Add_Store(soa1_dipoles_V_xx + i_dipole_charge_idx, sum_V1_xx); + hSum_Add_Store(soa1_dipoles_V_yy + i_dipole_charge_idx, sum_V1_yy); + hSum_Add_Store(soa1_dipoles_V_zz + i_dipole_charge_idx, sum_V1_zz); + hSum_Add_Store(soa1_dipoles_V_xy + i_dipole_charge_idx, sum_V1_xy); + hSum_Add_Store(soa1_dipoles_V_xz + i_dipole_charge_idx, sum_V1_xz); + hSum_Add_Store(soa1_dipoles_V_yz + i_dipole_charge_idx, sum_V1_yz); + hSum_Add_Store(soa1_dipoles_V_yx + i_dipole_charge_idx, sum_V1_yx); + hSum_Add_Store(soa1_dipoles_V_zx + i_dipole_charge_idx, sum_V1_zx); + hSum_Add_Store(soa1_dipoles_V_zy + i_dipole_charge_idx, sum_V1_zy); // Add old torques and summed calculated torques for center 1 hSum_Add_Store(soa1_dipoles_M_x + i_dipole_charge_idx, sum_M_x); @@ -1496,9 +1714,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); RealAccumVec sum_M1_x = RealAccumVec::zero(); RealAccumVec sum_M1_y = RealAccumVec::zero(); @@ -1522,13 +1746,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M_x, M_y, M_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyChargeQuadrupole( m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, q, m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, e_x, e_y, e_z, m, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M_x, M_y, M_z, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -1548,13 +1774,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_charges_V_x, j, Vx, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_charges_V_y, j, Vy, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_charges_V_z, j, Vz, lookupORforceMask);//newton 3 + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_charges_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_charges_V_zy, j, Vzy, lookupORforceMask); // Store torque @@ -1586,13 +1824,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M_x, M_y, M_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyChargeQuadrupole( m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, q, m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, e_x, e_y, e_z, m, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M_x, M_y, M_z, sum_upotXpoles, sum_virial, remainderM); @@ -1612,9 +1852,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; vcp_simd_load_add_store_masked(soa2_charges_V_x, j, Vx, lookupORforceMask, remainderM);//newton 3 @@ -1637,9 +1883,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_quadrupoles_f_z + i_quadrupole_charge_idx, sum_f1_z); // Add old virials and summed calculated virials for center 1 - hSum_Add_Store(soa1_quadrupoles_V_x + i_quadrupole_charge_idx, sum_V1_x); - hSum_Add_Store(soa1_quadrupoles_V_y + i_quadrupole_charge_idx, sum_V1_y); - hSum_Add_Store(soa1_quadrupoles_V_z + i_quadrupole_charge_idx, sum_V1_z); + hSum_Add_Store(soa1_quadrupoles_V_xx + i_quadrupole_charge_idx, sum_V1_xx); + hSum_Add_Store(soa1_quadrupoles_V_yy + i_quadrupole_charge_idx, sum_V1_yy); + hSum_Add_Store(soa1_quadrupoles_V_zz + i_quadrupole_charge_idx, sum_V1_zz); + hSum_Add_Store(soa1_quadrupoles_V_xy + i_quadrupole_charge_idx, sum_V1_xy); + hSum_Add_Store(soa1_quadrupoles_V_xz + i_quadrupole_charge_idx, sum_V1_xz); + hSum_Add_Store(soa1_quadrupoles_V_yz + i_quadrupole_charge_idx, sum_V1_yz); + hSum_Add_Store(soa1_quadrupoles_V_yx + i_quadrupole_charge_idx, sum_V1_yx); + hSum_Add_Store(soa1_quadrupoles_V_zx + i_quadrupole_charge_idx, sum_V1_zx); + hSum_Add_Store(soa1_quadrupoles_V_zy + i_quadrupole_charge_idx, sum_V1_zy); // Add old torques and summed calculated torques for center 1 hSum_Add_Store(soa1_quadrupoles_M_x + i_quadrupole_charge_idx, sum_M1_x); @@ -1678,9 +1930,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); RealAccumVec sum_M1_x = RealAccumVec::zero(); RealAccumVec sum_M1_y = RealAccumVec::zero(); @@ -1706,13 +1964,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M1_x, M1_y, M1_z, M2_x, M2_y, M2_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyDipole( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, e1_x, e1_y, e1_z, p1, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, e2_x, e2_y, e2_z, p2, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M1_x, M1_y, M1_z, M2_x, M2_y, M2_z, sum_upotXpoles, sum_virial, sum_myRF, @@ -1733,13 +1993,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_dipoles_V_x, j, Vx, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_dipoles_V_y, j, Vy, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_dipoles_V_z, j, Vz, lookupORforceMask);//newton 3 + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_dipoles_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zy, j, Vzy, lookupORforceMask); // Store torque @@ -1778,13 +2050,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M1_x, M1_y, M1_z, M2_x, M2_y, M2_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyDipole( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, e1_x, e1_y, e1_z, p1, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, e2_x, e2_y, e2_z, p2, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M1_x, M1_y, M1_z, M2_x, M2_y, M2_z, sum_upotXpoles, sum_virial, sum_myRF, @@ -1805,9 +2079,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; vcp_simd_load_add_store_masked(soa2_dipoles_V_x, j, Vx, lookupORforceMask, remainderM);//newton 3 vcp_simd_load_add_store_masked(soa2_dipoles_V_y, j, Vy, lookupORforceMask, remainderM);//newton 3 @@ -1833,9 +2113,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_dipoles_f_z + i_dipole_idx + local_i, sum_f1_z); // Add old virials and summed calculated virials for center 1 - hSum_Add_Store(soa1_dipoles_V_x + i_dipole_idx + local_i, sum_V1_x); - hSum_Add_Store(soa1_dipoles_V_y + i_dipole_idx + local_i, sum_V1_y); - hSum_Add_Store(soa1_dipoles_V_z + i_dipole_idx + local_i, sum_V1_z); + hSum_Add_Store(soa1_dipoles_V_xx + i_dipole_idx + local_i, sum_V1_xx); + hSum_Add_Store(soa1_dipoles_V_yy + i_dipole_idx + local_i, sum_V1_yy); + hSum_Add_Store(soa1_dipoles_V_zz + i_dipole_idx + local_i, sum_V1_zz); + hSum_Add_Store(soa1_dipoles_V_xy + i_dipole_idx + local_i, sum_V1_xy); + hSum_Add_Store(soa1_dipoles_V_xz + i_dipole_idx + local_i, sum_V1_xz); + hSum_Add_Store(soa1_dipoles_V_yz + i_dipole_idx + local_i, sum_V1_yz); + hSum_Add_Store(soa1_dipoles_V_yx + i_dipole_idx + local_i, sum_V1_yx); + hSum_Add_Store(soa1_dipoles_V_zx + i_dipole_idx + local_i, sum_V1_zx); + hSum_Add_Store(soa1_dipoles_V_zy + i_dipole_idx + local_i, sum_V1_zy); // Add old torques and summed calculated torques for center 1 hSum_Add_Store(soa1_dipoles_M_x + i_dipole_idx + local_i, sum_M1_x); @@ -1858,9 +2144,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); size_t j = ForcePolicy::InitJ2(i_dipole_idx); for (; j < end_dipoles_loop; j += VCP_VEC_SIZE) { @@ -1884,13 +2176,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M_x, M_y, M_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyChargeDipole( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, q, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, e_x, e_y, e_z, p, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M_x, M_y, M_z, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -1909,13 +2203,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_dipoles_V_x, j, Vx, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_dipoles_V_y, j, Vy, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_dipoles_V_z, j, Vz, lookupORforceMask);//newton 3 + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_dipoles_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zy, j, Vzy, lookupORforceMask); // Store torque @@ -1951,13 +2257,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M_x, M_y, M_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyChargeDipole( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, q, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, e_x, e_y, e_z, p, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M_x, M_y, M_z, sum_upotXpoles, sum_virial, remainderM); @@ -1976,9 +2284,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; vcp_simd_load_add_store_masked(soa2_dipoles_V_x, j, Vx, lookupORforceMask, remainderM);//newton 3 vcp_simd_load_add_store_masked(soa2_dipoles_V_y, j, Vy, lookupORforceMask, remainderM);//newton 3 @@ -1998,9 +2312,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_charges_f_z + i_charge_dipole_idx, sum_f1_z); // Add old virials and summed calculated virials for center 1 - hSum_Add_Store(soa1_charges_V_x + i_charge_dipole_idx, sum_V1_x); - hSum_Add_Store(soa1_charges_V_y + i_charge_dipole_idx, sum_V1_y); - hSum_Add_Store(soa1_charges_V_z + i_charge_dipole_idx, sum_V1_z); + hSum_Add_Store(soa1_charges_V_xx + i_charge_dipole_idx, sum_V1_xx); + hSum_Add_Store(soa1_charges_V_yy + i_charge_dipole_idx, sum_V1_yy); + hSum_Add_Store(soa1_charges_V_zz + i_charge_dipole_idx, sum_V1_zz); + hSum_Add_Store(soa1_charges_V_xy + i_charge_dipole_idx, sum_V1_xy); + hSum_Add_Store(soa1_charges_V_xz + i_charge_dipole_idx, sum_V1_xz); + hSum_Add_Store(soa1_charges_V_yz + i_charge_dipole_idx, sum_V1_yz); + hSum_Add_Store(soa1_charges_V_yx + i_charge_dipole_idx, sum_V1_yx); + hSum_Add_Store(soa1_charges_V_zx + i_charge_dipole_idx, sum_V1_zx); + hSum_Add_Store(soa1_charges_V_zy + i_charge_dipole_idx, sum_V1_zy); i_charge_dipole_idx++; } @@ -2022,9 +2342,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); RealAccumVec sum_M1_x = RealAccumVec::zero(); RealAccumVec sum_M1_y = RealAccumVec::zero(); @@ -2050,13 +2376,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M1_x, M1_y, M1_z, M2_x, M2_y, M2_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyDipoleQuadrupole( m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, e2_x, e2_y, e2_z, p, m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, e1_x, e1_y, e1_z, m, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M2_x, M2_y, M2_z, M1_x, M1_y, M1_z, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -2075,13 +2403,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_dipoles_V_x, j, Vx, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_dipoles_V_y, j, Vy, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_dipoles_V_z, j, Vz, lookupORforceMask);//newton 3 + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_dipoles_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_dipoles_V_zy, j, Vzy, lookupORforceMask); // Store torque @@ -2120,13 +2460,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M1_x, M1_y, M1_z, M2_x, M2_y, M2_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyDipoleQuadrupole( m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, e2_x, e2_y, e2_z, p, m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, e1_x, e1_y, e1_z, m, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M2_x, M2_y, M2_z, M1_x, M1_y, M1_z, sum_upotXpoles, sum_virial, remainderM); @@ -2145,9 +2487,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; vcp_simd_load_add_store_masked(soa2_dipoles_V_x, j, Vx, lookupORforceMask, remainderM);//newton 3 vcp_simd_load_add_store_masked(soa2_dipoles_V_y, j, Vy, lookupORforceMask, remainderM);//newton 3 @@ -2175,9 +2523,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_quadrupoles_f_z + i_quadrupole_dipole_idx, sum_f1_z); // Add old virials and summed calculated virials for center 1 - hSum_Add_Store(soa1_quadrupoles_V_x + i_quadrupole_dipole_idx, sum_V1_x); - hSum_Add_Store(soa1_quadrupoles_V_y + i_quadrupole_dipole_idx, sum_V1_y); - hSum_Add_Store(soa1_quadrupoles_V_z + i_quadrupole_dipole_idx, sum_V1_z); + hSum_Add_Store(soa1_quadrupoles_V_xx + i_quadrupole_dipole_idx, sum_V1_xx); + hSum_Add_Store(soa1_quadrupoles_V_yy + i_quadrupole_dipole_idx, sum_V1_yy); + hSum_Add_Store(soa1_quadrupoles_V_zz + i_quadrupole_dipole_idx, sum_V1_zz); + hSum_Add_Store(soa1_quadrupoles_V_xy + i_quadrupole_dipole_idx, sum_V1_xy); + hSum_Add_Store(soa1_quadrupoles_V_xz + i_quadrupole_dipole_idx, sum_V1_xz); + hSum_Add_Store(soa1_quadrupoles_V_yz + i_quadrupole_dipole_idx, sum_V1_yz); + hSum_Add_Store(soa1_quadrupoles_V_yx + i_quadrupole_dipole_idx, sum_V1_yx); + hSum_Add_Store(soa1_quadrupoles_V_zx + i_quadrupole_dipole_idx, sum_V1_zx); + hSum_Add_Store(soa1_quadrupoles_V_zy + i_quadrupole_dipole_idx, sum_V1_zy); // Add old torques and summed calculated torques for center 1 hSum_Add_Store(soa1_quadrupoles_M_x + i_quadrupole_dipole_idx, sum_M1_x); @@ -2216,9 +2570,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); RealAccumVec sum_M1_x = RealAccumVec::zero(); RealAccumVec sum_M1_y = RealAccumVec::zero(); @@ -2245,13 +2605,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M1_x, M1_y, M1_z, M2_x, M2_y, M2_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyQuadrupole( m1_r_x, m1_r_y, m1_r_z, rii_x, rii_y, rii_z, eii_x, eii_y, eii_z, mii, m2_r_x, m2_r_y, m2_r_z, rjj_x, rjj_y, rjj_z, ejj_x, ejj_y, ejj_z, mjj, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M1_x, M1_y, M1_z, M2_x, M2_y, M2_z, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -2271,13 +2633,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_quadrupoles_V_x, j, Vx, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_quadrupoles_V_y, j, Vy, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_quadrupoles_V_z, j, Vz, lookupORforceMask);//newton 3 + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_quadrupoles_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zy, j, Vzy, lookupORforceMask); // Store torque @@ -2314,13 +2688,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M1_x, M1_y, M1_z, M2_x, M2_y, M2_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyQuadrupole( m1_r_x, m1_r_y, m1_r_z, rii_x, rii_y, rii_z, eii_x, eii_y, eii_z, mii, m2_r_x, m2_r_y, m2_r_z, rjj_x, rjj_y, rjj_z, ejj_x, ejj_y, ejj_z, mjj, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M1_x, M1_y, M1_z, M2_x, M2_y, M2_z, sum_upotXpoles, sum_virial, remainderM); @@ -2339,9 +2715,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; vcp_simd_load_add_store_masked(soa2_quadrupoles_V_x, j, Vx, lookupORforceMask, remainderM);//newton 3 vcp_simd_load_add_store_masked(soa2_quadrupoles_V_y, j, Vy, lookupORforceMask, remainderM);//newton 3 @@ -2366,9 +2748,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_quadrupoles_f_z + i_quadrupole_idx + local_i, sum_f1_z); // Add old virials and summed calculated virials for center 1 - hSum_Add_Store(soa1_quadrupoles_V_x + i_quadrupole_idx + local_i, sum_V1_x); - hSum_Add_Store(soa1_quadrupoles_V_y + i_quadrupole_idx + local_i, sum_V1_y); - hSum_Add_Store(soa1_quadrupoles_V_z + i_quadrupole_idx + local_i, sum_V1_z); + hSum_Add_Store(soa1_quadrupoles_V_xx + i_quadrupole_idx + local_i, sum_V1_xx); + hSum_Add_Store(soa1_quadrupoles_V_yy + i_quadrupole_idx + local_i, sum_V1_yy); + hSum_Add_Store(soa1_quadrupoles_V_zz + i_quadrupole_idx + local_i, sum_V1_zz); + hSum_Add_Store(soa1_quadrupoles_V_xy + i_quadrupole_idx + local_i, sum_V1_xy); + hSum_Add_Store(soa1_quadrupoles_V_xz + i_quadrupole_idx + local_i, sum_V1_xz); + hSum_Add_Store(soa1_quadrupoles_V_yz + i_quadrupole_idx + local_i, sum_V1_yz); + hSum_Add_Store(soa1_quadrupoles_V_yx + i_quadrupole_idx + local_i, sum_V1_yx); + hSum_Add_Store(soa1_quadrupoles_V_zx + i_quadrupole_idx + local_i, sum_V1_zx); + hSum_Add_Store(soa1_quadrupoles_V_zy + i_quadrupole_idx + local_i, sum_V1_zy); // Add old torques and summed calculated torques for center 1 hSum_Add_Store(soa1_quadrupoles_M_x + i_quadrupole_idx + local_i, sum_M1_x); @@ -2390,9 +2778,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); size_t j = ForcePolicy::InitJ2(i_quadrupole_idx); for (; j < end_quadrupoles_loop; j += VCP_VEC_SIZE) { @@ -2415,13 +2809,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M_x, M_y, M_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyChargeQuadrupole( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, q, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, e_x, e_y, e_z, m, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M_x, M_y, M_z, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -2440,13 +2836,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store forces - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_quadrupoles_V_x, j, Vx, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_quadrupoles_V_y, j, Vy, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_quadrupoles_V_z, j, Vz, lookupORforceMask);//newton 3 + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_quadrupoles_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zy, j, Vzy, lookupORforceMask); // Store torque @@ -2482,13 +2890,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M_x, M_y, M_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyChargeQuadrupole( m1_r_x, m1_r_y, m1_r_z, r1_x, r1_y, r1_z, q, m2_r_x, m2_r_y, m2_r_z, r2_x, r2_y, r2_z, e_x, e_y, e_z, m, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M_x, M_y, M_z, sum_upotXpoles, sum_virial, remainderM); @@ -2507,9 +2917,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; vcp_simd_load_add_store_masked(soa2_quadrupoles_V_x, j, Vx, lookupORforceMask, remainderM);//newton 3 vcp_simd_load_add_store_masked(soa2_quadrupoles_V_y, j, Vy, lookupORforceMask, remainderM);//newton 3 @@ -2530,9 +2946,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_charges_f_y + i_charge_quadrupole_idx, sum_f1_y); hSum_Add_Store(soa1_charges_f_z + i_charge_quadrupole_idx, sum_f1_z); // Add old virials and summed calculated virials for center 1 - hSum_Add_Store(soa1_charges_V_x + i_charge_quadrupole_idx, sum_V1_x); - hSum_Add_Store(soa1_charges_V_y + i_charge_quadrupole_idx, sum_V1_y); - hSum_Add_Store(soa1_charges_V_z + i_charge_quadrupole_idx, sum_V1_z); + hSum_Add_Store(soa1_charges_V_xx + i_charge_quadrupole_idx, sum_V1_xx); + hSum_Add_Store(soa1_charges_V_yy + i_charge_quadrupole_idx, sum_V1_yy); + hSum_Add_Store(soa1_charges_V_zz + i_charge_quadrupole_idx, sum_V1_zz); + hSum_Add_Store(soa1_charges_V_xy + i_charge_quadrupole_idx, sum_V1_xy); + hSum_Add_Store(soa1_charges_V_xz + i_charge_quadrupole_idx, sum_V1_xz); + hSum_Add_Store(soa1_charges_V_yz + i_charge_quadrupole_idx, sum_V1_yz); + hSum_Add_Store(soa1_charges_V_yx + i_charge_quadrupole_idx, sum_V1_yx); + hSum_Add_Store(soa1_charges_V_zx + i_charge_quadrupole_idx, sum_V1_zx); + hSum_Add_Store(soa1_charges_V_zy + i_charge_quadrupole_idx, sum_V1_zy); i_charge_quadrupole_idx++; } @@ -2554,9 +2976,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealAccumVec sum_f1_y = RealAccumVec::zero(); RealAccumVec sum_f1_z = RealAccumVec::zero(); - RealAccumVec sum_V1_x = RealAccumVec::zero(); - RealAccumVec sum_V1_y = RealAccumVec::zero(); - RealAccumVec sum_V1_z = RealAccumVec::zero(); + RealAccumVec sum_V1_xx = RealAccumVec::zero(); + RealAccumVec sum_V1_yy = RealAccumVec::zero(); + RealAccumVec sum_V1_zz = RealAccumVec::zero(); + RealAccumVec sum_V1_xy = RealAccumVec::zero(); + RealAccumVec sum_V1_xz = RealAccumVec::zero(); + RealAccumVec sum_V1_yz = RealAccumVec::zero(); + RealAccumVec sum_V1_yx = RealAccumVec::zero(); + RealAccumVec sum_V1_zx = RealAccumVec::zero(); + RealAccumVec sum_V1_zy = RealAccumVec::zero(); RealAccumVec sum_M1_x = RealAccumVec::zero(); RealAccumVec sum_M1_y = RealAccumVec::zero(); @@ -2583,13 +3011,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M1_x, M1_y, M1_z, M2_x, M2_y, M2_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyDipoleQuadrupole( m1_r_x, m1_r_y, m1_r_z, rii_x, rii_y, rii_z, eii_x, eii_y, eii_z, p, m2_r_x, m2_r_y, m2_r_z, rjj_x, rjj_y, rjj_z, ejj_x, ejj_y, ejj_z, m, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M1_x, M1_y, M1_z, M2_x, M2_y, M2_z, sum_upotXpoles, sum_virial, MaskGatherChooser::getForceMask(lookupORforceMask)); @@ -2608,13 +3038,25 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; - - vcp_simd_load_add_store(soa2_quadrupoles_V_x, j, Vx, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_quadrupoles_V_y, j, Vy, lookupORforceMask);//newton 3 - vcp_simd_load_add_store(soa2_quadrupoles_V_z, j, Vz, lookupORforceMask);//newton 3 + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; + + vcp_simd_load_add_store(soa2_quadrupoles_V_xx, j, Vxx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yy, j, Vyy, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zz, j, Vzz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_xy, j, Vxy, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_xz, j, Vxz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yz, j, Vyz, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_yx, j, Vyx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zx, j, Vzx, lookupORforceMask); + vcp_simd_load_add_store(soa2_quadrupoles_V_zy, j, Vzy, lookupORforceMask); // Store torque @@ -2653,13 +3095,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & RealCalcVec f_x, f_y, f_z; RealAccumVec M1_x, M1_y, M1_z, M2_x, M2_y, M2_z; - RealAccumVec Vx, Vy, Vz; + RealAccumVec Vxx, Vyy, Vzz, Vxy, Vxz, Vyz, Vyx, Vzx, Vzy; _loopBodyDipoleQuadrupole( m1_r_x, m1_r_y, m1_r_z, rii_x, rii_y, rii_z, eii_x, eii_y, eii_z, p, m2_r_x, m2_r_y, m2_r_z, rjj_x, rjj_y, rjj_z, ejj_x, ejj_y, ejj_z, m, f_x, f_y, f_z, - Vx, Vy, Vz, + Vxx, Vyy, Vzz, + Vxy, Vxz, Vyz, + Vyx, Vzx, Vzy, M1_x, M1_y, M1_z, M2_x, M2_y, M2_z, sum_upotXpoles, sum_virial, remainderM); @@ -2678,9 +3122,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & // Store virials - sum_V1_x = sum_V1_x + Vx; - sum_V1_y = sum_V1_y + Vy; - sum_V1_z = sum_V1_z + Vz; + sum_V1_xx = sum_V1_xx + Vxx; + sum_V1_yy = sum_V1_yy + Vyy; + sum_V1_zz = sum_V1_zz + Vzz; + sum_V1_xy = sum_V1_xy + Vxy; + sum_V1_xz = sum_V1_xz + Vxz; + sum_V1_yz = sum_V1_yz + Vyz; + sum_V1_yx = sum_V1_yx + Vyx; + sum_V1_zx = sum_V1_zx + Vzx; + sum_V1_zy = sum_V1_zy + Vzy; vcp_simd_load_add_store_masked(soa2_quadrupoles_V_x, j, Vx, lookupORforceMask, remainderM);//newton 3 vcp_simd_load_add_store_masked(soa2_quadrupoles_V_y, j, Vy, lookupORforceMask, remainderM);//newton 3 @@ -2706,9 +3156,15 @@ void VectorizedCellProcessor::_calculatePairs(CellDataSoA & soa1, CellDataSoA & hSum_Add_Store(soa1_dipoles_f_z + i_dipole_quadrupole_idx, sum_f1_z); // Add old virials and summed calculated virials for center 1 - hSum_Add_Store(soa1_dipoles_V_x + i_dipole_quadrupole_idx, sum_V1_x); - hSum_Add_Store(soa1_dipoles_V_y + i_dipole_quadrupole_idx, sum_V1_y); - hSum_Add_Store(soa1_dipoles_V_z + i_dipole_quadrupole_idx, sum_V1_z); + hSum_Add_Store(soa1_dipoles_V_xx + i_dipole_quadrupole_idx, sum_V1_xx); + hSum_Add_Store(soa1_dipoles_V_yy + i_dipole_quadrupole_idx, sum_V1_yy); + hSum_Add_Store(soa1_dipoles_V_zz + i_dipole_quadrupole_idx, sum_V1_zz); + hSum_Add_Store(soa1_dipoles_V_xy + i_dipole_quadrupole_idx, sum_V1_xy); + hSum_Add_Store(soa1_dipoles_V_xz + i_dipole_quadrupole_idx, sum_V1_xz); + hSum_Add_Store(soa1_dipoles_V_yz + i_dipole_quadrupole_idx, sum_V1_yz); + hSum_Add_Store(soa1_dipoles_V_yx + i_dipole_quadrupole_idx, sum_V1_yx); + hSum_Add_Store(soa1_dipoles_V_zx + i_dipole_quadrupole_idx, sum_V1_zx); + hSum_Add_Store(soa1_dipoles_V_zy + i_dipole_quadrupole_idx, sum_V1_zy); // Add old torques and summed calculated torques for center 1 hSum_Add_Store(soa1_dipoles_M_x + i_dipole_quadrupole_idx, sum_M1_x); diff --git a/src/particleContainer/adapter/VectorizedCellProcessor.h b/src/particleContainer/adapter/VectorizedCellProcessor.h index 2062d0fe58..68d0edd1c4 100644 --- a/src/particleContainer/adapter/VectorizedCellProcessor.h +++ b/src/particleContainer/adapter/VectorizedCellProcessor.h @@ -195,7 +195,9 @@ class VectorizedCellProcessor : public CellProcessor { const RealCalcVec& m2_r_x, const RealCalcVec& m2_r_y, const RealCalcVec& m2_r_z, const RealCalcVec& r2_x, const RealCalcVec& r2_y, const RealCalcVec& r2_z, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& sum_upot6lj, RealAccumVec& sum_virial, const MaskCalcVec& forceMask, const RealCalcVec& eps_24, const RealCalcVec& sig2, @@ -210,7 +212,9 @@ class VectorizedCellProcessor : public CellProcessor { const RealCalcVec& r2_x, const RealCalcVec& r2_y, const RealCalcVec& r2_z, const RealCalcVec& qjj, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, const MaskCalcVec& forceMask); @@ -224,7 +228,9 @@ class VectorizedCellProcessor : public CellProcessor { const RealCalcVec& e_x, const RealCalcVec& e_y, const RealCalcVec& e_z, const RealCalcVec& p, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& M_x, RealAccumVec& M_y, RealAccumVec& M_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, const MaskCalcVec& forceMask); @@ -240,7 +246,9 @@ class VectorizedCellProcessor : public CellProcessor { const RealCalcVec& ejj_x, const RealCalcVec& ejj_y, const RealCalcVec& ejj_z, const RealCalcVec& pjj, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& M1_x, RealAccumVec& M1_y, RealAccumVec& M1_z, RealAccumVec& M2_x, RealAccumVec& M2_y, RealAccumVec& M2_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, RealAccumVec& sum_myRF, @@ -257,7 +265,9 @@ class VectorizedCellProcessor : public CellProcessor { const RealCalcVec& ejj_x, const RealCalcVec& ejj_y, const RealCalcVec& ejj_z, const RealCalcVec& m, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& M_x, RealAccumVec& M_y, RealAccumVec& M_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, const MaskCalcVec& forceMask); @@ -273,7 +283,9 @@ class VectorizedCellProcessor : public CellProcessor { const RealCalcVec& ejj_x, const RealCalcVec& ejj_y, const RealCalcVec& ejj_z, const RealCalcVec& m, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& M1_x, RealAccumVec& M1_y, RealAccumVec& M1_z, RealAccumVec& M2_x, RealAccumVec& M2_y, RealAccumVec& M2_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, @@ -290,7 +302,9 @@ class VectorizedCellProcessor : public CellProcessor { const RealCalcVec& ejj_x, const RealCalcVec& ejj_y, const RealCalcVec& ejj_z, const RealCalcVec& mjj, RealCalcVec& f_x, RealCalcVec& f_y, RealCalcVec& f_z, - RealAccumVec& V_x, RealAccumVec& V_y, RealAccumVec& V_z, + RealAccumVec& V_xx, RealAccumVec& V_yy, RealAccumVec& V_zz, + RealAccumVec& V_xy, RealAccumVec& V_xz, RealAccumVec& V_yz, + RealAccumVec& V_yx, RealAccumVec& V_zx, RealAccumVec& V_zy, RealAccumVec& Mii_x, RealAccumVec& Mii_y, RealAccumVec& Mii_z, RealAccumVec& Mjj_x, RealAccumVec& Mjj_y, RealAccumVec& Mjj_z, RealAccumVec& sum_upotXpoles, RealAccumVec& sum_virial, diff --git a/src/particleContainer/tests/LinkedCellsTest.cpp b/src/particleContainer/tests/LinkedCellsTest.cpp index 3e69f78663..9e797f2572 100644 --- a/src/particleContainer/tests/LinkedCellsTest.cpp +++ b/src/particleContainer/tests/LinkedCellsTest.cpp @@ -627,6 +627,12 @@ void LinkedCellsTest::doForceComparisonTest(std::string inputFile, CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(0), j->Vi(0), fabs(delta * j->Vi(0))); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(1), j->Vi(1), fabs(delta * j->Vi(1))); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(2), j->Vi(2), fabs(delta * j->Vi(2))); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(3), j->Vi(3), fabs(delta * j->Vi(3))); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(4), j->Vi(4), fabs(delta * j->Vi(4))); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(5), j->Vi(5), fabs(delta * j->Vi(5))); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(6), j->Vi(6), fabs(delta * j->Vi(6))); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(7), j->Vi(7), fabs(delta * j->Vi(7))); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Virials differ", i->Vi(8), j->Vi(8), fabs(delta * j->Vi(8))); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Rotational moments differ", i->M(0), j->M(0), fabs(delta * i->M(0))); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Rotational moments differ", i->M(1), j->M(1), fabs(delta * i->M(1))); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Rotational moments differ", i->M(2), j->M(2), fabs(delta * i->M(2))); From 2301ed8fb52e907bad40802c7dcf5bf1f4dd57b9 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 1 Apr 2022 16:18:01 +0200 Subject: [PATCH 37/76] Add sampling of higher moments --- src/plugins/ExtendedProfileSampling.cpp | 248 ++++++++++++++++++++++-- src/plugins/ExtendedProfileSampling.h | 10 + 2 files changed, 241 insertions(+), 17 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 0c59f7ab15..c855537f4d 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -24,6 +24,9 @@ ExtendedProfileSampling::ExtendedProfileSampling() _stopSampling(1000000000ul), _singleComp(false), + // Higher moments + _sampleHigherMoms(false), + // Control: chemical potential _sampleChemPot(false), _lattice(true), @@ -75,6 +78,7 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 xmlconfig.getNodeValue("stop", _stopSampling); // Default: 1000000000 xmlconfig.getNodeValue("singlecomponent", _singleComp); // Default: false + xmlconfig.getNodeValue("highermoments", _sampleHigherMoms); // Default: false xmlconfig.getNodeValue("chemicalpotential/@enable", _sampleChemPot); // Default: false xmlconfig.getNodeValue("chemicalpotential/lattice", _lattice); // Default: true @@ -91,6 +95,7 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { global_log->info() << "[ExtendedProfileSampling] Start:WriteFreq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; global_log->info() << "[ExtendedProfileSampling] Binwidth: " << _binwidth << std::endl; if (_singleComp) { global_log->info() << "[ExtendedProfileSampling] All components treated as single one" << std::endl; } + if (_sampleHigherMoms) { global_log->info() << "[ExtendedProfileSampling] Sampling of higher moments enabled" << std::endl; } if (_sampleChemPot) { global_log->info() << "[ExtendedProfileSampling] Sampling of chemical potential enabled with a sampling frequency of " << _samplefrequency << std::endl; global_log->info() << "[ExtendedProfileSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; @@ -140,19 +145,70 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::array, 3> veloDrift_step_global; // Drift velocity per particle; global value as calculated with global values std::vector temperature_step_global (_lenVector, 0.0); // Required for sampling of chem. pot. + CommVar> hmDelta_step; + std::array>, 9> hmPressure_step; + std::array>, 9> hmR_step; + std::array>, 27> hmM_step; + + if (_sampleHigherMoms) { + + hmDelta_step.local.resize(_lenVector); + + hmDelta_step.global.resize(_lenVector); + + std::fill(hmDelta_step.local.begin(), hmDelta_step.local.end(), 0.0f); + + std::fill(hmDelta_step.global.begin(), hmDelta_step.global.end(), 0.0f); + + for (unsigned short d = 0; d < 9; d++) { + hmPressure_step.at(d).local.resize(_lenVector); + hmR_step.at(d).local.resize(_lenVector); + hmM_step.at(d).local.resize(_lenVector); + hmM_step.at(d+9).local.resize(_lenVector); + hmM_step.at(d+18).local.resize(_lenVector); + + hmPressure_step.at(d).global.resize(_lenVector); + hmR_step.at(d).global.resize(_lenVector); + hmM_step.at(d).global.resize(_lenVector); + hmM_step.at(d+9).global.resize(_lenVector); + hmM_step.at(d+18).global.resize(_lenVector); + + std::fill(hmPressure_step.at(d).local.begin(), hmPressure_step.at(d).local.end(), 0.0f); + std::fill(hmR_step.at(d).local.begin(), hmR_step.at(d).local.end(), 0.0f); + std::fill(hmM_step.at(d).local.begin(), hmM_step.at(d).local.end(), 0.0f); + std::fill(hmM_step.at(d).local.begin(), hmM_step.at(d).local.end(), 0.0f); + std::fill(hmM_step.at(d).local.begin(), hmM_step.at(d).local.end(), 0.0f); + + std::fill(hmPressure_step.at(d).global.begin(), hmPressure_step.at(d).global.end(), 0.0f); + std::fill(hmR_step.at(d).global.begin(), hmR_step.at(d).global.end(), 0.0f); + std::fill(hmM_step.at(d).global.begin(), hmM_step.at(d).global.end(), 0.0f); + std::fill(hmM_step.at(d).global.begin(), hmM_step.at(d).global.end(), 0.0f); + std::fill(hmM_step.at(d).global.begin(), hmM_step.at(d).global.end(), 0.0f); + } + + } else { + hmDelta_step.local.clear(); + hmDelta_step.global.clear(); + for (unsigned short d = 0; d < 9; d++) { + hmPressure_step.at(d).local.clear(); + hmR_step.at(d).local.clear(); + hmM_step.at(d).local.clear(); + hmM_step.at(d+9).local.clear(); + hmM_step.at(d+18).local.clear(); + hmPressure_step.at(d).global.clear(); + hmR_step.at(d).global.clear(); + hmM_step.at(d).global.clear(); + hmM_step.at(d+9).global.clear(); + hmM_step.at(d+18).global.clear(); + } + } + numMolecules_step.local.resize(_lenVector); ekin2_step.local.resize(_lenVector); ekin2Trans_step.local.resize(_lenVector); epot_step.local.resize(_lenVector); chemPot_step.local.resize(_lenVector); countNTest_step.local.resize(_lenVector); - - for (unsigned short d = 0; d < 3; d++) { - ekin2Vect_step.at(d).local.resize(_lenVector); - velocityVect_step.at(d).local.resize(_lenVector); - virialVect_step.at(d).local.resize(_lenVector); - energyfluxVect_step.at(d).local.resize(_lenVector); - } numMolecules_step.global.resize(_lenVector); ekin2_step.global.resize(_lenVector); @@ -162,6 +218,11 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, countNTest_step.global.resize(_lenVector); for (unsigned short d = 0; d < 3; d++) { + ekin2Vect_step.at(d).local.resize(_lenVector); + velocityVect_step.at(d).local.resize(_lenVector); + virialVect_step.at(d).local.resize(_lenVector); + energyfluxVect_step.at(d).local.resize(_lenVector); + ekin2Vect_step.at(d).global.resize(_lenVector); velocityVect_step.at(d).global.resize(_lenVector); virialVect_step.at(d).global.resize(_lenVector); @@ -176,13 +237,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(epot_step.local.begin(), epot_step.local.end(), 0.0f); std::fill(chemPot_step.local.begin(), chemPot_step.local.end(), 0.0f); std::fill(countNTest_step.local.begin(), countNTest_step.local.end(), 0ul); - - for (unsigned short d = 0; d < 3; d++) { - std::fill(ekin2Vect_step.at(d).local.begin(), ekin2Vect_step.at(d).local.end(), 0.0f); - std::fill(velocityVect_step.at(d).local.begin(), velocityVect_step.at(d).local.end(), 0.0f); - std::fill(virialVect_step.at(d).local.begin(), virialVect_step.at(d).local.end(), 0.0f); - std::fill(energyfluxVect_step.at(d).local.begin(), energyfluxVect_step.at(d).local.end(), 0.0f); - } std::fill(numMolecules_step.global.begin(), numMolecules_step.global.end(), 0ul); std::fill(ekin2_step.global.begin(), ekin2_step.global.end(), 0.0f); @@ -192,6 +246,11 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(countNTest_step.global.begin(), countNTest_step.global.end(), 0ul); for (unsigned short d = 0; d < 3; d++) { + std::fill(ekin2Vect_step.at(d).local.begin(), ekin2Vect_step.at(d).local.end(), 0.0f); + std::fill(velocityVect_step.at(d).local.begin(), velocityVect_step.at(d).local.end(), 0.0f); + std::fill(virialVect_step.at(d).local.begin(), virialVect_step.at(d).local.end(), 0.0f); + std::fill(energyfluxVect_step.at(d).local.begin(), energyfluxVect_step.at(d).local.end(), 0.0f); + std::fill(ekin2Vect_step.at(d).global.begin(), ekin2Vect_step.at(d).global.end(), 0.0f); std::fill(velocityVect_step.at(d).global.begin(), velocityVect_step.at(d).global.end(), 0.0f); std::fill(virialVect_step.at(d).global.begin(), virialVect_step.at(d).global.end(), 0.0f); @@ -246,6 +305,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double veloCorrX = pit->v(0) - veloDrift_step_global[0].at(index); const double veloCorrY = pit->v(1) - veloDrift_step_global[1].at(index); const double veloCorrZ = pit->v(2) - veloDrift_step_global[2].at(index); + const double veloCorrSqrt = veloCorrX*veloCorrX + veloCorrY*veloCorrY + veloCorrZ*veloCorrZ; // Squared velocity of particle without drift const double veloX = pit->v(0); const double veloY = pit->v(1); const double veloZ = pit->v(2); @@ -269,9 +329,25 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, virialVect_step[0].local.at(indexCID) += pit->Vi(0); virialVect_step[1].local.at(indexCID) += pit->Vi(1); virialVect_step[2].local.at(indexCID) += pit->Vi(2); + if (pit->getID() == 330) {cout << pit->Vi(0) << " " << pit->Vi(3) << " " << pit->Vi(4) << std::endl; + cout << pit->Vi(6) << " " << pit->Vi(1) << " " << pit->Vi(5) << std::endl; + cout << pit->Vi(7) << " " << pit->Vi(8) << " " << pit->Vi(2) << std::endl;} energyfluxVect_step[0].local.at(indexCID) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); + if (_sampleHigherMoms) { + const std::array velos = {veloCorrX, veloCorrY, veloCorrZ}; + hmDelta_step.local.at(indexCID) = veloCorrSqrt*veloCorrSqrt; + for (unsigned short i = 0; i < 3; i++) { + for (unsigned short j = 0; j < 3; j++) { + hmPressure_step[3*i+j].local.at(indexCID) = velos[i]*velos[j]; // Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + hmR_step[3*i+j].local.at(indexCID) = velos[i]*velos[j]*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + hmM_step[3*i+j].local.at(indexCID) = veloCorrX*velos[i]*velos[j]; + hmM_step[3*i+j+9].local.at(indexCID) = veloCorrY*velos[i]*velos[j]; + hmM_step[3*i+j+18].local.at(indexCID) = veloCorrZ*velos[i]*velos[j]; + } + } + } } } @@ -286,16 +362,15 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, for (unsigned long i = 0; i < _lenVector; i++) { const unsigned int cid = i/_numBinsGlobal; - unsigned int dof_rot {0}; unsigned int dof_total {0}; if (cid == 0) { for (unsigned long cj = 0; cj < numComps; cj++) { - dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); + const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); dof_total += (3 + dof_rot)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); } } else { const unsigned long numMols = numMolecules_step.global.at(i); - dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); + const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); dof_total = (3 + dof_rot)*numMols; } if (dof_total > 0ul) { @@ -424,6 +499,16 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, MPI_Reduce(energyfluxVect_step[2].local.data(), energyfluxVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(chemPot_step.local.data(), chemPot_step.global.data(), _numBinsGlobal, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(countNTest_step.local.data(), countNTest_step.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); + if (_sampleHigherMoms) { + MPI_Reduce(hmDelta_step.local.data(), hmDelta_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + for (unsigned short d = 0; d < 9; d++) { + MPI_Reduce(hmPressure_step[d].local.data(), hmPressure_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(hmR_step[d].local.data(), hmR_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(hmM_step[d].local.data(), hmM_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(hmM_step[d+9].local.data(), hmM_step[d+9].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(hmM_step[d+18].local.data(), hmM_step[d+18].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + } + } #else for (unsigned long i = 0; i < _lenVector; i++) { ekin2Trans_step.global.at(i) = ekin2Trans_step.local.at(i); @@ -439,6 +524,16 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, energyfluxVect_step[2].global.at(i) = energyfluxVect_step[2].local.at(i); chemPot_step.global.at(i) = chemPot_step.local.at(i); countNTest_step.global.at(i) = countNTest_step.local.at(i); + if (_sampleHigherMoms) { + hmDelta_step.global.at(i) = hmDelta_step.local.at(i); + for (unsigned short d = 0; d < 9; d++) { + hmPressure_step[d].global.at(i) = hmPressure_step[d].local.at(i); + hmR_step[d].global.at(i) = hmR_step[d].local.at(i); + hmM_step[d].global.at(i) = hmM_step[d].local.at(i); + hmM_step[d+9].global.at(i) = hmM_step[d+9].local.at(i); + hmM_step[d+18].global.at(i) = hmM_step[d+18].local.at(i); + } + } } #endif @@ -490,6 +585,17 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / numMols; _countSamples.at(i)++; + + if (_sampleHigherMoms) { + _hmDelta_accum.at(i) += hmDelta_step.global.at(i) / numMols; + for (unsigned short d = 0; d < 9; d++) { + _hmPressure_accum[d].at(i) += hmPressure_step[d].global.at(i) / numMols; + _hmR_accum[d].at(i) += hmR_step[d].global.at(i) / numMols; + _hmM_accum[d].at(i) += hmM_step[d].global.at(i) / numMols; + _hmM_accum[d+9].at(i) += hmM_step[d+9].global.at(i) / numMols; + _hmM_accum[d+18].at(i) += hmM_step[d+18].global.at(i) / numMols; + } + } } } } @@ -500,6 +606,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, if (domainDecomp->getRank() == 0) { unsigned long numOutputs = (_singleComp) ? 1ul : (_simulation.getDomain()->getNumberOfComponents()+1); + { // Write output file std::stringstream ss; ss << std::setw(9) << std::setfill('0') << simstep; @@ -609,6 +716,80 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs << std::endl; } ofs.close(); + } + + // Write output for higher moments + if (_sampleHigherMoms) { + std::map dirs { {"x", 0}, {"y", 1}, {"z", 2}, }; + std::stringstream ss; + ss << std::setw(9) << std::setfill('0') << simstep; + const std::string fname = "ExtendedProfileSampling_HigherMoments_TS"+ss.str()+".dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::out); + ofs << setw(24) << "pos"; // Bin position + for (unsigned long cid = 0; cid < numOutputs; cid++) { + ofs << setw(22) << "delta["<::digits10) << (idx+0.5)*_binwidth; + for (unsigned long cid = 0; cid < numOutputs; cid++) { + unsigned long i = idx + cid*_numBinsGlobal; + double delta {0.0}; + std::array p = {0.0}; + std::array R = {0.0}; + std::array m = {0.0}; + if (_countSamples.at(i) > 0ul) { + delta = _hmDelta_accum.at(i)/_countSamples.at(i); + for (unsigned short d = 0; d < 9; d++) { + p[d] = _hmPressure_accum[d].at(i); + R[d] = _hmR_accum[d].at(i); + m[d] = _hmM_accum[d].at(i); + m[d+9] = _hmM_accum[d+9].at(i); + m[d+18] = _hmM_accum[d+18].at(i); + } + } + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << delta; + for (auto& [k_i, v_i]: dirs) { + for (auto& [k_j, v_j]: dirs) { + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p[3*v_i+v_j]; + } + } + for (auto& [k_i, v_i]: dirs) { + for (auto& [k_j, v_j]: dirs) { + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p[3*v_i+v_j]; + } + } + for (auto& [k_i, v_i]: dirs) { + for (auto& [k_j, v_j]: dirs) { + for (auto& [k_k, v_k]: dirs) { + ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p[9*v_i+3*v_j+v_k]; + } + } + } + } + ofs << std::endl; + } + ofs.close(); + } } // Reset vectors to zero @@ -618,6 +799,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // Resize vectors void ExtendedProfileSampling::resizeVectors() { + _numMolecules_accum.resize(_lenVector); _density_accum.resize(_lenVector); _temperature_accum.resize(_lenVector); @@ -635,6 +817,27 @@ void ExtendedProfileSampling::resizeVectors() { } _countSamples.resize(_lenVector); + + if (_sampleHigherMoms) { + _hmDelta_accum.resize(_lenVector); + for (unsigned short d = 0; d < 9; d++) { + _hmPressure_accum.at(d).resize(_lenVector); + _hmR_accum.at(d).resize(_lenVector); + _hmM_accum.at(d).resize(_lenVector); + _hmM_accum.at(d+9).resize(_lenVector); + _hmM_accum.at(d+18).resize(_lenVector); + } + } else { + _hmDelta_accum.clear(); + for (unsigned short d = 0; d < 9; d++) { + _hmPressure_accum.at(d).clear(); + _hmR_accum.at(d).clear(); + _hmM_accum.at(d).clear(); + _hmM_accum.at(d+9).clear(); + _hmM_accum.at(d+18).clear(); + } + } + } // Fill vectors with zeros @@ -656,4 +859,15 @@ void ExtendedProfileSampling::resetVectors() { } std::fill(_countSamples.begin(), _countSamples.end(), 0ul); + + if (_sampleHigherMoms) { + std::fill(_hmDelta_accum.begin(), _hmDelta_accum.end(), 0.0f); + for (unsigned short d = 0; d < 9; d++) { + std::fill(_hmPressure_accum.at(d).begin(), _hmPressure_accum.at(d).end(), 0.0f); + std::fill(_hmR_accum.at(d).begin(), _hmR_accum.at(d).end(), 0.0f); + std::fill(_hmM_accum.at(d).begin(), _hmM_accum.at(d).end(), 0.0f); + std::fill(_hmM_accum.at(d+9).begin(), _hmM_accum.at(d+9).end(), 0.0f); + std::fill(_hmM_accum.at(d+18).begin(), _hmM_accum.at(d+18).end(), 0.0f); + } + } } diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index e55deb9621..84f2ffa828 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -25,6 +25,7 @@ INT INT BOOL + BOOL BOOL FLOAT @@ -43,6 +44,9 @@ class ExtendedProfileSampling : public PluginBase{ unsigned long _stopSampling; bool _singleComp; + // Higher moments + bool _sampleHigherMoms; + // Control: chemical potential bool _sampleChemPot; bool _lattice; @@ -73,6 +77,12 @@ class ExtendedProfileSampling : public PluginBase{ std::array, 3> _pressureVect_accum; // Pressure in each direction std::array, 3> _energyfluxVect_accum; // Energy flux (heat flux plus enthalpy flux) in each direction + // Higher moments + std::vector _hmDelta_accum; // Higher moment: Delta + std::array, 9> _hmPressure_accum; // Higher moment: Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + std::array, 9> _hmR_accum; // Higher moment: R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + std::array, 27> _hmM_accum; // Higher moment: M; cicxcx, cicxcy, cicxcz, cicycx, cicycy, cicycz, ciczcx, ciczcy, ciczcz mit i = x,y,z + std::vector _countSamples; // Number of samples; can vary from bin to bin as some bins could be empty void resizeVectors(); // Change size of accumulation vectors From 7116946ed9f4961328aa6d1178b7545b16aa3634 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 1 Apr 2022 16:18:58 +0200 Subject: [PATCH 38/76] Add possibility to specify direction of DriftCtrl --- src/plugins/NEMD/DriftCtrl.cpp | 30 ++++++++++++++++++++++++++---- src/plugins/NEMD/DriftCtrl.h | 3 +++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/plugins/NEMD/DriftCtrl.cpp b/src/plugins/NEMD/DriftCtrl.cpp index 9648b72c59..399bfc2738 100644 --- a/src/plugins/NEMD/DriftCtrl.cpp +++ b/src/plugins/NEMD/DriftCtrl.cpp @@ -116,12 +116,34 @@ void DriftCtrl::readXML(XMLfileUnits& xmlconfig) _target.drift.at(1) = 0.; _target.drift.at(2) = 0.; _target.cid = 1; + std::string strDirs = "xyz"; + _directions.clear(); xmlconfig.getNodeValue("target/cid", _target.cid); xmlconfig.getNodeValue("target/drift/vx", _target.drift.at(0)); xmlconfig.getNodeValue("target/drift/vy", _target.drift.at(1)); xmlconfig.getNodeValue("target/drift/vz", _target.drift.at(2)); + xmlconfig.getNodeValue("target/directions", strDirs); + + std::vector vectDirs(strDirs.begin(), strDirs.end()); + for (char &c: vectDirs) { + switch ( c ) { + case 'x': + _directions.push_back(0); + break; + case 'y': + _directions.push_back(1); + break; + case 'z': + _directions.push_back(2); + break; + default: + global_log->warning() << "[DriftCtrl] Unknown direction: " << c << endl; + } + } + + global_log->info() << "[DriftCtrl] Directions to be controlled: " << strDirs << endl; global_log->info() << "[DriftCtrl] Target drift vx,vy,vz=" - << _target.drift.at(0) << "," << _target.drift.at(1) << "," << _target.drift.at(2) << ", cid=" << _target.cid<< endl; + << _target.drift.at(0) << "," << _target.drift.at(1) << "," << _target.drift.at(2) << ", cid=" << _target.cid << endl; } void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) @@ -226,9 +248,9 @@ void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompB } uint32_t yPosID = floor( (yPos-_range.yl) / _range.subdivision.binWidth.actual); - it->setv(0, it->v(0) + _sampling.at(cid_ub).velo_corr.at(0).at(yPosID) ); - it->setv(1, it->v(1) + _sampling.at(cid_ub).velo_corr.at(1).at(yPosID) ); - it->setv(2, it->v(2) + _sampling.at(cid_ub).velo_corr.at(2).at(yPosID) ); + for (const auto d : _directions) { + it->setv(d, it->v(d) + _sampling.at(cid_ub).velo_corr.at(d).at(yPosID) ); + } } } diff --git a/src/plugins/NEMD/DriftCtrl.h b/src/plugins/NEMD/DriftCtrl.h index 5fdf4e4c02..6fbb3a4518 100644 --- a/src/plugins/NEMD/DriftCtrl.h +++ b/src/plugins/NEMD/DriftCtrl.h @@ -46,6 +46,7 @@ class DriftCtrl : public PluginBase INT DOUBLE DOUBLE DOUBLE + xyz DOUBLE DOUBLE @@ -90,6 +91,8 @@ class DriftCtrl : public PluginBase } _target; std::vector _sampling; + + std::vector _directions; }; #endif /*DRIFTCTRL_H_*/ From 8bbb9b2629fe8d5e7243704d619ba4af25d36511 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 1 Apr 2022 16:19:51 +0200 Subject: [PATCH 39/76] Update version file if commit hash changed --- makefile/Makefile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/makefile/Makefile b/makefile/Makefile index 90bce8ca0d..ad0352611d 100644 --- a/makefile/Makefile +++ b/makefile/Makefile @@ -175,9 +175,13 @@ ifneq ("$(wildcard $(SRCDIR)/../.git)","") GIT_VERSION_BRANCH = $(shell git rev-parse --abbrev-ref HEAD | sed -e "s/:/-/") GIT_VERSION_HASH = $(shell git rev-parse --short HEAD | sed -e "s/:/-/") GIT_VERSION_IS_DIRTY = $(shell git diff --quiet || echo "_dirty") - $(shell sed "s=@MarDyn_VERSION_BRANCH@=$(GIT_VERSION_BRANCH)=g" MarDyn_version.h.in > MarDyn_version.h) - $(shell sed -i "s=@MarDyn_VERSION_HASH@=$(GIT_VERSION_HASH)=g" MarDyn_version.h) - $(shell sed -i "s=@MarDyn_VERSION_IS_DIRTY@=$(GIT_VERSION_IS_DIRTY)=g" MarDyn_version.h) + GIT_VERSION_HASH_CURRENT = $(shell grep "MARDYN_VERSION_HASH =" MarDyn_version.h 2> /dev/null | awk -F '"' '{print $$2}' | tr -d '_') + ifneq ($(GIT_VERSION_HASH),$(GIT_VERSION_HASH_CURRENT)) + $(shell rm -f MarDyn.o) + $(shell sed "s=@MarDyn_VERSION_BRANCH@=$(GIT_VERSION_BRANCH)=g" MarDyn_version.h.in > MarDyn_version.h) + $(shell sed -i "s=@MarDyn_VERSION_HASH@=$(GIT_VERSION_HASH)=g" MarDyn_version.h) + $(shell sed -i "s=@MarDyn_VERSION_IS_DIRTY@=$(GIT_VERSION_IS_DIRTY)=g" MarDyn_version.h) + endif ifneq ($(GIT_VERSION_HASH),) BINARY = $(BINARY_BASENAME)_$(GIT_VERSION_HASH).$(PARTYPE)_$(TARGET)_$(VECTORIZE_CODE) else From 9504d41c73f7bedb1f4bb875b40d4713fa42ed04 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 1 Apr 2022 16:50:44 +0200 Subject: [PATCH 40/76] Fix in full virial calculation with vectorization --- src/molecules/FullMolecule.cpp | 26 +++++++++++++------ src/parallel/ParticleForceData.cpp | 2 +- .../adapter/VectorizedCellProcessor.cpp | 5 +++- .../adapter/VectorizedCellProcessor.h | 6 ++++- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/molecules/FullMolecule.cpp b/src/molecules/FullMolecule.cpp index 64d5f3a48a..bb5be97384 100644 --- a/src/molecules/FullMolecule.cpp +++ b/src/molecules/FullMolecule.cpp @@ -519,6 +519,8 @@ void FullMolecule::clearFM() { _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::FORCE, ConcSites::SiteType::LJC, index_in_soa); _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIAL, ConcSites::SiteType::LJC, index_in_soa); + _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::LJC, index_in_soa); + _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::LJC, index_in_soa); } ns = numCharges(); for (unsigned i = 0; i < ns; ++i) { @@ -526,6 +528,8 @@ void FullMolecule::clearFM() { _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::FORCE, ConcSites::SiteType::CHARGE, index_in_soa); _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIAL, ConcSites::SiteType::CHARGE, index_in_soa); + _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::LJC, index_in_soa); + _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::LJC, index_in_soa); } ns = numDipoles(); for (unsigned i = 0; i < ns; ++i) { @@ -533,6 +537,8 @@ void FullMolecule::clearFM() { _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::FORCE, ConcSites::SiteType::DIPOLE, index_in_soa); _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIAL, ConcSites::SiteType::DIPOLE, index_in_soa); + _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::LJC, index_in_soa); + _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::LJC, index_in_soa); _soa->_dipoles_M.x(index_in_soa) = 0.0; _soa->_dipoles_M.y(index_in_soa) = 0.0; @@ -544,6 +550,8 @@ void FullMolecule::clearFM() { _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::FORCE, ConcSites::SiteType::QUADRUPOLE, index_in_soa); _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIAL, ConcSites::SiteType::QUADRUPOLE, index_in_soa); + _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::LJC, index_in_soa); + _soa->setTripletAccum(clearance, CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::LJC, index_in_soa); _soa->_quadrupoles_M.x(index_in_soa) = 0.0; _soa->_quadrupoles_M.y(index_in_soa) = 0.0; @@ -587,6 +595,8 @@ void FullMolecule::calcFM() { double temp_Vi[9] = { 0., 0., 0., 0., 0., 0., 0., 0., 0. }; std::array interim; + std::array interimND1; + std::array interimND2; ns = numLJcenters(); for (unsigned i = 0; i < ns; ++i) { @@ -601,17 +611,17 @@ void FullMolecule::calcFM() { temp_Vi[1] += interim[1]; temp_Vi[2] += interim[2]; - interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::LJC, index_in_soa); + interimND1 = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND1, ConcSites::SiteType::LJC, index_in_soa); - temp_Vi[3] += interim[0]; - temp_Vi[4] += interim[1]; - temp_Vi[5] += interim[2]; + temp_Vi[3] += interimND1[0]; + temp_Vi[4] += interimND1[1]; + temp_Vi[5] += interimND1[2]; - interim = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::LJC, index_in_soa); + interimND2 = _soa->getTripletAccum(CellDataSoA::QuantityType::VIRIALND2, ConcSites::SiteType::LJC, index_in_soa); - temp_Vi[6] += interim[0]; - temp_Vi[7] += interim[1]; - temp_Vi[8] += interim[2]; + temp_Vi[6] += interimND2[0]; + temp_Vi[7] += interimND2[1]; + temp_Vi[8] += interimND2[2]; } ns = numCharges(); for (unsigned i = 0; i < ns; ++i) { diff --git a/src/parallel/ParticleForceData.cpp b/src/parallel/ParticleForceData.cpp index 6d8ac07141..252be997fb 100644 --- a/src/parallel/ParticleForceData.cpp +++ b/src/parallel/ParticleForceData.cpp @@ -8,7 +8,7 @@ void ParticleForceData::getMPIType(MPI_Datatype &sendPartType) { - int blocklengths[] = { 1, 12 }; // 1 unsLong value (id), 12 double values (3r, 3F, 3M, 3Vi) + int blocklengths[] = { 1, 18 }; // 1 unsLong value (id), 12 double values (3r, 3F, 3M, 9Vi) MPI_Datatype types[] = { MPI_UNSIGNED_LONG, MPI_DOUBLE }; MPI_Aint displacements[2]; diff --git a/src/particleContainer/adapter/VectorizedCellProcessor.cpp b/src/particleContainer/adapter/VectorizedCellProcessor.cpp index 3cf46f4b66..60f9c5af4f 100644 --- a/src/particleContainer/adapter/VectorizedCellProcessor.cpp +++ b/src/particleContainer/adapter/VectorizedCellProcessor.cpp @@ -134,11 +134,14 @@ void VectorizedCellProcessor::endTraversal() { const int tid = mardyn_get_thread_num(); // reduce vectors and clear local variable - vcp_real_accum thread_upot = 0.0, thread_upotXpoles = 0.0, thread_virial = 0.0, thread_myRF = 0.0; + vcp_real_accum thread_upot = 0.0, thread_upotXpoles = 0.0; + vcp_real_accum thread_virial = 0.0, thread_virialND1 = 0.0, thread_virialND2 = 0.0, thread_myRF = 0.0; load_hSum_Store_Clear(&thread_upot, _threadData[tid]->_upot6ljV); load_hSum_Store_Clear(&thread_upotXpoles, _threadData[tid]->_upotXpolesV); load_hSum_Store_Clear(&thread_virial, _threadData[tid]->_virialV); + load_hSum_Store_Clear(&thread_virialND1, _threadData[tid]->_virialND1V); + load_hSum_Store_Clear(&thread_virialND2, _threadData[tid]->_virialND2V); load_hSum_Store_Clear(&thread_myRF, _threadData[tid]->_myRFV); // add to global sum diff --git a/src/particleContainer/adapter/VectorizedCellProcessor.h b/src/particleContainer/adapter/VectorizedCellProcessor.h index 68d0edd1c4..c6015a7d07 100644 --- a/src/particleContainer/adapter/VectorizedCellProcessor.h +++ b/src/particleContainer/adapter/VectorizedCellProcessor.h @@ -143,12 +143,16 @@ class VectorizedCellProcessor : public CellProcessor { _upot6ljV.resize(_numVectorElements); _upotXpolesV.resize(_numVectorElements); _virialV.resize(_numVectorElements); + _virialND1V.resize(_numVectorElements); //The upper right minor diagonal non-diagonal elements of the virial tensor: rxfy, rxfz, ryfz. + _virialND2V.resize(_numVectorElements); //The lower left minor diagonal non-diagonal elements of the virial tensor: ryfx, rzfx, rzfy. _myRFV.resize(_numVectorElements); for (size_t j = 0; j < _numVectorElements; ++j) { _upot6ljV[j] = 0.0; _upotXpolesV[j] = 0.0; _virialV[j] = 0.0; + _virialND1V[j] = 0.0; + _virialND2V[j] = 0.0; _myRFV[j] = 0.0; } } @@ -180,7 +184,7 @@ class VectorizedCellProcessor : public CellProcessor { */ vcp_lookupOrMask_single* _quadrupoles_dist_lookup; - AlignedArray _upot6ljV, _upotXpolesV, _virialV, _myRFV; + AlignedArray _upot6ljV, _upotXpolesV, _virialV, _virialND1V, _virialND2V, _myRFV; }; std::vector _threadData; From bf0efa01ebe749aa40d5d254f03e03e31b006992 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 1 Apr 2022 16:51:03 +0200 Subject: [PATCH 41/76] Remove debug output --- src/plugins/ExtendedProfileSampling.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index c855537f4d..815edb4176 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -329,9 +329,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, virialVect_step[0].local.at(indexCID) += pit->Vi(0); virialVect_step[1].local.at(indexCID) += pit->Vi(1); virialVect_step[2].local.at(indexCID) += pit->Vi(2); - if (pit->getID() == 330) {cout << pit->Vi(0) << " " << pit->Vi(3) << " " << pit->Vi(4) << std::endl; - cout << pit->Vi(6) << " " << pit->Vi(1) << " " << pit->Vi(5) << std::endl; - cout << pit->Vi(7) << " " << pit->Vi(8) << " " << pit->Vi(2) << std::endl;} energyfluxVect_step[0].local.at(indexCID) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); From 34cb6ce121aa3cdcc61bf0cfdab933eb7d04d727 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 5 Apr 2022 17:15:43 +0200 Subject: [PATCH 42/76] Fixes for extended virial calculation --- src/molecules/AutoPasSimpleMolecule.h | 14 +++++++++++++- src/parallel/CommunicationBuffer.cpp | 3 ++- src/plugins/ExtendedProfileSampling.cpp | 8 -------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/molecules/AutoPasSimpleMolecule.h b/src/molecules/AutoPasSimpleMolecule.h index ab4cb31415..72dc125d6e 100644 --- a/src/molecules/AutoPasSimpleMolecule.h +++ b/src/molecules/AutoPasSimpleMolecule.h @@ -138,6 +138,9 @@ class AutoPasSimpleMolecule final : public MoleculeInterface, public autopas::Pa double Vi(unsigned short d) const override { return 0.; } + double UpotConstCorr() const override { return 0.; } + double ViConstCorr() const override { return 0.; } + void setD(unsigned short d, double D) override {} inline void move(int d, double dr) override { setr(d, r(d) + dr); } @@ -149,6 +152,8 @@ class AutoPasSimpleMolecule final : public MoleculeInterface, public autopas::Pa double U_rot_2() override { return 0.; } + double U_pot() override { return 0.; } + void updateMassInertia() override {} void setupSoACache(CellDataSoABase* const s, unsigned iLJ, unsigned iC, unsigned iD, unsigned iQ) override {} @@ -233,7 +238,12 @@ class AutoPasSimpleMolecule final : public MoleculeInterface, public autopas::Pa void setM(double M[3]) override {} - void setVi(double Vi[3]) override {} + void setVi(double Vi[9]) override {} + + void setU(const double upot) override {} + + void setUConstCorr(const double a) override {} + void setViConstCorr(const double a) override {} void Fadd(const double F[]) override { for (unsigned short i = 0; i < 3; i++) _f[i] += F[i]; @@ -253,6 +263,8 @@ class AutoPasSimpleMolecule final : public MoleculeInterface, public autopas::Pa addV(addV_arr); } + void Uadd(const double upot) override {} + void Fljcenteradd(unsigned int i, double a[]) override { vadd(a[0], a[1], a[2]); } void Fljcentersub(unsigned int i, double a[]) override { vsub(a[0], a[1], a[2]); } diff --git a/src/parallel/CommunicationBuffer.cpp b/src/parallel/CommunicationBuffer.cpp index b4b8cb7278..5d31ff032a 100644 --- a/src/parallel/CommunicationBuffer.cpp +++ b/src/parallel/CommunicationBuffer.cpp @@ -31,7 +31,8 @@ size_t CommunicationBuffer::_numBytesHalo = 7 * sizeof(double) + sizeof(int) + sizeof(unsigned long) #endif ; -size_t CommunicationBuffer::_numBytesForces = sizeof(unsigned long) + 12 * sizeof(double); +// id (1), position (3), force (3), momentum (3), virial (9) +size_t CommunicationBuffer::_numBytesForces = sizeof(unsigned long) + 18 * sizeof(double); #endif diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 815edb4176..d7e022b91e 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -448,9 +448,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const float domainShare = (regionSize[0]*regionSize[1]*regionSize[2])/(_globalBoxLength[0]*_globalBoxLength[1]*_globalBoxLength[2]); const unsigned long nTest = static_cast(domainShare*nTestGlobal); - #if defined(_OPENMP) - #pragma omp parallel - #endif for (unsigned long i = 0; i < nTest; i++) { const double rX = regionLowCorner[0] + rnd->rnd()*regionSize[0]; const double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; @@ -463,10 +460,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); if (std::isfinite(chemPot)) { - #if defined(_OPENMP) - #pragma omp atomic - #endif - { chemPot_step.local.at(index) += chemPot; countNTest_step.local.at(index)++; #ifndef NDEBUG @@ -474,7 +467,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; #endif - } } } } From 04dc4a574133f3ee45e3605cd13556ab8cc4b6ac Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 6 Apr 2022 18:43:59 +0200 Subject: [PATCH 43/76] Minor fixes in ExtendedSampling --- src/plugins/ExtendedProfileSampling.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index d7e022b91e..a709f90b37 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -569,9 +569,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _pressureVect_accum[0].at(i) += rho * ( ViX/numMols + Tx ); _pressureVect_accum[1].at(i) += rho * ( ViY/numMols + Ty ); _pressureVect_accum[2].at(i) += rho * ( ViZ/numMols + Tz ); - _energyfluxVect_accum[0].at(i) += energyfluxVect_step[0].global.at(i) / numMols; - _energyfluxVect_accum[1].at(i) += energyfluxVect_step[1].global.at(i) / numMols; - _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / numMols; + _energyfluxVect_accum[0].at(i) += energyfluxVect_step[0].global.at(i) / _slabVolume; + _energyfluxVect_accum[1].at(i) += energyfluxVect_step[1].global.at(i) / _slabVolume; + _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / _slabVolume; _countSamples.at(i)++; @@ -720,7 +720,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs << setw(22) << "delta["< Date: Tue, 12 Apr 2022 12:39:09 +0200 Subject: [PATCH 44/76] Extension and fix of sampling of higher moments --- src/plugins/ExtendedProfileSampling.cpp | 232 ++++++++++++++++-------- src/plugins/ExtendedProfileSampling.h | 38 ++-- 2 files changed, 175 insertions(+), 95 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index a709f90b37..a4202a0679 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -10,32 +10,13 @@ #include "particleContainer/ParticleContainer.h" #include "particleContainer/adapter/ParticlePairs2PotForceAdapter.h" #include "utils/Random.h" +#include "utils/FileUtils.h" #include "Simulation.h" #include -ExtendedProfileSampling::ExtendedProfileSampling() - : - // Control: general - _binwidth(1.0f), - _startSampling(0ul), - _writeFrequency(10000ul), - _stopSampling(1000000000ul), - _singleComp(false), - - // Higher moments - _sampleHigherMoms(false), - - // Control: chemical potential - _sampleChemPot(false), - _lattice(true), - _factorNumTest(4.0f), - _samplefrequency(50ul) -{} - -ExtendedProfileSampling::~ExtendedProfileSampling() { -} +ExtendedProfileSampling::ExtendedProfileSampling() {} void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) { @@ -51,7 +32,7 @@ void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, D _slabVolume = _globalBoxLength[0]*_globalBoxLength[2]*_binwidth; if (_slabVolume < 1e-12) { - global_log->error() << "[ExtendedProfileSampling] Slab volume too small!" << std::endl; + global_log->error() << "[ExtendedProfileSampling] Slab volume too small (<1e-12)!" << std::endl; Simulation::exit(-1); } @@ -61,9 +42,8 @@ void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, D resizeVectors(); resetVectors(); - // ??? TODO: CAN CELL PROCESSOR CHANGE DURING SIMULATION??? _cellProcessor = _simulation.getCellProcessor(); - // ??? TODO: CAN PP HANDLER CHANGE DURING SIMULATION??? + // ??? smart pointer _particlePairsHandler = new ParticlePairs2PotForceAdapter(*domain); // MolID is maximum possible number minus rank to prevent duplicate IDs // Always insert molecule of first component @@ -73,17 +53,17 @@ void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, D void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { - xmlconfig.getNodeValue("binwidth", _binwidth); // Default: 1.0 - xmlconfig.getNodeValue("start", _startSampling); // Default: 0 - xmlconfig.getNodeValue("writefrequency", _writeFrequency); // Default: 10000 - xmlconfig.getNodeValue("stop", _stopSampling); // Default: 1000000000 - xmlconfig.getNodeValue("singlecomponent", _singleComp); // Default: false - xmlconfig.getNodeValue("highermoments", _sampleHigherMoms); // Default: false + xmlconfig.getNodeValue("binwidth", _binwidth); + xmlconfig.getNodeValue("start", _startSampling); + xmlconfig.getNodeValue("writefrequency", _writeFrequency); + xmlconfig.getNodeValue("stop", _stopSampling); + xmlconfig.getNodeValue("singlecomponent", _singleComp); + xmlconfig.getNodeValue("highermoments", _sampleHigherMoms); - xmlconfig.getNodeValue("chemicalpotential/@enable", _sampleChemPot); // Default: false - xmlconfig.getNodeValue("chemicalpotential/lattice", _lattice); // Default: true - xmlconfig.getNodeValue("chemicalpotential/factorNumTest", _factorNumTest); // Default: 4.0 - xmlconfig.getNodeValue("chemicalpotential/samplefrequency", _samplefrequency); // Default: 50 + xmlconfig.getNodeValue("chemicalpotential/@enable", _sampleChemPot); + xmlconfig.getNodeValue("chemicalpotential/lattice", _lattice); + xmlconfig.getNodeValue("chemicalpotential/factorNumTest", _factorNumTest); + xmlconfig.getNodeValue("chemicalpotential/samplefrequency", _samplefrequency); string insMethod; if (_lattice) { @@ -106,7 +86,6 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { } } -// Needs to be called when halo cells are still existing (for sampling of chemical potential) void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) { // Sampling starts after _startSampling and is conducted up to _stopSampling @@ -115,14 +94,14 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } // Do not write or sample data directly after (re)start in the first step - if ( simstep == global_simulation->getNumInitTimesteps() ) { + if ( simstep == global_simulation->getNumInitTimesteps() ) { return; } // Variables per step - std::array regionLowCorner; - std::array regionHighCorner; - std::array regionSize; + std::array regionLowCorner {}; + std::array regionHighCorner {}; + std::array regionSize {}; for (unsigned short d = 0; d < 3; d++) { regionLowCorner[d] = particleContainer->getBoundingBoxMin(d); regionHighCorner[d] = particleContainer->getBoundingBoxMax(d); @@ -146,6 +125,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::vector temperature_step_global (_lenVector, 0.0); // Required for sampling of chem. pot. CommVar> hmDelta_step; + std::array>, 3> hmHeatflux_step; std::array>, 9> hmPressure_step; std::array>, 9> hmR_step; std::array>, 27> hmM_step; @@ -160,6 +140,14 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(hmDelta_step.global.begin(), hmDelta_step.global.end(), 0.0f); + for (unsigned short d = 0; d < 3; d++) { + hmHeatflux_step.at(d).local.resize(_lenVector); + hmHeatflux_step.at(d).global.resize(_lenVector); + + std::fill(hmHeatflux_step.at(d).local.begin(), hmHeatflux_step.at(d).local.end(), 0.0f); + std::fill(hmHeatflux_step.at(d).global.begin(), hmHeatflux_step.at(d).global.end(), 0.0f); + } + for (unsigned short d = 0; d < 9; d++) { hmPressure_step.at(d).local.resize(_lenVector); hmR_step.at(d).local.resize(_lenVector); @@ -189,6 +177,10 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } else { hmDelta_step.local.clear(); hmDelta_step.global.clear(); + for (unsigned short d = 0; d < 3; d++) { + hmHeatflux_step.at(d).local.clear(); + hmHeatflux_step.at(d).global.clear(); + } for (unsigned short d = 0; d < 9; d++) { hmPressure_step.at(d).local.clear(); hmR_step.at(d).local.clear(); @@ -277,17 +269,17 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } #ifdef ENABLE_MPI - MPI_Allreduce(numMolecules_step.local.data(), numMolecules_step.global.data(), _lenVector, MPI_UNSIGNED_LONG, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(numMolecules_step.local.data(), numMolecules_step.global.data(), _lenVector, MPI_UNSIGNED_LONG, MPI_SUM, MPI_COMM_WORLD); MPI_Allreduce(velocityVect_step[0].local.data(), velocityVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); MPI_Allreduce(velocityVect_step[1].local.data(), velocityVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); MPI_Allreduce(velocityVect_step[2].local.data(), velocityVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); #else - for (unsigned long i = 0; i < _lenVector; i++) { - numMolecules_step.global.at(i) = numMolecules_step.local.at(i); + for (unsigned long i = 0; i < _lenVector; i++) { + numMolecules_step.global.at(i) = numMolecules_step.local.at(i); velocityVect_step[0].global.at(i) = velocityVect_step[0].local.at(i); velocityVect_step[1].global.at(i) = velocityVect_step[1].local.at(i); velocityVect_step[2].global.at(i) = velocityVect_step[2].local.at(i); - } + } #endif for (unsigned long i = 0; i < _lenVector; i++) { @@ -329,21 +321,74 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, virialVect_step[0].local.at(indexCID) += pit->Vi(0); virialVect_step[1].local.at(indexCID) += pit->Vi(1); virialVect_step[2].local.at(indexCID) += pit->Vi(2); + // if (pit->getID() == 330) {cout << "Upot = " << pit->U_pot() << endl; + // cout << pit->Vi(0) << " " << pit->Vi(3) << " " << pit->Vi(4) << std::endl; + // cout << pit->Vi(6) << " " << pit->Vi(1) << " " << pit->Vi(5) << std::endl; + // cout << pit->Vi(7) << " " << pit->Vi(8) << " " << pit->Vi(2) << std::endl; + // } energyfluxVect_step[0].local.at(indexCID) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); if (_sampleHigherMoms) { const std::array velos = {veloCorrX, veloCorrY, veloCorrZ}; hmDelta_step.local.at(indexCID) = veloCorrSqrt*veloCorrSqrt; + for (unsigned short i = 0; i < 3; i++) { + hmHeatflux_step[i].local.at(indexCID) = 0.5*veloCorrSqrt*velos[i]; + for (unsigned short j = 0; j < 3; j++) { + if (i == j) { // Trace elements + hmPressure_step[3*i+j].local.at(indexCID) = velos[i]*velos[j]; // Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + hmR_step[3*i+j].local.at(indexCID) = velos[i]*velos[j]*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + } else { + hmPressure_step[3*i+j].local.at(indexCID) = velos[i]*velos[j] - (1./3.)*veloCorrSqrt; + hmR_step[3*i+j].local.at(indexCID) = (velos[i]*velos[j] - (1./3.)*veloCorrSqrt)*veloCorrSqrt; + } + } + } + + double m[3][3][3] = {0.0}; for (unsigned short i = 0; i < 3; i++) { for (unsigned short j = 0; j < 3; j++) { - hmPressure_step[3*i+j].local.at(indexCID) = velos[i]*velos[j]; // Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - hmR_step[3*i+j].local.at(indexCID) = velos[i]*velos[j]*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - hmM_step[3*i+j].local.at(indexCID) = veloCorrX*velos[i]*velos[j]; - hmM_step[3*i+j+9].local.at(indexCID) = veloCorrY*velos[i]*velos[j]; - hmM_step[3*i+j+18].local.at(indexCID) = veloCorrZ*velos[i]*velos[j]; + for (unsigned short k = 0; k < 3; k++) { + m[i][j][k] = velos[i]*velos[j]*velos[k]; + } } } + + const double mSum[3] = { + m[0][0][0] + m[0][1][1] + m[0][2][2], + m[1][0][0] + m[1][1][1] + m[1][2][2], + m[2][0][0] + m[2][1][1] + m[2][2][2] + }; + + hmM_step[0].local.at(indexCID) = m[0][0][0] - 0.6*(mSum[0]); // m: cxcxcx + hmM_step[1].local.at(indexCID) = m[0][0][1] - 0.2*(mSum[1]); // m: cxcxcy + hmM_step[2].local.at(indexCID) = m[0][0][2] - 0.2*(mSum[2]); // m: cxcxcz + hmM_step[3].local.at(indexCID) = m[0][1][0] - 0.2*(mSum[1]); // m: cxcycx + hmM_step[4].local.at(indexCID) = m[0][1][1] - 0.2*(mSum[0]); // m: cxcycy + hmM_step[5].local.at(indexCID) = m[0][1][2]; // m: cxcycz + hmM_step[6].local.at(indexCID) = m[0][2][0] - 0.2*(mSum[2]); // m: cxczcx + hmM_step[7].local.at(indexCID) = m[0][2][1]; // m: cxczcy + hmM_step[8].local.at(indexCID) = m[0][2][2] - 0.2*(mSum[0]); // m: cxczcz + + hmM_step[9].local.at(indexCID) = m[1][0][0] - 0.2*(mSum[1]); // m: cycxcx + hmM_step[10].local.at(indexCID) = m[1][0][1] - 0.2*(mSum[0]); // m: cycxcy + hmM_step[11].local.at(indexCID) = m[1][0][2]; // m: cycxcz + hmM_step[12].local.at(indexCID) = m[1][1][0] - 0.2*(mSum[0]); // m: cycycx + hmM_step[13].local.at(indexCID) = m[1][1][1] - 0.6*(mSum[1]); // m: cycycy + hmM_step[14].local.at(indexCID) = m[1][1][2] - 0.2*(mSum[2]); // m: cycycz + hmM_step[15].local.at(indexCID) = m[1][2][0]; // m: cyczcx + hmM_step[16].local.at(indexCID) = m[1][2][1] - 0.2*(mSum[2]); // m: cyczcy + hmM_step[17].local.at(indexCID) = m[1][2][2] - 0.2*(mSum[1]); // m: cyczcz + + hmM_step[18].local.at(indexCID) = m[2][0][0] - 0.2*(mSum[2]); // m: czcxcx + hmM_step[19].local.at(indexCID) = m[2][0][1]; // m: czcxcy + hmM_step[20].local.at(indexCID) = m[2][0][2] - 0.2*(mSum[0]); // m: czcxcz + hmM_step[21].local.at(indexCID) = m[2][1][0]; // m: czcycx + hmM_step[22].local.at(indexCID) = m[2][1][1] - 0.2*(mSum[2]); // m: czcycy + hmM_step[23].local.at(indexCID) = m[2][1][2] - 0.2*(mSum[1]); // m: czcycz + hmM_step[24].local.at(indexCID) = m[2][2][0] - 0.2*(mSum[0]); // m: czczcx + hmM_step[25].local.at(indexCID) = m[2][2][1] - 0.2*(mSum[1]); // m: czczcy + hmM_step[26].local.at(indexCID) = m[2][2][2] - 0.6*(mSum[2]); // m: czczcz } } } @@ -352,9 +397,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, #ifdef ENABLE_MPI MPI_Allreduce(ekin2_step.local.data(), ekin2_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); #else - for (unsigned long i = 0; i < _lenVector; i++) { + for (unsigned long i = 0; i < _lenVector; i++) { ekin2_step.global.at(i) = ekin2_step.local.at(i); - } + } #endif for (unsigned long i = 0; i < _lenVector; i++) { @@ -490,6 +535,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, MPI_Reduce(countNTest_step.local.data(), countNTest_step.global.data(), _numBinsGlobal, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD); if (_sampleHigherMoms) { MPI_Reduce(hmDelta_step.local.data(), hmDelta_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + for (unsigned short d = 0; d < 3; d++) { + MPI_Reduce(hmHeatflux_step[d].local.data(), hmHeatflux_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + } for (unsigned short d = 0; d < 9; d++) { MPI_Reduce(hmPressure_step[d].local.data(), hmPressure_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(hmR_step[d].local.data(), hmR_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); @@ -499,7 +547,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } } #else - for (unsigned long i = 0; i < _lenVector; i++) { + for (unsigned long i = 0; i < _lenVector; i++) { ekin2Trans_step.global.at(i) = ekin2Trans_step.local.at(i); epot_step.global.at(i) = epot_step.local.at(i); virialVect_step[0].global.at(i) = virialVect_step[0].local.at(i); @@ -515,6 +563,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, countNTest_step.global.at(i) = countNTest_step.local.at(i); if (_sampleHigherMoms) { hmDelta_step.global.at(i) = hmDelta_step.local.at(i); + for (unsigned short d = 0; d < 3; d++) { + hmHeatflux_step[d].global.at(i) = hmHeatflux_step[d].local.at(i); + } for (unsigned short d = 0; d < 9; d++) { hmPressure_step[d].global.at(i) = hmPressure_step[d].local.at(i); hmR_step[d].global.at(i) = hmR_step[d].local.at(i); @@ -523,7 +574,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, hmM_step[d+18].global.at(i) = hmM_step[d+18].local.at(i); } } - } + } #endif // Only root knows real quantities (MPI_Reduce instead of MPI_Allreduce) @@ -577,6 +628,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, if (_sampleHigherMoms) { _hmDelta_accum.at(i) += hmDelta_step.global.at(i) / numMols; + for (unsigned short d = 0; d < 3; d++) { + _hmHeatflux_accum[d].at(i) += hmHeatflux_step[d].global.at(i) / numMols; + } for (unsigned short d = 0; d < 9; d++) { _hmPressure_accum[d].at(i) += hmPressure_step[d].global.at(i) / numMols; _hmR_accum[d].at(i) += hmR_step[d].global.at(i) / numMols; @@ -629,7 +683,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs << std::endl; for (unsigned long idx = 0; idx < _numBinsGlobal; idx++) { - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << (idx+0.5)*_binwidth; + ofs << FORMAT_SCI_MAX_DIGITS << (idx+0.5)*_binwidth; for (unsigned long cid = 0; cid < numOutputs; cid++) { unsigned long i = idx + cid*_numBinsGlobal; double numMolsPerStep {0.0}; // Not an int as particles change bin during simulation @@ -680,27 +734,27 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, numTest = _countNTest_accum.at(i)/_countSamples.at(i); chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); } - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numMolsPerStep - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << rho - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << ekin - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << epot - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << chemPot_res - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numTest - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T_x - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T_y - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << T_z - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << v_x - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << v_y - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << v_z - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p_x - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p_y - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p_z - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << jEF_x - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << jEF_y - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << jEF_z - << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << numSamples; + ofs << FORMAT_SCI_MAX_DIGITS << numMolsPerStep + << FORMAT_SCI_MAX_DIGITS << rho + << FORMAT_SCI_MAX_DIGITS << T + << FORMAT_SCI_MAX_DIGITS << ekin + << FORMAT_SCI_MAX_DIGITS << epot + << FORMAT_SCI_MAX_DIGITS << p + << FORMAT_SCI_MAX_DIGITS << chemPot_res + << FORMAT_SCI_MAX_DIGITS << numTest + << FORMAT_SCI_MAX_DIGITS << T_x + << FORMAT_SCI_MAX_DIGITS << T_y + << FORMAT_SCI_MAX_DIGITS << T_z + << FORMAT_SCI_MAX_DIGITS << v_x + << FORMAT_SCI_MAX_DIGITS << v_y + << FORMAT_SCI_MAX_DIGITS << v_z + << FORMAT_SCI_MAX_DIGITS << p_x + << FORMAT_SCI_MAX_DIGITS << p_y + << FORMAT_SCI_MAX_DIGITS << p_z + << FORMAT_SCI_MAX_DIGITS << jEF_x + << FORMAT_SCI_MAX_DIGITS << jEF_y + << FORMAT_SCI_MAX_DIGITS << jEF_z + << FORMAT_SCI_MAX_DIGITS << numSamples; } ofs << std::endl; } @@ -718,6 +772,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs << setw(24) << "pos"; // Bin position for (unsigned long cid = 0; cid < numOutputs; cid++) { ofs << setw(22) << "delta["<::digits10) << (idx+0.5)*_binwidth; + ofs << FORMAT_SCI_MAX_DIGITS << (idx+0.5)*_binwidth; for (unsigned long cid = 0; cid < numOutputs; cid++) { unsigned long i = idx + cid*_numBinsGlobal; double delta {0.0}; + std::array q = {0.0}; std::array p = {0.0}; std::array R = {0.0}; std::array m = {0.0}; if (_countSamples.at(i) > 0ul) { delta = _hmDelta_accum.at(i)/_countSamples.at(i); + for (unsigned short d = 0; d < 3; d++) { + q[d] = _hmHeatflux_accum[d].at(i); + } for (unsigned short d = 0; d < 9; d++) { p[d] = _hmPressure_accum[d].at(i); R[d] = _hmR_accum[d].at(i); @@ -756,21 +817,25 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, m[d+18] = _hmM_accum[d+18].at(i); } } - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << delta; + ofs << FORMAT_SCI_MAX_DIGITS << delta; + // key k_i and value v_i + for (auto& [k_i, v_i]: dirs) { + ofs << FORMAT_SCI_MAX_DIGITS << q[v_i]; + } for (auto& [k_i, v_i]: dirs) { for (auto& [k_j, v_j]: dirs) { - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p[3*v_i+v_j]; + ofs << FORMAT_SCI_MAX_DIGITS << p[3*v_i+v_j]; } } for (auto& [k_i, v_i]: dirs) { for (auto& [k_j, v_j]: dirs) { - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p[3*v_i+v_j]; + ofs << FORMAT_SCI_MAX_DIGITS << p[3*v_i+v_j]; } } for (auto& [k_i, v_i]: dirs) { for (auto& [k_j, v_j]: dirs) { for (auto& [k_k, v_k]: dirs) { - ofs << std::setw(24) << std::scientific << std::setprecision(std::numeric_limits::digits10) << p[9*v_i+3*v_j+v_k]; + ofs << FORMAT_SCI_MAX_DIGITS << p[9*v_i+3*v_j+v_k]; } } } @@ -809,6 +874,9 @@ void ExtendedProfileSampling::resizeVectors() { if (_sampleHigherMoms) { _hmDelta_accum.resize(_lenVector); + for (unsigned short d = 0; d < 3; d++) { + _hmHeatflux_accum.at(d).resize(_lenVector); + } for (unsigned short d = 0; d < 9; d++) { _hmPressure_accum.at(d).resize(_lenVector); _hmR_accum.at(d).resize(_lenVector); @@ -818,6 +886,9 @@ void ExtendedProfileSampling::resizeVectors() { } } else { _hmDelta_accum.clear(); + for (unsigned short d = 0; d < 3; d++) { + _hmHeatflux_accum.at(d).clear(); + } for (unsigned short d = 0; d < 9; d++) { _hmPressure_accum.at(d).clear(); _hmR_accum.at(d).clear(); @@ -858,5 +929,8 @@ void ExtendedProfileSampling::resetVectors() { std::fill(_hmM_accum.at(d+9).begin(), _hmM_accum.at(d+9).end(), 0.0f); std::fill(_hmM_accum.at(d+18).begin(), _hmM_accum.at(d+18).end(), 0.0f); } + for (unsigned short d = 0; d < 9; d++) { + std::fill(_hmHeatflux_accum.at(d).begin(), _hmHeatflux_accum.at(d).end(), 0.0f); + } } } diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index 84f2ffa828..b347d6993c 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -20,7 +20,7 @@ * Samples residual chemical potential binwise in y-direction for the LJTS fluid (pot. energy corrections not implemented!) using the Widom insertion method * \code{.xml} * -* FLOAT +* FLOAT INT INT INT @@ -34,24 +34,24 @@ * * \endcode */ -class ExtendedProfileSampling : public PluginBase{ +class ExtendedProfileSampling : public PluginBase { private: // Control: general - float _binwidth; - unsigned long _startSampling; - unsigned long _writeFrequency; - unsigned long _stopSampling; - bool _singleComp; + float _binwidth {1.0f}; + unsigned long _startSampling {0ul}; + unsigned long _writeFrequency {10000ul}; + unsigned long _stopSampling {1000000000ul}; + bool _singleComp {false}; // Higher moments - bool _sampleHigherMoms; + bool _sampleHigherMoms {false}; // Control: chemical potential - bool _sampleChemPot; - bool _lattice; - float _factorNumTest; - unsigned long _samplefrequency; + bool _sampleChemPot {false}; + bool _lattice {true}; + float _factorNumTest {4.0f}; + unsigned long _samplefrequency {50ul}; // Auxiliary variables uint16_t _numBinsGlobal; @@ -63,7 +63,8 @@ class ExtendedProfileSampling : public PluginBase{ Molecule _mTest; // Accumulated quantities over _writeFrequency per bin - // NOTE: Only the root process knows correct values (with exceptions) + // NOTE: Only the root process knows correct values (except number of molecules and temperature) + // With only the root process writing data, MPI_Reduce instead of MPI_Allreduce could be used -> only root has correct data std::vector _numMolecules_accum; // Number of molecules in bin std::vector _density_accum; // Local density std::vector _temperature_accum; // Temperature (drift corrected) @@ -79,6 +80,7 @@ class ExtendedProfileSampling : public PluginBase{ // Higher moments std::vector _hmDelta_accum; // Higher moment: Delta + std::array, 3> _hmHeatflux_accum; // Higher moment: Thermal heatflux; x, y, z std::array, 9> _hmPressure_accum; // Higher moment: Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz std::array, 9> _hmR_accum; // Higher moment: R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz std::array, 27> _hmM_accum; // Higher moment: M; cicxcx, cicxcy, cicxcz, cicycx, cicycy, cicycz, ciczcx, ciczcy, ciczcz mit i = x,y,z @@ -90,19 +92,23 @@ class ExtendedProfileSampling : public PluginBase{ public: ExtendedProfileSampling(); - ~ExtendedProfileSampling(); + ~ExtendedProfileSampling() override = default; void init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) override; void readXML (XMLfileUnits& xmlconfig) override; void beforeForces(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, unsigned long /* simstep */) override {} + + // Needs to be called when halo cells are still existing (for sampling of chemical potential) void afterForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) override; + void endStep(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */, unsigned long /* simstep */) override {} + void finish(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */) override {} - std::string getPluginName() override { return std::string("ExtendedProfileSampling"); } - + std::string getPluginName() override { return "ExtendedProfileSampling"; } + static PluginBase* createInstance() { return new ExtendedProfileSampling(); } }; From 6e71b7a5bfd052e0cc0a87e39f1356663ba885fc Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 12 Apr 2022 12:44:01 +0200 Subject: [PATCH 45/76] Realize suggested changes --- makefile/Makefile | 10 ++- src/longRange/Homogeneous.cpp | 96 +++++++++++++---------- src/longRange/Homogeneous.h | 1 - src/longRange/Planar.cpp | 40 ++++++---- src/molecules/AutoPasSimpleMolecule.h | 6 -- src/molecules/FullMolecule.cpp | 6 -- src/molecules/FullMolecule.h | 24 +----- src/molecules/MoleculeInterface.h | 8 +- src/molecules/MoleculeRMM.h | 2 +- src/molecules/potforce.h | 22 +++--- src/particleContainer/ParticleContainer.h | 5 +- 11 files changed, 104 insertions(+), 116 deletions(-) diff --git a/makefile/Makefile b/makefile/Makefile index ad0352611d..09a963a78b 100644 --- a/makefile/Makefile +++ b/makefile/Makefile @@ -172,12 +172,16 @@ INCLUDES = -I$(SRCDIR) -isystem $(SRCDIR)/../libs/rapidxml -isystem $(SRCDIR)/.. BINARY_BASENAME = MarDyn ifneq ("$(wildcard $(SRCDIR)/../.git)","") $(info Building from a git version.) - GIT_VERSION_BRANCH = $(shell git rev-parse --abbrev-ref HEAD | sed -e "s/:/-/") - GIT_VERSION_HASH = $(shell git rev-parse --short HEAD | sed -e "s/:/-/") + # Using git, the current version and state of the code are written to MarDyn_version.h + # this enables for the display of the information during execution of MarDyn + # see version.cmake for accordance in cmake + GIT_VERSION_BRANCH = $(shell git rev-parse --abbrev-ref HEAD) + GIT_VERSION_HASH = $(shell git rev-parse --short HEAD) GIT_VERSION_IS_DIRTY = $(shell git diff --quiet || echo "_dirty") GIT_VERSION_HASH_CURRENT = $(shell grep "MARDYN_VERSION_HASH =" MarDyn_version.h 2> /dev/null | awk -F '"' '{print $$2}' | tr -d '_') + # Check if git commit has changed since last execution of make command ifneq ($(GIT_VERSION_HASH),$(GIT_VERSION_HASH_CURRENT)) - $(shell rm -f MarDyn.o) + $(shell rm -f MarDyn.o) # Force new build of MarDyn including updated version info $(shell sed "s=@MarDyn_VERSION_BRANCH@=$(GIT_VERSION_BRANCH)=g" MarDyn_version.h.in > MarDyn_version.h) $(shell sed -i "s=@MarDyn_VERSION_HASH@=$(GIT_VERSION_HASH)=g" MarDyn_version.h) $(shell sed -i "s=@MarDyn_VERSION_IS_DIRTY@=$(GIT_VERSION_IS_DIRTY)=g" MarDyn_version.h) diff --git a/src/longRange/Homogeneous.cpp b/src/longRange/Homogeneous.cpp index 8004cb5796..8cea25f838 100644 --- a/src/longRange/Homogeneous.cpp +++ b/src/longRange/Homogeneous.cpp @@ -4,7 +4,6 @@ #include "Domain.h" #include "Simulation.h" #include "longRange/Homogeneous.h" -//#include "LongRangeCorrection.h" #include "molecules/Molecule.h" #include "particleContainer/ParticleContainer.h" @@ -13,20 +12,20 @@ using Log::global_log; using namespace std; -Homogeneous::Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, ParticleContainer* particleContainer, Simulation* simulation) { - _cutoff = cutoffRadius; - _cutoffLJ = cutoffRadiusLJ; - _domain = domain; - _particleContainer = particleContainer; - _components = simulation->getEnsemble()->getComponents(); -} +Homogeneous::Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, ParticleContainer* particleContainer, Simulation* simulation) : + _cutoff(cutoffRadius), + _cutoffLJ(cutoffRadiusLJ), + _domain(domain), + _particleContainer(particleContainer), + _components(simulation->getEnsemble()->getComponents()) +{} void Homogeneous::init() { _comp2params = _domain->getComp2Params(); global_log->info() << "Long range correction for homogeneous systems is used " << endl; - double UpotCorrLJ = 0.; - double VirialCorrLJ = 0.; - double MySelbstTerm = 0.; + double upotCorrLJ = 0.; + double virialCorrLJ = 0.; + double mySelbstTerm = 0.; unsigned int numcomp = _components->size(); unsigned long nummolecules = 0; @@ -50,7 +49,7 @@ void Homogeneous::init() { } // point dipoles for (unsigned int si = 0; si < numdipolesi; ++si) { - double tmy = ci.dipole(si).absMy(); + const double tmy = ci.dipole(si).absMy(); double evect = 0; for (unsigned d = 0; d < 3; d++) { evect += ci.dipole(si).e()[d] * ci.dipole(si).e()[d]; @@ -64,7 +63,7 @@ void Homogeneous::init() { for (unsigned d = 0; d < 3; d++) { my2 += chargeBalance[d] * chargeBalance[d]; } - MySelbstTerm += my2 * ci.getNumMolecules(); + mySelbstTerm += my2 * ci.getNumMolecules(); for (unsigned int j = 0; j < numcomp; ++j) { Component& cj = (*_components)[j]; @@ -73,10 +72,10 @@ void Homogeneous::init() { params.reset_read(); // LJ centers for (unsigned int si = 0; si < numljcentersi; ++si) { - double xi = ci.ljcenter(si).rx(); - double yi = ci.ljcenter(si).ry(); - double zi = ci.ljcenter(si).rz(); - double tau1 = sqrt(xi * xi + yi * yi + zi * zi); + const double xi = ci.ljcenter(si).rx(); + const double yi = ci.ljcenter(si).ry(); + const double zi = ci.ljcenter(si).rz(); + const double tau1 = sqrt(xi * xi + yi * yi + zi * zi); for (unsigned int sj = 0; sj < numljcentersj; ++sj) { double xj = cj.ljcenter(sj).rx(); double yj = cj.ljcenter(sj).ry(); @@ -95,21 +94,21 @@ void Homogeneous::init() { if (uLJshift6 == 0.0) { double fac = double(ci.getNumMolecules()) * double(cj.getNumMolecules()) * eps24; if (tau1 == 0. && tau2 == 0.) { - UpotCorrLJ += fac * (this->_TICCu(-6, _cutoffLJ, sig2) - this->_TICCu(-3, _cutoffLJ, sig2)); - VirialCorrLJ += + upotCorrLJ += fac * (this->_TICCu(-6, _cutoffLJ, sig2) - this->_TICCu(-3, _cutoffLJ, sig2)); + virialCorrLJ += fac * (this->_TICCv(-6, _cutoffLJ, sig2) - this->_TICCv(-3, _cutoffLJ, sig2)); } else if (tau1 != 0. && tau2 != 0.) { - UpotCorrLJ += fac * (this->_TISSu(-6, _cutoffLJ, sig2, tau1, tau2) - + upotCorrLJ += fac * (this->_TISSu(-6, _cutoffLJ, sig2, tau1, tau2) - this->_TISSu(-3, _cutoffLJ, sig2, tau1, tau2)); - VirialCorrLJ += fac * (this->_TISSv(-6, _cutoffLJ, sig2, tau1, tau2) - + virialCorrLJ += fac * (this->_TISSv(-6, _cutoffLJ, sig2, tau1, tau2) - this->_TISSv(-3, _cutoffLJ, sig2, tau1, tau2)); } else { if (tau2 == 0.) { tau2 = tau1; } - UpotCorrLJ += fac * (this->_TICSu(-6, _cutoffLJ, sig2, tau2) - + upotCorrLJ += fac * (this->_TICSu(-6, _cutoffLJ, sig2, tau2) - this->_TICSu(-3, _cutoffLJ, sig2, tau2)); - VirialCorrLJ += fac * (this->_TICSv(-6, _cutoffLJ, sig2, tau2) - + virialCorrLJ += fac * (this->_TICSv(-6, _cutoffLJ, sig2, tau2) - this->_TICSv(-3, _cutoffLJ, sig2, tau2)); } } @@ -117,33 +116,48 @@ void Homogeneous::init() { } } } - _upotCorrLJ_no_num_molecules = UpotCorrLJ; - _virialCorrLJ_no_num_molecules = VirialCorrLJ; - _mySelbstTerm_no_num_molecules = MySelbstTerm; + _upotCorrLJ_no_num_molecules = upotCorrLJ; + _virialCorrLJ_no_num_molecules = virialCorrLJ; + _mySelbstTerm_no_num_molecules = mySelbstTerm; } void Homogeneous::calculateLongRange() { - double globalRho = _domain->getglobalRho(); - unsigned long globalNumMolecules = _domain->getglobalNumMolecules(); - double epsilonRF = _domain->getepsilonRF(); - double fac = M_PI * globalRho / (3. * static_cast(globalNumMolecules)); - double UpotCorrLJ = fac * _upotCorrLJ_no_num_molecules; - double VirialCorrLJ = -fac * _virialCorrLJ_no_num_molecules; + const double globalRho = _domain->getglobalRho(); + const unsigned long globalNumMolecules = _domain->getglobalNumMolecules(); + const double epsilonRF = _domain->getepsilonRF(); + const double fac = M_PI * globalRho / (3. * static_cast(globalNumMolecules)); + const double upotCorrLJ = fac * _upotCorrLJ_no_num_molecules; + const double virialCorrLJ = -fac * _virialCorrLJ_no_num_molecules; - double epsRFInvrc3 = 2. * (epsilonRF - 1.) / ((_cutoff * _cutoff * _cutoff) * (2. * epsilonRF + 1.)); - double MySelbstTerm = -0.5 * epsRFInvrc3 * _mySelbstTerm_no_num_molecules; + const double epsRFInvrc3 = 2. * (epsilonRF - 1.) / ((_cutoff * _cutoff * _cutoff) * (2. * epsilonRF + 1.)); + const double mySelbstTerm = -0.5 * epsRFInvrc3 * _mySelbstTerm_no_num_molecules; - double UpotCorr = UpotCorrLJ + MySelbstTerm; - double VirialCorr = VirialCorrLJ + 3. * MySelbstTerm; + const double upotCorr = upotCorrLJ + mySelbstTerm; + const double virialCorr = virialCorrLJ + 3. * mySelbstTerm; - global_log->debug() << "Far field terms: U_pot_correction = " << UpotCorr << " virial_correction = " << VirialCorr + global_log->debug() << "Far field terms: U_pot_correction = " << upotCorr << " virial_correction = " << virialCorr << endl; - _domain->setUpotCorr(UpotCorr); - _domain->setVirialCorr(VirialCorr); + _domain->setUpotCorr(upotCorr); + _domain->setVirialCorr(virialCorr); + // Pot. energy and virial are also stored in molecule class + // To maintain continuity (sum of U over N == U_global_domain), the correction values are added to each molecule + // For the virial, the correction is distributed equally to the diagonal elements + const double uPotCorrPerMol = upotCorr/globalNumMolecules; + const double virialCorrPerMol[9] = { + virialCorr/(3.*globalNumMolecules), // rxfx + virialCorr/(3.*globalNumMolecules), // ryfy + virialCorr/(3.*globalNumMolecules), // rzfz + 0., // rxfy + 0., // rxfz + 0., // ryfz + 0., // ryfx + 0., // rzfx + 0., // rzfy + }; for (auto tempMol = _particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); tempMol.isValid(); ++tempMol) { - tempMol->setUConstCorr(UpotCorr/globalNumMolecules); - tempMol->setViConstCorr(VirialCorr/globalNumMolecules); + tempMol->Viadd(virialCorrPerMol); + tempMol->Uadd(uPotCorrPerMol); } } diff --git a/src/longRange/Homogeneous.h b/src/longRange/Homogeneous.h index 4362d5857a..42a3799238 100644 --- a/src/longRange/Homogeneous.h +++ b/src/longRange/Homogeneous.h @@ -15,7 +15,6 @@ class LongRangeCorrection; class Homogeneous: public LongRangeCorrection{ public: -// Homogeneous(); Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, ParticleContainer* particleContainer, Simulation* simulation); virtual ~Homogeneous() {} diff --git a/src/longRange/Planar.cpp b/src/longRange/Planar.cpp index a3746d7fea..a874a4b5a6 100644 --- a/src/longRange/Planar.cpp +++ b/src/longRange/Planar.cpp @@ -436,16 +436,18 @@ void Planar::calculateLongRange() { Fa[1] = fLJ[index]; Upot_c += uLJ[index]; Virial_c += 2 * vTLJ[index] + vNLJ[index]; - double Via[9] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; /**< Virial tensor all elements: rxfx, ryfy, rzfz, rxfy, rxfz, ryfz, ryfx, rzfx, rzfy */ - Via[0] = vTLJ[index]; - Via[1] = vNLJ[index]; - Via[2] = vTLJ[index]; - Via[3] = vNDLJ[index]; - Via[4] = vTLJ[index]; - Via[5] = vNDLJ[index]; - Via[6] = vNDLJ[index]; - Via[7] = vTLJ[index]; - Via[8] = vNDLJ[index]; + // all virial tensor elements + const double Via[9] = { + vTLJ[index], // rxfx + vNLJ[index], // ryfy + vTLJ[index], // rzfz + vNDLJ[index], // rxfy + vTLJ[index], // rxfz + vNDLJ[index], // ryfz + vNDLJ[index], // ryfx + vTLJ[index], // rzfx + vNDLJ[index], // rzfy + }; if ((tempMol->r(1) >= _region.actPos[0]) && (tempMol->r(1) <= _region.actPos[1])) { tempMol->Fljcenteradd(i, Fa); } @@ -459,12 +461,18 @@ void Planar::calculateLongRange() { Fa[1] = fDipole[index]; Upot_c += uDipole[index]; Virial_c += 2 * vTDipole[index] + vNDipole[index]; - double Via[9] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; /**< Virial tensor all elements: rxfx, ryfy, rzfz, rxfy, rxfz, ryfz, ryfx, rzfx, rzfy */ - Via[0] = vTDipole[index]; - Via[1] = vNDipole[index]; - Via[2] = vTDipole[index]; - Via[4] = vTDipole[index]; - Via[7] = vTDipole[index]; + // all virial tensor elements + const double Via[9] = { + vTDipole[index], // rxfx + vNDipole[index], // ryfy + vTDipole[index], // rzfz + 0., // rxfy + vTDipole[index], // rxfz + 0., // ryfz + 0., // ryfx + vTDipole[index], // rzfx + 0., // rzfy + }; if ((tempMol->r(1) >= _region.actPos[0]) && (tempMol->r(1) <= _region.actPos[1])) { tempMol->Fadd(Fa); // Force is stored on the center of mass of the molecule! } diff --git a/src/molecules/AutoPasSimpleMolecule.h b/src/molecules/AutoPasSimpleMolecule.h index 72dc125d6e..94a04eaccd 100644 --- a/src/molecules/AutoPasSimpleMolecule.h +++ b/src/molecules/AutoPasSimpleMolecule.h @@ -138,9 +138,6 @@ class AutoPasSimpleMolecule final : public MoleculeInterface, public autopas::Pa double Vi(unsigned short d) const override { return 0.; } - double UpotConstCorr() const override { return 0.; } - double ViConstCorr() const override { return 0.; } - void setD(unsigned short d, double D) override {} inline void move(int d, double dr) override { setr(d, r(d) + dr); } @@ -242,9 +239,6 @@ class AutoPasSimpleMolecule final : public MoleculeInterface, public autopas::Pa void setU(const double upot) override {} - void setUConstCorr(const double a) override {} - void setViConstCorr(const double a) override {} - void Fadd(const double F[]) override { for (unsigned short i = 0; i < 3; i++) _f[i] += F[i]; } diff --git a/src/molecules/FullMolecule.cpp b/src/molecules/FullMolecule.cpp index bb5be97384..486b1a156f 100644 --- a/src/molecules/FullMolecule.cpp +++ b/src/molecules/FullMolecule.cpp @@ -39,8 +39,6 @@ FullMolecule::FullMolecule(unsigned long id, Component *component, _Vi[7]= 0.; _Vi[8]= 0.; _upot = 0; - _ViConstCorr = 0; - _upotConstCorr = 0; _soa = nullptr; _soa_index_lj = 0; @@ -83,8 +81,6 @@ FullMolecule::FullMolecule(const FullMolecule& m) { _Vi[7]= m._Vi[7]; _Vi[8]= m._Vi[8]; _upot = m._upot; - _ViConstCorr = m._ViConstCorr; - _upotConstCorr = m._upotConstCorr; _soa = m._soa; _soa_index_lj = m._soa_index_lj; @@ -130,8 +126,6 @@ FullMolecule& FullMolecule::operator=(const FullMolecule& m) { _Vi[7]= m._Vi[7]; _Vi[8]= m._Vi[8]; _upot = m._upot; - _ViConstCorr = m._ViConstCorr; - _upotConstCorr = m._upotConstCorr; _soa = m._soa; _soa_index_lj = m._soa_index_lj; diff --git a/src/molecules/FullMolecule.h b/src/molecules/FullMolecule.h index ed35481ee2..be820a6a53 100644 --- a/src/molecules/FullMolecule.h +++ b/src/molecules/FullMolecule.h @@ -76,21 +76,7 @@ class FullMolecule : public MoleculeInterface { double M(unsigned short d) const override { return _M[d]; } /** get the virial */ - double Vi(unsigned short d) const override { - if (d < 3) { // Correction term only added to diagonal elements - - return _Vi[d] + _ViConstCorr; - } - else { - return _Vi[d]; - } - } - - /** get the constant correction of potential energy */ - double UpotConstCorr() const override { return _upotConstCorr; } - - /** get the constant correction of one virial element */ - double ViConstCorr() const override { return _ViConstCorr; } + double Vi(unsigned short d) const override { return _Vi[d]; } void setD(unsigned short d, double D) override { this->_L[d] = D; } @@ -135,7 +121,7 @@ class FullMolecule : public MoleculeInterface { /** return total kinetic energy of the molecule */ double U_kin() override { return U_trans() + U_rot(); } /** return total potential energy of the molecule */ - double U_pot() override { return _upot + _upotConstCorr; } + double U_pot() override { return _upot; } void setupSoACache(CellDataSoABase * s, unsigned iLJ, unsigned iC, unsigned iD, unsigned iQ) override; @@ -289,9 +275,6 @@ class FullMolecule : public MoleculeInterface { void setM(double M[3]) override { for(int d = 0; d < 3; d++ ) { _M[d] = M[d]; } } void setVi(double Vi[9]) override { for(int d = 0; d < 9; d++) { _Vi[d] = Vi[d]; } } void setU(const double upot) override { _upot = upot; } - - void setUConstCorr(const double a) override { _upotConstCorr = a; } - void setViConstCorr(const double a) override { _ViConstCorr = a/3.; } // LRC term assigned to the 3 diagonal elements void Fadd(const double a[]) override { for(unsigned short d=0;d<3;++d) _F[d]+=a[d]; } void Madd(const double a[]) override { for(unsigned short d=0;d<3;++d) _M[d]+=a[d]; } @@ -370,9 +353,6 @@ class FullMolecule : public MoleculeInterface { double _upot; /**< potential energy */ - double _ViConstCorr; /** Correction of one virial element, used by homogeneous LRC **/ - double _upotConstCorr; /** Correction of potential energy, used by homogeneous LRC **/ - double _m; /**< total mass */ double _I[3]{0.,0.,0.},_invI[3]{0.,0.,0.}; // moment of inertia for principal axes and it's inverse diff --git a/src/molecules/MoleculeInterface.h b/src/molecules/MoleculeInterface.h index eb9068307a..70a51e9f2e 100644 --- a/src/molecules/MoleculeInterface.h +++ b/src/molecules/MoleculeInterface.h @@ -67,8 +67,7 @@ class MoleculeInterface { return m_ret; } virtual std::array Vi_arr() { - std::array vi_ret{Vi(0), Vi(1), Vi(2), Vi(3), Vi(4), Vi(5), Vi(6), Vi(7), Vi(8)}; - return vi_ret; + return {Vi(0), Vi(1), Vi(2), Vi(3), Vi(4), Vi(5), Vi(6), Vi(7), Vi(8)}; } virtual const Quaternion& q() const = 0; @@ -83,8 +82,6 @@ class MoleculeInterface { } virtual double M(unsigned short d) const = 0; virtual double Vi(unsigned short d) const = 0; - virtual double UpotConstCorr() const = 0; - virtual double ViConstCorr() const = 0; virtual void setD(unsigned short d, double D) = 0; @@ -197,9 +194,6 @@ class MoleculeInterface { virtual void setVi(double Vi[9]) = 0; virtual void setU(const double upot) = 0; - virtual void setUConstCorr(const double a) = 0; - virtual void setViConstCorr(const double a) = 0; - void scale_v(double s) { for(int d = 0; d < 3; ++d) { setv(d, v(d) * s); diff --git a/src/molecules/MoleculeRMM.h b/src/molecules/MoleculeRMM.h index 6ece45d5b6..99568762c4 100644 --- a/src/molecules/MoleculeRMM.h +++ b/src/molecules/MoleculeRMM.h @@ -218,7 +218,7 @@ class MoleculeRMM : public MoleculeInterface { void setF(double /*F*/ [3]) override {} void setM(double /*M*/[3]) override {} - void setVi(double /*Vi*/[3]) override {} + void setVi(double /*Vi*/[9]) override {} void Fadd(const double /*a*/[]) override {} void Madd(const double /*a*/[]) override {} void Viadd(const double /*a*/[]) override {} diff --git a/src/molecules/potforce.h b/src/molecules/potforce.h index da722efb32..6c15783ac9 100644 --- a/src/molecules/potforce.h +++ b/src/molecules/potforce.h @@ -360,7 +360,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3*d+e] += drm[d] * f[e]; } } } @@ -382,7 +382,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3*d+e] += drm[d] * f[e]; } } } @@ -404,7 +404,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3*d+e] += drm[d] * f[e]; } } } @@ -430,7 +430,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] -= drm[d] * f[e]; + virialAll[3*d+e] -= drm[d] * f[e]; } } } @@ -454,7 +454,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; ++d) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3*d+e] += drm[d] * f[e]; } } } @@ -478,7 +478,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] -= drm[d] * f[e]; + virialAll[3*d+e] -= drm[d] * f[e]; } } } @@ -503,7 +503,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] -= drm[d] * f[e]; + virialAll[3*d+e] -= drm[d] * f[e]; } } } @@ -527,7 +527,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; ++d) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3*d+e] += drm[d] * f[e]; } } } @@ -552,7 +552,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; ++d) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3*d+e] += drm[d] * f[e]; } } } @@ -611,8 +611,8 @@ inline void FluidPot(Molecule& mi, Molecule& mj, ParaStrm& params, double /*drm* PotForceLJ(drs, dr2, eps24, sig2, f, u); u += shift6; Upot6LJ += u; - mi.Uadd(u/24); - mj.Uadd(u/24); + mi.Uadd(u/12.); + mj.Uadd(u/12.); } } } diff --git a/src/particleContainer/ParticleContainer.h b/src/particleContainer/ParticleContainer.h index 5fab822282..8c5f6e2d24 100644 --- a/src/particleContainer/ParticleContainer.h +++ b/src/particleContainer/ParticleContainer.h @@ -202,8 +202,9 @@ class ParticleContainer: public MemoryProfilable { /* TODO: Have a look on this */ virtual void deleteMolecule(ParticleIterator& moleculeIter, const bool& rebuildCaches) = 0; - /* TODO goes into grand canonical ensemble - THIS RETURNS THE WRONG ENERGY IF CALLED WHEN HALO CELLS ARE NOT EXISTENT ANYMORE */ + /* TODO: goes into the grand canonical ensemble + * WARNING: THIS RETURNS THE WRONG ENERGY IF CALLED WHEN HALO CELLS ARE ALREADY CLEARED! + */ virtual double getEnergy(ParticlePairsHandler* particlePairsHandler, Molecule* m1, CellProcessor& cellProcessor) = 0; //! @brief Update the caches of the molecules, that lie in inner cells. From aba3e7809ec4f4ca57f91892184240167a8dd694 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 12 Apr 2022 16:35:17 +0200 Subject: [PATCH 46/76] Minor fixes in ExtendedSampling plugin --- src/plugins/ExtendedProfileSampling.cpp | 6 +++--- src/plugins/ExtendedProfileSampling.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index a4202a0679..e867de3d11 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -922,6 +922,9 @@ void ExtendedProfileSampling::resetVectors() { if (_sampleHigherMoms) { std::fill(_hmDelta_accum.begin(), _hmDelta_accum.end(), 0.0f); + for (unsigned short d = 0; d < 3; d++) { + std::fill(_hmHeatflux_accum.at(d).begin(), _hmHeatflux_accum.at(d).end(), 0.0f); + } for (unsigned short d = 0; d < 9; d++) { std::fill(_hmPressure_accum.at(d).begin(), _hmPressure_accum.at(d).end(), 0.0f); std::fill(_hmR_accum.at(d).begin(), _hmR_accum.at(d).end(), 0.0f); @@ -929,8 +932,5 @@ void ExtendedProfileSampling::resetVectors() { std::fill(_hmM_accum.at(d+9).begin(), _hmM_accum.at(d+9).end(), 0.0f); std::fill(_hmM_accum.at(d+18).begin(), _hmM_accum.at(d+18).end(), 0.0f); } - for (unsigned short d = 0; d < 9; d++) { - std::fill(_hmHeatflux_accum.at(d).begin(), _hmHeatflux_accum.at(d).end(), 0.0f); - } } } diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index b347d6993c..a0731c4bd8 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -81,9 +81,9 @@ class ExtendedProfileSampling : public PluginBase { // Higher moments std::vector _hmDelta_accum; // Higher moment: Delta std::array, 3> _hmHeatflux_accum; // Higher moment: Thermal heatflux; x, y, z - std::array, 9> _hmPressure_accum; // Higher moment: Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - std::array, 9> _hmR_accum; // Higher moment: R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - std::array, 27> _hmM_accum; // Higher moment: M; cicxcx, cicxcy, cicxcz, cicycx, cicycy, cicycz, ciczcx, ciczcy, ciczcz mit i = x,y,z + std::array, 9> _hmPressure_accum; // Higher moment: Pressure (traceless); cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + std::array, 9> _hmR_accum; // Higher moment: R (traceless); cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + std::array, 27> _hmM_accum; // Higher moment: M (traceless); cicxcx, cicxcy, cicxcz, cicycx, cicycy, cicycz, ciczcx, ciczcy, ciczcz mit i = x,y,z std::vector _countSamples; // Number of samples; can vary from bin to bin as some bins could be empty From 667ab7dc9d15d482e0dd08b34c62b462b4f304b4 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 12 Apr 2022 16:46:34 +0200 Subject: [PATCH 47/76] Minor fixes in ExtendedSampling plugin --- src/plugins/ExtendedProfileSampling.cpp | 74 +++++++++++++------------ 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index e867de3d11..bd94d36de5 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -331,16 +331,20 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); if (_sampleHigherMoms) { const std::array velos = {veloCorrX, veloCorrY, veloCorrZ}; - hmDelta_step.local.at(indexCID) = veloCorrSqrt*veloCorrSqrt; + + hmDelta_step.local.at(indexCID) += veloCorrSqrt*veloCorrSqrt; + for (unsigned short i = 0; i < 3; i++) { - hmHeatflux_step[i].local.at(indexCID) = 0.5*veloCorrSqrt*velos[i]; + + hmHeatflux_step[i].local.at(indexCID) += 0.5*veloCorrSqrt*velos[i]; + for (unsigned short j = 0; j < 3; j++) { if (i == j) { // Trace elements - hmPressure_step[3*i+j].local.at(indexCID) = velos[i]*velos[j]; // Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - hmR_step[3*i+j].local.at(indexCID) = velos[i]*velos[j]*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + hmPressure_step[3*i+j].local.at(indexCID) += velos[i]*velos[j] - (1./3.)*veloCorrSqrt; // Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + hmR_step[3*i+j].local.at(indexCID) += (velos[i]*velos[j] - (1./3.)*veloCorrSqrt)*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz } else { - hmPressure_step[3*i+j].local.at(indexCID) = velos[i]*velos[j] - (1./3.)*veloCorrSqrt; - hmR_step[3*i+j].local.at(indexCID) = (velos[i]*velos[j] - (1./3.)*veloCorrSqrt)*veloCorrSqrt; + hmPressure_step[3*i+j].local.at(indexCID) += velos[i]*velos[j]; + hmR_step[3*i+j].local.at(indexCID) += velos[i]*velos[j]*veloCorrSqrt; } } } @@ -360,35 +364,35 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, m[2][0][0] + m[2][1][1] + m[2][2][2] }; - hmM_step[0].local.at(indexCID) = m[0][0][0] - 0.6*(mSum[0]); // m: cxcxcx - hmM_step[1].local.at(indexCID) = m[0][0][1] - 0.2*(mSum[1]); // m: cxcxcy - hmM_step[2].local.at(indexCID) = m[0][0][2] - 0.2*(mSum[2]); // m: cxcxcz - hmM_step[3].local.at(indexCID) = m[0][1][0] - 0.2*(mSum[1]); // m: cxcycx - hmM_step[4].local.at(indexCID) = m[0][1][1] - 0.2*(mSum[0]); // m: cxcycy - hmM_step[5].local.at(indexCID) = m[0][1][2]; // m: cxcycz - hmM_step[6].local.at(indexCID) = m[0][2][0] - 0.2*(mSum[2]); // m: cxczcx - hmM_step[7].local.at(indexCID) = m[0][2][1]; // m: cxczcy - hmM_step[8].local.at(indexCID) = m[0][2][2] - 0.2*(mSum[0]); // m: cxczcz - - hmM_step[9].local.at(indexCID) = m[1][0][0] - 0.2*(mSum[1]); // m: cycxcx - hmM_step[10].local.at(indexCID) = m[1][0][1] - 0.2*(mSum[0]); // m: cycxcy - hmM_step[11].local.at(indexCID) = m[1][0][2]; // m: cycxcz - hmM_step[12].local.at(indexCID) = m[1][1][0] - 0.2*(mSum[0]); // m: cycycx - hmM_step[13].local.at(indexCID) = m[1][1][1] - 0.6*(mSum[1]); // m: cycycy - hmM_step[14].local.at(indexCID) = m[1][1][2] - 0.2*(mSum[2]); // m: cycycz - hmM_step[15].local.at(indexCID) = m[1][2][0]; // m: cyczcx - hmM_step[16].local.at(indexCID) = m[1][2][1] - 0.2*(mSum[2]); // m: cyczcy - hmM_step[17].local.at(indexCID) = m[1][2][2] - 0.2*(mSum[1]); // m: cyczcz - - hmM_step[18].local.at(indexCID) = m[2][0][0] - 0.2*(mSum[2]); // m: czcxcx - hmM_step[19].local.at(indexCID) = m[2][0][1]; // m: czcxcy - hmM_step[20].local.at(indexCID) = m[2][0][2] - 0.2*(mSum[0]); // m: czcxcz - hmM_step[21].local.at(indexCID) = m[2][1][0]; // m: czcycx - hmM_step[22].local.at(indexCID) = m[2][1][1] - 0.2*(mSum[2]); // m: czcycy - hmM_step[23].local.at(indexCID) = m[2][1][2] - 0.2*(mSum[1]); // m: czcycz - hmM_step[24].local.at(indexCID) = m[2][2][0] - 0.2*(mSum[0]); // m: czczcx - hmM_step[25].local.at(indexCID) = m[2][2][1] - 0.2*(mSum[1]); // m: czczcy - hmM_step[26].local.at(indexCID) = m[2][2][2] - 0.6*(mSum[2]); // m: czczcz + hmM_step[0].local.at(indexCID) += m[0][0][0] - 0.6*(mSum[0]); // m: cxcxcx + hmM_step[1].local.at(indexCID) += m[0][0][1] - 0.2*(mSum[1]); // m: cxcxcy + hmM_step[2].local.at(indexCID) += m[0][0][2] - 0.2*(mSum[2]); // m: cxcxcz + hmM_step[3].local.at(indexCID) += m[0][1][0] - 0.2*(mSum[1]); // m: cxcycx + hmM_step[4].local.at(indexCID) += m[0][1][1] - 0.2*(mSum[0]); // m: cxcycy + hmM_step[5].local.at(indexCID) += m[0][1][2]; // m: cxcycz + hmM_step[6].local.at(indexCID) += m[0][2][0] - 0.2*(mSum[2]); // m: cxczcx + hmM_step[7].local.at(indexCID) += m[0][2][1]; // m: cxczcy + hmM_step[8].local.at(indexCID) += m[0][2][2] - 0.2*(mSum[0]); // m: cxczcz + + hmM_step[9].local.at(indexCID) += m[1][0][0] - 0.2*(mSum[1]); // m: cycxcx + hmM_step[10].local.at(indexCID) += m[1][0][1] - 0.2*(mSum[0]); // m: cycxcy + hmM_step[11].local.at(indexCID) += m[1][0][2]; // m: cycxcz + hmM_step[12].local.at(indexCID) += m[1][1][0] - 0.2*(mSum[0]); // m: cycycx + hmM_step[13].local.at(indexCID) += m[1][1][1] - 0.6*(mSum[1]); // m: cycycy + hmM_step[14].local.at(indexCID) += m[1][1][2] - 0.2*(mSum[2]); // m: cycycz + hmM_step[15].local.at(indexCID) += m[1][2][0]; // m: cyczcx + hmM_step[16].local.at(indexCID) += m[1][2][1] - 0.2*(mSum[2]); // m: cyczcy + hmM_step[17].local.at(indexCID) += m[1][2][2] - 0.2*(mSum[1]); // m: cyczcz + + hmM_step[18].local.at(indexCID) += m[2][0][0] - 0.2*(mSum[2]); // m: czcxcx + hmM_step[19].local.at(indexCID) += m[2][0][1]; // m: czcxcy + hmM_step[20].local.at(indexCID) += m[2][0][2] - 0.2*(mSum[0]); // m: czcxcz + hmM_step[21].local.at(indexCID) += m[2][1][0]; // m: czcycx + hmM_step[22].local.at(indexCID) += m[2][1][1] - 0.2*(mSum[2]); // m: czcycy + hmM_step[23].local.at(indexCID) += m[2][1][2] - 0.2*(mSum[1]); // m: czcycz + hmM_step[24].local.at(indexCID) += m[2][2][0] - 0.2*(mSum[0]); // m: czczcx + hmM_step[25].local.at(indexCID) += m[2][2][1] - 0.2*(mSum[1]); // m: czczcy + hmM_step[26].local.at(indexCID) += m[2][2][2] - 0.6*(mSum[2]); // m: czczcz } } } From c83fc0be5e29bb25da7be98025009aedb42f3340 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 12 Apr 2022 17:39:00 +0200 Subject: [PATCH 48/76] Implement suggested changes --- .../adapter/VectorizedCellProcessor.cpp | 8 +++++-- src/plugins/ExtendedProfileSampling.cpp | 21 +++++++++---------- src/plugins/ExtendedProfileSampling.h | 4 ++-- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/particleContainer/adapter/VectorizedCellProcessor.cpp b/src/particleContainer/adapter/VectorizedCellProcessor.cpp index 60f9c5af4f..db26911b8c 100644 --- a/src/particleContainer/adapter/VectorizedCellProcessor.cpp +++ b/src/particleContainer/adapter/VectorizedCellProcessor.cpp @@ -134,8 +134,12 @@ void VectorizedCellProcessor::endTraversal() { const int tid = mardyn_get_thread_num(); // reduce vectors and clear local variable - vcp_real_accum thread_upot = 0.0, thread_upotXpoles = 0.0; - vcp_real_accum thread_virial = 0.0, thread_virialND1 = 0.0, thread_virialND2 = 0.0, thread_myRF = 0.0; + vcp_real_accum thread_upot = 0.0; + vcp_real_accum thread_upotXpoles = 0.0; + vcp_real_accum thread_virial = 0.0; + vcp_real_accum thread_virialND1 = 0.0; + vcp_real_accum thread_virialND2 = 0.0; + vcp_real_accum thread_myRF = 0.0; load_hSum_Store_Clear(&thread_upot, _threadData[tid]->_upot6ljV); load_hSum_Store_Clear(&thread_upotXpoles, _threadData[tid]->_upotXpolesV); diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index bd94d36de5..6bc08015e6 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -24,7 +24,7 @@ void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, D _globalBoxLength[1] = domain->getGlobalLength(1); _globalBoxLength[2] = domain->getGlobalLength(2); - _numBinsGlobal = static_cast(_globalBoxLength[1]/_binwidth); + _numBinsGlobal = static_cast(_globalBoxLength[1]/_binwidth); if (_globalBoxLength[1]/_binwidth != static_cast(_numBinsGlobal)) { global_log->error() << "[ExtendedProfileSampling] Can not divide domain without remainder! Change binwidth" << std::endl; Simulation::exit(-1); @@ -43,8 +43,7 @@ void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, D resetVectors(); _cellProcessor = _simulation.getCellProcessor(); - // ??? smart pointer - _particlePairsHandler = new ParticlePairs2PotForceAdapter(*domain); + _particlePairsHandler = std::make_shared(ParticlePairs2PotForceAdapter(*domain)); // MolID is maximum possible number minus rank to prevent duplicate IDs // Always insert molecule of first component const unsigned long molID = std::numeric_limits::max() - static_cast(domainDecomp->getRank()); @@ -254,7 +253,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // Calculate drift as it is needed first for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { const double ry = pit->r(1); - const uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin + const unsigned int index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin std::vector cids = {0}; // add velocities to "all components" (0) and respective component if (!_singleComp) { cids.push_back(pit->componentid() + 1); } @@ -292,7 +291,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { const double ry = pit->r(1); - const uint16_t index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin + const unsigned int index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin const double veloCorrX = pit->v(0) - veloDrift_step_global[0].at(index); const double veloCorrY = pit->v(1) - veloDrift_step_global[1].at(index); @@ -436,7 +435,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::vector nZ(_numBinsGlobal, 0ul); unsigned long nTestGlobal {0ul}; - for (uint16_t i = 0; i < _numBinsGlobal; i++) { + for (unsigned int i = 0; i < _numBinsGlobal; i++) { // Make sure, number of test particles is never zero and number of test particles per direction is at least 1 const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMolecules_step.global.at(i))); @@ -456,10 +455,10 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // Insert particles in lattice structure and sample chem. pot. // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary - const uint16_t idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); + const unsigned int idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); double rY = regionLowCorner[1]+0.5*dY.at(idxStart); while (rY < regionHighCorner[1]) { - const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin + const unsigned int index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin double rX = regionLowCorner[0]+0.5*dX.at(idxStart); while (rX < regionHighCorner[0]) { @@ -470,7 +469,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _mTest.setr(0,rX); _mTest.setr(1,rY); _mTest.setr(2,rZ); - const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor); double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); // Global temperature of all components if (std::isfinite(chemPot)) { chemPot_step.local.at(index) += chemPot; @@ -501,12 +500,12 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double rX = regionLowCorner[0] + rnd->rnd()*regionSize[0]; const double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; const double rZ = regionLowCorner[2] + rnd->rnd()*regionSize[2]; - const uint16_t index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin + const unsigned int index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin if (temperature_step_global.at(index) > 1e-9) { _mTest.setr(0,rX); _mTest.setr(1,rY); _mTest.setr(2,rZ); - const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler, &_mTest, *_cellProcessor); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor); double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); if (std::isfinite(chemPot)) { chemPot_step.local.at(index) += chemPot; diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index a0731c4bd8..1c3a701b0f 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -54,12 +54,12 @@ class ExtendedProfileSampling : public PluginBase { unsigned long _samplefrequency {50ul}; // Auxiliary variables - uint16_t _numBinsGlobal; + unsigned int _numBinsGlobal; unsigned long _lenVector; std::array _globalBoxLength; double _slabVolume; CellProcessor* _cellProcessor; - ParticlePairsHandler* _particlePairsHandler; + std::shared_ptr _particlePairsHandler; Molecule _mTest; // Accumulated quantities over _writeFrequency per bin From d6ae1bc644735cc8bcd9f09f5e79994a8af9b41f Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 13 Apr 2022 10:25:39 +0200 Subject: [PATCH 49/76] Fix error in shared pointer in ExtendedSampling plugin --- src/longRange/Homogeneous.cpp | 6 +++--- src/plugins/ExtendedProfileSampling.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/longRange/Homogeneous.cpp b/src/longRange/Homogeneous.cpp index 8cea25f838..bee13a0250 100644 --- a/src/longRange/Homogeneous.cpp +++ b/src/longRange/Homogeneous.cpp @@ -13,11 +13,11 @@ using Log::global_log; using namespace std; Homogeneous::Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, ParticleContainer* particleContainer, Simulation* simulation) : - _cutoff(cutoffRadius), - _cutoffLJ(cutoffRadiusLJ), + _components(simulation->getEnsemble()->getComponents()), _domain(domain), _particleContainer(particleContainer), - _components(simulation->getEnsemble()->getComponents()) + _cutoff(cutoffRadius), + _cutoffLJ(cutoffRadiusLJ) {} void Homogeneous::init() { diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 6bc08015e6..f5117be331 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -43,7 +43,7 @@ void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, D resetVectors(); _cellProcessor = _simulation.getCellProcessor(); - _particlePairsHandler = std::make_shared(ParticlePairs2PotForceAdapter(*domain)); + _particlePairsHandler = std::make_shared(*domain); // MolID is maximum possible number minus rank to prevent duplicate IDs // Always insert molecule of first component const unsigned long molID = std::numeric_limits::max() - static_cast(domainDecomp->getRank()); From db559d1a81bd38a58f2f94340d2c260cda9f6625 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 18 Apr 2022 16:26:11 +0200 Subject: [PATCH 50/76] Add range specification to gamma writer --- src/io/GammaWriter.cpp | 29 ++++++++++++++++++----------- src/io/GammaWriter.h | 23 +++++++++++++++++++---- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/io/GammaWriter.cpp b/src/io/GammaWriter.cpp index 1f9443283a..9494ee8848 100644 --- a/src/io/GammaWriter.cpp +++ b/src/io/GammaWriter.cpp @@ -5,6 +5,7 @@ #include "parallel/DomainDecompBase.h" #include "Domain.h" #include "utils/xmlfileUnits.h" +#include "utils/FileUtils.h" #include @@ -13,9 +14,14 @@ using namespace std; void GammaWriter::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("writefrequency", _writeFrequency); - global_log->info() << "GammaWriter: Write frequency: " << _writeFrequency << endl; + global_log->info() << "[GammaWriter] Write frequency: " << _writeFrequency << endl; xmlconfig.getNodeValue("outputprefix", _outputPrefix); - global_log->info() << "GammaWriter: Output prefix: " << _outputPrefix << endl; + global_log->info() << "[GammaWriter] Output prefix: " << _outputPrefix << endl; + + _range.ymax = global_simulation->getDomain()->getGlobalLength(1); + xmlconfig.getNodeValue("range/ymin", _range.ymin); + xmlconfig.getNodeValue("range/ymax", _range.ymax); + global_log->info() << "[GammaWriter] Range: y: " << _range.ymin << " - " << _range.ymax << endl; } void GammaWriter::init(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain) { @@ -26,7 +32,7 @@ void GammaWriter::init(ParticleContainer *particleContainer, DomainDecompBase *d time_t now; time(&now); _gammaStream << "# mardyn MD simulation starting at " << ctime(&now) << endl; - _gammaStream << "#\tgamma" << endl; + _gammaStream << setw(24) << "simstep" << setw(24) << "gamma" << endl; } } @@ -39,9 +45,9 @@ void GammaWriter::endStep(ParticleContainer *particleContainer, DomainDecompBase for(int d = 0; d < 3; ++d) { globalLength[d] = domain->getGlobalLength(d); } - _gammaStream << simstep; + _gammaStream << FORMAT_SCI_MAX_DIGITS << simstep; for(unsigned int componentId = 0; componentId < domain->getNumberOfComponents(); ++componentId){ - _gammaStream << "\t" << getGamma(componentId, globalLength)/_writeFrequency; + _gammaStream << FORMAT_SCI_MAX_DIGITS << getGamma(componentId, globalLength)/_writeFrequency; } _gammaStream << endl; resetGamma(); @@ -65,7 +71,7 @@ double GammaWriter::getGamma(unsigned id, double globalLength[3]){ void GammaWriter::calculateGamma(ParticleContainer* particleContainer, DomainDecompBase* domainDecom){ unsigned numComp = _simulation.getEnsemble()->getComponents()->size(); - std::vector _localGamma(numComp, 0.0); + std::vector localGamma(numComp, 0.0); #if defined(_OPENMP) #pragma omp parallel @@ -76,7 +82,8 @@ void GammaWriter::calculateGamma(ParticleContainer* particleContainer, DomainDec for (auto tempMol = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); tempMol.isValid(); ++tempMol) { - if (particleContainer->isInBoundingBox(tempMol->r_arr().data())) { + // Only for particles within range + if ((tempMol->r(1) - _range.ymax)*(tempMol->r(1) - _range.ymax) <= 0) { unsigned cid = tempMol->componentid(); localGamma_thread[cid] += tempMol->Vi(1) - 0.5 * (tempMol->Vi(0) + tempMol->Vi(2)); } @@ -87,21 +94,21 @@ void GammaWriter::calculateGamma(ParticleContainer* particleContainer, DomainDec #endif { for (unsigned i = 0; i < numComp; ++i) { - _localGamma[i] += localGamma_thread[i]; + localGamma[i] += localGamma_thread[i]; } } } domainDecom->collCommInit(numComp); for (unsigned i=0; icollCommAppendDouble(_localGamma[i]); + domainDecom->collCommAppendDouble(localGamma[i]); } domainDecom->collCommAllreduceSum(); for (unsigned i=0; icollCommGetDouble(); + localGamma[i] = domainDecom->collCommGetDouble(); } domainDecom->collCommFinalize(); for (unsigned i=0; i - INTEGER - STRING + + INTEGER + STRING + + DOUBLE + DOUBLE + \endcode */ @@ -57,6 +68,10 @@ class GammaWriter : public PluginBase { unsigned long _writeFrequency; std::string _outputPrefix; //!< prefix the output file std::map _Gamma; //!< Surface tension component wise + + struct Range { + double ymin, ymax; + } _range; }; #endif // SRC_IO_GAMMAWRITER_H_ From f208b492fbd53fa4db04add3a98ecc10e8196a73 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 18 Apr 2022 17:05:07 +0200 Subject: [PATCH 51/76] Fixes in GammaWriter and sampling of all components as one --- src/io/GammaWriter.cpp | 167 +++++++++++++++++++++-------------------- src/io/GammaWriter.h | 95 +++++++++++------------ 2 files changed, 135 insertions(+), 127 deletions(-) diff --git a/src/io/GammaWriter.cpp b/src/io/GammaWriter.cpp index 9494ee8848..f5fc44537b 100644 --- a/src/io/GammaWriter.cpp +++ b/src/io/GammaWriter.cpp @@ -18,97 +18,104 @@ void GammaWriter::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("outputprefix", _outputPrefix); global_log->info() << "[GammaWriter] Output prefix: " << _outputPrefix << endl; - _range.ymax = global_simulation->getDomain()->getGlobalLength(1); - xmlconfig.getNodeValue("range/ymin", _range.ymin); - xmlconfig.getNodeValue("range/ymax", _range.ymax); - global_log->info() << "[GammaWriter] Range: y: " << _range.ymin << " - " << _range.ymax << endl; + _range.ymax = global_simulation->getDomain()->getGlobalLength(1); + xmlconfig.getNodeValue("range/ymin", _range.ymin); + xmlconfig.getNodeValue("range/ymax", _range.ymax); + global_log->info() << "[GammaWriter] Range: y: " << _range.ymin << " - " << _range.ymax << endl; } -void GammaWriter::init(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain) { - if(domainDecomp->getRank() == 0){ - string resultfilename(_outputPrefix + ".gamma"); - _gammaStream.open(resultfilename); - _gammaStream.precision(6); - time_t now; - time(&now); - _gammaStream << "# mardyn MD simulation starting at " << ctime(&now) << endl; - _gammaStream << setw(24) << "simstep" << setw(24) << "gamma" << endl; - } +void GammaWriter::init(ParticleContainer */* particleContainer */, DomainDecompBase *domainDecomp, Domain *domain) { + if(domainDecomp->getRank() == 0){ + string resultfilename(_outputPrefix + ".dat"); + _gammaStream.open(resultfilename); + _gammaStream.precision(6); + time_t now; + time(&now); + _gammaStream << "# mardyn MD simulation starting at " << ctime(&now) << endl; + _gammaStream << setw(24) << "simstep"; + for(unsigned int componentId = 0; componentId < domain->getNumberOfComponents() + 1; ++componentId) { + _gammaStream << setw(22) << "gamma[" << componentId << "]"; + } + _gammaStream << endl; + _gammaStream.close(); + } } void GammaWriter::endStep(ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain, unsigned long simstep) { - calculateGamma(particleContainer, domainDecomp); - if((domainDecomp->getRank() == 0) && (simstep % _writeFrequency == 0)){ - double globalLength[3]; - for(int d = 0; d < 3; ++d) { - globalLength[d] = domain->getGlobalLength(d); - } - _gammaStream << FORMAT_SCI_MAX_DIGITS << simstep; - for(unsigned int componentId = 0; componentId < domain->getNumberOfComponents(); ++componentId){ - _gammaStream << FORMAT_SCI_MAX_DIGITS << getGamma(componentId, globalLength)/_writeFrequency; - } - _gammaStream << endl; - resetGamma(); - } + calculateGamma(particleContainer, domainDecomp); + + // Rank 0 writes data to file; write every __writeFrequency steps; do not write data directly after (re)start + if((domainDecomp->getRank() == 0) && (simstep % _writeFrequency == 0) && (simstep > global_simulation->getNumInitTimesteps())) { + string resultfilename(_outputPrefix + ".dat"); + double globalLength[3]; + for(int d = 0; d < 3; ++d) { + globalLength[d] = domain->getGlobalLength(d); + } + _gammaStream.open(resultfilename, std::ios::app); + _gammaStream << FORMAT_SCI_MAX_DIGITS << simstep; + for(unsigned int componentId = 0; componentId < domain->getNumberOfComponents() + 1; ++componentId) { + _gammaStream << FORMAT_SCI_MAX_DIGITS << getGamma(componentId, globalLength)/_writeFrequency; + } + _gammaStream << endl; + _gammaStream.close(); + resetGamma(domain); + } } -void GammaWriter::finish(ParticleContainer * /*particleContainer*/, - DomainDecompBase * /*domainDecomp*/, Domain * /*domain*/){ - _gammaStream.close(); +void GammaWriter::resetGamma(Domain *domain) { + for(unsigned componentId = 0; componentId < domain->getNumberOfComponents() + 1; ++componentId) { + _Gamma[componentId] = 0; + } } -void GammaWriter::resetGamma() { - for(unsigned componentId = 0; componentId < _simulation.getEnsemble()->getComponents()->size(); ++componentId) { - _Gamma[componentId] = 0; - } +double GammaWriter::getGamma(unsigned id, double globalLength[3]) { + return (_Gamma[id]/(2*globalLength[0]*globalLength[2])); } -double GammaWriter::getGamma(unsigned id, double globalLength[3]){ - return (_Gamma[id]/(2*globalLength[0]*globalLength[2])); -} - -void GammaWriter::calculateGamma(ParticleContainer* particleContainer, DomainDecompBase* domainDecom){ - unsigned numComp = _simulation.getEnsemble()->getComponents()->size(); - std::vector localGamma(numComp, 0.0); - - #if defined(_OPENMP) - #pragma omp parallel - #endif - { - - std::vector localGamma_thread(numComp, 0.0); - - for (auto tempMol = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); tempMol.isValid(); ++tempMol) { - - // Only for particles within range - if ((tempMol->r(1) - _range.ymax)*(tempMol->r(1) - _range.ymax) <= 0) { - unsigned cid = tempMol->componentid(); - localGamma_thread[cid] += tempMol->Vi(1) - 0.5 * (tempMol->Vi(0) + tempMol->Vi(2)); - } - } - - #if defined(_OPENMP) - #pragma omp critical - #endif - { - for (unsigned i = 0; i < numComp; ++i) { - localGamma[i] += localGamma_thread[i]; - } - } - } - - domainDecom->collCommInit(numComp); - for (unsigned i=0; icollCommAppendDouble(localGamma[i]); - } - domainDecom->collCommAllreduceSum(); - for (unsigned i=0; icollCommGetDouble(); - } - domainDecom->collCommFinalize(); - for (unsigned i=0; igetComponents()->size() + 1; // 0 stands for all components + std::vector localGamma(numComp, 0.0); + + #if defined(_OPENMP) + #pragma omp parallel + #endif + { + + std::vector localGamma_thread(numComp, 0.0); + + for (auto tempMol = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); tempMol.isValid(); ++tempMol) { + + // Only for particles within range + if ((tempMol->r(1) - _range.ymax)*(tempMol->r(1) - _range.ymin) <= 0) { + const unsigned cid = tempMol->componentid(); + const double gamma = tempMol->Vi(1) - 0.5 * (tempMol->Vi(0) + tempMol->Vi(2)); + localGamma_thread[cid] += gamma; + localGamma_thread[0] += gamma; // 0 is component-independent value + } + } + + #if defined(_OPENMP) + #pragma omp critical + #endif + { + for (unsigned i = 0; i < numComp; ++i) { + localGamma[i] += localGamma_thread[i]; + } + } + } + + domainDecom->collCommInit(numComp); + for (unsigned i=0; icollCommAppendDouble(localGamma[i]); + } + domainDecom->collCommAllreduceSum(); + for (unsigned i=0; icollCommGetDouble(); + } + domainDecom->collCommFinalize(); + for (unsigned i=0; i - INTEGER - STRING - - DOUBLE - DOUBLE - - - \endcode - */ - void readXML(XMLfileUnits& xmlconfig); - //! @todo comment - void init(ParticleContainer *particleContainer, - DomainDecompBase *domainDecomp, Domain *domain); - //! @todo comment - void endStep( + /** @brief Read in XML configuration for GammaWriter. + * + * The following xml object structure is handled by this method: + * \code{.xml} + + INTEGER + STRING + + DOUBLE + DOUBLE + + + \endcode + */ + void readXML(XMLfileUnits& xmlconfig) override; + + // Initialization of output file + void init(ParticleContainer */* particleContainer */, + DomainDecompBase *domainDecomp, Domain *domain) override; + + // Calculation of surface tension and, if applicable, output to file takes place in endStep() + void endStep( ParticleContainer *particleContainer, DomainDecompBase *domainDecomp, Domain *domain, unsigned long simstep - ); - //! @todo comment - void finish(ParticleContainer *particleContainer, - DomainDecompBase *domainDecomp, Domain *domain); - - std::string getPluginName() { - return std::string("GammaWriter"); - } - static PluginBase* createInstance() { return new GammaWriter(); } + ) override; + + void finish(ParticleContainer *particleContainer, + DomainDecompBase *domainDecomp, Domain *domain) override {} + + std::string getPluginName() override { return "GammaWriter"; } + static PluginBase* createInstance() { return new GammaWriter(); } private: - void calculateGamma(ParticleContainer* particleContainer, DomainDecompBase* domainDecom); - double getGamma(unsigned id, double globalLength[3]); - void resetGamma(); + void calculateGamma(ParticleContainer *particleContainer, DomainDecompBase *domainDecom); + double getGamma(unsigned id, double globalLength[3]); + void resetGamma(Domain *domain); - std::ofstream _gammaStream; - unsigned long _writeFrequency; - std::string _outputPrefix; //!< prefix the output file - std::map _Gamma; //!< Surface tension component wise + std::ofstream _gammaStream; + unsigned long _writeFrequency; + std::string _outputPrefix; //!< prefix the output file + std::map _Gamma; //!< Surface tension component wise; 0 represents all components - struct Range { - double ymin, ymax; - } _range; + // Range within particles are considered for calculation of surface tension + struct Range { + double ymin, ymax; + } _range; }; #endif // SRC_IO_GAMMAWRITER_H_ From 51c5dfc846991b04157687f338e46c631c8fcea4 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 18 Apr 2022 18:50:35 +0200 Subject: [PATCH 52/76] Fix in MettDeamon and EPS regarding output --- src/plugins/ExtendedProfileSampling.cpp | 22 +++++++++++----------- src/plugins/NEMD/MettDeamon.cpp | 6 ++++-- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index f5117be331..855c7ccb3b 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -630,16 +630,16 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _countSamples.at(i)++; if (_sampleHigherMoms) { - _hmDelta_accum.at(i) += hmDelta_step.global.at(i) / numMols; + _hmDelta_accum.at(i) += hmDelta_step.global.at(i) / _slabVolume; for (unsigned short d = 0; d < 3; d++) { - _hmHeatflux_accum[d].at(i) += hmHeatflux_step[d].global.at(i) / numMols; + _hmHeatflux_accum[d].at(i) += hmHeatflux_step[d].global.at(i) / _slabVolume; } for (unsigned short d = 0; d < 9; d++) { - _hmPressure_accum[d].at(i) += hmPressure_step[d].global.at(i) / numMols; - _hmR_accum[d].at(i) += hmR_step[d].global.at(i) / numMols; - _hmM_accum[d].at(i) += hmM_step[d].global.at(i) / numMols; - _hmM_accum[d+9].at(i) += hmM_step[d+9].global.at(i) / numMols; - _hmM_accum[d+18].at(i) += hmM_step[d+18].global.at(i) / numMols; + _hmPressure_accum[d].at(i) += hmPressure_step[d].global.at(i) / _slabVolume; + _hmR_accum[d].at(i) += hmR_step[d].global.at(i) / _slabVolume; + _hmM_accum[d].at(i) += hmM_step[d].global.at(i) / _slabVolume; + _hmM_accum[d+9].at(i) += hmM_step[d+9].global.at(i) / _slabVolume; + _hmM_accum[d+18].at(i) += hmM_step[d+18].global.at(i) / _slabVolume; } } } @@ -776,22 +776,22 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, for (unsigned long cid = 0; cid < numOutputs; cid++) { ofs << setw(22) << "delta["<" << endl; ofs << "" << endl; @@ -991,7 +992,8 @@ void MettDeamon::logReleasedVelocities() // construct filename std::stringstream fnamestream; - fnamestream << "MettDeamon_released_vel_movdir-" << _nMovingDirection << "_TS" << fill_width('0', 9) << simstep << "_p" << nRank << ".dat"; + const std::string fname = "MettDeamon_released_vel_movdir-"+std::to_string(_nMovingDirection); + fnamestream << fname << "_TS" << fill_width('0', 9) << simstep << "_p" << nRank << ".dat"; std::ofstream ofs(fnamestream.str().c_str(), std::ios::out); ofs << " vx" << " vy" << " vz" << std::endl; From 718687fe4884ee3b3eb2c9e5abee957287cfb1dc Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 5 May 2022 12:29:53 +0200 Subject: [PATCH 53/76] Add method to get upot correction per molecule; Fixes --- src/Simulation.h | 3 + src/io/GammaWriter.h | 6 +- src/longRange/Homogeneous.cpp | 11 ++- src/longRange/Homogeneous.h | 15 ++- src/longRange/LongRangeCorrection.h | 12 +-- src/longRange/NoLRC.h | 13 ++- src/longRange/Planar.cpp | 5 +- src/longRange/Planar.h | 6 +- src/plugins/ExtendedProfileSampling.cpp | 93 ++++++++++++++----- src/plugins/ExtendedProfileSampling.h | 4 + .../NEMD/MettDeamonFeedrateDirector.cpp | 6 +- 11 files changed, 117 insertions(+), 57 deletions(-) diff --git a/src/Simulation.h b/src/Simulation.h index a81ea891c6..2e63a6e3de 100644 --- a/src/Simulation.h +++ b/src/Simulation.h @@ -225,6 +225,9 @@ class Simulation { /** Get pointer to the molecule container */ ParticleContainer* getMoleculeContainer() { return _moleculeContainer; } + /** Get pointer to longrange correction */ + LongRangeCorrection* getLongRangeCorrection() { return _longRangeCorrection; } + /** Set the number of time steps to be performed in the simulation */ void setNumTimesteps( unsigned long steps ) { _numberOfTimesteps = steps; } /** Get the number of time steps to be performed in the simulation */ diff --git a/src/io/GammaWriter.h b/src/io/GammaWriter.h index b12d2808c9..5e6b3e8a64 100644 --- a/src/io/GammaWriter.h +++ b/src/io/GammaWriter.h @@ -32,9 +32,9 @@ class GammaWriter : public PluginBase { * \code{.xml} INTEGER - STRING - - DOUBLE + STRING + + DOUBLE DOUBLE diff --git a/src/longRange/Homogeneous.cpp b/src/longRange/Homogeneous.cpp index bee13a0250..baa16dac4e 100644 --- a/src/longRange/Homogeneous.cpp +++ b/src/longRange/Homogeneous.cpp @@ -143,7 +143,8 @@ void Homogeneous::calculateLongRange() { // Pot. energy and virial are also stored in molecule class // To maintain continuity (sum of U over N == U_global_domain), the correction values are added to each molecule // For the virial, the correction is distributed equally to the diagonal elements - const double uPotCorrPerMol = upotCorr/globalNumMolecules; + // NOTE: UPotCorr may need some sophistication as correction could depend on component + _uPotCorrPerMol = upotCorr/globalNumMolecules; const double virialCorrPerMol[9] = { virialCorr/(3.*globalNumMolecules), // rxfx virialCorr/(3.*globalNumMolecules), // ryfy @@ -157,10 +158,16 @@ void Homogeneous::calculateLongRange() { }; for (auto tempMol = _particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); tempMol.isValid(); ++tempMol) { tempMol->Viadd(virialCorrPerMol); - tempMol->Uadd(uPotCorrPerMol); + tempMol->Uadd(_uPotCorrPerMol); } } +double Homogeneous::getUpotCorr(Molecule* /* mol */) { + // unsigned int cid = mol->componentid(); + // TODO: May need some sophistication as correction could depend on component + return _uPotCorrPerMol; +} + double Homogeneous::_TICCu(int n, double rc, double sigma2) { return -pow(rc, 2 * n + 3) / (pow(sigma2, n) * (2 * n + 3)); } diff --git a/src/longRange/Homogeneous.h b/src/longRange/Homogeneous.h index 42a3799238..ac4ce6c8a9 100644 --- a/src/longRange/Homogeneous.h +++ b/src/longRange/Homogeneous.h @@ -16,12 +16,15 @@ class Homogeneous: public LongRangeCorrection{ public: Homogeneous(double cutoffRadius, double cutoffRadiusLJ, Domain* domain, ParticleContainer* particleContainer, Simulation* simulation); - virtual ~Homogeneous() {} + ~Homogeneous() override = default; - virtual void init(); - virtual void readXML(XMLfileUnits& xmlconfig) {} - virtual void calculateLongRange(); - virtual void writeProfiles(DomainDecompBase* domainDecomp, Domain* domain, unsigned long simstep) {} + void init() override; + void readXML(XMLfileUnits& xmlconfig) override {} + void calculateLongRange() override; + void writeProfiles(DomainDecompBase* domainDecomp, Domain* domain, unsigned long simstep) override {} + + // Get potential energy correction per molecule + double getUpotCorr(Molecule* /* mol */) override; private: /* TODO: Comments on all the functions */ @@ -41,6 +44,8 @@ class Homogeneous: public LongRangeCorrection{ Domain* _domain{nullptr}; ParticleContainer* _particleContainer{nullptr}; + double _uPotCorrPerMol; // Correction of potential energy per particle + double _cutoff{std::numeric_limits::quiet_NaN()}; double _cutoffLJ{std::numeric_limits::quiet_NaN()}; diff --git a/src/longRange/LongRangeCorrection.h b/src/longRange/LongRangeCorrection.h index 8031327fed..44251976fa 100644 --- a/src/longRange/LongRangeCorrection.h +++ b/src/longRange/LongRangeCorrection.h @@ -6,8 +6,6 @@ class Domain; class DomainDecompBase; -//class Planar; -//class Homogeneous; class XMLfileUnits; class LongRangeCorrection{ @@ -18,13 +16,9 @@ class LongRangeCorrection{ virtual void readXML(XMLfileUnits& xmlconfig) = 0; virtual void calculateLongRange() = 0; virtual void writeProfiles(DomainDecompBase* domainDecomp, Domain* domain, unsigned long simstep) = 0; -/* -private: - unsigned _type; - Planar* _planar; - Homogeneous* _homogen; -*/ - + + // Get potential energy correction per molecule + virtual double getUpotCorr(Molecule* /* mol */) = 0; }; #endif /* __LONGRANGECORRECTION_H__ */ diff --git a/src/longRange/NoLRC.h b/src/longRange/NoLRC.h index bad1e0a408..ffb636cef4 100644 --- a/src/longRange/NoLRC.h +++ b/src/longRange/NoLRC.h @@ -20,15 +20,18 @@ class NoLRC: public LongRangeCorrection{ NoLRC(double /* cutoffRadius */, double /* cutoffRadiusLJ */, Domain* domain, Simulation* /* simulation */) { _domain = domain; }; - virtual ~NoLRC() {} + ~NoLRC() override = default; - virtual void init() { global_log->info() << "No long range correction is used: UpotCorr = VirialCorr = 0" << std::endl; } - virtual void readXML(XMLfileUnits& /* xmlconfig */) {} - virtual void calculateLongRange() { + void init() override { global_log->info() << "No long range correction is used: UpotCorr = VirialCorr = 0" << std::endl; } + void readXML(XMLfileUnits& /* xmlconfig */) {} + void calculateLongRange() { _domain->setUpotCorr(0.); _domain->setVirialCorr(0.); }; - virtual void writeProfiles(DomainDecompBase* /* domainDecomp */, Domain* /* domain */, unsigned long /* simstep */) {} + void writeProfiles(DomainDecompBase* /* domainDecomp */, Domain* /* domain */, unsigned long /* simstep */) {} + + // Get potential energy correction per molecule + double getUpotCorr(Molecule* /* mol */) override { return 0.0; }; private: Domain* _domain; diff --git a/src/longRange/Planar.cpp b/src/longRange/Planar.cpp index a874a4b5a6..219dc38812 100644 --- a/src/longRange/Planar.cpp +++ b/src/longRange/Planar.cpp @@ -34,9 +34,6 @@ Planar::Planar(double /*cutoffT*/, double cutoffLJ, Domain* domain, DomainDecomp numComp=0; } -Planar::~Planar() { -} - void Planar::init() { global_log->info() << "[Long Range Correction] Initializing" << endl; @@ -1138,7 +1135,7 @@ void Planar::dipoleDipole(unsigned ci,unsigned cj,unsigned si,unsigned sj){ } } -double Planar::lrcLJ(Molecule* mol){ +double Planar::getUpotCorr(Molecule* mol){ double potentialEnergy = 0.; unsigned cid=mol->componentid(); for (unsigned i=0; i @@ -64,7 +65,29 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { xmlconfig.getNodeValue("chemicalpotential/factorNumTest", _factorNumTest); xmlconfig.getNodeValue("chemicalpotential/samplefrequency", _samplefrequency); - string insMethod; + std::string strCids; + if (xmlconfig.getNodeValue("chemicalpotential/cids", strCids)) { + // Parse string of comma-separated values into vector + std::stringstream ssCids(strCids); + const unsigned int numComps = _simulation.getDomain()->getNumberOfComponents(); + for (unsigned int i; ssCids >> i;) { + _cidsTest.push_back(i); + if (ssCids.peek() == ',' || ssCids.peek() == ' ') { + ssCids.ignore(); + } else if ((i <= 0) || (i > numComps)) { + global_log->warning() << "[ExtendedProfileSampling] cid " << i << " is not valid! cids must be between 1 and " << numComps << std::endl; + } + + } + } else { + _cidsTest.push_back(1); // Default + } + + for (auto cid : _cidsTest) { + cout << cid << endl; + } + + std::string insMethod; if (_lattice) { insMethod = "in a lattice"; } else { @@ -78,10 +101,14 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { if (_sampleChemPot) { global_log->info() << "[ExtendedProfileSampling] Sampling of chemical potential enabled with a sampling frequency of " << _samplefrequency << std::endl; global_log->info() << "[ExtendedProfileSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; + global_log->info() << "[ExtendedProfileSampling] Inserting particles with cids = " << strCids << std::endl; if (_samplefrequency > _writeFrequency) { global_log->warning() << "[ExtendedProfileSampling] Sample frequency (" << _samplefrequency << ") is greater than write frequency (" << _writeFrequency << ")! " << std::endl; } + if ((_cidsTest.size() > 1) and (_singleComp)) { + global_log->warning() << "[ExtendedProfileSampling] and set!" << std::endl; + } } } @@ -93,7 +120,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } // Do not write or sample data directly after (re)start in the first step - if ( simstep == global_simulation->getNumInitTimesteps() ) { + if ( simstep == _simulation.getNumInitTimesteps() ) { return; } @@ -469,16 +496,25 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _mTest.setr(0,rX); _mTest.setr(1,rY); _mTest.setr(2,rZ); - const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor); - double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); // Global temperature of all components - if (std::isfinite(chemPot)) { - chemPot_step.local.at(index) += chemPot; - countNTest_step.local.at(index)++; + for (auto cid : _cidsTest) { + const uint32_t indexCID = cid*_numBinsGlobal + index; + _mTest.setComponent(&(_simulation.getEnsemble()->getComponents()->at(cid-1))); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor) + + _simulation.getLongRangeCorrection()->getUpotCorr(&_mTest); + double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); // Global temperature of all components + if (std::isfinite(chemPot)) { + chemPot_step.local.at(indexCID) += chemPot; + countNTest_step.local.at(indexCID)++; + // For component 0 (single component) + chemPot_step.local.at(index) += chemPot; + countNTest_step.local.at(index)++; #ifndef NDEBUG - std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " - << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) - << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; + std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; cid = " << _mTest.componentid() + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; #endif + } } } rZ += dZ.at(index); @@ -490,7 +526,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } else { // Random insertion // NOTE: This differs from the lattice method as it does not take the local density into account - Random* rnd = new Random(); + std::unique_ptr rnd(new Random()); // Share of volume of present rank from whole domain const float domainShare = (regionSize[0]*regionSize[1]*regionSize[2])/(_globalBoxLength[0]*_globalBoxLength[1]*_globalBoxLength[2]); @@ -505,16 +541,25 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _mTest.setr(0,rX); _mTest.setr(1,rY); _mTest.setr(2,rZ); - const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor); - double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); - if (std::isfinite(chemPot)) { - chemPot_step.local.at(index) += chemPot; - countNTest_step.local.at(index)++; - #ifndef NDEBUG - std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " - << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) - << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; - #endif + for (auto cid : _cidsTest) { + const uint32_t indexCID = cid*_numBinsGlobal + index; + _mTest.setComponent(&(_simulation.getEnsemble()->getComponents()->at(cid-1))); + const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor) + + _simulation.getLongRangeCorrection()->getUpotCorr(&_mTest); + double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); + if (std::isfinite(chemPot)) { + chemPot_step.local.at(indexCID) += chemPot; + countNTest_step.local.at(indexCID)++; + // For component 0 (single component) + chemPot_step.local.at(index) += chemPot; + countNTest_step.local.at(index)++; + #ifndef NDEBUG + std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " + << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) + << " ; cid = " << _mTest.componentid() + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; + #endif + } } } } @@ -717,8 +762,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ekin = _ekin_accum.at(i) /_countSamples.at(i); epot = _epot_accum.at(i) /_countSamples.at(i); p = _pressure_accum.at(i) /_countSamples.at(i); - chemPot_res = _chemPot_accum.at(i) /_countSamples.at(i); - numTest = static_cast(_countNTest_accum.at(i))/_countSamples.at(i); T_x = _temperatureVect_accum[0].at(i)/_countSamples.at(i); T_y = _temperatureVect_accum[1].at(i)/_countSamples.at(i); T_z = _temperatureVect_accum[2].at(i)/_countSamples.at(i); @@ -733,8 +776,8 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, jEF_z = _energyfluxVect_accum[2].at(i) /_countSamples.at(i); numSamples = _countSamples.at(i); } - if ((_chemPot_accum.at(i) > 0.0) and (_countNTest_accum.at(i) > 0ul) and (_countSamples.at(i) > 0ul)) { - numTest = _countNTest_accum.at(i)/_countSamples.at(i); + if ((_chemPot_accum.at(i) > 0.0) and (_countNTest_accum.at(i) > 0ul)) { + numTest = static_cast(_countNTest_accum.at(i)*_samplefrequency) / _writeFrequency; chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); } ofs << FORMAT_SCI_MAX_DIGITS << numMolsPerStep diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index 1c3a701b0f..1378f934dc 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -18,6 +18,7 @@ * Plugin: can be enabled via config.xml
    * * Samples residual chemical potential binwise in y-direction for the LJTS fluid (pot. energy corrections not implemented!) using the Widom insertion method +* TODO for general case: Rotation in kin. Temperatur; Upot correction for getEnergy; multi component chem pot; * \code{.xml} * * FLOAT @@ -30,6 +31,7 @@ BOOL FLOAT INT + INT,INT,INT,...
    * * \endcode @@ -52,6 +54,8 @@ class ExtendedProfileSampling : public PluginBase { bool _lattice {true}; float _factorNumTest {4.0f}; unsigned long _samplefrequency {50ul}; + // Vector of components to be inserted during chem. pot. sampling; starting at 1 + std::vector _cidsTest; // Auxiliary variables unsigned int _numBinsGlobal; diff --git a/src/plugins/NEMD/MettDeamonFeedrateDirector.cpp b/src/plugins/NEMD/MettDeamonFeedrateDirector.cpp index c0ec34b651..f77443a37c 100644 --- a/src/plugins/NEMD/MettDeamonFeedrateDirector.cpp +++ b/src/plugins/NEMD/MettDeamonFeedrateDirector.cpp @@ -152,7 +152,9 @@ void MettDeamonFeedrateDirector::beforeForces( { _updateControl.sampledTimestepCount = 0; // reset sampling control this->calcFeedrate(mettDeamon); + cout << domainDecomp->getRank() << " 1new feedrate " << _feedrate.avg << endl; mettDeamon->setActualFeedrate(_feedrate.avg); + cout << domainDecomp->getRank() << " 2new feedrate " << _feedrate.avg << endl; } // Write out restart information @@ -194,7 +196,7 @@ void MettDeamonFeedrateDirector::calcFeedrate(MettDeamon* mettDeamon) double dInvNumvals = 1./static_cast(_feedrate.list.size()); _feedrate.avg = _feedrate.sum * dInvNumvals; -#ifndef NDEBUG +// #ifndef NDEBUG cout << "[MDFD] Rank: " << domainDecomp.getRank() << " : feedrate.list: "; for (std::list::iterator it=_feedrate.list.begin(); it != _feedrate.list.end(); ++it) std::cout << " " << *it; @@ -206,7 +208,7 @@ void MettDeamonFeedrateDirector::calcFeedrate(MettDeamon* mettDeamon) cout << "[MDFD] Rank: " << domainDecomp.getRank() << " : _feedrate.sum=" << _feedrate.sum << endl; cout << "[MDFD] Rank: " << domainDecomp.getRank() << " : _feedrate.avg=" << _feedrate.avg << endl; cout << "[MDFD] Rank: " << domainDecomp.getRank() << " : mettDeamon->getInvDensityArea()=" << mettDeamon->getInvDensityArea() << endl; -#endif +// #endif } void MettDeamonFeedrateDirector::resetLocalValues() From 8f6ed7937a1b44bd35f0bfc8ed303335d8d86536 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 25 May 2022 15:17:12 +0200 Subject: [PATCH 54/76] Add documentation of ExtendedProfileSampling plugin --- doc/Plugins_Summary.dox | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Plugins_Summary.dox b/doc/Plugins_Summary.dox index dcf205077e..d02532382b 100644 --- a/doc/Plugins_Summary.dox +++ b/doc/Plugins_Summary.dox @@ -21,7 +21,8 @@ DriftCtrl | drift, hydrodynamic velocity, control, region | Control the drift or Dropaccelerator | utility for droplet simulations | Speeds up particles that are located within a specified spherical region at a given point in time to a desired veloctiy. The time frame for the acceleration may also be specified. Dropaligner | utility for droplet simulations | aligns the center of mass of particles within a spherical region with a specified center of mass in a similar fashion as the COMaligner. Used to hold a spherical droplet in position. EnergyLogWriter | print, file, thermodynamic macroscopic quantities | Write the global N, U_pot, U_kin, U_kinTrans, U_kinRot, T, p to file. Duplication with ResultWriter? -ExamplePlugin | example, sample, illustrate, usage | Print user-specifed text at a user-specified position in the code. +ExamplePlugin | example, sample, illustrate, usage | Print user-specifed text at a user-specified position in the code. +ExtendedProfileSampling | sampling, sample, profiles | Sample several regular quantities, e.g. temperature and density, besides more exotic quantities, e.g. chemical potential and energy flux, in spatially resolved profiles along the y-axis. ExtractPhase | extract, phase, interface, vapor-liquid equilibrium (VLE), local density | Extracts the liquid phase from a vapor-liquid equilibrium (VLE) simulation by evaluating the local density surrounding individual particles. FixRegion | todo | Fixes particles within a cuboid region to their respective positions. Fixed particles still exert forces onto other particles but they do not move. FlopRateWriter | performance, FLOP/sec | Calculate the floating point operations per second at which the simulation runs. Only FLOPs in the force calculation are calculated. From d115261f472ff9d44e0768aa537845cf61ab3be7 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 2 Jun 2022 18:40:22 +0200 Subject: [PATCH 55/76] Add unit test for ExtendedSampling plugin and fix some warnings --- src/longRange/Homogeneous.h | 1 - src/molecules/potforce.h | 20 +- src/plugins/ExtendedProfileSampling.cpp | 329 +- src/plugins/ExtendedProfileSampling.h | 35 +- .../tests/ExtendedProfileSamplingTest.cpp | 70 + .../tests/ExtendedProfileSamplingTest.h | 33 + test_input/LJTS2-5_equilibrated.inp | 4011 +++++++++++++++++ 7 files changed, 4350 insertions(+), 149 deletions(-) create mode 100755 src/plugins/tests/ExtendedProfileSamplingTest.cpp create mode 100755 src/plugins/tests/ExtendedProfileSamplingTest.h create mode 100644 test_input/LJTS2-5_equilibrated.inp diff --git a/src/longRange/Homogeneous.h b/src/longRange/Homogeneous.h index ac4ce6c8a9..23177ac294 100644 --- a/src/longRange/Homogeneous.h +++ b/src/longRange/Homogeneous.h @@ -11,7 +11,6 @@ class Simulation; class Domain; class LongRangeCorrection; -//class Homogeneous:public LongRangeCorrection{ class Homogeneous: public LongRangeCorrection{ public: diff --git a/src/molecules/potforce.h b/src/molecules/potforce.h index 6c15783ac9..b4e61ddf2c 100644 --- a/src/molecules/potforce.h +++ b/src/molecules/potforce.h @@ -326,7 +326,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; ++d) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3u*d+e] += drm[d] * f[e]; } } } @@ -360,7 +360,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3u*d+e] += drm[d] * f[e]; } } } @@ -382,7 +382,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3u*d+e] += drm[d] * f[e]; } } } @@ -404,7 +404,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3u*d+e] += drm[d] * f[e]; } } } @@ -430,7 +430,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] -= drm[d] * f[e]; + virialAll[3u*d+e] -= drm[d] * f[e]; } } } @@ -454,7 +454,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; ++d) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3u*d+e] += drm[d] * f[e]; } } } @@ -478,7 +478,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] -= drm[d] * f[e]; + virialAll[3u*d+e] -= drm[d] * f[e]; } } } @@ -503,7 +503,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; d++) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] -= drm[d] * f[e]; + virialAll[3u*d+e] -= drm[d] * f[e]; } } } @@ -527,7 +527,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; ++d) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3u*d+e] += drm[d] * f[e]; } } } @@ -552,7 +552,7 @@ inline void PotForce(Molecule& mi, Molecule& mj, ParaStrm& params, double drm[3] for (unsigned short d = 0; d < 3; ++d) { for (unsigned e = 0; e < 3; ++e) { - virialAll[3*d+e] += drm[d] * f[e]; + virialAll[3u*d+e] += drm[d] * f[e]; } } } diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index da265650a3..a04803fe72 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -7,6 +7,11 @@ #include "ExtendedProfileSampling.h" +#include +#include +#include +#include + #include "particleContainer/ParticleContainer.h" #include "particleContainer/adapter/ParticlePairs2PotForceAdapter.h" #include "utils/Random.h" @@ -14,8 +19,6 @@ #include "Simulation.h" #include "longRange/LongRangeCorrection.h" -#include - ExtendedProfileSampling::ExtendedProfileSampling() {} @@ -37,8 +40,10 @@ void ExtendedProfileSampling::init(ParticleContainer* /* particleContainer */, D Simulation::exit(-1); } + _numComps = domain->getNumberOfComponents(); + // Entry per component and bin; 0 represents all components combined - _lenVector = (_singleComp) ? _numBinsGlobal : _numBinsGlobal * (domain->getNumberOfComponents()+1); + _lenVector = (_singleComp) ? _numBinsGlobal : _numBinsGlobal * (_numComps+1); resizeVectors(); resetVectors(); @@ -69,24 +74,18 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { if (xmlconfig.getNodeValue("chemicalpotential/cids", strCids)) { // Parse string of comma-separated values into vector std::stringstream ssCids(strCids); - const unsigned int numComps = _simulation.getDomain()->getNumberOfComponents(); for (unsigned int i; ssCids >> i;) { - _cidsTest.push_back(i); + _cidsTest.push_back(i); if (ssCids.peek() == ',' || ssCids.peek() == ' ') { ssCids.ignore(); - } else if ((i <= 0) || (i > numComps)) { - global_log->warning() << "[ExtendedProfileSampling] cid " << i << " is not valid! cids must be between 1 and " << numComps << std::endl; + } else if ((i <= 0) || (i > _numComps)) { + global_log->warning() << "[ExtendedProfileSampling] cid " << i << " is not valid! cids must be between 1 and " << _numComps << std::endl; } - } } else { _cidsTest.push_back(1); // Default } - for (auto cid : _cidsTest) { - cout << cid << endl; - } - std::string insMethod; if (_lattice) { insMethod = "in a lattice"; @@ -96,19 +95,29 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { global_log->info() << "[ExtendedProfileSampling] Start:WriteFreq:Stop: " << _startSampling << " : " << _writeFrequency << " : " << _stopSampling << std::endl; global_log->info() << "[ExtendedProfileSampling] Binwidth: " << _binwidth << std::endl; - if (_singleComp) { global_log->info() << "[ExtendedProfileSampling] All components treated as single one" << std::endl; } - if (_sampleHigherMoms) { global_log->info() << "[ExtendedProfileSampling] Sampling of higher moments enabled" << std::endl; } + if (_singleComp) { + global_log->info() << "[ExtendedProfileSampling] All components treated as single one" << std::endl; + } else { + global_log->info() << "[ExtendedProfileSampling] All components sampled individually" << std::endl; + } + if (_sampleHigherMoms) { + global_log->info() << "[ExtendedProfileSampling] Sampling of higher moments enabled" << std::endl; + } else { + global_log->info() << "[ExtendedProfileSampling] Sampling of higher moments disabled" << std::endl; + } if (_sampleChemPot) { global_log->info() << "[ExtendedProfileSampling] Sampling of chemical potential enabled with a sampling frequency of " << _samplefrequency << std::endl; global_log->info() << "[ExtendedProfileSampling] " << _factorNumTest << " * numParticles will be inserted " << insMethod << std::endl; global_log->info() << "[ExtendedProfileSampling] Inserting particles with cids = " << strCids << std::endl; if (_samplefrequency > _writeFrequency) { - global_log->warning() << "[ExtendedProfileSampling] Sample frequency (" << _samplefrequency << ") is greater than write frequency (" + global_log->warning() << "[ExtendedProfileSampling] Sample frequency (" << _samplefrequency << ") is greater than write frequency (" << _writeFrequency << ")! " << std::endl; } if ((_cidsTest.size() > 1) and (_singleComp)) { - global_log->warning() << "[ExtendedProfileSampling] and set!" << std::endl; + global_log->warning() << "[ExtendedProfileSampling] and set! Output may not include all specified components" << std::endl; } + } else { + global_log->info() << "[ExtendedProfileSampling] Sampling of chemical potential disabled" << std::endl; } } @@ -134,7 +143,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, regionSize[d] = regionHighCorner[d] - regionLowCorner[d]; } - const unsigned int numComps = _simulation.getDomain()->getNumberOfComponents(); CommVar> numMolecules_step; CommVar> ekin2_step; // Without drift energy @@ -145,6 +153,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::array>, 3> ekin2Vect_step; std::array>, 3> velocityVect_step; std::array>, 3> virialVect_step; + std::array>, 3> forceVect_step; std::array>, 3> energyfluxVect_step; std::array, 3> veloDrift_step_global; // Drift velocity per particle; global value as calculated with global values @@ -178,14 +187,14 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, hmPressure_step.at(d).local.resize(_lenVector); hmR_step.at(d).local.resize(_lenVector); hmM_step.at(d).local.resize(_lenVector); - hmM_step.at(d+9).local.resize(_lenVector); - hmM_step.at(d+18).local.resize(_lenVector); + hmM_step.at(d+9u).local.resize(_lenVector); + hmM_step.at(d+18u).local.resize(_lenVector); hmPressure_step.at(d).global.resize(_lenVector); hmR_step.at(d).global.resize(_lenVector); hmM_step.at(d).global.resize(_lenVector); - hmM_step.at(d+9).global.resize(_lenVector); - hmM_step.at(d+18).global.resize(_lenVector); + hmM_step.at(d+9u).global.resize(_lenVector); + hmM_step.at(d+18u).global.resize(_lenVector); std::fill(hmPressure_step.at(d).local.begin(), hmPressure_step.at(d).local.end(), 0.0f); std::fill(hmR_step.at(d).local.begin(), hmR_step.at(d).local.end(), 0.0f); @@ -211,13 +220,13 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, hmPressure_step.at(d).local.clear(); hmR_step.at(d).local.clear(); hmM_step.at(d).local.clear(); - hmM_step.at(d+9).local.clear(); - hmM_step.at(d+18).local.clear(); + hmM_step.at(d+9u).local.clear(); + hmM_step.at(d+18u).local.clear(); hmPressure_step.at(d).global.clear(); hmR_step.at(d).global.clear(); hmM_step.at(d).global.clear(); - hmM_step.at(d+9).global.clear(); - hmM_step.at(d+18).global.clear(); + hmM_step.at(d+9u).global.clear(); + hmM_step.at(d+18u).global.clear(); } } @@ -239,11 +248,13 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ekin2Vect_step.at(d).local.resize(_lenVector); velocityVect_step.at(d).local.resize(_lenVector); virialVect_step.at(d).local.resize(_lenVector); + forceVect_step.at(d).local.resize(_lenVector); energyfluxVect_step.at(d).local.resize(_lenVector); ekin2Vect_step.at(d).global.resize(_lenVector); velocityVect_step.at(d).global.resize(_lenVector); virialVect_step.at(d).global.resize(_lenVector); + forceVect_step.at(d).global.resize(_lenVector); energyfluxVect_step.at(d).global.resize(_lenVector); veloDrift_step_global.at(d).resize(_lenVector); @@ -267,11 +278,13 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(ekin2Vect_step.at(d).local.begin(), ekin2Vect_step.at(d).local.end(), 0.0f); std::fill(velocityVect_step.at(d).local.begin(), velocityVect_step.at(d).local.end(), 0.0f); std::fill(virialVect_step.at(d).local.begin(), virialVect_step.at(d).local.end(), 0.0f); + std::fill(forceVect_step.at(d).local.begin(), forceVect_step.at(d).local.end(), 0.0f); std::fill(energyfluxVect_step.at(d).local.begin(), energyfluxVect_step.at(d).local.end(), 0.0f); std::fill(ekin2Vect_step.at(d).global.begin(), ekin2Vect_step.at(d).global.end(), 0.0f); std::fill(velocityVect_step.at(d).global.begin(), velocityVect_step.at(d).global.end(), 0.0f); std::fill(virialVect_step.at(d).global.begin(), virialVect_step.at(d).global.end(), 0.0f); + std::fill(forceVect_step.at(d).global.begin(), forceVect_step.at(d).global.end(), 0.0f); std::fill(energyfluxVect_step.at(d).global.begin(), energyfluxVect_step.at(d).global.end(), 0.0f); std::fill(veloDrift_step_global.at(d).begin(), veloDrift_step_global.at(d).end(), 0.0f); @@ -282,7 +295,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double ry = pit->r(1); const unsigned int index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin - std::vector cids = {0}; // add velocities to "all components" (0) and respective component + std::vector cids = {0}; // add velocities to "all components" (0) and respective component if (!_singleComp) { cids.push_back(pit->componentid() + 1); } for (unsigned int cid : cids) { @@ -323,7 +336,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double veloCorrX = pit->v(0) - veloDrift_step_global[0].at(index); const double veloCorrY = pit->v(1) - veloDrift_step_global[1].at(index); const double veloCorrZ = pit->v(2) - veloDrift_step_global[2].at(index); - const double veloCorrSqrt = veloCorrX*veloCorrX + veloCorrY*veloCorrY + veloCorrZ*veloCorrZ; // Squared velocity of particle without drift + const double veloCorrSqrt = veloCorrX*veloCorrX + veloCorrY*veloCorrY + veloCorrZ*veloCorrZ; // Squared velocity of particle without drift const double veloX = pit->v(0); const double veloY = pit->v(1); const double veloZ = pit->v(2); @@ -333,7 +346,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double ekinY = mass * veloCorrY * veloCorrY + (pit->U_rot_2()/3.0); //??? Wie Rotation? const double ekinZ = mass * veloCorrZ * veloCorrZ + (pit->U_rot_2()/3.0); //??? Wie Rotation? - std::vector cids = {0}; // add quantities to "all components" (0) and respective component + std::vector cids = {0}; // add quantities to "all components" (0) and respective component if (!_singleComp) { cids.push_back(pit->componentid() + 1); } for (unsigned int cid : cids) { @@ -347,11 +360,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, virialVect_step[0].local.at(indexCID) += pit->Vi(0); virialVect_step[1].local.at(indexCID) += pit->Vi(1); virialVect_step[2].local.at(indexCID) += pit->Vi(2); - // if (pit->getID() == 330) {cout << "Upot = " << pit->U_pot() << endl; - // cout << pit->Vi(0) << " " << pit->Vi(3) << " " << pit->Vi(4) << std::endl; - // cout << pit->Vi(6) << " " << pit->Vi(1) << " " << pit->Vi(5) << std::endl; - // cout << pit->Vi(7) << " " << pit->Vi(8) << " " << pit->Vi(2) << std::endl; - // } + forceVect_step[0].local.at(indexCID) += pit->F(0); + forceVect_step[1].local.at(indexCID) += pit->F(1); + forceVect_step[2].local.at(indexCID) += pit->F(2); energyfluxVect_step[0].local.at(indexCID) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); @@ -365,12 +376,12 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, hmHeatflux_step[i].local.at(indexCID) += 0.5*veloCorrSqrt*velos[i]; for (unsigned short j = 0; j < 3; j++) { - if (i == j) { // Trace elements + if (i == j) { // Trace elements hmPressure_step[3*i+j].local.at(indexCID) += velos[i]*velos[j] - (1./3.)*veloCorrSqrt; // Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - hmR_step[3*i+j].local.at(indexCID) += (velos[i]*velos[j] - (1./3.)*veloCorrSqrt)*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + hmR_step[3u*i+j].local.at(indexCID) += (velos[i]*velos[j] - (1./3.)*veloCorrSqrt)*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz } else { - hmPressure_step[3*i+j].local.at(indexCID) += velos[i]*velos[j]; - hmR_step[3*i+j].local.at(indexCID) += velos[i]*velos[j]*veloCorrSqrt; + hmPressure_step[3u*i+j].local.at(indexCID) += velos[i]*velos[j]; + hmR_step[3u*i+j].local.at(indexCID) += velos[i]*velos[j]*veloCorrSqrt; } } } @@ -390,17 +401,17 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, m[2][0][0] + m[2][1][1] + m[2][2][2] }; - hmM_step[0].local.at(indexCID) += m[0][0][0] - 0.6*(mSum[0]); // m: cxcxcx - hmM_step[1].local.at(indexCID) += m[0][0][1] - 0.2*(mSum[1]); // m: cxcxcy - hmM_step[2].local.at(indexCID) += m[0][0][2] - 0.2*(mSum[2]); // m: cxcxcz - hmM_step[3].local.at(indexCID) += m[0][1][0] - 0.2*(mSum[1]); // m: cxcycx - hmM_step[4].local.at(indexCID) += m[0][1][1] - 0.2*(mSum[0]); // m: cxcycy - hmM_step[5].local.at(indexCID) += m[0][1][2]; // m: cxcycz - hmM_step[6].local.at(indexCID) += m[0][2][0] - 0.2*(mSum[2]); // m: cxczcx - hmM_step[7].local.at(indexCID) += m[0][2][1]; // m: cxczcy - hmM_step[8].local.at(indexCID) += m[0][2][2] - 0.2*(mSum[0]); // m: cxczcz - - hmM_step[9].local.at(indexCID) += m[1][0][0] - 0.2*(mSum[1]); // m: cycxcx + hmM_step[0].local.at(indexCID) += m[0][0][0] - 0.6*(mSum[0]); // m: cxcxcx + hmM_step[1].local.at(indexCID) += m[0][0][1] - 0.2*(mSum[1]); // m: cxcxcy + hmM_step[2].local.at(indexCID) += m[0][0][2] - 0.2*(mSum[2]); // m: cxcxcz + hmM_step[3].local.at(indexCID) += m[0][1][0] - 0.2*(mSum[1]); // m: cxcycx + hmM_step[4].local.at(indexCID) += m[0][1][1] - 0.2*(mSum[0]); // m: cxcycy + hmM_step[5].local.at(indexCID) += m[0][1][2]; // m: cxcycz + hmM_step[6].local.at(indexCID) += m[0][2][0] - 0.2*(mSum[2]); // m: cxczcx + hmM_step[7].local.at(indexCID) += m[0][2][1]; // m: cxczcy + hmM_step[8].local.at(indexCID) += m[0][2][2] - 0.2*(mSum[0]); // m: cxczcz + + hmM_step[9].local.at(indexCID) += m[1][0][0] - 0.2*(mSum[1]); // m: cycxcx hmM_step[10].local.at(indexCID) += m[1][0][1] - 0.2*(mSum[0]); // m: cycxcy hmM_step[11].local.at(indexCID) += m[1][0][2]; // m: cycxcz hmM_step[12].local.at(indexCID) += m[1][1][0] - 0.2*(mSum[0]); // m: cycycx @@ -433,17 +444,23 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, #endif for (unsigned long i = 0; i < _lenVector; i++) { - const unsigned int cid = i/_numBinsGlobal; + const unsigned long numMols = numMolecules_step.global.at(i); unsigned int dof_total {0}; - if (cid == 0) { - for (unsigned long cj = 0; cj < numComps; cj++) { - const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); - dof_total += (3 + dof_rot)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); + if (!_singleComp) { + const unsigned int cid = i/_numBinsGlobal; + if (cid == 0) { + for (unsigned long cj = 0; cj < _numComps; cj++) { + const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); + dof_total += (3 + dof_rot)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); + } + } else { + const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); + dof_total = (3 + dof_rot)*numMols; } } else { - const unsigned long numMols = numMolecules_step.global.at(i); - const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); - dof_total = (3 + dof_rot)*numMols; + // For single component sampling, the rot. DOF of component 0 is taken + const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); + dof_total = (3 + dof_rot)*numMols; // ??? rot dof } if (dof_total > 0ul) { temperature_step_global.at(i) = ekin2_step.global.at(i) / dof_total; @@ -566,13 +583,16 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } } - // Calculate further quantities + // Gather quantities of all processes. Note: MPI_Reduce instead of MPI_Allreduce! #ifdef ENABLE_MPI MPI_Reduce(ekin2Trans_step.local.data(), ekin2Trans_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(epot_step.local.data(), epot_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[0].local.data(), virialVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[1].local.data(), virialVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[2].local.data(), virialVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(forceVect_step[0].local.data(), forceVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(forceVect_step[1].local.data(), forceVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(forceVect_step[2].local.data(), forceVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(ekin2Vect_step[0].local.data(), ekin2Vect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(ekin2Vect_step[1].local.data(), ekin2Vect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(ekin2Vect_step[2].local.data(), ekin2Vect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); @@ -590,8 +610,8 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, MPI_Reduce(hmPressure_step[d].local.data(), hmPressure_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(hmR_step[d].local.data(), hmR_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(hmM_step[d].local.data(), hmM_step[d].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(hmM_step[d+9].local.data(), hmM_step[d+9].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(hmM_step[d+18].local.data(), hmM_step[d+18].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(hmM_step[d+9u].local.data(), hmM_step[d+9u].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(hmM_step[d+18u].local.data(), hmM_step[d+18u].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); } } #else @@ -601,6 +621,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, virialVect_step[0].global.at(i) = virialVect_step[0].local.at(i); virialVect_step[1].global.at(i) = virialVect_step[1].local.at(i); virialVect_step[2].global.at(i) = virialVect_step[2].local.at(i); + forceVect_step[0].global.at(i) = forceVect_step[0].local.at(i); + forceVect_step[1].global.at(i) = forceVect_step[1].local.at(i); + forceVect_step[2].global.at(i) = forceVect_step[2].local.at(i); ekin2Vect_step[0].global.at(i) = ekin2Vect_step[0].local.at(i); ekin2Vect_step[1].global.at(i) = ekin2Vect_step[1].local.at(i); ekin2Vect_step[2].global.at(i) = ekin2Vect_step[2].local.at(i); @@ -618,27 +641,34 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, hmPressure_step[d].global.at(i) = hmPressure_step[d].local.at(i); hmR_step[d].global.at(i) = hmR_step[d].local.at(i); hmM_step[d].global.at(i) = hmM_step[d].local.at(i); - hmM_step[d+9].global.at(i) = hmM_step[d+9].local.at(i); - hmM_step[d+18].global.at(i) = hmM_step[d+18].local.at(i); + hmM_step[d+9u].global.at(i) = hmM_step[d+9u].local.at(i); + hmM_step[d+18u].global.at(i) = hmM_step[d+18u].local.at(i); } } } #endif // Only root knows real quantities (MPI_Reduce instead of MPI_Allreduce) + // Accumulate data if (domainDecomp->getRank() == 0) { for (unsigned long i = 0; i < _lenVector; i++) { const unsigned long numMols = numMolecules_step.global.at(i); const unsigned int cid = i/_numBinsGlobal; unsigned int dof_rot {0}; unsigned int dof_total {0}; - if (cid == 0) { - for (unsigned long cj = 0; cj < numComps; cj++) { - dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); - dof_total += (1 + dof_rot/3.0)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); // ??? rot dof + if (!_singleComp) { + if (cid == 0) { + for (unsigned long cj = 0; cj < _numComps; cj++) { + dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); + dof_total += (1 + dof_rot/3.0)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); // ??? rot dof + } + } else { + dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); + dof_total = (1 + dof_rot/3.0)*numMols; // ??? rot dof } } else { - dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); + // For single component sampling, the rot. DOF of component 0 is taken + dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); dof_total = (1 + dof_rot/3.0)*numMols; // ??? rot dof } if (dof_total > 0) { @@ -646,13 +676,15 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double ViX = virialVect_step[0].global.at(i); const double ViY = virialVect_step[1].global.at(i); const double ViZ = virialVect_step[2].global.at(i); + const double Fx = forceVect_step[0].global.at(i); + const double Fy = forceVect_step[1].global.at(i); + const double Fz = forceVect_step[2].global.at(i); const double Tx = ekin2Vect_step[0].global.at(i) / dof_total; const double Ty = ekin2Vect_step[1].global.at(i) / dof_total; const double Tz = ekin2Vect_step[2].global.at(i) / dof_total; _numMolecules_accum.at(i) += numMolecules_step.global.at(i); _density_accum.at(i) += rho; - _temperature_accum.at(i) += temperature_step_global.at(i); // ??? oder (Tx+Ty+Tz)/3.0 - // cout << "EPS " << i%_numBinsGlobal << " " << i << " " << cid << " " << temperature_step_global.at(i) << " " << (Tx+Ty+Tz)/3.0 << endl; + _temperature_accum.at(i) += temperature_step_global.at(i); _ekin_accum.at(i) += ekin2Trans_step.global.at(i) / numMols; _epot_accum.at(i) += epot_step.global.at(i) / numMols; _pressure_accum.at(i) += rho * ( (ViX + ViY + ViZ)/(3.0*numMols) + temperature_step_global.at(i) ); // ??? Welche Temperature? Mit Drift? Statisch/dynamisch? @@ -668,6 +700,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _pressureVect_accum[0].at(i) += rho * ( ViX/numMols + Tx ); _pressureVect_accum[1].at(i) += rho * ( ViY/numMols + Ty ); _pressureVect_accum[2].at(i) += rho * ( ViZ/numMols + Tz ); + _forceVect_accum[0].at(i) += Fx; + _forceVect_accum[1].at(i) += Fy; + _forceVect_accum[2].at(i) += Fz; _energyfluxVect_accum[0].at(i) += energyfluxVect_step[0].global.at(i) / _slabVolume; _energyfluxVect_accum[1].at(i) += energyfluxVect_step[1].global.at(i) / _slabVolume; _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / _slabVolume; @@ -683,8 +718,8 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _hmPressure_accum[d].at(i) += hmPressure_step[d].global.at(i) / _slabVolume; _hmR_accum[d].at(i) += hmR_step[d].global.at(i) / _slabVolume; _hmM_accum[d].at(i) += hmM_step[d].global.at(i) / _slabVolume; - _hmM_accum[d+9].at(i) += hmM_step[d+9].global.at(i) / _slabVolume; - _hmM_accum[d+18].at(i) += hmM_step[d+18].global.at(i) / _slabVolume; + _hmM_accum[d+9u].at(i) += hmM_step[d+9u].global.at(i) / _slabVolume; + _hmM_accum[d+18u].at(i) += hmM_step[d+18u].global.at(i) / _slabVolume; } } } @@ -695,8 +730,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, if ( (simstep - _startSampling) % _writeFrequency == 0 ) { if (domainDecomp->getRank() == 0) { - unsigned long numOutputs = (_singleComp) ? 1ul : (_simulation.getDomain()->getNumberOfComponents()+1); - + unsigned long numOutputs = (_singleComp) ? 1ul : (_numComps+1); { // Write output file std::stringstream ss; @@ -706,27 +740,30 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs.open(fname, std::ios::out); ofs << setw(24) << "pos"; // Bin position for (unsigned long cid = 0; cid < numOutputs; cid++) { - ofs << setw(22) << "numParts["< dirs { {"x", 0}, {"y", 1}, {"z", 2}, }; + std::map dirs { {"x", 0}, {"y", 1}, {"z", 2}, }; std::stringstream ss; ss << std::setw(9) << std::setfill('0') << simstep; const std::string fname = "ExtendedProfileSampling_HigherMoments_TS"+ss.str()+".dat"; @@ -817,23 +863,23 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs.open(fname, std::ios::out); ofs << setw(24) << "pos"; // Bin position for (unsigned long cid = 0; cid < numOutputs; cid++) { - ofs << setw(22) << "delta["< _lenVector) { + global_log->error() << "[ExtendedProfileSampling] Trying to get value but index (" << index << ") is greater than possible (" << _lenVector << ")" << std::endl; + return 0.0; + } + // Only root knows real quantities (MPI_Reduce instead of MPI_Allreduce at accumulation) + if (domainDecomp->getRank() != 0) { + global_log->error() << "[ExtendedProfileSampling] Non-root process tried to get value" << std::endl; + return 0.0; + } + + if (_countSamples.at(index) == 0) { + global_log->error() << "[ExtendedProfileSampling] Nothing sampled yet at given index" << std::endl; + return 0.0; + } + + if (quantityName == "T") { + return _temperature_accum.at(index) / _countSamples.at(index); + } else if (quantityName == "rho") { + return _density_accum.at(index) / _countSamples.at(index); + } else if (quantityName == "ekin") { + return _ekin_accum.at(index) / _countSamples.at(index); + } + + global_log->error() << "[ExtendedProfileSampling] Quantity (" << quantityName << ") unknown!" << std::endl; + return 0.0; +} diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index 1378f934dc..d23e6b11cf 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -8,6 +8,11 @@ #ifndef MARDYN_TRUNK_EXTENDEDPROFILESAMPLING_H #define MARDYN_TRUNK_EXTENDEDPROFILESAMPLING_H +class ExtendedProfileSamplingTest; +#include +#include +#include + #include "PluginBase.h" #include "particleContainer/ParticleContainer.h" #include "Domain.h" @@ -38,7 +43,9 @@ */ class ExtendedProfileSampling : public PluginBase { -private: + private: + friend ExtendedProfileSamplingTest; + // Control: general float _binwidth {1.0f}; unsigned long _startSampling {0ul}; @@ -65,6 +72,7 @@ class ExtendedProfileSampling : public PluginBase { CellProcessor* _cellProcessor; std::shared_ptr _particlePairsHandler; Molecule _mTest; + unsigned int _numComps; // Accumulated quantities over _writeFrequency per bin // NOTE: Only the root process knows correct values (except number of molecules and temperature) @@ -72,7 +80,7 @@ class ExtendedProfileSampling : public PluginBase { std::vector _numMolecules_accum; // Number of molecules in bin std::vector _density_accum; // Local density std::vector _temperature_accum; // Temperature (drift corrected) - std::vector _ekin_accum; // Kinetic energy + std::vector _ekin_accum; // Kinetic energy including drift std::vector _epot_accum; // Potential energy std::vector _pressure_accum; // Pressure std::vector _chemPot_accum; // Chemical potential as sampled in ms2 (Widom insertion method) @@ -80,27 +88,28 @@ class ExtendedProfileSampling : public PluginBase { std::array, 3> _temperatureVect_accum; // Kinetic temperature in each direction (drift corrected) std::array, 3> _velocityVect_accum; // Drift velocity in each direction std::array, 3> _pressureVect_accum; // Pressure in each direction + std::array, 3> _forceVect_accum; // Sum of forces on particles in each direction std::array, 3> _energyfluxVect_accum; // Energy flux (heat flux plus enthalpy flux) in each direction // Higher moments - std::vector _hmDelta_accum; // Higher moment: Delta - std::array, 3> _hmHeatflux_accum; // Higher moment: Thermal heatflux; x, y, z - std::array, 9> _hmPressure_accum; // Higher moment: Pressure (traceless); cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - std::array, 9> _hmR_accum; // Higher moment: R (traceless); cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - std::array, 27> _hmM_accum; // Higher moment: M (traceless); cicxcx, cicxcy, cicxcz, cicycx, cicycy, cicycz, ciczcx, ciczcy, ciczcz mit i = x,y,z + std::vector _hmDelta_accum; // Higher moment: Delta + std::array, 3> _hmHeatflux_accum; // Higher moment: Thermal heatflux; x, y, z + std::array, 9> _hmPressure_accum; // Higher moment: Pressure (traceless); cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + std::array, 9> _hmR_accum; // Higher moment: R (traceless); cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + std::array, 27> _hmM_accum; // Higher moment: M (traceless); cicxcx, cicxcy, cicxcz, cicycx, cicycy, cicycz, ciczcx, ciczcy, ciczcz mit i = x,y,z std::vector _countSamples; // Number of samples; can vary from bin to bin as some bins could be empty - void resizeVectors(); // Change size of accumulation vectors - void resetVectors(); // Set accumulation vectors to zero + void resizeVectors(); // Change size of accumulation vectors + void resetVectors(); // Set accumulation vectors to zero -public: + public: ExtendedProfileSampling(); ~ExtendedProfileSampling() override = default; void init(ParticleContainer* /* particleContainer */, DomainDecompBase* domainDecomp, Domain* domain) override; - void readXML (XMLfileUnits& xmlconfig) override; + void readXML(XMLfileUnits& xmlconfig) override; void beforeForces(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, unsigned long /* simstep */) override {} @@ -112,9 +121,11 @@ class ExtendedProfileSampling : public PluginBase { void finish(ParticleContainer* /* particleContainer */, DomainDecompBase* /* domainDecomp */, Domain* /* domain */) override {} std::string getPluginName() override { return "ExtendedProfileSampling"; } - + static PluginBase* createInstance() { return new ExtendedProfileSampling(); } + // Get value of quantity at certain index; Mainly used for unit test + double getQuantity(DomainDecompBase* domainDecomp, std::string quantityName, unsigned long index); }; diff --git a/src/plugins/tests/ExtendedProfileSamplingTest.cpp b/src/plugins/tests/ExtendedProfileSamplingTest.cpp new file mode 100755 index 0000000000..06f751185a --- /dev/null +++ b/src/plugins/tests/ExtendedProfileSamplingTest.cpp @@ -0,0 +1,70 @@ +/* + * ExtendedProfileSamplingTest.cpp + * + * Created on: Jun 2022 + * Author: homes + */ + +#include "ExtendedProfileSamplingTest.h" + +TEST_SUITE_REGISTRATION(ExtendedProfileSamplingTest); + +ExtendedProfileSamplingTest::ExtendedProfileSamplingTest() {} + +ExtendedProfileSamplingTest::~ExtendedProfileSamplingTest() {} + +void ExtendedProfileSamplingTest::testEPSampling() { + + double delta = 1e-6; // Tolerate deviation between expected and actual value + + // Expected temperature + std::array temp_expected = {1.7848196, 1.8002271, 1.8008320, 1.76791660, 1.7873646, + 1.7978649, 1.7972279, 1.7947228, 1.79220220, 1.7932661, + 1.7981219, 1.7815903, 1.7938292, 1.79564790, 1.7968447, + 1.7974076, 1.7866776, 1.7894757, 1.78767060, 1.7948688}; + // Expected density + std::array rho_expected = {0.49, 0.5200, 0.4875, 0.5075, 0.4650, + 0.50, 0.5075, 0.4650, 0.4850, 0.4875, + 0.53, 0.4900, 0.5075, 0.5375, 0.4975, + 0.51, 0.4925, 0.5200, 0.5075, 0.4925}; + // Expected kinetic energy + std::array ekin_expected = {2.6885133, 2.7107971, 2.7045695, 2.7001697, 2.7007511, + 2.6991446, 2.6999478, 2.6984594, 2.7011729, 2.6954951, + 2.7040797, 2.6960042, 2.7014050, 2.7001036, 2.7017692, + 2.7000050, 2.6986238, 2.6989247, 2.7000430, 2.7013787}; + + + const char* filename = "LJTS2-5_equilibrated.inp"; + double cutoff = 2.5; + std::unique_ptr container{ + initializeFromFile(ParticleContainerFactory::LinkedCell, filename, cutoff)}; + + std::unique_ptr plugin {new ExtendedProfileSampling()}; + + plugin->init(container.get(), _domainDecomposition, _domain); + plugin->afterForces(container.get(), _domainDecomposition, 1); + + // Only root knows correct values; see plugin for explanation + if (_domainDecomposition->getRank() == 0) { + // Default binwidth is 1 and global domain length of test system is 20; therefore 20 bins in total + for (unsigned int i = 0; i < 20; i++) { + + const double temp_actual_all = plugin->getQuantity(_domainDecomposition, "T", i); + const double rho_actual_all = plugin->getQuantity(_domainDecomposition, "rho", i); + const double ekin_actual_all = plugin->getQuantity(_domainDecomposition, "ekin", i); + ASSERT_DOUBLES_EQUAL_MSG("Temperature at index "+std::to_string(i)+" not as expected", temp_expected[i], temp_actual_all, delta); + ASSERT_DOUBLES_EQUAL_MSG("Temperature at index "+std::to_string(i)+" not as expected", temp_expected[i], temp_actual_all, delta); + ASSERT_DOUBLES_EQUAL_MSG("Temperature at index "+std::to_string(i)+" not as expected", temp_expected[i], temp_actual_all, delta); + + // As there is only one component in the test system, the componentwise and overall values are supposed to be equal + const double temp_actual_cid1 = plugin->getQuantity(_domainDecomposition, "T", i+20u); + const double rho_actual_cid1 = plugin->getQuantity(_domainDecomposition, "rho", i+20u); + const double ekin_actual_cid1 = plugin->getQuantity(_domainDecomposition, "ekin", i+20u); + ASSERT_DOUBLES_EQUAL(temp_actual_all, temp_actual_cid1, delta); + ASSERT_DOUBLES_EQUAL(rho_actual_all, rho_actual_cid1, delta); + ASSERT_DOUBLES_EQUAL(ekin_actual_all, ekin_actual_cid1, delta); + } + cout << endl; + } + +} diff --git a/src/plugins/tests/ExtendedProfileSamplingTest.h b/src/plugins/tests/ExtendedProfileSamplingTest.h new file mode 100755 index 0000000000..e7beccf76b --- /dev/null +++ b/src/plugins/tests/ExtendedProfileSamplingTest.h @@ -0,0 +1,33 @@ +/* + * ExtendedProfileSamplingTest.cpp + * + * Created on: Jun 2022 + * Author: homes + */ + +#ifndef DEXTENDEDPROFILESAMPLINGTEST_H +#define DEXTENDEDPROFILESAMPLINGTEST_H + +#include "utils/TestWithSimulationSetup.h" +#include "plugins/ExtendedProfileSampling.h" + +// Test of ExtendedProfileSampling plugin +// correct sampling of only a few quantities is tested as other quantities may require special setting, e.g. legacy cell processor + +class ExtendedProfileSamplingTest : public utils::TestWithSimulationSetup { + + TEST_SUITE(ExtendedProfileSamplingTest); + TEST_METHOD(testEPSampling); + TEST_SUITE_END; + +public: + + ExtendedProfileSamplingTest(); + + virtual ~ExtendedProfileSamplingTest(); + + void testEPSampling(); + +}; + +#endif //DEXTENDEDPROFILESAMPLINGTEST_H diff --git a/test_input/LJTS2-5_equilibrated.inp b/test_input/LJTS2-5_equilibrated.inp new file mode 100644 index 0000000000..4d14347869 --- /dev/null +++ b/test_input/LJTS2-5_equilibrated.inp @@ -0,0 +1,4011 @@ +mardyn trunk 20160512 +currentTime 0.0 + Length 20 20 20 + Temperature 1.8 + NumberOfComponents 1 +1 0 0 0 0 +0 0 0 1 1 0.097901347 +0 0 0 +1e+10 + NumberOfMolecules 4000 + MoleculeFormat ICRVQD +2457 1 2.2841418832622610857 0.90266287125424871096 0.81429948970607513026 -1.4743714661607378869 -0.49366435013937864928 -1.6806580861456767995 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +420 1 0.44646409592895403007 1.2511386276100933124 2.3922999084643374879 -0.40715180560322156156 -0.10415456030590772296 -0.6562874494476004239 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +255 1 2.3575797689766835319 0.67440844333053429072 1.917726782130809271 2.4145728450301486845 0.47827504410037696703 -1.1062207253687876829 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2967 1 3.1464630559001629528 1.3536056760088086559 2.4282841370305163764 -0.45713315660183301281 -1.3716577287405062879 0.95414517751701977133 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +760 1 2.1808763279096692322 1.7495864449844167332 0.13883728233640982297 -2.9741748241076817472 0.28504288070187061566 0.10524017850172781574 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1103 1 0.23430469975178855324 1.2831438602507208024 0.64576050110992466724 -0.81934705715700251183 1.611256548481917017 1.9690793664340491276 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +633 1 1.5008973117758510618 0.5917862489108582924 0.20508257384701178427 -0.86335786491395571929 -0.23502505784016725077 0.42195919864176528735 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1071 1 2.258542944683489484 1.7464286103733643873 1.8228507234500808121 0.18987632855360964124 -0.22539295333824735379 1.2806808216115617149 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3544 1 1.7617678437257124902 0.067897225770407632073 1.1662832553370032773 2.2983066050948601777 0.89279310515511955959 -0.059767651228293791621 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1656 1 0.060740693855171883075 0.27864316012513418164 2.4627436626325782676 2.6187248350231953076 -1.7928990866922400738 0.67678995199815739081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2553 1 5.6833074214193857188 0.89076438638324439978 0.2208037947179155025 0.039167527692106893222 0.3754677267910095928 1.1678316271452076069 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +925 1 4.0903082889629152064 0.39947619563265979181 1.93197947931764058 0.55333349915697094268 -0.8227092968139264606 0.68895136818930025058 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1650 1 5.7437160880833486587 0.6658137408685298464 2.1727229289152858449 0.77020839051446243761 -0.63378352228550327574 -0.43062347388733046571 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3672 1 4.6266209516894205578 1.3376758403894082328 2.4119242526986965913 -2.0227884743655693001 2.5313622503518233842 -1.5663717251770288286 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3449 1 4.2331898059873793727 0.90573024990062744877 0.4858063916591234821 0.42495642877544931304 -1.0710255598863218651 0.87395453498712261098 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3139 1 5.6478138287182382271 1.1171768008675975192 1.2711826003327739709 -1.4329167546396446298 0.42422019720935288944 -1.4339678894356564509 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1729 1 3.3672825543314917063 1.583387015873296555 0.61068787412891301081 -1.8554356258499269394 2.1004703426523252396 0.086658955210359739363 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1474 1 6.3496463185575660049 0.13592201619172281091 0.037810255280611798634 0.10288988048481341464 0.61028852948477496643 -2.3450271877641388762 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3014 1 4.03367811339750304 2.226978244867726886 2.0382861896949959757 0.65790591486527327802 -0.95460453335438522071 1.5284564705599774648 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +111 1 4.4376289604725167592 1.8715354766340617232 1.1006537720506386346 -2.1745748605682795329 -1.8575625982066030772 -0.37080453684683006843 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +550 1 5.0320786795743588371 2.1029402103598608953 1.9614028308941471312 -0.99068528684939138884 -0.20441378242780119945 -1.7802011652688036758 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1106 1 6.3767307545748233011 0.15924454849427302494 1.3776284956618700672 0.70238703090428877829 -1.2917819473433014288 1.3289718569603441445 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +851 1 6.6654619632181741906 1.710322631059185694 1.1339779205221314218 -3.1723756027260736623 -1.0825726479593094087 -2.0292375561227533609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +10 1 3.0283449932002506344 2.514357637568723991 0.8827467805326876249 -0.63379356749905069179 0.66681787789289026502 0.26596368355641003545 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2010 1 1.4602706043813524772 4.1691728106176819679 0.28508385796687552016 0.48936333332716058786 -1.1321675757886056068 1.7201150599089771731 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1912 1 0.86518895369922865779 3.052757195334249829 1.2167995588793254491 1.0077983426048111593 0.95899136312679400529 -0.24550385997727230958 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3209 1 2.8980595363466483683 4.9969262067697757246 1.3605372506339608041 -1.0465664178844624743 0.13296740440229787295 -3.0703305261852191776 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3578 1 1.8395188059903726518 4.6448740603349110145 1.69996445158577969 0.82297353023394059779 0.28350888121089151683 0.20684944592608645042 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +590 1 0.90418929712461437731 4.1958953743743405695 2.4290310377114843199 0.48761408145735979369 1.4284708683772548987 2.2652412335941072286 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +568 1 1.0456009774231804776 4.029760720948011965 1.2411854109735269702 -0.45055458461266401082 1.4813757265328582058 0.74054451903476592456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1947 1 1.0578149228480790978 3.1979834626663969921 0.22087617543402160436 1.8684335519602293108 -1.3553348469336503612 1.8086492364212567452 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +215 1 2.0084307153370417609 3.2474060813990561769 0.97211061203731108371 0.47326533150575755826 -0.13169549340841288365 0.94897438843702652811 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2196 1 3.2806963759561007521 3.720516454761424896 1.2962700352208360588 0.337126454960160582 1.7534000768367683509 -3.2636132041968037854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1084 1 2.6497918894454950411 4.348832778314820402 2.2244777555788228796 0.30583164765894738091 -1.9494335947521583829 -0.69772542792997949146 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2037 1 3.0969865637539086833 2.6329063861958812431 1.972533983509733746 -0.039421019105677676531 3.4005725643885020837 1.1274950371073300115 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +321 1 4.5033588165385234348 4.3471560489859628618 0.45650704745798659223 0.79660394471246431802 0.78868448861380169301 -0.59949615723006777213 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2744 1 5.6172997847932748527 4.6497470936088367566 2.202257946011540124 -0.22922947596465412246 1.8768323100124697511 -1.4865597748851269166 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +120 1 4.12200927502110126 2.9886648435945497582 1.4222922432720326302 -0.080409756586466429873 -0.53120859402011388894 -1.4445587816849834173 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1611 1 5.2420374151388280382 3.4673624068016897226 0.84627236654290272089 -0.15436202640992266466 3.6690258897704040031 -2.0372315473689801557 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3956 1 4.2980404488589476486 3.8889074024826890685 1.9779500762353918741 0.57599230097111508986 0.77604746266392554688 0.87084584655845309609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3148 1 6.4452543603319600862 2.8340779022598892034 2.0448829810868724977 -0.84001237803006523208 1.0846008704981906501 -0.39005123057862772784 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2887 1 6.3992244168598650944 3.7155402061925628665 0.86289567545233070156 -1.7099635491847235969 -0.97543621586817719216 -0.51820044613646831788 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +385 1 4.2597720830555045879 2.9717085140379460029 0.10247388485466550623 -0.17491390830317343763 -2.7020008707325722241 1.7423520179093781035 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +960 1 5.5411077944499851355 2.5019629579763202898 0.93418530396959686968 -1.9840798976591740299 0.60365118025925512679 -0.038034071442512105976 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +315 1 6.663806175626336703 4.1151142105070306343 2.0965173020222880318 -2.2673606003361395089 -0.93252152784817410325 -2.0109875244590287302 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1555 1 0.23307595835489106073 6.4026441552323598572 0.68341896493888998343 -1.7365257984918434087 0.74111274985245512159 -2.5168496363834447216 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1740 1 0.83172314348400866457 5.7016317171610380043 1.270667714609212462 0.33857018089401674787 0.20477170503703981397 -0.27011175717149504827 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +656 1 1.3917042109919437465 6.1843904663382947007 0.32628399328612250896 1.4030857584864087073 1.4146656025648252086 -1.1652704235664943511 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2392 1 0.8093137005329311684 6.6099474721937667709 2.1159249943555913376 0.066325970047630217197 -1.5563519262718654712 0.66463416998627089516 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1565 1 2.917809070750210676 7.2242379476397777793 2.4466831530687498386 -0.57889201808430912344 -0.70693969768116393659 1.0732615977609500924 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2991 1 2.5474139158468047661 5.836564550514537153 1.987980160147089892 -0.46071069991187935111 -0.1011019959964065823 -0.31469634676651575544 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1076 1 3.0907721839930073493 6.5582526941217373917 1.1463579511539581102 1.6987672162733591374 2.5681159741260066731 -1.6275876580156487528 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3600 1 2.4408068041436932205 5.4829068655923220987 0.42761357364151847404 2.3363701015842996966 0.35983900506516386386 0.9639718185223420388 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3907 1 4.6575327918257221071 5.8209456630157525581 1.7824379870051161312 -0.014602050373164171537 -0.32529989923687901987 0.15028394167958644689 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3529 1 4.3807154460098924886 5.7474319259335624466 0.69813950193381524301 0.63288320156775812464 -0.28102055354318156155 0.46235746805092209355 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3874 1 3.5039106101157586615 5.699504099991417938 1.1831232563045195327 2.5453204597128751274 -1.2725787815291511595 -2.7819659674602879029 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +506 1 5.8644247033675425129 6.5117438335965305285 2.0165601921148370579 -0.86349817742335344128 -0.38975617664510986415 -0.30705225239359140721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +546 1 6.2913184677684421686 6.1810240867736494508 0.97687513899074385204 0.83576686299719948892 -0.90298889964139561481 0.94315197323412069963 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +840 1 5.9452709010915505417 5.464561359948082675 1.7910212303207775353 -2.3114196319338851104 -0.77709528437489583386 -1.7922484724663656497 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3188 1 5.8274905991688994433 7.1322099978554795996 1.0348171797926399851 -0.65649239992020158585 0.069476949408196236879 3.6776207911065297296 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3406 1 3.9924980177561111283 6.9565929791406526661 0.80052352792197167819 0.53607431286914219992 0.18556641026374448566 0.57382330626389932426 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +502 1 3.6447136108235795859 5.2738996032159057847 2.1608330260161867642 -0.59336267435767575673 -0.49501389225434822006 0.57161558900646747272 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +296 1 6.5737273437120764541 5.1900361755824837573 0.032715133004302801578 -0.65776218262418562066 -0.67231640384693192036 -0.99320000847826561685 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +768 1 5.4912635520721106985 5.3085319759567832776 0.81850878504152813075 -2.3386837962111037825 1.0472945103372084397 -0.54574506118624876994 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1149 1 3.6700615482262266553 5.8037319843143402309 0.07329234594859725116 0.32278033892914548275 -1.388201705385083029 -0.62029912194016467719 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1653 1 2.1174950631390405675 9.3690787187831823246 1.9912086406336502176 0.60459055562742758383 1.1378281671235348504 1.6989323007827532575 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2173 1 1.4843049560493406513 8.6533998697345584361 2.3802385068392268863 0.40725680278756393182 -1.0531079024193532589 2.5639142949270312677 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +461 1 3.0239854437118749431 8.5406821134227985937 1.8450335655669727331 2.2147792027868447029 -0.27252632352920030945 -1.2700001489346313122 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1748 1 1.171007715715384867 8.8364585749133652826 1.3654192806684777306 -0.95475622759280687202 2.8837439507383013648 0.89214629863837890955 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +838 1 0.62525655151440995283 9.9757933560097740155 1.2083675790921546422 0.060339139383801566885 4.3103764436013225492 -1.2984670177680857073 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1309 1 0.62254571332344310619 7.611349883097622282 1.9588847309360619686 1.809050321330764044 -0.038304975490229591084 -0.89014322674017432035 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3031 1 2.4198273795486349158 9.316790369934350835 1.0179132986786108006 -0.91129279782548888722 1.6840210294531996471 0.045498887057556891556 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +232 1 1.9941289774259665091 9.0309002957395758671 0.16350252493973477241 0.79125439816623577283 -0.18847470837360599805 0.52620560798616766718 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3250 1 0.57335465118584560962 7.8283123719522693662 1.029731657692770419 0.99098769070463987862 1.0804886864181624251 1.4308325329591582431 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1443 1 0.70374602538990826961 8.9720963086456091418 0.35204739107729687841 1.5469386473812971605 3.7472408904735239332 2.0083302390819142147 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +172 1 0.0060796237115139841606 8.8961804420125005777 1.3488087251918137177 0.73941083009744656973 0.23474176597112736409 -1.8920755401448940969 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2537 1 4.4322881519678434259 8.9876837970654044341 1.287033659968617183 -3.3598367928901557988 -1.1417904011320207935 1.488072348184912963 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1311 1 3.57757220453782665 8.1921135679122372153 0.74854750490411980923 1.5778517719237556971 -0.497043910145158363 -0.6389627131905660784 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +98 1 5.7019089807804617109 8.1296874489706123512 0.64663809546862571764 -0.84026550294440338629 0.73199830222702588767 1.7855659552441704996 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2905 1 5.3313162194059922072 8.9395423026217599727 0.19014303491490952558 0.78702758900268510178 1.4105776883355192197 1.2117492301466348259 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2195 1 3.9222613630629195036 7.8138736493104161696 1.6762485508826532321 -1.4571471435839662423 0.6539812659937928041 -1.1381454614893884436 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3417 1 5.9661877600981378933 9.7249752220771714661 2.0604912927568661551 -0.26681640184438537577 -0.75666113605339135884 0.47140602218969185344 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3531 1 5.5688729836206141144 8.1845315309522828073 1.6420913730620598781 -0.60880769449983829222 -1.0416046896854120885 -1.9164226096455296844 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1956 1 3.6375114524510303582 9.6926452887873306707 2.4848245624091149786 0.35868082958372982105 -0.58033643886638031084 0.48092333691780669858 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3130 1 6.4748412513098054788 9.0877320254782922859 0.57069060320721265445 0.98172590540410731297 2.0347716034332199442 -1.1149830124181696611 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2107 1 5.5043307239383638674 9.8135188043112684397 0.85375922109490998135 -1.6483418661981599218 -0.29339881349919083586 0.84853734154378901433 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2441 1 2.9275512922182191922 2.1744422133114489348 3.5841438347566509925 -1.1399610650533733569 0.40153173657421042941 1.6657267004507623209 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3254 1 1.1735263451745236996 2.4810074145619891439 3.8760753580911222471 -0.0524499014612992559 0.26267459542876708811 -0.03291711073204438287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2367 1 2.797456225719795686 1.080673634538116934 3.521790278403492902 -1.1193114045118102151 -0.97924035876698256597 1.3320630810516340681 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +453 1 2.5515111592281876085 2.0454518964851642338 2.6901872739851548921 1.4632232928719040022 1.4323343906483172461 1.3070173474092672272 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +390 1 1.9759114376463366991 1.6257158430764244716 3.7531364687687758241 -2.2342830066475785067 0.8330731506782150797 0.2198275895189103768 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1844 1 2.2366323733284327879 0.26161325459583595343 2.9450868628555579853 1.0990462331592150136 -1.2020252097967336624 0.04572182529433868603 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +268 1 0.81091557082300602666 1.2358933318969151927 3.4483981065551003731 -3.383618512581433535 1.7406668324172209772 -0.30238893691432638944 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3696 1 0.86800600622993429045 0.004922505357515122304 3.402465381002158562 0.65848083222021358552 -0.84673099788207550898 1.2705126922034264414 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1900 1 0.25018722267937620884 0.83209461402337425717 4.2883322473897500515 0.07320091008629620033 -1.5661356820820269142 -0.54159403618440393746 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3936 1 0.36479299661740594019 2.2167899972567441935 3.0411271921544420493 0.42581003567646569241 -0.91058016108212358475 1.1064075916347120287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1193 1 1.2592603196828990875 0.73497824644871323496 2.647709343698320783 -0.22190336348287537094 0.21012045039263549384 -1.4634321222363078085 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +285 1 3.3072530842479537228 1.9011171052191977449 4.7355229020285571906 -1.021528410401819853 -0.97267035826613179594 0.053378168480135705642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2166 1 3.8652740602481778787 1.4546799191935222417 3.9299605940354109812 -0.17431655476688803774 -0.72937228629370565169 -0.32751301057817971962 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2759 1 5.7044726653980566411 1.3355639753655235147 4.2998220080532272291 2.5309114851875564867 0.25354244242724610636 0.96598007669018293164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2039 1 5.0718046216732153297 0.44487160742838482985 3.7357372683927434487 0.018889859719068650273 2.0915525819113671702 -1.061329349370940589 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2696 1 4.9960996223642419878 0.82652813588712603643 4.8064350631172345629 1.6293897925654625691 2.9421880134349480684 -1.8436079999614445324 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +63 1 5.5348575739429861642 1.5307187502849843863 2.9629224419756883258 0.29717659726676887155 -1.2768317930892563172 0.078713307097458051764 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2311 1 3.661512431265379508 0.47523602893605021436 3.5015857745880283325 -2.0019698355829147474 1.6742116613259649949 0.38099938941236061174 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3258 1 6.3162741532941559797 0.49681458888996171686 4.9184475201163895264 -1.0655492818934571009 0.88599374710961453783 0.55900411820351836312 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1958 1 5.0841465368520868395 2.1234795570928244324 3.6511253228022408912 2.1274434035371578844 -1.420552064579730267 0.4972990117017048739 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1278 1 3.8613566352461607956 2.2676923469075336293 3.1113849156647566119 0.81624671879235521921 -0.29034355114594567748 0.69230349434497673311 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3241 1 6.4585174983051532038 0.44494385147769538458 3.7320205626052622705 2.6670179657653481087 1.0762619562201811707 -0.5229429272776692228 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +635 1 6.6587589847586814429 1.3242220009302652084 2.6984854785542191635 1.5910978010335536936 1.1358365114831410203 -0.15638315320332230041 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +392 1 0.013025808622303619924 3.4826115627054394785 2.7669690999283469424 -1.7595141974167212151 0.047994730006904552655 0.72042348735870198606 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1640 1 0.088840848090141991134 4.7420777027894347455 3.8089232559898529296 -0.28169637988085738378 0.34711683300965190391 -0.34030991892932010989 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3146 1 1.501425128377293694 3.3359963229545219754 4.5748763571624433411 -0.010227752244703161924 -0.51865322890545462187 0.51498404970092159783 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +526 1 2.4990824328171084012 4.5698256911798020852 3.7285096252450822263 0.31368922096235546393 -0.91982930767548742867 -0.37080644539773177648 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +640 1 2.7988742445979104545 3.0543696484211992903 4.3586110008599767696 -0.84337968365050630659 2.1803825773336269478 1.614364830799900119 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3568 1 1.5436352026380193436 4.2528403279617661426 3.71874841074044582 -0.059495304161582593383 -0.83266916184742112428 0.26085252128584768272 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2399 1 0.51774719313053507719 3.6319962915194561326 3.7372138800723542218 -0.8061388298663662022 0.19915334809457888032 -1.0687942689323044476 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2423 1 0.38052541778979531717 3.5945938823322305389 4.858948958630063153 0.47253367282186942155 0.20675488441867301281 -2.2258418860034723252 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2833 1 3.2255511609724853983 3.071873752330795071 3.2198439851979454573 -1.3958317836328244521 -1.2186960330645177919 -0.40272427274815159048 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2375 1 6.6050062977551444732 2.5536592916681204457 3.5344091860237139002 1.2737886268474782892 -2.1485725354061053771 1.2706086251359456352 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2476 1 3.8317607964783566565 4.9125301250162731748 4.1680576419479331562 -0.047653877558465736197 0.79400137944170412485 0.25872295372083348175 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +697 1 6.4527589899354023117 2.74491385258695475 4.4355640835292238222 0.42647653545729258262 0.28242133429756755003 1.0153514602786015697 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +225 1 3.8283336239656078348 3.5318038162418492476 4.1693930733287896118 -3.6576665176788072387 0.72504055366129438465 1.7651721002318510045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3350 1 5.6358417927727817442 2.9210676515302820277 2.9597865480676834871 -1.4626021458821847343 1.9487459636553896569 -0.26574515860183473004 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1403 1 5.4929939498340880633 3.7982757198944554489 3.8392536251289977045 -1.018124341464924143 -1.7993808423676613817 -1.5141550768033900098 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2664 1 6.4351242345526760147 4.3529287715742208675 4.8747507690953968407 -0.92251962968272205323 0.57861379903531173774 -0.045350685839997878501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1151 1 5.091115194668432764 3.0114500154163628132 4.3249451562420091477 0.50847406038215481328 -1.9034259807888602722 -1.1379551386794299894 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2855 1 4.4941261686436071443 2.8547024896921229242 2.6236581418510134256 2.5588776314156032043 0.20143233727837295266 1.4487042322961853902 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +528 1 4.7494548828098102078 4.0306319776591621462 2.8514174727400765086 1.610445024835627903 -1.2385838021911865781 -0.27295284680894960072 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3627 1 4.8984159279551340305 4.8267416584152460501 4.2096522518768129117 2.9081509872195430155 -0.84551213908581179801 -1.2096409780830805758 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +162 1 3.7467028496267729132 4.0889504800644775884 3.2464518122112431264 1.6789541657117852402 -0.56079268868804488246 2.5384804350633265457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3326 1 5.3899402532847258129 4.2526180264559192423 4.995530367181326703 1.4001751142011400475 1.005477155221923713 -1.6265772653691294991 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +140 1 1.7587873129790911886 6.3321684285713430995 2.6829619625966945051 1.1056505695776546183 0.89828110483697110045 1.3452543054340437845 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3336 1 2.6532324998113745451 6.8280360334241194664 4.4051120384217616888 0.44248976635345266262 0.45047194411928459523 -0.82027782155035511291 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1805 1 1.3357713292940796013 5.4132002965482568513 4.4496452388311817927 -0.77974360932307706928 -1.4349459009761307282 1.489938380004222962 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3437 1 0.38852517582693607556 5.2924124933818772476 4.8756173915985154821 -0.89160249502709898461 1.2167928277795716507 0.15694153193500479104 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1646 1 2.8678959108667929634 5.6616705301250940252 4.5378317499192579731 -3.2841680664089727415 0.72893550057894318517 -2.0175133815893757649 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1275 1 1.8167276326908641249 6.9113615065364584211 3.7324740007351411286 -2.0464951590163154016 -1.6553313998013310382 0.56763102114555674671 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3989 1 0.59047191676709209762 7.2973809902009660888 4.1457364946828816343 -0.24499684969294183157 0.66902669982085583023 1.3020320098767228512 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +956 1 1.6578050093314316005 6.5069738687212863582 4.8279993204084101777 2.0051496003937079315 -0.91100093291452677313 1.2001988756979502515 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2222 1 2.2711790208212279119 5.7013250480310251334 3.5199286008647425739 -2.2638675794889091542 0.83926454372377223834 0.0019139200503647123448 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3005 1 1.2248902249832369638 5.3448803497380561467 3.3129162529730997733 2.2689801479421536357 -0.088465576324876532555 1.2671291140579519219 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3328 1 0.44355256637682544119 7.0325551181815963986 3.1548392211197615609 0.70503217139099894073 -1.2930992148771298655 -0.53421749225856007826 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +571 1 0.36797897262329171131 6.061341433414723312 3.0772316803792576501 1.075714939924740543 -0.30447232119695138985 -0.52770232700844288409 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1771 1 3.1875856820074681686 5.0415626881554445049 2.9763041248944572814 -2.4016699403443166894 1.6506632722834082561 0.6544403356679336925 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +968 1 6.0477811973623882835 6.4536225521114749526 3.1416969092862481183 1.8763823966177979319 1.2946300609365253287 -1.2835160692863321064 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2422 1 3.6150652376458953796 6.3347827408925532211 4.1475241537570957107 -0.11672692938583827116 -0.65954856460581345878 -2.5954562242972349928 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1899 1 4.9482803926928831117 6.833068233907478195 3.3189833565471844601 -1.1012836674009189863 2.1148354912205751255 -0.86518961673718164374 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1869 1 5.1286326664145702736 5.9166918756739637075 2.7539455995018524703 -1.7064785961737054532 1.1108083276847051657 1.2558420667494627487 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1465 1 5.9487854879491770532 6.7308849680289730699 4.322007679227676924 0.18597607707795529852 -1.7522872601760151046 0.45508583664783563982 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1303 1 4.0836156822818852064 5.8247757999094114112 3.3774734707223021957 0.17093912534215663368 2.6990429691171429205 -1.5289855355107973001 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1333 1 4.6823293302550279549 5.0833886281057569789 3.2177565303734501079 0.13175525824510922468 0.30032340918624667037 -0.50124064097131626472 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1361 1 2.8640455922776153486 9.1268064660463785742 4.9300347940009530134 0.59639511196716954444 -1.8274137698672112684 1.0968098613117722717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +138 1 2.1569903930757474697 9.9770372165575782475 2.7708507282096856983 0.054274112700420991395 0.41737058744063676441 0.37985788613461424212 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3171 1 1.0364445417610728128 9.220579276068411545 4.2561423334463492907 0.1304097379304630655 -0.52634422003902359144 1.5422490721929114077 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2970 1 1.3598169634187502464 9.2875486862167626612 3.1986801191799112409 1.4976128775733772436 0.24091830799450672518 -0.62751736465695484579 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1863 1 2.3361203779503911804 8.8828406478120385259 3.9065328961323224632 -0.8426378879985276793 -0.63860545917449651476 1.5320248715990099075 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3681 1 1.6923500755388329875 7.5807930442829025708 2.6642445727202388461 -1.4107225064221098343 -0.71464819716467320454 0.16186079908763154056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3850 1 3.0571389092369618545 8.9273376261519921115 2.9788562081901326373 -0.44275935468620858382 -1.3863867868630486146 -0.51799906093283931696 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1590 1 2.9310058743143354576 7.7596556051077554272 3.7049215618734234745 1.216832595938750039 -0.34346955887137797792 0.9270139626199349614 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1356 1 1.0427109166904233728 8.0311627875238933427 3.2293069186172864704 -0.5065504717044112537 -1.4055777423924689096 1.4269285991849327555 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3927 1 2.0996589603471540464 9.6812850109061550086 4.3924715868868142721 -1.4049816926232101544 -0.67464819960676258859 1.0447166283326845271 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2121 1 0.14263439515034923022 7.9844640777217099625 4.7446447571988406011 -1.3006710211630916341 1.010178251240842151 1.3040826730038757031 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +545 1 2.216121750626204534 7.9886110421736731269 4.5262430721220612284 -0.25061702001429170261 -0.25436759989658208614 -2.9454170069394596254 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1505 1 0.25763308663329032022 8.4730083690353268366 3.7823496016460973479 1.3027058056984868184 1.925743605607123099 0.04330151316031592007 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +585 1 5.1156004196735027634 8.8239598548215401053 3.5949811200028665148 -0.93137979505125489954 -1.7967481471853887776 0.2604810204184558331 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1895 1 3.6728568925663238609 9.1993445279042873608 4.377786636592841063 -1.8747712746723950161 0.067199804290580353316 0.018176946478104995947 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2280 1 5.8525570454580604363 7.9056614448052968669 3.1462281702810024342 0.42241333807397840605 0.44574254504884397443 0.761867838737005032 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2655 1 6.0588448117817810257 9.3579959556463521153 3.1187397232941820313 2.9453003911232280565 1.5052361017916826569 -0.87963616432637625753 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +125 1 5.7245418008943884658 8.6875977069327241509 4.5654552307617821683 0.51495598382461094111 -2.2071134138822694482 1.8525972565342849752 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +307 1 4.4466887386310522956 8.2081679174445074665 2.8465982474803497304 -0.10704172039715166564 -0.63117187290096243846 1.2762571078051272444 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3046 1 6.3857762197782257374 7.7573224783538785587 4.8182164447888951031 -0.63778249836100453507 1.4285533286412726017 0.93634714438101962486 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2501 1 4.114836410841994585 9.0183903812479933038 3.356957025796460492 -0.52698085743104450263 -0.23594104161796916608 -0.33411883274542791833 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +589 1 6.5752772074243726053 9.1987498677075443254 4.1083835335229794694 0.2565484366701774599 2.512403801320572061 0.83372632890200770728 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1045 1 5.4898247603060053024 9.8792308731199707239 4.0796225574285367443 0.62283850213305558263 0.62241936823623078556 -1.10818111587672119 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +147 1 4.0902270321754432558 8.1320010394646260465 3.9282146903154573359 0.050017689766054244938 0.51064608547451728615 0.16344005637698147404 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1540 1 2.1338083429512826328 0.8490399089702540536 5.0254816920185518825 -0.11309343902411667093 0.17652858344411728742 -0.10965115908738780337 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2169 1 0.62886841429189999086 0.79989564880257491009 6.9400106529460581228 1.4507548455775645113 0.1804680565929877023 0.055823792949578975031 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3154 1 1.3289991965697920406 2.3923127200934644065 6.8436127168960609879 1.1493689244330060895 1.542581496064062252 -2.8357247791748396715 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +616 1 3.2179595347055198751 0.7928973312435066978 6.5011747186518658026 0.20738917066686632373 0.057713062054629511721 0.21757895751095657211 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3408 1 2.3390680007538393603 1.6832626692075771668 6.9281161744552628434 -0.10588058156505213148 -1.1072987647351955065 1.9058232097482603606 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +677 1 2.6464969759339918021 1.7902647543313996437 5.8063342897922360919 -1.0958595816656713229 1.1461876987435302144 -1.7881493505797880772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1139 1 1.568467860517087642 1.3199425184252273624 6.1957464942137159269 -0.96270665831536639256 1.6623002487109521663 -0.096283705589507953548 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3692 1 1.1966280744595982899 0.58418702231981689543 5.6054415354915265723 2.1458690621714140434 1.6199926834412041732 -0.5110297866037075698 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2579 1 1.7982136242852653218 2.2003494004577413001 5.1318632130494545862 0.56321848604965740748 -1.5814278064076479069 0.97643674575678851557 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1268 1 0.07550618350050643246 0.32004141532292607053 5.4579945813972088331 1.7523061391708483203 0.81518716797419987774 1.6437260059501801468 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3655 1 3.2933320689141214466 0.60986220788067924126 5.1583582500158406958 -1.7412059810855611275 2.8545711795810992939 -0.87250063431098245914 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3598 1 5.4023186811435346399 0.93478484543560047548 5.7699422074043642539 2.1568095863984670935 1.3605405498859852731 0.059453495986058375877 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3243 1 6.6384442702071106979 0.81196352430511886666 6.7526402635894884341 -0.39563815448143496711 -1.0442088597187262344 0.66800244049493318066 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1288 1 6.5147252080167987742 1.467953979545786547 5.4059514728270796624 -0.83451759190930319132 1.6417657919116355192 1.0636884585501240608 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3523 1 4.3136907068037864121 0.069910955316651091085 6.5387225849259023036 -0.65992197590887136105 -0.58467479817576673007 1.2434385917260089016 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3553 1 4.2326799429767882899 2.4510582560192153423 6.6452610419577480272 1.5875645941232341407 -0.32365430328289040984 0.64133660583731866289 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2812 1 4.0409332330133702627 0.6190785875892134138 5.8439011106320650768 -1.4831904100691506443 0.48356422417761335542 -2.361744437390950857 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2735 1 3.6826959508401966303 1.6626753262916562637 6.6945242898535521903 -0.39010145586070710255 3.5643850639075944642 0.45201243232458204746 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1044 1 4.7224633715309778381 2.2829656580962951473 5.5981591349238204458 0.34768515795417104242 0.31547954521649262949 -1.2866447557003199975 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2268 1 6.0041561136807342081 1.8912539210547660851 6.2453054151727904753 1.1886698465450880047 -2.7158693752908336094 1.8486952718969227316 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2768 1 5.4660856859211053305 0.39172019336648250531 7.1390111025972471381 1.4037921925583587424 0.38863809358746925771 -1.3674898670842630111 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2295 1 5.6523150566064659373 2.342273748863305638 7.2777999409102713813 -1.9932908928641497326 0.098163620318738931125 -1.4405747688819710017 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1487 1 5.9949083036845332018 1.3764659511197514519 7.4784976297059602146 0.22204643105251206658 -0.30759026179512249932 0.51751165143470723162 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +737 1 3.690281644047796572 0.80291595286520089925 7.4076464835884427984 1.3878966330654911587 -0.92751777782377409221 -0.66569712876883668784 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +438 1 5.8324621993226717365 2.1747828617527749095 5.0090030989365770253 0.72870275153627284137 -0.45424983933449858409 1.8610257887319043846 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +28 1 1.7648191442617446878 3.0198509498960270925 6.1440481183704473978 0.23977019886319103636 -2.5997652368683992208 2.1793454705591419618 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +13 1 0.52195254350072450844 2.7607136996872974066 5.6816042124036822969 0.71370498667182213914 -0.96441590598943549573 -0.56922766594951612618 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1703 1 3.1437413474667481594 2.6231140398727244012 6.3397444316968343259 0.87391026898038226545 0.18073335650722197054 -1.6130890031554139252 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2407 1 1.0604175377229743127 3.967736100116734832 5.7142577881725005184 1.2043282289416072928 2.1884442374869461645 -0.26766255145326750542 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3521 1 3.2122241303652527833 3.7095823578962643374 5.3552057141689743958 0.76899620151710623706 -0.76528429177563406238 2.6938175056581332711 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2201 1 2.2989204540418262113 2.8997625810437068772 7.4421438301571773977 -1.75539290277525728 0.33685554037503384617 -0.52932908744939211054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +729 1 0.41334434019023214013 4.2903355104220235461 6.5590510193561009089 -1.2407480583870817981 -2.2345563795117571182 0.79221636936642947369 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +844 1 2.68226241504831453 4.6905439429340907154 6.2626735147937253601 -0.13537218772111775378 -0.78183686256340179099 0.74761962332623965732 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3100 1 1.4003174667029014699 3.6258411288300584907 6.8766460739677066627 1.7681278101828252769 1.1677216176472580145 -3.0626603423286136163 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +645 1 2.3783214711632796323 3.9663702305926626934 7.2722780419159747112 -1.3152249738699568482 1.1302462932684222974 0.84479084074758026279 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +690 1 2.0458017182605177098 3.7454397203875564593 5.3421395157594480096 0.41589661720845166881 0.03509896491167895094 0.15639892764231436151 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +395 1 1.7205236185601289201 4.9666261701219571734 6.3129335291884931536 0.74438254844667950394 -1.0376860602400941325 2.6056862498038810827 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3609 1 3.4157998463687935242 3.0424749356747931017 7.3482941112701603004 -0.91312937155717366355 -2.2373221955747020218 -1.4660209189192938695 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3421 1 3.9280851203381761394 4.9014128713006472893 6.1861544609505525472 -0.99476019558051498315 0.8140757953985546802 2.5313179180261626833 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3319 1 4.8703558255777998909 4.3879889568759171681 6.4838094002087469647 0.59980180096928548128 -0.90750905579133822609 -0.34677005412590639066 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2381 1 5.3654748178450413221 4.0403357209864454447 7.3645463362173000377 -0.85588458289321445172 -0.10262527461718953803 2.3106475621405553333 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +971 1 6.1417960772161510619 3.9846770088153276035 5.7478616802815274411 -0.25382317869540005351 -0.22280603037198606908 0.98644610697353596329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +168 1 4.0327398804347556194 3.2700555913484112835 5.7682485379793915214 -0.7917068448843180839 0.34516127282007486032 -0.79485722760734089931 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3107 1 6.5514774811336371485 3.7168134496225992969 6.6945737544376076045 -1.0817654958085864969 1.0470633265210347318 0.71757374467063894663 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2842 1 5.3073443729787159739 3.2691646978820938507 6.0812216171616668703 -1.9282784013469913553 -1.5281851270567183843 0.37906616164141465619 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1789 1 1.9017039254382646085 5.2174204009376330404 5.2429105776702655817 2.2645193704859605255 0.34533658448120907458 -4.1244783378906113569 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3365 1 2.2817969234578105997 5.975603337103941648 7.1975856033558303082 -0.76978538791360140436 0.32812052957688614407 -1.5220161778476883896 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1451 1 0.87836092369837115434 5.3303876683637563261 6.9030241674396979334 1.2471164122537745644 0.4417346441127149026 0.98342934982826546442 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1514 1 0.38006536696246312479 6.4745583578217997811 6.2316560213746399199 1.7287959270107615684 -0.57927706182825400294 -1.2807414410460036258 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3662 1 1.4117114502220997618 7.0618691825898052272 5.701940422733110303 -0.97518106766901468951 0.61262110282294945929 1.9716783394288543985 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2275 1 2.5963516302453455431 6.5471542317492872343 6.0717763925048462426 -0.82444967157222637244 -0.10426791652908720676 -3.4405098456631622028 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +649 1 1.3530107052070814433 6.2751894797609812926 6.6990539134095365981 0.38782776910992800001 0.1811820001230351751 -1.0106101581009352408 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1257 1 2.5416398695551993825 6.9923136989050451717 7.2272262821104362729 1.4500196959985949263 -0.30030140840807295621 0.47689828847780785237 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1258 1 0.25064234478771402204 6.0151213920705677296 7.2540470491190118807 1.347683103986915043 1.5522647154760338406 1.7511703088696668473 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +707 1 0.10489572222062204521 6.2891900250797707628 5.314450124761588512 -0.73791162956501643588 -0.54440168288249302098 1.7670183569837456528 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2765 1 0.78231433505257641503 5.1369621519805175325 5.8660554696714841683 1.5153310566527100622 2.6227812402137091752 -0.67823559282041934182 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1955 1 4.4559496666038969082 7.1476892271887226826 5.3055866833910920732 -1.2556462323589152597 -0.93733235345322951648 1.1105157653405750562 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3103 1 4.6901340972388165795 6.7050126001353298477 6.4833431617346439779 -0.73721477917001165814 0.10434658252005496459 2.9156651172142917794 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2 1 5.8423563630238950495 6.9878616956887924516 6.6855155750063177678 -1.351815038855820772 -1.3540816565830349205 0.084887194302188259676 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3906 1 3.6446807144282682422 6.6502620437858004365 7.1478164053191077798 0.42694378913558583832 -1.0677739831861483566 0.730907029748718573 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1554 1 3.6948261253378795743 6.4562697191380484796 5.6240125096139550465 -0.26566806491395456025 0.56503738211192666707 -0.38389531427733114555 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +846 1 5.6507241017817753104 5.2566133267083721137 6.7456946455291086906 1.8060760339231756166 -0.32532115191830840439 1.8869722705252440775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +694 1 3.4284314186987843165 5.2057188022827398655 5.1850975819900355646 -0.70027067436358070296 0.55374892856138435704 2.0005970369462273695 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3928 1 4.4468846923069005328 5.7040634892998234307 5.0565693699548202034 -0.09226384861505773638 -0.54015134988554613926 -0.028268926763580885797 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +715 1 5.4126149874824243113 5.6869737538849776115 5.8145513893842197817 0.2655603140556114794 -1.1283926225325893178 0.3046599217091983669 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1097 1 6.5801875997148977504 5.7492947138619081571 5.5738845675327963747 -0.60383717695973104789 -0.37909941571081390288 -1.1280205105194776039 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3177 1 5.5745658275675582516 6.9087676451597888061 5.4002929861041817361 -0.79155626642841669938 0.47685893250885041939 0.95074834439381672446 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3222 1 6.5829783339814245124 7.1750533009829782216 5.6994422609118675638 -0.350693473346979534 -1.761338519152547466 -0.24667212523320547479 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +680 1 2.3243443820421112456 9.0948782518484705406 6.5963889844601242274 -1.1795295196373563051 -1.4007395928685786313 -0.86915615169194493372 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2321 1 0.88357174952785977329 7.8479086036626526379 6.111871821863444687 0.50616266596194137151 -0.82837058027456444975 -0.82098644085733230025 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3566 1 0.62454336830985823781 9.2006828591119340643 5.708540783070417568 1.2126179847970732784 0.087117534240704327941 0.56289136550616225563 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +166 1 1.1941906063390135273 8.7690449158942911367 6.983486241873451128 2.4700213147630414312 -0.62636655691458398287 -3.4078048809163044019 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3629 1 1.88569252970825052 7.7751702052588900216 6.3172439498927523971 -0.97729154745110902169 -0.2110202943082062077 -1.1267667122365014887 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3329 1 0.4383022825210915463 7.7118277399377976877 7.4645348651074225899 0.69818711670067523656 1.1508093717714364956 1.0148590751580348623 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1913 1 1.5815908396531355162 8.7753268131186725753 5.513749173512779933 0.87230133399133180649 1.3172237312575760804 0.64022357100167770483 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1865 1 3.1591809275267337398 9.2314412815880917407 5.9722305036099525566 -2.3146864186009770137 0.66082712599274628928 1.5264084093147376464 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2359 1 3.3146700659773666864 9.2687414212758305609 6.9692500627786255762 -0.27184499431575892547 1.8944034404986196396 0.11974596980098541066 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1417 1 2.5189133497248872295 7.522743240194290415 5.5622519094777143067 -3.3663255612204241451 -0.86439598020183949778 0.46886016206812480833 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +97 1 3.1051205467369182855 7.7547259760473172818 6.9908575030827186936 -2.5850812857956482205 -0.644621117151684353 1.5508029666658684764 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2935 1 6.5640459662973329458 8.6585905013770485539 5.3689925064156627244 -0.707246616392283034 1.5679403359590751155 -0.90680305403496075378 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +430 1 5.5579471644114777362 8.7829698253282568743 7.444216608948322822 1.3142486916816886744 0.28265425074075906098 -0.40181921931010861071 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1864 1 4.1219778483904248034 9.0056520442288512385 5.5174455359406202604 -0.14722113398095545977 -0.1110322981709048612 -2.2570135652232758972 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3567 1 4.9379940779295203868 8.5594696966523056147 5.458142649245512068 0.38463072822952160124 -0.48166026774723114112 -0.32135055524277689187 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1682 1 5.9128745903978954246 7.9768365557068108274 6.1056403090089075292 0.96803960538252487034 -0.046981123874076435865 -1.5381134005260741482 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2460 1 4.811595310971428674 9.472532243950301023 6.3188493664086111679 2.7584650676807571656 1.1169181597336426126 0.16364709850689898585 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3193 1 3.5161103919992848788 8.3138962818939194932 5.9123646399054248235 0.17141777361474005992 0.12804267034880131848 -0.90181056022940475625 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3494 1 5.7207359039067702255 9.8746584121608336204 5.1437792614216553133 -0.69953654116788588357 1.5252382583163628382 1.3764419012453705804 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +376 1 4.8830843954359890446 8.0154711075312725654 6.9024198984175484384 0.86716527919706687388 -1.3174340768032619664 -1.3053185888645195689 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +237 1 6.3662131878242753658 9.5198249247347348501 6.529485040860435241 -0.63392394002718843726 -0.099881760699460989117 0.22774994705401108153 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2918 1 2.2217281750901025639 1.8529238854212752852 8.0121066806771850111 0.35626356685109195066 0.59387215847403840296 0.41337896988086031413 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +599 1 2.390974032276993011 2.1753809965172563601 9.070969462382187487 0.25019773652070970149 1.5046922567166574058 -0.99069607300073203593 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2141 1 2.5287248137466500353 0.86550650281529650787 9.1145159205477739306 0.9345513090325761052 0.53070608395886120778 0.47534132045241378473 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1468 1 1.5745951897339303116 1.0203873523577766669 8.2901633759560233727 0.72678831464967752485 -0.49664870736401423024 0.32254433165218249213 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3233 1 0.83886524663286987646 1.0770416060607128639 9.1577892439230534904 1.498133131693544895 1.2117349433034982908 0.26073779126665524997 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +761 1 0.84673101226822511389 1.7280307207971434824 7.6800076055588739621 -0.96603851692938191853 1.8799280245541793999 0.93595158530953859177 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1549 1 0.21705393825779265016 0.53627312056922737948 8.5576528321094951224 0.39677699415795764093 -2.0142424354657686436 0.39417838822257866838 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2265 1 2.9190354051331732776 0.12928183883057262071 8.1714470554560740823 -0.74671403731209673449 1.7728460140300896786 -0.31379025327523951683 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1136 1 0.16737373959530921219 2.3822070041217089376 9.6041678666838485867 -1.6405990166827375543 0.63212163978775359752 -0.075241091372577353913 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1245 1 4.1903665804198357847 0.75766220143958173949 9.4105217031031251906 2.1120991502475923163 -1.5383926729414723056 -1.6727821420238107031 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1686 1 5.5446408570977130381 2.0898164227059381481 8.9625935134030054741 0.57327663511239812522 -1.4880659727432092865 -0.89018053769651561691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3540 1 5.5677256282610025906 1.0156926448641041549 8.6755964709068162932 -0.55145337756109691352 1.0997919883669806662 -1.3895743730533320903 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3917 1 3.4651919006742133433 1.9590649751001132373 9.2883404241727802741 0.67953718745106372889 -0.6106816422109763165 -0.77809187792912226644 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2117 1 4.5670986928953620776 0.72894405070153023285 8.2280146022562004049 0.85400188373298047129 0.67025880121571657089 0.65485729373717360691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +639 1 6.4343639244476777961 2.3925091501026165552 8.0190200457443303605 -2.0352346280845434734 0.11159795741601352681 0.16397285003116121582 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +50 1 4.4067093238888777051 1.5729160093515908159 9.9606092809459525483 1.7727340418998762672 -0.43499744281859259454 1.6556162872328719082 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2052 1 3.7458536449256096823 1.1551754990423024338 8.5800692919293037875 -1.1133672489083330515 -1.6175396735133009685 -1.5255197209081590159 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3489 1 6.4959163880595811591 0.43651097703672647743 8.3377471046525037934 -0.7964374673941247984 0.14057975854442600339 0.67557185627109994641 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2032 1 4.3005249803570366751 2.0054364552141930034 8.5688614272251406589 0.1081243753803478036 -1.9237396437191907062 0.19355814421717293383 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1279 1 3.354089675039602092 1.7063458591430582523 7.6430360789794047349 2.0145888665703295395 0.68528405655777258065 -0.030418683604436315415 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +271 1 1.1307685833956595545 4.9544590541518997995 9.5746579313930713084 0.74960868361447430264 -1.3679514276990061283 1.0658905023463283168 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3537 1 0.68866976159581605454 3.4226197119850132466 8.1062935948909249362 -3.0407691042704509954 -0.58843065151275786295 -0.95211320991688253024 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3306 1 0.046681141012039788218 4.7277236527399075783 8.8862643138626573602 -1.2018940029966740379 -0.98470480847291730342 0.85447228350671877717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +76 1 0.924913010499075261 3.9807314262700987939 8.9398545848437791506 -1.1485134786226363079 1.0795497383091916532 3.0071842752232909035 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1366 1 1.4631782786762481674 2.7666708190022650804 7.8580498933215823243 1.0476484626064248573 -0.9354617841788431809 -1.3203430096126584914 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2071 1 1.9274324262249560302 3.9141207008702698644 9.2010961564851054817 -1.2638210554420461484 -1.168215876002312914 -1.6264819680384765554 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +399 1 2.0318263983116278126 3.6586349920520540024 8.243734493184037504 0.54685641674719243088 0.0074748496012474029832 -0.5077622902733265331 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2036 1 0.22006294484377841858 4.0185648691746109762 9.8933508641683047813 0.10566693608086155654 0.59333888150714297893 1.9376534590040122019 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3402 1 1.4645610273118379041 4.6856109066548388142 7.5885895093662876221 1.9776870573709512957 -2.6956494955714629391 -0.65480218298971448743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2308 1 2.7735454512257819992 4.4755670649520888915 9.84867404992446005 -0.19073880585275382327 -0.5604460386479659384 2.1237127225293259691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1220 1 6.4755264551850917343 4.7403295683962003437 7.6399898627636106951 1.8997770104934517121 -0.43936253184657364512 -0.23443292099598658784 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2788 1 6.0757016821723643929 3.8668197534787140945 8.3667908275124851514 1.7404068250997666301 1.501837448398472219 1.5084579906160957563 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1929 1 4.2989293731181366098 4.9121266060268728992 9.3467766733140056346 -0.86935064284136887025 -1.9497869562527363474 -0.38514922000073587016 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +940 1 6.5959710517219978243 3.0417082927378458201 9.699550797587850326 -0.72497959663413658049 0.98646887810601080471 -0.10528610458004056261 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +249 1 6.3077627934810278632 4.5774350608825091768 9.3710305580139099391 1.4050959581019708544 -0.17714220763910121237 1.6618306974313936664 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3035 1 5.621505942881733553 3.2176008832788243197 9.9436084083952032131 0.35249731576640330744 -0.72236516877477274789 1.7064640697430539795 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2292 1 3.7703339671449151993 3.9813045110105007574 9.908705127010822622 0.53297834462524285026 0.61944636621938153898 -0.48747455073214346344 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3515 1 3.3522159452878099728 4.3808577131175860941 8.327376239870352137 1.8460597324943921471 1.1274001344833193272 -0.98761209796083115897 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1129 1 4.5015439172851934302 2.5064364603989908176 9.6335373225602491942 1.7200823131998448368 0.9234361274168089162 -0.61845111951527065308 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2253 1 2.0559571023766247677 5.7652464777033172183 8.2939370206306310962 1.3478680784108951762 0.65571805821256257119 1.2022504016657598047 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +378 1 0.97168779494060941726 6.3382188116670397093 7.9932825245444227846 0.27618521382123933927 -0.11602528171902065646 3.4627766361413492291 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3021 1 3.1478386223512586639 7.0156775442672945076 9.3625547557082295924 -0.81901738431478310343 1.3474891119458538569 -0.56715036643816663098 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1678 1 2.8725790773005286383 5.7171860051367247024 9.074991539955572506 0.51377986611753923007 1.3732239132948842464 1.1725018681362475714 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +689 1 1.3633680283329872029 6.7467948428104875802 8.8423763450815968667 1.4275447012659299162 -0.13023241865091561564 1.2658815872987547735 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3069 1 3.0295656742496483993 5.9349703543387821725 7.9011175721561066609 1.2571353295775211656 0.42597948436458332733 1.7480930089305544151 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1165 1 0.024677558355761134573 5.8468189750771246693 8.361974757180568929 0.42842622981990374775 1.47900931531939972 1.6490599741445737259 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1821 1 0.5635318794246636509 6.2621565647591026504 9.2149972280540488612 -2.2181833874401308826 0.11450508020504673867 1.0644279716459432716 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2307 1 2.2387118205378402358 6.5682692122677348578 9.0339773586491070034 0.41228595134705570135 0.40897381810393379498 -0.38162089508311392017 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1054 1 0.71995906921668284539 5.2678728130517367134 7.8717910648579341171 0.087282412349292626264 -0.63552131690837176947 1.2004301497741518556 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1826 1 0.6164160971724694793 7.4723495828415407161 9.9536212633727121357 -1.4153405389305329098 0.17002766819338796522 -1.0701429686584396084 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2404 1 1.2784238907063378843 6.6018638613350493216 9.9917355910582728029 0.82281513803907246896 -0.27607809215544126813 -1.0280831019129814674 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1338 1 5.5260729681789912959 6.2515891294589902571 9.0786344947395409832 -1.1202495702032677638 -1.9517451400889713753 2.3137757456234573361 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2894 1 5.5665129754788722494 6.0248761463798370386 7.7074381330783285904 -0.23353490427741632751 0.97316697257499351625 0.22635306643698152596 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2910 1 6.0385074258174826767 5.4841355486687994869 8.4541975760595651224 -1.6670174160467559066 -0.85405117012002962351 0.27435810912734159839 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +644 1 4.1966151466391927727 6.5467009133463243131 8.0084083681835238622 -1.8494470068703274812 0.48971942518768091235 -3.0439346522705745812 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2231 1 4.5103313950500414364 7.4269017766657441371 7.7031174754501821056 0.66384188560937751333 1.0828210853295423544 -1.9441744644329672642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2406 1 5.0415849273591630819 5.068006188707039783 7.8818770275877270137 -0.43697419677566745611 0.3562777197921809802 -0.38766645271300637088 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1575 1 3.9342767855221083551 5.5296512475682657595 8.7915275793717544417 -1.4647268511780640043 -0.0013401212227859313035 -1.6968486782304252891 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +708 1 6.3379343254907327676 5.6881362413802465383 9.6027796957328437344 -0.49879032442222887012 -0.71818765078839141847 1.1812777896313704229 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3010 1 4.5071600844726855684 6.1629485424770944491 9.4937866952149221333 -0.68086164248445257829 0.06287236996170728065 -1.4849901586369973483 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +419 1 6.6058067810509566442 6.6946430968940795481 9.2902054708406414107 -0.18331939843895647679 -0.45930814255218455067 0.19059952833376092585 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2618 1 3.9361446833704585302 5.4927632700150823553 7.5612552673927462266 0.68233847995750807058 -1.8588590735739585202 0.7098979443584590987 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3702 1 5.121051040640340446 7.3883761548096851257 9.9042006188129825262 -0.57672297509485725975 -1.5889068773949981406 1.4150753017703621151 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2568 1 2.4291809708754170671 8.4777074756761603425 8.7346438153788135139 -0.20502886086857990966 1.6025256132300140788 -0.78561461406687349562 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +287 1 2.0439050073887061743 9.2173948121192577076 7.6184993682699628792 -0.76556491111206104172 1.3829044059496045094 -2.2797821154493314033 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +410 1 3.1550913138245899603 9.0161972118143687283 8.2822039437084065128 -0.42744837323743639645 0.31399903584229904574 1.2039128503127796144 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1120 1 2.2797202639931262169 7.940996189215710821 7.6086674173305057778 -1.7494032591434141022 0.093726782481613382658 -0.54209375279473415166 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3829 1 3.0172807428690719966 7.7064506259859850701 8.4056061241453683408 -0.52324565980508352947 0.6499109879375701837 1.6334966599492219963 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1104 1 1.4240679570251193464 9.659960306676580899 8.834948361844613629 -0.40507514853483228556 1.3471312449537362621 -0.28801486517956076394 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2729 1 0.28344433624605108735 8.9946950048919536158 7.5523680914555502142 0.043361523580961756907 0.95600054734305206505 -0.0075937661604425230402 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2303 1 1.1781747916822693512 8.7122395525289135776 8.4595390696182182211 0.13567665150582342015 -0.92558976855145391749 -0.24672872150999197727 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3237 1 0.044006696953053842103 9.9572044894987481456 9.2961794185097357257 2.500967408547317028 -0.6139082966936899588 -1.5649754594325793189 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2737 1 6.5952887024068740374 8.4214032797761504412 8.4276272824138303008 0.32838340191746084873 -0.83291534345070650236 -1.0822925805985470493 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2482 1 3.6640515290053117248 7.9128409088974622776 9.6507007629631118562 -2.6584706728897775641 -0.5385563097244793207 -1.9412095232041799431 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1872 1 6.5430048597617807005 9.8216266217799752525 8.5724911098940363985 3.2481209708133320646 1.2798555281321739585 0.97023967837770586087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2064 1 4.9562477442268910721 8.7360731190567264548 9.8055311166279750523 1.1281151768925505863 0.69308496744799796829 1.4786240572135151972 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1098 1 5.3190585656338891241 8.8168313195498715373 8.4643329526776973637 -1.6085257637475798287 0.81696286189008004985 -0.22641514982468224915 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3022 1 3.9557853855628328787 8.6907743014128246983 9.2162969591573915551 1.1757990535945908039 1.3277741712379198535 -0.98340190757642831354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3688 1 6.3064911918423467441 9.065379851803479383 9.2554167924918289145 0.26200346623324577422 0.27732153287586336354 0.084371206015162833469 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1896 1 4.2719873001738903895 9.3257222344957835247 8.2081488384464975638 -0.086093548724672411265 1.9459615973415826939 1.0170782550467269978 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +448 1 3.8852705878145101792 8.3749921252365417956 7.5878794827654019173 1.1800621058803206775 0.79864537993375483982 0.44883056137329419011 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +916 1 6.3476182579407938178 7.8384449248653247366 9.5137959185647407168 -1.7602649330403319361 1.1367934042178717835 1.4978806439348424373 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2128 1 3.4056413930607707385 9.7188118716217513082 8.9773812464633468977 1.9669057223064445594 3.2808727000841235721 -1.6459421129126599048 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3909 1 1.0876002506128368275 2.114528937970898248 10.095838355697363653 1.5760066915566739443 1.3544567816765100687 -3.7384802406215555948 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2182 1 2.5713648817755871967 0.77444476787294491693 11.54467905764732194 -0.10488135724496167045 -0.60956933093313769856 0.49061947964152746726 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2766 1 2.3025358749207498477 1.6683434866659114792 11.7353455126706816 -0.78237743355413602586 1.6275265973835153499 0.20831362200581873823 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2323 1 1.4022925065254023824 1.3872971839724366205 10.979350396881390139 0.6618219248716903369 -0.30902068161693563297 -0.18999304014457318868 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +328 1 0.51892879315566675658 1.9294642071390089022 10.886926153408124307 2.7114018287780297101 1.4745372026020202583 -0.15548782270367086933 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +657 1 0.93086900200094102598 0.5482138763584526453 11.981837162332768187 -2.0557249822185470478 0.6095600730277282997 -0.33003007097163672423 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3061 1 0.3891843108839840859 0.6384701169156519196 11.010389861131331557 0.8526182726528084288 1.0451697176463274896 -0.003845221615044122198 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1128 1 0.98699231473181658902 1.7514473544960287299 12.20701021938031694 -1.269840196334505622 -1.0432058939584731849 1.5662203979885227501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3480 1 1.7420689086529541623 0.024080441888053031457 11.556210681534057727 1.8914359039939410145 0.2240700717856171087 -0.39410962945664484991 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +437 1 3.2774158650499098933 0.63413595199110417422 10.031611299349538768 -1.5866534270459902167 -1.0768281603372766853 0.53967748675078375253 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +671 1 3.0738595055242532439 2.4279419893401361641 11.037339220011407548 -0.47447711962062666391 -2.3695272059187297842 2.5169153306679730164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3396 1 3.7966292654498392523 1.6732849988107645345 10.764320946029188875 2.3923475976711334745 1.0463992575346388048 0.44903559011676502655 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2213 1 3.6052191255134098391 0.22973459992126427087 11.008167733608926753 0.80513168081454022929 -0.37164596993497456268 -2.6174372518105957219 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +951 1 4.5945827281381141916 2.3146097012730884046 11.80699724672024864 0.23409769383738088244 4.538402815495552467 -0.3116440203358463723 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1838 1 5.1045433675445330834 0.89164643488185879594 10.550427972452673941 0.33056881481505373532 -1.3841265927103618694 -0.53072047634626418056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3386 1 5.5626722793748371032 1.2188679473166710299 12.363684706031488503 0.74408139607527379322 1.3126543292848522615 0.70938479776617091588 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +706 1 4.5395414810280865225 1.2756346691488820166 11.584383323483061545 -2.0236115728371126821 0.99202240140519770684 2.0239156225872161343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2826 1 6.485291928505978909 0.46202953303713301114 11.699194092957187152 -0.39569212835933703643 1.7637923183803005944 0.38962252038291655953 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +254 1 5.8371430183844070783 2.0245884247116165966 10.477779786977416521 0.51961711477718863783 -3.5513957044352038039 0.49371559001127968136 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1513 1 3.3921352373549411574 1.7553421598919671798 12.411310026837304221 -0.99350333358502662673 -1.0383713756236825354 -1.2758247686588839453 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +625 1 1.1991202717963347357 4.2374904290288668562 11.537521035957047033 -1.14396895557312539 -0.8354798661953152239 0.25667853054202893759 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3606 1 0.049481947117565115712 4.6893194286979262841 11.61844271464353362 -2.5855749313150782065 0.44472278760005662379 0.023934978344023975089 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3144 1 2.0008333635791646365 4.0879408346699372956 10.36733223187385633 -0.71578730426471059989 1.1351671806562053657 -0.10687721135526138949 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +521 1 2.3441556188817549433 3.3128199813251750783 11.092274904991361595 1.5048581920993564509 0.58061890816443295638 1.8991679704207473645 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1266 1 3.1768043958490528311 3.2763388396430537242 11.975141054140728158 1.361555287406493342 1.3878313658118783813 -1.640126745101024186 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3200 1 3.1199508522199912441 3.0688298069367943022 10.079131032482600006 -2.2604582758351328131 -1.1119559632335052068 -1.9708262164754688506 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3197 1 0.92528766395462735961 4.4797404504229936251 10.620813321062609447 1.0740148695834865755 -1.4553845982083040145 -2.3835458088341439087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1756 1 2.1169773330825059077 4.0940590219089383339 12.227441756957892594 -2.0935389268217607928 -0.36023775092387910757 -0.28277774995346616205 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3434 1 1.2350915964611388631 3.323794668776524297 11.041226617046183023 1.6976286916540048733 -0.4762856450745349135 1.4048506434186649461 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1052 1 0.32390039158647015993 3.7988829967163013634 11.359173606536487 -1.6281176127218868199 1.3318301451294256577 2.1207776947670953227 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1327 1 5.2032175707167827028 3.2632408491220394886 10.984778985091800507 0.87687271682787626403 0.54938849300994629932 -0.64242167940486583078 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3415 1 4.43633071206524221 4.1464482526404795593 11.313841879996402895 -0.25000013906345097681 -0.14422092713546275089 -0.35407430270838607944 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2733 1 4.2084970232799348011 3.2467425839851191682 11.484476464845910115 0.30530182211372958179 -1.232862497920964584 -1.9216317389096360113 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2658 1 5.2390411161018315411 3.7578550353326742872 11.999843546623763402 0.6679319368034764004 0.64337130282850274465 -0.29267591769697276494 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2368 1 3.8660712599959898839 4.8659264790563447889 12.264179653619358135 -1.781009611471182863 0.69084871244307155536 -0.80872278152045395938 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3914 1 6.5694388135624999236 3.0707219906903837625 10.985304421187684909 -1.3327964615732112996 0.4038765142252205842 0.3557920586564087273 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +231 1 5.8643048999664673104 2.7544148108651822504 11.815860738998660295 -0.57674559683407355948 -1.6363670381697477119 1.2436606429644561089 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1937 1 3.3598267058040467425 4.1204538105984926943 11.4776409014216636 1.1717382571015639847 1.7507093632672596772 -0.90195921026753800298 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +580 1 0.36720771392624890206 6.3578263975900899396 10.861242515966935684 -1.0386681582739185625 -0.12756749264847189185 -0.73562213485480643094 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +508 1 0.93178897293111451194 6.8541939446151110005 11.620662372566824772 -0.070942694896363192592 -1.3019428240262578278 1.0542999569519848624 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2080 1 2.4259830930934227489 5.2705847131054479604 11.156286867548256936 -1.3160913933064035675 0.083812418990951487174 -1.3139135762117759576 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1745 1 2.8636048302226169149 5.0589130362297014543 12.098207723934567781 -2.3815640871916210486 -0.95718992881779507709 1.1790039600101973605 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1778 1 2.4317100587185973559 6.1777475167228708131 10.42948323677161504 0.85062515403496818944 -2.2031312849631876638 -2.1132347160380251516 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1219 1 1.3892375422029903387 6.0835973047832121452 10.870156566663659703 -1.2904093476811127061 -1.0231283863827065339 0.43688779485565198968 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3788 1 1.0485840975472067171 5.3931368868429476748 11.509755466650432254 1.7056254282867906458 -0.98976209385284774633 2.588252066040442223 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1874 1 1.632433658739823823 5.0243282752241160694 12.391846862063989221 -0.72311179037151351867 -0.47224865535363202973 0.16795624784329651891 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2484 1 2.4495913903314590065 6.4790139328939568841 11.503645290268503132 -1.7703634110794874701 1.7118412619884642023 -0.75306114703318771664 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3638 1 2.9548255277270536467 7.1137555559997389665 10.63014776721993826 0.68448188623231331906 -0.64117415002690059112 1.419971013847127761 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3577 1 0.44567543059502751079 5.4409230288897383332 10.389985943921232092 1.2401828976957578465 -1.504188362171151816 -0.42958351835392738494 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +647 1 1.7085719131845042984 7.1631370671199343647 10.959628188779625191 3.6822572423434629663 -1.0770534804795302009 1.1946810457438128417 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3767 1 5.2178950310912819432 5.0399945218531962965 10.764364889605310793 -0.43788578965984836788 -2.1368062634202784622 -2.262269938577081696 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3080 1 3.4044629226576903491 7.1405936394613371831 11.587320204215835417 0.48726669089101243282 -3.0468516081066394641 0.83163791571876188868 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1787 1 5.8274773608888459364 6.6749345861857705131 10.778509783859410831 -0.57439976319440988473 2.5131645027208011633 -1.7869485477032838183 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +850 1 5.3042530524651283486 5.8354082235721032035 11.678801212720001601 0.93713023634198611145 0.61351861165996612879 0.10564206058881070449 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3587 1 3.439405628455927566 5.7302699245394741467 10.086219074223176762 0.68148421151111016059 1.0820875798725337891 1.0251687020107955739 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1797 1 5.8796661096663607182 5.6748078103285131135 10.505041585853884811 0.33186044670225423037 0.24343447371582629946 1.8380773638726926045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1221 1 3.880967201859426563 6.3290558611233498354 11.185874079663799208 1.7593944447766705075 -1.3526643458853837565 -0.85714577567319216733 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +9 1 4.8018347690886642454 6.1318009607310690612 10.746382065029859376 -0.7259992892390350061 -1.3493026234523202156 0.40913170735955989299 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1240 1 4.1832029432801389746 5.0990978912710307469 10.91870238109763136 -3.1263372968291003318 2.5557469932603229523 -0.21245661618384747982 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1991 1 1.0873977101690861513 8.0898950712093338211 12.058846624186703167 2.9104599228153968937 -0.76523702398822945892 1.4072854271831922723 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1700 1 3.3144167714058569985 8.2123516534479801265 11.485563123260821072 -0.40395853692112215771 -1.0263762163938725536 0.23758718227845213034 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2075 1 0.18447580516705375242 8.6883164725507846526 11.011598868142419505 -0.36518563970303263844 -3.5455351571780520104 0.29358757442575483809 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2893 1 1.0065019917618944767 8.883170181520648967 10.045227366483832299 -2.2378049238150028444 -1.7777149359280173258 -0.29505172407764912457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2718 1 2.664280423342435089 8.262667136872876128 10.635036946074842845 1.6066144088903679954 -0.62556533344800679952 1.1017283821664565213 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +890 1 2.5450394707936396799 9.1663740113117491148 11.644800893884223569 1.3046708180939863286 0.058042009674646892481 2.9616137726548692477 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3112 1 1.3445991310975118349 9.5477470192055911014 11.683438427838240159 2.061129020994568517 0.78627039296193979023 -1.7001438752428628121 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2668 1 1.9276268702738594829 8.6946274301292021391 10.850818296360362325 0.46426870757059013339 0.98233425594048795482 1.3342897479847553033 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3603 1 0.61870433741494845759 9.0556309916960575634 12.388112709599523598 0.096182024342203242817 -0.46143445985316666746 1.0421747250085804382 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3266 1 0.14847310773851810084 9.6209229147150612249 11.398373157623277407 1.3317324473402045726 1.6259286358475690815 -0.57162403917627158112 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1423 1 5.3020468986979212289 9.4463345455689253782 12.23576796522331378 -0.49292330733637151896 -1.4913019034576202593 -0.54218125230681346594 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +154 1 6.3501102448446600235 9.6604635195508823386 12.143134439944200054 -1.98395782903654605 1.293037930576515615 -1.1165728502559426616 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +853 1 4.4261878516478256884 8.2641289778288946621 11.572447420040882449 -1.3344281324744917683 -0.99547857808292272708 0.62033362970382788237 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2435 1 6.5430240220721742617 7.7064082238407367598 11.40158158027615265 0.04727707457527048629 2.2794210391365776758 -1.3802653833638314218 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1383 1 3.6504378022717327568 9.2407017197840133349 11.788637894375847637 -0.41874073264694755547 -1.0435836884103846245 0.51940118282485414625 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2750 1 4.3979508577940995551 9.6419651037514384484 10.273395645250904096 -0.70092782866320968438 -0.50896767670819853535 0.78949563641774123113 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3593 1 6.0424453614062212381 8.7678559309051813386 11.742228171801478709 0.13256833819769900384 -0.43445111047907164492 -0.7199338920766198413 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2950 1 3.9894238670884480946 7.8035366145666644755 10.655156565001979274 -0.046195094287891022566 -0.27629522120647287409 -1.0927355764157393736 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3718 1 3.7643041325381294548 8.9274373168506055976 10.205806857421793055 -0.69067322621672400107 -1.1933869524188147615 2.1419771409069614521 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +265 1 5.3583921422769780207 9.4960420481570366746 11.265382895136024644 2.4360732480532267807 -3.2098323024007773263 0.20907856760960813469 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3384 1 1.3275135677550242708 1.5123550914000818413 14.392460987229837244 -0.50916842411165874616 3.1999004837758810993 0.097870455225516128639 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3371 1 0.85367815084927700653 0.4334619265887306172 13.244829748217190613 0.31494090122739581972 -3.2176262314683108379 1.4928210215387698323 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2567 1 2.2984835662607960849 1.1183512066403051843 14.256243405361741949 -0.090141791624815767459 -1.6304676717990889134 -1.0400731716422375595 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +605 1 3.1151674751467735014 2.115915264194370593 13.728197172791970715 -1.3131923453197440477 -2.9547419651860820089 -0.11528838867359127163 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2233 1 0.38877553491292365928 1.8430262072704528542 14.941723604116248225 2.0332913635090368309 -0.052025396231598575181 -0.88265584046842959776 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2086 1 1.2155966223324448094 0.094451641554133589085 14.161430797977470064 -0.86611735253670707468 -0.17018184209096340331 -1.3759095339490980958 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3131 1 1.9272545820603463884 1.050728132032114015 13.205748192223735415 -0.060089498067737112663 -0.30220215310522546837 -0.085650195273126367157 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2514 1 2.9202035912062163092 0.83484274237395328377 12.925651440879509124 1.9499476003624705012 -2.2774907270562971817 0.17404085237308872247 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3470 1 2.3504315925817009791 2.1874900489704414142 14.375599808704970783 1.509111910296158543 -0.80838543643944182904 -0.95879200480795079287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +450 1 0.39290879883802476424 1.729333202899169919 13.215943858731028726 0.84248101469325864521 -0.19791617580547243849 0.12099318566946702658 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2556 1 0.34912860796897554616 0.65612263389685998582 14.080267890135161224 0.53094383334831996013 0.78354214954087808565 -2.0366951688560757106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2839 1 2.2246817510507863602 2.3520737314085615743 13.361331786128184618 0.51696276900813431521 -2.9962282717109598451 0.40140073937795928138 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2969 1 1.9073606503276567814 0.50777956757801001597 14.885310558208015408 -2.4876607942392294781 0.27591747389171883409 -1.2930709960542219328 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2385 1 5.9357705636210766897 0.3325477858305833645 13.881449260790812872 0.081674016680109373656 -1.3050222110052578373 -1.5165155866298105636 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +886 1 5.2227761965068291161 1.0180527668723469148 14.844819894566946061 -0.44297404385237842961 0.48528754574418031531 -0.44225925620511113978 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3475 1 6.6585044472914711733 0.2407946116379262036 12.641465918091348897 0.94522737348877128305 -0.56529495761134795906 0.25831086058698421448 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1347 1 4.2942657164962643179 0.59742495376047355382 12.559221568354242748 1.4301114094535816168 -0.39587688741411836135 -1.6235380239095487109 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +902 1 3.6119075028886666878 0.21294839865827991376 13.79883083844105407 0.5986113105475768803 -1.0662164641560361034 1.6061627386379628835 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1115 1 4.0222293891202456351 2.3850015444847629809 14.312422028270813001 0.00089976262260266996317 -0.91470481334979047983 -0.28156056816451258129 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1645 1 5.2365977952845836896 2.123304255745510627 12.729824842352767789 -1.1863009392229355576 0.87239890957192456344 0.29124954582362072575 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3536 1 5.2171982420361722177 1.3795751557532498488 13.495730104753222989 -0.010567948560653656065 -0.46829003928016510461 -2.4460028759737619808 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3754 1 1.4552075359724587766 2.5513719361997511115 12.687846833875690677 0.18474502904033479611 -1.6475087976580549132 -0.52324156584078074239 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2461 1 2.0565623248203963591 3.7042171224538043006 14.051071823740180378 -0.19967509315822459803 -0.22869260326529552985 -0.34259939173821402081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3569 1 0.64777196875936926546 4.8762426342456501871 13.054159116425649856 -2.5238459634193715075 1.488962701971093594 1.1894450966952525572 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1504 1 2.6692107163769778211 2.6852699172727065857 12.604929580782295417 -0.80910446727828677638 2.0405719639636705764 -0.85116254670152924344 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3057 1 0.85713340273000138136 3.8785863867256460402 14.099429758845976934 1.063996283498183093 -2.7981579999503742862 0.92379058190825857899 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3773 1 0.82804047803722924392 2.8738586938490309208 14.489808918126005466 0.072632240186327301501 2.8912760652415996354 0.12928292173003139154 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3633 1 1.4131199394774955902 4.1924935960148372871 14.905737955269557915 -0.37853590885652432796 0.47911337892265631888 -0.57002369396711338734 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1095 1 1.160438781827916932 4.7587807602216756209 13.989925300595741575 0.40910177156767563167 0.81241304785612522554 -0.090655395971696833834 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +953 1 5.8547717519677942022 3.6023072343529425332 12.927736028375147015 1.1492530376878771214 -0.47787773292560697946 -1.5413010524763890441 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +995 1 4.6017280489744711858 4.3127728074913056489 14.146905579724764479 0.56780474622623755554 1.4216424191761030116 -0.625915893083165642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2245 1 6.1857551130053689548 2.6209606361424389043 14.72080051372843279 -0.5067162951181208852 -0.80729391004352402117 0.55494560985286378596 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3792 1 4.6208787102474824238 4.051011624841186709 12.771982142005976257 -0.24697498266968126446 -1.0021138039273840281 -0.35092972755833412579 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1583 1 3.8220889930516399602 4.9358754801295132708 13.676543174790115387 -2.2440063130439460437 1.7097120557643161742 -1.0307477490258039055 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3427 1 3.3735751481018549924 3.3388881230073113038 13.583635412942456355 0.13774470224213547498 -0.07710634798474388929 -0.24655316834047549812 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1862 1 5.4368769708454260936 3.9692312010746135797 14.708778667978473109 -0.27823000160636357503 2.2254855222363287837 -1.5300716174913171486 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1324 1 6.3649416877231983491 3.0268484470448786539 13.867075244904382814 -1.1818978808488715959 1.3047840554930398849 1.8738515828208797132 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2258 1 6.5820727109627163998 4.6775517697432134057 14.661441562147068396 -0.72177632464471308538 -1.2036203311504765079 -0.35465817231169333157 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1121 1 4.5993283053475515487 2.5310582266894470216 13.423059666056541772 -0.42140251355745733663 1.2030306616972379352 0.087128742438206119303 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1450 1 1.5558783796402069211 6.984287751343560835 14.33294867906837311 0.76417531888477852053 -1.4638187511633162785 0.41636540016873635484 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2898 1 2.6198379878182644909 7.4374272578247397902 12.755789452516866689 1.5222088203388852712 0.078192356433232232393 0.13113284434949573631 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3838 1 1.4247806271416092461 7.3587829356701606187 13.341922709461050189 1.9815464031749909779 1.7669416133550537307 0.66033155651840880207 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1604 1 1.0194956144450513236 5.9227812086562217075 13.546463765225736253 -0.31678364350868087884 -1.0710062202351229299 -0.12854170034313358584 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1483 1 0.45471438478667508543 6.8236731745555312401 13.839714525280481183 0.80960702796104599965 -0.88377501687227977278 -0.60660562173598064906 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2672 1 0.29071435695715852621 5.5483324095125468034 14.346565536511070249 -0.57903709484162613208 1.667690568880415114 -0.9849924671671543841 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +100 1 3.2472188081544568483 7.2282871749528112559 14.536745507606237737 1.0836013796917292051 0.4665837147525214168 -1.486789648398146868 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1297 1 1.72561430482948297 5.9330366603520197089 14.569229279226826534 0.55571243330260244875 -0.62190485677106255302 -0.61527981156739164348 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1413 1 0.30965522562387215455 7.0818950947702967724 12.801253091275979656 -0.19278756504500030311 1.0906820743317895417 1.0726027661744050867 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2157 1 2.6515904495739546221 6.6207575646332443853 13.465254777393646179 -0.92798761825801800995 -1.1382797254581791258 0.35876904096602096894 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1981 1 1.6966476586723864273 6.1516137394761960522 12.893686231737458314 -0.92422320247734590648 0.58722802673434726373 -0.61695236268203057506 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1425 1 2.3222263374889977605 5.4640712369812067806 13.392270049605960125 0.20112239506844512005 0.79680447050341740578 0.058949753012410427422 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1375 1 3.2774905270039007554 5.5685867260905181908 14.675943409213321189 0.055805696712233197887 0.76345876071502472016 3.0133525024538601045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1603 1 3.7129482142683607471 6.8280097162115929166 13.608171059823838789 0.79355670184065152384 1.6268461901403756809 0.39217076794788707783 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1733 1 5.7274119001357988168 6.3168744106477410227 12.726307184011560025 1.2996927058148719514 1.8531459689520517475 -0.45104055725264124987 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3173 1 5.3297844824972324673 5.3529457764278864929 13.630839972829051021 0.77700869879841927279 -1.1522434769444405145 -1.9817113303011277825 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +652 1 5.7861254613579600203 6.9905581326158268141 13.657875235955247106 0.66970430317802265296 -0.14184098815545870265 0.63609468181972461664 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2483 1 4.281613270623465084 5.3642394919383615814 14.461704006890624186 -2.2797357491748506675 -0.77416646907429909064 -1.36178105974838215 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2273 1 4.8445246283180605218 6.613566317547890705 14.25966154768645211 1.1637391302221335998 0.029617883881742586294 0.62099429881239087692 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3834 1 4.5603680433575668474 7.2604855360239106687 12.744173833197510959 0.78196350904325839792 -0.48122381987518964008 -0.39249261792039935592 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1547 1 6.6440441426938408043 6.6009277976508204944 13.173918791805490969 0.578189870198241751 -0.17638595029284742655 0.15694739866926293859 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +32 1 3.5096523098325995704 5.6742219780560514408 12.963642825030262884 -0.9330609539006113895 -0.45952963427941201369 1.0573951691868528346 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2145 1 3.7043036249494178946 6.7186204352353868785 12.598374962437056013 1.2151094447915276042 2.5845682642657394901 0.27572441502364469779 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +372 1 5.1092688200922822261 5.7750727440782059219 14.909686625535460536 -0.58575451458545313432 0.071938192433712883078 -1.1947763935689701409 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +88 1 1.3045746779751128397 8.0599026666720092749 14.174947606109876475 0.48754986883023176958 0.017717339974136620678 0.11011851190269826561 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +253 1 0.8903678194872400864 8.4740739423410058606 13.235130532633265332 -1.8591751827847282641 0.16972912533049391848 0.89857471800239108184 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +726 1 2.3640231732837198031 8.2289890657665605289 14.821320101965323346 -1.7797260974756019536 0.39097340616527032076 -0.41154044867648764683 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +892 1 0.094998259217875552496 8.8145385872719934639 14.491110316794756585 -0.89553772049421576096 -0.52782543148116434217 1.9701295784842700609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1698 1 0.12856116627570371436 7.8689435427309790683 13.469580628769275421 -0.681177043984019015 1.5925538226512299111 0.86879873022493825374 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2827 1 0.34038057216745376543 9.3331729728902637078 13.375211392552301959 0.23493878782887508971 -1.4132398649539275048 -2.0968141307725600697 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1685 1 1.5907851032558371074 9.628219705666099415 12.722386133109148787 -3.6227980883080643792 1.6190428840032677904 -0.33299080041798656548 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2225 1 2.7414048081450785865 9.4565526160059665273 14.014191189756488143 0.57869856635065042294 -1.0983377782393264344 -2.0120513167198175175 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2675 1 3.0815629994222106802 8.2629211502570569792 13.456500488466396348 -1.3740685487845625268 -0.63115734819873092754 1.3431430972715050487 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1833 1 2.8769140453605785979 9.4169694255379798875 12.756486981083519083 -0.047890391188852111937 0.51503851066761585642 0.25613851085793615248 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2402 1 2.3793517116336557748 8.5460400325161263169 12.589200557866591978 -2.719807385209399353 0.53206544895047591659 3.3146145321143496432 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1975 1 5.1111005753274358909 8.9847857212734094645 14.026407399223460359 -0.57759387445691312557 0.36091854241561571737 -1.1525937426110759443 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3508 1 4.091090612001706539 9.3788505023224164603 14.291900396566290965 -0.75261825211402832991 1.6194753263482126737 0.13825469224675773772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3866 1 5.6913668704127422515 9.6937882532244490363 13.120722646073547324 0.32769966709307202235 2.3759495908303085443 -1.8313058490403550937 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3182 1 6.4594332320395011493 8.8712260163337877117 14.108207215830610437 0.98450952273705805151 0.79697356325001256216 -0.18889320466034162371 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3390 1 4.3639635652222397155 8.820675878291325489 12.907514943514781791 0.84363384264923624301 2.0435274937288916419 2.8943753307396233865 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2751 1 2.6207163783303144555 0.31511627291743621315 15.968670498896894827 1.5111817207616158321 0.67247830116761864172 2.2445610342250241764 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3641 1 2.5594479702059569348 1.5129898157991998886 16.717191602287414298 -3.1957364115890967149 0.63282634641847590462 -1.7719848298757785443 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2008 1 1.7632529992183152423 1.9441119267638196089 15.695008958097531604 -1.6806428029263222879 1.4965884417533050765 0.49570465610877068041 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +836 1 1.4911807572969826285 2.0010446537468009609 16.716448367134152164 -1.8306709739646616075 1.3045875549881713606 1.8487996399541770653 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2146 1 0.62689351373740787032 0.85184744259048839066 15.916448901456618614 -1.4701217234799870415 2.3698392146844851069 -1.2588321442311600773 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3125 1 1.8341865651546169769 1.0007091178296323442 16.281289245021465462 -2.9039558417776367705 0.40608829647710120714 -4.6467525770426165721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +64 1 2.1537204061506449726 0.11394684014746296608 16.914179086869989277 -0.027962881497955397597 0.52320531382459334324 1.0162924410391294128 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2743 1 2.9437479290762742501 2.2305996931689389129 15.563079541460410837 0.054171246672734083005 0.74157948944355134291 0.38029407774944379295 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +511 1 0.18777986791817738443 1.2652564870967697441 17.439341298231809674 -1.1461334087017407413 -0.48598670513820679817 -0.66074536139081807562 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2641 1 0.59714156113867222775 2.389630414408006942 15.741834632572894392 -1.5590000573339108936 -0.49292274354795950764 -1.1129636876366164611 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3504 1 0.0099746431188625535313 2.4003298007441800088 17.26385981060343866 0.53451703081829760045 -2.0255004079607639156 -0.4190802839504242927 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3340 1 3.4387149644184984432 1.2341334105211771988 16.152483154846045466 3.280226341302276527 1.0527064709336420023 -2.5322113750821766409 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1419 1 5.3790349192501532016 0.16310774129526181553 16.673537514572071672 1.4698114348981750066 -2.1153748444948381469 -0.76883378431473670123 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3301 1 4.9182925104113444092 2.3499525724095602364 17.340760147340660069 0.74483243751154126766 -1.6978839976015052127 -0.95860973998223941717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1396 1 3.9904173692616846658 1.9501549903234747241 16.560521458173518283 -0.49098304991492264238 0.10990616977757514117 -0.0062835488631052928768 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3973 1 3.3859324944202713326 0.2518855864340176498 16.833493013656671167 -1.8628634683971627695 -3.5607703760264444171 1.2225818401093266896 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3412 1 4.2530411698098440354 1.3763270017893114439 15.055865611401340942 -1.3107834358757843862 1.6934169015423270466 0.36585518233314828773 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1830 1 6.2780284195742259712 1.2509051767401657695 16.053355596048024978 -0.26643781110947512003 0.69741883309604990604 -1.9761442972970297838 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3186 1 6.514345465360938725 1.5301927277648597059 16.962162594672552274 0.27734625083634295573 -0.29446520627112532376 -0.68315063541117038159 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3918 1 4.9521595080124418686 0.061898518260708433603 15.515620697535103645 -0.46796564530227291456 -0.30408656737723815944 0.67567400251682419032 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1619 1 6.4342828225451222934 0.24896708049859711531 16.391848028386434066 1.5430088000423740624 0.70203076254028984327 1.6564416013475291578 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +801 1 1.1109256513720899839 3.8861725970480942571 16.150724519772886367 -0.082919117715858553508 -1.2117290704332399631 1.2024639187465206991 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3723 1 0.44707042403049079837 4.9175490353567763435 16.238984173950562706 0.38941943527368988454 -0.6998862211808724032 2.4299207830126037244 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +157 1 0.16073834966755062847 3.704092243915449334 15.446270943239724716 -2.5954275398708701594 -3.2618207602384834409 -0.2950782044302794338 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2979 1 2.9369505418055896762 4.6137157710083211981 16.455760898452446384 2.5038964803354852862 -0.28511112650843645211 -1.6964305890106528008 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +259 1 2.1351192328604291504 4.3023273368314116638 15.778835420980598769 -0.8216636923515595603 0.8078955101779741188 0.30992815261178890962 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1489 1 0.41479425449612278287 4.8809548016335604359 15.025403984426331405 0.97560216692359236212 -2.071084504648936786 -1.7509825059635582001 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2956 1 1.4445568975986275984 2.889625041165480912 15.314036230139180361 -0.75786936817951899847 0.49512840139660413419 -0.25217868086703887354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2858 1 1.0894757719251411121 3.429963870653188529 17.392280825788567711 1.0803595894048139137 0.045505388561019044502 -2.012883725030995663 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +878 1 4.8668117298929036707 3.4684485548633290364 15.301740012088094645 -1.4793197143175591535 0.23200004253122866182 2.0306820160312311074 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2418 1 4.1816042572019096468 4.1961697986328694299 15.392233558924418801 -1.2361314967005256893 -1.0520862220967588385 -2.0484630580261971033 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2163 1 5.5251951654253410595 3.2366897360430488817 15.998084538559721679 -1.9303695167826289136 -0.51415525633317937793 0.047213364081152203733 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1512 1 4.379671695140775256 2.5261863969996012358 15.437895397380763995 -0.40976666843291331688 1.4491904595131699374 -0.72322111445086223469 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1342 1 0.51531284228096374544 6.2025181825806292579 16.253356320116441935 -1.3362395034167946495 0.59690801624919853641 -1.1925063458634888036 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2414 1 1.2774059759943179326 6.8316999826769189141 16.295770161341259552 -0.23926344720279338341 0.64109156500954656011 -0.51569486284713683677 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2693 1 2.550148305224951617 6.8728356607297262926 16.634166677377962174 -1.0617872825075238552 2.9365225629759046377 -1.4367643214577690003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2688 1 1.2375069373674696394 5.4009444674019597699 15.382615210138958162 -0.47855465101278316098 -0.63950490177978491779 0.60444605118801020271 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1857 1 0.67195849261651752204 6.4522391110385539648 15.209935737944450196 0.08540387519713713016 2.5244798940329493675 0.82630346281014432908 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2776 1 0.23254902696403617623 7.2227858351622842292 16.763654907020793416 0.77103244731897169206 -1.1336412467602647869 -0.04418496459669186277 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1447 1 0.59588523812304550198 5.5464173365560087703 17.32675496075233923 -2.6830709447693181779 0.12852637820487175513 0.85542464691682962297 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2465 1 2.2754055649399860251 5.2044242819401063116 15.315129653475171523 -0.78006579279146459616 -0.75598942453599715652 0.24596067905347809845 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3742 1 2.1912922189911943072 6.3274753476782006345 17.334194552337358175 1.5321624984595265673 -1.4385736906642450084 -1.3157257047745627432 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3712 1 1.9164184663921837171 5.1491392021888886532 16.299359072419843386 0.33511205760431478362 3.0008920403148340306 -0.67670589480823517547 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3413 1 4.3258951216968117848 6.9633272732399360549 15.218218898351922874 0.78519322239098821026 1.4336068951385163572 -1.2655833923664188134 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3958 1 3.6274014380172072691 6.0714466760933172296 16.645233938801794693 -0.80846751969681562855 -1.7706786187068193072 1.4440446476952657484 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3645 1 4.7259231595503141676 6.3192122466202151898 16.092224592296400232 -0.26760079603770847712 1.7377756711915612886 -0.63913016696912605674 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3596 1 4.5311756113364776155 6.8414368198294823742 16.996476088061232446 -3.4953347518392421378 1.3253888545233962759 -0.064593110583086421617 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2015 1 6.461115503074209343 7.1101455999202842762 16.507930244397122976 -2.2148875176049269697 0.3649716144379592242 -1.71521947891617077 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3376 1 5.5605388743944121899 5.9298872929675487953 17.02131840789628825 -0.96438722532430554146 -0.20003971284358099125 1.1138600414196455635 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1807 1 5.8300497426245438959 5.1862535193074021933 16.205883268942198328 -0.71697528457663850521 -0.60454713835965612212 1.5272801722503697164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3029 1 6.5980510203647639855 6.5059616797224171236 15.477522229074233806 1.5487095043210910017 0.62630707073466729273 -0.813719584732756962 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +381 1 6.3687109645463149121 5.0605627335345308992 17.160099555792783121 -0.58821966315199392117 0.90417821856602320629 2.5844808070852272053 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1422 1 5.3874114474447774015 7.0050665786476624675 15.292264812101370453 0.14613717633833125942 0.12183079106553676429 2.6333892783884151889 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2609 1 3.7959126639585045737 5.1692006403749335419 15.640827708932413032 3.0852972358848700374 0.14987296554896534229 -0.35852784107082791287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2936 1 2.7271918945427642278 9.2213272942798312215 15.089799371398880723 -0.2810749339339251307 0.16789569086941835696 1.9094028954801980369 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1157 1 2.3961284143562151527 7.9054408364663464326 16.916464506195627138 0.81899375848945032974 -2.3424501649166780126 -1.4610708637223255302 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2267 1 0.45221669079222776011 7.9539043047386437379 15.32206330385668025 2.6330943876932395575 1.9902441523256888534 -0.3835736140635148117 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +784 1 0.87619809006015514363 9.3109839268491327857 15.758197920978085804 -1.1430082874085105704 -1.6136096155311785427 -0.29805635293757715143 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1458 1 1.954285613184334025 9.2458887618292493471 16.368486739159152421 1.0130231421460034191 -1.0728648773809670303 -0.39440253755236676092 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +834 1 0.63906719504879083704 8.1233635004822364323 16.908050735093443251 -0.54545425922478374403 -1.596792236850426816 1.5057136613330448505 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2924 1 0.64665945540352387511 9.3014538211531689882 16.949375110758779783 -3.2485324791461289706 0.045699071724976315922 3.1303175962838851731 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3190 1 2.1309492025331766563 9.9994222180929543953 17.453185765276440833 -3.2608832449978537582 0.54659024921138710251 -1.859701131944007324 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +195 1 3.182280069366639097 9.1689738059169325624 16.517071538994063218 -5.1824823909406703137 0.47549808618375738467 -0.57600575547960874978 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +475 1 4.2228273569940837362 9.3967371267116543976 15.630274346583226119 -1.2217510782030636118 1.115236636101246015 1.2670609724067596336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1856 1 5.6484641332639222711 8.2600383961111738529 15.916080045202228632 -0.84806895893209688353 -0.30516297406503928302 0.38107408875055615027 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2587 1 4.8122628702738419193 8.0078071009354250265 15.292920183653318844 0.67452374184967300863 -2.5614436892527070455 -2.1496984925867521632 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3835 1 6.5796374102493873082 8.7656013306357341008 16.543358017833242002 -0.97244358557212851046 -1.4184333436909764004 -0.91891263427209579628 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2710 1 5.4659033034280835039 9.590052954379119754 15.428226866823614216 0.52015090412058195835 0.5910751595104947187 -1.0462259442122723296 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1077 1 4.7686878239934324952 8.8114669343257823186 16.634425757426946291 1.5511022030082095569 -0.21648330905174842376 0.32485843565351885109 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1927 1 5.6267385615472909066 8.0527002037730266437 17.069608822461677988 -0.73444968072171534779 0.62469335475650655809 -1.0993857485168794241 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +973 1 4.0849306288623239425 9.0378559574269559107 17.388887823316860448 -0.42034692875330825768 0.96637743357553285151 1.7626459080873455587 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1491 1 6.6599376491546973256 8.4637773717809530183 15.038301959655546725 -0.3023237629678926508 2.046338822567991933 -2.8149100177820791657 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3272 1 6.3484686759522004351 7.5198944465504373724 15.464784637375272425 1.418234416136488818 1.0556918784960451774 0.20856414759568184247 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3101 1 0.33294152399770998718 1.3466396720267805875 19.289036089697784604 1.2908036718433217871 -0.73665778628297040598 0.65110894127624252548 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +628 1 2.1705476177378790759 0.39374578097754486805 19.061885508425049807 -0.92488943890802388648 0.71143920164666152317 -2.2431492253402240955 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2906 1 1.6057358169258544311 1.6423987974660729794 17.840126308680314793 -2.0770899507281672669 -0.31350064571841174121 -0.29812809010065050019 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +883 1 2.3579742954477320716 1.4349121532570523474 18.655941190664460549 1.1727703331183620961 1.8387108849313282821 -1.687316297723581604 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2598 1 1.4726351862509023949 1.0345356292001264276 18.652008377061811473 -1.7307309136352417855 0.1986945773052825881 0.60918715687163982331 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3093 1 0.28587508906544634169 0.2626251748586753143 17.609135428380177757 1.3584279796899632053 -2.3192880593733837813 -1.4557443533823546389 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3077 1 3.0714234293676940801 0.083385851474210098688 19.60918997674538744 -0.020767164934911114954 -0.44610749270002469924 0.79289853685286371121 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3045 1 3.0500435007173538615 1.2013204064279032757 17.948462049347821079 -2.1936198766544054983 -0.57568288335256312394 -0.15593057158732567813 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +833 1 1.3670775285328540249 0.19920677029903707811 18.207615840991788758 0.77284518704771787423 1.0386283420713422476 -0.26798469725020684917 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2831 1 2.0256195723272307774 2.4501440881001332883 17.947867318881343124 0.20269072455892553353 1.7347896689615438515 0.45474701756271690423 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1996 1 3.3131425122082265311 1.3328442840786491885 18.903342233329485822 0.41926428909938046052 -0.33761224366895498106 1.2374484007562356336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1722 1 6.3041769347314930982 0.0728273163819961461 18.963567520218408191 0.56276788901133389942 0.6860444471745547057 2.2391234462216327294 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3129 1 4.7243939746705754246 0.71123423934657215018 17.912594949733538385 1.4843425684070157278 -0.75124313972610057277 -1.0279816497230289674 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2543 1 6.0877991101175616961 2.2175268876720379829 19.015524186094765469 1.1000532601489085849 -2.0689989817809517625 -2.3703504967495545586 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3142 1 4.3337294984818921506 1.5642841173155828116 19.631574578209129101 -0.3904753413287693764 0.10055768997941744169 -1.7902561068441888992 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1127 1 4.0908336844953732125 0.34659395043459695351 19.57770506403231181 -1.725461279604554754 -1.0420620348998610449 -0.70251077969039632531 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3397 1 3.3350151070451010682 2.3929947243914475585 18.024595536624826053 -0.73656972016502064715 -0.17116892126293595244 -0.13379401587054978728 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3873 1 5.3233125754939223384 2.1638112047970721186 19.587034805489935252 -0.20929316959146646027 1.8169594457159721212 1.9013814543608287266 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1499 1 4.3991673303906644321 1.568827318393111625 18.478310273571405986 0.58708457847283757047 -0.29493810583310958728 -0.38833826117707459513 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3617 1 5.5962358064874058172 1.1598423863580213933 19.292345043238519509 -2.6211302805293761331 -0.45755820664716401192 -3.5778647709335187344 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2400 1 6.4149275292144185556 0.48007466524289454934 17.510080009174544102 -1.7810075531411604377 0.97661018765196805358 -0.092783866217565971746 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1230 1 6.5540336251208959339 1.5927651645158162896 18.165066416278975225 -0.27400374034392821487 -0.8579852433335676265 1.9836238336484113276 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2930 1 3.4651843138218296758 2.389647789219662144 19.65636938878807527 0.23412158283368006417 -2.5306337453117393466 1.1799160657877152403 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3048 1 3.2655647595569572417 4.6319439072332819762 18.942565395774355608 0.92851106428257645931 1.4731140379358624859 -0.70292475320502567637 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +6 1 0.58084495247692546904 4.4243046375921126767 19.842840918266169581 -1.954459306906320748 -0.1633743682791743701 1.0129573230546577989 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1010 1 5.0213058890802004797 4.1398666120800449164 18.10516608782662118 -0.19742387515307840973 0.84608900048166824082 -0.79894640530952898416 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2954 1 4.7861483683457590743 3.2715096356964310509 19.186309693843167423 -0.046517219436208824546 1.5572661504802254306 0.15201789817335512045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2240 1 5.7587753703080473144 3.3838120995843317118 18.518832232492304257 -1.3798830348629416154 0.27398289150965338123 -1.2291265560767339338 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +107 1 3.4682361330562780921 3.9013406303956124077 19.905153171011932045 0.37988207254237760235 -2.3519995687058719014 -1.3636527924107022525 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +290 1 3.3995400787158067679 3.3117639229855644345 19.003895314936865901 -0.93191992117729294254 -0.99337623337403291313 0.67989405174402595122 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3624 1 5.4647653781795337835 3.6479738841843998287 19.850190584145305905 -2.8584493443764387166 1.1018218245957787094 0.53135069621902042414 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2917 1 3.6357071426153106941 4.3163108984197240403 17.625587784138467384 0.9923368758910570131 -0.16055139037473470376 0.85586312505471662249 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2257 1 4.299842713866874 3.1116660441565096029 17.955376519594487661 -0.88478232176708992984 1.3581265367737025418 1.9543922981475685408 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +61 1 5.6231110243212842903 4.5071876792573162263 18.808797752355495447 1.1508585393762338356 2.2609286262745018625 -0.22679631650340908999 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +601 1 6.2772228547583983627 2.7653449221640462596 19.998955959451759412 0.006482228626202368206 1.4235135079781511269 -0.28945392717146789519 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3368 1 1.9875253655801374819 5.4770609895767314867 17.805593895770698509 -1.3650227603788835928 1.0798119217050510255 -2.3281835476161631959 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2101 1 2.3470453947598994837 6.9270559243566944829 19.497355637948750484 1.0796900372561561987 -1.2201256294815185921 1.2620487595283575999 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2561 1 0.75385240017107624233 5.3624744110726396684 18.405052553121215908 1.0733983217386440234 0.11023353722129101973 -1.1447884414377129669 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1658 1 2.3023205123190000343 6.3484544330848935445 18.48359644460700224 -1.6223531111380591341 -2.8691714651180761919 0.68513702777637841557 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1971 1 1.2833465766241429762 6.2764985225670519853 18.205663503237648371 0.74845491870081659602 -1.9755020494654893515 -1.7513550904233847749 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2786 1 2.3743864565623065133 7.413109651154589308 18.404027857764464926 -0.28515235031127822429 1.0691809097359399328 0.69438789314467541658 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1420 1 2.5225309498288410737 5.7196201484412858562 19.432028080465912012 -1.2812453603966529325 -0.27710851834380156866 -0.16870204688556009187 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2555 1 3.1047770494368629457 6.00435587217266864 17.654912139265661608 0.22752164986715514572 -0.12726019683285338946 -1.3842446096320804028 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1332 1 1.36604313096293839 6.7624427929242960644 19.588383401953613827 -0.28379817869059137392 2.650760440534119855 -0.29149462865722486349 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1471 1 3.1096537736721732159 5.5718049268966804988 18.636853914775098673 0.87080913831595863073 -2.7975932888553796118 -2.5237353292273567718 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1853 1 3.2188287341571508726 7.3290270266628168017 17.77539964523504068 0.95262336392371083083 0.79300595872529200392 1.6281644454963812851 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2817 1 5.6971901062470369226 7.2655827849921275075 19.946674719186322733 -2.0029630246884293499 -1.2560172227557164781 0.82906193956038676252 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +339 1 4.2017204552647795524 7.0363432829111349776 18.58334236575475984 -1.0737688304642958315 1.0033547734882484193 0.84766106241668226495 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2234 1 4.9584087179644811272 5.5501368055830102577 18.525548923733580864 -0.93434156809358215323 -2.2666631938011660985 0.53141843106508046546 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1500 1 4.3369734115078468761 5.8251794495249038519 17.721629671332717493 0.92509430924793267792 -1.4123716412382547603 -1.4931017451577215382 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1469 1 4.524180833141873137 6.9364733740739339396 19.520328733516830511 -1.3791487692293153966 -2.6986120492986369612 -1.46504123376262263 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2319 1 3.9158326629901543114 6.1660976357792840474 18.967473872771197563 -2.2335134426879554859 0.23586673469913629897 0.20943309091895054297 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2749 1 6.0363582114187135375 5.486874245228903213 18.866076671085469485 -1.790412524140615913 -1.541894779550776029 1.134670873692736448 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1404 1 4.6384540949316503955 5.0397104673790931173 19.538809307897796685 -0.94395497766561720088 -0.89323000454092216227 -0.32354186776617555044 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1781 1 5.4998683206256311351 5.6595426812238391889 19.879576018312551611 0.1251100974023186263 0.45307790495998945257 0.41439801554479233081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2583 1 5.2871965239988689689 7.0370224563794652184 17.818965140630425026 0.7075659390670804294 -0.94973337946098246309 -0.60296588406255935411 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3714 1 6.5216936673359358068 6.6747559667433424835 19.519556121367507728 0.17302042171827172745 1.0509984204214595227 -0.38229132523683051481 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3207 1 4.1919832232824214557 5.0743155015555281295 18.538586215945723978 2.3464590727854734986 0.65116333238426216123 0.10195719334056690952 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1201 1 0.93332164109270665531 8.9212832548526925791 17.886402071046990869 2.8447408765026964694 -4.0695543634255653132 0.15921190168457710623 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3939 1 2.7222498638618857214 8.4394905359237988307 19.287917518979806886 -1.0628859163542467847 -0.64122481583382273662 1.4584217770184852991 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2351 1 1.826072352140409194 8.199565976336197437 18.799438889799581887 0.066294677788830108645 -0.12086855616678936209 0.060282594428993738211 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3595 1 1.6760597587777115169 9.852487847420549727 18.502733622652556278 0.21432135773491214903 -0.37197538760964315996 -1.4981868919171525967 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1562 1 2.5879769363281242001 9.4950217031936290368 19.119222531631780981 0.17592872175626667053 1.0634329837741545166 1.4671527768359571287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3685 1 3.2227990055883197762 8.9503550880212721097 19.99831862873260846 -0.17069278582249636234 -0.068584528897103425038 2.1432975945612948721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2942 1 2.1362325413656955142 8.8006088351623308341 17.723491011434919784 0.9923550065020548816 0.71453406151783194211 -0.73608948562575837737 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +236 1 1.5840136228273029584 7.927328500967275815 19.923017432893615819 1.9810263442256923483 2.5414120771304822277 -2.0732303313942428424 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2586 1 3.0213738001563545943 8.8724626464624130051 18.287642781988079577 0.67280890078679211896 -0.8972564811698835463 0.71651274503032857943 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +991 1 3.3582727942391117359 7.5353893226639581115 19.003519532730557273 0.15236596039478916831 -0.057950021817726175832 -1.0569957400945861892 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3320 1 5.7962296739927916533 8.8869995979462927949 19.256785263248186624 -1.4849619085552994147 -0.51985068034794434944 1.7686098960667504532 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +606 1 6.3935882044882790254 7.6777413548411503896 18.392447765595381526 -0.94850629064956215597 0.97775917275148926944 1.7983663661870119554 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +41 1 4.501638468474625121 9.3939499797029206718 18.352851617037934773 -1.0570902381756612787 -1.162946729805809154 2.1452202939193028008 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1462 1 4.1174322208974842852 9.5350947137007668886 19.668188537262484061 0.41811883729547311139 1.1090356865897121885 0.09468842177548678074 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +12 1 4.1610378675403385529 7.955231379950920001 18.109070409301310178 0.31081879876657608763 0.038972421186793552994 -1.0751619032247972108 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2964 1 5.9740468656141150205 9.654243420924425223 17.982408309018484971 1.4002172672026509392 0.18410069898205744243 -2.064128035459321886 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2603 1 4.6371082993696113306 8.4440262830463161947 18.897328395622899677 1.8679999204118160616 -0.03809554427547083566 0.91363409193469735659 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +595 1 5.3003585118079836747 8.5287760190622421419 17.927121577694499877 -0.12723312263678751566 0.2097555369590292651 2.3106868651463527975 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +86 1 6.5439321243877515144 8.7561755440299648967 18.417281197915325919 -2.6864917381970623289 -0.013106287149671921877 -1.4998807054893550372 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +682 1 3.2601075314531482441 10.794239032558683888 2.2707105315803275403 -1.6435512967619814173 0.076919057899991219451 -0.7139791606633144605 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3488 1 1.5723226000515886369 10.593061265210726773 1.8018419893763581996 -0.40406386769164853723 0.82677829885274967125 -0.36425130047373877051 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3856 1 1.1859569630602948553 11.220845865178899814 0.098019153718619925209 -1.3622591773349568278 0.43986414105929827478 -1.5364396178266817028 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +565 1 0.47179081469088707257 11.472684080062025558 1.5583174474790075781 -1.3669528490419105005 3.3012246538714689059 0.98198233781059107717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1537 1 2.5569427505327730898 11.986724455648904097 1.1061153639029930318 -1.0139090942463671041 1.923934449913488054 -0.03616151392825643629 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2666 1 1.547962050373559828 10.496179461269759869 0.74457745510236150732 -0.93153465423470394047 -2.5850094497372282376 0.45995052927460311487 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2994 1 0.37493991433516793421 12.229723900886225962 0.3076901554955323026 -2.4985969393328777421 -0.58716307867476835725 1.0133727463365933552 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2792 1 0.031453008582810811078 10.728561992433210293 0.74225760658062700514 -2.5103197107215722284 -0.85691545170533189868 -0.28017616420647706299 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1769 1 2.3810237538596035201 11.872310979499234307 2.2025070668823691911 -1.1607525563878451358 -0.50149646417822912881 -0.44710255674100263246 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3496 1 2.6552022971869577717 10.840702049113088989 0.19359929430263553285 0.31366128906933349318 0.3227318793973015798 -0.34481568237609488969 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1438 1 3.3291566825117633321 10.050760959428380659 0.35255639781760733653 0.35420165527936386951 -0.19006124754588679671 -1.5154888105222468209 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3656 1 4.7561973967499850957 11.97774491179299261 1.419571864271269801 0.67441291239164691262 -0.39801017037202185422 -1.8909130195186250045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2152 1 3.655218350129068039 11.956645016544078075 1.6135880992997213568 0.45033610615498176344 -1.9148704054263585572 1.2988873931083519953 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2067 1 3.803065708547925805 10.789039324679137621 1.082059541565839611 -0.80970530340848945183 0.10556220055842889527 3.3147005884133848852 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +561 1 6.2271550346683754995 10.490325947443759347 1.2117210175924955085 -1.1834857210901084112 1.1492067741308642503 -0.39969176438452708178 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3594 1 5.5109200860101505981 11.731116328868738563 2.4590451391080914156 0.63481652189956960797 1.5964649965133248521 3.7010273191719309516 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3885 1 4.9326659457155388466 10.497442640720645812 0.32672128594688842895 0.32696442097022176965 -0.85529770431045060164 0.28688506986683626199 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3380 1 5.9674432982150946714 12.088266293564659648 0.2210158905041683941 0.035320675981119882547 -1.5154827566657629312 -1.3916714444881599366 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +583 1 6.5198625254355766501 12.305560697100123235 1.2512144603087671513 -0.28237497883655665598 -0.44225794103061066842 0.20788756164609287214 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +537 1 5.0631206685114227284 12.247313536365323827 0.38725854321118158285 -1.8771772138553302067 2.8161757345398190644 1.4233555615372341929 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1242 1 5.5254318478456587727 11.430273131012979704 0.86787741374362303848 -0.73287291003346854978 0.62252450777783652214 -0.81457725708854455959 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3246 1 3.3710717946940205181 11.749697785208688572 0.35668440070753604232 1.6792819903285549632 1.455939925060151019 -1.8130720979936534309 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +128 1 4.5104278592113393742 10.029277863292804795 1.4210285375464546398 -1.0338819423930794006 3.7056538363564612837 -2.1286563196159349332 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2059 1 3.2857085007933335419 14.504459632997907192 1.0005195879574744211 0.59110662905958299973 -1.6543450718011616374 -1.2513457329743133961 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +235 1 2.8830106570176878833 12.903097890766892064 0.82697323919558596295 0.98889588494953950537 0.62880683068789333667 -0.39053553518672962097 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1725 1 0.42416265440128636532 14.441813372800890392 0.081749656762507796892 2.285820449675478816 0.6438550533150315669 0.94914635658883805824 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1199 1 1.6270335468990018146 14.650396382925228167 0.98711044367823708168 -1.5235662276120844894 2.0789802324877078021 0.45422700608263050226 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3444 1 1.1195469774082402736 13.977307380305134643 1.7698394650562943031 1.1302987092687739601 -0.81504509819019788086 -2.0712999301677554875 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2694 1 1.4222533447226748393 13.051333938928596723 0.73088371791585782233 2.1402361955425686091 0.31144992886870276338 -0.58866219133906239058 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +281 1 1.9805420835976481619 12.634803950719387444 1.6489074195164143966 -1.8790311570093243265 -0.35250848208838242437 -0.5304553527414525016 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2186 1 2.9259102041692890417 13.828375262769810661 0.23591067470911109005 0.11205727174787931399 3.3198068472082371549 -0.28235163480767710986 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1831 1 0.1794666913484069537 13.390364734877319819 2.1441021676970861698 -1.0290322376839755592 0.21789340642212712273 -0.82146780776037475746 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3440 1 0.10616650172353621351 12.850073957293956184 1.1722803473049479006 0.12666650729298961631 0.12359900202936520419 -0.83573963003207074607 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +751 1 1.7891200899832573334 14.652429381059381086 2.3392378438110115191 1.2609993742865015509 0.4469646344517835268 -0.56188686937630771823 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1374 1 0.19832253083693851536 14.722442475423861197 1.2812376208736817595 0.055968519804229260872 0.95859563567423822228 -1.5403468419078392149 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1526 1 4.0447721954343078821 13.018912798470880787 0.94070562043158467702 -0.46928376098052498877 -0.56312663461438972057 1.355678832448680593 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1003 1 6.2368782785499741195 13.171055311567627655 0.13101327720480382411 0.37014722159237262167 -0.35206999995148369198 -2.1526917685450586148 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3583 1 4.9984269081026830861 13.060165327653409761 1.2821555801454489476 0.82665651345083601687 0.3559651880759495679 -0.65382733206870269349 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3791 1 4.6787578741347859435 13.993460301258341616 1.5009988972364680659 0.74803413727675338585 -0.11434094879998669969 -0.45879486529752477875 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +205 1 3.7414612755263374488 14.619981101088836084 2.3355921715067462507 -1.0493208986993780574 -0.5167855286149637406 -1.4741005187404290222 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1466 1 5.5509284734468220535 13.208474398744625589 2.0474564520456994821 2.341745972294435596 -2.0783386102840770704 1.108757412825174038 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2530 1 5.10467025397317542 13.76981843485332746 0.07658729402966887867 -0.88934129710335740882 -0.6376704357495651676 1.2386925089457601068 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2192 1 2.7213558075136550229 16.327647892643344818 0.98618396327139123958 -1.4914546219352167178 0.87785049206557042023 1.8344234337046809724 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1624 1 0.98073603701009570699 17.02725178103447945 0.74701667199138099829 -0.60340764112308220568 -0.47419513424246706457 -0.35523330462329977264 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2105 1 1.9917484869572410489 17.234999718860557039 2.0019238842216058316 1.1291042181605230876 0.29454045603379258589 0.52781603953167577359 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +145 1 2.8117980373689430706 16.625105415494005001 2.0760539822438075497 -0.98720056057785121606 0.051720987325195040551 -0.87968534363185280078 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1251 1 1.0382373447655641741 16.706786473244839897 1.7837907299210649104 0.59448650324979990245 1.400364290674866119 0.2580019110932669224 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1212 1 1.8614212692911908942 16.102567541009022989 1.8647051267880381253 -1.580460389862406112 0.13213762542778303977 1.9313600204653573744 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3997 1 0.86913667131803840071 15.581770692839508996 1.25974642038140483 2.1483768855605545056 0.072786906892009742287 2.9603431005914817575 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1062 1 2.4640492906596889178 15.077259060622113296 0.64935498115878920178 -0.52555058083322669926 -0.88217628063207520484 -0.39197146339764293854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3801 1 0.85278170722276036564 15.173831126648556378 2.1681337845077766069 -0.54346727485542922764 -1.8276743594822726369 -3.3609663131100244726 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +523 1 1.6573198785009861655 16.057249121308988293 0.29676924584160302434 -3.2751411106189198819 0.28447552728119740451 0.54483843871614956456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3366 1 6.1299003753392860006 16.157620897974840801 0.41551191200128700931 1.1738147710334176921 -1.1272963250847871652 1.5450518681374190155 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2372 1 3.6738049037516016249 15.878862717781771607 0.39472273207205144097 0.57427922869834047148 0.48887730418042191216 -2.6180796988655807844 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1825 1 3.5666833634651884388 15.740773590086048372 1.8523411530578874906 1.2913338405253589336 0.74035985468374443386 -0.79963236380295166228 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3170 1 5.6242251994510672475 17.070731506966016156 0.18878627798556496531 -0.8480588462998102095 -0.38295894790941431562 -0.41090263908755692013 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3694 1 5.2861808117492561365 15.912587234171557071 1.0950352806182730436 1.5149586811469748504 -1.2742425884585528717 -1.4508862731400165025 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +772 1 5.0700278407126955216 17.214305926871706021 1.0914728798195041382 -0.095960663888658967458 0.40262703666347449127 1.4672184750800947306 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +487 1 4.3719493043848336455 15.245420422169786434 1.2894520252284271677 -1.0637418618016465377 0.46671246539110078366 1.9778196036328479224 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2083 1 6.3629501265353880513 15.211919722456174853 1.0714532242213559154 -1.8163059250226696317 -2.9333628599230632261 0.58761861210823229662 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3460 1 3.8877362478767292231 16.773450918820440592 2.382252776592859167 0.011512677686953153022 -0.36612303958338376919 -0.38716849574012451862 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2455 1 3.0961936911803062955 18.141038598877578636 0.66491181719135761252 1.1241770260480492549 -0.33009909860694752748 -0.56679043771456683043 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3580 1 0.074359619716721850335 17.725923107423309233 0.75787691969521009394 -1.1763506763162234758 -0.45850405677828065532 -0.67553716638780925141 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1941 1 2.1807952911411083718 18.514089928434632526 1.2349245451657087091 -0.80994183280881659748 -0.27920903683433212494 0.79730781040418285954 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3818 1 3.1489464994404436915 19.377803480022471661 0.92407825459976100646 -1.4951683986934842796 -0.31690831156013848924 -0.25186467350972624457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1007 1 0.18991919355089809107 18.496442529111877917 1.7562182380302415741 -0.19606547385327027788 0.030934723524623411461 1.2157648903752560354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1043 1 3.0900110240663409833 18.781259963003524405 2.1124263607905811035 2.1557910663084651759 -0.16010673950461479231 -0.71044653903999821498 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2663 1 2.9456012639431339295 17.583118313972025959 2.404075879488856593 0.51264159207090198578 -0.54163287212024879835 -2.0404825607195982151 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1498 1 0.71136552520573381742 17.618866218040807325 1.6531765553827160176 -0.49388392239850409382 -0.59129692300167591146 -1.7643059863579617641 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3797 1 2.1747957431963556019 17.521142588490103975 0.394510322839413341 0.45571042046513110524 -2.6802865786762084532 -0.27185281568247604556 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2811 1 0.18154070311411985017 18.708795800943892829 0.81800393180827501993 2.7077862888035211242 -1.6005797942203146 1.285041539560914714 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +444 1 2.1462833115719663901 19.453928937176559799 1.9513984424007038143 0.34910710003683809166 0.95596172091794207049 0.39161925874215397503 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3987 1 3.0409492038290162341 19.999054192076336278 2.3898822909774399825 1.3953932951883445401 0.18597325001094633379 -2.728997274822995589 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +129 1 0.66381620081825676305 19.945296035881689534 1.0556521144144226376 -0.46789099473141865237 -1.448957208848410172 1.843708365234526747 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1047 1 6.4130589334305287963 17.94093461486741603 0.17547972557281260597 -1.0613974020162537659 -0.22777172939286807751 -0.28280750872302751198 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2713 1 5.1727561244520368078 18.383617064100135963 1.329390656951194849 -2.0970017979972754851 -2.3239074424000780716 -0.43651872412614856067 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1839 1 6.2533871269352596656 18.20274478980139321 1.655098450607145999 0.67726267153016972422 1.4399227938068410726 2.0577612581308386552 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3763 1 3.8097792924870748088 17.674078041335857137 0.010339484925972721591 -1.6313510417445598044 -1.2648133378414738726 -0.86719476737622913642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2846 1 5.6179307820755841618 19.355679119305570168 0.80745441979896515061 -2.1791397144862947322 -0.44964744448217952577 1.2811665475248168455 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2951 1 6.52846029788005211 19.072293903513934055 0.15799855556669353818 -0.69579406195947046676 1.392977722527261486 -0.32564193982525668769 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2150 1 4.0381677533739921415 18.059182061113205009 1.1774268964550731464 2.5018788383172521073 2.5968484537351685937 0.50036012154208631131 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2272 1 4.4295042369343002875 19.365512008019734935 1.0740345693569512964 -2.10468273982937637 0.20520409084327526084 0.45920248029814797475 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +597 1 5.0443129000343525092 19.32090077632646441 1.9362365017114948618 -2.0773573595605556719 0.37264479686769980127 -0.32302396972458224944 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1339 1 6.0833917108100168392 19.46737460376691331 2.4082390696928515084 -1.7786117178018971963 0.52852186552472624204 -0.8763894744042793894 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +778 1 4.0186135984118616093 19.2214883004568442 2.4111780274121454859 -1.2559475125464383272 -0.3445076632353656354 -2.6674928561920974168 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3974 1 1.6812128550488143475 10.546789221952051818 3.4840515587369962347 -0.9502157216750757307 -0.75846226820365436616 -0.93068224572258673177 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3287 1 0.92828390652921899395 10.308133950522650579 2.6975090409432880278 -0.88579649848498465126 1.0519520877139207915 0.21154127191792787555 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +199 1 1.4088287846846716533 10.831009787230804875 4.5753939421592422221 -1.9380507529970654179 -0.53090698123795476704 -2.0586182540823694254 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +60 1 2.9342009415480707624 10.841913414919520875 3.4821585512596793244 1.7476711171657430821 -0.56469126186732354622 0.0074721768549335168541 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +326 1 0.074912315050784480941 11.161082684998682168 3.5884440072800849464 -0.46871501692946010431 -1.3191017381932352848 -1.2322433417487754781 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3585 1 1.4637377081547569002 12.036781959927655095 4.6400161516533664496 -0.0038091373378131630593 -0.38008189148465310048 1.1659502295897894442 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3232 1 2.4616485034171655677 11.488923361448403426 4.9917736040746074622 -0.76538229723614581435 -0.7884632751118534344 2.5619921038463373542 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +555 1 0.40717678127122480802 12.255789442395229827 4.3558959737892815056 1.7288534965974309277 0.74172423253707109314 0.95774452041111368672 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2927 1 0.37391891356746631558 10.053248612055458722 4.4781286446556745062 -1.1195072614653887033 0.10656047934999067495 0.81720545327610272235 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3849 1 1.9714260804868251054 12.18229883436094596 3.6592133025336783803 0.95045450997238112301 0.28264484824779512184 0.93927747841561481934 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +861 1 4.5945601724554263612 10.203872771208654768 4.4798230921207897737 -0.55895535371424265314 0.56121624397637104309 -0.36608994847986281451 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +858 1 4.8828796209228242375 12.030215877483344755 3.3882736387510759002 -0.35614649502682460547 2.9263454328940694538 2.7429543880116096233 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3950 1 4.9302194516943123048 10.098446402874644789 2.5093431869652498278 0.43942088206396062722 -0.6767590183154189587 0.038588417882650154211 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1050 1 5.2021765635469403577 10.870968499458481205 3.4808010167495329057 0.77915136333675683034 0.1230746342456707082 -1.9756988037058067498 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3169 1 3.4265941124282175423 12.075310580064778421 4.8150278708178788634 -0.017058421893175655659 1.1628906282221185275 -0.99886613951129832323 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2840 1 3.6433404302458427537 11.977363140225083527 2.7539402124580054654 -1.7615290069151603447 -2.5377831115307993848 -1.0763264062988782133 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2274 1 5.8446427015748554368 11.470448689340329906 4.551549874196465062 0.91089179687395616103 0.92292375179570973476 -0.19130366185163194537 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3658 1 5.3210816821135358268 12.391417791683958072 4.5653810761014979036 -0.39046387141167304691 0.61721212935194025295 1.6442439377797724021 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +463 1 6.1993322134203436846 11.374191465705242976 3.5917386617073878696 1.5329373641829922015 1.5042162302135761998 1.1548291704294619819 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +619 1 4.5415630397959123599 11.171892493411375469 4.2730820612591564611 -1.623703059541320437 0.12366375769743431778 0.19495416652571784244 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2070 1 6.2193129775597828512 10.387881336430858426 2.8170638244095789204 -0.36644011343620630505 0.4100990682363541695 -0.33703051135887573952 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2249 1 6.6322040310274843478 10.476193651445736776 4.7436574394605388605 0.14200262534107385703 1.2740054080660794256 -0.34305546150860277699 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2243 1 6.1362430289974074782 12.215637707887706753 2.977787354313192747 2.1781922134020574866 -2.017274055276373268 3.5397582042957478343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2686 1 4.5730845432611042511 11.333131720259521202 2.7861184051854044341 0.60244627102829872989 0.53117150326394113602 2.8681841263331584457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2763 1 0.20378126757674383529 14.790892097613884459 4.5688101430680863047 -0.71777809876873954753 -0.15736506758231866288 1.6356486949986508428 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +266 1 0.84422882340952298819 13.185734659651856759 4.6382851908361892868 -1.7709083617926018039 -0.1853513920285435046 3.1423029101290005372 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2789 1 3.1097368040127588706 13.254119700214321398 2.5070208977117633964 0.65269890048760348389 -0.91930015816889332214 -1.4657019891767246733 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3074 1 1.6107719957463784155 13.354022241268413751 3.9894755922078917187 0.52522328743196933232 3.2753155511713489823 -0.45870108898751910109 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2017 1 1.5250764729675809761 12.534211718905847732 2.6535068349364991924 -1.9026583066652598131 -0.76359525963207408594 -0.010539981725021419987 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +364 1 0.77511840518305685777 13.964183283878224273 2.7573849859540127127 0.75967707541911466684 0.2479481112385475694 -0.94352056275351081638 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3358 1 2.4941319436834228362 13.1461540232736116 3.3339792865222319662 1.5404118463355482849 -0.74795475819907375481 2.2371935367846207399 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3206 1 2.5297178552320511713 14.048639191591666631 4.5116898566266501192 -0.92946627824475713808 0.96656608574109026399 -1.9426948021554681922 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +293 1 0.034472560845463441626 13.630537745198740396 3.2565897249192636842 1.4257967285381021316 -2.2631200453379252124 3.3222942033155447028 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3756 1 4.3674572948167318387 13.376171084771133479 3.8899628174644056422 -0.0071763387850426975031 -0.20291331252510136363 -0.4148892270397840365 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1551 1 6.5979964424732271411 13.138581040913743792 2.8309515789396919594 0.83927512553281580221 2.3523951762684713884 -0.3858942092646751032 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3091 1 5.4093918096247763927 13.572546318391527365 4.7158277911935559956 -0.70094013694171108941 -0.87984016168083201137 2.2880517992906135305 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2758 1 4.2060797134604932523 12.599150632049191501 4.6256150099693620348 -0.87861181609865224296 -4.0667885918251434063 1.4900175592520459311 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3106 1 3.5252849667923129573 12.565178548806008152 3.4885073921752844939 0.65212021652382723413 -0.37248068691941460528 -1.1254357817296734012 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3721 1 5.214642915489431374 14.717592031622988458 3.8238151429972733197 0.38458104717422181285 -1.0840520046701076495 0.92467002513385498919 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +346 1 3.4175349023213286159 13.749330643245251338 3.492968771555563734 0.1845043846012537625 -0.517933454467056964 0.48057840738770696287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2549 1 5.980566261639444825 13.981197219740364446 2.7976058148142950444 0.0063039811295538799446 -2.3012470427205422574 1.1556960883803033546 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2973 1 4.3192216465604502673 13.59396792178154989 2.6884292299556822314 -0.32565093397740757508 -0.035695142593300123457 -0.43012957087826819702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2610 1 3.9342716654882061711 14.728531436581258518 4.0936010695619451383 0.19174018089119357344 1.6290604496844554028 0.0039767222219807612724 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2901 1 4.6948004263468305908 12.672502083078532209 2.504506772415303395 1.794149313131054635 -0.53224334813086482399 -0.83238141536035770152 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1320 1 5.5275224782020302428 13.266381476025964403 3.6181183586009098008 -2.067825723623545997 -1.3330345535897636378 1.552717257970586795 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2452 1 3.4447825878181301817 13.220048248167447724 4.322360440753373112 1.3345184890209154105 0.37948582146424908457 -1.7441694919800030394 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +873 1 1.4601059230987483151 15.17615484416245053 4.3656601668345551559 -0.96055037237048068732 -2.0951474584839462345 2.0709851753691310705 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +476 1 0.83396557908788848668 16.276708265868673919 3.0955636249089746315 -2.7278013801152751761 -0.020963447235668272728 -0.91306869033169080208 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1926 1 1.4154669479738504201 17.20661562277792811 3.9874657623968481346 -1.8370559882217118997 1.3083190041843308915 0.023776139834935677841 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2931 1 1.7271109700372710982 16.057626052643225734 4.0020136366670602257 -1.2251182187611184826 1.6903368189717857817 -0.79231476463935812671 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1243 1 2.0287239268769492462 16.426171723326632446 2.7370169542839550836 -1.7001409587736822093 1.6069773187784206492 0.7697560670574674635 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +924 1 0.36557883388581341455 15.83374114106172037 4.2128307504842581466 0.83330992405401782541 -1.4516137614018320701 0.15800302646817968033 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2111 1 3.2066200727828828576 16.024220217910119857 2.928765670454739567 0.63376661414834256636 0.87239968681797153138 0.0558999020307991909 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3511 1 0.14292384978166511322 17.247762888976279072 3.775710497256909548 0.61859685887443416341 0.78919374725899071876 -0.17613424361741528146 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1916 1 3.0266084344443999754 15.925941469303410258 4.4411521340127366742 -0.1810527957879393135 -2.4213985050908441998 -2.4873046338706581437 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3225 1 0.33071338086417034763 17.201776646789003422 4.9348098849899733054 2.2608087395385179086 0.67078213956777132942 -0.15063107077711368476 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1315 1 0.50171933878196695034 15.139551120205240409 3.1838880303528198645 3.5344441644165001115 0.59799284390799134492 -1.0247062183633557364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +66 1 2.7792774842037601957 15.043675238074712297 2.9101337630940511403 -0.39180080122396893083 -0.59132933402532117384 3.6170392727089732965 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +443 1 2.8706664588825465678 15.018975505697532924 3.9240647292584260875 -0.35448537487589776296 0.57694430788889683459 1.9255155783841444439 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3445 1 5.8751538730113512798 15.725671285401547905 3.5368706541216017314 -0.6221205164336864879 0.31014197135380972004 -2.0309224499857814195 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1846 1 5.5802756788842202695 16.753883287910408484 4.8564005256847035952 1.5276678518422601716 0.5812286425423350833 0.60168783507408230005 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1892 1 6.1027100252138142267 16.251308248267729795 2.7074955587993509987 -0.69158762964914388682 1.5223537100387298793 1.3208649592575989473 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +227 1 4.6419878511590573211 16.971555656960500613 4.0444316829047588513 0.91233567156415540378 -0.2742147955121930214 2.5722448287220718299 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2600 1 4.9515920874469818713 16.006139190491602164 2.9359791496723643967 0.26672745547058257509 -0.090203908822247241828 -1.7400060700510500133 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2946 1 5.5411019506069463247 17.018853427723193761 3.2377244343409095073 -0.20451746500928638661 1.9502386832381783943 -0.64441297098112904074 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2317 1 6.2481148963341022196 16.501906837125943639 4.0305502290944907884 -0.92514583058816679539 -1.6827132599465062235 0.11904603684280333498 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2260 1 5.0967238189877255294 15.583785691700136056 4.5737022946429011228 1.338545806855906406 -0.27434597679508199164 3.0214796914293042818 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +627 1 6.1423574091643162731 15.098636752429984043 4.3799938069202326574 1.8998206297142337107 0.9163502985487841368 -0.046259059194762426614 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3137 1 0.95867296238840593592 19.438072543635211531 4.5429367853580178149 4.2125565150103758683 0.74860880958165376686 -2.3404772189348488354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +848 1 2.5452706171012455805 18.987057376571243594 4.4436937447920641375 -0.36105707664577213478 -0.33404892439176653296 0.28587360724401350565 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +408 1 1.5301287504351677171 18.47609231688242204 3.7515105246307998144 -0.51602464402274950128 -2.3755804891936747048 -1.4822493766571396279 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3730 1 0.54025841860414780538 18.828080826052197239 3.7742959550422470194 0.088589613438500539044 -0.60459346139944714071 -0.11163330027245851883 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1634 1 2.6313193787784308064 17.518991858829554786 3.706018533469949805 2.3509761233153922966 -0.4543528132411918663 0.64676089422104376947 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +782 1 2.7721855797802441579 17.899351650244199163 4.8919510583996013153 -0.030605535589450384021 -2.721454141025672957 1.194246604188140104 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1935 1 1.932502362053040601 17.907076838605956226 2.8473975575176493358 0.24954990931973605739 -1.3128940781390381343 0.69667267570715152303 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3309 1 2.7361146942228318224 18.812757953160542002 3.1931258540317868366 -2.0555136507135194357 -0.94578405772119189532 0.58479521851758875517 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1716 1 4.4560224467725531028 18.580778175890706905 4.3153377213640400356 0.072550437599225692242 -0.42436719554567164936 2.3543055862782047427 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1140 1 3.4865899752443714199 19.291788836908061455 3.7988085184979176745 -2.3105000756739184631 -2.6032757314548007344 1.5727201065091986898 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2695 1 4.4427957463765306301 17.788265257072168879 2.8341709445971101644 -0.9419133392940794991 0.22336817354148594261 -1.167948907711422013 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3162 1 3.477839924823971085 18.96066088996894905 4.8675494107355898876 1.2476579203351536584 2.0704846818150985932 -0.34848836065054045186 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2832 1 5.3563257055789188499 18.820114665767160744 2.7846921018385764057 -2.0703125754832951699 -1.9078008980120915172 -1.2605408128044226501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +933 1 5.2946442719196085136 19.437504405577595179 3.9277766189087190973 1.0655581699188427791 -1.5149668912700600121 -0.9829112513075325408 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3535 1 5.678939886660537617 18.527049477908594355 4.6144359350390775631 3.0550455104830178676 1.4057699441987585587 1.4799264137258587581 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1977 1 4.33157130268634738 18.740180430678297085 3.1709514415830386547 -0.90955845616108210727 -0.98849861958331819434 -2.9907852172852860129 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1080 1 5.2052952334730893114 19.917453935450744495 4.8596348994877951455 -1.3638802195152299745 0.0024203477055043608711 -0.61981564922917964378 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +712 1 4.8328647461821745424 17.696152908551486149 4.658684030814828958 -1.4399204723473664203 -0.30382234346013720083 1.2171443050594550339 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +963 1 0.64521138209077733006 11.149960546477011292 5.5550042458253532374 1.5889832725470720565 0.84940517965083528473 0.023627208919739645793 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +277 1 0.83779550059421659114 11.58257050256771592 6.8488585538123851748 0.46291399668142979573 1.7313584431737962799 -0.41146426653363327164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +122 1 2.4415060596362025969 12.299280300482893225 6.3883053556396598438 0.69017568127527406663 -1.3887163196705762935 -2.0588590150945988988 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3337 1 1.5447521579131187064 11.603831760525768146 6.0224670328169027655 -0.81662070290971766617 2.8360153111881749588 0.96682155151919746405 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2599 1 2.343011235321501573 10.615515295165129928 6.7333091220352168094 -0.99907766993267643763 -0.026162611242767041392 2.8678640923976845833 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1282 1 3.1705793157716768427 10.998493750403614655 5.7011101070071807939 -0.33530115566675666727 1.654198618534388654 2.6210107174916577044 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2541 1 1.4289715528975275305 10.440933362443090004 6.1535267830793323185 0.35439124799694865509 0.30124055149095047001 3.0533159230935118522 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2949 1 0.73812734151546999239 10.108673637230070952 5.4631384927089836623 -1.4645118281694360363 -1.556903089276841845 0.12106677691070373559 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +213 1 2.9223962258899929267 12.030451193839889257 7.3678640488219668825 0.88932351784454755084 0.13782718102824098594 -1.1572314218758341653 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1478 1 6.0141545853081597173 10.409038139354040098 6.5580884420566993853 0.48683987089006608429 -2.8835530250623131465 1.0715691641495808106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +724 1 5.9191548277751877549 10.9516715745201072 5.4986387712327928767 1.3907907719354979381 -2.1473119416239634383 0.78199836349416629311 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2850 1 4.3361487099915745347 11.444671403080985073 6.6527549328849078236 -1.6934475214378981178 -1.3373404782074365116 -0.57494198548690111927 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2445 1 5.6962900468850525826 12.033072605401542887 6.574508299282244117 0.18795797241441344894 0.012480218815565987528 0.25843219508374060123 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3957 1 4.6391745472099437109 11.246991065946000177 5.5708211621399517099 0.16633235324134768018 1.556821035015248933 0.34075324019401243003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +869 1 5.2196005433483820823 11.005159899469461493 6.379597518537900136 0.83444082753170678579 -1.2418974166872882581 -1.4559398917766943615 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3102 1 3.7314470783571764834 10.180176712969339903 5.7392411509346361598 -0.34446127924509950535 0.055309193452237795374 0.38785329803895091105 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1883 1 4.8299695578822126052 12.285919958503834337 7.3687090238171233381 -0.67993711899853281899 -1.0613853226998930523 -0.03842239900652288237 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2617 1 3.6230000977053808953 12.143206323029740901 6.4664985570776769563 0.11778063516207980255 -1.2371365818803432557 1.8430404007630927232 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +540 1 5.5908686783342638194 11.853691244351889367 5.5243467733637565686 1.1235097367138107138 0.64617557423341975831 -0.069860420296821074126 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3771 1 4.9004080794632010054 10.136177088743158592 5.5835136491008867665 -1.6271298629008053016 -0.80361939914054836276 2.2847436390638744541 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1515 1 4.7436538098359202209 10.106492533209452844 7.1509304882766366873 1.5134925136528356582 2.2048342664055642359 -1.9575173085749033586 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2882 1 6.5591572985555997022 12.487669073926801033 5.1510802909776218783 -0.31079859027073314381 -1.5938246118428187614 -1.1297834761317007146 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +485 1 2.764940997743389417 13.510577148643656997 7.1195829444152316512 0.63250991375989573662 0.21475350729492911905 0.82946348865743924073 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3072 1 2.8086722747841914583 14.545168276276140062 6.6655911251598825018 1.7509459524716175505 -0.33806584671893979976 0.82760179799824584723 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2018 1 1.1492812730373882513 13.641661998586814164 5.7488337925877344148 -2.3145594748638300686 0.21144140353607396299 0.11084952887115209763 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2551 1 0.76467046118412096423 12.891404652227542726 6.6390155751734027945 -1.0876121547609489681 -0.086225766426902397677 0.086958454276325494736 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1559 1 2.0682368598505536106 13.324675343303402641 6.377801550524228702 -0.62902007592091202515 0.43970396726718513625 0.68525660014336264858 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1319 1 1.5420866299904871788 14.887728086906607317 5.4316423183304225475 0.81956593991815573919 -0.29965639017913764386 0.13574856507247318183 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2621 1 2.2073960282388962462 14.202607331799717016 5.8414059379703404673 0.84753403893347789566 0.8784969124387038697 -1.9671092562905903023 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3201 1 1.5422407841901064618 14.326398336070452544 7.2676337046282117882 -1.0331496015009000722 -2.8766783269011719781 0.67223187634183212413 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1434 1 2.3780198564828460839 12.701343046328736008 5.3995796160898503757 0.25810370861021819655 1.4277865201191668465 -0.024339709321415825549 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +901 1 5.717298629383336106 14.73349368027121109 6.9317547928141571845 -2.9330811372778669011 0.16501556956717333691 -0.11474755486374003943 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +84 1 4.6453372175212344075 12.537206945739523434 5.9549944856250247582 0.24267355785175798166 0.51097755208676742811 -0.69574769504900524364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3002 1 4.0585972959138869598 12.824977147384977627 7.1418030634418174785 0.44185271574424228591 -0.17108864369244836112 -0.094708577965573415014 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1035 1 6.2261032016351443019 13.440466322774309305 6.4176682535475695346 0.3042912313825856252 0.4343488343664672624 0.59986075937873206687 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3450 1 5.590228742862603184 12.873575940848901666 5.6351800901417608003 0.077735263255109113278 -0.291153363258542075 -0.32996758795146818866 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2363 1 4.2075218527199345075 14.421548923977660195 5.383756495630033001 -1.0330062785596514363 1.1432518753818010637 -2.6985541174307186019 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1249 1 4.9713401865433466398 14.124267914463029427 6.4323147506804616569 2.5964994515324528734 -2.2842838014641055899 -0.70543930889948136542 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1477 1 5.3045219770104008461 14.539076697028427532 5.1018003861398097953 1.7660671626912962662 3.5720176174480249287 0.71986542911705753145 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +23 1 3.9106421312223340614 14.410409494865151103 6.9191903749514382937 -0.65522172084173935236 -2.3311454356541569943 0.13582660860582909668 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1734 1 1.3904412433620443323 16.673748356164686868 5.2649544490985888956 0.86506393729604880161 0.48430216789567537283 0.91325043355493196184 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +139 1 1.175737266383410029 15.274045130768151068 6.751097589122584175 -0.32331727046414016069 -0.64582124100040783077 2.0319547821566246171 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +733 1 1.2879151932370844769 16.748057535632614901 6.4447501430575009351 -0.51407064088406861924 -1.03190308534567321 -0.76558173185751388079 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2836 1 2.1080492773800334483 15.690869065295640183 5.6980380810897814925 1.09496872397889633 1.482720280729432405 1.2378525342271113896 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1222 1 0.52432868952252931205 16.217621091146288137 6.1650295922848883379 -0.15219219647271675644 -2.7312587218059745098 -1.8796895033455653934 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +593 1 0.057663634219936622805 16.787961762776646424 6.9667151286801933807 -0.51410309951804666895 -0.14158086041020201407 -1.3167738606804093582 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3280 1 2.8630622710266964148 16.690507638032812565 6.1196726819412718967 0.70578552120005810799 0.47816160635458093697 0.11977584274668331976 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2622 1 0.02852513103385634699 15.320621240678624631 6.5315518159607552917 0.32570532611984265303 -0.29591439995894297521 -0.41869216294955152735 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +959 1 6.4051439964180536535 16.118733234021526357 6.8458288142393284303 0.8279617038866411427 1.1264765814550130596 -0.27483144855668656392 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1999 1 5.6629030223603686878 15.394290418058854897 5.8300952395860141664 1.3820463457909708538 0.13078060521444292985 -2.1796816209889655624 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1836 1 5.4558560127223127978 16.400940222831511761 5.8250478491427974959 0.39319560783158935546 -0.33959364055414376082 1.8979009114442608741 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +267 1 4.3253849831833104389 15.570418948635778023 5.770231369175564673 -1.5669562458844645825 -0.36592555770644819013 -0.15571126677586707987 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3158 1 6.3584718015772452304 17.341457383373807488 6.1600994246921798592 -0.25430195552614476284 -0.11959023444555338944 -1.0608889879758662822 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +985 1 3.6750650453247697413 17.155893605003655011 7.3483590018350462003 -3.2896998801596577522 0.65556323661677040615 1.6486009875778786515 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1111 1 6.50071856988083141 16.054193834046767364 5.0609108084209566414 1.7394891339668756558 -0.89471255037810892841 -0.69449784480289200594 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1371 1 5.3647402592777995167 17.186912078017506644 6.6293842403847769162 -0.83757615171535149123 -0.21592832459077546114 1.2998878100592929918 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1630 1 3.9801449951431111529 16.978334702374162646 5.8740424150512868806 0.6689445203384256633 2.5931898983002055203 -0.7038970051945218076 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1706 1 4.6988180856544472519 16.550241302477324723 5.1736724076873867872 4.9429633334306712911 -1.097935052961865221 1.7007691056165776811 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3616 1 3.4412625855147678244 15.242024876656859789 5.9715958573604535076 0.73657700127107605947 0.33119539874604381202 0.68586419025382128201 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2413 1 4.9717839401612362593 17.392692487124559619 5.7292557877109828723 1.1776777966722136171 -1.4936270925207697502 0.74382477467249641379 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1773 1 0.80022291257367195172 19.720195337080923537 7.1269423411004009239 1.917435250490766574 -0.73243161869638617745 -0.93437300937612155494 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3848 1 0.68056853547138218552 19.673522847886506071 6.0698596240593705176 0.80358845937861100861 -0.73639360177297108478 -0.77184873571553103133 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3908 1 1.3588688908933141963 17.84008165126941492 7.3638300175095174893 0.61588398870762250947 -1.2720625280529189727 -1.5218699498613743604 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +955 1 2.7652894744875635702 18.331041498062880635 7.1953747623898527408 -1.3168713014608248724 0.71127626807569610534 0.41638214180019378352 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +818 1 1.3948894616905755939 18.785921573738974644 5.3877514084574436026 0.43701605614889776907 -0.50397743609522649422 -1.5221610524105904094 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +661 1 0.66933461530468096878 18.641844619412228923 6.7400213212748196767 0.2677419923940093649 -1.8540880108193831255 2.6184432451712549295 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +653 1 0.58709920514150404358 17.695510396669220654 6.0858094650873697518 0.4595220151656788099 0.17931797646696348569 0.52440558731003350523 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +805 1 2.4384641506957365209 18.727467186517124276 6.0970173120716673054 -1.8253109482813856257 0.30980180174042981633 0.54662243531779486361 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2391 1 0.352699605731861765 17.672076141234782654 7.251383084090386788 -1.079086834110869475 -1.988942724550825103 1.2009484893277844186 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1321 1 2.7423754302465059851 19.700638086860013942 7.2611559348484711052 -0.26741339152603255114 3.1167838774038236771 1.2069992423238680157 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3693 1 6.542478623639210511 19.522264530108792258 5.2398987584054506073 -0.64206263966794374642 0.14331034454060020966 -0.38537404414215370441 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +842 1 4.84521665570765947 18.863253425241811811 5.2201361845465417133 -0.33832650125438196165 -0.16680966410269806866 0.46650439979283242486 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2783 1 4.8512303769700606537 17.995211783528301197 7.0244554612468412813 1.1896494275021638476 0.16958181635076230442 -1.6420862563420965952 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2785 1 3.9982875115100569019 19.549532357703167662 5.5434817801805271742 1.5897307026113713935 0.59450641540732318546 -1.9638746299079503643 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +380 1 6.2817939720830979766 19.942141217059539571 6.1434557151669650921 0.69495205052960207226 1.8027133835372470827 0.59493310360046358642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2133 1 4.4076596264150973425 19.023625497687870478 6.7486246848942252896 1.4992081719127807737 -2.7672883958376224278 -0.74388371526262020428 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2962 1 4.0560956864593116222 18.153694265976206168 5.1776401640178262298 1.7035816984008571584 -1.3148773457066411652 -1.2370380290826856751 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1414 1 4.9759963324339144819 19.687031555740116318 5.8945953142484501797 0.42044651322827170103 1.0893958635709934946 -0.66663100541043163183 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2679 1 6.272143060011040383 19.714530597445644844 7.4751924436217516146 -1.9436861342966382793 0.55616563208665992235 0.14558171477587425469 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2532 1 5.6997949147885460519 18.563138490266894109 7.1273258266181942489 -2.5138658538793636765 -0.24164932243041303828 0.15916284908926889297 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +77 1 3.824584473586142952 17.904625521242159891 6.3606604443506391533 1.3024451296690431334 -0.730900211651674514 -0.40847793285617056691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1728 1 6.4468746517570520993 17.591029291763454978 7.0581504207901684111 1.1079784934866290236 0.10095368568423021549 0.81399680463285173371 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +257 1 2.2919476285341251476 11.329734388851758098 9.7708504125044033373 0.85604151277899653838 -0.041902277401211877883 -1.4704234277337979719 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3245 1 2.7247635564992398471 11.402641402912664148 8.3406453303017933365 0.88696024248099047949 0.29958752370978214419 -1.1409268970293504619 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1093 1 1.9121602389039136227 10.741769376970433214 7.9214790798642402692 -0.23041886271345610182 -1.0408497475631084406 -0.97305235081119956231 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1662 1 1.8669651672078833027 11.795569951560013422 7.6343615784567058213 0.44536019838822216155 -0.56102061480543330418 0.12356596068826011803 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1594 1 1.8465399924986294344 10.569637775485285047 8.8630448705095101758 -2.5718970218769712233 -2.1137024087790989846 -3.2659826917906089605 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +38 1 0.65697465476298344544 10.969225655571543498 8.981784064018167868 -0.50423905272081992468 -1.7142639402839179308 -0.73828121423952353108 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +489 1 0.61843647297980564037 10.732245807961353634 7.7377313254134811871 -0.69270856703047922753 -2.5506043293989142384 -1.855601126442989024 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2287 1 4.5498692558073949854 10.403716882922044107 8.8559929702996207368 -0.35079755154242048265 0.15286921616445764416 -1.1622407527310667508 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +541 1 4.6221143142328111608 11.870279553598633626 8.6725799817232420708 0.17474865038185222188 -0.10660782490226698715 -0.025862129089231966628 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1144 1 6.0970019204712526673 12.476106793137068607 7.7031352996887525464 -2.9524600872508206528 2.332462085124342277 0.89729974629543474141 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2885 1 6.5163464754978566162 11.399022623656108522 9.1424423048535068403 3.3618249390582173319 -1.5095163414913219668 1.5748017830606348966 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3752 1 4.5583234278385047489 11.023822177337457617 7.5973695075426679324 -2.4288792921845212547 0.91580312436361410722 -0.36177096202854513995 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1968 1 3.5871456748865204744 12.006802373222541291 9.0176568135531081083 -1.1346937708685851387 -2.2140469275165743923 2.3322804286688483266 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2416 1 3.9170121725296249693 11.867528269060883872 7.9225755209830168724 0.75460849982793987145 0.70843479303538758884 -1.762545664682717339 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2432 1 5.7135768589406774609 12.086291187707500328 9.4522524378815990787 -0.8901811768961097604 -0.83291401386731778178 0.66130185920853834514 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3316 1 3.5212098427009883572 10.147626958995319413 7.6097302388092744607 0.35860341605687773292 0.39750456365792063984 -1.3564072035642398273 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1181 1 3.7411564482052623859 10.701080488821665071 9.6011142351414164864 2.710795061832222963 -0.34552353970878563194 1.8831055503053841793 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1715 1 6.5040995625988351492 10.370198801384356457 9.6004115456490914937 -1.0663719792336374681 0.281707717870609331 1.4650753485561172074 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1372 1 6.2553881998568101608 10.111395628617158238 7.6706993902397044849 -3.2533522114628485866 -0.68438881745949142754 0.85591189459422611918 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +223 1 2.2831401595381315417 14.692250095676337551 9.6036176091543108413 -0.37469965009801609046 -0.64874776825680002812 -0.53719342722348339958 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1233 1 0.9398377680614182772 13.067894403257149349 8.7591456633507984719 0.92777990533880783097 1.0250159342071354374 0.35670201507589693879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1739 1 2.6750157801431155846 12.579475229958557492 8.4455410848433665194 1.2268672355042522515 -1.2154242358000766355 0.51578659192541287393 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2803 1 0.48241387859851830866 13.943825363049072052 7.9594753607257580086 0.1782119250693899315 0.98319439891236093398 -2.2291546837795004343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2948 1 2.486223039455315309 13.550559800283984657 9.657282697274954586 -2.3624910210751060013 -0.41794291672691707973 0.047364287686722600368 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2098 1 1.1941585858158494382 13.012893590758871198 7.5645450063374388705 -0.70069260121395937624 1.8397421028387723752 -0.62523642623842945465 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +807 1 1.3998468749633143915 13.912031642335765724 9.6991712171309316659 1.900984627151193429 0.58242825572285272795 -1.0661000707098415852 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +920 1 2.1069077035425984867 13.811081586823949152 8.5280455930913454665 0.67120495937313640056 -0.7487397520566686504 -0.78307137229955758873 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +465 1 0.81176225000057167236 14.572049118934927492 8.9300231292603839961 -0.00746493039654117993 -1.1445728176734573101 2.3860303525721620055 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3839 1 2.8759645960845463541 14.833478854839107441 7.7184493010210140085 -0.71343187164126764532 -1.2811055323378115478 1.7344805123006337144 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3921 1 0.15664101034304525606 14.390422573888178803 9.6346445106417668569 1.1340252457038337841 0.97990600731680210789 0.62089346467946926467 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2860 1 2.4717202865115082133 12.5475036349029061 9.6413863750586319412 1.1168961238862453733 0.11563357366326564024 1.4623067596596639461 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +567 1 5.0681981491627166037 13.969589494250911343 9.8881918276507345666 -3.3461917374627323518 -0.83026013215485972019 0.2287203085072798403 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +105 1 4.0850432796262312607 14.128600423526068042 9.9405555918123607029 -1.9121835292118578575 -5.1081668580777535027 1.4887050709298552675 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3278 1 3.6154814087336824002 12.964393423366017188 9.8576984344452398545 -0.69289899010992739292 1.7267097305481704517 0.32061260692790832794 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3059 1 5.645970318966647028 13.107234460313140545 8.6254535433838430691 1.2436889410335125739 -0.78259260058768553847 1.1801657692844449432 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2613 1 4.3045916763732483545 14.344695397075813759 9.0521783290890223128 -1.6707423304029014322 -1.2301839910934668776 0.83801430800429088652 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1518 1 6.169352570248744172 14.110565928395548241 8.665678628267855288 0.66552552710320656004 -1.7456398397370727071 0.80215178930768582521 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3823 1 3.8725548722126736934 14.863363488751790698 8.2832852306126056874 -0.24431220772665021568 1.1349046475514572574 0.46956961598152768822 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +865 1 4.7578233119964652431 13.114261435284479518 8.1196047303530161088 0.43180489572412295018 -0.30525223520080452255 0.17990268235362935623 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3400 1 3.6257954506973764097 13.296550590046843254 8.7892033390332873211 0.66503922685746563737 0.036707724481478305745 -0.95271063244109621682 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3880 1 6.0069161094450471694 13.854777059884151313 7.5483205732519440545 -1.5577318495550145361 1.8124820986308025628 -1.2851301225897493463 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +233 1 3.3341925851368983125 14.730123445508825242 9.3158674817846183203 -1.9470928102333746601 -0.23864198917030920999 1.3908592569750537482 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +198 1 5.2916632345256049419 14.988540908917897809 9.2378320563194922244 1.5005745997384503099 -0.98122059473544354091 -0.32961500599143711554 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2374 1 1.6714418456172364102 17.378071284731813506 8.2695466862533972829 1.0569979126427728744 -1.8450240776960153966 -0.004807027698767871865 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2511 1 0.73756403585152519042 15.521928070652963427 8.1275565283938959737 -0.96499173606330945763 -1.3068111943163505106 -3.595803001807604371 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2661 1 0.82733692661061408735 17.211245521383201407 9.095710656709087516 1.2122591473389285888 0.58812213762116971605 2.7209822222896518085 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2124 1 2.9778692035286744577 17.011691213187368987 9.7440454496076966961 -0.51937471967602877321 1.8329513958229761705 -1.5795029274042453604 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2395 1 3.0683759468956859351 16.421363187825807728 7.6225038084062219923 1.4881493711878372999 -1.0257913919795484947 0.56713896998565649366 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1041 1 1.5538860209250882072 15.455794381419041272 9.2097760755143678324 -1.5388436699768077709 -0.92203014521222936839 0.090960359105799165613 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2207 1 0.46201487815154190786 15.718806341462345344 9.2996612451687248324 -0.7808058916773182867 -1.5908067712729645482 1.9616905021396213726 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1641 1 1.8219279310523031068 16.01261730653183335 8.1150399342098840094 1.2312916677483254357 -3.2260198172177818599 -1.0690161463867835501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2847 1 1.0870115447120405339 16.821113250660257421 7.6136106144584578814 1.6096736307057299964 0.79660189215371801641 -0.91318021783568048555 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +159 1 0.15487904929489390571 16.664903696937294342 8.3222565013343690055 0.99538979665578297684 -0.2703899446242603033 -0.033240027808777293516 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2312 1 4.3295759200566026337 15.775519897118309487 8.9206198029485808121 0.31942198529074455893 0.55213340145728695418 0.81031091389310805351 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2210 1 4.7086107665271077494 17.366794509608936892 7.8484831043101079828 0.3519550931239014413 -0.96595520638796783519 -2.1505128960350736733 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1063 1 4.3882184940665158734 17.151694557897510407 9.9244621948021940483 -0.070064770838772993944 -1.7692845491375883693 -2.0135950352880955805 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1501 1 3.3816150010784697955 16.143178477404617865 8.6899801581891207292 -2.2858279006717863169 1.2501091618896713609 0.046617701283405442447 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2689 1 5.629751932982288487 16.764148746409613722 9.5805216984055370233 1.0524518397346538379 0.57385300310156617254 -0.63517575109558044311 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3479 1 6.4107001903532516707 15.282007440736311565 8.021240224358075821 -0.8029779555637209798 0.55030493474668362719 -1.4771601753993948147 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2607 1 3.8850945292797880448 16.865576167538108621 9.0526989133445532332 1.1460717154006256902 -2.248048414726997013 1.6864708262869798627 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3007 1 6.1737124267520755438 16.501846021770923301 7.8265090257821139375 2.1910207818129747714 -0.2525530435526947004 1.5708710312561169342 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2720 1 1.5091675552666050653 18.682811450690564925 7.9545588877245041459 -1.2533722001200735541 0.049134488973178319648 1.7181386767324451359 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +469 1 1.4544176953302045963 17.966549583434854753 9.4058688663373821726 -0.80036098839895175594 0.90662397152292573121 0.33884205352753843377 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +379 1 3.2269879402274028735 17.953441339104017516 8.8756810858173889045 -1.4046867732291836717 0.59781060710132927216 0.3589764347741571382 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +275 1 1.8028045966133816602 19.74137371217550907 7.92125983574564696 -0.68822275240761676685 -2.0980515299677868768 0.31288587048321758743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3533 1 0.70730002128282576379 19.792232169458312541 9.1768725165687925482 0.82894230497530929647 -2.6197958968859005324 -1.3416949430366151841 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3728 1 0.33392105588056503196 18.076359346178787035 8.2929377028825612683 0.56212269274828974286 0.9621550802134992697 1.158710906317431677 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1363 1 2.9753809231855630202 19.233965402906793685 9.557464075955742544 -1.9707865529083947731 1.2557233980380868577 -0.16559768097577640122 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1452 1 2.5550059168538128418 17.539181016537558122 7.6333845420890247269 2.1050141592777760202 0.28832160827095615341 -0.091790208759951363859 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +415 1 0.0069078957662116182922 19.122117075125967034 9.0080623780657749222 1.1261721397745358964 2.1258353724335616874 -0.83905820553039833776 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2712 1 6.3490959919393388233 19.467041225159281481 9.5923294995779571082 -1.3845992121186652124 -1.3355544694024679142 -0.13475722498753189837 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +650 1 4.6186269579253149686 19.583408367617238355 8.9970103658966102955 -1.4757949856218606222 -0.061903342345359414767 -1.9317711348435628871 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1155 1 5.6817104448885453749 17.827074406972183596 7.8002692358118475013 -1.4764893292402041514 0.47263512806392538046 -1.6984063514579617049 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +4000 1 3.844081978758711049 19.639534481375175545 7.628774530782776786 -0.51178001038500575692 -0.22557791256320619544 -0.55823281245861466893 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3075 1 5.5357250190759410557 18.519958812252252045 8.5576603238711044241 0.15234822205788248195 -0.038691419338789424798 0.12370423941589760164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +758 1 3.6799867895794973194 19.011244600337246169 8.7108929286368308453 2.1251004828704185279 -1.5831942637418090492 1.0830560526931245491 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1904 1 4.4377936386120211409 18.330209654563294208 9.2535892965329793469 -0.50192654262539915244 -1.6521696760368067558 0.8926345159534246898 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3424 1 6.442770194896899838 18.327260787986521251 9.3758783128008769125 0.53245176619294176668 0.96503573665874620158 0.28304782281760876295 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2068 1 5.6838743004759466615 18.805180606355261119 9.9924704601090645895 -0.95731786439479193973 -0.70292831245276687913 1.6276188505576572041 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3260 1 6.3809137958993442652 18.925035987842147023 8.1685672181868600461 0.96754921591978559903 0.27156470777033375752 1.3403461372164398036 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2648 1 5.3138277928150987606 19.952660647751468304 9.7034340255412505627 -1.5393553208705963442 1.3929805576492644281 2.9338167177379799178 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3684 1 4.2328214779354036423 19.334420778847764666 9.9809876874531209268 0.88593440888970653724 0.736215525861100617 1.46055273677845876 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2263 1 3.9978229703854655241 18.107260084409563916 7.7456762377722645496 1.5033212682744194755 -0.027357161202607564038 1.9137872998788518775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3226 1 5.4309034890250709182 17.519084022528353728 8.8995639187166748485 0.055203799874715096807 0.69796640957460498456 -0.17471889045550087483 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3653 1 5.4537910633352808532 17.829408410445484634 9.9801360135576224764 -0.48633183452311828932 1.147272333875378969 -2.1999681068584613364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3257 1 1.0417950073926105503 10.449328964306804579 11.21699838841749397 -0.69357782349708363423 1.4647509388860113777 0.49396257894901673957 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2692 1 1.8364881786973368261 11.463915980101390346 11.96940927160484236 0.40826762168748226278 0.13380668138341453299 -3.2281070463178389573 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3211 1 2.4308708389012312345 10.341837864981737738 12.334488691130772509 -0.21206478630359953952 1.3111008385182290059 -2.0487816917814436479 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1632 1 0.89717340330091999157 12.407078346420210124 10.36809579785934865 0.40017344065117183005 -0.7672678313276366513 2.0786855954184684236 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +792 1 1.9694178270005555653 11.585754766091959311 10.821056478665369127 0.38204547382513326381 -2.1942123135363003072 -1.0997762035834024452 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +447 1 2.5568605389402154771 10.772653439116860241 11.300009786872786677 1.273869377822923088 -0.45658263448394281747 0.63749607546969699889 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +136 1 2.5283293093250502892 10.284330427376975337 10.262224583245165732 0.0010179422365843985351 2.176812214219142394 -2.1948465715866620762 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +636 1 0.56459219168357588359 10.826440674900277727 10.015721481069421728 -0.15643182099013056008 -2.3190035116586118491 -0.42908246643131370268 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1893 1 3.2642089748797085136 11.138013319323082584 10.352822859660808064 1.592936322866099319 0.82012149516703214402 1.8853027068649439446 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +701 1 0.19534417535321293991 11.648039808831304853 10.602274647328648882 1.2462014791078410703 -2.2840407095503350021 -0.26179104158876348452 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2480 1 1.4797077503322046965 10.045645658461037186 10.407656948968938337 0.95069479915335719511 -1.0101149408575356148 -2.8232137003844774981 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3916 1 0.91918699273041870601 11.982842733645560074 11.787538511859072088 0.21972404921531571431 0.50458410552552701578 3.318636586302537772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +418 1 0.38506999883380788052 11.164525416964265148 11.572674554685372428 -0.96324243178382518149 -0.93016942500884569611 -0.86851730203174026812 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3707 1 4.0482771056117865527 11.341048918772473897 11.953933385141029433 0.94786704309051106332 1.3110557663930531014 1.463106541883410161 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2264 1 4.878387779821705017 10.420428151529991467 10.701841030699871027 -0.79713214762046713524 0.0076614402193249959289 1.1153072931188139361 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3924 1 4.0714742714924287981 11.399534011947139334 10.862215476426642979 0.098093732180103254681 0.05227547529518822983 0.5440700332572717679 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +584 1 6.5920365548266923739 10.280556202371053942 11.477317249924718467 -0.22849480723108719915 -0.49427913456695593553 1.4921516210108562994 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3869 1 5.9403458691449753104 11.56480104328606906 11.096952515663094374 1.273209192658149469 1.1142022103297419822 -1.3491171804888202335 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2481 1 5.0678333338673535735 11.014975929078335781 11.755414124350213712 0.21536056672425746283 -1.4116886472366509953 2.7211517634398010301 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1917 1 4.5257378971559507619 10.13841093747388733 11.734884018575945319 1.1602844448203433192 -0.91186311142725506862 -0.82115154681699953354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2915 1 4.3924750597839965494 12.350182099752398557 11.963129980634146676 -1.1254243345301961909 -1.1608890813202057402 1.0822674399889977703 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +280 1 3.5297474434099789242 10.406869171995142054 11.774302478776549563 0.46449552480159300716 0.8491840424781252894 0.30940782931717258908 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3498 1 6.6557280903395481531 11.687355930546521776 12.451601204594888728 0.32420693306518150179 -0.74853048464359495107 2.0078145336456341141 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1560 1 4.9934698336072873559 11.581550191964451457 10.508022682144734006 -1.1604404216101296132 -0.82443384973217825884 -0.42831130296309161132 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2088 1 0.060825095913053676966 13.833983215699438674 10.761520280309660791 -0.74410005284723146346 0.52545229126443837586 1.6734572140628711789 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1001 1 1.9408970293666609752 12.591097537724966315 10.488033076870936 -1.3487676895994564763 -1.2597872262089404582 3.4069914321137293456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2574 1 0.91336590459845756751 14.045896738859276809 12.144295919933652428 1.3987349739104779633 -1.2161675355831313983 0.38159013073475323008 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3691 1 2.0215762885070187593 12.601203856106405254 11.582673570008655162 -0.0084361324456411670297 -0.26831790030813790215 -0.57002646055744188303 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +699 1 1.1702160433255885952 14.223912064594692595 11.052224529577925338 -1.0337868678122013044 -0.033541099255966842774 -0.0069272294019211326857 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +891 1 1.1148561170385304919 13.051357287168547927 11.812327942121413571 -0.26825383578312361754 -1.5081477842795767419 0.42300247619321246217 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +683 1 2.8841538317019157489 13.812316671974295801 11.89463903857317284 -2.5289664077294271571 0.13498689549495845874 -1.9979227456054540202 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2934 1 1.9903223107620209298 13.704287644702906945 11.487736195054237598 -1.3438060847194144287 0.47323133217246460269 -0.28585535685234619852 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1265 1 1.2725453425712183186 14.963187856814816001 10.171227982831327452 0.031038686541230778304 -1.488406806323128162 -0.29517727384114772482 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2438 1 6.3699563196491242323 12.795644564310380886 10.771423314015105888 0.044031088571836372869 -0.4651903240141152529 -3.844453622185608932 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1352 1 5.2349447053445574696 13.103370671139375148 10.626145055840771292 -0.45003528644783480361 -1.2609900210000912768 0.30418220347662439096 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3970 1 6.2168096964791326187 14.77177522654597297 11.187938266484017902 -1.7978109729789117921 0.14473507781835034947 1.173379959331377842 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1133 1 4.5477667230798211051 14.598153933678302607 11.033451192585600253 3.853800292745187317 -1.3230415788790552689 2.393316997760137177 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1380 1 6.0883790552303711507 13.997127238622896428 12.120855272068634889 -0.52353683578013221478 -0.13181110575850454869 2.0705685818966972356 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +927 1 3.5563813563644539606 14.245339508157154995 10.884981037793018288 0.9668827929143010147 -0.23345729312189625326 -1.3562279081188108876 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2412 1 3.4217404822600232528 12.56977723148683701 11.419613682418635392 1.2662480957932198411 1.286767561611838806 0.80152936066837643381 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +493 1 2.1283844113465471004 16.150733005631771277 10.124066445367830624 0.64781630030976500301 0.53354307391631916602 -1.7363281461263195826 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3126 1 1.47379461226564068 15.180478994694100336 11.997119994866073611 0.4507347563443000471 0.65579181641035455552 0.47363688692032934746 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1162 1 0.6790227132766719631 15.494387189957604889 11.421184118011211694 -0.72785180725815035174 0.045618922929156785484 -0.95465943431521127494 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2625 1 0.69233465459358656258 16.687862735592329244 10.688725950231372508 0.653723279243565214 -3.0376374138363808619 1.2538614618814936108 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +425 1 2.3436168712946732207 16.583133056000257 11.600390961039508397 -1.1903965410864858487 -0.48692455127307560092 0.45391100105428205946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1984 1 2.7277995203448202055 15.13064744848001375 10.48332709672407681 -0.19767643517137967191 -0.3265431078235321305 0.0025735462513855871663 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +112 1 2.2151949033765108155 15.650834871939848014 11.176691491306641524 0.90902689245647794181 -0.64779370448829820539 0.1632701346546503729 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1593 1 1.2690210402885613306 16.643345758302434234 11.893450405131924086 -0.36805373547723468919 3.0769617777597804142 -1.268962323993260588 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2448 1 6.0496256660941662986 16.084013767585123134 12.056687392211923537 0.49910545234500292011 1.7021673187065404775 -0.29495765119747241467 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +742 1 5.5695502628470805462 15.76825566456104788 10.308967165897495732 -0.52527545245672746521 -0.073857489845715385002 0.86342033489618452702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3351 1 5.4510437639386086772 16.845192844357271156 10.847109520484952583 -0.52886257171131167976 0.7349446829100862999 0.77317397152008082717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1623 1 4.5070689154594925085 15.458328007137943416 10.348593400895234495 1.1317824317404070467 0.087934877317089307769 0.78076017635546357543 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +176 1 3.4086739443235369862 16.770248638407714736 10.956556297386656595 -2.2553066632697227334 0.95509885747819833757 1.6054278319643136008 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1069 1 4.998976817664833483 15.259114631112923988 11.610711032328005388 0.099135399747483921029 -1.4328536454709330794 -1.5984772063140610943 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1180 1 3.6741967663616748041 15.985261565675923379 10.114587376673068064 -0.30357871990198947998 0.47292608544822856143 -0.42704787342944527939 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1945 1 6.5871657572439481498 17.345172881368046802 12.078759333334060599 -0.98745521550613457595 0.51497436818066322228 1.359633688411725938 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1079 1 5.5822638130490238595 17.097384948994587717 11.772595759736026011 0.11356099091552507296 -0.62555698021065264669 1.1507759733578599715 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1415 1 3.457625532662587986 15.673354353058249089 11.604471306479087644 3.336513445911202691 1.2020045289921899023 -0.039002279707859847935 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +750 1 2.6902294224926732724 19.06863138359519283 10.673245601031871033 2.8200548840735168987 1.5266246856025300627 1.8491653040166671218 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1310 1 0.12821008302077577246 19.933054515268658236 10.157178162095870988 -1.3035164749894039282 0.23944308661726332321 0.15231702783023012837 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1849 1 0.51692923791679246115 17.940932180289763664 10.969430173879343826 0.29317800597057636081 -1.2398417726799904059 0.22705729579800179585 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1011 1 2.8160094407880023049 18.999816631010823187 12.422569520216523387 0.2853654948089485166 2.6972161151571474313 -1.0051089084633273441 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2975 1 1.9275030610590642155 18.558547539675053883 12.467115391778500921 0.11028810583473362683 0.58073069776838959211 0.44677712011329900887 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +767 1 2.9488914921908619959 17.95584274820228643 10.401054415868799197 0.52153159976444829482 0.21802545388429991902 0.48287989694924926543 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3706 1 2.9215129807593949174 18.361955157777899217 11.428979956462772094 0.49691598055455071803 2.4211845593529228715 -0.98908147595576423328 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +592 1 3.1050461838255549729 18.002963590761538626 12.349416725549405172 1.0673317745172885562 1.0557732170714106967 1.4497532822006053976 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3853 1 0.73020587870517195128 19.283348904202686214 12.384574927753845941 2.9177347978974088605 0.074613840324298699724 -0.72263774236683053775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +347 1 1.9466437290541873661 17.60696394352575922 11.540695562044065881 0.17208526921106656604 0.63692370017199329002 -1.9088832752952598071 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +880 1 1.7320859426740413678 18.781294638744547854 10.046847086610576127 1.6786024747734147322 1.9434161626434285353 0.83112304737797615406 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3492 1 5.1859279684374488539 19.510192663887934827 10.57885456768314647 0.70612928323936829944 2.441054381081003477 -0.35468732176933709388 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2631 1 6.64667297540082469 18.721932057870166233 11.494374468270883938 -1.6206207207989511421 0.37662581024185459722 -1.6762015660639411063 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2003 1 6.5050661403731409038 18.517794815950185949 10.46381687551447115 0.84953694536088297795 1.1582345798901152456 -0.9445216360037137493 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3556 1 5.7861890580197128386 19.386960856004751719 12.133891318716372609 -0.7010611751184447904 -0.36278927613875877611 2.3369170627648876426 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3198 1 4.8504921118863331131 19.266123966504199672 11.562182844248507507 2.0786815590015126354 0.16375953183412983449 -0.50633210709558640339 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +514 1 3.6749784359848569615 19.702385119480503306 11.75585905343733728 -1.4553272463248205781 0.50887951883936899389 -2.1902970070383691592 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1455 1 6.1629915703051025844 19.849413542282317025 10.892095280916301192 -1.2733680294955762591 -0.85981825035274273006 -1.2876713911483974595 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3810 1 3.7696444452250466028 19.033795285559634181 11.02702791850058972 -0.51007956450154467998 1.1741785743896850924 2.1401054153990273221 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +298 1 4.3901092572186870555 18.126038475192370214 11.803065896611970587 1.6500554072568420771 -1.3998212574889894455 -1.1337179447600025384 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1620 1 6.3929319030153415326 17.706806248295187345 11.172213321505084949 -0.88602577018402273179 -0.45234848262917926043 1.8629469820313644401 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3695 1 1.8813282679047751422 11.794691102080708589 14.313040165936717685 1.186553835779493804 -0.60094091916982206314 1.9594425124391319226 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +630 1 0.7056064719821180109 11.821862897550087013 12.963024052869110747 -0.44402103841428941511 0.52759460050721496138 -0.087413116520911188223 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1628 1 2.7278390444749396337 10.21293827174817892 13.253286480846581341 0.28780965541471581481 -1.791824499097821155 0.17701363774455622369 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1714 1 2.7824734644062996125 11.776558777272333245 12.526645198034444206 -1.3444728153672849125 0.61002871579693895843 -2.315882365989451408 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +553 1 1.8310209468668827704 11.700492923093035458 13.121488165921615376 -1.8310386246086922668 0.64446422728316887785 0.10061723356318105771 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +4 1 0.58603546542606788083 10.391778364936786971 14.198051081801059681 0.26946632324175306961 1.1791123643444445523 0.18258886853488401347 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3159 1 2.3151207009518817159 10.558563165954753416 14.566667283628509821 2.8361950514526195199 -0.34272509179932036938 -1.4807256448619146028 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +428 1 0.95883184624754191905 11.581363323440301727 14.08360810115848949 0.21103067739177683304 0.88511940616504214407 0.91049658812198130953 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2428 1 1.4831162855885693386 10.01657898266510216 13.709976391068495971 1.1227538574383884029 -0.28599084041109090748 -2.451164532992850642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3111 1 0.61888911777144095527 10.277254812485319135 12.695984297259764517 1.3718071712351966873 -0.07021781732572161816 1.5545961199463949054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1330 1 1.4753165043525853228 10.717251348632595764 14.822039954212961277 -0.62611535192351719381 0.17916260532926864268 -1.0862140230936014884 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2342 1 3.3243429561010438 10.296662874424958645 14.302721051025852006 0.15304174974119552632 -1.1624683607204144842 -1.2362653816871544965 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +243 1 4.4644264794524062268 11.941903301721101371 14.801394115536888663 -1.1444972223018419211 2.1092773281638925731 2.670195514445004914 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +167 1 5.434741593200692833 10.690476936212057524 13.892426845788163448 -0.20781567354386770718 -2.3732585306389393232 -1.2556593716528332561 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +709 1 3.4684655636730385986 11.253946070092085918 13.075365526882032796 -1.2193308894829844036 -0.42751514496883280536 -0.027512028748152023844 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +389 1 6.1941907862050928912 11.45658193299367511 13.502125019242402715 1.5417351040272320173 0.23215351029984415687 1.3102848747897870574 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +868 1 3.8161069365796387309 12.354306608538236034 12.854063680606630626 0.88435311257864468448 -0.53133714990521574428 1.0088954570455608284 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3986 1 3.9718617242984111115 12.491192896107381927 13.846480138721586783 2.9481963769630303851 1.3112519450942103916 0.03949222618009376462 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +790 1 5.6095352176437529579 12.334391217347951297 13.696021251926667972 -0.31861827800562092516 -1.4359842405608624905 1.2107295306499634702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3264 1 4.7118878980698797321 10.431616498515893454 14.752001822054451097 -1.767648945637461555 -0.21501609898350640404 0.241968928668766875 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2904 1 5.5766540103599551159 12.322147419698406878 12.700591333792067061 0.29111786039368237056 0.3321324918404766624 0.16973294622753690164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3795 1 5.7901661978153891042 10.983919909152906058 12.564254648018124527 -1.0256590951533359757 1.6702377174860982834 0.98629751872759485742 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3230 1 0.32515390763103169114 13.206998789928144689 13.941280815954275596 -1.5027056250501789059 -0.90252939538577625633 -0.35042014535788207352 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1982 1 2.5853581263608407248 13.821307672297642455 13.249450472769614962 0.15753148857031074037 -1.0255499329553077192 2.079616072233782198 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +755 1 1.5883161671056840181 14.0633492327159626 13.668318033038884707 -0.9469427212168396446 0.50654568331834681771 0.089820791006885364327 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +388 1 2.8446166573459104043 14.279453073217206693 14.10653814117475946 1.9139882781590875638 0.25930660592337806403 2.0492849134793327259 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1755 1 0.7711876106640149775 13.602069699587065799 13.165267301519957499 0.59574240465140249068 -0.46944623021989878575 0.82163822763009897177 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +624 1 1.8384974913331020296 13.140074881424379072 13.95392336395060795 -0.078753830403171395935 0.97350571859511259021 1.4751609184034413236 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +434 1 0.11143240168869106288 14.882533644825231889 14.241468627787275736 -1.1115464289992467162 -0.38292158800442405164 -3.3865194446874213874 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2038 1 0.12761070791427203686 12.698805434899893996 12.870547470747418117 -0.76012167383026041367 -2.0175808543663413808 -2.951000473285709802 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +513 1 3.2351071282740506696 14.752982269608441612 12.953318324616438062 1.2023178300972259258 1.7775709549820388755 -0.69909925038872444691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +935 1 1.0562518436959200674 12.599954656501074268 13.491914628283597111 0.31501794464700810794 -1.7304415969645268181 0.68716438896671916403 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1657 1 2.8945965105231969972 12.567840273070968848 13.41808491952253668 0.41648438367626489098 -0.092852525659090162646 -0.50568953916263437165 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3520 1 1.8881310420670160966 12.680850218719937672 12.896772027451497422 3.014956332195942057 2.4942657290147653981 0.42319097603627076065 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1973 1 1.7850164883810448746 13.658897155420653746 12.689802148738262844 -1.256620032054099223 2.5320508302811388646 1.7468403372402996343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +53 1 1.1877981839271269937 14.866401799234166603 13.450969544330597216 0.59532030935621127465 -1.7230280227599723553 1.6089400485932756624 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3800 1 2.8757181970834322371 13.04223012496474432 12.58193271666204005 -1.6994623945259403897 0.48142920437118341681 1.3642712723241503525 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2799 1 1.5347246215678775894 12.646226498248742232 14.966697713922380686 2.3120973462359200035 0.52658220968981606092 -1.461107328417517337 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3764 1 5.0691405630172772234 14.287812202799383243 14.205775238155519347 1.349970023005944153 -1.0014835087328075591 0.37672916579897380851 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2590 1 3.7293113001152566888 13.70056816484125406 12.815549577265553438 1.7895467257106481007 0.66658392868873073134 0.36849895170547158907 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +134 1 5.1744862048608135652 13.874368735130724772 12.996752821035750358 -1.1913390389134606018 1.1042122026029783655 1.4724193973659558399 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +738 1 5.7060486294482100078 13.441729349952295181 13.895444811346537861 1.4131256636261086967 0.19811562138236127328 0.17376499119907062862 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +292 1 6.0005873369811570939 14.557951927037821704 13.576108344205440659 -2.6604186116420058816 -1.7560591497732820354 -0.54200103532695997899 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1809 1 4.9548921958496459084 12.838880109646138905 14.288552424795023299 -0.87150655174673552494 1.1264067912528916704 -2.2659660827312420039 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1976 1 4.0869531552480955483 14.557117346651141432 14.739389497057455714 0.001771058801750163272 0.61646206155255978132 3.1648567981276878314 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +274 1 4.3686965400813866367 14.806378182197192928 12.757504417333525026 0.39812610055512392959 -0.64066782039053382647 0.094577682265816059859 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3381 1 4.3437366834622288536 13.578235913729038487 14.64317904875732701 0.19200703484567166468 -1.8719416305650820043 1.6579764014125408789 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +203 1 4.0808405029989263113 14.73722882785409638 13.70840018273045402 0.78816457692632857501 -0.91053774834844436459 0.92067169098678602879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2581 1 3.2211802348714941857 15.801566818689895655 13.366045547256211634 -1.157909085678507255 0.2214278343181051989 -0.85224428103784977129 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1107 1 0.99094855519437008429 15.597319911172624174 14.344988495973568732 -1.0722534238499137338 0.46382544752338983329 0.62043795330298567858 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2053 1 2.8365120306536026895 15.778962609281695251 14.476685773891810882 0.45456331013412115682 0.90117460683039718461 0.46134595730806549074 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1328 1 1.9225581352329050855 15.759044344470808596 14.934025588210738889 0.45551468192286492798 -0.3697615414620158969 0.48031392911195791573 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +247 1 2.0311766734961045344 15.330316043454544683 13.664279996811307782 -0.60372254351912124637 -1.2407590835142612296 0.89419152536357748851 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3560 1 2.1383345014850339005 16.549758005732147836 13.390972248747051054 -3.2936930970311406597 -1.2549372442157218366 0.77987347116178173945 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3239 1 0.70731036817527959126 16.684183721417383595 14.581326870688767983 1.5918942762916485911 0.68165219016352907033 2.1087360150936209635 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1959 1 1.4625251430590833213 17.459483460223594875 13.000329205764399987 2.5539378680996751569 -0.9493957064271473234 0.38655914967656795911 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2565 1 0.036758174129948126274 16.078296488954194388 13.870898969560775171 1.6475978963887534245 0.38304451145306961379 -1.3257388333951254378 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3820 1 3.8337552033758948156 16.823242938928146373 13.499167499289459471 -1.1897960957878050969 2.5364655076538684675 -0.37959457997104312232 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3037 1 5.4985449655025702143 15.831953090884168134 13.026418976241645353 -0.024771315716523918671 -0.21590070801533978173 -2.4460078674644516461 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2084 1 3.9813783596824521283 16.79537006746056349 14.688207456855135291 -1.7353664733744991189 -1.0325755471837383404 -0.58304703493084442112 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3113 1 4.0813009884048039311 15.928966091078960332 14.2573342975095958 0.1206990244227781478 -1.6962201876153959468 -0.61250055529721003644 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2229 1 5.1374628879946602211 15.38544713214104398 14.162856782099662922 1.1196380479353476023 -1.6663755086590672505 3.1998769170903718084 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2524 1 5.9932741059544643036 17.03998555721876329 13.359508394271266241 0.45916935023856453313 0.41174626553578974608 1.9658653387216131758 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +371 1 5.6727142692111529598 16.266848887727725526 14.081250334681422842 1.3287574703432321055 -0.12887508435514710703 -0.7256703177164456342 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2608 1 4.3300522637843519291 15.836636180066390622 12.702458443055510529 3.2464638889749140027 3.3636242311286235207 -0.11518970863236084601 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2164 1 4.1187998656816642296 17.203774570671559019 12.502889275870401775 1.1529531474893708332 0.11673850529801965692 -1.6293881308656323892 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +207 1 1.7287611917191321176 19.612427576684066111 12.928576341877114686 -1.1328390192838848627 3.0834265313380022633 -2.8837861121061552083 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1408 1 2.330898475108509782 18.372365872707483447 14.558238114263444274 -0.42881286164780879622 0.27919636739421749283 -1.0568154738454391683 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3248 1 1.2184695665288018951 18.844217891171233248 13.426786294973167557 0.63643946986442201386 0.88914628485481894682 0.19845172530407814704 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3094 1 0.32490057485188073017 18.804794225214127579 14.455729486174304199 -1.6379210239401005289 0.045770904298692675904 -1.5754923182260840431 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2793 1 0.2982242036364124993 19.657577812004561224 13.44535448892754026 -0.22547330535527690398 1.9640269857304797352 -0.11184492569954390673 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3962 1 2.4616280827321759261 18.533485793110124007 13.425149517946682209 -0.080559807749680301114 -1.2884326319263559313 -0.62513212548336094532 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +780 1 1.9786258460251060498 19.23634225206362558 14.339208401158812123 -2.8287289310613479287 0.13638586221478002369 0.94064435860726880456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3543 1 0.5036378982470144372 19.935637039161775874 14.870389652239872191 -1.9624028027332736102 -0.6394475576220203239 -0.56694025368592837477 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +90 1 1.3328858243660148819 17.820807305440357737 14.34789009632402923 -2.0988255770504435915 0.61446077135453769369 0.38315073480055089616 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2060 1 3.2502243071311567313 17.78408106241738551 13.400412692990581576 -1.7848811856195607728 0.94294024742025928099 0.21795581814994857695 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2717 1 0.53777101212474898162 17.610250834944270792 13.515835177778654952 1.6908425983789141522 -0.46756371761369558415 1.0971441948187379278 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2727 1 3.2408024315470078669 19.23683189228237822 14.476712633396601859 -1.6708363597135211798 -3.1075646685263418334 1.5860093863560353888 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +512 1 2.6130993871688108499 19.830010148323449215 13.842372900778032729 -1.5709420855794089533 -0.78707445144682730565 -1.1612702037134203792 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +446 1 3.3034635693702094628 18.096021429955381876 14.976857013459675017 -1.68813380988672046 -2.2749711215236643191 0.73819671277104981222 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +152 1 4.136616769154611184 18.196825348871140449 12.89797700654153978 -1.8555587495771510564 -3.2592312575572064404 0.12714458165889636065 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1648 1 3.6270260412296488894 19.582391751726387241 12.853966103164790269 -0.2835906223306978724 0.2192736514901959255 0.060536390423835968744 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3395 1 4.6591717747530099203 19.64711979624033944 12.692678536049037064 -0.82617297060353311888 0.024703425356338810231 0.99091082002003483264 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3738 1 3.7414307587605919458 18.53718280158222953 13.704605679775536231 -0.11657512020231773631 0.37129092102429045452 -0.28853990051327005339 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2165 1 4.9998012584435436167 19.709536204069632248 14.117544186871377576 -0.065771284561851620087 0.1446032316393748296 0.26457368721957652546 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1911 1 4.9330334596726448382 18.604720610778887391 13.397161342312589483 -0.73022102126960419799 1.2096649670073662541 1.9875539764975032053 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3096 1 5.5890634490705304316 19.713461537354966424 13.043715994214696963 -1.5750909830282109336 0.020420956508116153844 -0.075486450008301855807 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1881 1 4.3496475405921062318 19.053780092240973687 14.876307483645588192 0.85092781408988493741 1.3247860913180491416 -0.049544679116651529904 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3796 1 5.9971022502607267413 18.387543634457962582 13.932448458923968104 -0.59542242261285416305 1.2277367721776333287 -1.8207371095930144911 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +345 1 5.4707594774796248771 17.654948142130432842 12.832634280930856008 1.8103377977575498825 -0.58488312415921228649 -0.53687192792336302372 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2876 1 0.58364391464125420228 11.853611474688015903 16.412633365198587398 -1.4898417843915243708 -1.3187303874079621124 0.60402062877504025806 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3043 1 0.53753739802947464455 11.157752895925630909 15.398881814662241041 -0.24116849338127735458 0.14654770656509466531 -2.3553647861233000249 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3034 1 2.273486386225976208 11.653535753842241718 17.024728410652997468 -0.41034055230411875526 0.84813066597055408735 0.44449962130284254025 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3994 1 2.2693464211445908418 11.193660613518602531 15.697253520104620605 0.36295003462448283127 -0.37388188236602448722 -0.14575056729546581602 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +882 1 1.2367915554889850061 10.145927516834060356 17.245124064590271473 1.4956644756168815391 -1.3665716702949897154 0.88587560542308330103 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3457 1 2.1113475399206267369 12.41007142326538748 16.084332582507681053 0.118674456023206365 -1.1072100755970915031 -3.0805062993635332624 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2156 1 0.52411861861071429303 10.214405366028513455 16.28770505387639389 1.445044873150939102 -0.6414263009963102613 1.8989978507417197839 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1613 1 1.1068118316277559821 11.158373087971064308 17.342917792861911153 -2.5871539996945398521 1.0741133806849574306 1.2325211482100613125 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3120 1 1.9347059215878743554 10.658317620430540984 16.447167141321131112 -0.82315385211505598395 -0.097041640096459963472 -0.13161315080131130717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1264 1 0.057375308563299698417 10.014562474977040551 15.107898909503644447 1.6102723462048680325 1.3307877211356353708 2.5445067357039374834 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2357 1 4.2377505257328635935 10.343144160145826049 16.891766399724410519 0.5637098047601977191 0.25381059683279783012 0.42225976576416873742 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +496 1 3.6191344319286349318 10.626539497108716148 16.207525132566107828 1.3726368875020644733 -0.3597086517671970185 1.3460359201674063634 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +474 1 3.5081864745073647605 11.483622379415072245 15.494068139729684219 0.88425313563768070946 -2.1336346823730165667 2.4101200342448843017 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3497 1 5.306952083493817085 11.430662143631417749 15.100498770329075171 -3.409169245708287832 -1.1704093026724078364 -0.27447346884146112123 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3491 1 4.9573740794996856707 11.107374456899814064 16.674229842190552375 -2.6721562835017880211 0.86841729026319725016 0.16413809236357951304 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3461 1 4.5938193411258287924 10.797873502238820365 15.795547316947718741 0.7329209757421839555 -2.3853099386716900554 -0.53057230289262269363 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +814 1 3.8308187667853452751 11.996155440032438833 17.074205672771917364 0.22287520565963733765 0.70011867460374821448 0.52100428065039328107 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2984 1 4.7294037869383434014 12.404651975165089439 17.478439603034892968 -0.15351182147379657805 -0.8527926235069540617 -0.71499730584425214008 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +703 1 1.7251090773655783916 14.073455751663843216 15.473884674803263906 -0.067331716401993021992 1.3602073222357862203 -1.5090994807752893259 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2300 1 3.0097561638535621498 14.732524283044755364 15.634938609855064229 0.024091677314177935981 2.4469607045202521611 -0.70922824649348570336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1726 1 0.19666649019868559511 13.682231675706789886 16.430025682918010688 -1.5027062504659913778 0.1629424039916033129 -0.66672735904171664956 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3323 1 0.7232143745188097661 14.354928247670761365 15.667839946955705699 0.52535882793018817694 0.045880296234040621184 -0.010641299486205461206 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2721 1 2.3116079989356013158 13.169638604216055811 15.323611088896448962 -0.29475278462204423935 -0.50960543102984345865 1.8537151190917466881 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2171 1 1.0666822954837504867 12.816701762550765764 16.203583079722811533 -1.8999403582843048532 -0.18728219798486514525 1.6056330436212631341 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +975 1 2.9677103470738721569 13.624195927398234929 17.090640725801680588 -1.003547196818553644 1.2117586688628441127 1.3860587249432489987 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3991 1 0.3204955030818149031 14.512449477349939286 17.229642753593086724 0.71310446233267932303 -0.13282910186716662126 -0.23276963889655269413 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3342 1 2.2671550448891375495 14.393009861759361812 16.36294632512123215 1.5851671341252608904 -2.5126556908349764186 -0.39891904874687694749 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3163 1 1.9350339077467946236 12.860140824889592537 17.365350170430033927 -0.42129382443075175102 -0.15585758162120183501 0.31983348117221549467 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +871 1 0.13926500064941732537 12.824856210950331459 15.748032031774041428 0.10935450881013392133 1.0781291151278653562 -2.2595198418830637621 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1545 1 3.3265160429611229098 12.753489910577862076 15.033760122817156457 -1.9906344551769135087 -0.6619619477665681373 -0.55992039636375878775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3294 1 5.2997109902547556715 12.577608382254311437 15.398353912536226318 -0.36964839576987063019 -0.50394803232709384222 1.7249255949726702841 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +642 1 5.6879216680611826007 14.335205482449982384 15.212787842838057628 -2.6429698797927807519 0.81674105557341070138 -1.8519025796443606691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2856 1 4.7254845612275113709 14.721312699562062676 16.646889067939124374 -0.44357984302617614603 -1.2953393693359489536 -1.0351677338175155896 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1089 1 4.0352988415411132905 13.053732610840816264 16.727515727094701248 -1.1415613561083914895 1.0743046774104181296 0.73105976048581833293 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2355 1 3.8305928643493851737 14.039079463320286223 15.843513322867870841 -1.8353651915780171411 3.0559849775917258263 0.27577498083980472865 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2285 1 4.8308030525743106409 13.534032824508640758 16.190733326628951261 -1.0507930220475256711 1.3038530899051690159 2.3778464158121233041 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3216 1 6.4640325690435789241 14.480847857961117953 16.337574234678626794 2.0030977534639475834 -0.503281895533220891 -1.6976588636255380838 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3832 1 6.4633082290811891824 13.151579410130846526 15.644789704953819154 0.95844067538069688261 1.2344252215409381446 1.3446712477668296692 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +193 1 4.1773234841369797365 12.922696723031922517 15.57790021187919649 0.79862832830023700037 -0.65825591723365839414 -0.072380024601999895517 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2921 1 3.3650408238277673689 14.958622120592515614 16.619255785141049842 -0.04790237403188412485 -2.3006783572583788811 -0.81158735594006425895 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3208 1 5.3652417112833115098 13.291910357609230786 17.403769529563998475 1.1594533449454791363 -0.38115696999340448192 -1.1490186794955925542 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +323 1 5.5466572729325980262 14.754804268050822458 17.420259283641410519 -1.0491234018927217964 1.0949727714635479892 -1.4591263711922739521 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3734 1 6.6629767750147221861 12.513701388356949451 16.43294261497441866 1.2295030782837301775 0.23113068846357723296 -0.29696545444186167595 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2824 1 6.4721974924968179721 14.95536826977428646 15.491362294240799358 0.3990654544519645075 -0.66836302533936486903 -0.28039241673821052592 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +7 1 1.7184725429017677634 15.420645752018097951 16.017629913569471967 0.1408335711054317374 -1.207012706494433818 1.7998096919641652924 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2976 1 3.0240854913152350747 15.85421595137952977 15.765467817948222162 -0.87473517153814717151 1.6635770321712075592 -1.9486810566992054383 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1992 1 2.7448222494675333927 15.63250835853598808 17.133102347715670533 -1.0998486040148225396 0.20924392186039655894 -0.74039313619746605077 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3905 1 2.6653000917112819046 16.606466587038671179 17.030695971501074837 -2.0962715726839729058 -2.265784787700708236 1.8401436877460841668 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3362 1 0.16778103991129472705 16.737083800817046608 17.44179693046892865 0.21610395453567979307 -0.63221921891418841888 1.1183346440499870589 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1384 1 1.1268841748762448152 16.622109733717650215 17.02687390708444326 1.4600127744021413889 -1.1589874246578493189 -0.37592277591349115839 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2167 1 0.69517641990395095952 16.342439430033870451 15.854077130403512186 1.7082894932897259022 -0.10610411402093607169 1.6058062257922560701 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1285 1 1.2386477367909070058 15.025494962808048527 16.921665426418559974 2.6363818401266962965 1.1713704039131807022 -0.70298441392987598419 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1277 1 3.4626106822864124446 17.269196784977868475 15.907472789217912634 -0.53747038658397316979 -0.41451036056854478895 0.97884226025678744421 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1206 1 5.9474329101080032345 15.846165594854788594 16.964290318583188366 1.3324626414539451069 -2.1354618613531552995 0.56798561664291447038 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +676 1 4.2837473656238111985 16.265100720711348714 16.310077542654241256 -0.44876615679710651907 -0.6624369861139275395 -1.3471600173356985675 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2020 1 6.0826232495418350865 16.172053120194586739 15.206819919260235352 0.86870560008828079379 -1.2393488146544711093 -0.40439059947921435212 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3926 1 4.9613577951589240556 15.966830772776930303 15.159858138943373973 -1.2501781747599989281 -2.0989808498221607103 -1.3794698849358375536 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2091 1 6.5312804927472916106 16.772059556590313889 16.101900669880052419 1.7510507657683977989 -0.16016002186170069654 -0.16864431286866463089 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +762 1 4.0130937310897296655 15.155865683847171255 15.573160278004419155 -1.5452076622015928908 1.8137948659409031116 0.51237941218002203136 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +551 1 5.5280422796705623867 15.425146972338689366 16.179380318694104091 -0.46234976837236302361 1.3396022145521653268 -0.5969402409831530143 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3675 1 6.4324412652736029372 17.378493718836232063 15.137312628928075497 -1.2826750613593489447 2.3001265966453678935 2.0178715861885128113 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +409 1 3.3364226189336640971 17.373076658617737422 16.821685553646972267 0.8562885171521784633 1.8684227464584024503 -0.80053013654258331488 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +103 1 1.9700492142945513763 18.237206584816853194 15.985974739125611066 0.77140677379819444504 0.73829032939271688196 1.0474274658890394551 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3518 1 1.1864876256860894532 17.756272152588120861 15.451408815303908639 1.1552776718389201616 -1.0823200434749875587 -1.2783424791032602652 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3000 1 0.95395768875609820991 18.203227382679624924 17.106524641545451715 -0.78461811905007450285 0.86781692177098845864 -1.1190406756193496118 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1845 1 2.3753899570797085694 19.464633353482323486 15.426768030837136436 1.4894811020726292927 -1.4350252456987269145 1.5968801642858714285 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1898 1 0.29893586347637229883 18.323676972233844396 15.627185224451524803 -0.16340196227417483343 1.9500327405962063487 -0.56327330435524236574 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2202 1 3.034763031983779058 19.215241398147007601 16.587774259763332196 -0.74279291337408170914 -1.3815741364700828697 0.20411905885866526988 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3824 1 1.6460125845603246209 19.596156627065074218 16.010180158602395295 2.0514534345589519049 1.3483204654960969648 -1.0980517254318187259 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2191 1 0.38815926234451386678 19.204629522468437131 16.59214823909963954 -2.4195824571753470345 0.069173936702237148744 -0.57314496853205876281 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3717 1 1.3042582821824013628 18.950683902894848387 15.191876503818610544 1.0036082974592483996 1.055948616446735322 3.1978182381879607377 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3490 1 5.1415614437499241873 18.861068902962905725 15.502230489813555891 -2.4597987407123595993 1.5277555440000123443 -0.89136096915491758175 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3223 1 4.7075994491654888918 17.989411311588462183 16.789861902866043408 1.514233171362594943 0.50756858500138435364 0.22744926753939295749 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2945 1 6.0730723662504226823 17.656640471954823113 16.382839607264624959 3.0179231851037395806 2.3480571835079477871 0.12672470479015057743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1536 1 4.2554017436436772925 19.34989193141245778 17.488498270517883526 2.8374081398281716382 0.49251342130843256406 1.6469359553931284257 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1921 1 4.5569681051449464348 19.521072621011505532 16.457038107434563301 1.561615911496978315 1.2741179818529717593 -1.1216846288932305065 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1174 1 3.786331607271150812 18.508035402364768629 16.165024355794631816 0.67901878634538459512 -0.74678541971319634118 1.8606597701742786377 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +622 1 6.2364204700019767458 19.275659225150214127 16.902674710861923302 -0.35452264989247206373 -0.46587405963572042777 -0.90199278823498407753 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3063 1 2.9066053142816588029 11.096692308095123636 17.979850470657439132 0.086074057820628060989 0.31492939660541063862 -1.7584358256432293111 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1607 1 0.94496607113883479556 11.974862072860346984 19.358450943716547954 -0.2551695459541636346 -1.0396684343533200146 -1.2496971143372772595 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +948 1 2.4047491162458074498 11.002425309767426498 19.029373525189562599 0.24631736681260579802 -1.608843660933496178 -0.56261568098869429999 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3095 1 1.889782627847540919 12.188910333433382149 18.081900403725164495 1.4085571915762549189 0.65722195675013905802 -1.6739563374249781802 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3992 1 1.1882029050155409333 10.984253233650777659 18.390095084572692485 3.3170537823493044804 -1.1823726941611085728 0.71449862556668608526 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3806 1 2.2342086545279857823 12.10314691644257401 19.715526311619491651 -0.4379014270255923158 -2.0780660931313392759 -3.233488362930638349 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2125 1 3.5015955145151118622 11.955038246338173025 18.442614683110420515 -2.5669373492831502048 -0.090505016480585107064 1.5838318938365183453 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3284 1 6.3313726902729401402 12.054206188237149178 19.181901684038468403 -0.26787859011108211549 0.25164415158786168636 2.1725802420392201775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1697 1 6.4718202644659887923 10.163271773282357202 19.996861453932968544 0.47900220685980970936 0.32362958403176567135 2.7454405917803583748 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1772 1 5.7938096069965654422 11.095509620343275259 18.143692190555089638 -0.18911919661999748721 0.89352178652056046815 -2.203678290544912155 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2981 1 4.7935526454776047345 11.364695468168140025 17.761349590621410499 0.52269042575273783058 2.2700187469653707595 -0.34386609249337818373 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +806 1 5.2382919984475195818 11.999015104676475474 18.696703457338006871 -0.059055996106324289141 -0.76971253054534738425 -1.4879120940848351573 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1681 1 5.1177003095003374966 10.389502358983955688 17.526563176870176619 -1.2801859526865184691 -1.615679539480328053 -0.1844435225601500361 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1618 1 4.3416775733098198486 11.76304871904304683 19.747593205879510947 1.0946935432876736538 1.0344419414202539187 -2.2026085067244491889 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1808 1 4.0074785045615115564 10.73936690459632004 19.880611569978729136 -1.0157564258876325969 -0.46399706641241689198 0.7494342620185875381 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3579 1 3.4531212344973707395 10.279549586362213276 18.19731165520051519 -1.5573598274383488871 2.1367189099303525168 0.78952282461317180307 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1873 1 1.7966945508798777276 13.462107989668426811 19.784456049801899979 -0.66035598554322094689 -0.6087591666762118825 0.50940385679515132189 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2443 1 0.97012808950465123647 14.640412643805719384 18.046435048784328359 -0.33199543234945311232 1.5241747787945469916 -0.40244562197482069976 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1034 1 2.8295025297704219369 13.03827873299423068 18.993209714815275646 -1.499023201388610671 0.76890743891918833519 -2.5680383390048513448 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2615 1 0.77773443750721316103 13.302650248199158867 19.618475433374733541 0.51141099205417162032 0.15692479874880868596 0.1972113356374900206 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2109 1 1.0118004064398049557 14.495246648280152968 19.075007124012184789 -0.98950422824331751848 -2.3112236419471936522 0.95960559805270739808 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +578 1 3.3223502628785062107 12.723731647060425587 17.533342979339899159 1.5971323161090471565 -0.30674312529958996931 -2.282064327113981772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3335 1 2.3567186275804252737 14.836192548804371327 17.558463449502387022 0.85825181708383690982 1.1322453030452197531 -0.71836850636530280578 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3904 1 2.6197973129654199553 14.708350167774774775 19.440153583965145145 -2.3904856491165893395 -0.60275239343593800534 -2.12300192511527408 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3443 1 3.2628267402159374377 13.577459536956633102 18.112673808886253113 -1.0209736976262224761 -0.79568815268241843697 -2.4025335808898931056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +921 1 0.8357133156480177627 12.752969698371360963 18.148318609092662257 0.56310948962711271371 -1.1342270659549955614 -0.11711257550613500544 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2638 1 3.57236698648414297 14.71656171692592352 19.865376621828467307 1.5105261124506583759 1.6154779845474274147 -0.90708409005112822232 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2033 1 6.5059237344087286203 14.674104806275746427 17.537146184438157093 1.0190100988309975794 3.3512047048750153166 -0.6153889369791240016 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3313 1 3.6093558913066381422 12.746536110977197964 19.750534047452550368 -2.4693479167575156374 0.008607238550034259153 -1.7391326860241564933 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3612 1 4.3754765456540702928 14.846054616438834728 17.951707538081766558 -0.380510391267875836 0.25094442430997182525 0.033065740886789672659 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1659 1 5.0979173958514554243 13.851066554944964082 18.443219774255894094 -0.58333027194998965381 -1.0888205700912416685 1.3546904848679033329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3334 1 3.9952705458039816655 13.620898899513179003 18.901289605512438641 -0.42902106671117951064 0.58922487719584648591 0.73851228757567288774 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3777 1 6.0714776554918978846 13.554599636931643047 18.199847342591347399 0.41829471164483061907 -1.7382252473853176955 -1.7033131985973246625 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3218 1 5.7163780053296688877 12.887819127690569587 18.960431427081704925 0.91197249549738557128 -0.26628813977775661614 2.0705070661691089562 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2079 1 5.5599270810007945798 14.940336163771403832 18.547522276786231998 0.25893855857134101539 -2.5902889033091951454 1.3638381410569024865 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +361 1 4.0199460151876671432 13.733580466581411628 17.50045077405092897 1.8834016520018650453 -0.25284696460097400017 -1.2780441563258924109 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2324 1 4.9085224208420612513 14.526412442574249795 19.260503847554200973 -1.752750680366580438 -0.84039824209103186625 0.78639879161154635501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2866 1 1.7072413897869540556 15.341098471935037395 18.804525334186191543 0.010747822792890947968 1.6992811525224877922 0.44942158317486813335 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3027 1 2.4716308216839228962 16.2879209722158933 18.152344787215920263 -2.4003223077983606437 -1.9442872448380337236 1.5220357685809895454 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3619 1 3.0151416357248117528 15.391952708695825436 18.828020126019691105 -0.72454592193254097054 0.28175745437908494839 -0.12490215138801853689 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +348 1 0.88486059147017492865 16.020788713422618343 19.124663452068240588 -1.0596499597558270978 0.17637399098441050582 0.82508394060306999851 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1942 1 3.0448022425483531883 16.358274831179940634 19.392265359824786941 -0.71717323542508804035 0.74888627388526940454 -1.5437794995716589419 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3466 1 1.6381555148004343092 15.538216605953483196 17.788014932870428453 1.1391437578547929377 0.59859764299124507136 -0.52640674297584300056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3611 1 2.2229367252334437666 16.985249150958253495 18.876555870468251896 0.58208899107344702628 -0.25885696636544258675 1.296183785149713108 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +335 1 0.60422019658273473652 15.690678985266199419 17.531129431180001887 -1.8847869229564411242 0.22541244953550998442 0.40556787863659060633 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +22 1 0.52348050762159770155 15.219709727315338554 19.573588669079327929 1.4826296096271138758 1.2337628696403508677 0.89995978159183120937 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3546 1 1.2612282651395283484 17.371543829388429003 18.278869247718439794 -1.0494216302448553524 -1.5963404081217646979 -0.19406139309298103823 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3901 1 4.9052995105055066105 15.777118752095708132 17.58450352846660536 -0.66022691692348911552 -1.2070725989624873087 -1.0572302697357656154 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1390 1 4.6083906582596121382 16.657365037742234648 17.656389036178364194 0.55177083726170861322 1.4024638033111260782 -1.879798376697590756 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +803 1 6.3459048762794569853 17.485943632501367517 18.010497844813386337 -1.1433242692920431161 1.0477920442076880114 0.10333669303698166109 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +912 1 5.2178137450095940508 15.758787317869755285 19.870312366865704234 -0.23605986377001098031 -1.4394218829758205214 1.7658500672865113934 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2244 1 3.9221999848011912526 17.328920433137540158 18.485341635093373469 0.27752358098245555329 -0.91433848775198389713 -3.5570890636513037286 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1598 1 4.19342188904692037 16.383548046191016567 19.50072856141965616 -0.45855454601582246177 1.1405012635595423998 0.46323584120768257488 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +316 1 3.7933202757597346277 16.288948270170898525 18.645692226380848666 -1.4602454138811278295 0.31342776276369105348 4.2922122908597124535 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1841 1 4.9127231555880923608 16.048284188352280211 18.775698661377973053 -0.19249314215750149004 1.1331112918472523443 -0.90274594043520273168 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1806 1 6.0781235704022158473 15.747940526873513534 18.224041096429807851 0.85335599672874229427 -3.0567922482973144405 -0.63900497225781038857 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1134 1 3.5297701276382413837 16.780402790638678567 17.579436883870496189 -0.79096831160965297425 -0.057284104485321916955 3.3322452567424645231 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +310 1 3.4724403878067344742 15.258097989990909937 17.757602881604356071 1.2330386393927168509 0.52615153677063253301 0.81284974888305128182 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2110 1 6.1672932102145496813 15.018544988995087053 19.407762688737232537 0.20382435623538713854 2.0003773387391072802 -0.58773233330553831255 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3953 1 3.184784727875573207 19.441177144889415729 18.419815561325375342 -0.346678770419411586 -0.26595781384910560652 -1.5436628227731057361 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +261 1 0.49553044987268490829 19.826720250819111158 19.198512806583561741 -0.5996895976366313219 0.046221337455085935442 0.44172674718733162536 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2309 1 1.6952974301209156049 19.495990075412798603 19.590539276358789778 -1.7753397087472710947 -0.89360756417161368859 -2.9225720249530642292 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2573 1 1.0930322509792989027 18.649421099527256018 18.445898819887684539 0.03094480333504758332 0.36769867436627140522 -1.3954096129781377034 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2988 1 1.8390152960269894322 18.112634244664405969 18.988415542829955029 1.2362995811346997321 0.76939392044771792722 -0.0011688970771995352976 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3448 1 0.27742134255213624083 18.430855370069725296 18.956886515758785805 -1.4361841671316151192 0.45391771505320183122 0.58899337208222080076 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2596 1 2.2329168791139846206 18.586163704683887232 17.779044763072828772 -1.2330221735421775797 -0.98979381958312973033 -1.9788547577028368085 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3079 1 2.7086122946447979132 17.62646292066309428 17.817558132854323105 0.20701066114412547403 1.1457447656881796227 1.627795140156736764 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3066 1 0.71581192291091588764 18.262095162937750814 19.922304059277127664 -2.0005236423474115348 0.64305269050138536002 0.18823128761100396678 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3138 1 2.0852653782576360264 18.615850008605239196 19.937416323815590147 -0.17231289972416227729 -1.2134268207920428928 -1.4927793428860867131 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2048 1 4.3798118874540765688 18.990171812111114491 19.459954830487124156 0.44659505751568290277 0.47871810771699274678 0.83414817552896924902 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1164 1 4.7847699283000455495 18.151159228200338447 18.438731606527056783 -1.0098989569567746738 -2.5521632872320036967 -0.91076817163894718821 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1126 1 5.3536486807973675539 17.898866479070960622 17.689478360838762683 -0.23293441181020677067 0.91835294255050692325 -1.5122684333567080195 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2526 1 5.9070718229155980694 19.200697421669755016 18.179098262174054668 0.84917567009803796019 1.6596847799260421308 1.6549826125119266873 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +462 1 5.4927841643965429341 19.841688624523026618 19.576048295003673161 0.24125193455822596666 1.3137787811191146137 0.76607295735982339213 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2390 1 5.4958379873710319075 17.575373278281936962 19.055289363140925474 0.85249725994875225066 0.5464794974783923065 1.9918312437566680906 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3478 1 5.0479519758144215658 19.623687841601860526 18.820368683860760228 0.44492651143886335907 0.20099627015650092798 0.59231761179972508558 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2424 1 5.7163311349106846748 18.578911377520363146 19.38916298495669821 -0.020905096336692879921 1.0242136321467880666 -0.58463406337547629832 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +283 1 4.7884847701731647618 17.783664226724635427 19.865814105635113407 1.4805650247831612099 0.39016617735100533881 -2.274660901468410934 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2440 1 7.6915824384321318519 1.0785573598041326981 2.3184278925794608028 -1.1170430920038159073 1.2809432002528047256 0.1452596497382484253 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1017 1 8.9046091476593840497 1.380719549116256939 0.11749724297853898769 2.2904293119051115646 1.1311310555143467838 -2.0219302188278227561 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +5 1 9.0518101531718020425 0.80507257243159691118 1.8731534481782112778 -3.281822738393841643 -1.400275185298809566 -0.17559163189820323203 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1546 1 7.3187380472638174922 2.0692524666571050496 2.0739715773827973599 -2.4034985714695835668 -1.8915476637502981472 0.054287782372678547449 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +309 1 9.155840101135712672 2.4589517895690335969 0.62132382778877526253 -0.33957505373128443749 -2.6952686480544505443 2.5549596911103211738 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +855 1 9.6130522824685282757 0.28687656297416469497 0.28015846222519985576 -0.40097487472689818944 1.0399678609738822743 -1.1207685114568590734 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1202 1 8.9750353083140623767 2.4418884873472430641 1.6550282337139137212 -0.1493136748035532313 -0.84650716767429301512 1.0622846193019890304 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +692 1 11.688427366869820645 1.9956466405386961149 0.70699818987038087759 0.68331067239402831781 1.4909917306156412753 0.00018511416829296835026 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +515 1 10.559781105294300474 0.42189318107573464678 2.2993188310118428674 -0.90056823406152852751 -2.8806726858479811959 -0.28097824921871322745 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2963 1 10.395196679458182487 0.85485548339362704695 0.90645824219663651 0.50240737562030113317 2.3181095861128833135 2.4332442935396287886 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3772 1 11.7215194224210979 1.2900031033357952648 2.308080868644691197 -0.16095546684218112188 0.27477155905219141641 -0.76061620282866937437 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +431 1 11.679790824588383913 0.46347132937831125865 1.7989240670205610684 -0.39019139260581731099 1.486618467322576409 -3.165104268179993241 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2023 1 10.825497649220135798 2.1493801940356109803 2.2456816063245939041 -1.6199928839909016887 -0.061928035051257455945 -0.3043482502233559317 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1156 1 13.153172590760593863 0.86506713385678357664 2.1273445166859428213 1.7481819819720412212 -1.8574147090401631477 -1.3956191423117230155 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1208 1 12.233979196583163684 0.6438828094677784275 1.0136688133492968156 0.48571104839918449736 0.29553747233270111217 0.83770052578493026108 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2830 1 12.531745471893929178 2.0306384504345151853 1.5647008696840714048 1.7593354586669911477 -2.534461386945799255 -0.44955345793046025404 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +289 1 13.326754488111392405 2.4012021055153396354 2.2071079869792331607 -3.7504214384515925929 0.030822135731581302986 -0.12047218883210020213 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3354 1 8.0148038904565996887 2.8451850064890402692 1.3722190925276929185 1.1555548908529968966 0.58996760918871526957 1.1508705163683168315 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3682 1 8.551628789635897121 3.9327642837970233636 1.9645973882756229134 0.40174304240965724722 1.0459447105595849337 -1.2200890388861342917 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2780 1 7.949598208346531969 4.7293980454641042499 1.1968150442474150275 0.20909621180542181662 -3.6589649835616224749 0.18163040973610811157 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3534 1 9.9143566809555618846 4.8200656452647372419 2.1622305492855997677 0.40141735850058613 -0.53166258854231795983 -1.8189195966165270235 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +33 1 7.3205934909406140676 3.5970352119377051459 1.3402306421410146164 -1.1344675448439303089 1.5179076607019814649 0.4681600186955695575 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1143 1 9.7451065875153570772 3.7456085622296559912 2.2266487833458179502 -0.18476656885991749046 -2.2715811256463265266 2.1398208780610339375 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +547 1 9.5309135417786556843 4.388978972318178684 1.2872407025675116632 0.90713292494657249421 -1.8356213386867845649 -0.35088810147517557336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2542 1 10.18255758414891865 2.6661474036191297188 1.4562469587776891711 -1.1988818096324072027 0.12926733371717002985 1.6786975166382951397 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3160 1 10.811840271679246328 4.4488329022047681249 0.99285336382726308013 -1.1157235803305898258 1.099966742699416189 -0.86730897750509761135 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3127 1 11.982517869013380007 2.8120335266168869914 1.6487315435565665922 -1.0245778391074240599 -0.10510404638564466162 -0.9425357359689681136 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3332 1 11.653941693867571061 4.4185292547575709676 1.8689543785772009254 1.4601437202215938882 -1.2267007871287840537 1.0135055418918166303 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1213 1 13.078563278258265257 4.852216275836465087 1.9744771608284312769 -2.1154271457871987039 1.1368265083309581076 0.65252202575589635103 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1671 1 11.009473501995307387 3.3235559581083871095 2.3102837206456605657 0.38267495072153573377 1.1664467615719498195 -1.4618086770528819773 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2382 1 11.631978039404206271 4.6429431800579639145 0.36514474851764905372 -1.392388602736719605 0.052291051204692913512 -1.5277381074320783849 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1200 1 11.374447633364948018 3.4750882043884896433 1.1375425032839487915 -5.7896604617906506363 -2.0912093639944875356 -0.27243075890766244029 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2444 1 12.772112434512349566 3.5326726484514079374 2.4426446519701978666 0.75108652603341152787 0.6542461602219243888 -0.90613032505801971439 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +55 1 13.297212750263190273 4.0779000623470356146 0.66734535848351494991 -1.2385731585607053784 -0.57855424471385874519 2.370854620301973803 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3006 1 8.5872036783028384832 5.0597032153467624838 0.23129445712164772853 -0.44662972600166939152 -1.7311664324915563284 -0.33012410482049486804 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +411 1 9.9594322353360702493 6.0076241611374205931 0.95965468763926420337 1.0387911967988905371 0.21553497429988385803 0.23255122832871102934 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2069 1 7.0046150276605336771 7.4188636669166196924 1.0514097004960403225 0.069273372495421606243 1.0944901424236133103 -0.41734631385343706755 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3391 1 8.0723750074928855014 6.334812802247278718 0.89810213619348999714 -2.9281624437918964965 -0.87255963606097397545 3.2923882420610661725 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3933 1 8.492693438553558849 5.1678975556035560146 1.9386359938345261167 -1.21374087721249313 1.5824347540355641062 1.9806824463817871429 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2711 1 8.3130289412403133298 7.3215076107451437792 1.7047901106599121501 -2.174782782802438863 -0.82548053249492114869 0.88054114645179637488 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2723 1 7.1454058940561537838 5.734139710402279988 1.7178655348360831745 2.937320361939068647 2.2113580713990166338 -0.60940751331235942789 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1637 1 9.0894739002324769217 6.5973746492181479795 1.4759100598254903947 -1.8675233979454823885 -0.049179932239377985304 -0.85860302253864950739 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3808 1 9.0747261481587493392 5.3219967550165820924 1.0739860294191960755 -3.7265684551911011368 1.184033918254981943 -0.63208392343273411829 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2874 1 8.3013549948884950425 6.8879745847386226743 0.14197856935019051439 0.47440517179642210932 0.042090708685648486886 -0.71099458426709116754 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3324 1 9.7580001519460513038 6.8758625386710425786 2.4481522011233414204 0.26373783216214230496 -0.89427872612879444336 -1.1686155467997867419 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2849 1 10.784361092276990135 6.8715732129128435091 2.2361207747505802423 0.095279548725389517916 -0.67458005032189749528 0.41711297293463789337 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +21 1 10.797222750437057925 5.535905890190405465 2.3426272524753439797 -1.268893126064964294 -2.5822346358946592915 0.48682392019405507089 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3710 1 10.477716645348699842 6.6250828736086875281 0.2520054565208434405 -2.2514380629367272135 -0.5460622228525461308 0.21458720906604372702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3418 1 10.288278376991629059 7.0743316377640175219 1.1177063687639587908 0.15610059611876311858 0.68827119696361860335 1.2122036214066433946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2335 1 10.952912559647788981 5.5323120248017456646 1.0346731599275729163 -0.018613436088022738968 -2.261176642087302735 2.6847259135409418107 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1391 1 12.782999108096777974 5.8476829921013377955 0.87541903204814985884 1.7172004995175620401 0.43689020871577272098 -3.7117036134502163769 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2127 1 11.713532712409156389 6.0433327499263631566 0.6236584560452349546 1.4807755272938520896 -1.4491503135470689134 2.074538527702705526 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3954 1 12.155542729093504306 6.4610276771944414875 2.1681968934545148286 -1.0164503493608718632 1.1619415339331014003 0.074558376914637944366 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1564 1 10.177572348729407636 5.2578955072919022484 0.41377853696114996751 -0.37161268926756568787 0.75402756920811797592 -0.082495337450254530021 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +421 1 7.6092351642236355502 8.0285698931870843609 1.5258845244997565338 0.25064194732915656694 0.18115039865413670728 0.21990740015573484456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +211 1 8.4565157419519856319 8.7984657920019415656 1.3544095996800624704 -2.1104361108743558972 -1.0617754554642937492 -0.61184869550957743378 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1137 1 7.5630382989969904273 9.2828250284970330597 1.5890185381884021076 -0.17153126033613277923 -0.85664698291645668959 1.8074310471916670284 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2415 1 6.75403696118005481 8.5470739471327821235 1.9708544339171525372 1.3400140220036194094 0.18652517661546161309 -0.31702816596030986007 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3804 1 7.1317988973187915747 9.8040479778857267945 0.86806764067503638937 2.4840374304962842267 -0.050449607003501352465 0.72754758300636768187 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3038 1 8.922110285696359 7.8894016324232119075 0.88954274401482213985 2.9833474907548840349 0.63225567193566478696 -1.364321083604133511 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2345 1 8.1881812125528927737 9.367640568102746812 0.50425493290897016596 0.02875180528877609859 -2.3654374087640412938 0.54381897796493638975 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3410 1 9.7298051390411366413 7.5142507776239764183 0.076739802422047836972 2.7739421003202111571 -2.1255178550034377061 1.3581036894445015495 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1065 1 6.7040959227589755898 7.5042735122902177736 1.9583048372871278975 0.63975803146159393453 0.89569615213358411143 1.0414163434738235026 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1269 1 11.661548044419562942 8.572997322051957525 1.9114388447741585964 -1.4643956559793369632 1.3836154835357203918 1.454770042646426953 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +797 1 12.275647426538112583 7.6707093479918837531 0.48633165517511467435 -0.77421589863118411845 -0.96532658628878331708 0.86871596802902339984 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +872 1 10.879390464637751279 7.7981169379390262719 0.32833576036629347206 2.1423313946748212544 1.710047315147888547 0.3873680162506816238 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +413 1 12.174005994577342449 9.0033940747344889388 0.94088673928204058505 0.57771263872039935183 -2.0570600460508803309 -1.0185540043850265235 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1944 1 11.355724600145631342 9.7086939896469868216 2.1751233534033502792 1.3367728511761933774 -1.9728703922843962015 1.1509261866506352856 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1516 1 10.35195442810853983 7.7590131431579090204 1.8025807544308656283 0.072184392254163412539 0.44704297104017143294 -0.36193115320079183306 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +365 1 10.999898882138044343 9.0761997754565850727 0.62678333166823341216 0.82955368682098151734 -0.13360764163177715758 0.87482938396124731995 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +710 1 10.088051295358647863 8.2821092076555391515 0.76871981080291196253 0.28062350427671595154 0.67202070779684863755 -0.072200029719653127658 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3310 1 13.320662004116130106 8.26702967935825761 2.1056023830653134432 -0.98553978992446655827 -0.16669884431260748037 3.0104994774181719208 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1967 1 8.9658585639648613608 2.2514678013590629924 2.6803725010045686972 -0.43983394500208550237 -0.46088214208741806743 1.6765420041227316883 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +219 1 7.9659272134498770868 0.58370736389185695625 3.2666757929654104409 0.030061918740563037949 0.65217015920966014964 0.24015872949203462272 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1699 1 8.8397516839990597504 0.72223722163996073586 3.8533466922716304026 -0.62494901477320030647 0.12130667236710471202 0.51332958991502652957 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1644 1 8.9291734526182864329 1.5394799431249472921 4.3287526092967025804 0.88284514351601606208 -2.5602613564275182867 0.34802216746861269758 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1848 1 7.4441215391082344865 2.1142770296650690298 4.023773569260585603 -2.9478873277726225233 0.76307773468021167229 -2.9858601937200055509 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1782 1 9.5326168724322730696 1.2353855369797255292 2.8798249004113896099 -1.3627856514855334336 2.3568129623592000144 -0.334342229070392849 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2681 1 8.9234058506943565448 0.14364008280261342243 2.8741758586056587177 0.71777596742650229267 -0.92589632831270152202 -0.90486406005925934526 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1829 1 9.5568487196589160249 0.71373984968449566413 4.615517227546880541 1.2805147029523733515 1.3166265646238026754 -0.92454597509820546364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2911 1 13.214033093334482061 0.089219625091496251867 3.8957469576191137151 0.57651239239678131465 -0.77530326111961089808 1.0007427952763996437 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +741 1 11.761695285407887113 2.2391304092333492726 3.9487962225383679282 -0.25379327370645460293 -2.8775804951002070808 1.0479520187391497821 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +332 1 12.116937945537264554 1.0064173362465926864 4.2545883813787117589 -1.3212178336942832502 0.82985458907872144962 0.28236895003645678948 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3476 1 10.199868546110767653 1.8051514258801086843 4.0846695372372296973 1.7975356004789717623 1.6414355010375707433 -1.551165128715528807 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1932 1 11.156837375767377551 2.2625631893616167112 4.8309240367773247371 -0.72428870703009118337 -0.29212907649892910777 0.31826876971112649795 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +484 1 12.49616642906566355 0.43804138053501628924 2.8414936068697542737 1.2616920371329218842 -0.045395301180664524021 0.57598676566252149378 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3720 1 12.685711295789880992 2.459399764989115944 3.4935678158487983858 -0.81345728281818452388 1.2235717476739831344 0.80994123539114448729 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1803 1 12.526851953709719822 2.3194614609512687053 4.5478467999506309027 2.1347818681288974751 -0.13120240340649619304 -1.0734155230169768469 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +302 1 13.150061057062726988 1.3492382613628457477 3.1651970979160806152 -1.3050366725276578705 -1.6535457066427523554 -1.0132228659787279046 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3859 1 7.6859950424117196022 4.0527739939477651632 2.67125340009598089 0.27955204290334634276 0.051841285775693725368 -0.63671675600389121552 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +92 1 8.2683105983064919542 2.6125408818250113185 3.5329011017073548295 0.051039695483529039233 0.92138365580180070502 0.16754280478555080847 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2854 1 8.4286739509588297636 4.9208561480730663718 4.3936750674898510383 -0.38675743923631894505 0.84611867804494866885 2.1255498216058050787 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1102 1 8.0645361998167146567 3.7130222068219369547 4.3184013279777202499 0.29924989975279558951 1.5218059925875446758 -1.8397684706037114033 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1286 1 8.9799378260235425131 3.8458815357588687078 3.0818740672995081908 -1.6706727684478690499 0.16366832493168187446 0.74965812574756196529 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +893 1 8.5030981889479555491 3.0898363766785483797 2.562931909647377271 -2.4737997654821635152 1.1562433631463322481 -0.1822385598699580167 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1194 1 6.9835938755242956688 3.8649802701847901787 3.96480357913963255 0.12102468160692936294 1.1090092664268202949 0.090102973796910637572 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1416 1 7.114508591261307302 3.1950893930028971823 2.8987632631570452446 -0.87404560733187253163 -0.52408455956671140541 -2.1852715407900804578 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1742 1 7.6020638251641736716 4.9519561783509535857 3.7014009069243383188 0.10139110203186164905 -0.4998039019908105951 -2.8296968471723409344 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +746 1 7.4842127935200402078 4.3449358261839039486 4.8426790420658374359 -0.61557602652054521641 -0.97282297923716987142 -1.3246395052100226053 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +229 1 9.553680176741540464 3.0402176401876004341 4.121736476111667713 -3.8939045638831171203 -0.64338689171369789488 0.46574528704526979572 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3124 1 9.9356626838182791062 3.1531475387501859409 3.0873892836351166657 -1.1319922479536168591 1.7513439741550664852 -1.0077320224611521216 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3864 1 12.968312343646664075 4.5088367501900137313 4.4297613236429480565 2.2091315713252375197 -0.35766644733266317324 0.84711178250219409946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3701 1 12.679826561664766515 3.4512307976505156581 3.6704028638693402264 -1.3334591549985237435 1.2579292418651044638 1.1685513588038756172 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3317 1 11.119098798185486743 3.126419119092465948 3.4963622004244974129 -1.2469076518798007935 3.2479354118484717873 0.62109232455905816206 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1482 1 11.871152454501986639 2.5360897468292016299 2.8069573968020957722 1.3670687069860913976 0.77300830578306467533 -0.7375433499236855317 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3883 1 10.455891016717794528 3.4258860513927422708 4.8756769793850311956 0.57838805547424798625 0.009164108567481824355 -1.5347976473005251474 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3516 1 10.048718546180298361 4.1690966372035989096 4.2102586340329422043 -1.2291589759345931121 1.1858442648012890164 0.50082485698967160737 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2113 1 11.758863659586497263 3.8971452799255472677 2.8965914381616291173 0.075677103957440844395 1.6569219111406605638 0.93244115300841301508 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +841 1 11.829606524727164896 3.3474277285395617199 4.9672743099570215719 0.18020574261840002772 -0.026423163562528301229 -0.23938674072186102992 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2888 1 12.672266123798674897 4.7445957324593255322 3.1061551878127686699 0.0036531074170386475947 -1.0625470950741555676 -1.6395884176587398606 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2429 1 10.891950781428786144 4.3103931941992472687 3.3741415690233855784 0.56148086492815074688 -0.054347041988094792198 -1.380443649946241802 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1813 1 7.0573739663912489206 6.2824108927391018042 2.7306378173117829 -0.16454982772894458098 -1.4702041822285516481 -0.46957110204295915423 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2748 1 8.0778102632519832582 7.1193997722773669778 3.6435103936728427954 -0.47314590568337244747 -0.17852264836987197238 -0.27660641818359110733 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3812 1 9.0869461731533096582 5.6982080999678936806 4.4670625064981734909 -0.2603007254273216331 -2.0790980045091660422 0.069481907376635732021 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1020 1 8.4674334650532561142 6.8370069819784511367 2.7574098013065677648 0.58682325229122611621 -0.043301400613782438376 -2.8350077768044052995 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +821 1 9.5772194290190775234 5.130637000712793494 3.6485557900524527852 -2.740012321107677451 0.60498293582332418605 0.30299251013639788566 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1083 1 9.1134145682011702405 6.7583810117727924904 3.8595883325217177351 -2.2171744403271835822 -0.47640630279684853532 2.1267762608990015138 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1859 1 7.1406257020211389985 6.9174470096217950399 4.800052360230711912 -1.5414388675776988791 0.11508274296886467081 -0.14272361233143918136 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +867 1 7.2483091460617261603 5.8332727267680484218 4.7915900790333516568 0.27583787351735172821 -3.3266066794596151901 -0.45016229700161092264 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3920 1 11.117213558988892075 6.453922493263180904 3.3071096626580192002 0.56232413242684642363 1.2954106417550987906 -0.27038097450053372173 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3998 1 11.032979646712943733 5.5005713505250026785 3.9724834143370948425 0.74423105878781015132 0.13670745708480366853 2.2514548861463827834 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +529 1 12.523929793829912782 7.2537819825885359037 4.7717668381873616923 0.568968534170662954 0.67706409158402391935 1.2317766338775950619 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3011 1 10.778729953575185263 6.613844877802707245 4.9415396434941643022 0.011925829419217706326 -0.10378696000252814191 -0.16166448334944877319 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1522 1 12.197943722329025462 7.2803675609365479104 3.4981374770795654605 -0.22538275151385650519 0.76692639855774036306 -0.10178705408021240797 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2442 1 10.212712150678774137 6.0090681372744496613 4.3515874753079843984 0.47042612746201911689 -1.7382810552870318066 -1.9954593618496330176 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +25 1 12.589744681886079647 6.1872099166664771275 3.6956664997097323777 0.96964811520573535031 1.7625239682966626908 -0.71201485687301402372 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +201 1 13.321016780712714223 6.4396753823216412727 4.3839356396209216982 0.26373961851642402365 0.27727315299917776326 -0.51122298729943216333 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +230 1 11.742748621187033109 6.6394742952993279772 4.147654012996563111 -1.5521151959005901055 -1.5688803716078858486 1.7515512400440609309 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3030 1 12.428342297352420687 5.4979078583088583088 4.6116125863493344639 1.0697747165948690018 2.5370510803783279385 -0.21440754025619762624 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +43 1 10.10170686755208358 7.3716508158470270828 4.0759440795102106492 -0.04008582646871891586 1.3104568524620898717 1.2679979558840452913 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1954 1 11.874686009988680624 5.0484299135762169541 3.627099840811802256 1.3311188880092919007 0.86995017704428923011 -1.1826432243817488477 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +499 1 9.666040549086270417 8.5259627547384866375 4.0121675146736581752 -1.8814478958461295921 -0.55907638065529918769 0.25279520319909670745 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1718 1 7.4056700798237509176 9.6427806332114869292 4.4179634710069564107 0.70099386233535188051 -0.8995095235005635681 0.87057562551652800664 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +769 1 7.1970032877006318017 8.6467594671436422971 4.661926761249951312 -0.010609202098729892186 2.056153975109008325 -3.2985120872684841054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1544 1 7.4255489846271274246 8.9223772926159430341 2.9041684937674068223 -1.0707100528516935167 1.0017755833890105155 1.6669300429965401289 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1457 1 8.4009070003188721643 9.3325320170256187424 2.8215404483802317692 0.23709465964464004895 1.3532788039164951321 0.53835723944756286308 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +967 1 9.2568533927428990893 8.7223659522952612377 2.9134073939387503671 1.5652835402003950627 -1.4650050177189375411 -0.29855878817745623577 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1986 1 7.4196605340393348982 7.8612688493669438117 3.973080297379818937 0.15297674775082265031 0.47153396767209804219 0.79656416731543078225 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3739 1 8.7650994042034415799 9.3589096926169919044 4.4873679146150111663 -0.49914498091931819301 -0.10525938645770852031 0.44392176011695783089 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +542 1 7.8662411541377927904 7.8216262929785447255 2.5633107365630038998 -0.84006033639393762336 -0.37340803410052830769 1.1776536985630385868 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +582 1 10.497371011246013239 9.0093775660365693625 3.4815615040625269572 1.3172615687358775194 0.94762239314712959359 -0.75976031837706370364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2502 1 12.304063114993292416 9.4548093703094586715 3.5979761632765092649 2.2448833490273498725 0.99145982069198679287 -1.1531527217983239542 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +149 1 11.209648193842205899 9.0041002498287650013 4.3045663861660248273 -0.53142160802111537699 -2.7288437900698170324 -0.77138607322239061137 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +944 1 13.135122400993541447 9.0565624891974785271 4.4804824033746095679 0.73384868453614171546 -1.1558248630523138001 1.230289919372933527 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2282 1 11.186248105176392897 7.6434749938636645794 3.572282611087878923 0.52848671914289302443 -0.71776995605818427748 1.4801143913565248944 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2912 1 10.50328994712470454 8.051869826155355625 4.7182781065687917632 -1.2851777762849994069 -0.19504421750027417515 0.85868119909457818473 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1427 1 11.245527330952166167 8.5432746911473280704 2.8848066199942454801 0.021722773754302107663 -1.3694081880246025129 0.37757722101762558609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1647 1 13.005883755197318763 9.8542584490908282646 2.9267329500824592614 2.7988037475527121067 -1.3557199269943656095 -0.52344871517024493812 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +19 1 12.751246561436044402 9.9731217981113378102 4.6057531023234021816 -1.3313825898985298668 -0.53902498518820796125 1.2429068780676413297 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1432 1 8.0559587209811063246 1.1448022672772542041 7.0903494543178995357 -0.20833755284541358166 1.4560173732705561367 2.1620085259004633294 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3963 1 9.0790034571384179429 0.87880020711100137465 6.9126433967434977035 -0.072622443669308270331 1.0258328075157763237 -0.14472981695769507327 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +8 1 9.0574798933317488547 2.3064680564200874535 6.2003438800395063168 -1.7367831572373670923 1.0416365079700731222 2.9324731149128062668 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +59 1 9.6559359955714647583 0.96317192864132172847 5.725906013276381934 1.9141485497087487033 0.41549530285145552799 0.68254278919357136424 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2575 1 8.6813420979053717019 0.74591071848692103163 5.1335116207023707702 -1.468144967818918234 -0.0046139074091376772874 -0.43132826679708624606 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +14 1 8.5605882816844278693 1.0647395703216397944 6.148415035451547439 -0.28281338462376459653 -0.24576912355253663356 -0.68373232334753408779 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1571 1 7.2749369881375738345 2.0693980948070507253 5.2942740770651290916 -0.19376745622058758056 -0.77248931181247582067 -0.26313520807014473268 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2479 1 7.4927629790111183183 0.45052328141455905142 6.3977109461675096824 1.7181935004010520096 -1.1073292200162665466 1.8678554213539182438 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2497 1 7.6801213083232697798 0.92743125929719838485 5.4251904498458065618 -2.255264548695973037 0.68741953564521085518 0.82584140364976688087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1362 1 8.4000904750028784207 0.27197035534924363098 7.4581237788212684237 -0.42450862550814011387 -0.31310574097179633135 1.3268179371689243773 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1711 1 9.9952768120414905439 1.9225328795222491607 5.8751291367463638338 1.584052587427939196 0.32651112498964079967 1.3081775553602834616 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3394 1 10.911710169758221056 2.1938385666040089994 6.6473290943414102827 -5.0554515940918891559 3.2263771722985392643 0.33887276921193626444 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1307 1 12.833075303090037522 1.7249337165248557202 6.1872119404187913005 1.7607469835509710343 -0.6623505604777886191 0.38617012486775231794 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1254 1 12.363106888256286453 0.040525608082548972289 6.3542431478277023871 -0.31748059969084929666 -1.0205926034916219525 1.2272503085066777118 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1187 1 10.327670203317566688 0.27138177713357514165 6.097512584404112701 2.4494302876963778282 -1.4226922610181218509 -0.743530525214084137 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3803 1 12.060193629969594653 2.3430260755221699043 7.3207121180993501852 0.18443866558985452797 -1.2426575943640596478 1.1611194908143569471 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +685 1 12.440123122752003937 1.1635077241074445187 7.0433862396126354355 1.3401314532304848814 -2.7967863921949609463 0.63866047042956819446 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2577 1 10.609585934025897558 1.2384499436237648151 5.0667710704655952725 -1.8277193217447895712 1.3324955453112767856 -0.17896276910158814832 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +137 1 12.05779344603197778 1.6330562495896050468 5.3074462877713362019 -0.79570914263420300383 -1.0630742208021672912 0.6678690760859912201 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2714 1 10.225379187362964473 1.4624023159890791046 7.0792543409623966966 0.32923013893671132513 -0.96414212855901904042 1.3015933328118785006 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3215 1 11.366474466127508336 1.2519554494475251261 6.8089592839349633024 1.149551637550482619 0.56436998706566054995 0.034799853355551829681 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3276 1 13.188131221962896333 0.29600903390997906905 7.0445823693583573544 0.77777878303546565952 0.11261131692325683507 -0.19725222376715242922 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2496 1 9.5125864336093606255 2.5552109390184942761 5.0390874697964767037 1.3341622801928614273 -2.9682727804232582614 0.1791906847485122134 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +930 1 7.6791322874995104897 3.9506709743549612845 7.1837012505852388955 -1.4473428435804167602 0.22358766173373514907 -0.43494845556911443385 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3715 1 6.6900594548711413978 2.8385745619829303443 5.9260872493162972674 0.86465575497142832528 0.028908031082575776777 1.6248983477167988632 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +527 1 8.9238706431903978 3.9002698045077974776 6.9338950933044332103 -0.33327274992068156578 0.42551583744857701674 0.97557943987341788628 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3805 1 9.5821819529074154786 4.1604847452511313222 5.1924572412584950598 -0.054955159764643005116 0.65408504654583876636 -1.063952381293601146 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2972 1 7.3165053940710684799 2.643346448398965709 6.8417992227569994768 -0.40789881100426839122 -0.18155803776272694261 0.76074650696426782126 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2291 1 8.58760440148356885 2.9748421014551125197 5.0034720736893483206 -0.70941737615013134022 -0.66742200892830083614 -0.14238918039738374111 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3650 1 7.2972951777719083921 3.7516680031481905999 6.060923033683521588 -2.3083176457360852218 2.2620898198139625102 -1.1531589494499006054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1364 1 7.1362136570481595754 4.6775232381247171531 5.8142152508075790607 1.1921952404957456562 1.7393675305344229454 -0.81785129513022203351 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +238 1 8.2254689978532731232 2.9556280058206940708 6.7523790486481125583 0.50010991278881988809 -0.52083575625994971148 -0.49969980475707703738 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +36 1 9.4212830725274159249 3.4236535567004091618 5.9819253240132184146 -1.1284369188018243957 0.26414743825926106924 -1.3555778467275707566 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3748 1 11.264822843860978097 3.7107766227662111191 5.9418103415358576314 -0.95448539750231453649 0.36707253099493264425 -1.1280135936716939593 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3016 1 11.742491867824837115 4.6925760354590160262 5.2788615975837069882 1.0096709980979210464 0.74845971171920588905 -1.4757554605920388813 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +536 1 12.63845981746240632 3.543814944023631508 5.9356047832188467694 1.0867309320293561115 -0.17180760373029502208 -0.78800571018761600417 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3548 1 11.739646490193159423 2.6874658805035558373 6.2061602190683791136 0.90464707767817920114 1.8869212367365921779 -0.11681197525107742119 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3782 1 10.795304762063262061 2.7699954556533841199 5.8220656349499959603 0.72730515863237610308 -1.1536690591270384321 -1.9105272674430677782 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +344 1 10.338324391176069383 4.2445276590442322373 6.3237696409594281732 1.6384289357826153921 1.6682300458744256932 2.0491343742681213946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3078 1 12.51833173230286711 3.6470355954127775533 6.9354752850633358818 1.5447894537396329451 0.93995044038173958256 -1.4716510956687152145 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3558 1 11.739694518105443066 4.8672643148710736938 6.8231584492026158273 0.28027031980139771594 1.3826717707277758063 -0.63036852938596699136 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3532 1 10.56727964128026187 3.4213578488983915626 7.046113301367426196 0.97859481553510874186 3.2722902432507821047 -2.4869759569641285424 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3878 1 13.211298656712244792 3.0214172861996737574 6.7864199577337647185 -0.023656705208681242519 0.9737382752525932661 -1.9043892706405591841 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2769 1 7.9573887829321741094 7.2734838206647065562 6.2174709414030617793 -1.5402713816168802641 -1.9776449493486967235 1.4139161725853950369 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +554 1 9.8805741287597257383 6.7698706552099654488 7.2403225587285255926 1.744061545099417021 -0.030119636842574116359 1.4993697033687334308 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +398 1 7.2487048579057606901 7.4052343444388863958 6.983964355777823485 -2.7269957457711084814 -0.57929913973019320217 1.2695800635317531224 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1032 1 9.8962653316730655462 5.2266379316123696697 6.2334940863748879991 -0.74944725828137548351 0.27631028003239743729 -1.3516349789626023181 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3356 1 9.0375280910021924541 6.5025939594774113672 5.2217433450959536145 -0.24309357105173776126 -0.75097106464129004255 -0.81658763957110536147 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3648 1 9.2140186669844990064 5.9393375368822942661 6.1606030232073409891 0.055570778766610810784 0.42276703103833973563 -1.2446025843394332711 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2338 1 8.1138586063130055948 5.1676486042330287418 6.7651305519934661348 -0.16264823467828024017 -1.0082867708844092114 0.084827166376130705427 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3967 1 6.8665232888904004227 5.2127343038880322723 6.7472861976975604392 0.70627719930133170401 -1.4950849554854674928 -1.1513193596059974055 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +839 1 8.1630621926561612867 6.3675863160467658375 6.6335979304111019061 -0.091756409958522730519 -0.3606637562002834585 -1.0727915692873513098 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2787 1 8.2117633758056207682 7.3127587950393388994 7.2915773994430779226 -0.045524103709862789868 -0.24524362908285232687 -0.042255034936090687947 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +206 1 9.9196157694671498462 5.7191868217769039617 7.4106757842400732272 1.294844308086837037 1.3315053689429054984 0.80342822682283898672 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2522 1 7.2357482913137456393 6.3336567744778777822 6.8210808942123550835 2.7178565159395740025 0.16261069969386007794 1.0748960984171989086 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1790 1 9.9524975257783960814 7.037253358875771525 6.0911580209879918613 -1.4368887224789532731 0.89675953087919346718 -1.4327483451314555474 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1291 1 10.635134596375538152 5.0423395768437533349 5.6020383118959919955 0.64069283810444377369 -2.0620090306088063592 -1.1981641181570532595 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +969 1 10.951980706660181752 6.9630915478772683613 5.8389300530979495463 2.1002002210488832645 1.7421787537681148184 1.4019686968763300783 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1866 1 12.737746687973645621 6.9895915465552995727 5.7517530943005139576 1.2310962884094875935 0.041958120060326696554 0.074876772856490997343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2606 1 12.79743279071245432 6.5043307316389080697 7.0641265242536190883 0.094326144893261534841 -1.3402839764158893665 1.6176938798838593758 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2237 1 10.781280896171479 6.3280034685870569788 6.9188998321280141823 -2.271955546278600746 -0.97911740594236384982 -0.44440357153381249145 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2009 1 11.669561884191836043 6.5615612472087212481 7.0541805694070802701 -1.9778953849420679578 -2.4373305180360405053 -0.67670991890372955702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +451 1 11.779495127042693525 7.3539193733164465172 6.4569321295526966864 0.25976575195538803564 -0.91678895946356797619 0.072639640350302389638 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2047 1 10.047590348756159528 6.151972319412355894 5.3823912777451443645 0.42984406537677399829 2.00974516389714708 1.237709691387289368 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1211 1 9.7436130548346024938 8.9017605031736692922 5.7810338044933500257 -1.1512652008773438528 -0.3816898380980208727 0.42681141773006991968 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +314 1 7.6454671479088487374 8.0627200874188229562 5.3656657742658309118 -1.2229705897733997855 0.3107173842669713193 1.2248489361041543511 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +662 1 9.261722058429578297 7.569493906402584571 5.734990661808643253 0.76600564203921217565 1.3588757428335695998 1.1279263011726563537 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +989 1 8.4225217790608937207 8.1448807476088322943 6.2639090290100369884 -0.17839181133594997353 2.3611240418220913462 -0.24230623742075849125 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3295 1 7.6990846946802999895 8.4485688926979491953 7.1001140822911015249 0.94472843564204755928 0.10514480540009212006 0.18971415959441578769 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2878 1 7.5655422278215427312 9.0803053484695652742 5.7811966636823219901 -0.59344574793996940354 -0.31894381319696840649 -0.62242046838594733416 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1316 1 8.565360181286571617 9.3482822099963680529 6.0904326929356953357 -2.1160786264439601645 -1.0076581944460165641 0.686875154792752185 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1600 1 9.2002831826119368941 9.100479577290350619 7.1335755776827687313 -0.14304113515724301009 -1.3192101503939428486 1.4190359669077177163 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3299 1 9.7953752803247891023 9.9080662754788253466 6.6225352333461708909 -1.116568048837769167 -0.42445768771852421253 1.2822957862153514519 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3890 1 6.7515517991284701438 8.2582062792311994315 6.7364317014932977301 -1.2971726339383038429 -1.3248892406819605672 -1.0929365390120626689 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2266 1 8.1844637107444508928 9.9167576581429113247 7.1727435646065202945 -1.328246106563261586 -1.4543359284704526768 -1.0001432554117801743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2364 1 10.77030995131914537 9.349599588955305407 6.2528369109236914269 0.86254293803811210584 1.6854544180208712589 2.0125294959015804785 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +16 1 11.609724153017575432 8.8683117294654216778 6.6798650179191616516 -2.8276225343489418407 1.680245035465590453 1.8164909478861603898 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3637 1 11.765496898668372339 9.6942389361920806579 5.7621328206274293748 0.92137736076711285182 0.29775083420739750784 -0.41156645851956219495 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +355 1 10.634594691285702339 9.7461459320248682303 5.3084870721552093187 -1.7487362643741268808 3.4127852551627784194 1.5453414139546550743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2778 1 10.240972952750338365 7.9071690659257924949 6.4719574656577805172 -1.0952638266315835036 -0.9371981750537025091 -0.26284950488156400006 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1229 1 12.883819746874571877 9.7834596271590239525 6.2065633856085469233 0.27257975913057669315 -1.8104498318471675677 -0.84097037753583225861 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1997 1 9.8413119110242934795 1.931239087508117791 8.1209727571524350509 1.6135146725136815249 -0.25280543360850543655 -0.61181869951242873196 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2188 1 7.7446027603764786562 0.35981802509222776676 9.0477710631693391008 -3.2658233214827885327 1.9252250746708594598 -1.5940513470174892952 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3547 1 8.8091929880410084763 1.8744385684536610803 8.9096491930775965074 -1.0590244257164500574 0.69978969897827836277 0.80810184524762718183 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1707 1 8.1384716019308296353 1.0432386710322965051 8.5225892085192249681 0.71241429768221697927 -0.85654314367256512153 -0.3270853919662209397 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2468 1 7.8577838877796670758 2.470438439110828277 8.6064257316797974084 -0.64231511475681746237 -0.24498018510021932204 -2.2325493922327623864 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1057 1 7.6955572037981232469 2.1516158172351027567 7.6520351308315897043 0.453784263815630029 -0.75924020395450997345 0.42351382464279135887 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2646 1 9.0909701723653206784 1.0527573528493692212 8.1305675881828545215 0.10246171688463016902 -0.53449993092263081707 -1.4986223028102019228 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +15 1 9.3474204344445510628 2.1816139411753034949 9.8115112297129059016 0.68490348561158542751 2.5863559761861862896 -0.41562360314515789383 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1990 1 9.8531782094074618072 1.0133647371869138887 9.6203247693460962608 -0.095679198650681376859 1.593424405089024054 0.89484088813037776511 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +668 1 7.3926194118952190948 1.6490480827202989023 9.3794425504644411973 1.3266046516249683229 -3.1505675464485585202 1.3811974854643760402 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +439 1 9.3722486310325798797 0.31457789660478946425 8.947595309366906946 2.4048634512403133101 4.027424899173446704 0.55999330992994877931 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3441 1 6.738270019701292135 1.3371406197725572707 8.6117120672990328245 -0.25062907833917152933 -1.2777856613259586105 0.58886184031906307901 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2616 1 9.5286670635211780933 0.24008964111071243175 7.6879208552619013872 -1.2440327125364913918 -1.1965355365734642312 -1.0654693069630478686 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3726 1 12.687338756684548358 0.40383438213667910421 8.4664987434127514376 0.61457418216154924284 1.3700777594841795359 -0.48055458797289979378 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3352 1 10.530399684543924721 1.11317852894054381 8.7427925009672868839 -2.2954121138767731303 1.0276782548357239477 -0.1147759618069964932 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3377 1 12.615832780284433667 2.2604853236148718665 9.6077580597383551719 -1.9531160022089011363 1.7307691320347176056 1.8401778074637487048 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3172 1 11.794560039847386435 0.97331038916569612152 7.8546521966967670636 -1.689526174068377351 -0.31085136150221209794 -0.49374414261056792652 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +116 1 11.339473921491141084 1.8647263941105611806 9.1116246732424510668 -1.873363714103950306 1.0473162502353554615 0.78423862119641596369 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2160 1 10.894135894573690138 1.0837671981770715668 9.7483449107484254625 1.6048940052873077455 2.1474488472783583859 -0.37415007117605181275 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1226 1 11.630547116794133444 0.18811290092498483828 9.9780580637485716267 -1.5220489517859268069 0.58954165262402902226 1.1444065644665351034 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2601 1 12.586503735994286401 0.51527991113437410231 9.9229312755621954523 1.867290988402551255 -1.5167551085415198475 -1.5807921241538382962 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1305 1 13.322012361768942768 1.9572709363276661332 8.7905877624167363393 -0.010536829293547943925 -1.0719729996126619032 -1.0533080977073643325 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3240 1 10.441934697149074296 2.4773534507063135202 9.8256587280675784513 -1.2441764306796037065 -1.6507246825868688855 0.14654594740552359666 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1224 1 9.170563712491528463 4.1903353752157723733 9.442839646399276532 1.5172941720013879419 0.51071190092455609477 0.14954467433684059952 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +349 1 8.0850308002361561677 2.749742644723717433 9.857149596927396118 -1.1487579019967204541 -1.3268744913191830026 -0.19226175146544502437 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3374 1 6.8592661776152601405 3.5142591121298587531 7.8918676747074512079 -1.0064983447535558181 -0.61295054123225367615 0.20822388063135785496 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1579 1 7.6602656546310203822 4.6756825534702644021 8.1843463182253621824 0.23814091790818706085 -3.0164636181291779593 0.57325882658116700252 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1049 1 8.9390585626052860846 2.9353966912157236635 8.7047560891961506258 0.52551270052277365696 1.3525843382099471679 -0.36584515399354378129 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3711 1 8.4890866305498065003 3.6615282676584417487 7.8372393840632623707 0.51881173668713331804 -0.4854989250978616333 -0.25816919465301879644 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1802 1 7.7655643702439238751 3.7454532917698535321 8.7080765195858411687 1.9827657248116583588 4.0143328985873267811 -0.52020948475072559258 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2795 1 9.2732598100541192565 4.7900913943107203963 7.6120800434666042733 1.954673263749242107 -3.1178603041062324941 -1.6315698584484925604 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +990 1 9.9736274083644733679 3.937314734730312793 7.7054893511133144557 -1.9947436310893744693 -1.2651869198876515288 -0.48730018219974297056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +812 1 9.6031343847829067073 2.8460224870418087129 7.5117872702775896343 -0.41961199288645462113 -0.7644200096387104848 1.5482902708771595357 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1983 1 10.327876367734011964 3.5398978336843844872 9.9759408394756778904 3.4186647214371994608 0.19780618605705255209 -0.27421211051676336323 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +401 1 11.705592927346753385 4.0170736430280564733 7.5321558469777238898 0.61246459026543731419 -0.84593146404258945381 -1.0550882837838815309 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2439 1 11.274543796891428826 4.5895852849436273857 9.5753544729826121085 -1.1335154173401638111 -1.4720144773911301161 0.75257629010294302407 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2211 1 11.144192401485449651 4.6599668225640709096 8.4855506166159209158 0.74006662059047012558 -0.63494065827663392909 0.14948683498890760757 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3118 1 10.093443080811219659 4.5490730353720376655 8.7507213741567593246 0.78489687860581869305 -3.7064665752172949453 0.57359579414974248834 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2576 1 12.400576463575086805 4.4648146577104625976 8.9996397356022566072 2.4870924440312762727 3.1258944737782998757 1.3953090086009827253 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2508 1 12.33139250641125706 3.5443598747328266541 9.5914970222163962177 -0.53192292504907878747 1.0443047259715105834 0.51656508481084006945 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3877 1 12.714670164939091634 2.7189762305528479835 8.2421614972868635363 -0.65851407437478548523 -0.15115110125181735468 -0.21245423787879993971 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3249 1 10.427151041822350308 3.5545451814576192184 8.5482221290364837074 1.5232304616879981385 -0.083903382268718934567 0.66307829005587026749 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1488 1 11.357223869412255368 2.972197795888273042 8.0915511762529241935 -0.90415011215194218686 0.60225690421611566272 -2.0395971647592494591 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +813 1 9.3045352974100108412 5.1532976634915543812 8.6513326605755693777 -2.057653369637275631 -0.98073562827315452495 -2.1183398568531113249 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +85 1 9.1090419837995870722 6.3041239828351836039 8.2445717663356443694 -1.4297937730432026537 1.5191970970694235188 -2.0784299065835245557 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1760 1 7.8472199326942826403 7.3985829347026887959 9.8252930123186938971 0.14398372112642010556 -1.1633525193607414661 -0.9891843016637541508 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +962 1 7.005493532413075819 5.6252016135488869253 7.6977186069968599469 -0.14531302359992306905 0.29553789297363691757 -0.32249366119347899762 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +37 1 8.3981879915090988931 5.5637610885569417363 7.7989946619129604244 0.89788156864838619686 -1.8563523050694952232 -0.84571525511512835038 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +216 1 7.19719564773826459 7.3451530095583086322 8.2949456165408470554 -0.54165589590686147314 2.0252615971524119409 0.36385302806412511689 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2636 1 7.166743027190921822 5.1299216923730082129 9.184799776753642675 1.0536868321547314675 -0.22278736111296482125 -1.7801904829313572876 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3039 1 9.4138293901730616398 7.4460870145067890036 8.4082804021180947984 1.2406783507359300245 -2.4150388197824290692 0.84139824526308104602 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3527 1 9.2290582397014038207 6.0696854521341450095 9.510915580475238329 0.95801443787044004985 -0.94567317077256218827 -2.4185459176003147874 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2393 1 9.3170281509159753597 7.4270129425605899698 9.524722627296632993 -0.58413532698378944907 -0.54693425585100530206 -0.93193264340157366821 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1038 1 11.399265883838523905 5.9306396525636415618 9.888869397010685347 0.71190585213791535146 1.6545339303259209984 -1.0491345687627391392 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1775 1 12.88350129961313506 5.231198316927873293 9.810685984163338702 2.6800379523471189458 -0.14283489290019787954 -1.10174740036759089 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +524 1 10.201858969900994722 5.3190529543340856478 9.4592813011046068539 0.70363588090238182726 -0.048704094336684780608 0.079171966198705520656 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2747 1 12.546943690986180897 5.4358662347244290913 7.7314735999944383948 -1.2627531240549190183 1.0612620809202648609 -0.62382248261018158342 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +926 1 10.970759604713332891 5.5063197989846859315 7.6677772831507082785 -1.3677685976308400218 0.69684986571797036259 -3.3929480742380548897 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +81 1 11.101217804548232593 6.6760205531322220907 8.3287103389235763728 -0.039568886944758935309 -2.0393832014306885192 2.8448703082957869093 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1096 1 11.712721549929769438 6.8973035470221981669 9.4709736915529063594 -1.8734797894176906663 2.1835366219420686562 -1.9069624202944712721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2248 1 10.008668960196597908 6.5906020820461170828 8.7843975862875947058 0.67010948972849093686 -2.3678136594445415852 0.50181522115299803666 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +279 1 7.6805194017349815994 9.6641904592360283743 8.7105965194213617053 1.2910453503297170119 -0.15314756548477476139 -0.26013260794891857053 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2137 1 9.4219434497029190823 8.4121279373941622026 9.2297368713472298651 -0.76434789329963792603 -1.4094919425004845959 0.67849380347928578416 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1322 1 8.2673986013286295815 9.2925157651149064009 8.0058197916543605288 -0.80589136235869218705 -1.609097545747356639 -2.8362993573157528893 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3700 1 7.4048965311322358929 8.600173640623658855 9.5179288470802916322 0.66173474168542201213 -0.074392527248647033478 -0.48767741015263665894 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3090 1 9.1120356751231561532 9.7621021705472053043 9.0892249871592927235 0.37251497551314788348 1.6246971048513731972 -1.1115828852359406209 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3205 1 11.186984391921777515 9.5982051400555405962 7.5745132585493220034 -1.2803274753337252623 2.1017811770816070549 -1.461239783446109497 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3679 1 12.485456172697231736 8.5760305289050222655 7.9335812522905122535 -2.0100935843621310362 0.15964487013911479729 0.35049712899976304126 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3642 1 12.039809753811031356 9.9350625829379080045 9.2147669789783250849 -0.42961892528836009841 -0.42893147566074857346 -0.51487646754577287567 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2001 1 12.92471274538772974 9.5490456550092499555 8.9014711795413177242 0.30470714458068526298 -1.1219921465824913565 2.0168387992929988073 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2808 1 11.186140063095066921 8.4912690773336336747 9.2138577095741975853 -0.66259109127356752289 -0.10150070204377606431 0.69196494220820248255 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1815 1 10.033709409523630995 7.9072931877160961278 7.5112688335847179744 -0.79425719975540509665 -0.50526605635649102233 -0.65805115221714349794 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +73 1 12.812410784737366498 9.7288238921692595795 7.7185491374625021521 0.67168965742824970899 0.47714699225023038398 -0.54200700973024906748 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +498 1 10.025866140165577534 9.22173171011121795 8.2318601143172411838 -0.19215568340539235237 0.26189940045330084573 -2.7454630515289650816 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3897 1 10.834811248004227124 9.6489697826475193665 9.0434901588320499854 -3.1844443692867234752 -1.421934760813507781 -1.907483822897167558 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2797 1 12.806352374208749723 7.5963716939200436329 8.7330298232532133085 0.37277714042480647461 -0.12437294811114076032 1.3755197414383690813 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +189 1 10.931044330747090143 7.7083492355189511258 9.8811743468869259743 1.705481989123532216 -0.21193202192296539677 2.0451737094620074942 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +670 1 6.978447542565738182 2.161107024994154191 10.234924241594967498 1.0041687934507166347 -2.6454902379232745346 0.36223771473378313379 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3420 1 8.9352356070833511836 0.26686860818159252595 12.485191991685086421 0.9064803410895498903 -1.8247519276779500252 0.72559444557859820168 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3510 1 9.5616899317833237149 2.1256120610424185102 11.871430888309552287 2.2942089512792884776 -1.3129116551203749985 -0.43928378422492703193 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +748 1 7.6095140036929462823 0.39782182431251172927 12.227833970653271933 -0.67141949821423185796 0.34328186340237520913 -0.50950021596217665021 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +497 1 8.0215388272184870999 1.8395221862571924376 11.355315233565098865 -1.3448795717803287975 0.84556088319844502355 -2.4020634507756941645 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1493 1 8.3990667004411925234 0.96885251891532897517 10.376076163779082151 3.0573110968924948061 -0.060297414061700978227 -0.90966840326915465731 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +74 1 9.2771777450000527665 0.1270598049289399234 10.296299619337764497 1.3274127540099942557 2.2499974096132779877 -0.14174103746237567969 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2773 1 9.6834903789683171027 0.1024969681603113969 11.688912024664018574 -0.68580156395453872875 1.4291536140072504946 -0.4994026483917103354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +343 1 13.211856008545819208 0.30196460304338113012 10.865066907180999323 0.8996732816026393742 -0.73185770647310144366 1.4423290946637914445 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1407 1 11.752688389540699276 0.85616668584842336998 12.359677699066001111 -0.37308869656258103475 0.69284348803960305041 2.0832349388866995277 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +731 1 11.463447675415459059 1.8350781963999711621 12.280233118473709908 0.91428326814006677381 -2.0766577935064827187 0.63965313862844030979 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1817 1 12.504762863370995518 2.2095446960382552071 11.658031361157904726 2.558439731826652519 1.2961612672664162282 2.072716375739131589 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3344 1 11.678866675055244784 1.3280959346705605295 10.448427631292450002 -0.51111611324515349164 -1.4474921219036069875 0.48124637425905308907 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +795 1 12.686565111181341337 1.3289634318415628478 10.951339884558930038 1.1204427935494958302 0.45328777269267800376 -1.1419449948940898487 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1712 1 11.9768237420725292 0.55724158357391662122 11.369260550193278192 -0.57731203943867281936 2.4321164540882005412 -0.66334511421601705106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +581 1 10.174031866234500399 1.3025400944685179283 11.797734271921273219 0.15386387893900749235 1.0584342049854309487 -1.4307981476445041924 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +256 1 10.772038927943732745 1.8840083115682482173 10.603922525194429127 -2.7482540127868597679 0.81093944941074536104 -2.2612415630869411309 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2771 1 12.754182874773070111 0.81280038959114020436 11.887892091205848999 -0.74568297465518684763 1.6400826439332703011 -0.31662539933454547647 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1262 1 13.281552855430200921 1.7570569687626675925 10.164043120475136917 -1.4521876867746561501 -1.9864113231174405083 0.28957159891791173223 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2790 1 7.6414288560370247083 3.4434812108392613972 11.233541544724584327 1.6686092117653301692 0.63782236344397436056 -0.33818395636344622535 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3105 1 9.0817293856503340521 3.1858769457997482277 10.287543162921192419 0.54323709779734241643 1.3091685796358247806 -1.8057307710650702948 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1235 1 6.9779014773305982899 4.8539944828125447529 11.985162455625257394 0.9057603433346579358 1.0937560921915996381 0.52110706269222117903 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3677 1 9.473397458636345192 3.0581908618558655277 12.067838735394587957 0.19318882055687913724 -0.38216753465493014108 1.0346671199670214314 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2004 1 8.6066607443133555932 4.6466632124130118342 10.33961625080155855 -0.9875829058822501727 0.29933908090532057589 -0.14026513876412297077 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2680 1 8.2512527381798150827 3.0215654330376113812 12.4326972927820254 -0.86306972291990924351 -0.16834309534699842814 -0.57769212622241916666 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2582 1 9.4578975090488572874 4.1213548017081622632 10.532517153043272629 -0.52644741620748525257 -0.58929398745963534889 0.99918411194934952935 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2028 1 8.723352089695936229 4.0610144595109680665 11.320977469431438678 -0.069256350699006277716 1.2678203093528601642 -0.96430887047410784874 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2016 1 12.926655931765946406 3.0217053924740771009 11.139298054714082298 -0.32706159298956688497 0.79668168185243637414 -0.12291196655764106971 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +974 1 12.327887161818919637 3.9707025378767064616 11.180678445329016668 -0.7250336658657238198 -1.5517843690234645049 -0.075462365511640816518 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2938 1 11.310188021250070278 4.4964632357929454898 11.95604306764071012 1.1497982524914676095 0.24285058948512444621 -0.16667227652929872406 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1188 1 11.801505121323906167 2.7686634013518558461 10.328566316677708414 -0.33242018259135397429 0.56727744164955051787 0.16204856854317559178 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2306 1 11.60991935639009931 4.4433868511171068505 10.606516373308625845 3.2553857837076263237 -0.81745678468334925793 -0.21726080927705462842 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1345 1 13.01224891592565136 4.2110261388838807761 10.320103004826613358 1.826367531341522854 -0.044755148038469277916 0.17331584554353740568 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3570 1 10.09527681452990322 3.0015062840593067506 10.963749580969134101 -0.43475046283530016655 -1.3342267164166021765 -0.95480753478003410617 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1550 1 11.316508910758285467 3.2368379219601921548 11.890912924912225179 -0.80382551454402317859 0.28106497735765467727 -0.68534068710967788185 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2968 1 8.7987499041907746289 5.2138116524850248723 11.226191786757496516 -2.6415022922288078355 -0.35325876803977235285 1.7584254180605374263 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1690 1 9.4637262117019051999 6.2468195527956247304 12.458434499663527006 -0.81645132507057760485 -0.4270720296162995866 0.48931967554490912731 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1765 1 8.0710938906256970427 6.0023522778702069758 12.145853622128536031 -0.97533535451015496154 -2.0311641816856851328 -1.1371924991020379014 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2175 1 9.6390071482581447526 7.28189097463611823 11.563733046932400228 0.8499395622045466947 0.62711561341118216006 -0.5178053352875712223 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2708 1 7.4225221346450735993 5.6715524063108215813 11.077774074845411434 1.2475194369496098723 1.7661958308907916848 0.73718143892224985425 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +982 1 7.9225298451855152848 6.3049438934243076105 10.183348455101295826 -1.5787755374361724936 -0.88460052447884907068 0.26554077283792765218 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1446 1 7.7073370551013766772 7.3706118950377721433 11.552123846044363376 -0.96834037412784101928 -0.66734911374162197983 -0.12718595432401944012 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1382 1 9.9837144992323185733 6.4761559056513675614 10.111329430316747136 0.81891227918680387088 -0.6370167821966653543 -0.23792633414995909003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3896 1 6.9705773084738558154 7.3928375811702391474 12.31968507075096575 2.9067587216347070544 -1.0049686945687581474 -0.29889476801410613804 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +490 1 8.5130065953923157451 6.898451639213641684 12.321193205415058358 2.1572079121353686659 2.504600015470013652 -1.9696001337377815332 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1798 1 9.9946855610912859191 6.00607275965284515 11.562399315679233069 -0.53915590320371442612 0.96061002342039336632 -0.18337138712561068532 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +70 1 8.1320865734199028196 5.000419421904115147 11.974611327986897535 -0.98427905188363129518 1.4714690069244202864 -0.46613369074756660915 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +888 1 11.611525447016033397 6.6759938799187237279 12.345938975653227843 0.28269931854476576527 0.25957593249848859296 -1.5491112135906133229 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3302 1 12.631428417062148029 6.102354595852275132 11.238971410423550523 0.65519179439788644004 1.7658446306251425195 -0.14790660554432746854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1938 1 10.739455622287033876 5.5128162081497258384 10.658461130465219924 -0.72706479862724082697 -0.43996269144578009636 -0.14885684503054139038 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +24 1 13.016969602996356414 6.9028397938805037271 10.66541692125996299 -0.38795589861497176143 0.11254079627052358814 -0.27959930504204522084 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1979 1 12.547827625629887294 5.031560771764389095 10.927041696983497587 0.50777948695446673 -0.048412803782820396092 0.32879315249611279492 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2087 1 12.323490262794093653 5.3968763508912678262 12.329794109825122916 -0.94907674087517879258 -1.1017430788100717187 1.2020306107225224856 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +303 1 12.933470202445231934 6.551709487257481257 12.128873170049953245 -0.41657645446742952444 0.34525425838408013712 -0.1271934862463840743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1614 1 10.703713945592708612 6.9536195609702700082 11.326042108832153232 1.3847394930764502785 -1.9783665144491389132 0.50971954365026794775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2014 1 8.9682775183915364181 9.9075149492642129445 11.117018366592782641 0.94544979195625411528 0.90016124485950343992 -1.8628783287526242685 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3985 1 6.7412564872499141089 9.7389952614344394988 10.593295408895054166 -1.1960572131030220433 -0.58575296316291158849 -0.46903881205775854735 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +817 1 7.9014361526247007816 7.7997878674864091764 10.760932194347676116 3.300495191039546139 -0.22292284946578655447 4.0880743379227659773 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +435 1 8.1116122931933265505 8.8684950678648686306 10.910630521104788926 0.29392162697600870969 -1.7893479495871282836 2.1567442731648300835 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +272 1 9.8080631633569357319 9.2032178637516359743 12.167249400885296495 -0.37644924348319774854 2.4807532955923612406 0.34270765698388655496 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2914 1 7.6835734602667749016 9.8756705899431924678 11.860989598331530104 0.53302170944112636786 1.1614621739351116414 2.3041866508900312738 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3899 1 7.0162091652910705264 8.5863510211427183094 12.211329098066704191 -1.0072508031931819428 -1.0921393954973765972 2.545365051267157952 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +573 1 8.9936418387222349935 8.5758222604408871348 11.45992855264289112 2.8635784405171147426 0.082665026822364665038 1.2358309382735408466 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3887 1 8.1052240947720033404 7.9753268450109251475 12.495019499917525252 1.7766360096483766462 -0.52840810321668107985 0.23864973182647014616 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2454 1 6.7633571626244419761 8.2250879605105815529 10.568397163330477184 -0.46691484697277158 -0.069430008489881872569 -0.061272909085807437946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3620 1 8.3360682737669264952 9.4851977584547313427 10.085912563459174862 0.9692263229938868907 0.52832070819922682947 -0.99510113976073166775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +113 1 10.70056787973311252 9.8887377942714991264 12.436324984627354695 -0.41079328672349446627 1.9466837851759872802 -0.2002211289590729304 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3331 1 12.677096260255948934 7.9660165824550457359 10.255107173631941464 -0.91438615428193559254 0.19561589853359051538 -0.86607642941526741254 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +607 1 12.070747247864373364 9.1137236111244082082 11.481291596807606581 -0.39380707732274294885 -0.12490103649149165987 -1.0252410086285765889 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1886 1 13.01725747204820216 9.6444833075545854939 11.782120409527069071 1.5861076392824362546 -1.3577864024007377797 0.57518691356566620243 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +297 1 10.832404991674685846 7.9944216687118716536 11.785078635237395517 -1.4938394733924253988 1.0033472340021774016 1.3182799163656593322 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1385 1 10.777322000030066462 9.7344401430039777523 11.11793604031856475 -1.0114423246005188606 0.70044896697629743798 0.27240726226936012866 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3379 1 10.854964932412922707 8.8023493511665762412 10.145180012975327344 -1.1549597261756412436 -1.1611380822803125668 0.02261978074784843501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1078 1 12.177283481906076901 9.0431688501854026185 10.344977047733667774 1.0792818788335423186 -0.090572728223614354381 -1.7996583248350745965 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +94 1 11.795956667212248448 9.977738406934381743 12.225024263557489945 1.7603988002641328681 -0.65205926884087050954 -1.4862902811213509757 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2620 1 11.671314827322531116 8.1313943858833148681 10.357994758622606213 -1.3337864294324419667 -1.8446691136694273183 -1.9819684576803275888 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +937 1 11.65405906754514298 7.5866136624141233824 12.039812291555644919 -1.7725454247760064064 2.2540249013417446022 -0.59795357434156171106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3724 1 12.034604857355171603 9.9393492803923990664 10.56918577700954387 0.047475575331966411718 1.1033025054875902349 1.1868638457110201045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3262 1 13.2947763497575977 9.4501278756551467808 10.016433907180703144 0.74244715592387389158 -1.2209516939652411693 0.58831506498538910233 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2952 1 7.3746161989753504784 2.4190377626568326797 14.08997567791800698 -2.2855591797725840486 -0.10591612913247898387 -1.8087505499289961985 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1744 1 9.1880714648650876342 0.92673743792873830571 13.527328537195735692 -1.3820913301630370906 -0.023902677448037722152 -1.1079703240468221637 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2548 1 9.2473343890153287816 1.8368856487822695644 13.960933141044630901 -1.9514657100893955111 -2.0171508820636963044 -1.0503792129781068798 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2697 1 6.7693819071456093894 2.4486944519747217974 12.885201980236042019 0.23870764260648524857 0.0049308516461946403156 0.076426860131077439808 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3256 1 8.1987242048536810302 1.5930461755494251808 14.533404699994564524 -1.4184171692581275526 -1.7021113535675762574 0.72163416320045736807 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3817 1 8.0083965845111020343 1.8985545898084330574 12.59896925807014334 -0.5319335202701112042 -0.32906534249750024612 -0.40094007608644688379 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +603 1 7.8393338971806674209 0.43320338412876224776 14.361611844162606388 0.81733835051359760016 -0.48839808747264951139 0.90547997593910700687 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1299 1 7.9510196488159587958 1.5593884080891764476 13.580885408098273714 -1.7296874227186609385 -1.2761267844235875124 0.13174653634570898664 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2433 1 8.1998102094676461604 0.62903807025325375601 13.032710154003435576 1.549597998972988222 -0.60066820814107579896 0.97634079447389399142 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2995 1 8.8093083880665545848 2.3680155949054273457 12.920659249444996775 0.687635573905115427 0.95049852595638639752 -0.022087631924878323164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +979 1 7.1398814522359881352 1.0322594459624812036 14.138429840730022846 2.0643707961773376525 -2.4115465311399311155 1.7910425731798989002 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3049 1 9.1706764310140940211 1.3826068486798464008 12.595476788283155756 -2.2056304085383282576 -0.32834684478192222024 2.7518296616820938638 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3779 1 6.697985682580118727 1.4533471459046327645 12.68004643140499077 0.95926742925262420414 -0.73557479181813412161 0.029763289900414751504 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3946 1 11.858281580373450481 1.3881581834552043642 14.174686138628803889 -2.1332663007246197573 -1.5618494776559748161 -3.0766497778186576717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3690 1 12.19410600407223022 0.11501139262452438061 14.050588925324511536 -0.3068831594620190506 -0.64573184587471255114 0.47631929048864229959 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2500 1 10.173437124686138588 1.3085682002950254077 13.342449771100010736 -1.3441228039005070904 -1.3347923884993779797 0.37095796594643942745 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1484 1 12.509742791052573807 0.3110537014967980074 13.056686125869340742 1.213044598617514902 -0.39273079305989883059 -1.4238250450389473567 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3644 1 11.662860606811438657 2.4229282680673920325 13.876945634734930479 1.5702228025288749169 0.26713941838956822838 0.0024402822603351828797 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3563 1 12.052910685317051787 0.61326727347034748483 14.958570194801088959 0.95594764010234745122 -2.1261217567143515517 2.7000292280960960234 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +688 1 10.875007075156689851 1.7808741580490243805 14.771253653913879234 -1.6692819453980676236 -0.93076706035960454777 -1.2309531136651290506 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2753 1 12.875593227590565348 0.0067230375121305604655 14.858505935219314509 0.062975045955386957375 -1.7072628697252314467 0.15545284720381533083 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3145 1 12.464300405085728229 1.3769322814540441158 13.192839165500899412 0.49051528829363560957 1.1334937008592673724 -2.2130196808479354331 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3665 1 13.185244808140238248 2.056495466523363902 12.68543517588958558 -0.17839212358998343677 -0.36985777677337328129 -1.9086923414617453787 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3844 1 13.105695567527495982 1.6789139940564477005 14.743459492701669333 -0.7511082564320876731 1.4727663537754978051 -0.72685989345226098557 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2200 1 10.028408634430961754 0.013993412980846740845 14.560519699319963038 1.1354213911927200087 -0.53547302067987467833 0.10872128123723752424 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +473 1 10.594102153461266269 0.27169429338576733812 12.595724590172462598 -1.8048083904139231581 -1.0475692968558079077 0.18606789392412709239 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1675 1 10.487541418182685149 2.4807239456308751713 14.200403197143415923 0.76277310779242479821 -0.7567588024049970441 -1.1170890799877974953 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2791 1 8.0320414411832459223 3.3448040728113759279 13.544874085499978733 0.61067626106040950873 0.22107044400810060836 0.34173749735761616009 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3067 1 9.1061034708317922792 3.8330659014480024105 12.759448671783262697 1.0539813728744342747 0.072618000466634316514 0.15690968839793195677 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3903 1 6.7215635152263732977 4.6391626320356804669 13.234234326187920061 -0.86722354296090953252 0.73901295462948635162 -0.141727189298537809 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2538 1 7.2527893042838833537 3.8490238566441958845 14.424936460615894518 -0.097995349505454021344 0.35402079526385049624 -3.1698406130553054005 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +429 1 8.9171902516197558697 3.3368150841374784044 14.122857172472942366 0.71006975867370270006 -0.26124274859632967694 -0.88847814767765442845 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +725 1 8.4248010831967548029 3.0233693797834875205 14.880025506608951957 -0.71394837386379195188 0.57375917857208524886 -2.9314689830176074992 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2896 1 9.9640184499618609237 3.4711567965220129217 14.573183239355163465 -1.9057152165214226169 0.28550633776235528893 0.61961173146183712301 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +181 1 9.9277661909952943375 3.1690444324256903386 13.459006112386012077 -4.0932063598109706959 -0.3941856940618774785 -0.12649787226997044609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2602 1 12.890305133032901708 2.5522523130607326358 13.765975958307091531 -0.062649099917365530521 -0.98718662112877397785 -1.5773185647164249534 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1534 1 11.541560112340933486 2.8394416323754549936 12.888546500551806062 0.85234694095858831719 0.30982822706837342963 0.37283577362330538874 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2552 1 10.94352235200584289 3.5038200928537599488 13.633187987401507613 -0.91244853796006852864 1.8883065802487237761 -2.0779021868916345284 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1318 1 12.036969072725915098 3.5865895066628104004 13.724723531671639165 1.1586013890914663715 -1.631395818358430061 1.6376751873536545823 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3308 1 12.302603086084214823 4.1887891126891032556 12.900634795620101514 -0.079568044228089648828 -1.8313478240620411075 -1.0182959927812837986 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1948 1 10.33592479759161975 4.3818446212274171359 12.969810389633238401 -0.056486603344171416874 -0.4591763267709462748 -3.0697665791048227568 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2356 1 11.357493747178045496 4.2284598358458413969 13.250743922738747571 2.7538734808521536657 1.2353197404072930876 -1.2340615292679215642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3930 1 11.903640387532140821 3.1005969243745292729 14.841551838956725362 0.087197550811438748197 1.4211676081364632562 0.33146590660194441558 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +163 1 12.309027510876951794 4.3556736927121759706 14.269834028584911678 -2.9925112664343109792 -0.083738921761548151812 -0.95708601069464660505 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +629 1 13.239162690152580737 3.3375418332324486848 14.732117639098330386 -0.76231135469913158254 3.7223028447396253604 -2.1321302688134400327 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +879 1 10.822279906204647304 4.3669161644385221521 14.649599211948640232 -2.4954603662489729388 -1.5221985671066113888 -1.5846806081251165743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +972 1 6.706364174503145037 5.6376765505542376644 12.616113605896181582 0.33729005884187823749 1.534954292682707333 0.54657937938104816933 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1596 1 7.6421212584949511637 5.0488202261922445757 14.317336664843525185 1.5652835112961509534 -0.32471129468384507533 1.303930117850590209 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2796 1 8.941295462877615563 5.8857340096034196364 13.5185646900183567 0.91078972702824245733 -0.24609745805701527255 -0.13626119697851582502 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +992 1 9.9169980485513153923 6.199810509663977065 14.004483550897978361 2.7241376289174765724 0.62346740611097317686 1.0577293852291755893 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1359 1 8.9914094156460784291 7.1447089628733229105 14.61696489857109249 1.2688697905895671703 0.3593185824443862475 -0.49040729384877801422 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3847 1 8.2663147802752821036 5.3468382071117135368 12.976827138099835679 -0.54530381779085046468 -0.83026884439266490645 2.7060840107508679075 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1625 1 8.7217880414733457428 5.3787136321919755133 14.848990161943026678 1.175815287432499856 1.1340351618306703241 -0.42393743354519142219 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3969 1 8.7021411978960863109 7.3735453391997936023 13.478366569807480602 0.0047112050634649177763 -0.6969587562988743823 1.3565156337817247945 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1353 1 9.8522776296915424155 7.1749608338932464591 12.626020162271760938 -1.5467699295114993863 -2.4157896805806591267 0.77371277400645033229 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2823 1 6.8912429112097415285 5.6787794344669686453 14.25801121106258762 1.1673505646359345622 1.0255469160239842896 -1.3113240918342981001 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3003 1 9.756144407564937282 5.1381864193632003079 14.348344809104604636 -1.8712339407723523887 3.0343820338183213892 1.2458488196859744956 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3784 1 12.123573849726319906 7.3800965503488153985 13.974299517045396968 1.847782280361617957 1.5448872312516308547 0.63345163040709207003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +89 1 11.277789465445369643 5.2374967890443748786 12.565136071576654686 1.4107243861736507018 -0.18655816993630189304 0.47458379617854229426 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1028 1 12.068608406739514294 6.144109120015548875 14.202495140764179737 -1.4055087135129551434 -0.39878370970848991961 -1.1666660829872621541 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3716 1 10.836325800437995426 7.3934018482588621524 13.287973732402930338 1.363710519152504963 0.0016577797544086831597 -0.45058883632263685426 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2366 1 10.238108841820528383 5.8129852294107813293 14.910417143217628677 -0.37055869540488750591 -2.4317828735549862351 0.68547102159359052376 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +752 1 12.838086307193943725 6.7662404310790229545 14.452937141398130905 -0.52906638617694856652 1.2393079571527265692 -0.2414091145215539469 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3584 1 11.256259663211515942 5.0565729087485715709 13.89658125132651989 0.76582091927114270824 -0.36572561957776195118 -1.6942915076257687446 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1539 1 10.330110647214738151 5.3554989790938520855 13.546406487742508773 0.6187656128663100441 -1.0873900738802111388 -0.028699863641123445068 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2654 1 11.913116330684294653 5.8588779293618058475 13.139793345870824481 -1.7228879084400641197 -0.13321783652892038585 0.52010090016503807142 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1629 1 12.743933130469546455 5.3689864210420932267 14.600436184100194836 -0.4202621119356510504 -0.87734558680575758238 0.52421116147919644135 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1039 1 12.917661190901448265 6.2728162375899145786 13.364001841528684977 -1.2123266058139710033 -1.7063947034587478857 0.66492560278376822147 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +667 1 10.105002557583487643 7.4093757388300112154 14.050513783482335484 1.9287443709989020579 -0.38693102007068069792 1.6016953815121637295 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1819 1 10.270482895437492488 5.4124373741545248606 12.571541365001678514 -1.9070760262921662154 1.2956897722786098193 1.7508253966371669641 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1092 1 7.2162491844213514369 7.7685622274050096792 13.619386609676285005 0.18399554296205114512 -2.3238060799290800595 -0.6000790156497886052 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3837 1 8.3433844363718208115 9.3267266212213968402 12.556258590607704662 -1.0674575577019986827 -0.99767803417144651501 -0.90978456433147236737 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2687 1 7.4298003622243431465 8.8036661309841424128 14.432524986513879384 1.4772642021832302905 -1.0083169183519886669 0.61049343128426269978 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3753 1 8.3943527587636044274 7.8297596498536803367 14.392797987957349548 -0.11222605504755543693 1.2397096978986938964 2.0280386812462043444 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +95 1 8.9725902801845620615 8.8008468362669241003 14.018829925827763105 4.0875014550508783628 -0.044872545625722855267 -3.1064123425007581503 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3501 1 7.326027849130926306 9.5786450596196477392 12.985500796564991788 -2.1880854349576033258 2.3092169530210586714 -1.2726077377703934879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +260 1 7.7931121552190445456 8.5904868564298144662 13.262969051867328218 -1.0986577237698189613 -1.2506020097879932962 1.3526057854126505298 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3574 1 8.4715897067722938374 9.8674767756802221896 13.492128773878960146 -1.6311325194594350485 -0.14879192641663036012 0.92804487195759588491 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1538 1 9.4211077511238183746 9.9983652221527705706 14.243725789638244095 -0.47293930130604483475 -0.92570153166759139296 -0.30774496634011860863 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +47 1 12.588495619280211102 7.8069267617673272497 12.940059925319074452 1.4484625341904178164 1.3968649917735853627 1.7199433003412374354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +874 1 11.662030255413226243 9.1859158759175425502 14.32715686270037736 2.0316782969511804069 -0.11148225677062675865 -0.051999695786292952915 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3464 1 11.601632546469305751 8.2973874799057067975 13.594456362485990653 -2.9912310493169771419 0.67318818425535398298 0.3322609008528893404 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3375 1 10.417994707498712259 9.4517765918239700085 14.401148495841088248 -0.16084754789380931173 -2.6141078094941816445 -0.87450931576104806719 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1261 1 10.950243607292879489 8.4953101042907714913 14.837857403674954426 0.15666073095114335656 -2.2419026158813935012 1.3338244535315448847 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +779 1 12.561548318765758836 8.9239090321058718303 13.350444690316377816 -1.2701751073394667024 0.99516437310264238558 -1.1241768734515138473 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +416 1 11.264117709844853721 8.4941065709021614794 12.70849200261910994 0.45507936389658421028 -1.4425978473329150731 0.57130929131414576183 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +363 1 12.966182324687915539 9.8902963317795347109 13.552279426059367751 -2.0627536683637752724 1.5303403892998710401 1.6915121927298721882 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +539 1 7.6983234299219276409 1.7660082818857654186 17.089889960915169098 0.29326898978955540098 -1.5745543678790030473 -1.0572524283945909929 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2159 1 9.3822150203947938252 0.80823433309846925976 16.186741447360986967 -1.6856928158369310911 -1.5455093971727353885 -0.23047245513750042045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2049 1 8.4879218021469373667 0.96955110082738793498 15.708561996845894271 -1.6914770956461093743 -1.0145510360803959848 -1.6283245084323920704 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2063 1 9.6940699117275119789 1.8327716865451304518 16.059031107789202508 0.60222111169555980759 1.6490592837281521366 1.1108557682409434531 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +678 1 7.3388883310098380619 0.65050695666040203591 17.291221949694879356 -1.0990081184359816735 -1.0511400140936415504 0.22167684435225334938 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1548 1 8.5745465595194101383 0.9335214533213449517 17.103328315673664406 -0.47033442022715199471 1.3202238731538975536 0.36788465245855295205 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3775 1 9.102176693444313571 1.7309124337996468768 15.030862070352361215 2.4077254929131752803 1.9312888523480433722 -0.36210738661885849554 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +518 1 8.4234507617393834522 1.9102637525787686812 16.387272016407020914 0.91595920462835989095 -0.90092800656272387094 -1.1060091649959822302 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +673 1 9.3258998267300068363 0.35216494901661032912 15.25163642630771399 -2.8306063880688592249 0.17617195281980085886 2.5598339652796244792 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2349 1 7.4229338018671917609 0.4761007903629976834 16.35813636066204424 -0.34595084277559623454 1.4473478124896261843 -0.17423090688959974592 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3401 1 8.1872787426780355702 0.038507633409433021654 17.184140286541818909 0.43046667423869067193 -0.17252351358510090162 0.71664684960931546165 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2161 1 8.6287950119177274644 2.0696663282055949296 17.444853813619157989 -0.41037285337084006276 0.3164625407892665554 -0.68678037030160921095 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2425 1 12.545274449019613527 1.627301864405710452 16.373752221495998072 0.89224005888634394523 0.57228620382964590085 0.80237616566174563282 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +273 1 11.954184524881288354 1.7462362652436860255 15.423578845368730583 -1.0406686093253838532 0.48102991433573799585 0.46478513202105703472 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3398 1 11.532387773530425434 0.17819193210527115023 17.306626196625195746 1.0319718619905897672 -1.9129580643067958245 -0.54695341759061433251 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3456 1 11.902258872085980101 0.1588749832008534979 16.114535895442525515 -0.57232926826298080591 -2.5935419346390897744 -0.099991381133474277476 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3322 1 11.284094223163618764 1.0404122765314278709 16.50293512392131845 -0.51181690903097631917 -0.17688302005415085238 -0.60540389248826298463 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2656 1 12.216400317565021538 1.5092910655444249368 17.395208021306956425 -3.0783135203343761077 0.050462404870941703072 -0.38192679512198679515 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1118 1 10.280592723852166159 0.57637870722460982087 16.917999975212392627 0.59768012881887466747 0.011186425728020884737 -0.13869205906139289719 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1925 1 10.397308150543416616 1.0096105408203834841 15.978607451204879908 1.6913555754680564824 0.44379705135694874629 -1.007596242096243877 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1669 1 11.141461074196396197 1.913832007419604686 17.085937855037109045 1.7309709218397246744 -2.3885909657302555331 -2.4575740355299116047 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2118 1 13.310870798778667634 0.077161209255189794343 15.832700913286432254 -0.26029836195844152646 1.1032922312618225202 0.69855299263844572444 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +507 1 12.783058093492535079 2.4853616084392302632 16.765178229363268514 -2.3292159037873183536 -1.0338633256633920077 0.11095751927824834548 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2920 1 8.1184582279085795165 4.5273208642768238974 16.729020275318408295 -1.1237443365150914243 1.3376899592021966878 -1.7237610059626726766 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3157 1 7.01466969880856972 4.3439558266786004737 17.090220637820756622 0.24634914247848252455 0.32645589317377932126 0.77047340621613991107 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3098 1 7.5551132935600495699 3.0354878086934493631 16.620341624569153538 -0.56312474111570676172 -0.95990030507934942516 0.29810560630538363025 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3088 1 9.4893482098634098776 2.942893695716004121 16.942639551926038877 1.1681698505422248857 3.0965968598131210499 -0.99166902627024988703 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3733 1 7.5668290510408073857 4.2171155378225897437 15.571839246378612387 0.33597032662403675252 0.26733408098827693422 0.36552167945519381531 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +728 1 8.6154362702441336097 3.3219583692649936602 16.444437224497850281 1.7410077968527155612 -1.2483565944670642622 1.2877176896865558664 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1228 1 9.1548067158324410997 4.6287630642428139183 15.470887881169948841 0.91534298836109673214 2.0060339047947879365 -3.0374903957415604339 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2933 1 9.1759784103364410157 2.5908049437714364416 15.656998579205712474 -1.0089527080911693258 1.2397611026257768785 2.0384786262533616252 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1472 1 9.7886014566737671316 4.9550662488273564676 16.241269732431277362 1.9884109313264779484 -1.4506971090581166628 0.046323090648694151272 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2774 1 12.477482723318667368 4.0268054284564911427 16.605894052495766999 -0.6796623262501627627 -0.026839220732347207621 0.59758083302488251842 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2509 1 12.692219879150593798 4.5266331416868963444 15.542273043227661233 -1.6694846156930363001 -2.1154334393317113516 2.5772798797078411148 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1163 1 10.966198932604235949 2.5183663389176129677 16.279781803630950066 -4.1226152896655001712 -0.63296823713078287366 0.41035824754712640905 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2410 1 11.402803631223441982 4.6013919456226313187 17.411419305879260122 -0.69050807806918335086 -0.93376332175831455729 1.8851707251429750123 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +994 1 11.377604844799845907 4.0834778343674438261 16.57488398609339697 0.34068025365203918886 -1.267744955637814197 -0.54861595984246658286 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +665 1 11.94897404640002847 3.4482401208641637602 17.243007447414864686 -0.56969702817956857643 0.75301375576300633163 1.9155741938489829757 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2348 1 10.945315824495231993 3.6154262114530708594 15.303316572242776417 1.9260674152890824296 -0.46484325228677270125 -1.1099839512797879948 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +471 1 10.774056998731747825 2.9250638106989925724 17.320733377085716143 0.0002357445326482235674 -0.48654950742088531879 0.084853961524868196098 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1692 1 10.164357243099978234 3.5988383922319036046 16.586731607863772098 1.0200001595576613234 -2.1769305962217484485 0.78081775634091465932 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2472 1 11.042579815789480335 4.8820201128433486915 16.028874068189768565 -0.20936980469839774899 -1.5225137609902921199 2.7670821783191286158 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3770 1 10.0908816778859034 4.5182059286617732852 15.285275995177881825 0.79832400271473358266 0.38726706366994101405 2.9264955375373751245 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3778 1 10.430947847870262635 2.733957234867163244 15.443688164014567121 2.8428746464943368544 1.4714658006563230419 -0.70796338051745399955 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +422 1 8.1765538565554400918 6.1257489649140861587 15.82782682303371935 -0.79147020783031019064 1.7392316137549210797 -0.99714417481348838201 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2378 1 8.0058252525212800776 5.4675406037592626518 17.118194659518138678 0.24246821114978669987 -0.28285939873775478581 0.56983454991028692493 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2294 1 9.5070793217870814829 6.7327716293994539498 15.315005726134906183 2.0268142037319805127 -1.5502888642361090099 -1.5262836510690545033 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3341 1 9.4497053695893207248 7.1598626646435556964 16.570083951800999245 0.10467163467241037689 0.1484694599366983836 -2.7229660825359176535 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2883 1 7.1303736163629487521 6.2875779807624150308 16.27223835901120097 1.6361044005396156997 -0.99857093671241636823 0.78726966430417699705 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3964 1 9.8225090994848915926 6.2476848213945128663 16.39752772916369139 -1.6870669040063732691 1.0021477906109670375 -1.1100989652149602094 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1572 1 8.6609763193927804537 7.4409050641825800199 15.637610000588345827 2.3688722520578866515 0.97286252865733713335 0.76157110704302732884 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3083 1 7.9290630647860096403 6.6012667929203452388 17.084260338107590371 2.384167087856777556 -0.76775533380846516796 1.8609918611844258329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2013 1 6.813607779376299689 5.0876479526571865009 15.872123159681933657 -0.1912689369603058076 -0.024012861362495696582 0.72497898378028968747 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1767 1 7.4325796055720934064 5.7448288062493624295 15.148343603926717194 -0.43062083645553733691 1.1235578395399672402 2.2228192790495189257 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2816 1 6.7799243838171259213 6.2371268522996876627 17.228091307960188061 -1.0141924119611431809 -1.3440952235163130535 -1.4200187769078631561 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3502 1 9.9040127290597226306 6.7037550048377392287 17.386332918166360173 -3.4563481729853586799 0.81615541338017405515 1.1285723997781094141 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2478 1 13.132559381192891124 5.0252946623055567699 16.434350133048056364 0.69206824582879078456 -0.086593065942640851107 -0.20856375893584166992 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1762 1 11.849941058841777064 7.0849578795192620362 17.077098125488344493 0.4019826165750175484 -0.19421441173886952458 -2.5371965300101257945 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3886 1 11.090765591368874965 5.9050609991859763781 17.18720115940976001 2.5243334734121201102 2.1860248462191811392 -0.81919543392546567695 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +804 1 12.325560932379044488 5.3086949970817736144 17.253640078414353098 -1.6736287397951798983 -0.090598747260707532258 1.0792847907433460453 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3937 1 12.971420870292750038 7.179845563350114368 17.352324172421241144 1.1581062288926307069 -1.7842292558256729329 -0.49443390071280068909 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2592 1 11.683881026502062284 6.7857050668011300587 15.934224264261514392 0.82253027272770717904 1.0619844336076136315 0.28165025517832525948 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2104 1 11.861891939984340993 5.0552498926389999312 15.007496814664346374 -2.8444552382999730433 0.67338499218384273437 -0.69790319658832000727 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1843 1 13.321323613927146923 7.2138399603388263515 16.18740294489456133 -1.3157046863365629008 0.76007766494251249867 0.54488209799352693707 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3194 1 8.575080991329471658 9.0401943825016477518 16.50315254976912982 -1.279036869414531985 0.64299629208384256884 -0.84067883135495458102 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2336 1 9.7156187681467720552 7.7550735568027402422 15.347128358405925042 1.3570778396781730812 0.049468722794702588152 1.0635464833571681709 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +903 1 9.4345434725312475877 8.1188827851133353875 16.244309506886587258 0.52474265237336370493 -1.9878337846298006486 2.07926467226251388 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1175 1 8.628707821014570456 9.9692747795569847113 17.288894884276029273 1.0298404993577461308 0.52183400900293508418 -1.6977412164803560302 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3403 1 7.8438647087450616979 8.3890788517299395011 16.180092152438383835 -0.76138985417616455997 2.8930350596552507625 -0.82680416425500435906 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +877 1 9.7638826518723877967 9.0376111920228776597 16.79531694137847353 -1.6243561784827025285 1.3753641661228328541 0.44471787741044443987 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1776 1 8.1070086638728504624 8.5362598917668126575 15.007827762297996088 -2.0934326511905343438 0.69066459692395643089 -2.2940027966064913123 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1159 1 8.7862737661381533627 9.4901217116186327161 15.299713975665895305 2.4808217059040664765 -1.2575927755520137641 -0.1902150864801257224 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2467 1 9.8514818602292351102 9.5363978784515737175 15.37355440630293657 -0.1844480962561630133 -0.49167819669398560301 0.76950567465488950436 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1580 1 8.0487270493286686701 7.9074940810203635522 17.02355186120102104 -0.95527350718143511088 -0.97206488005878710634 -0.1742663546188322754 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3735 1 7.1819156795084060363 9.7162836003937105289 15.141409678623979573 -0.77407119957815750944 0.22625832453216940254 -1.3623204567619502381 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1195 1 7.3523827755344770551 9.5323630630894644611 16.655517681289108367 0.64368359070574598935 1.0976415703857318462 -2.6931414119498264803 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +822 1 7.3459829588236935649 7.5182494095383196608 15.332202695938185855 -0.73261683003353461618 -0.30769267041129788609 -0.55398510473841178214 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2784 1 13.190207260325829353 9.8667709196712589659 16.86553165367943663 -1.8041943281761978479 1.8411742186442821012 0.20160359494283541792 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1355 1 10.934944537764232919 9.4583239282983893048 15.548630450667243252 0.38278411414008622904 0.39454326450836779694 -0.61409385315726694454 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1273 1 11.470404283693156344 8.0867884692525322521 17.001380296373444168 0.085537936661050445464 0.6541667887873053866 0.90999002400416961756 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +329 1 12.522858053677246915 7.8888236217248071114 16.41061947378572583 0.38035733852498065932 1.9324488449249199729 1.0731666271409596725 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3631 1 10.819932665702269858 8.383913745012057106 16.30278496718984016 -1.0039213793250563178 0.48772297671349440495 3.0419245589665666607 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3968 1 13.056745839866264802 8.7055407504435393662 15.951519314965509011 0.66501446634749339371 -1.0267333519171253364 0.48671447965143632697 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3041 1 12.112449529076204868 8.1433839849971505487 15.439349314190083717 -2.1142152429146294779 -0.54335417501474603252 -0.5804334863593834104 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3359 1 10.027138168739089252 8.0220434999981513613 17.394342568124052661 1.7688056328158205943 -2.3141614589677210745 -0.9192818117884239415 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3414 1 7.6750389674377155202 1.2334631658147483524 19.146456499392613182 -0.80726092260101733888 -0.26467137440166016438 -0.1226843593847536662 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1051 1 7.8468839512212493759 1.9359676728224997078 19.997463842131409706 -0.94145871895586841216 0.37211195591432488783 1.3212250669913179202 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +763 1 8.255292291293688578 0.51073144885657051351 18.170120602494534978 -1.3184003128723347231 0.23204054484826452942 1.577928909423251369 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +931 1 9.2510106985804458901 2.4179374028860420864 19.491590040861289879 1.1022608193535712306 -0.3628093352448409914 2.8427716944902741147 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1337 1 9.2736744599015068502 0.15821893167232603528 17.571441377870829825 -0.6244159067615511205 1.8066751314249005489 -2.2783278693057646969 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2881 1 7.9570216824430746172 1.9303362209549286277 18.587025220132943559 -0.5069243612601687099 3.3087311484709789333 -0.48475588976512407058 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +559 1 6.7045922799344870313 1.2081666330222182726 19.920389071526965807 0.82007599206777426204 0.70290087276911694669 -1.0986999225933891111 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2494 1 9.175870418672216644 0.87976819025650965234 18.749307981802676437 0.65202319092121518995 -1.6248152970597224964 -2.01119602187417712 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3871 1 10.469996661022863194 2.4347892108210626994 19.679665958021704597 -0.51386576126276095611 0.54910608591727261274 1.4757416053606640105 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2089 1 13.065733726891632926 1.369158668562578729 19.865746611844183889 -0.71481097903956336559 -1.4789336036940816665 -0.81768627743475563729 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3666 1 10.664819124064084832 1.3710954443050800133 19.038905496968709485 0.21713134627370742069 0.13037962077798928573 -0.27050403028532837846 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2809 1 11.452650141569243658 0.96691741440372602767 18.226701725926101716 -0.1330654652212301392 1.267152028772100536 0.56462376804587621759 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +929 1 10.535902676834611569 1.6917941209879066022 18.014474392183693396 -1.5354752875224333408 1.4407570720176194889 2.0204203678648009479 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2990 1 12.395770397592698941 1.4628281903901090288 19.030172218657526173 0.26148991807518606745 0.75273178509496807553 -0.37116492047936094911 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +424 1 12.902255618559072659 0.6323542846908776216 18.463901147126790647 1.6740468259245320226 0.54881667916682330688 0.67591475863888939024 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1100 1 12.411718138737619199 2.4270201146533421088 19.501008092391963089 -2.2151092856664345021 0.92973723989125611755 0.19844157928937178337 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +777 1 12.941201574594371593 0.36001661123992795277 19.747353608963802429 0.054625245881096677614 1.7508888541798528493 0.24109896089336591007 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +743 1 10.181136660312013476 0.65386040320119753755 17.818652527048943313 -0.040170403475047189445 -0.2578233674242993434 -1.6210940893224163872 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3802 1 10.995408109949822872 2.4635878903460994849 18.563150948195229262 0.28921966083244660117 -0.47127270657917114116 -0.62951378209691843946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2006 1 10.205813068291758938 0.4641658866628011193 19.418043814920469714 -0.30781728930905655206 3.9430935613420721175 -3.1785203529399073119 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2090 1 11.149230344559247996 0.60314857299098889598 19.926918420525407072 -0.17424076643488919935 -0.56297270778218044818 -1.6156864611068060267 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +150 1 8.8961234796997921137 3.869151362660779192 18.833812528954418042 0.66933844753035998121 -1.5292668639672921671 0.87021456951371500832 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2055 1 7.5963243557836817033 4.5826531543663380219 19.724523368174747162 0.92133746200138011417 1.9841258674096096115 2.0580298388132294285 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3345 1 7.6476349831512218103 2.6824312702095669536 19.197635653251023058 -0.29858819540662806524 0.059678020336905904242 -1.1983697424363675132 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1386 1 8.6419934813461036782 3.3227610643342475605 17.871032785612761984 1.0907135488205927931 0.55265473142303245258 -0.39125427992235323194 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3117 1 9.8405161655720494451 4.1722646194972243805 18.622487975631567991 1.5173986251161508676 -0.10791487625784125515 0.45979553133308748158 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2288 1 9.2876039800439738059 4.9071404109279219696 18.004994937721598092 -3.1140902899712004093 -0.53175520459506708804 1.5431380551254245681 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1343 1 7.921566387052451752 4.1769754676422090611 18.422924708140335781 3.6526939550672148371 0.1765324227088163056 -0.79073045452757906304 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1502 1 6.7489816150159027686 3.8397290895896190044 19.593097844269220076 0.84143078985858832386 -0.027437521295199985422 1.3851023418576882129 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +899 1 11.448991381741397078 4.3816565762117312133 18.784324143775503302 1.9188277795816361948 -0.073647921110448488768 0.23981460401875279165 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1754 1 12.303877400279905174 3.6397217917024433653 18.246914476490907475 -0.031919261871473592063 0.088536183858833800153 1.2436084486116381065 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +312 1 13.125511959597233158 4.4857442973509398243 18.341633196420136898 -0.42473465986036096353 -1.4647720457808195427 1.2438172277581411862 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3674 1 12.162671341381695811 4.2702068906100523193 19.476959371960685274 -0.5936593812082836541 0.90779213541899361761 -0.2914602417437091586 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2376 1 12.844014367424371414 3.3987418011128442963 19.613083419518897443 -0.88240044245817028656 2.2123270607395273402 2.3155723518585653586 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2489 1 11.438727894519448824 3.5685237971742669316 19.964724332221940983 -0.23245978658885738111 -0.068303340926170019731 0.51544264260255789889 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1431 1 10.627742268805469905 3.3261024835059678217 19.359210790753074605 -0.64249268463275899244 1.0868670009664926912 1.8288881860127252921 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2250 1 10.597442441089638621 4.8153888184255357885 18.034343068263886778 0.62867245283785810894 -1.8445131878412273085 -0.0052207345575965447698 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1437 1 13.288619705539689519 3.5714446704817852662 18.173694161646462675 -0.31104431723644143659 0.36206232796346909941 2.2449652930851642374 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3960 1 9.98711064114423408 5.6800642715319380471 18.089940988721544102 0.80431089882387785117 -0.21161840761782174658 3.4241534410259770738 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2813 1 7.3702998225704057234 7.0413700536258305718 18.201320872910397242 0.015702685100628062387 0.70735102017248085993 -2.7080620283273533211 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +353 1 8.1061145635785987196 6.7151813002115039453 18.995738345664769042 -1.6097241845361378587 0.23602074043984744289 -0.87086023445422999778 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2246 1 9.2288403942748047371 6.01737424064703319 19.897357272844232057 0.24098467874309054126 0.48927756791758109101 2.6738954510800674313 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2051 1 9.3749678281038288929 6.4763498792730160858 18.905420560534032859 -0.26004081329976669323 0.85939214897116189551 -0.40431465152089901549 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1410 1 7.4910338429251392967 6.1420246537569722634 19.843731295888467514 -0.69769542027582864829 2.7399610619597596362 -1.9414245987116738323 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2520 1 12.124998032502817935 6.2577508217055157758 17.63620512714500066 1.3585165185270553501 -2.5050489059300109496 -3.2910406998992036698 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1788 1 10.713165086480275434 6.3913519309279251956 18.169913940704951472 -0.43090482428279941463 -0.30377852666491733657 2.2790019084615988909 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +135 1 11.598731567942076381 5.5480897888130664697 18.052184117316649292 -1.0001973241837069928 0.93002174404647874884 -0.30646848354111461132 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +458 1 11.673948056254822347 6.3219496861434532065 19.016505149457955781 -1.5496455609329811143 -1.0914472357918703072 0.082132059935971918341 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1445 1 11.654047300753124006 7.1243631134308911257 19.876701240670076487 3.5537685581658609024 0.18258611949414338405 -0.9360040446170470041 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2024 1 11.043637881208432816 5.6639460644982007054 18.868163866910812487 1.100506527259097922 -0.71474637447219979691 0.49600863532566408232 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2644 1 10.53211257157564873 6.6749814532562217195 19.100225357314364771 0.60066376915872465858 0.05795999491116487351 -0.27602831245948833416 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2204 1 13.207271002187528808 5.7386133265219783084 19.151004676447588082 2.2895673212353182535 1.5337230274453899082 -0.060585253882667056136 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1617 1 12.066989518889190691 5.1832014816897729048 19.06217882584521206 -0.79456716506812874457 1.5851328403215665386 0.36698820387993752457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +910 1 13.062295581394632649 5.6884052031707712516 17.945762277284551089 0.12061321069635436154 1.7101476459484450388 0.96920409219123171418 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1178 1 12.708738059620843686 6.6569380251753020872 19.792972192538840659 0.60625689851388919749 1.5976300312484004174 -1.2389325254669234511 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3068 1 10.185088224039123617 5.5430809476423998916 19.335124223391371601 -0.1776323559131649521 -0.96715854033480608276 0.01901524828673833642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2862 1 12.037996118975899051 7.1454190520568499068 18.440112315770836204 1.7067911817857173151 0.084758566585705755192 -0.30769474713475641892 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3054 1 7.7952170103863149819 9.8508574461664917266 19.186236502674027804 1.0060280778129973012 -0.37605817060248331041 0.39573577175651913906 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2624 1 9.5880541542338058036 9.2291391039906205407 17.745873549024164362 -0.16545708925531291134 -1.6240463578575581316 0.63031033842463157768 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3468 1 6.9190933684548303617 8.1408974124180435439 17.673983227137696872 0.65228948191678204349 1.6287470071157437168 0.68881809810165350871 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2703 1 8.8319666467263253651 8.4260920200830966564 17.519800845067898365 -0.44874986008705153306 3.4799369589688549098 0.84880805489133026587 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3085 1 8.6545845539028043447 9.0960947899520778748 19.468414226419834989 -1.0606327412632416962 -1.3718235299209753375 -2.0814424596550593627 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2136 1 9.5823718518303451219 7.8938602306045098089 18.5474183763496967 0.18968168341377650288 1.0391925915412860704 0.53546140576344758433 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +774 1 8.1792041723274255816 7.8662977691817843606 19.341215069524661629 -1.4387865431143618267 -1.2458543207926007224 1.3363237161985015433 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +759 1 8.2940118769121848885 8.7621611383369071291 18.496904006468760429 1.5796898060029469502 -0.15849087442263706804 -3.1160950472821560275 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3485 1 7.2135823665837977003 8.3841875537517989159 19.424362943098035572 -0.034511980278896417507 -1.5639487667330711496 -0.60036186959524939777 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3793 1 9.7815145325842447477 9.2592175854247038558 19.994518011818229297 -2.004124441339418361 -2.4128105149363823223 3.5342768498793524223 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +720 1 12.066215613563526787 8.6015345782046921386 17.855629311308252483 0.26164429257913701665 0.11341400582504043704 1.3336860492551234625 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2379 1 11.216695606073805891 8.9748909634575326777 19.618272281200848539 0.18770500503141937521 0.045892684541970533985 0.9659359800438527266 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1854 1 10.391599284610295584 7.8356716624755193834 19.347548334888454491 0.86033965925661559648 0.40741064357858169931 1.375223951024255431 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1373 1 10.708639617436373825 9.1978222045149458097 17.629843637826546399 1.4206460848136046593 1.8882823517395401769 2.4538426795199042019 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3032 1 12.305723521032373213 8.6824916141401242697 19.525744758100714193 1.1797727554932182503 -1.3666437479610573646 -0.6557773788687866201 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3879 1 10.822399262570510103 7.6824848388302271474 17.990189149374341326 0.85585703988781736129 -0.57494492893406579093 2.2689418309130497953 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1800 1 11.256351725017557541 8.724505867044737073 18.549173813795814425 0.33507565874450567778 -0.66484484336636195945 1.4522351144770746512 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +49 1 11.576421915983491573 9.9613720662973612718 18.955585297986292659 0.60095518439684414425 -0.04494112344646678664 -0.9659680035251796415 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2674 1 11.475771663394883859 7.8447091746831407733 18.97713252656648919 0.56800591115291787503 -0.45520778956231372492 1.9337840360869880119 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2884 1 12.974854006121587346 7.9119151988748406268 18.144457634529750578 0.89628723633917661839 0.85134885269365667693 -0.80722866319221775466 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2138 1 12.737848972155450866 9.5292335077053120784 19.100243082556183083 2.2771876999463778191 -0.91892040119862461456 -0.045624127622068480492 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3636 1 11.560915174979843556 9.8394187703085833618 19.982542224851460588 2.2467417173023780386 -3.0712023860858734814 0.5241577390649428958 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2302 1 7.5981267280224304983 11.840596157825867607 0.12689149081188305646 -0.74109591600746116402 2.5640193436345408706 1.1464973717411066634 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3955 1 7.9023298662819954075 10.592188116274941834 0.69737185875516394251 2.3523175245662226729 -1.2480360780679784494 0.44858114087446365748 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +533 1 7.9334048603725095816 10.599685180876205592 2.448209317671765195 1.3843139480196413604 1.5884138105565519528 1.0789557177534123689 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +156 1 7.0827109218652566369 10.548796418595999924 1.9320538425859072884 0.76814766988833282912 1.5113385076962639886 0.79639806393749901225 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1473 1 8.8409457593319906721 10.518861893765606652 1.9103253752478346339 -0.27468381192047247596 -1.7412403747184488356 1.8706431367380504938 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2019 1 7.4100957659784878473 11.666646071484532143 1.7312605194830448241 -0.071651131574355764187 -1.7677031906987645815 1.8198038520463883927 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +99 1 8.2788877096365212083 11.423861519627868333 2.2106908352276857244 1.3085366545323138254 -0.362300325928015865 -1.0025000381264399518 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3573 1 6.7907129999199931092 11.266331570442357446 0.80538454781525548043 0.5171349383974320757 0.72623511070824753322 -0.061996202874025706231 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +717 1 9.1614415943109293039 12.123757993283156509 1.6783674285933127823 -1.6116073410265823185 -0.39341399945190724807 -0.89254653044705056786 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3713 1 7.9071315717855812366 12.403701397410985763 1.4064134031691728488 -1.3391958806286121675 -1.4477175231041041759 0.74060758713756957849 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +898 1 9.9477413413743374093 11.507077570290894286 2.2453201705213294836 -1.6833854552635321156 -1.6144522083108578947 1.0001661297574147014 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +626 1 9.2603833996358222436 10.051281538914222935 0.97693514946534298904 -1.4668747887867124025 1.9065186275206360556 -1.538180475732140895 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3785 1 11.031676533718393074 10.69049042834645924 0.44870178689585382692 -0.88207443317600786603 0.86462575741452862843 -1.4979819517581762778 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1974 1 12.440545649254078242 11.686413946622330684 1.6767118531280760241 0.040044352222286930254 -1.3674443961111952817 0.068111044520844404859 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3185 1 13.30299147259656678 10.250263537159288063 1.066362322721798872 0.4109096167767509189 -1.4941311024999730517 0.84004141725810710373 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +445 1 12.785593746103877777 10.041428616942152274 1.9238265858511174322 0.79470423850528748577 0.36490596591860785525 -0.26045888073693712617 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +570 1 12.688362470721060049 10.279660497181314582 0.11969673021937367319 -1.3938959552194361002 0.12363660574559807992 0.59442887469845206994 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +251 1 10.774551329799992416 10.838832512787679008 2.0945335514830487611 1.4998939583137829157 -0.76860450752629749793 -1.7305943525948768169 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +264 1 11.715841631696278569 11.284464333450507922 1.1173015887245518751 -1.1148265423845447053 1.8938704816602160985 3.9727619632653317083 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2346 1 11.971199037675326338 10.046986556147524894 1.0571388453183363509 1.808160009863249984 2.5380268288372507257 0.42059599124424518202 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3762 1 12.686518323064458258 11.991034871387022065 0.019044388632950704637 0.33258460916703835863 2.1686437109747065399 0.49022822083687700445 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2228 1 11.426471204947480587 11.686884966822143284 2.2302977742718281817 -0.71407503062824229101 0.78414588817094121875 -0.38241152520153831595 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2108 1 10.022277585259569577 10.037295233485142631 2.0841510060722425735 -1.399029384050611613 -1.0464384305139582398 -0.55760509530255220056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2745 1 10.17447966632628642 10.579445128307863655 1.1453317864700380824 -1.5920238829503396971 0.20130829510047096309 -0.031899173624430988971 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +917 1 6.8090163990770431468 13.656495796692253109 1.4240855146370510198 0.88994404083016220852 1.8681698427174890931 0.67546887551711387587 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3601 1 7.9743848144137370326 13.790148399837708126 1.2244858936758040713 -0.1152882878205899464 -0.057502189448185504761 0.81617208993319689814 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +337 1 8.9188011062380816441 14.437987078552302123 2.4375317196435490885 -1.2437287179539140425 -0.33673529062220536323 0.70669265787182822258 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +996 1 7.7622484798802053874 13.497371832835410643 2.2146893831681659925 0.27652972060561570311 0.19951778370307660104 0.93207712210310722512 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1013 1 8.5241850265331997605 13.01795857755326935 0.57862208941364623449 0.77648396585412515769 -2.7928292186677130537 -1.7161830182817678914 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +440 1 7.141163651971996984 12.950442987223871327 0.70648135050573235283 1.1809487124886886011 2.8370204015374400619 -2.7367462427086906018 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +934 1 9.0902837572221724116 14.268923213006669215 1.5185948734484471245 0.41115117771753245668 -0.89964986393547485832 -0.64021427654020623965 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +943 1 9.6225467416480192639 13.17080198361052723 1.9223462503443871086 -0.4252622178406625375 1.3088773775413313771 -1.0615673947680270839 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +722 1 9.9115337642825327436 14.864839900917310445 1.5858010313084041076 0.92661014189443435818 -0.5349505684628881319 0.77844187533135567048 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2960 1 7.9449716668843315404 14.900648332631799775 0.30971088825296821945 -0.27253944198647339636 0.65683357292069133315 -0.98090528030937229609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +35 1 8.8912453999985210373 13.87999747016484875 0.35352918930122290142 -1.9097179073458399046 -1.6527296117679943777 0.39078768468135921532 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2072 1 9.7892349858084291014 13.724630137192296075 0.0029994286698717519818 4.5695193562828553269 -0.81442737808747223127 0.87098440279203870329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1141 1 12.23405360541146436 14.682167553843115115 1.8886690583387832909 0.016459037522059648262 1.720660720047354042 2.7168192688299344084 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1274 1 11.55569043053638012 12.590695523450786908 1.1922774022167488273 -1.6084150022850149941 -0.82750011457931360592 0.10833017273554496063 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3640 1 12.380942029395379578 12.992164516681917519 0.40901485554266170386 2.2901246369482164411 -1.2812962848364266577 -1.7536278057877092706 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3405 1 11.783794215820412532 14.517176203955632019 0.84625162284584565242 -0.73004024253566268676 -5.0333342236757436794 -1.9690362524030442515 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +123 1 10.967875986425404733 14.101230887956976545 0.096015031898653235842 0.56011760620894390783 1.0738521693676155166 -1.0655414081146148408 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1053 1 10.358410621179668709 13.989117515029064975 0.9812030277367069786 -1.2854614378118069951 -0.48744509416089482068 -0.22803659676641280241 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +549 1 12.948621556100968988 13.62648665835233075 0.89773634092675924645 -0.034327828664434491268 0.43932292059227112668 -2.5617547962040676524 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2162 1 11.390032157401359214 13.690096620592738574 1.3381261811953615304 -0.054270416039639092498 3.7781771345736170353 -0.15904898513771759117 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3210 1 10.664448847967641143 12.899273121023790978 2.3956891843838294953 -0.25437308652516821272 1.0148222592076499016 0.33698565141628289421 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3175 1 12.777098104906459142 12.758078840365369544 1.4494756699862634264 -1.1666352883157751208 -0.019926767462203606729 -1.6482697675108468616 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3542 1 12.671012832643937074 13.378042261754909958 2.3143754943637993016 0.089302999540320324168 0.71400903757221945156 1.3048448292971506213 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1023 1 10.616427769317111185 14.190043212220762925 2.2815752768029100572 0.45387090227786686114 0.20775997497435183536 -1.3448966333439185128 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1995 1 8.9420427117717053989 17.260128990383417857 0.45194727021051894766 2.1624989203331712595 1.2865943252292917354 -0.16764384177065599912 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3576 1 6.7020077636876971283 16.794188217436570199 2.0047030740443450014 0.6503275814343125738 -0.21919652074029449818 -0.70936203084424920284 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3851 1 8.5686824143429820566 15.451353943435549354 2.4815945147795042125 -0.64862019931861603084 -1.6206780681969572555 2.6971334074062927044 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1667 1 9.019398452992064108 16.650709714845579157 1.9050357358766145666 0.48837855451291467546 -0.67437901518213549945 3.6375916252506508286 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1964 1 7.5896398338481878554 15.085574664713137238 2.0209028963989528194 1.711819301074559263 -1.5420171648573564038 -0.96267662613129467708 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +468 1 7.3458272085824996012 15.766751707889509859 0.52453214831336891777 -0.4757604157386480237 0.85360743377356973483 0.95978219523374053157 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1691 1 7.5746241025537397462 16.656808566574262898 0.33644269321021008645 -0.37936898762725584922 0.20081850188624261744 0.28665998577101969857 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +481 1 8.3642234612585877329 15.268268029822356979 1.1880850269251501672 0.29073104588788389879 -2.898406589251066201 -0.99806492034185068096 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +68 1 7.3731457226451881937 15.966481668938941496 1.5885558018463785679 1.8296974038757403136 -1.1127082051547703134 -2.3026290132175866177 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +693 1 9.3271417516363204214 15.673837407699585 1.6402014987726172279 -2.0219135658044473658 -0.16185606301636210058 -0.16804655537698659495 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1633 1 8.8261478951129159753 15.366258472420810222 0.22052111612500435722 0.92408933915983448859 0.60559267170105957057 0.65966751494849107385 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2851 1 6.6881864766619694151 17.146179849930419437 0.9653559790650808603 0.76765580335863559114 -1.7150304848255422119 -0.19905958635529161227 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3610 1 12.225223946107679041 16.026558398679018325 2.4088860227211670306 1.2887484068623387135 0.77798441095220105534 0.94561489031446488429 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2715 1 10.124748166732274512 15.783235526687041883 0.53086694749250307179 0.44638963334775066949 -0.58236814949050286216 -2.1342124754274318654 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1961 1 12.258099897414854951 15.338041361968171472 0.41997069042818924167 0.74195994794287722929 -0.27495043741128444292 -0.30089022582812618989 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1344 1 11.497593539403419882 16.073712590571460623 1.0387042230217333749 -1.31060568420950041 0.7890283371671784618 -0.14997269285126579863 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2205 1 12.794929310223693619 17.191606185520800665 1.9733822495195507685 -0.059054151386301677318 -1.0729308083439133004 -0.68188242832650458602 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2190 1 10.819762594179737292 16.541474391799891208 0.10567600798476683988 -0.36127331457778932844 -0.25077658208928255146 1.105036223016290009 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3429 1 12.532609107117719915 16.179538764925371908 0.90895944735515532553 -1.0451065235553065325 -2.5834301231906904306 -1.1063746827603060385 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1379 1 12.993497372628104003 15.860746133281907078 1.8034391483563139147 -1.0434779958314497339 -0.34794476201334934018 3.0628683855383553869 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3017 1 11.236265902125294858 15.195326561131196286 0.055782959012516342145 -2.7422480580721910748 -2.1771041570439155777 -0.9359252092438921089 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3183 1 11.107657150735505525 16.480962266947539518 2.1370881128180041486 -0.47724968182547633511 -0.73444792271198999778 -0.35535003218315541762 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1496 1 10.846533013062792605 15.215984379395370851 1.3016479036542678571 1.9360760769298148709 1.0579908797068124926 0.75156314641536225984 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1585 1 10.052699736708598621 17.272779526967610764 1.6520529658081792856 1.1522981589067551322 -0.63720024185079471302 1.0895405791881160873 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2074 1 8.2722938311160199021 18.429053056328502436 1.0813298775310835609 1.9919702027905126229 -0.11692837790079897708 0.82044860264242636116 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +718 1 9.2562907627036654645 17.908724975841931126 2.1654859966510353608 -0.53834034195398638989 -2.038752672321058057 -0.35124955203175090013 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2054 1 7.0787120523710669318 18.73912909482636735 2.2600028052355347619 0.67359965274926114631 1.1684256365597156524 -3.049626821012573874 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3769 1 7.359214410181782462 19.150322479193139458 0.94227678489965693842 -0.24646533191253744421 0.85463412160465890288 -1.2427205953202615785 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +464 1 8.9656329788907846989 19.136512269809365705 1.7174918235329592608 -0.95790199545275944715 -0.64303283910228126175 -0.32878210039832400646 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3590 1 8.6107043758418697621 18.575940563177766762 0.17834894168719900298 -1.5221946834161976803 0.6421052951374730533 -1.5737317114851865352 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3055 1 8.2003220359335440293 17.646748098903515256 2.4270155109970144025 0.95082237965015370396 -3.1803784197011690793 3.0369737009261932315 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3513 1 7.6470812027769268227 17.635813255351635576 1.3808443124880229735 2.0218992819720793541 1.077334729041897976 0.40314466956458300251 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3247 1 8.3577027631758546988 19.389495092302972523 2.4819160212042956637 -1.2311180420785514666 -0.21153129055880331988 -0.9740473580814208443 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3360 1 10.448732644058669194 18.423023332173443123 0.31790476478741747091 -1.7249971456721979735 0.04459276581750010876 -0.41084114044023140044 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1292 1 12.214076969809699591 18.533832998664635738 0.44287482193659394314 -3.4199753216315471605 0.74386080953990385556 -1.2383489739050317358 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3073 1 11.917378960776558117 18.744103919661672109 1.5725937335581583465 0.55423167329897671252 0.56551603179626475093 -1.0614249105602566736 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2437 1 12.120430462276914341 17.580284779678077456 0.86938882911619874694 3.3215481953982588514 1.0248201398204439538 -0.22138461993415906037 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2859 1 11.443973195419289368 19.3895552579359709 2.1896153214851135083 1.2478391410502669423 0.47366285331413821025 1.7464816336080115633 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1429 1 12.570082208741528262 19.026448140907401552 2.1882579695783883622 -0.49257487991655041215 0.41499025104527265118 1.794857577859136244 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2333 1 10.893212162596485726 19.260977523535792955 1.201003192870195857 -1.6668948045215308262 1.2098202236250166219 0.59169352864497137823 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3604 1 11.020257402445237105 17.727810723217942268 1.5519190699479479267 -1.5132354967542547275 -2.0951757297417161752 0.022567265100754813761 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1241 1 10.380405191345689175 19.682120854730356996 0.41553997147391003031 0.20780128264087974199 -1.1289182783902107499 2.902347941994549263 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3990 1 13.16470689675267991 18.017907320507628555 0.49404096144925851997 0.36060645763354626236 -0.008202002872474670539 1.2344077428380788586 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1244 1 12.235650940281830756 17.911346329178158499 2.2854041004666743042 -0.64895215418930274343 -0.26461708309149306606 -2.0902271286591993515 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2045 1 10.131533757439017407 18.550746953565877106 1.1851669834835434347 2.0100437456908282208 1.969710394067685888 0.47389406096791891754 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2498 1 9.8348246401435943653 10.423433015121840839 3.2809887647340807426 -0.18314355670851709124 0.26473383680645912186 -0.48028864051519332135 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2585 1 7.2812993758911437325 12.205334043524850074 2.7782552347028928175 -0.58288829851193246778 0.87416089939927477115 0.00041964577401993599301 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +384 1 7.4440452863552142304 10.827839587383989439 4.1876676962013519301 2.5349147893190622227 -2.3968955502215738562 1.0416525164645300539 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2801 1 7.1160946648824268124 11.033054467417169775 2.8932464064806642234 1.1794205588206032598 -1.4206125207940152322 -0.050224256690559444805 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1239 1 8.7823133873960816942 12.153204087737067951 4.3197438304909034912 -0.12881630020541368076 1.6405047387163249617 0.65935359601898624327 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3196 1 7.9139691160681264748 10.30671722195736173 3.4182538438107497036 1.3027201759155386807 0.84239673798720038356 0.037817384762929416586 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3268 1 9.7794959695074670236 12.242558864864145463 3.2665221021238606269 -1.8682195611547334213 0.55467453049202453119 -3.3944345466582270809 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2518 1 8.8208201068166207648 10.562797136666688402 2.9873362162778440698 -0.57932724423387937929 1.140085619758830271 1.7680157680870527415 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3943 1 8.3966364981189034467 11.402143467111173436 3.885433886319515473 -0.6178395459484723462 2.0045496835033027594 -1.623252423401615907 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +651 1 7.9521018624949251219 12.227014777184470162 3.6343399854751381461 1.971452901608821362 -1.6065641205160807736 -0.11608719524414615187 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1834 1 7.2305023372912247126 11.494150452763133075 4.9597537595758458551 -1.3536871805737926699 0.25743261126717781329 0.41173468330068752064 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3195 1 6.748240387876927926 12.301637581803325006 3.9335805093791518239 0.58135656981426986345 0.33308376321096661021 1.3604423025325480534 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3071 1 6.8447835343279992415 10.113829711128914823 3.5547375231623559166 -0.69917807833674761042 1.0820995650674913868 0.70356203078402868023 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1746 1 8.3014283788466070035 12.462620970478042182 2.6134767570275796444 0.66178670033521702631 0.50760991049963732902 1.4416541496600856487 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3855 1 11.979975515380482776 10.799480715484197191 3.952083624833579556 -1.8933844127725849571 -1.0307027675375310949 1.8945018356216409838 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3670 1 12.678437111728809938 12.215152017876524937 2.6270268648626178276 -1.5557583708402715761 -1.9580707361880798079 -0.62415992860121971564 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1615 1 11.709563438321886508 11.816168701592745904 3.5157496666712200195 1.5341917334372687787 0.46786093879874579571 0.7571158378167669456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1486 1 10.932900389625689996 10.190050342439368691 3.8391404954350569767 2.0648158803482203894 -0.35455289649985344269 2.1260462814975706891 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1894 1 11.051256032762935888 11.144924225278243668 4.7576388959997970574 1.0118867250579328676 -2.4729666172961866089 -1.7417655618377618776 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +96 1 10.371057403522129903 12.093360496478767985 4.3541572809206625649 -0.70288428088152110629 -0.034999766847783997381 2.372703114717273909 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1492 1 12.491458721454694825 11.141917871418101527 3.1082738939804337441 1.1559739440880330008 -1.220811941489357455 -1.4232390960154308601 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +158 1 10.678114545056535789 10.112972337260403677 2.7930215463839140888 -1.26539077485873519 -2.6557027338016525597 1.4591075093072880531 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1741 1 10.228127805441474152 11.102095842698144423 4.0032077307222353468 1.6769267440694393123 -0.20108636334004545421 1.1710345746061896488 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1287 1 11.638543901924055746 10.689279818252410692 2.5058957591762403005 1.1568699798083721397 -0.18212878960618719693 1.0959567599574642216 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1705 1 9.2281743077060891522 13.516623610685966739 2.8877104711789010061 1.3395118476341458802 3.1241643867828305936 0.17494695531947754286 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +351 1 7.8984989205825231195 13.541165989817791626 3.3152836775404259662 -2.0528031601084117952 -0.94135986019252460011 0.52462630964776557629 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +552 1 6.8943303904250639036 13.325870725542625195 3.9081822959945298201 0.13105968097220430102 0.46910078434588831087 0.75206008912154276302 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1602 1 7.7237669651779441438 14.542614560086862596 3.0342075006723576713 -1.0322120782055281829 -0.43283091245826305071 1.3060518878054867553 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +30 1 9.1257131392804407 13.383959162029112733 3.8487854895779030073 0.15226553285929875226 -0.93356191695746204573 -1.6602272167410963011 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +993 1 8.7726753814330376002 14.389964582883500555 3.4061886666289424852 1.1615036785899583993 1.3289340760510570671 -0.46880068763055721126 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +338 1 8.7985256168321495096 14.398270250210451593 4.5517759701721951515 0.75308637357559826686 -1.1248267404445040363 -2.4632929300959682806 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2704 1 6.8787136815045855087 14.782631301118797751 3.4668941910569377463 0.11752535876983244423 4.1868456524797252882 -0.34853572765280693702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2453 1 7.4767206450309089405 14.597858781514903015 4.7166211424890001069 0.33315939498103291916 -0.21909987534647404339 0.95154627088441601224 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3330 1 9.9714209793457531106 14.355571498402268205 3.7525902564424429286 -1.2139053074882175665 -0.8996778911605690654 2.5519818696623559617 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1312 1 11.619636519731136204 12.955169751923488519 4.540560792175322824 -0.082144178935043679624 1.4627663240679400491 0.47323252475637617165 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1508 1 12.792789142930743651 13.933767365698274787 3.4731335495025850157 2.728042179222560204 -0.66541825669382437258 -0.038529390920455222624 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3279 1 11.090572493149132072 13.818286478420017005 3.9632845301430226215 -0.56864707476845799405 0.23781012776303200873 0.9384078478278244928 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2943 1 11.670079904286415839 12.662901900487536722 2.7889777586803865539 0.32763908032200017573 0.77890291418584511884 1.7529508835072460382 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +470 1 10.28527813742412711 13.608124998853593723 3.096271871376558682 0.65568830827989632581 0.71052408981495529527 0.26043920538572934431 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +765 1 11.852881136742123402 13.934925551536077037 4.8768134091658925655 1.3924513837686951501 1.3547994057807926094 -0.46696670467984513486 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2534 1 11.99035423675250378 14.535034998081171054 3.3159663622781576642 2.5814710559328832851 -0.89948535918496941299 2.8142654890672389456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +466 1 10.95299614933483312 14.837955665115345028 3.5574024281230531841 -0.47594132815702561157 0.76705234872913019561 0.97817131297382331478 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1939 1 11.401115779518152138 14.885808036027768253 2.5960696171953889788 -1.0565826011310235355 -0.61618357544950264071 1.853956760336920917 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2065 1 11.516398633744982405 13.620469051663633309 2.8619934277366652076 0.25011123465126466892 -0.97100711240257631118 3.547086985795772307 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3628 1 13.021514216989491075 12.666737361321745325 4.1102583031094557242 -0.4226017421224229631 1.8463875684486683593 -0.088682342095176683316 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1795 1 10.946076032551296464 14.939336564240539573 4.7105349451243458958 -0.033541467064268561116 -0.89581631829079377827 -2.6646332854076533181 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2474 1 10.032195265632942949 13.13023130495846047 4.43613764333109728 0.47784179910196050711 1.1483855164420952999 -1.6470424421779927826 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1325 1 7.9180627170411899129 16.212725264475132292 2.9207244743636140427 -1.3093089957506613974 0.7981757522968746521 0.0053434792291849955714 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1334 1 9.8255557756305709205 16.381485785703741698 2.8209747152564723649 1.1550428229364282373 0.31099432766350798563 0.91819733769583888883 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3438 1 9.1165296539718045921 16.52152618749450852 4.2078851642256784871 1.5680481264656103146 -0.44471840645844817885 -0.098891689740201446646 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1901 1 7.4213806473983936485 15.829461453508912427 3.7808421528206395124 -0.43066434602242087415 0.47450366767338381102 1.8216112761654903451 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1101 1 8.206471070135119561 17.315879297107230173 3.667442492315906577 1.6039312418732192267 0.80947740458581374234 -1.1967654976008088585 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1957 1 6.9351069065829102911 16.860311506118154767 3.346985535426521885 -0.82222640240592193006 0.50879286946518387236 0.47443548733949741925 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2365 1 8.520918390530267672 15.59810337328601193 4.1825543981152231154 2.7564936005333042779 2.5891138771553294795 -1.1901340394398596256 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2304 1 9.1560633734927776572 17.444080731872865897 3.1013858268114615768 -1.3158090749812789699 0.0039052611230755052314 -1.735831962067197809 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1185 1 7.3169047487313587652 16.782054685962293661 4.6328387023525214872 -1.3863879956040974228 -1.321786885896612862 -0.66766847131115203418 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1889 1 8.3402668017535575018 16.406315412695001044 4.8361523140275384236 0.66606673767655999452 -1.3179405897257361335 -0.56353348304146522185 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2903 1 11.224563816166964969 16.644081366265751853 4.0839705231978200572 -0.020502792543774069761 0.059105965690311276783 2.8396209754357726318 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2605 1 13.015394573046274118 16.524890239633432287 2.7705237979753625233 -1.571730968194794853 -0.06354699891035192616 0.85952283490475445138 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2180 1 10.536582891712248156 15.643402616800605287 4.004559058041433417 0.17612396548939576735 -1.6069503768201354177 -1.331628363846202312 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3378 1 13.025257920797924882 15.26496925818249295 3.1892331462350105298 0.042107753621017797452 0.4368975540424865911 -2.1121611839198881633 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +811 1 13.136552565356199196 15.767548252739835846 4.1241650786888390812 0.84986618531432467361 0.82457899606633966449 -0.22433853133367298582 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2652 1 11.926584703581045943 15.771046741938818059 4.9075775823925473773 -2.0522268465692348194 -0.28295315975304774492 1.2422252156106017296 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2983 1 12.536433653050176318 17.219126698087130478 3.2197060738121261458 1.1076157775019284113 0.65767855090879834279 -0.615549178910936301 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2977 1 12.329334907392238918 16.984796813924109671 4.161321858550551589 1.7401536970616975353 1.3871072131173960429 -1.4785129149962330519 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3486 1 11.462499320291886562 15.834666036415015355 3.0089175317165435253 1.8507980498643361589 1.6306931671620354951 -0.059612298367814509081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2877 1 6.7343529516197753182 19.2468839568748038 3.8480849161704551165 0.36203129657631821781 -1.0359497472597807288 0.37551194418451377954 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2957 1 8.6376598441152214747 19.836629700538232157 3.9364505179920783462 -1.5879895187563120018 0.28849160208885937795 -0.679216597994585225 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2909 1 8.9723594670038178123 18.928030530196846115 4.1731938312017664572 -0.080282011166136812985 0.41666299492870229049 1.4535988772212773412 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3176 1 7.8686714616701323166 19.374002584813997174 4.5028130576772786853 0.44703105567572087864 0.70922839803489334809 1.0434155000358236176 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1270 1 7.2935231494573828925 19.754303693596032332 2.7425175748737511405 1.8903498554588538116 1.7442971177770689728 1.1822105201857944223 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1348 1 8.9819524628459213034 19.770423129454165689 4.9181634634397584094 0.18122717265037882606 -1.7112091645425582254 2.7984751952088640081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +192 1 9.7117770819136719496 19.682790397931984927 4.0384668295407433192 -1.4072152024392063918 3.0234160016974400698 -2.2987012877530195176 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2891 1 11.667209239990620873 19.137613804889809899 4.0724041906583634542 0.20230714729823215392 -0.49673658045996893495 -1.1365156461738408211 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3298 1 12.869328088099218022 19.230899002345164917 4.3589917363774679515 -0.12587926350382167007 1.0849765418760486391 0.86710819330425015217 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2504 1 12.053565800657239038 18.232211856289744389 4.3286504545186490489 -0.66663402676870242569 1.5130515283425638451 -1.5001995615932535166 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3725 1 11.689725537602367211 17.765845655001733405 3.3756285019639222789 1.0711168111971041128 -0.20707440466116686095 1.5162602424336102391 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3179 1 12.703815467526164085 18.183590747927279807 3.3371044662180664453 -1.3461198125726339114 0.34712347733254272919 -0.396923820535537486 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2515 1 12.806151022495837921 19.371039404006207718 3.2144104422233978902 -1.9670862758404961124 -2.7479463892398574565 0.10336744989329837985 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2215 1 10.639866406439931978 19.450611706983725213 2.9070287033973265522 0.702958819761347109 2.0204864961192305906 2.4684541012776555213 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3149 1 11.00244436203714038 18.022187830825085797 4.3303722992903361799 0.79079583182781165718 0.015243077645132194903 -1.6609476747009246367 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1676 1 8.2294792299459089691 11.772374820311927834 6.1449607516126807383 0.70205302448571094143 0.90018399748768529456 1.0796187807799515479 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3972 1 6.9814686201494851048 10.688745547832796845 7.0315490873680008832 -1.6952370442178568144 0.68021521145845154077 -2.404503456797928429 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1731 1 6.7694731743663432155 11.571989199521338421 6.0918292279243866361 -0.89630518294077798913 -0.045049298759253529612 1.3542344756965292163 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1317 1 8.1407766344078673626 12.148586043178664085 5.0307898231119381194 -0.080121302690188966888 -0.63361102287017012635 0.50059184949140400622 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2736 1 7.2764123862407732446 10.354732907533531261 5.7652532751213119155 -1.0548777152295569781 -0.59104193152901984831 0.77273638874101402418 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3942 1 6.7640853206069904147 12.249951750100109393 6.8097053371399072219 0.13725162476377564258 0.25158615729634042912 1.1263477295409725087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3747 1 8.814474881885601576 10.984559929728428429 7.3448920113819351485 -0.23977386957531704459 -4.5683404757655594608 -1.4033692584855221863 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2148 1 8.502836657934340181 10.72643721544937101 6.1919213102975483309 1.6818864713145895706 -2.1120257938885322879 2.0044098299535133556 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +672 1 9.4719838054768494828 10.311631785573499798 5.224773718946675416 -0.3487822783404486704 0.18201424922822609376 0.8352469300506129013 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1668 1 8.9563012524935992076 12.314272546289052102 6.9864079269024426111 -0.83248406343272562946 -1.7663433709778537661 -0.70218070876188976026 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2232 1 9.289090021112222928 11.609675726178471322 5.140389544462604654 -0.63005499284237054258 0.29203821080465247606 0.012301523355910417429 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +46 1 8.324079032906757547 10.085051436766631738 5.3963010419125119199 -0.5875553156504296215 -0.25161881488519655115 -0.64595731060350669583 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2420 1 9.7390985355108998789 11.047088302606962174 6.7808495781313444795 -2.7552395645956115899 -0.15757631073231545549 -0.021014824586204128298 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +208 1 10.295237474805601252 11.80129621237994364 6.1708149034199486493 2.2794624602291637672 0.51256615544516048733 0.36999316451883906831 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3458 1 10.768370784173617594 10.707187010181387521 7.152785218353507446 -0.37543157877914473675 1.2380724613645206489 -0.90020716621174912131 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1696 1 12.666192830224407118 12.23586767139457443 6.0706789849809705828 -0.17273646304601950052 1.7420952242338230143 3.0883051687898861459 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +586 1 12.665350853743996495 12.366323909592681574 7.3382046536777538748 -3.08012316187148949 1.0676557453997290725 -2.2170744538096824883 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3923 1 11.720781548872688305 12.442945623640436992 6.4257132929142581901 -1.6097619696387608368 -0.65601145237866631543 -0.15119595782041542198 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1402 1 9.0754525889235075908 13.486046090724151725 5.2603156789873146693 2.6078639799584566461 -1.7290843289530786198 2.0610702565181759915 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2864 1 6.8549491243419797826 14.664236420100948521 7.2885152456153097233 -0.13757611313973849843 0.54496444809501431994 -0.59197775257240914382 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2732 1 8.0958741873854940252 14.320708481974678605 6.1999486109423695979 1.4640274265653987484 1.0660258620905824767 -0.89157004749253676579 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1517 1 7.9727222062472451469 13.725912982808624818 5.2971253404576730262 -0.13780171360984153073 -0.67133484784536967549 -0.43905499799474845268 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2172 1 8.5786101187255017209 13.772219681150586368 7.1688840188881952642 -0.64047877568197286724 -1.527769522168653582 -0.74036544848996599377 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2848 1 9.4335233809139982242 14.734700359448956064 5.309265632034873228 -1.3093646991743759234 -0.88493155176078441837 1.5891013917729777116 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2305 1 7.9345613068566667181 14.850403201934293307 7.208722121203244626 0.033913037877674412357 0.26800118175919296348 -1.0304012481051432193 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2451 1 7.5059924538590196974 12.845074222753481763 5.6205125930830384107 0.56337159763971000892 0.31228411117718823942 2.8998859193087658248 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3522 1 7.0538459608451873351 13.978941217224576832 5.7462972766949054204 1.7330986631077109905 -1.2819830583339111296 -2.0240574458488662657 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3952 1 6.78573052726946635 14.99296532290416728 5.559115671259717395 0.87419491544057403853 -2.8616096858740052156 -1.1471203623429377938 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3875 1 10.543490101813343784 14.375193487487052835 7.2338758467421220288 -1.1806732928842762487 1.1499732715048578413 2.3679551586375873207 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2310 1 13.198966967759798052 14.289818776075978946 6.1339590818690874485 0.21265768898080625315 0.28546774649336414953 -0.63410719572011042811 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +177 1 12.383193183915462754 13.92102214728047116 6.9003952127945824557 0.44545438688607774669 0.97558265728872906042 -0.61183004266187490661 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +477 1 10.153061877902324284 12.72370668775149305 7.0553821626085548857 1.5296026811949519075 0.032118469571297131315 2.1625410675134610905 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2507 1 10.811829987364331984 13.975147743784596344 5.8733060203012055212 1.49920635300033811 0.36538391195456543237 -1.1074357579481592939 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3431 1 12.663887075388817749 13.257428408083789861 5.9112897086535785007 0.84148861972620780936 -1.364331045393906372 -0.90910474211668890199 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +169 1 12.87559176560259111 13.837600553129043135 5.0085607722094422911 1.655200160161848455 -1.8232384788592137514 -2.3239742688561371153 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +282 1 10.103128476816429782 13.671213698382860713 6.3917030932462806092 1.20476592554562556 -0.7059568354602433482 0.70157201032899019211 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3729 1 12.348165975566088193 14.761538174979442317 5.3794724920312422256 0.26314227591979266752 0.54614589095085985804 -0.61679255254939957531 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +130 1 11.178259218196965108 13.309095393200323088 6.6875223865216142372 1.1724791011359658732 -0.55288233605887260325 -0.19458171497238829772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +483 1 10.847852006094701238 12.672952949872131612 5.4278457165814630869 2.5117148855444115796 1.4106801918352906977 -0.6389800544849559838 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2757 1 8.1628614134223678178 15.47340735867216388 5.2772186629027935112 -1.7388840366868201226 1.6591939602762550976 0.96217144848783486832 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +984 1 8.661875879359914876 15.712241553800293303 7.1341400987690795077 -2.0645862987639365116 -2.2495346331245422711 1.143915427311792854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2044 1 7.8466341556106122823 17.208297901868089497 5.4745328124358829669 1.0885091247419680371 -0.46172094747981196061 -1.1546304827106601554 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2181 1 8.5466779769928944432 16.011462788495975929 6.1749279828709999762 -1.0874749678849087164 -0.36240635367831763869 -1.8620914464435875946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3104 1 9.8942703865688432785 15.698695234377495922 7.4892780326898922283 0.60708344416286130762 0.85475612234919051691 0.55912314653191552694 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2371 1 7.6137438294962569429 16.470970197694835946 6.7163265488644574575 0.42671570463818470076 0.43968261018313331556 -1.9619258718796295238 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2612 1 8.6573807363075641064 16.776681274906142249 6.7215282435100540681 0.90330510639723038402 3.6628116527047187567 1.5658957847264751706 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3459 1 9.7970654242889239072 15.480519215845648162 6.1355848969134347826 -0.024315130486285346095 0.017466531471507232981 1.1137878444133859634 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1858 1 8.7640718665461587733 15.044613813282607495 6.3565306335380675762 -2.6968657899137635781 0.61136061156733256805 -0.53985282230774578327 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +350 1 7.9849621769727674447 17.39978734974138419 6.8836792555701231677 -2.0532957112359215834 -2.0240648454894487607 -2.9300794340874318777 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2578 1 10.905778222806112865 15.557113435652059508 7.1167296369620602903 -1.3555286442862830576 1.1592886733617226991 -0.30741339395651179345 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1152 1 13.21551791076172222 15.54450939362962103 6.6975495145824099907 -1.2176190796027983598 -0.096324274851445568224 -1.547982643772637168 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +950 1 11.860085453057381599 15.323511065425508448 6.3866938087356821541 -0.28399015632879748283 0.098757963177274046829 1.7862387811993014619 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3018 1 11.297129905496669622 16.304203461647482243 6.0416804526323932834 -0.66637932610665329136 -0.78280847411952259041 -2.4887777932852488405 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2209 1 11.815227464739091801 16.833745423852224832 5.2125838383196789749 0.47388628270817306776 -0.51577756337607483239 -0.19740957802594200077 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +248 1 12.29426406307616304 15.555625691433359492 7.3217581531112916338 -0.84049812004742385785 2.9067625908446710348 -0.18402084653111763779 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1586 1 10.955877704309882503 15.200765688426979949 5.9879976722878867079 -0.12665070472047776362 1.8065951279553427167 -0.25243867258647334495 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1397 1 10.71594540488396774 17.461531301729248611 5.1692388134750899553 0.085397376869377039643 -2.0386904236463929685 1.6923236093822899839 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2106 1 7.9387062248381701224 18.726337600434781905 5.9241751724824975867 0.42883141714259026545 -0.054920949615377044617 2.7135677765502181913 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2627 1 9.302535909569838779 18.762709740810397108 5.7018177801303160379 -0.29558068255186054074 2.2945991374050431766 -0.34000838741549094246 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1094 1 8.5563471108922986019 18.530249988019853902 5.1398314201489911923 -0.95435255649183925453 1.6071252269064657536 2.2554239462220118106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2889 1 8.5254425480494528955 18.367840321637199708 6.7213445552357065083 0.50694539895713253141 -0.0050012900660728739841 -0.91430161241296892261 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +704 1 7.1663175045347440317 18.156667077653263931 6.6407551571909690935 -1.0151357317609659425 0.72423996620598474205 -0.0070171221244302887585 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3307 1 7.0120011825501080693 19.641060116578792361 6.8572024567393388139 -1.4722422836698509929 1.6952713655219169286 1.0142257702992076851 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +691 1 8.456783986401429587 19.359672197194036869 6.8970923090071751815 0.046178685432893974705 -2.0905742810559377887 0.84922342885374346722 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3719 1 8.4534521653839753697 19.89436197732374012 5.8970503717141706801 -0.70853796628102527766 -0.22809593794201374339 -0.52517902019465811936 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +796 1 6.8345606778942302739 18.385849271498354796 5.5754825127389393558 0.40350094135407027496 0.20553112172385695766 0.13463095281319972796 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2623 1 9.8361071749487027915 18.008644358730371948 5.0947463776690060655 -0.11850287222687626298 -1.4238092948995422216 -0.91225430281378039332 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2298 1 9.682699680999762748 18.354321685887828863 6.6641732359108303285 -1.7351678447688796414 0.022493559935617812168 0.40641806797969654008 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3110 1 9.084511872119582776 17.501952191390209634 5.7178778823075910864 0.76814017598641581852 1.2133043025155021422 3.3180223922741602927 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +976 1 10.494540327091593568 19.203363512880830655 6.8896769660063821306 -1.4765756926752973133 -0.33276274736248856456 2.025656190194727202 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1710 1 10.563902107793351703 17.937742457956176167 6.1733260222687542651 -3.8320990025637660104 1.8287934571015613816 0.042506041312588879744 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2030 1 12.484742756774100059 18.601252334254560594 5.5283636643281139911 0.32703766654480953546 0.30260886380972096266 -0.62347412213248054602 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1719 1 10.557318075227408727 19.362115130914023808 5.3622168888298773481 -1.3764716116156916481 2.0516519979772320781 -0.8915096686238711543 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1750 1 12.383055970305305138 18.938343660078480468 6.5728604892782884761 2.3995789120354671375 0.061353598916265406071 0.14473354996568196795 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +938 1 11.362144287225435235 19.6257200894369781 6.1847299134268007847 -0.08245217540837669612 1.1230202440343279857 0.42538348252061075616 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2767 1 13.186391526047772871 17.887964394105516419 7.4931087283242625574 1.1875383760297884006 -0.49133001961464883856 -0.72599107011547336921 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2239 1 11.669535438180759002 17.951963027864685785 5.7743513438544322725 -1.6389960008724679952 0.043113445152260378157 0.047972548347059877638 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1816 1 12.662221575437769161 17.759723672489148072 6.254181306325748757 1.4500203011860746116 0.83763293161608476378 -0.45710657571970531032 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1680 1 11.169166098295209011 17.845555235830936169 7.2407318158014595255 -3.127770687349117118 0.43761093964125602485 -2.1604861978074820783 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1812 1 9.4547085566527719891 10.69653456538714309 9.5514876575961800143 -0.91005354555304351916 2.4605366418771348336 -0.23495338333469203973 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1850 1 7.8706423669111096331 12.415790641502482572 7.8018611894376386218 -1.2767096744087036431 -0.76663135164052242931 -0.60797794660527215704 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2259 1 9.4531680126835180289 12.390934484472420962 9.5797051755776614357 -1.0249593278185769041 2.7783111854544024766 -2.7946255279561711404 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3123 1 8.3576129338250666478 12.007008597070468525 8.9681768588580030865 0.74756002704744484166 1.4933078680887492684 1.8646974192005809634 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +93 1 8.2231267133583134665 10.577434666050352874 8.978999539735843527 -0.073085821739643785921 -0.48081803075661583291 -1.9448192167299620525 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3915 1 7.607663035703522425 10.806318256422523305 9.9719321235048745677 -1.2512985050426956857 -0.31986466662249429804 0.39973204444711357697 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1497 1 9.2455059972406630209 11.448500382690133037 8.5611625735735259468 -0.71806151837696130524 1.1091624305965290809 -1.4443182972684245335 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1433 1 6.9325461018750687003 11.832771691198171737 7.9080580695958131443 -2.0515142013874303473 0.7229943996595081801 -0.073839447629095542047 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2221 1 9.8965551492098722264 10.740086209443690635 7.9211790712088170352 -1.0401982344507862965 -0.67719757790441892364 0.41155093667339737173 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1915 1 7.1637345918371373443 10.424397952285742619 7.9856471991521251752 1.7307131834034861217 1.720738038136854664 0.072753252452516500859 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +183 1 7.6735357064525260284 11.203387646616073781 8.3526204548097950919 -1.851671276404422084 0.92701976874336222689 2.8026562192598802881 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3293 1 9.1035185898010340111 10.040293585999549464 7.5714300288418021623 -1.0638463888170119898 -0.46763950634953510566 1.9634036155472744944 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +377 1 12.255279951506352631 12.30145025509674106 9.1454983694038887165 0.058130211654528758658 1.0932427128046087184 0.14064687877194814725 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +170 1 11.899832535237818476 10.290160574737802435 8.1734938596501862662 0.31219068416476880579 0.35288275039877164962 -1.5217620154950739497 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2871 1 12.971668359345818189 10.62589073219518454 9.5792290027283968357 1.023330854652007682 -0.17839093896787153182 -0.14848357871310463585 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1388 1 10.129382610051568037 11.336552724417806814 9.2581652736590083208 1.9353144720253210309 -1.9134189581344400732 -0.44764303679649253276 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3988 1 13.023168336653396793 10.604895891207345215 8.635769270223001115 0.35124504592197908215 0.31841080911742558612 -0.57820492589337335598 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1922 1 12.131751355478984422 11.166804391584117084 9.5337912441035896904 0.90851463080646177595 -0.40083822994304108001 1.5366954261412169025 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2058 1 8.8133445943225012797 13.000181003470553165 7.9756085537738430347 1.9838386962765510724 -2.5607529710907903642 -1.7377960273118631118 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +109 1 9.7743846565109819835 12.563661914556313093 8.2303712780300859464 -0.62541312642642188369 0.1661312467027115658 -0.66735112725131129352 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1523 1 8.9670129828235243252 13.632488911917036489 9.8251040778862837044 2.071044418801410103 2.4924546905088518223 0.9690365688260478283 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1191 1 8.1778517140095434712 14.014815729993117088 8.0522551613252542069 -0.82358175618272444485 0.24311540548109683568 -1.4256712996811802263 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1360 1 7.3325076448736350443 12.756372024329280634 8.7247650007493380286 -0.74632318897013538717 -1.2271858760668572508 -0.9459108833300367003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1272 1 9.3432502554896803559 14.064539961930327294 8.2727775201870805688 0.16959274664447629433 0.62722339384250147543 -0.30127058556155345004 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1000 1 7.04616342070342494 13.574824423936483697 7.8795777037340259952 -0.61958013891077012847 -1.3490275711482873078 0.52925384530726882204 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3561 1 7.4606511715022651998 13.939910402500022002 8.9157545055163716086 0.049001724800554695427 2.0780129098371418195 0.7050729213921078653 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1674 1 8.391927268538839968 13.374034264012227169 8.9345768370761913246 1.0019490069030780877 1.084222574753586521 2.3786071519236000604 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1835 1 8.003605294217788213 12.78988371926218548 9.5460672517965665662 0.43660504628655083526 0.66477244196740581383 -2.4685279157998154531 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2722 1 8.6766149865085449022 14.873850645064930376 8.633142032827961998 -2.1710616591921931828 0.99188073040654922696 1.2062321541178173678 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2026 1 8.9027931022795900873 14.834545634962470473 7.5515344656932512635 -1.9226400334901907474 1.6029040795909939021 2.1995654026584068319 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2283 1 9.964943966317422408 13.579680512106902412 7.5078746458334899572 -1.5496228664436515476 0.86474254336943989774 2.148265515827055161 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3581 1 11.084934516634522339 13.708271568263432627 7.821114806055465607 0.44510841551855262477 0.51180678571134052834 -1.785806176905170517 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1768 1 11.122585357274811457 12.571028690539254313 7.6042016468994759748 0.83945153688106610712 -2.2833952581232912493 -3.468984450136372466 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2741 1 10.274214364884798556 13.894790181661972994 9.1225767832030673077 -0.73145745153508745506 0.080810027295166342309 0.064057851029098500373 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +799 1 12.038356201642132604 13.783151963446359289 7.8695279034153289288 -3.2362784968342444003 -2.2248503060611248827 -1.1160836048992137659 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3234 1 12.19768589801696379 12.805306977538448265 8.1119396148744993269 -2.629080005382734786 0.81615570427826089617 -1.3165799762700716169 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2635 1 11.705829806489974843 13.353417736732556165 8.6702364956558497511 -0.037301603885839695884 -0.46415974307660856635 -1.0390241050048565352 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +258 1 12.20258173887904718 13.630451802447099752 9.5203862285020992573 -0.8304048600671002367 -1.6061762589321628703 2.8942125356953933846 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +436 1 10.999334560339793398 14.352680690728425006 9.8291569749878551221 0.3070474829163629682 1.0742312102103506177 -0.5178821277461860273 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2129 1 10.701708419741430944 12.974398577184288683 9.1956231825069458807 -0.58987075233441776945 0.85539014333803087275 -1.9775157671327041609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1306 1 12.762515884058776905 13.698081344334161358 8.5777373274477248799 -0.65376716310808169474 -0.53318201895033223714 0.65397407921694850064 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3446 1 10.044729895039834489 14.867740909886791201 9.4344362895162223737 -0.17504591166251515233 0.55208920088217083855 -1.8852256539993073048 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1393 1 10.163496723313580006 13.163618159933273333 9.9694003315054935399 -1.4141697914988307083 -0.022451010462604815976 -2.7634408264224883389 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1503 1 13.167207327232697267 14.989645027664886712 8.9403292479428007056 0.82956962957598978647 -2.4727624851643499326 0.34738217216695599365 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +295 1 9.9439870232964739927 17.069174464531926105 9.5817176663999870101 1.5016998638435830049 -3.3965919891969784672 -1.7862610751997742842 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2698 1 9.1127372286077363839 17.387004704920268949 8.5354337506375799194 2.630329106607583789 1.0951812579813406945 -0.84677738171739524997 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1570 1 7.1300595551372136782 16.942280676979819987 7.5905274844259889022 1.3083325976082245123 0.55418199140941781788 -1.8249438320365807265 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2670 1 7.095759513809055008 16.380921175388493793 8.6333208155759439961 0.41424188534205885759 -1.8835108775556104188 0.3040955991812743231 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1114 1 9.2466393411005896041 16.419901455608471252 7.6682442298856576812 0.71077746570819611005 -1.6858198239601123181 -0.10549514057860299998 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2806 1 7.3351820027929655055 15.94164902444543408 9.9548786464803065144 -0.38694940479252526444 -0.6538957936783089675 1.2590885367318447319 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3667 1 8.6428035148057453796 17.211268647433151102 7.6763651666760885917 -1.4162380342055074234 1.3946587683571169958 -0.84191726054761728548 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2187 1 9.2959441804713627278 16.304818212687205659 8.6714050210028243981 -0.7576746564586600563 1.4157315672376500348 -2.3889109627359355059 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2347 1 8.8774659162047129257 15.273935041037701055 9.5734718426163478711 0.10022921606567405939 2.1633236370664463699 -0.70038434946646388468 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1563 1 7.6477269941876224735 15.073405027856844995 8.5394881650953919916 -0.046515460716495073135 1.0724693759528072246 0.47338128199967516307 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3833 1 6.7239311827302588043 17.160158588274502023 9.3726738072808597479 1.8887202181553515157 -1.2374119318911320775 2.8834991184598952607 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3698 1 9.0914350414973270631 17.416054664928385165 9.9581547197189017595 -0.74849400022664414056 1.5850585031277817372 -1.3773811289731099361 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3318 1 10.579141197099007243 17.011793704486432688 8.1180136382827772223 1.4478629485427449985 -0.81316060264294454107 -0.49551132698207484006 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2199 1 12.889375744707152194 17.328279111609063534 9.7537064208834358681 -1.771409167996814471 0.56242023328275558836 2.2466336052070499107 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2220 1 10.380777152139112118 15.88615455382288566 9.0786333866490025457 -3.6518477219625182784 -0.10762672121057757779 -0.022759423255690011678 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3575 1 11.531148139007344255 16.105032650149190943 7.8443131313818073025 2.1308031518017505057 0.56860294207583250703 1.7777000452178621792 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2384 1 12.666810217477799227 16.811578728394547255 7.5669096796108883396 -0.59020611240250342444 0.062711074914330311447 1.1723196360847805142 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1880 1 11.805467803171453056 15.20474270830686514 9.4685560328439297706 -1.206879564053074505 -0.59359452332882933767 0.96388913190999603309 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1818 1 12.626170398128678585 16.268419020399349506 9.3523844529631219302 1.0582072497874930317 0.77726823798215738393 2.1030441386007252547 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2678 1 11.330246030389751866 16.658898150898405532 9.5803797943241555402 1.5068589978966742127 3.2549115342516672378 0.32093697006923027626 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3115 1 7.9238325385704015957 19.553388951242787641 9.7031153314316149761 -0.96057538659947228066 0.19321004795169674506 2.3102230393335276837 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1056 1 6.9216656985111928435 19.674110696460360259 8.8821352995088673765 -0.66902221645718795706 -0.56838201614617955837 -0.080967553414601739492 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +753 1 7.4767073176603382478 19.763922028780012141 7.6462284703035567901 3.0506935462497395406 2.2003028599096370321 3.1340073694773256108 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1055 1 8.7795578860602123683 19.534510513062770087 8.3846192926717488803 -1.1529759012070381896 -0.40620637144888227521 -1.6174511422081996326 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1145 1 8.8132787889776658119 18.529182449243592146 8.9315686525588873224 0.80016420071836491523 -0.14429553213997597938 0.48855129912730682618 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1589 1 8.9036522536620381629 19.271647653702956404 9.6904111431704027524 -0.36745678537446285761 -0.36169009697762483091 2.1521741080857328399 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2588 1 7.8786700867289001238 18.538906602080860608 9.5618710926394374638 -1.6934541020847635462 0.93857979687586257089 -2.5592683823620592243 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3565 1 9.9675074077429943742 18.744855510763706263 9.3512563717085601667 -0.47297091070685370884 -1.719463176029389917 -2.3270574431382775593 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1075 1 8.9380122552173073558 18.296362589596803616 7.7803910550222852294 -1.5204795010248124409 1.3932554658802345227 1.219039887268974276 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2802 1 7.860607014232513734 18.009488276793739203 8.3169522803153022039 0.56357931379344383682 -0.26398291781414429114 -0.31119522635811835976 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +747 1 7.3336684636513211899 18.806862526560706783 7.6759706939225749167 1.7281061916642841414 2.6172657261776688387 1.631097911890821317 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +503 1 12.000400135547122815 17.983147884090232793 9.6565289359391268675 1.3259239917519318741 -0.14559257908551528904 -1.3786733919815845617 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3189 1 11.218734502389668961 18.466697276355859003 9.040417738803755654 1.4092649525504827857 -1.2493267745867824292 -0.72006595851501586925 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3036 1 12.025878636198422456 19.381022645925785497 8.1832458575120323729 0.89170612406416938089 0.1190272153999790139 0.56196710703936958442 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1732 1 10.672886794248789499 17.570406742358787966 9.0159591046169804684 -0.00074241027928471611027 -0.56322952544545634712 -1.503482450018519101 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2330 1 12.549820309906497329 19.086191719972685377 8.9647255923824804569 -0.84721339060391631648 0.91555039409369898262 0.68640623129679467773 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3343 1 13.046227926025778743 18.992732173906077264 7.6181901689971489589 -2.0993696830697783362 1.9039950214040268772 -0.40519330334603670396 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +612 1 12.209374520707987344 17.612249961441314383 8.461226637294361197 -0.54117011353752741964 -1.1234906760826293137 1.1362248358246687108 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3660 1 11.267668002518139048 18.775272661229269744 7.8029190722855092943 -1.2360082206952587303 -0.34532594907569263976 -0.058358839692809978683 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +174 1 10.334483694851483548 19.66090819225600228 9.7662279473901794091 1.3537727458887340859 1.3620151835026692577 -1.8442859883295545931 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1040 1 11.121144693404408699 19.428581242838124155 8.6929038774369207232 -0.84953886288108448888 -0.24709491600865304828 0.35855151065329587956 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1520 1 10.257675064238199525 18.399646430101949335 8.4212683181509095931 -0.60047403307160684971 0.45569936886048967306 -0.26414055958713034133 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2456 1 11.738680422296523531 19.185562943294147686 9.8738495431603077179 -1.0278772597339822514 -2.1769331442205710481 -1.0468614227237800218 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3047 1 12.657332006962585425 19.901393681221740906 7.6850664480561894365 -0.12778915796173087593 -0.87567729891095402728 -0.42049811043858581483 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2926 1 7.4356906785739580457 11.36332052868328546 11.981811367696474591 0.9905203046283791446 -0.44459969514949815306 0.45737856308090141244 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1774 1 8.8730221482619313633 12.368244329167639606 10.782191308612141256 -1.4874805989311237209 1.7983168995583547201 0.66631943966113615918 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1972 1 7.3448073594792777641 11.972811679421031528 10.376408437897895354 -0.81263525886656395869 -1.4877985564633016136 0.52158221838146567872 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3469 1 8.492763658203246635 11.444015800764470114 11.751448955960990261 0.44815690632687027462 -3.0719661087683185485 0.46104324584326805692 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1877 1 9.7389815958607481861 10.591692743757493034 11.532700548098254956 -0.22097328229147927825 0.46746547292278600727 -1.943823346004853958 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1605 1 6.9317470994205834245 11.031588883831707548 10.572191335694828496 -2.0422828223378912682 -0.16322105890441068743 0.34601537582318409036 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3993 1 9.1347190786774330462 10.801893891892603961 10.667888771956741678 0.64036758529275483731 -2.3769071665931069681 -0.5402795913069453615 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1626 1 8.5751176094239394132 11.680492880479635076 10.025418575598385118 0.1100534786887375216 0.16136056882465699136 -1.5791735664609174439 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +269 1 11.070176007921464389 10.824198598235335922 11.793194253070797828 2.1343643724479388624 -0.80265136015241600465 -0.37277069281593366856 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2531 1 10.326439109003208827 12.443658509108756149 10.924235321468415805 0.45107409891593147622 0.81223361202264232617 1.2268443733559997177 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +556 1 12.633176906457372013 11.730659784715362193 10.569919894522504578 0.79382369672207631073 -0.18566388699246197391 -0.77947762600417891399 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +175 1 13.268858705716398916 12.465211145452339991 10.474395789820333036 0.074344218277902995862 0.62239953933449065904 -1.4386082715401264931 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1336 1 11.745967244401690266 11.590568361901642191 11.619510799064963535 -0.49737692179879572363 1.8741875274545773955 -1.0158444625247418092 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +966 1 11.572454510057585964 11.608680348181037445 10.225976378802018374 0.79504971711048155747 -1.5820675505440473518 -0.50014186364630819348 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1946 1 13.125896047234173025 10.551188185240166106 12.424663131288964379 1.7761134284440689424 0.44131310644770671558 0.75385137130375490244 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +906 1 12.757704823668525762 11.573869446743136891 11.930838833068470706 -0.75082435339412112452 -1.4088666743630291478 0.39020329941057552148 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1381 1 12.517688832216331107 10.844269847607892032 11.227786255956125672 2.1433177937473977259 0.83751923650696513679 1.8397567561102114997 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2626 1 11.091912328483243044 10.788962847295309189 10.27019820792619953 1.9009482336263343605 0.081341617112148378865 0.27962469082303320622 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +423 1 10.115292841929012013 11.58405155814311982 11.759980266206055077 1.7537870776668111894 0.72932429334406745358 -1.8224358338634529808 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2426 1 10.471407943097137405 11.27716862603368142 10.825976179761928719 0.19509480312919882938 -1.0887847054923587287 3.4738733474908567445 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2519 1 10.43241150078324786 11.950678983073606432 10.131295978954991455 0.35887676000846413515 2.2411923529849380188 1.6395727214283222217 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3132 1 12.908805868637619696 12.433992657191335951 11.462346895207986108 -0.76361476743874145967 -1.5119331637961272996 -0.49754577943251854233 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +44 1 10.029918020918747956 10.388798369433684954 10.622847011653986371 1.8613996061442057428 -0.89321515856283462131 -0.86348368241526474165 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1314 1 9.5946040740232607646 13.849687377412402967 10.602980805010371768 2.1804991720758613027 1.3202105880436030283 -1.2121583688731918382 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1783 1 8.2456155929131966786 13.011621126258908987 11.572127600830643956 -0.73917782013600374924 -0.5674361148671295263 1.6359956254846035328 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3212 1 7.6739646943960861947 14.255641545515613799 11.246019354472025498 -0.19262713851584370439 -0.9316320567007472242 -0.50872901883434684667 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2449 1 8.5357624252502635187 14.627158846408129023 12.101766029222083887 -0.91586430299480858785 -0.075617950395423419452 1.9035225077271091809 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1216 1 8.7645474372215321779 14.128571299207719036 11.142729342092941636 0.23952533054998911832 -1.5208976400904501425 1.3409686341752726779 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3669 1 6.9245785186976354098 14.737348097698756533 12.074876333027763309 0.10645763957254152088 0.39530130557550768877 -1.4091347601369970111 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2804 1 7.4748008425959575618 13.825923385445424429 12.425979091132493437 3.4314941370361684569 -1.6267549810154398049 0.03079911340298334757 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1006 1 7.7344025484053489095 13.136559320160149156 10.701525533555685143 -0.43314045313880500387 1.0282328017806448006 -1.1108465364320567748 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +454 1 7.3184599855534244739 12.518215773202451047 12.198908914259543934 0.43574328542944257281 0.19164798651882619662 0.79419834709974646003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1557 1 9.5918939466481720757 12.768184053684324297 11.641061478192254341 -0.98370482698839911695 0.18138759628689940517 0.97649866998072576418 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3780 1 8.0691773540808444665 14.062791252850034951 10.009781997909678708 0.17904294894275327166 -1.6877765832563993431 -1.4152132392274294759 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2630 1 6.8610701896056438542 14.379300243180177077 10.236919991625594406 0.72198078689213684989 -0.23144705472518073419 0.69183359266776844887 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1250 1 13.329391239347275544 13.34566418672844712 10.124139068692015186 0.9688591732183724492 -1.1809703067383350295 -2.0166189959527422992 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3652 1 10.917195544032534116 12.67253863368788025 12.137952049362963791 -1.397800465311046958 2.3893851269195431897 -0.19424277513391427497 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +246 1 12.523803802766428461 14.414253289658994106 10.268962851664092284 -0.25677674214504392358 -1.0040388559290416293 0.18238641124563723106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2495 1 11.358230386484834185 14.643012226389069852 11.767361763842759004 -1.3196053240547500618 0.0069873053832999292012 0.49743937278606548125 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3051 1 10.788353695052306236 13.766403451140904579 11.591630010322264255 1.5024779286421459101 0.74018055169915308866 0.56587241761130235851 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +756 1 11.212741803365151583 13.099285475453944727 10.16337859293026824 -0.021072018301821759945 -1.7751384002554453367 -3.0143897161491031156 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +564 1 11.292366695437324964 14.122762408759362174 10.789350377084071297 0.014121727883320937813 0.04549600901118601437 -2.167732037898375097 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3868 1 12.27451211512690854 14.384202401261783066 11.285291357137975155 -0.20821136686108049352 0.83157796486128066071 2.2354910582480305159 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +386 1 13.245554064859964782 13.970549363950935273 11.512860836414644083 -1.347478660907239556 0.73939216827167164592 -2.0226287496280090927 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2640 1 11.897258529730580179 13.355127955004313378 11.106056329471325483 1.7505884386863315161 -0.13284427693617953392 -0.085030129518425756618 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2383 1 7.606342727122609837 15.120784525969117595 10.708322136002832892 1.9730998708689606591 -2.0611738931332852509 -0.98197946607896302584 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +866 1 8.2268084549642477299 15.403614442230590953 11.557748099471533365 0.03061429579653803662 0.80429575166406941378 0.60838958208639659642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +500 1 7.9876391911858162231 17.13900163872027349 12.319739989474548736 0.24124114796836704233 -1.1449488343998337481 0.78172384274779738167 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1281 1 8.9246083444107675575 15.563959162158637284 10.592538302670229555 -1.7342226593165199766 -0.58286760329768061428 -0.86478316062280646825 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1506 1 8.0164585936605234906 16.542088366935612243 11.506005367405855111 1.0250383900393709169 0.98255917060205266722 -2.3294359387234742087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1791 1 9.480254016519470639 16.348323384445119899 10.754500956916865917 1.5496424731869975489 0.01597242441410259145 -1.438583987247400886 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2761 1 9.3553192118269308253 15.235553528451738714 11.990961958287153166 0.22047693441085516874 1.2438263489765868375 -1.8417122091267363881 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3204 1 8.4289733843751353248 17.20034889843161352 10.839225182819024695 -1.6844998336566556763 -0.68038996261261297516 0.63519976582293802281 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2873 1 7.2546789359132715092 15.631379431821942561 11.80459716401656145 -1.3638799359446482917 -0.67949039092267593531 -0.18187612962361643376 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1271 1 9.8067568170236363301 16.344648722580341627 11.787521510255267287 -0.12120119414085325782 1.0855699641837519565 1.2001158735642700748 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1042 1 7.2090689610578833069 16.685096107665081888 10.820256140621566487 1.4545231012255008807 -0.39574407124906352262 1.3376461261122736257 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3828 1 9.7687119099121026977 17.483325779157286917 10.852264353708974909 2.2066434560516401397 -0.69266581810891558746 -1.3562379947314164852 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1132 1 12.816419953965962009 15.18067066337702542 11.916262132664158457 -0.37397979062357128432 -0.76691985156325004347 -0.53895853412084449019 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1994 1 11.261869804016011898 15.593469091438565854 10.589971320581661018 -0.9804120992573081006 2.0364408634745845283 0.85554837641485959043 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +535 1 11.960608725728540946 16.249662764819415628 11.34876554547807892 0.2210686538594883177 -2.2817704940024037263 -2.7565959566601132558 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +119 1 12.278058891285485998 16.613865549236340513 10.281239153591844371 -0.26841020859762776407 0.93376453308773554873 -1.0647794582625358384 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +705 1 12.77859281139642178 16.624248604259911133 11.583007473954072708 -0.067133618987761198293 -1.0718890915432648381 0.88294079811764958343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2752 1 10.293417948715420707 15.195752767842142461 10.495375005181264427 -1.0643519982589628725 -0.41799746564147155503 0.33449939852247345673 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1905 1 10.448992128380849564 15.392792637109502962 11.535330574846781815 2.1639291696413827104 -0.88506962518588816469 -0.57039866020909291144 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +681 1 10.683115381480796202 16.607066714690905229 10.405160730530749191 -1.7597287771652974087 -0.26393185313737060893 1.3233082649753540316 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2185 1 10.999272271955481628 16.461621403497126437 12.289116100942225174 -0.76371858131318548502 -1.302114798139762275 -1.4028462458941930446 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2819 1 13.101664978912420878 15.456530941618369823 10.032227368113018073 2.5899243567479373063 0.05647549333090177287 1.4737372680235132361 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1870 1 11.920053279321997763 17.471737365306058365 12.227206654091991922 0.64058508750821718802 -2.662831103399354582 1.6306877409217233055 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1234 1 7.6089470230148750218 18.744576448502691335 10.570617840934581011 -0.45862702834558982667 0.82375140186753026406 -1.7150227781221023537 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1665 1 7.4529205510133680335 17.61736471389437142 11.555935154610445181 4.5411696768489564491 -0.52985066538315905849 -1.5275194934373714784 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2807 1 7.9615235845210126087 18.790464218583078804 11.7355261253953298 0.51241147644485185442 -0.87369252942448705213 0.47824869386904383939 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +117 1 8.9253108626419077609 17.859518499581870543 11.458990140896439414 -0.42381469529882981329 0.8442826494987688557 -1.3117278744204621255 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1785 1 9.4236447119128285976 18.699076467830266779 11.73817127035092156 -1.4977740960511511936 -0.037119780290684106783 0.94036828300948338555 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2142 1 8.4458503029965914521 19.753372042376838635 11.747727058152602098 -1.5897144131108309484 0.14557176836317725632 1.8943917469751785365 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1622 1 7.6175561080211595666 17.608300429841403201 10.041464456000444017 0.95028642056807943739 1.279157872480028324 -0.43025456665848038629 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3178 1 13.201581589337942901 18.725437433614114724 11.970889804071953577 -1.1399761052194956612 0.011878872629414359563 0.44877357203487977522 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1887 1 10.622232803685665914 19.68596493266442593 11.591324608693234666 -0.90750046002732986938 0.95309762786173790605 0.49284731545752158421 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1026 1 12.529130633662404648 17.790559683579139971 10.810185625687402933 -0.15920744038122122688 0.14801678381413679864 0.76355883466902196854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3607 1 10.219515240098418829 18.329955531180239348 12.399550792637773711 2.0034160283488056109 2.5440603868507225549 -1.4271803010899095643 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +666 1 11.372038956029278722 18.420012756258504538 11.570036737633047963 0.71600539139278407408 -1.6235530121893895217 0.58909014055158581691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3191 1 10.925246436819707085 17.68063495604237545 10.236864147022544103 0.721113442138817895 1.9576180109385434847 -0.0081808854108739535033 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +65 1 12.256655599892170017 19.626139542482665235 12.170833017326277314 -0.070209643080532471715 0.21172337073372696215 0.46999423717160671021 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2580 1 12.456626581367505224 18.740909432546740021 10.651579936043415131 1.1693326506237780027 -1.3202186351306093304 2.2926654098914589497 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3977 1 12.838652521673381557 19.488063149223826542 10.084998163037635521 -0.63802142147442086895 0.084622071693390171765 0.75364627699144437489 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1672 1 6.8689017175656310599 10.907091429219587297 14.835505722288329977 0.81543905761539148269 -1.2935487102874805299 -1.1601211891452392067 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +387 1 9.5935070637321739895 11.151905929937109718 12.789157019552900962 -1.880450964161549221 -1.4122124795734749547 0.40082566050458695583 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2544 1 9.3475675575925709637 10.86307543231158057 14.983008804236469302 2.5410524024704841395 -1.0170031889300494843 1.3099273715577153254 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3786 1 9.2448635190033385811 12.299105295575293084 13.026908912762241499 1.6310482045493681635 0.71643905257183382318 -1.7183198938613439832 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +45 1 6.9013167659494740747 10.76173894960266253 13.179180192880822986 3.3456452052729526159 0.86363113605141961227 0.21142579227273655684 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3392 1 8.5860828921239669143 10.362964529118178447 14.681096368676143982 2.233483735717403551 -0.70861757113028434052 3.199413609516758239 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +687 1 8.5488883507011514951 10.805208134187870073 12.938773050064581227 -0.68587835773953642615 1.1127668840653612836 -1.6600223313807072056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2939 1 8.0746574438159814946 11.504688885005746712 14.537803920523236556 1.9031827828038545558 -1.0916508809155016646 1.2705901906283036951 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1695 1 8.2710643159829206894 11.83491663775063607 12.690864405475108967 1.461562371729319354 1.8830741942706914482 -0.47443019282612725052 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2139 1 9.6911324161948808609 10.067130393293638235 12.977182780627654068 1.8103029939190449227 -0.57090241331134139458 -0.38473035728762988716 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1931 1 8.4060356278701906518 12.061722475959312462 13.726681654205714622 -1.8907041174248175874 -0.70359972565024819779 0.80364449127279280471 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +318 1 7.6509049388820811188 10.479263309215577138 13.931379786919260155 0.078164898092387039008 1.7049321653295104184 -0.75025446781943494479 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1612 1 11.743998229073842055 12.434397983598971749 14.991245006490574454 -0.48463276250490733288 0.26772503355064231068 -0.7320504617654328694 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3922 1 11.088847948207705585 10.191275065565026381 14.461450809064073653 -0.5159737190712154753 -1.4696315224093114971 -0.81339060797946938219 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1720 1 10.668688912809724201 10.777221830861805074 13.235359767085579819 -1.2145278190520529815 -0.58819045906216127495 1.0544906102158382311 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1998 1 12.900086076755664877 12.316538668548110635 13.974544860281293168 -1.2993742453437733264 0.14648348926015808402 -2.9021117722086997581 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2066 1 11.646088354070116111 12.149766432130240545 12.907524919186652568 -0.36231763895179208701 1.8403783176199439708 -0.52915168317640259854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1495 1 12.510642946421198118 11.152291537780884667 14.178324920023786859 1.4145588506054032063 1.3143946695604449282 -1.1591866977967757446 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3121 1 11.497848950280333824 11.175286792027023353 13.70704723411143533 -0.61543594495877840256 -0.074128425514137050167 0.48922651099786601536 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1918 1 11.633856315856837327 10.328664871248864898 13.138388370958253404 0.9354439948873302102 -0.40401951060144014605 -1.3598974876642544451 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3951 1 12.849279707121100458 10.31052375537039012 14.952696331216333903 -1.9514374332855559668 -0.13497588055011719432 0.46435761106570311307 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +301 1 8.060631434910538573 14.366503764895291795 14.882656158507964861 -2.4453871303449474794 0.25003166806382509657 1.2139036530785882739 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +262 1 8.6377543142384087815 13.914318121504917869 13.018432588274389872 -2.3362678825150333672 0.46058091923740762663 0.67547284462112022752 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3229 1 9.8701111314430232113 12.592917611975490644 14.523317053552203149 0.96878652544583787609 1.0567956946847223421 0.4574748139045278772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1031 1 7.1530318409713293804 14.20045195697334961 13.382517776190841374 -0.10776617794431769815 3.2442481935124631853 -0.49504555739922612156 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3895 1 8.2292582701520000654 12.672996970407679029 14.802198934604433589 -2.0023772871257774497 -2.8399817942925063008 0.23877376482565207394 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3327 1 8.7426474754728555894 13.15337811272438806 13.975888591006894401 -0.88840103599550801494 -0.2044524362214100166 1.4957118360870642615 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +244 1 7.8112001214471495913 13.482773332184512682 13.783064101996298945 2.2621820434167982938 -1.0961397505684165044 -3.0397845117591253405 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1009 1 8.2871063380264065046 12.83580862455305116 12.674702901830167789 -1.6578296988833867154 -0.99920693316149167273 -0.95059992456685482587 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +56 1 7.7477178392867847023 14.954293099979752313 12.649934071605279939 -2.4182385577496017248 -0.13525941203725896922 -0.83449089824912359159 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +538 1 7.3299026793982609007 13.287910879307109013 14.822574016969110033 -0.25952563065615108506 0.76658125610861838073 1.03488406364356611 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +620 1 6.7533882829657798652 13.605900138991403381 14.129320153616255595 -0.87585883477453974066 1.0065052111390588863 -0.24155791009661675695 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +196 1 9.9073895131275939718 14.570066129305248026 12.67410669472920226 -1.3139407597856100907 -1.5355400938048640036 0.16631182980577380315 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2178 1 9.3656976955298514298 13.188382025817086074 12.644780947690554385 -1.3872171213552202396 1.1193029237094924699 2.277550668241893117 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +240 1 7.8963498126636846308 14.97123541609985331 13.649578282882835367 -1.573427330133232438 -0.98076990975977540455 -1.7522030852714534088 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3013 1 12.099908369386469076 12.983468060349009576 13.442945471483961128 1.01203344566119946 0.93108868869733463214 -0.50344443805134519998 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2339 1 12.960615198459871422 13.833725367168330678 13.610992909692297914 1.2019141258885905899 0.56593796659226724977 -1.2013107330887058399 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3517 1 10.804873827885705495 12.580343866931379182 13.209584517567861894 1.8292965332983508464 1.2744209082291335644 -1.7073510123051609533 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1158 1 10.789940198762577594 14.542251669202675757 14.652440892984119003 0.89009882097528181255 2.5364313046418289765 -0.74630019541054859467 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2865 1 10.793074156434405708 13.374936033291282556 14.410780682018710763 2.0570738055153410251 0.11594980089369201492 3.3769837852169786174 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3389 1 10.008658975666550717 13.710669736219525561 13.806239749322235966 -1.005820219208515276 -1.727038218450477558 0.082110914566742881915 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3265 1 13.274897179384792523 12.921996485580896419 12.68006760487847373 -0.27048333798296408936 0.64284632262163399208 2.8804140603832482093 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3981 1 9.7995286337633693563 15.333601064987851359 14.966677262367785062 -1.1086305066731618751 0.12383915606022176392 -2.4369594428174594647 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3819 1 7.0686233525530255406 16.714831565816258063 14.192668107462482752 0.32927002122078175006 -1.1421705251393290403 -0.65591643160508483756 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +27 1 8.3440551838606538126 17.456004804554169141 13.4683920501820662 -1.9838280726949617527 3.3037128825336594673 -1.4616710507793151397 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3894 1 8.9793535681841607499 15.083132896239707321 13.208927497803257367 -1.0814149495978797599 -0.80333117693433631068 -0.012396786508495976145 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +186 1 6.9151479740438013266 15.794852687551358628 12.919424961119954531 -2.1886568833221438091 1.3695365044996195003 0.074414528500883342366 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2469 1 9.7256598106407601279 16.255594135121896215 12.970580771124174291 -1.7332351456526779998 -0.27409107953541905767 1.0175072405756140359 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3743 1 6.9120179457107315812 15.655991381807361051 14.084675276730736826 0.67461945843723980509 0.7604371847649540328 0.29030502510529782034 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +908 1 9.2001534590737659158 16.959074651516175436 13.307219464212318272 -0.81470558200521792092 -2.6220956875783913986 0.45471260429230642153 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +108 1 8.4466706658858221601 16.137350718743192601 12.987474483357308586 -1.2864022236279333278 0.4929564783108080217 2.3645937612135305983 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1424 1 12.602157064251709784 15.494926775559912713 14.237973373241402442 0.94513122009156225189 -1.0441175519958587614 0.43618366800077806866 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3562 1 11.731326952414915965 17.142350116912250968 13.40447486782277764 2.1908990830976251551 0.94694264250898763091 -2.308720299077150262 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3447 1 12.626216193840892998 15.33303391055036613 12.904647607671689613 -1.3339812000883215504 2.0760784605644495571 -0.52552417117367278276 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1387 1 12.688608121281657048 16.601911015441107367 13.882874763629924786 -0.7714401600162408279 0.43675390026845045677 0.13070699139884156548 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +828 1 11.739924849125612738 15.942614563064296362 14.297369072741817675 -1.606017091266599639 0.13591138221161191968 -0.14358992596178560275 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1933 1 12.16552047859526553 16.267802385634610118 12.621576959694566611 1.2163373471008509519 1.8360291364902070477 -2.8870073477997926226 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2944 1 10.936919767763788158 16.246185200709316376 13.529442005584042974 -0.837192033529945423 1.2048204771086348241 0.032687452548523364404 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2408 1 11.125878200484054403 15.549895683102009869 12.719129907254286493 0.41765812433645693735 -0.36565499118997563111 -0.58891147651779585104 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +252 1 11.31694136745590562 16.828576064180637673 14.453471837079426621 0.7659079447640204652 -0.42259482039241252904 -2.0317775002111799765 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3436 1 10.606637454209824512 17.489201670382520604 13.275053233052002355 1.0484190829660013922 -0.77914030993439575834 1.1953722059405060829 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1027 1 10.00579861737140952 15.289904644451512539 13.417251099686611227 1.972045741682939779 -0.32730307667748020917 -1.3308366182823299084 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3062 1 8.1243547759825798238 18.462073915671361135 12.774880556213842553 1.8226576520607538079 -2.1768632070552187407 2.502693697197230005 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2800 1 9.4341531661458510882 17.78808632753912633 13.961055699239205197 0.30126848486030494145 1.7736096131214809102 2.9484139239429363322 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +566 1 8.2048999187560536228 18.92464221109249678 13.810158655175909459 -1.9395557330067330071 -1.670228557516236112 2.0348283086621399285 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +754 1 7.248020592941331941 17.82423094353673676 12.949717048494044036 -1.8311639462770268327 2.1693187074262105796 -0.97772718102264777329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3630 1 7.1162424399897874494 19.714986472771958148 13.426439222847305288 0.59567874229347650417 0.49011974986800327381 0.45693086108785774258 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1117 1 9.3487691682124243187 19.404553039902321387 14.163759356621886454 1.8678004936305026007 -1.5699515159331718372 0.60155095952833803619 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3659 1 7.781117659710791834 18.415092529655336051 14.870340097722351658 0.39245757152553051306 -1.4635625338553650554 -0.80771264814133569843 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1148 1 6.8680823057400175458 19.304541211294992564 14.378584491178225235 -1.1657454977222254655 0.34424516444387753822 1.2545654881742904774 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2781 1 7.0572634043268616111 18.379195089303934196 13.791489194792942996 0.63129353886917038974 -0.85065016303091045557 -0.40006376925851705462 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2978 1 9.1183700696102629735 19.240208739230737933 12.59167989864493542 -0.88810808508663030558 1.294982156912779292 -0.16855640198884691561 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2277 1 8.9417455148136131271 17.634949000174753309 12.513984631522143687 -0.5427969570825917911 -1.0341302537633008107 0.54493194250293863767 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +433 1 12.585621975303858733 18.788882537533911687 14.535358511006240434 -0.78551495617948829953 1.168400093301726228 -1.2763747433607555148 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3 1 10.819385212596275281 19.439868736874952759 14.844810208029270981 0.60464864793557637768 -0.90567360643154271038 1.9329250424957606924 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +764 1 10.594789328503514625 17.580090428272495018 14.423037751017409036 1.0178540590095992435 -0.20593064491644139102 2.3490661510952217661 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2126 1 11.824342579922017649 19.328403530739052485 14.919658801769147161 2.685488177559439027 0.021161599594837016136 0.66618015774086314362 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3865 1 12.349670728092061012 17.558094770160522557 14.175405954210935633 -0.52081839177793487483 -0.8415163994938457126 0.88082322256547973538 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2886 1 11.786182893005404893 18.778153102560573018 12.581081517359654853 -1.3254371026813553947 -0.98939301678419644404 2.6031528361635842828 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2447 1 10.472233407688291251 19.868734442435361132 13.457031432936704007 -0.80996659430519724054 -0.78568180748430160865 -1.4332915368646372833 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3263 1 11.979757121246690232 19.068459371563470484 13.560463706157900532 -0.93840356599137431104 -0.97206603546941494631 -2.7524242633109179401 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2701 1 12.446491349290143447 17.781620674033835172 13.221092939385146181 2.1884022118042154581 1.2256529050655775581 0.3236423924610876135 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +220 1 13.282379409112229141 18.695985185964545394 13.202186639276154878 -1.0504560181962352416 0.22316070814298274994 -0.69799664584272891332 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2554 1 9.3977913761484170863 11.480813015633954066 17.110925818507549678 1.1539484856920869671 -0.04233564676795096432 0.24692524147569369641 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +165 1 8.0457524613306965477 10.25539043658300109 15.76767415153205576 2.0295765146342641394 1.7633217971640020583 1.7876026158386957299 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2380 1 6.9016450921878336189 11.545572928047468153 16.86782351685808834 0.91173459887569929805 1.0546419478228854505 0.10253728840045718551 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +151 1 9.3160131271616215543 11.013533541666820526 16.230875830945823424 -1.0402027234519473087 0.37332263071682642019 -0.72787531165780305908 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2684 1 8.5389266541365174135 11.80798552881275576 15.677522890161524671 0.82644479361617084745 0.8624193365811254619 -1.8518998476699961575 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +31 1 7.4527992147319874761 12.251296903700884755 15.449470256375928301 -2.1379023392148144289 0.65263299199937407913 -0.16334623180363466721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2041 1 6.8090969596341111014 10.485756634635672313 16.413150447457034886 3.7712340172344585021 -1.5201672319420438395 -1.0038879743440216608 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2667 1 9.356636245959423448 10.0191797800216289 16.573079981187714083 -0.88464984228988097215 1.7627306830865443477 1.5891995374088381254 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3076 1 10.512081589910531321 11.598527818841285253 15.599678393485048034 -1.0677087726661580458 -1.1303860072235429879 -1.6509594771349718201 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1248 1 10.498360293203589322 10.392427185064526896 17.003860949271896175 0.65987535996477386657 0.066235545983887658683 -1.9965810805167512054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3009 1 12.26409181731702347 11.428310055000133971 15.246665475174170368 1.9683355253265768514 -1.2880305050019644764 -0.76231230648651704396 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3286 1 11.516817036703582033 11.982374530211449937 15.815514715111975264 -0.6463859151318844809 -2.109814800102396859 0.95099546235700849195 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3976 1 10.281950078043051278 12.270089662957824217 16.750052731530960415 0.6950816809448022715 -0.59073774412537372047 0.24765983131938906769 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1454 1 12.359713811341277889 11.869981059618087471 17.045214971836681883 -0.087036879818859005931 0.71820624969817759009 0.79906881028945331291 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2130 1 12.563646380109400269 10.692034200029528535 16.484908834095215013 -0.55220995058481736617 -0.10790449318701929304 0.76898977375455501715 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1578 1 11.501648245644721769 10.904193303112567293 17.101966577696007477 0.83363715711381614071 0.14914140810056081277 -0.1142687247974185083 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2463 1 8.9506784051274550507 13.821927068274748152 16.453432318414755287 0.52470529347314753821 -0.23584067786273141265 -2.2048968123093533045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2397 1 9.0597545323159494046 13.561883525210800983 15.317185933467239778 -1.4290123724922074722 2.0628727112722473613 -1.0763788214205438631 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3168 1 7.9037723595971964841 12.86678075032189561 16.156103298456294226 -0.94699238644691341449 -1.8089984853984384383 -0.51890350142666641364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3426 1 8.9106052076596373723 12.830550769865638472 17.046928584689062802 -1.999862195068842885 -1.604031490848747854 -1.0155071203867018781 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +548 1 9.0589645173621740071 14.733537714874231028 17.064375647417389104 -0.30258642384958778226 -1.4742826057642610671 -1.8531242666817191456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3383 1 7.8580146631605991558 14.255042972428293879 15.979643339162674209 0.69591392175849098312 0.27168163224870967021 1.1405702476148167346 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3372 1 10.842820121435950753 12.836011705311427988 15.406361720872101984 -1.069779735607208293 0.73105937241800700299 1.7852066747791888179 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1160 1 11.739700096886142688 14.557264909963636867 15.39021421916846144 0.69908757583782421552 0.31411684773428649731 -0.010185445648979024602 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1943 1 10.196405429620355676 14.48401348477959516 17.011083436744673492 1.4175844841767606397 -0.75161014092567801637 2.7448658893453483643 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1909 1 12.736734816268759474 13.232707610647539198 15.065775482026644738 0.89328213843138271066 -2.5168337710339874214 -2.2667431462683809151 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2235 1 11.696599486818319846 13.09689350228479654 16.283694838396083782 -0.80615032597811064896 1.7324022076091671885 -0.77735607041964283059 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3411 1 12.788396756747088645 12.906090823074324092 17.278986843576404908 1.3106803200271592846 -0.89720403330920395213 0.31647492097536195077 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1736 1 11.05554616826521297 14.696061461683719074 16.373935215730199388 -1.4250762203006173134 0.83784363054641786128 -0.2130820261305866048 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2353 1 12.91780480395295605 13.447460257815873064 16.190541834403695987 2.6589445648426295321 0.32264002717855427838 -0.4680467360795660392 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +820 1 11.296928642736158821 13.880046447115489627 17.122556938248173708 -0.089624915525937265404 0.90732627548463329337 0.39735025223868547517 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3452 1 13.118660428617461733 14.618395699101091267 15.217739554619786446 -1.6440419094193878813 -0.34462975668050965794 1.5346079738719173857 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2653 1 7.6479723588961796565 15.61349825709283401 17.041629084118486759 1.4343989728251886895 -1.6261696423630405128 2.6556247391452600937 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +881 1 8.0049773830749391124 16.641059511680566629 16.096271103101823741 0.53466690204222422356 -1.1079386950078553564 -1.3096303847940498066 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2499 1 9.6548854600305951124 16.949937091932991251 15.456815581350678457 2.5293053821457656127 -1.0906781607078959162 -0.6234598661898143046 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1210 1 7.2461536335850045276 16.838963624372322414 16.971707074953755523 -1.7533994665644785371 -0.86679447866457626226 0.10324194010282296274 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +40 1 8.9887722928509479203 15.967699686136793247 16.63789283998474744 -0.18328868976005663338 0.13025851823279657737 1.0134590040749793527 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2343 1 8.2775201224525591925 16.840387919036668762 17.317324268378264662 0.13355713515601796981 0.88763591748720793717 -1.212616012531226195 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3984 1 9.2838229677400541107 16.540596365449491856 17.366817071784826254 -0.58083864341828628231 -1.2573109037049130521 -1.4852552019529048355 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1980 1 9.9726103572045516898 15.498982139898910049 16.519166957484340941 0.36722491159205705724 -0.33260998385585033299 -0.88419512772840136439 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2562 1 9.0878232715586655388 17.082500106732325662 16.334136214214939997 -0.22770026717814881301 1.5079105898881131065 -1.6447580392163976271 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1757 1 7.1228461613566054211 15.942995715566596004 15.153607309654978152 1.2948761916055444576 0.32015720184925211544 -1.2357493034623043826 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3827 1 6.932557469563220387 15.736600082916213594 16.176991762834632027 0.81116496660415093878 -2.2605121658713325239 1.462327429784318289 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3199 1 6.8535223274851704289 15.956101746475900072 17.451171304230090442 -1.9485976070203649968 1.410795955875225216 -1.7952842488294675771 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +11 1 8.6247141755727536605 17.190380608530052342 15.195698762635656109 -3.102380710368038752 -1.4169291914764989837 0.73735593645327002221 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +914 1 7.352993532513083963 17.392006634849565216 15.810982018113655556 0.2137147076403693724 -1.1681872446888501571 2.3285333789478634969 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3852 1 8.5817915561131119517 15.94775002206309189 15.092576968930556447 -0.0032091908492575525226 -2.5693755301963698834 1.3360433674053429076 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +218 1 10.832505679871724524 17.211557806701200946 16.39867145155393402 1.7441010893919446367 0.94425709644522326514 -1.1673480902791950609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3978 1 10.530823103197160862 16.263145564666366738 15.013705662446868772 -2.8834360132650047603 0.83797521725689416705 0.54374229991331279876 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +360 1 11.06908741762909365 16.371328342974965864 17.298211262749561001 1.9422465783027285102 -1.6817950236119236784 0.66600927437022461319 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3290 1 12.116490571085195782 15.419573124324848834 16.443749122594770284 0.90749896061379153878 -0.74591037918374480942 0.54397014595989912067 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3727 1 10.911822249133253493 15.790918329303744727 15.927773442684069138 -1.280143124205763705 -1.3396812456867595031 0.89692134863646777454 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +245 1 10.124924442282695836 16.452011491594884518 16.340731788082827336 -0.42962966435415578248 0.59618975565995491195 -0.56533178733523681281 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2966 1 11.837736082171865348 16.443599067217430587 15.516749844910480149 -0.26644833642904719451 -4.5135880084270159074 -0.96141209561725082811 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1008 1 6.9622543148929807444 18.287357195581094516 16.261142986389174325 -1.9040567245894575166 -3.1304884832959647412 -1.5247494766856102277 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1326 1 8.8879286296255095579 18.405062968430737413 15.178239946971512353 2.9805263902175695989 1.1265594574948176732 0.281955700360487449 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +531 1 7.4230309879113294258 19.289080422802179271 16.595120544746500002 -0.66328411292572453384 -2.0352622064959109416 2.2946706477059275464 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +735 1 8.8459707864242371755 18.712399843933283705 16.1338387352766226 1.175581986456038619 0.29403128362796682183 1.9212364844738942793 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1099 1 8.2779945422317169346 17.725888933008160819 16.108371227449261198 0.63407840073902865807 0.11024178942630606659 1.8601092901441631522 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1037 1 9.800864096381193491 19.802193086808753009 16.46119731489631377 1.6035522549880263377 -0.29573475372312485465 0.67016622165111183751 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +457 1 8.2953650180890541321 18.012662617474529014 17.289390253544766551 -0.82827948816523888631 -0.36090822115293830219 -0.58568979548007815694 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1170 1 9.87170378324753095 19.101841783733021884 15.769678972894292102 -0.29193008888627919317 0.45577148914697451776 0.47160547656852080944 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1215 1 9.025319178183842439 19.633671101515499657 15.927595087588844791 0.21703427277643097537 0.3480728629313987188 -0.44470548785946456549 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2214 1 7.135880009140817215 19.564246892080252138 15.610578174861618805 1.3934861084705136847 2.0445924352702449234 2.4438387207613607721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +87 1 8.1760559247035988761 19.49079307488748114 15.238707360364340815 0.3507041074609417719 0.24071403778191202694 1.2008063684528338388 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1717 1 9.7449699323589200617 18.07415895670500916 16.111071416746717944 -1.1443013248342617239 1.2240044806877246053 1.9156944327963953967 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2728 1 11.751845386655457304 17.668294581741822213 16.048912406309316481 -0.66901540371791567985 0.57395703370124850906 2.1996968346611525114 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3564 1 12.626219842153115991 18.673207059237494576 15.631032253033499302 0.098236137216828278707 -2.0781414994374460825 -2.8674324419447954071 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3156 1 11.428069491298296967 19.077702696375691716 17.321128213391446593 0.44616327762798341228 -2.7956924400086338167 -0.52119735844145687054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3999 1 10.886874631154030979 18.279771184190895639 16.359179152893830178 -1.9052257238102114911 -1.7419172775679361287 1.7079934761818793554 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1820 1 13.268302805429071256 17.506851005233503571 17.113662078021924629 -0.76958176195931593533 -1.9189365033329921495 -1.8417193112365153329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3052 1 11.53107440794592442 18.954711501591280154 15.799233985526131008 0.4037569951245049138 0.022199259453969045347 1.7487789168061076417 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +532 1 12.234556015028443809 18.443028017490011194 16.673064050985104245 -0.26007325053931262815 1.3631565478841920491 2.304956688281438737 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3509 1 12.607290510129868011 19.872259048358554168 17.13270254849907559 -1.4310549623878603409 0.89712065032077414894 1.6702040955458214988 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2493 1 11.781143612927888142 17.816505023596295842 15.004577654962155009 1.232468169933936375 2.5392117886596436982 -0.57117154985493034935 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2011 1 10.642877987690047448 18.408556496273256187 15.377567677176319449 -0.75383353014555576355 -0.40720703545753933472 1.7332482490047660395 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +141 1 9.3650175365564507501 10.455697688032518755 19.161086370249812205 -0.47429212613384125197 0.11842237176566867973 0.26052756805371585225 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1022 1 6.7090849987740348581 10.734186799940061974 17.625731599179168541 -2.0689023266192076989 -0.44093481324022781864 -0.6716387482273503684 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3097 1 9.1292127184416020924 11.696034130368829551 19.920394639218159227 -0.62813200011245229337 2.6736200187101264447 2.5094328218308188383 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3166 1 6.8286528661191816525 11.464333833456501921 18.338606933845479574 -0.060981150708144832295 -1.508043915235258936 1.2771566666738092266 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +862 1 8.8135456549769273238 11.097021397307663904 18.285151310372413036 0.25745513037632311582 -0.22853760895612079684 1.9884144754311223746 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3749 1 7.0684585785463953655 11.018808247244011866 19.697774458739221615 -1.6700796722341959555 0.023813376710204347403 1.4889465555782839257 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1576 1 7.7069573627891960754 10.92137507556410192 17.981610705344063916 -1.0058370270364094257 -0.76588714622446318891 -0.35823348573036772891 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2671 1 9.166256548854020636 12.110161733852580213 18.628406258889981473 -2.0339901216091926806 -1.5598166627526670602 -1.9926713566160763058 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2691 1 8.2682730905496910623 10.826723372578813454 19.314304935150701681 0.81038316616614858301 4.465191079988540146 0.096118010324380803722 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3255 1 9.8931138131022446913 11.065561379127341723 18.374609025047366373 0.96705197131913334108 -0.10023388608908219422 1.1137739148786078847 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1166 1 9.8875945819083419508 10.184100200737926656 17.883891316816292516 1.151420036115494705 2.5316638236256223671 -3.0298017427893380038 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +791 1 7.8286634719922121306 12.130383698359569422 17.617958593790294941 -1.5023129028463739765 1.2662800245076035743 0.94160875034542335094 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3081 1 6.7993088319842742706 10.000764201113428342 18.651990476804183317 2.5054707754424736521 1.3158551685623154359 -0.28510894887767329609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +739 1 13.312112112053355872 11.038212300501463403 19.357181981250295877 1.0502090892646451792 -1.1350486203321348277 -0.061771203655077551453 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3454 1 11.193900879472547416 11.493358509672001233 18.517924387660237073 -2.2132354918539580702 1.6007823237249199089 -0.26139750339872513951 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +939 1 11.440205182364870495 12.10621464656286328 19.519359076799187136 -0.84207583831660803853 -0.36294733757484232139 0.23122067315386229946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2116 1 12.790730381032066276 10.429529852123827993 18.523662663821635732 0.062830386579620631227 -2.996460066729190963 0.53397496822692058771 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1293 1 12.158037729091823564 11.175612652802067615 18.095815263415854446 3.8287790682980809009 1.1384704329695565228 1.9037245941442566544 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1616 1 11.858588023773959819 10.91934613981509905 19.78707048503519772 -1.9445844931540388068 0.64679426406777240643 0.97043762105611464097 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3500 1 10.544810429173526956 11.572579785948489572 19.296340988150188167 1.9993819849635006136 1.4612928885345635166 1.5897791376852530298 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +810 1 10.961213673381973166 10.492055814441247463 17.929992740383354999 0.42854821256047431755 0.62958402925604672884 -0.59139304019823790703 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1153 1 12.369928326513107919 12.055198029000354865 18.837684321320580239 -0.56993305426296370086 1.9878261113913204827 -1.1385488844149562748 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1066 1 12.188631420730343891 12.351268014674941398 17.834357676957235839 1.5844990509878289497 1.0196104046806613308 -1.2510184797725760752 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2278 1 10.55368828682449589 10.244948797361251636 19.010091162575605495 0.099521500890294767316 -1.1623091556603584174 1.8490662273820170913 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2198 1 7.4323093118486260877 14.256957171721873934 18.181627955865572233 0.88979500335951655643 -1.6009523760738610942 1.3267661095319374098 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +781 1 8.5285561418766491215 13.885454025977972847 18.622993154778392011 -0.86473284395275318293 -1.0923302221667055001 1.5105257765123125679 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1252 1 8.3630398854412550946 13.003328065153874959 18.112790757684809506 0.82605801235902998059 1.9237248349772015921 0.25179746593952945233 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1666 1 8.2675375830586865789 14.990887960610370655 18.26865702052483087 -0.34791595878247782991 1.3835138239889070988 -1.1476645192292755926 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +543 1 9.2141533922247287336 13.115606992481479764 19.225885072350500593 -0.45683902386701730203 -0.93087440901044105068 0.38591743117203253233 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +794 1 9.3208633455775391496 13.568326646647259182 17.814708026342252367 -0.45709946779648519266 -0.3263617690564132312 -0.4909342858043703739 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +460 1 6.9158986282528100986 13.440966974146403956 19.053833215226202213 -0.437287524966140706 -1.1260969622162522175 0.56941950999915513787 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3608 1 8.314170287876367027 13.954951306270443112 17.641340358387029852 0.06867108703450684748 -0.44327683775992365867 1.2514507096399611896 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1161 1 7.9605865497705350364 13.682750857871290862 19.386341148808895696 -0.61958521349186090887 -0.26446338930653912058 -2.7104343565505102376 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1171 1 7.7980539812543847589 14.763814176251518262 19.202343718241881021 0.017770722584447892073 -1.2222361634820353427 0.096288128981818404961 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1970 1 11.355710884307102404 12.55027096155782651 18.527590118708594957 -0.99645761446547220785 -0.27655725605419356761 1.4971160479360872131 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +815 1 11.834737158747604013 13.110541205841922618 19.512960857845762064 0.68024489173942304099 0.46651358217405575202 0.98006706836113843817 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +80 1 10.215315914185890023 13.754341157337776735 18.523861330263848402 -1.3917860334321920934 0.0022665087111583934361 0.29391965162075445184 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +669 1 10.451485154719270199 12.658870553742909593 17.607930944703451104 1.207188564979078782 -1.7819261118083604689 0.74618953214386563033 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1884 1 12.469848118127506709 14.729080593100624341 19.102932473974409078 -2.5235427337978211249 0.70599530250666664433 2.9627644651292284195 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1168 1 10.272227746259490644 12.964101618389049619 19.531232182080984217 -1.3216736534728619201 0.62194667931762259716 1.5776372595578369573 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +965 1 11.435598637452477178 14.541474763563201122 18.045659226919969598 1.1332942646490915539 0.2410118361236126272 -0.01881952400782921711 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +369 1 12.460063554722054846 13.783783861707126661 19.768699020799569865 1.8375596125746456178 -1.1764109212211777411 0.55956940701066926191 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1329 1 12.237306636532807147 13.142744658694633486 18.537931593524419327 -1.2074971224649879709 -0.44311783375478808189 -0.3325607052255490359 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3538 1 13.199125032251883383 14.462268773211258477 17.983354496701071668 0.87719253079763193082 -2.8692392677090379216 -0.02885168340895226044 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +317 1 13.299691747958604537 13.118673357954461878 18.42411517287597178 -0.34129069987745264125 -1.2125861923369383177 0.39911680383321246346 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1448 1 10.018088289314457384 12.553169803804570037 18.561656885225396252 -3.0570767714910074275 0.90996432786691217043 -0.81015564174900611683 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3267 1 13.063356703360701871 14.823004475816938807 19.808947832577604942 -1.0325566910812755683 -1.4185990255000193727 -2.8221725932747085963 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +634 1 6.8431126746968979901 16.388257839651984682 19.429814274352843029 -1.0767023583873847059 0.82960324359199744126 -0.99657335579796213487 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3884 1 7.3734904708973294518 17.350531399289184975 19.348709763874499146 -1.1954661820885292833 1.455305322187692374 -1.4491245246877377806 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +442 1 8.7660609637442501452 15.924565995748940495 18.560373713591026501 1.9454197569891431563 4.0156832165556330949 1.1334691279529147678 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1621 1 8.2065029511812728202 16.142554531065567147 19.298965700296808023 2.1016635178881633017 -1.5513546667943727275 0.14264763205220395981 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2085 1 7.5699515691420211638 16.401462901776596937 18.039261734964025408 0.25916555175609162776 -1.766313297457551057 1.017745784341929971 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1060 1 8.8208576031030112574 17.401776268195682462 19.137973784269135535 -0.43458549546874680747 -1.7693854507627977402 -2.2926695145593534164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1601 1 9.4498447607243800661 15.458594205333684002 19.250260173407234277 -0.13828500914943436806 -1.8059823796262042261 0.58719101219967428928 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +204 1 8.4434947145742746955 17.266746611752616047 18.22037288202145433 2.1767283611123202647 0.94912258373496527497 -0.79596410645219195512 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1743 1 9.7325633506665560901 15.26203634669903586 18.163258369222958777 -0.17503173118465806257 -1.2165912863626631157 -0.25333732259994068414 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1400 1 7.1227374289516482975 15.142591743949216365 18.386476761689195314 1.835754232825368204 -0.17401133574316887676 1.6174106503662109002 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1459 1 8.6292791427532513637 15.701216232979884779 17.629761405190656376 -0.43507102262663094328 2.873183141422920972 0.81404035928372275865 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2344 1 12.065433466872317325 15.482800353242174296 18.435251080906073895 0.81397325477109550018 1.7725079803285552771 2.2856162042124128497 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1232 1 12.221655245383876931 16.487311064818612749 18.054006177525831589 0.78416987465059684315 -0.97962206031144649643 -0.95538870660991448425 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2677 1 11.634645093262511395 17.067950806057361035 18.72699507506296257 2.0737447015581444987 -0.3817500672230508818 2.3465145902739354966 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +835 1 10.948981677674240132 15.824949319281467197 18.388019616425495428 -0.405960603849204682 -0.3465826665550631458 1.2284431551133239147 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1365 1 10.457342282981135995 16.67371256444102201 17.956485247486543955 0.49941242154857679036 1.2869579452446300305 -0.96680348657391468326 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +775 1 12.907764033439589113 17.26637118377245983 19.450698350820143645 0.39178811735908375402 -0.3369930735240249664 1.3398598048319192433 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +319 1 12.090429317946396637 16.181794662158115017 19.245582570652139509 -0.54452797326220914176 1.5245886557976522369 1.4560915956772191304 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3539 1 13.234838525708381596 15.391142518313188248 18.759666427304264147 -1.5884282756693817173 0.47422247467018402434 -0.13629781850882810579 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2093 1 13.231518890639801356 17.391733313087627266 18.19087658305138433 0.73263656572712698711 -2.0576469247613995428 -0.24409635034344226434 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3881 1 10.37311316803098471 15.532864544745670798 17.509311347017394667 0.24740498979568792404 0.066570416995243519853 1.7326707173553135277 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3407 1 6.70694153943958149 18.485116651328699078 18.888887630126465211 -0.54011897622367055494 0.2580466605284726378 0.55831784993409649953 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3192 1 7.592816579934108745 18.040872383448132155 18.734006464699827887 0.37436030141613535482 -1.1467831482890205042 -0.83217229743037091083 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1350 1 8.9838868216905787278 19.754514028250646618 18.392001356827726966 0.12615651566371349768 1.4782388442598406453 -2.7575807558218126125 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2197 1 9.9041353588945053588 19.035423079427882698 19.591471197495994971 -0.78410018547712623249 -0.58404456374980318056 -1.9401370906089996371 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3940 1 7.6674287589685050648 19.760592359269026019 19.473600184097708876 0.86809805790121585822 0.69965393903200667758 -0.99702845829580855064 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2251 1 8.1511415431820992694 19.229038398471764992 17.669948455717417346 1.2559563579832933033 -1.9242874462531429636 -2.469834944585430403 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +884 1 9.1926882208574891564 19.86295141486820981 19.321191016340723223 1.7121609399403088236 0.96415192150015160966 -1.182810193894209716 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +598 1 9.6407800884876344583 17.621301455461750862 17.613367688986134141 0.63596296747831027041 1.1304906400932690502 -0.07438140060621363514 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1753 1 7.2659927088244149473 18.116934601616943468 17.717247606625203815 -0.68930694986261187296 1.8547420146376034644 0.174873436110998981 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2025 1 7.3423260236205187823 18.512666781285144424 19.8905131352453175 -0.088445806793977274629 -1.635456838079492492 -1.0632846757232194967 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1377 1 7.2415584706815430138 19.986007675722309074 18.611235274203046686 -0.89515963232899997681 -1.1846600041730945829 0.20197868616907529993 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +819 1 12.487280234902845777 19.011420871550729572 17.927273977394140303 -0.64231490844429217635 -0.68605010126677301585 -0.22556821333174301158 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2226 1 12.95630202772921713 18.58220713759277487 18.852840184251338229 0.32566370587989323937 -2.6106736418437703762 -0.86799139048673445984 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3809 1 11.328016991812853931 19.544928377226511884 18.208249461435617178 -1.1813788813517389631 -1.0490408914978133215 -0.91382935508199314434 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1811 1 10.665931005836640111 17.72286531974094359 18.634293884258159579 -3.111047230830497945 -0.62415532817096530671 -0.21720206966416946703 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +837 1 10.55425630100998724 18.125209437474143925 17.572220397937336145 -3.8769245773983138648 -0.01469405482832098972 -1.4801524177533194049 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1263 1 12.88407102136573279 19.116005309812489799 19.755913247584246051 0.00038109057845314925697 -1.134445184033144205 2.5788380970544211301 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +870 1 11.60626659824756679 17.676703407833588955 17.539445250675292698 -1.1359078269669493633 -0.32797657731430862604 0.49216974758358456032 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1430 1 10.650670775408940472 18.807429820463404724 18.480974857263316125 1.26745105507750222 -1.5845347878915410078 -0.25710086131634513062 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3925 1 11.215129354847583443 18.870124698388600848 19.572204668000825478 0.95358026074935364758 0.46020734023558051984 -0.15421183327715509703 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2361 1 11.911151533096800748 18.500669613546516956 18.390345269746628531 -1.0515440265178921386 2.4449840694553643949 1.0857510286155249712 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3089 1 10.692208088551858225 19.629148700367061053 19.077178737866518077 -1.9952080693545397594 0.47449684970625843894 2.1378655673110440461 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3140 1 10.163298357524347182 19.665293449288565597 18.081626985755058001 1.2070629576088498514 0.3335253618392077235 0.054775916619634636151 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +72 1 11.927244548564273074 19.879335705088877262 19.194729933964321589 -0.9328393720011289858 -0.6775253558427792866 0.57057901259166377006 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1978 1 13.287306791983640508 19.413548490157563009 18.412611722560036753 -0.71139491874122584569 0.76419918697321942425 -0.26374390855889728869 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +427 1 14.34676863548620851 1.9926628295366406451 1.7599317308298962903 1.643181757318272096 -0.67673404937876702192 -0.32211535014799580479 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1764 1 13.596425377294787395 1.4857229335431083594 1.1682514899364841998 0.79426067488306517639 2.3308662021489436889 -0.35024622431466034822 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +638 1 14.515464234474984906 1.5245929267883513436 0.32587243792846659618 1.8325896846027545095 0.6920136262023324214 -0.14510493775200489219 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +730 1 15.313933397925497459 2.2651597132498264564 1.9533300286811825508 -0.86531694058332087049 -0.21253249114869904313 -1.1804003528373148146 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2358 1 16.292062408869959711 0.4356627204645899254 1.4379990836302076751 -2.0388826170474394495 0.18186086031121798112 -0.84933402107095212763 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3050 1 15.298782473849135144 0.832277533836849992 1.4335001332498233939 -0.48805886612386895074 -2.3638828134961666905 3.1816798110598543126 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2867 1 13.767806012011856609 0.62619268369261549267 0.22378378198813655975 2.6208699294222110865 -1.4088049881365429794 -1.7439270558631674302 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3433 1 16.145834071984506153 1.5937150695393964561 1.6760266593567598736 -1.3884332667996870381 1.1498530240945421532 -0.49495381006661015588 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2528 1 13.790795130551133596 0.15298459233341410446 1.6508256233494713605 -1.3477083184351263956 2.7228759957102877109 -1.1262877718295563056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1561 1 16.535712953033826267 1.6170423836560821051 0.24439672211013940828 0.68416736708436554082 1.0698540201088262425 2.1948311510766922439 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2114 1 19.570151580514114187 0.29632632641075334901 0.70144837877085541855 0.69749301915559724918 0.94360205333292246355 2.0754897296499215109 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +569 1 17.22052588652466909 1.8242190766410810721 2.0730723782430162672 -1.5951767526125546492 -2.6538892280698274106 -0.058580939129647964514 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3060 1 18.082475305834517343 1.3457529776934629151 1.5423995080447809869 -1.0713600703993328978 -0.81654300117443634477 1.0895849666506043363 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3935 1 19.77958859265705982 2.2951600333294859269 0.95538115371069065596 -0.58216425799841808875 -0.71976608756272175693 -0.1506608291993911386 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1304 1 19.755088366828925217 2.4671685425711804562 2.0374796291253689517 -1.1987356500412749138 0.94001657468081978308 1.9592646360161913854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2529 1 18.241314795561166306 0.74385334720349871596 2.4244821165670105145 -1.1418410747027323282 0.76530952299240739833 0.27157579508316692651 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1542 1 19.246366082216439963 1.3648547242345605568 1.0190511718650658857 -1.5038509940515725205 -1.4585941189830409215 -0.58489930183329696955 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3463 1 17.053802719091397222 2.0874181161873819335 0.9341275235362653806 -0.78230194098840089012 -0.87952656605943013712 -0.78957314124398914057 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +958 1 17.371946647388615048 0.62374176812749559939 0.19459090298699363575 1.9380261357004653355 4.0340616569980030093 0.26558236800672740952 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2907 1 17.390647630073186036 0.39132007403443558324 1.9843075147759268173 -0.54669843966972564431 0.46875743526849994458 -2.4447228817964772318 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +91 1 18.535786381823633917 0.41758974957023803354 1.2913084139265427197 0.2015143596679252469 0.30973646473289306869 -1.4091836153506842599 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1494 1 13.749302899422739088 2.9082261670163114253 0.18978769470206457992 -0.12395222285718369981 0.56416546139536760673 1.015946852968389269 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1860 1 14.65893967341940396 4.8270597706077094102 1.0747752741238507657 0.74937518377052581009 -0.58775354878781638224 1.1443487508241481088 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +407 1 16.634189380435675076 2.6597591001816862644 1.6375612298139563539 0.29026003087775026357 0.56679969530380269749 1.9851109428178839167 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2861 1 14.494643383056631691 4.5947636628053247776 2.3229667117087604566 -1.72654464344861025 1.159981769542090646 -0.79533891463864925253 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +324 1 15.831113891429126284 3.1477221230056069423 2.0659416139001507418 0.78577534246169300491 -0.2572887346251656604 -1.0715615351099390118 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +788 1 16.109357795317396977 4.5293046851896638927 0.54528006348008906112 -1.6796459143726472085 -0.37304662720055958847 -1.1473035484216145274 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +562 1 13.89762068087041591 4.1075892730223912963 1.5569343647121549612 2.2911350455690384642 0.0050220024562403139945 0.61534125913123027818 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1059 1 14.772033795987221438 2.6217285062449136035 0.98888391133279984757 -3.0781627669763209632 0.42103924789745700297 0.44425121074457490922 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2082 1 16.053432241824342697 3.2677924886249498648 0.3572291465131670618 -1.7042969715078239989 3.412082050616033424 -2.2490458893945857177 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3261 1 14.464801413623431969 3.1897879555796659901 2.1759991918345407136 -0.78568863042151992904 -0.94851087375012510527 -0.71083588614849579912 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3842 1 17.03068486388547953 3.7295403413846730523 1.7775657208078883276 -0.03206373669014229294 -0.29514852835227867178 1.4484857177331982303 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2570 1 17.994504076950910587 3.5249134498704153273 2.3856265096443620699 0.72136470659775453473 -1.2890526348180086913 0.55981313040438029915 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +863 1 17.799869173148387347 3.8976314345258953331 0.99089936967717762162 0.49052664905033005471 1.0821274558473212846 0.80897448256720083659 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3768 1 18.246157155980242237 4.8139804894584692363 1.9657277251213469693 2.2011866391187271397 0.93323703898019183534 0.11978519489666858422 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +776 1 18.411778548602871552 2.5085018830667928924 0.39284467323256322402 0.76296975363755348276 -1.9085083069269057621 -0.02740654386760067035 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1214 1 19.182186947776447283 3.7677271503117171214 0.51663015600293338281 1.1076127835343312356 0.027285000583869185864 -2.0339416005913362184 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3551 1 16.907214510194009449 3.124751258687122224 0.85193716767677218904 -1.3750760639404826513 -1.2063120903360093905 1.0402665039449259243 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3597 1 18.866287457149162776 4.8986004963340761265 1.1468048879306431687 -1.2840929643805787386 -0.73332225993588362467 1.6924772214268826165 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3012 1 17.184704362100045927 4.6799464458445436676 1.2915175436020909228 1.424161168388869747 -1.0180224394851280501 0.92865729272368968683 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1378 1 19.655215889005667407 4.4576821821058043582 2.3816094048565732422 -1.4951696556588658371 -1.4221343457479873607 -0.29771092622362899105 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3453 1 19.869662783786807836 4.4901947657825767024 0.61716374539248519682 -2.1018970296742969239 0.15461443083305750901 -1.5647586990751667368 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3732 1 19.98636457809683975 3.0074888563606174685 0.32476784472230485479 -0.78393051536229552134 0.24714820333687170795 -1.2382443314367155285 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +793 1 16.300495675986525157 6.2736221240554268519 1.5180543955105991749 0.11923949660169506914 -1.1320310763678547161 1.4990715611506169047 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2203 1 13.954094377360524604 6.8957441889588748651 1.2521250787969993024 1.0086909869182376642 -1.7248498475401647934 -0.60169275366332408694 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3814 1 16.311316071951626583 7.4927547863001064954 0.69972923014394416974 1.1632053002327045199 -0.24069558632451604208 0.4015112025603076451 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1643 1 15.299542946248855912 6.4004520585125490584 1.2515520648493052569 1.9860780590289865977 -2.150696687784665162 0.64692738095215263083 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2505 1 13.679268497609454514 7.2804820496437816502 0.41018018676394502053 -1.6367631709553738251 -0.23752043801252067934 1.5215792300679296112 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1535 1 14.660666891599756667 7.4221582136358827952 0.095781745886337602003 1.4917115545007098021 -1.461437350621982656 -0.19338988869028042594 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1189 1 16.036396978082514408 6.2156860986613216014 0.022898269164315105534 1.4107316211551050866 -0.57380004302538700767 1.2391637119538227996 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3846 1 17.076672200926992673 6.7128671598596403314 0.68372289526682028526 2.378555057027960995 1.0277947987047799661 -1.4667053633276736502 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +153 1 19.294639139418478635 6.9596013000283658556 0.16347917164077926944 -1.6275396723238311214 -1.5475799570825929941 0.51848999471952028628 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2525 1 18.536239110655788664 7.4624176791330318892 1.7975091727361147687 1.5690296075000949028 0.32952514760010831463 -1.4385433370137417075 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +802 1 17.98273492971890164 5.0405570845961111814 0.57257722456614856821 -2.3929665509906272725 -0.43430769467299351616 1.468790819844668416 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1004 1 19.474617164994711516 7.0914187146267284589 2.1636998222536139025 -0.43464140448612276213 -1.4825779092063833264 0.6075620806172344901 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3361 1 18.33935732632847504 6.3017506748734311017 0.25955618195196361597 1.5223452880684840149 0.11647127040077180637 -1.5044473638537427806 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2131 1 18.192379944241185541 5.6500378425630728429 1.5163005522963144411 -1.3053687515248781903 0.1411252426285257433 -0.9328376801457426426 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2140 1 18.904393735159974455 6.5822142422994964761 1.3670129321462181071 2.3029969513345389664 2.3047008952253107417 -1.0818314938910025269 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1125 1 19.700355894262795431 7.1438636880028578702 1.0446425725482997304 1.4263782115925349725 -1.5205284511460479546 -0.65861512286120948989 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2247 1 19.893448859272229612 5.5558697190015626788 0.1029909336027941269 2.2240426012703133907 -1.2695182117184693471 -3.0821141356755243912 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3136 1 17.147580731946273858 6.8429614813998114187 1.8871543879589642856 -0.6092866791312990804 -0.94412594930309912122 -1.6653928996998712542 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +486 1 16.11320247922765958 8.9001121512721041995 1.6670056019945531656 1.1317425911466545418 -1.1046283708875981322 -1.9931605176212485731 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3435 1 16.429254007508276914 9.925469931272706603 1.7811071304581307384 0.72979213008059018453 2.0431275137641793371 2.5732648030375981918 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2503 1 14.591577599741500038 9.9198013627329668651 1.1850701599954618359 0.011606510792044407929 0.61959957022731571019 -0.31576894512064734855 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1642 1 15.547075992142199041 9.4429232325711396356 0.62693300184286104848 0.65048020736921585705 -0.14014341803881433246 2.9450006094845244675 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2134 1 15.438540459497023249 8.0057063202154896686 1.0577323862149825562 0.94532952813123749536 1.4754334487766107564 0.82033769489297303501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +480 1 15.068284445264330529 9.1388508514151514106 2.0539389231426561366 0.51808275859157248977 -0.41553704197577173707 -1.5960473952501217365 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2662 1 16.171044208209615078 8.7547839580697779382 0.090988427290181583817 -0.73828162031547761579 1.8595641176104267256 1.1044342202578372181 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +600 1 14.708799603673995193 8.5893557587444693269 0.74878680301133115904 -1.072872190169430251 2.0683579650281536111 -2.3028599324592224917 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3683 1 16.57384558561427923 8.0194790060035678891 1.8026182369520293847 0.30957455856427651408 -1.7944994164126293335 0.28167811398472408779 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2632 1 13.819629630660937636 9.844925890432230986 2.1152296852353051904 0.19368635298102238051 -0.7174233848061200014 2.0233753872841808708 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2650 1 14.286477581814670756 8.6450160495813737072 1.7537928084984024668 -0.98990866345741812538 0.22949519427480041811 -1.4643699943669705732 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3082 1 14.798541827885948408 7.6815228894852767283 2.1699995807363512412 1.3743671923865439233 -0.4942050682978045284 -1.3744260282588307565 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2170 1 13.567552193965774165 8.8989681578842301235 1.0262294077445512919 0.95686917797977566469 -0.84978609471782606821 -1.6278635555082117126 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3023 1 19.516723593032804018 9.9609887369172582794 1.0813250127480282803 1.2089289455913916349 0.85794558609844651098 1.3724915218119457805 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +354 1 17.804371622955976306 8.2723077857000149038 1.622710773983567778 0.040256101272979689931 -1.7089282484299490594 -0.11757372637066400289 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2261 1 17.023877763172961863 9.0070278347202030744 2.1628683279390887861 -2.0215758642954346769 -1.0945220067295275967 0.094119029192926167982 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1082 1 17.048563210577366789 8.0473921896038369539 0.8195626157008929491 1.4971657203504458167 0.23831480007855682102 -0.64146294866922803912 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1721 1 18.836823179221369173 8.1363586795587394818 0.99364944226311713305 1.6452665723274724208 2.1101097436632136883 0.44687569885087918831 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1924 1 18.119944808603928976 9.3090056138832952826 1.0810743691947222178 0.63269495614554915885 -2.2808659523877099495 1.3118868143527473435 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3708 1 19.037184002568356078 8.8820698000215472234 1.7001872995206379624 1.2052407039730987925 0.64970900131994957505 0.97603282357618270648 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1346 1 17.60379724870084317 7.5392821232660534037 2.3213651334683116367 3.2016180482596698909 -0.56547070586988901209 3.3616323480939214186 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1173 1 17.196320245680908556 9.0130561377790030519 0.9649308831506759887 -1.1711607882372092604 0.2380218056893994294 1.1796210978882997189 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +860 1 17.159995292973302838 9.6387767487792093135 0.16991315090419656375 2.515769786244312467 -1.2154552376418301662 -0.75520643315104818427 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1567 1 16.630872436237012835 1.3874666966770183851 2.9127566020205031272 0.936024457077831884 -1.6922575750245583137 1.9186568815453506343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +885 1 14.545485223621220428 1.3297756456817466653 3.2701912982011012154 1.6672785649448518264 -1.2797444660746766232 -0.022760830200641960636 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +591 1 14.499036876318564637 0.11603105036496114133 4.2322189867415174191 1.3466965998839703911 -1.2886925639492912143 -1.5934450572863940732 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2297 1 15.339908551892683874 0.48799604858163680987 3.699785941450519644 -0.7128422400420789673 1.1858190859050441457 -0.015926411548700242921 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1592 1 15.722434871868889772 0.91492928186062638662 4.6762786991515641333 3.4257585675964881133 -0.63131154998701910497 -0.84313621309286468364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2734 1 14.160118597387818085 2.3158387809280411851 2.7975203093413947286 -3.4920395005898323681 0.7351930352093761778 1.9971822478005707424 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3292 1 15.922479775727394369 2.0773414755245065422 4.0835292233273685625 0.046883084169624861248 0.1435391275048274462 -1.7343499426104609373 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1868 1 14.804986271923251451 1.3200458214333117279 4.736323277728523351 -2.4954651778539225226 1.223206690426816623 0.641676905941030995 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2094 1 13.758134493871642334 2.1557615642914367271 3.8203991368456011735 1.8262378296455687998 -1.0039792553625370708 -0.072091100355436310565 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3161 1 13.744723203576601378 1.07390367307042367 4.3584202505737366096 2.1153358794769818729 -0.90815176936623720483 0.36223819181798755373 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2315 1 16.283716348223794768 0.3456880916558132677 2.7536246568202700225 1.5868052817992646109 3.9634022601676179853 0.46399358215835267982 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +459 1 16.533982307869603545 0.0066947797963210504274 4.2600532968319022586 -0.26370762200936009867 0.67553903270547566162 -0.40481612382874870848 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1176 1 19.247786712929734421 1.2273659030198467157 4.8809318405552781783 0.36974695325313505778 3.0128929808634463683 -1.727225677519918845 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3423 1 18.224824601849086037 1.0456345120164420859 4.4820222839086003574 1.5676181745230546305 -0.5102201783474774599 0.7390817600822254807 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3898 1 19.148030358395843109 0.37398329447536005077 3.7175907001201151658 0.95873995435609038474 -0.10378666577622897016 -2.4302095239548426875 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2835 1 18.463912764927979282 1.8411157934176141104 2.6962216032799961596 0.2280795345799463969 -1.2025398410690264495 -1.9755458718210623381 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2916 1 19.967694930247755991 2.1049539560830328178 3.9664747729073313032 0.86306465122487086017 -0.096045203974591958351 -0.090774667471498510229 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +417 1 18.192420115302965655 1.5879961467293821631 3.6863821680646542411 -3.2894789515124105428 -1.0545679475890090693 -0.92750338740677829019 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2301 1 19.369790074963312065 1.3978076990540755364 3.2130187686179150219 -0.62708734399656840264 0.4917898875812041215 0.6674299825557510335 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2095 1 16.931450576722845369 1.0172431780190325235 3.9695392551436694539 -0.045362245176262562529 -0.69894785765619815709 2.4402632723512622803 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1702 1 17.370526223520236897 1.9328192278820868211 4.3166910712991697352 -0.52757907369705658862 0.082889337831425699554 0.4476371219302890947 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1897 1 18.273846484039239613 2.1181791014310031862 4.7683502151829264548 0.51491056410475632976 0.33187867649985264284 -0.32529985451617521308 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1105 1 18.757918858369674098 2.4208713179288103845 3.5888199817146282378 1.5691190239134449325 -0.0096050296229346042443 2.5089110502517959489 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3555 1 19.054179877318851766 0.13590578082138307647 2.5593288350654979091 0.79687147419674075888 2.7809459783408341238 -0.69681017347895557457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +577 1 17.098968401797876027 1.0309697180542296557 4.9594358154510524983 0.81047173838909369881 0.032370744249072422316 -0.90845889552515157739 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2895 1 16.46323454093164429 3.6106586841842367441 2.9628462613471175935 0.31506029209202729424 -0.24664947314753302154 0.13182322372090241047 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3639 1 15.114842618306202127 3.7930244434467943471 3.4147835535542809815 -0.64832629420262877229 -1.6247214597905812461 0.30430168476572078129 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2506 1 14.807910556102495292 3.4907363731314458022 4.8144987349672927479 -0.24151830238353094726 0.023383652405239561956 1.4479585737808524648 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3649 1 14.309318410014052247 4.4580057375359816163 3.3815009282842543037 -2.5862342203109589533 -3.4435699198314098091 0.16367137690349531365 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2000 1 13.54213097664889176 2.9966774304891572456 3.1763084483363157595 0.49057325190300038464 0.061725893497729486525 -2.2256518221801777635 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2980 1 15.50242233373776557 4.68947395820203905 3.1327417828449748427 -0.060042170884769097139 -0.3962799206329473134 -0.62053969438780953727 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1584 1 14.833944320044391674 2.8357780295204224608 3.3938549265029087643 0.99592004891903396224 0.24635002239678924219 1.2139769307409322696 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1 1 15.58814497200244098 3.1836646148160894221 4.1818061365524084039 -1.5218790111864548553 -0.43041677997564059543 0.45183552052847408831 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +313 1 14.68518077899253349 4.5863886824335775572 4.3185717481882308633 -1.6671848161597171423 0.15016379801973323005 -1.5366462223733476922 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1237 1 16.293592020602954307 3.6544648114548872186 4.7824041907418308739 -0.42750160423417227218 0.86434261988219329709 -1.5850227301197232777 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3759 1 15.916077305584263257 4.357879526124854408 4.0723984137248274706 -0.093716209794233978903 0.047099071210806441046 2.7213173048207006666 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1882 1 16.228899951474289765 4.8726583744125351316 4.8807746079327980482 -0.25106776442586126175 -0.63140061602374097927 0.058574771622646369662 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3680 1 16.098617753009943243 2.5887925365635582331 4.9347280876676791195 -0.10105607131521870956 -2.4083313293518915366 -1.3970204744574590272 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +299 1 18.748880887831038677 4.5412939500941718052 3.5359620540440044323 -2.2466409342372237745 2.4676243389769645376 0.94571868881965803766 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3882 1 19.573624723858166874 4.6950494880347406479 4.7778033658815548534 0.86678872829021569313 -0.3079251015972332417 -2.9298453302883604721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3369 1 19.550856619474583198 3.8216577495130636954 4.1859209704537976293 0.51948150764025047277 2.332510250390789075 0.18829360275677117786 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3020 1 18.049798451153417744 3.9285660300115168297 4.2406240481438279843 -1.8743648527175995611 1.5761540142424985689 -0.097911822243712379188 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3086 1 19.025838624176511615 3.0468357903734748504 2.821884529704785205 -2.7799953294260477676 1.6558915239815128473 -1.5422227900750105078 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2643 1 17.092516346144172701 3.6110580464235919607 4.0442614033846533417 -2.9844058786293361507 0.34829199695949158988 -1.3902066251727525081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3944 1 16.677351073861046871 4.6653144137352926535 3.0540503832616678892 -0.19687213224944574708 -1.8682667485937602958 -0.33712712843791003969 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1694 1 17.492596951211488943 4.9721502475105632257 4.3486552629148462756 -2.0774245383994798253 0.73444783501963650796 -1.7506656891157783562 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1398 1 16.874344527237116864 2.6361220102455766856 3.3028506190329331993 2.5098455547346003591 0.020359448953321739734 0.23621759146614904057 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1253 1 15.86266805678068792 5.8515578074977936396 3.7863920104349797491 -1.2006790227279606764 -0.72342059321597118604 1.4950250465486294438 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2421 1 13.557970652403517064 6.6898747198566130834 3.1210903357700470195 -0.46934841412565142527 2.3274044563357305648 0.72033505093366612115 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3493 1 14.574833887019870815 6.7083707851662808253 2.5325713345853735348 2.0238567657644388476 2.4070778928462037705 -1.3225019924227088275 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +375 1 14.642540622029214248 5.5517977847950668036 3.0594568981732166435 0.44888166458758266275 0.50540792643519261151 -0.59148648174202778094 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3831 1 14.074094416965078125 5.332632849286011556 4.0077203559031024938 -1.427731829366271521 1.2837229488873660443 -1.5051162783757168206 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +239 1 15.918995850787780455 7.3000028059852946072 4.5874326601682069438 -0.22228391534529703955 -0.55196512077239223704 -1.2027740479857984557 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +52 1 16.533137245794673476 5.7648652255138612688 2.9056736485430967321 0.38103692709971764829 -0.9605594262382276538 -1.0196288031134612684 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2119 1 16.628686926501838883 6.4782271754016873544 4.8709747268497558537 -2.9886443121763650588 2.3742140383343013355 -0.79674370784904979814 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +808 1 19.445567422224243614 6.8993274802799122725 4.4813018197184151248 -0.053519368015346728551 0.31269944440605629277 2.2040310779527465534 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1687 1 19.400198875377018481 7.1581282852679990469 3.3271654700734281107 -1.1559975187835769272 1.6804029453807853844 -1.3975712763752690115 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +864 1 18.155543204287752701 7.3147171280993417142 3.3030982966143733748 0.53930816387833013792 -0.28659483972323734902 -0.768896834190641143 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3305 1 17.189398581794350207 6.3165080194394187529 3.9133783356155986688 -0.44000019923072619665 0.37335934798604336615 1.4069794195687965743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1871 1 18.51277992679311879 5.3607149555201321078 3.0421281030666431633 -0.4248311047224810344 -1.3833167222206523839 0.64045259363937823149 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3296 1 19.738999224446150293 5.6158578110922121596 4.0152321706718039351 1.1372755987341076622 -0.43078633032942764691 1.5574013976726786002 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2492 1 18.941673322176839633 5.5168728691200623615 4.7624661881818868281 1.8621526473355882736 -0.81336777411116578662 -0.44523795933316806517 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2619 1 18.206340708568149012 6.4093932098685071352 2.6969034719887750029 1.3864417020478450038 -0.53157419625770729876 1.3065771214507670983 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1018 1 15.472388370795348678 7.69934845039127147 3.5021880437218833038 2.3040617728276751031 -1.2856269347395448133 -2.9210988235479353747 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3709 1 16.278305578640701157 8.4723018996717858187 4.5123474060479313863 -1.3616955240557784279 -0.33232879509521606742 -0.39146874766192940598 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1953 1 15.102512717976104284 9.4465709254510574766 3.2409673940844894169 0.66080352220776417127 -1.8715537885413677799 -0.11802716271219253208 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +284 1 15.735342624594542471 8.4141834477335351039 2.5588320334321696947 -1.0629800382759302391 0.080772513605359072542 -2.6103195924842377273 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3632 1 13.768271077041010386 9.0747698498848681226 3.5166398987968729983 -2.0390674719878991716 -0.096111611863787041465 -0.27178782143205626465 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1867 1 15.435103153427158773 9.6404374234156229306 4.2704760055156656406 -0.98980715039871414174 1.2049543593642122463 0.64307502033333441283 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2550 1 14.726111866463771349 8.3450956254673300805 2.9076148020579615228 -2.1817158699260046362 0.85642887513518395348 0.20237590646025097052 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3552 1 14.655114308347515717 8.9415469239962384052 3.9293758565677587846 0.24071576582905346298 -0.97505220579923557178 -2.5598552407192016744 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1951 1 16.128179333899051784 9.908382219476953523 2.9601336312699944031 2.317867214904589801 0.17107832101894632215 0.18482208249442599879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2296 1 14.148235936763148501 7.6993779120296910179 3.3847043196822395039 0.10257425725475931289 0.38540754293162166055 0.04085697132907287199 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1113 1 14.957138312957042103 7.8728144718362296217 4.290601927140384575 1.7602488783738399203 1.7130359781643067496 -1.1036400428819792552 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2223 1 14.28924125308907378 9.9186585213916416137 3.9790295169728766567 -0.33463490009373969558 -0.072849553801738214931 0.76008800958089794975 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1490 1 14.773360183397873158 8.6138030717956031168 4.9300400636257712961 1.9764549185383748497 1.5192033105134454818 0.16167888207175135085 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2999 1 16.659476815461758292 7.7073075171402072314 3.6773379041043181559 -3.0838518749909211714 0.39100024062329602481 -0.30144702149243285394 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1842 1 17.704996376078799614 8.17306601520885323 4.211075750674595497 -2.7104199348984394646 -1.4578987744300855312 -0.24569610498958768807 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3892 1 19.452201121077905555 9.0017421113071396377 4.4120379762235355514 0.15109927309975476617 1.145493975534575215 -0.84269230724777632879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2837 1 18.794955004255772479 9.573403796705326485 3.1028125745348589248 2.1731581362257790246 -0.24177771080573040585 1.0834526975004041827 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1531 1 19.981662173262964899 8.4930954154016724544 2.6209018220564663793 -2.5155413645853088589 1.5295709944604996 -0.078974064087148923563 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2389 1 17.362316784838984773 9.2738800982034970133 3.527239866658229861 -1.1621080546924131838 -1.0183786926506839254 0.67718052560918184923 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2870 1 16.769333515755292296 8.1189921208677162667 2.8241432295490258575 -2.4646810825276879164 -0.49680913676275501034 -0.26702166544391686687 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3687 1 18.713044176039680622 7.8862403170113744011 4.3031522633580685522 -0.86995167871042755614 0.70059823957701528041 0.028522773069639878463 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +679 1 18.661240145513623645 8.2624380597322630848 2.7428282272071080605 2.336645588592651368 1.8013049861849683708 1.010915339381568856 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +911 1 17.13169508768638849 8.998270458111198522 4.6362695424324362747 -0.57474115083322818709 0.51557074368718414092 -2.6521326112565053457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2958 1 18.501185122761793167 9.0024831312568007746 4.6911985081673659437 -1.4934788430428418415 -0.049210436199711930783 -1.9544184264795434469 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +789 1 16.542694944536354029 0.36956945284917241956 6.6583126695552516949 0.049826760007321342638 -1.6987456710695982842 -1.3584495096939606107 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +587 1 14.124327119116371065 1.5013740482051554093 6.3730642081285280298 -0.9172022127976907635 -1.8808231554273020514 1.1706021098483907483 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1280 1 14.038989786881062471 1.875077972549548333 5.004251273615675899 -0.96379442465437514809 -0.11592538763032746163 0.045138945787970168044 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3744 1 15.495069459944389223 0.16698329535324629713 6.3972107125463075761 2.7032413400845451967 -0.71082922456659503041 -1.0293320227622482221 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3910 1 16.901420501337419466 1.6246205460921006036 5.8684353877457873239 1.951625255653073987 -0.27164302209471158367 1.7804510702682900813 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +341 1 19.670458830963575281 1.9400303510554977038 5.422748875015596326 1.8412166651700594411 1.7164193504138771651 0.65605432123492968266 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1428 1 18.228756339174569945 1.1473502305252825106 5.5485742771245698535 -0.36758005026672990745 -0.96532969540824908883 -0.57973955900360096827 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1302 1 17.361426443558411137 0.79697549654146748743 6.3594228226783444669 -1.3214904130480127353 -0.6780232686066003378 0.87446528905139775389 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3244 1 19.911308095614792535 2.1934327926892072114 7.2764860302860334684 0.22550989623514608451 -1.2250135027362953899 2.5568942350476913106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1793 1 19.028780939101515912 1.6355187850620744872 7.3352834492246570264 1.9829696413458111071 2.0444082407283046265 2.3224698810935611171 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3783 1 19.689009459804442059 1.1233630331443336114 5.9870822730036374892 1.5229648028027489293 -0.09598187084360605692 2.4971050194733632743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1840 1 18.684285531090658594 2.3408615078378556262 6.1437208069940387745 0.43088816879580982278 0.64467122683600153188 0.015926062387639380175 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3746 1 17.894276250760409397 0.048574931531907998561 5.3617844956656020017 -0.36643775205966216957 2.3280305386676989343 3.8153850857521125484 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3618 1 16.294002145127297609 2.6555403592123796308 5.9535691168766451398 -1.6930050932292799448 1.4695335884003521976 -1.553877209483088162 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2396 1 15.547218061476373308 3.6774027975240990429 6.9816700125119650622 1.0182673439841358753 1.4367554709396836987 -0.050590746138025589895 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1439 1 13.809580666822098394 4.5022467950661981817 6.3863833233606914774 -1.3294442023960557631 0.952589214393403938 0.53696021928358828035 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2690 1 16.075686664448621599 4.7737926820956548823 6.9806113584288302931 -0.45584511910833880322 0.46803345246699806781 1.1252693680425007727 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1395 1 14.830219628917198804 2.5822695676873843595 6.3109097258369644123 0.45205400374947635189 0.16016818395632992367 -0.014241890320554052157 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2820 1 15.630718517668977796 3.5288227920027339657 5.4718565324777088676 -0.78185403802041364418 0.67340200828580110137 0.039817021533198430905 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2593 1 14.477324038868855993 3.6389512192759219111 6.5203521323132154208 -1.1124886254856443113 -0.49189549142220712064 0.38915548800481608582 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3505 1 14.706475228811287437 4.7404006798886060281 6.0133416617719479547 -1.0219166573507441065 0.9996046914775997827 3.5778070155439039013 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3554 1 16.657479949444617517 4.2243181318391442858 5.6793489519747764049 1.2236509841760183637 0.80723240128001649829 1.0034077683332736086 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3487 1 13.890634433739419862 4.0239713719340937104 5.4102403847684730209 -0.99158814870241784867 -0.18672799678143064961 -1.7651723514798733916 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3277 1 13.520950977716710284 2.5418192631496761003 5.7447343280955989187 2.1118417023454916226 -0.042464993402124562305 2.5573524641979896721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +574 1 18.01418742931875272 3.0977062837578674959 7.000290459826319811 0.92499434148398029798 0.97936249383443430006 -1.0594470243074456395 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1204 1 19.290833565614665446 3.6212119097636636944 5.3995965518359820834 -0.49524228135500081294 -0.014585786001382626542 1.3821723201301823192 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2115 1 18.706162032247522831 4.1933987733138460285 7.1876285939777453393 0.165076301682718668 -2.3361264405620145723 1.100251929462890077 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3001 1 17.491567056881297759 3.2289489755991072073 5.8748397375482062088 0.47582800661127189201 0.27069575793406547293 -0.25709606013314101336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3686 1 19.143210698605908959 4.3830788659658725948 6.1210046457494184935 0.089615292305159688357 -0.88822236193953563177 0.58448965706721511815 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2254 1 18.785221092496566797 3.2740852530616844085 6.3188347303972394187 2.1916998301032952767 0.85009878799242111214 -1.5116582756306995439 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3238 1 17.679704306668686087 4.2350405920171692031 5.3263231595517135375 -0.98700750884900989579 -1.4154138873669406262 2.304314286845247306 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1519 1 17.387091611187901918 4.2252855536419691163 6.9207767127239874227 2.5531592975658683464 0.43170157107628953641 -1.7292960588346859563 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2775 1 19.991665109287154678 3.363030767870179627 7.2786536413261142542 -0.16623743701700616215 1.0029105646782330297 0.27752672580816312164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +155 1 15.007536966158928848 6.9803639184746000268 6.4825073028247661711 0.31633198402387474601 -2.4831430102923310876 -2.3015339762022115622 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1014 1 14.859202233971926077 5.3316223097795347741 6.8803921382492294612 -0.66939907092716532944 -0.99351283375469212622 1.385787205707152081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2491 1 15.895922519919542637 7.1077812768334487359 5.8856224640568797213 -0.48279293138537515695 -2.5278595248878730217 0.045843223785434969453 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +492 1 13.58720179322116195 5.5805835433837760462 5.9087720509484107367 -3.7590936897817330831 0.27769054277207466663 -0.32630115730714198685 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3798 1 16.093239263684917972 6.4947269277817367694 7.0745420132748213504 -0.065859904603179392213 -0.37961216722939367108 1.0487353617671615336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1225 1 13.465326796439960333 5.5115554778634159305 7.2890143122332018422 2.2569736896102039481 1.3323172100260691764 -1.5415449704834056632 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +734 1 15.679633746505468039 7.3447284668938346286 7.2497355788639561425 -0.057027277783734467431 1.5390735899895371386 -1.7318355492515589145 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3119 1 14.031840091878711618 6.4166669650824701421 6.6936372585327523765 0.0032397704462705000442 -0.35353211629573932928 0.80968630821067222314 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1784 1 15.790204402972458197 5.9812152644531151324 6.1189502759193672432 -1.391859173509707448 2.4975246979115075519 0.64639378223093602038 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1029 1 13.683506308191420331 7.1201814417596738238 5.1817629805578659941 -0.85856346144974649004 -0.71414368116450532842 -3.531105437482672027 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1441 1 14.920537217130098284 7.0255916365727015815 5.2420400957478339166 0.96809492694616661179 -2.4023643106991778851 -0.71313487589936730426 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3099 1 15.518933188935720935 5.9328639954014805724 5.1741348667869893063 0.40517637220218621907 -1.402317075276609204 0.15878187155856016144 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +832 1 18.494510834743508099 6.6697648897629235876 6.8807711191897382719 -2.0336594357203527927 0.098150879706971908001 -0.20857929560519314349 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2340 1 18.959905593427226478 6.215699008631707656 5.4445154270534255048 1.7533618787653704185 0.35580788625953557736 1.5169067344179101298 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3289 1 19.015041748004740896 5.2989558281071529322 6.8311564026340363398 2.3429405450678397749 0.96583812917098954554 -1.3303835333701896637 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +322 1 18.195932985174472662 5.5534509151040154507 6.1363411479680838312 0.71358602728532971593 -0.67938044911189632291 0.56903620135717569717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +721 1 17.158504922838638151 5.8349843740898235112 7.1612268710074022948 -1.3798991168962126963 0.17200921211782840836 0.92858821377458455881 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2642 1 19.823323625798142444 6.8602640539336965375 7.1852302943051968853 -0.15883064368588820092 0.66697651168663463217 -0.0070035226534923286992 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2742 1 17.841095044026875627 6.9386081255983587113 7.4776672923605636001 -0.70661738888453173857 -1.2940567787815104861 1.0741231810536062685 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3557 1 17.063969243534934606 6.1484169453455326249 6.0496455201521879275 -1.9398569516545998148 0.60592732662686543677 -0.84412634306247202876 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +713 1 19.593259611879343396 5.4543503618642636965 5.6806192368389520908 1.4316676692633796275 0.25556341255344489083 -2.1621154822540074036 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3571 1 17.021663961826501321 5.5102095031114686208 5.2322535827414844434 -1.9013876349956018164 -0.29796435060178960708 -1.1095189441331334557 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1203 1 15.742628324839772702 9.6487723123312267859 5.7713557873766694328 -1.2956158729596500834 1.7755354954097388731 0.63158332544547224341 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1969 1 15.123302060516653711 8.5200209481725774907 7.3965978526373410418 -0.45590661955112327108 0.23959495312510764586 0.71380118101865930313 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2100 1 14.983287341444359697 8.6675467008852287165 6.3722710014166459302 -1.6888253272071112043 1.1158451448944959328 1.1120261198780909684 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2135 1 16.019019481958558515 9.1897804747076303755 6.6011923901542051141 1.923658144615362886 -3.330167395826740151 -1.7451975641151624696 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3357 1 15.594647424274874936 8.2826285620743238525 5.456432287872098108 1.4170964892931920964 -1.3435182707925295009 -0.506722661416585618 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3830 1 14.460068990787620535 7.8857059366078727791 7.0023354696379502826 -1.5444338836773687795 -1.4960316723960789265 -3.3611616331448082029 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2332 1 14.618945998740082715 9.5276150416939078269 6.8746675158465126998 1.6224837429719005666 0.4973552804592978327 0.49228959512309206081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +184 1 16.397759282048262719 8.0421971000913163863 6.5766585094004277323 -0.89301366868814147093 1.3659158749983617565 -0.56273089263547870775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +905 1 16.575956032763780712 7.7405559674907342682 5.4243513862484356025 -0.023661336948704290301 1.3200825297597500452 -0.26288632524997423978 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3133 1 14.206193758381600034 8.2716794584386068578 5.8367514883971995943 -0.77559980235217862443 -0.91108941744774207816 -2.461238969953286837 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3938 1 13.447113442099375646 8.931486871220259971 5.6590682170458368461 0.40525245571610035711 -0.99208498347037632481 -1.2882595486277157448 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1683 1 16.656287635873535891 9.1011759053994616409 5.6772395950911045404 -0.19419224705740933956 0.76959586198130602863 -1.4391116621740769332 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1130 1 16.665858390927724031 9.9423515757144205196 6.8448404482898821399 -0.18300786191661169711 0.88619359484120996395 -0.64188844631053765255 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +658 1 17.246470472038545552 8.4910950715582167447 6.8535919698096003927 0.96293523336571651416 1.4406904634935568943 0.076474618442107386573 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +132 1 19.09851178625474688 7.5227619897420368034 6.0309194043402003516 1.0945832939444510856 -3.3308734953491709874 0.90862024183060408067 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1046 1 17.604199382068092206 7.633423538992177626 5.0413070223302476336 0.97882376306510687769 1.2897711510572233973 1.7591865340658958683 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3863 1 19.308877470791969699 8.567551507614096451 5.5195578037008212746 -0.9941023611439255836 0.94631357762485202034 -2.7672684060264782779 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2628 1 17.338940244854924799 7.6333143038607085273 6.1629099360007000286 -1.4663088072067316237 1.4301387929139302013 -1.0928479992930379971 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1217 1 19.902864459994699331 8.2179286468117478393 6.4953105817098801822 0.38547705796226083841 -0.68050284279589423608 0.1030560966722222499 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3900 1 19.977424139755775911 9.8560437505280429349 6.9178616159873582703 -0.37304190015751509391 -0.2682769130179854522 -0.96578845338330465697 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1440 1 13.90516784835540065 0.15088747342404232321 9.334164841957706571 -1.2577237127189455634 2.5586346115350853125 -0.39687828285334020295 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1411 1 14.116647100162579065 2.3139760196538121662 9.6700136556503846208 -0.16781373414249789455 -1.9047621378296819561 0.33437596103985195439 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3333 1 14.608145878399175999 1.2833124556527097937 9.4686093901416530372 2.4295616336443508487 0.071976289269023885353 0.17202675789701682429 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3483 1 15.067706312369496757 0.73543085301628174921 8.7004870676684387121 -0.94679273675266906185 -0.0014131093697018993691 0.88608130267689322324 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +234 1 15.633009322621957082 0.97245760402884307005 7.5437200258639567352 -4.0159619499900491846 1.3214757967215928769 -1.5712798938279408656 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3664 1 15.633250135523024227 1.3465876337811404362 9.7182743926102546084 2.2119780536365736268 -1.3551545192387566274 -0.91847735930655083347 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +766 1 15.831662985768661045 2.0578383200145276 7.8635001463944549371 0.29442788184508772442 1.8732983190766951953 1.3572053062578426363 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +631 1 14.875274921255908112 1.6871885822942109812 8.6298387705914603174 -1.0294665681517316536 -0.63025622028710792666 -0.33017611453354422935 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1855 1 14.212594389664687355 1.8038066609326763867 7.8415862001234035716 -0.83910506932778983202 1.9153420770492659564 0.3476314536290621704 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +362 1 13.864054397623609916 0.48334131690256992853 7.9162093339352610499 0.81066489231542948612 1.8543500394200331804 0.74150851062652267665 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3070 1 16.621969196783854983 1.2712921261572058818 8.4673106441703307468 -1.4736760691629275932 0.95936409007847955888 0.8988869533177468174 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2313 1 17.361178741191238828 2.1815134929621473603 8.1127517185666242483 -0.39837389235591808001 3.2072677303130796567 -1.7063567206056948766 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1409 1 18.391930548438875093 0.17418943730244210166 8.509065240664535068 0.88140468654371084689 0.65748729983890097373 0.74134570574024893919 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2286 1 18.266936494856917506 1.6610147626611757588 8.7826655947096021748 -1.5038789595760508888 -1.0838663738636769018 -0.97311348203228276166 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +278 1 18.954251027230597515 2.3107732352598064907 9.599156347660365185 0.55030456180226683394 3.8601952521006048791 -0.91406559076426074917 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3932 1 19.163846221724515573 0.76160039535172607827 9.0027486108051775204 -0.98616226522736705196 -0.39635280700020403266 0.16098594572512314738 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +732 1 16.978218612780384689 1.2467894190344388505 7.5265160498064087591 -0.43761764473507613893 -2.538092858874551272 -0.91130717564406404918 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2614 1 17.604430188195710372 2.1768888364168805793 9.471020687697912166 0.023092498235549312191 5.4791101944569300386 -0.17667577227290970354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2959 1 18.832711365221907585 2.3671893336976013167 8.0854306166805223199 0.30697391616075891951 0.31871392134955411901 0.59875033138030731017 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2782 1 17.220453630451888927 1.1216042007238555822 9.5378928448016093711 1.4059564133837827438 -0.26597931984619022083 1.6371792434218628287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +637 1 18.034953230838667082 0.9654688020527923964 7.773598296756007997 0.071538864032395177439 -0.37909651174596437073 2.1494351355856746721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2430 1 19.949981633327858788 1.3170323615681402973 7.8970116153164369166 -2.601098252274903988 0.71613614284291848833 0.69698209914665865128 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3931 1 14.460112841763441693 2.5562566932158445887 8.7733456615061680139 1.8547815129886775498 -0.17103881797493267203 -0.31747941863761242054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2925 1 13.836079939151447959 3.2121018723492804625 7.5595797797480779323 -0.50884624331609584758 -1.7400167316223031921 -0.63245340646484993208 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2097 1 14.455587422854048185 3.3993768904377898998 9.4960202624066472055 -0.45746564041251780441 -2.1178116059961449302 -1.6004331316558262355 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +856 1 15.703144508178993988 4.0826276982447504693 8.9973634964117525925 -1.3609762451334532773 1.7327840098974705008 -1.1139602490793749645 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3300 1 14.465768171562942257 3.673606453118671844 8.2762612673154372089 -2.7243472828410397746 2.1049948846744035436 0.89310625556246758805 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3259 1 13.36445683178214594 4.8132007897486426273 8.1821839461407783745 0.19804858466772315428 -0.33063521014688729283 -0.80677488412092124292 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2176 1 15.98905308415514348 3.5017674556442921485 9.7217619939303290266 -0.48289675920977648271 -1.2113200446088083773 2.6152549322060640868 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2183 1 16.623619204039613351 3.4011329284235025661 8.7534275073593583727 2.8232737208523750461 0.50999439491923992396 -0.35053621503575749241 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3623 1 13.518364011769730126 4.485031278502367158 9.3683889008328726788 -1.272740914016885494 -0.02345604665506349773 3.5425706509669048216 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +67 1 14.387222267691726074 4.5161628329905232349 7.6665238002593456557 1.4181681266087624582 -1.7313592459925661871 0.27196048627250407614 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3174 1 15.378865074100223964 4.8984895605292209098 8.0330663699497222296 -2.2907738127847636633 1.381784096509353521 -0.29640597085423830981 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +455 1 14.601256295298416177 4.8516090763354347004 9.8618900460565583899 -0.045427597248730404444 -0.37638027637349275034 1.6194874675845076784 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +394 1 13.485651064086527029 2.9464913754735633233 9.1033917515414835009 0.061835991229838162264 -1.5991246198616602125 0.09829943609492988732 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +146 1 15.925512079172470692 2.6470244381536587319 9.0759823476880914228 1.3034506208297442775 1.5268868315702728289 -1.5210650612073677301 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3825 1 16.355368617041456503 3.4803102969862496074 7.5616315698680072188 -0.48467937306982067369 -0.8574751622297944742 0.99448247163656722236 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3462 1 19.070759546290208419 3.8543849902611362346 9.3309639529254386758 0.42431893230389583493 1.2383619996392605245 0.064072336405385482694 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2563 1 16.802387670985851287 4.3014801125821380268 7.992562172145857069 1.3528190945587981187 -0.86648077911154264275 0.78572582229376897178 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1660 1 18.174059147951282966 4.1500943042424589535 8.8390151628194573163 -0.55069492647972861921 1.9811620677141237312 -1.8142108394141975847 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +522 1 19.36308093426321264 2.8908985434690395167 8.9075506879567338814 -0.66728148113755048065 -1.2200105082323100536 0.86715286117593393111 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1779 1 18.262355462831095565 3.2692150325635491726 8.0786645105368410924 0.31234876101866171361 0.25579837046765940833 -1.4577641780062879917 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3236 1 17.696748889429979812 4.8667554265096040211 8.1606414740860664381 0.25760333416771635795 -0.73000759937713066705 1.4778356648671051587 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2510 1 18.591575320149647865 4.9173228524953991325 9.7166556018004559547 -0.95978180052021444535 -0.97527207722001063583 1.3715394457712792864 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3373 1 17.590717662385699782 3.7725016311855994466 9.7552515223701181668 -1.0566629562548690568 -1.2393517610088229386 -0.042790517054525821494 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2755 1 19.42189545959982766 3.6407272719645402681 8.2776844160543792128 -1.7918675653707636375 -1.7916679666451862385 -0.71773911403720680457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3355 1 14.980502239491388039 5.4276684649005479955 8.9809075004897103156 -1.2501516695765861886 2.1272400399338513566 -0.77545612244023520709 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +396 1 16.589555800072492531 6.3444960595666106684 9.3090740283550914569 0.39136335697748614315 -0.075715697747532173523 -0.056599500840067262786 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2007 1 14.654094284439727502 7.2012341773278754076 8.8953168206365429427 0.54660990805342468679 0.5880877812164888585 -0.49427543092595227492 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +191 1 15.200226026230557963 6.3658160158746461832 8.847844147624959632 -1.3189510770572221432 -2.690430675959357032 -2.2836865904410710293 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +987 1 13.964469558932409043 5.6599337327995939972 8.6108628779473921355 1.9913697718544334236 -1.8351709471270363228 -2.0792849397189576699 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1655 1 14.05065096899574506 6.3173024013288703316 7.8810625592615446422 -2.8538692361499125028 -1.2627385163296382942 -0.64127776513004897119 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +847 1 15.914951895409066296 7.0915126329611828382 9.9363670105025629908 -1.8374518020620624892 1.5579982001519601109 1.5257949639033969724 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3153 1 14.819403735780372955 6.2994128983010995171 9.9930976897270316073 -1.0309005875131327379 -1.7630343898276310544 1.1018618643477440244 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3705 1 16.385746898454641496 7.3747249460962525092 8.2472198292881131465 -0.58557698459837692617 1.3747339916191012588 -1.1056683465546901513 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2738 1 15.116401328834667694 6.1662559566809083123 7.5865151232472243237 -1.0751008159549126919 1.1820885096076916287 1.2027712443975737688 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +144 1 19.619752874322145431 6.8896036214344036352 8.2388354379847701381 0.82723046793683441269 0.88566794841894846968 0.59681753124622705098 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +104 1 18.604638882627906327 5.3241441047992843494 8.2412881408468958711 0.56401800123262968434 0.23747590074743574196 2.6006090211734917972 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +228 1 18.012341678173942938 5.9997017247421959851 9.688701955248728126 -0.16707752990792631986 0.53317355706958102779 -1.6414944038879133448 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2633 1 18.797496917503529801 6.57487510362873806 8.6842967809282978209 -0.79730429114121192935 -2.2430783993108871499 -0.94303402709479555721 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3419 1 16.931062783545630879 5.2039146705121073211 8.600273450863049618 0.95026360688934841114 -0.090332428778812270953 -0.85407454736883869906 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3661 1 19.282174762377923827 5.4455285793414081041 9.2004017124889827528 2.6426036948648086167 -0.74712826620748618023 0.41913100172816170064 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +517 1 16.977171732501449952 7.4802241294139752981 9.8378935399238933712 1.1656935988298668949 -0.39694691766258954901 1.3119718412116572193 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +978 1 19.796818079359347564 6.8192946614937666183 9.373211358280563843 -1.1346726559027837666 -0.45377778960108861028 -1.1282272475829879799 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3622 1 17.637736560112632134 6.761578736986496807 8.9302074780893558881 -3.1003741959922046512 0.05995913071963993729 -0.28298596785245561103 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1146 1 17.318352100227293988 6.0116346158289335477 8.1927990622886728289 0.95210070439091754047 2.6877389842044561163 3.1514495287642536603 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +614 1 18.161787797647185982 5.9127481093718170513 7.5875578606676796767 3.4109813993622672967 0.64446676978420458504 -0.14491501625875799486 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1019 1 19.70246634117676976 5.2566498334168185735 7.6149453835382603373 -0.34753337753670177079 -0.71158496891516576088 1.8016844475913909029 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1799 1 14.292486202647227245 9.1059548631032960486 9.5353243997070293858 -1.3037830200003410752 0.45769305488593381437 -0.16121141528342558535 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +405 1 15.822620619174081469 7.7736176064483757386 9.140722196184970727 -2.8216111853085141803 -2.0525985957923471581 1.6478330974481365523 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3635 1 13.870136866394945585 9.8592889566944030832 8.1915146703080523594 3.447506874324164805 0.43827578231806957332 -1.2636038535412075223 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +62 1 15.242965594291980835 9.497046997894972975 8.6568115378626000478 -0.74739472149288666003 -0.90658089264556296349 -0.89546802736927155753 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3439 1 16.105298013125107559 8.2297662473162134233 8.0051978549829598819 -1.7412080038657882231 -0.6584725094427645864 0.28624644324680503793 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2062 1 16.127364163127968055 8.8572627221583140056 9.1160823707407576677 -3.3600148758764087908 -0.34295949181741064438 -1.9852632477820471024 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3722 1 14.925022826917521357 8.2497179749797542314 8.9694632478918450147 -0.4591479139081059424 0.076601838958170687111 -0.65794417594976295494 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +887 1 13.825657581576473731 7.838769880725807937 9.657239074474569307 -1.2362062101633723987 0.52140719303027094345 -1.1854766728370540463 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2427 1 15.507474345996962839 9.7054547113330560393 7.5567437479150205704 0.66838302550033912297 0.99432890897454884183 0.91814127772020526219 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2965 1 14.461823694207884827 8.4335757947219445185 8.0495810462430785748 0.91947286224231750129 -2.0304046079103286182 -0.62659326697855888266 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2709 1 17.408526164997013552 8.9388397761938787056 7.9272237504580385092 1.0677405886684538938 -1.6518013400971647275 -0.35990321464788999073 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1796 1 18.093839882494780369 9.7673744994972011568 8.5754738351159378595 -0.71735393402843949939 1.6487826793805380188 0.44101948282432795745 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1713 1 19.234093997720218994 9.9038110702066557423 7.577732896518631911 -1.7630405708848309043 -1.3347078459991157384 -1.7908159309251283631 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1421 1 18.569003836802444596 8.5079654799319630598 9.9221794183099909503 1.282040594980207393 -1.1879840340524867592 -0.66901410127896054902 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2971 1 19.441422326475102267 7.6781506591483026369 8.971692747938414314 -0.5802622427246065806 -1.7147222710480038987 -1.1709211201076832332 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1987 1 18.252619534553076619 8.3621010640203099484 7.9840951933277839458 1.2095382201172546477 -0.41300270205675898572 0.78435953517752388109 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1652 1 18.564452276820176735 9.4348285543357377492 9.4122889661658053484 -1.3504747685778237809 1.574528839529160118 -1.7742297718225312764 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2589 1 19.563878340169658543 8.8813985780103230638 9.5934853248053659769 -0.37095407953416448255 -0.27265200587692051126 0.95432775580177664487 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3370 1 18.343034254234524383 7.5411452612938392193 9.5887529734879297649 1.8604433089313292538 -0.61334748645614123319 0.45270106074116933659 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1218 1 17.328341305604183731 8.8034420558007724367 9.076290229976875068 -0.71307852425012219211 -0.77674522368041254428 0.62120241882904225772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3870 1 19.059663535335147344 7.9314228883389663594 7.5600142603991402623 0.20503231253072903839 3.2254999332529630252 -2.7276220979680396717 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2155 1 15.990953115342751545 1.3068169907582460887 11.051640638129031302 -1.1118237623598894448 -0.11674053009119293722 -0.78891835052623515701 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +263 1 16.286028864300782004 0.28357144704198944396 10.668954509085315507 0.42639815265638081332 0.71120688423216693597 1.3685527517427076294 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1837 1 14.32325714483710577 1.7416474234766552431 11.292523235448067354 0.15164686339741528798 -2.747478507527483238 0.61818402233457792061 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3765 1 14.930422710665469666 0.7602885163402806068 10.349097043839257992 -0.97937579733587498687 0.9584795126351857153 1.1047967574717996175 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3228 1 14.981701484344409181 1.9435851580329928101 10.375529625195683892 0.78795725275096473172 0.0063970177757669034746 -0.10168089904599869611 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3202 1 14.109770365499933575 0.45295775705827201474 11.253677589207647713 0.23027967393405401886 0.96070524805470824958 0.57234852022357207701 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2993 1 15.68802595794543997 0.29648124281589011142 11.537595451002674807 -0.24434902666049243547 -1.4742530502700841311 -0.035398773935039477834 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +320 1 15.405362449966832017 2.4925725148368038653 11.941491839275407472 0.85658834350790136192 -2.9844810496067162298 1.4674587584692355691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +366 1 19.231775610058317483 0.70913589965450651853 11.155402754082921035 0.28618215136713576197 1.3077127193964228624 0.56049857710844752656 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +695 1 18.950458469666944694 0.40625790723610588628 12.302182392285082813 -0.60456962514489664962 1.2152301269315211041 -2.3344686148988444963 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1599 1 16.739098177343077367 1.8460498105887843678 10.134062375398253053 0.5880683756424432973 0.092249372662523546063 -1.6944500291872084397 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1197 1 17.266416763044265537 2.1897953654761854736 11.402615258498739692 1.71876970567052334 -0.10717238911530065082 -0.21617900024678574078 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +495 1 17.154395853281588558 0.79835577896309928292 10.89359133717703898 1.554862800588047822 -2.3371610552498998103 1.6532794823495593484 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1553 1 19.35455815492600351 1.5055861649389239432 10.279545208046068083 1.4165185963351318854 -0.46677026369670820971 -0.74175452605166480868 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3321 1 18.265086170283311162 1.7234895096262119463 10.35345892058128392 -0.50545289787650715674 3.8583712205353957181 0.41070443540211265532 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3657 1 18.365141377127915945 2.4045541522123374811 12.03784421214780842 0.024478365895494312576 -0.22847027042098716487 -0.86577298823847181897 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3599 1 18.392319207752887422 0.47017921662953959805 10.529446842951248442 0.61511493769839820089 0.034746938419561022859 -0.044532766275873506001 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +110 1 19.841475039266352809 1.0373511041724188253 12.201747898180387963 0.53931947154428516722 -0.88298213790720581073 0.13319833584183865538 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1467 1 14.011022561768735173 2.7247458016399876968 10.729669276508436937 2.7291860198263444559 -0.12039591306433286566 1.4274499328325978009 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3807 1 14.618160687794787833 3.5667477063893411326 10.884598077918161252 -2.4648596267133400239 1.4078825889319106501 0.14073619574722445735 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +646 1 16.52499778969422195 3.222958605694751455 11.534094546162721784 -3.0473124065795169635 1.0816844564931720196 -0.73197296709191150832 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3651 1 16.24111352624154847 3.712500908432609048 10.733943830536839315 -1.2101379976955342066 0.090693071896217919425 -0.69022882764908255471 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +915 1 15.092256347780656611 4.0618453609225699807 10.037595195376809443 0.4479108758835692039 0.53440951449778939519 -1.2937132216628872694 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2271 1 14.933756180329748275 3.9943875271471869226 12.401279684153935889 -2.1814845437488479263 -1.4341042792580318554 2.1346852344971924964 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3781 1 15.139661019805995323 2.8928888146982143503 10.066510819900415186 0.13207978120782662423 -0.89996121350303759368 0.40492897705273489528 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +986 1 13.944688590879708912 2.9021687520310632813 12.202221342334501841 0.63199499163217320863 2.175380866264208457 1.1509104152941662669 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3602 1 15.852117975945937189 2.5485795708528731218 10.813452646491299447 -1.4158576320296594186 0.30410679270535134755 -2.6690943043521584421 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1091 1 13.470137102553923825 3.1541220417673443421 10.151583576185132074 -1.0555917301611714709 0.13479041135506419913 -1.9791272907170462947 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3614 1 16.741880999255933204 4.6566459663674049096 10.071853277662178527 -1.8597550351365104149 1.4001251952470301632 -1.2601489223268105277 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1822 1 18.01754226702690076 3.2163287802884772404 10.451911965050550535 -1.3329135871795172452 -1.7789701693269557303 -2.1330479086161910907 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2682 1 19.624096141869188159 4.7918758006903221514 10.159474709131764314 -0.97932802232519278185 -0.59342090595755381255 0.78085576525203448384 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1323 1 19.051122912017920186 3.511006539976488483 10.556068417185288766 0.12613847972554115273 1.270537643664791716 0.64399258043356311099 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3399 1 18.747789513817853191 4.369180649610473921 11.090187812634928477 -0.21389189898351282371 -1.0316782867461402606 0.33039544540726034638 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1290 1 16.87324882267382975 3.1046535056814841269 10.145607881235806147 1.9783501684611337623 1.6306619197774689933 1.9341653806429965901 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3592 1 18.33800588072631399 4.6167480130232041446 12.226402727964153172 -0.96426816136800241885 0.49332263462213998828 -0.45704514860855161018 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1154 1 17.297154656618392465 3.6829658283359130166 11.959759434357295049 -1.4523912246625956257 2.1881503395677315282 0.048864514995974953071 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2841 1 19.968267680897959337 2.7115916784351821178 10.464290079774016817 -0.49073836978956891786 0.43811327249518705607 0.28385484637976343691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2218 1 19.703360918629517329 2.8200330548413203857 12.320579570185557827 -0.69482238831694342895 1.9154977038954212887 -0.21674492028344705119 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2726 1 19.404546638854199614 3.8750446564218168355 12.430010206814598561 1.7755848900828870018 -2.0186221804060955343 -0.35756293798865673716 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1663 1 18.999152153828735123 2.587702606434660435 11.091762433954380995 1.9279187341836210301 1.5292981432237455763 0.8612037605740426871 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +226 1 13.50700588399972446 5.9767828041441530829 10.503706062456773296 0.74974287601303846174 -2.0312292386269485966 -0.67345800894635499123 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +596 1 15.256331015986999589 5.7825234435146519729 11.957783518206259288 -0.083502082205261146663 -0.80507976705264461259 1.1370621534252511875 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +714 1 14.216231884252556128 5.641027683585980057 11.867883008489318541 0.3844206172031130464 1.351133122795385999 -0.19220868859702616716 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3430 1 13.684929707906968943 7.0796347880088008608 12.355154571854209067 -2.6990540517761467676 0.96020289339711961674 1.4404158938314082228 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3214 1 16.211534831341829488 6.5664452929194796482 11.651660543334472209 -1.2926765778705993082 -0.24750281309574279076 -0.22316576007298571938 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3790 1 14.263117304096303073 7.0492758619732276415 10.823688834838684159 -0.8811844468232863381 -0.98964418029897149864 0.53494242848514628186 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3591 1 16.169601829704411955 5.4434154346212979547 11.343016954182296274 -1.8558259947028574732 0.32348340408917181099 1.2423556293679749452 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +452 1 14.649539159091473195 6.6951822693355866889 11.87422699465248499 1.156047231547419063 -0.46613402716240326384 -1.5474241962596739786 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2034 1 14.252561916348843951 5.2295985328267233783 10.792895771691378926 0.27106788728584402248 -0.58338775952487786913 -1.0812909162843811206 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2764 1 16.603733181810355291 7.1981859668744947456 10.844335382836064241 1.3109072997956334738 -2.4177669958319985 1.5401747528179825508 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2953 1 18.47934910416636356 6.5346781799662583268 10.854372499385423367 0.47177532365852720142 -0.88342132909117121464 2.8444702788971443219 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +400 1 17.246817543252682015 5.262709039744959405 11.028133789728034486 1.8190193567702026556 -0.94216274750696993312 0.76252702680515715983 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1449 1 19.672432535174039003 7.1045612507930737678 10.43354097575893924 -1.0290141175280804742 1.9960055855916709611 0.63416562169144197192 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +727 1 18.99078400948800649 7.3373150180491633066 11.706193726671664024 -0.087727738270190480652 -0.079107874994785457035 -1.3817917551362199902 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1476 1 17.405922899256626835 6.3945535726095199536 11.026565789919434479 1.8053126374890478001 -0.56399670393527556733 1.3935516450531644228 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2897 1 19.246666769634270366 6.1446374725040318054 10.164020092942912754 0.81409370188158025616 -0.17939610584557291739 1.3884086450424748538 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +826 1 19.822582167492914351 5.5497966653531092263 12.247947756781208284 0.64288017504755567977 2.1108736031475694439 0.67912208790712325079 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1401 1 19.702470751590141163 6.5799228454397695742 12.149415875475234827 1.4859874075209997812 1.7679154738955609183 0.1002413651990752691 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1086 1 18.740825202580335684 5.9909803661562639476 12.02951254236695533 -0.70435260068435512348 -1.6098667678284248606 -1.4287311682120882317 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2322 1 18.682506932087353135 5.430651420958564124 10.61972812093010532 2.3295797841375507353 1.1670897390936694205 0.44460811807183248101 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2409 1 19.607839280204604648 5.3684410352433475921 11.131076116326138248 -0.82826200466728139293 -0.091737336604704108889 -0.83991577811985029811 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2923 1 17.374519176536104226 7.3976181111728633866 11.859659773691971552 -2.8938292640659417643 -0.20922126692413439697 0.030376966838056906894 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +602 1 14.501877530446074971 8.16964768591350321 12.217030709372519226 0.32289167556786213531 1.5284552788595482387 -1.0738195517503483778 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3816 1 14.145389013804413381 8.2652384304936070691 10.728546498204670101 -1.824947461487152145 0.30888381423591265706 3.0373378777307324938 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +402 1 14.556594525051407274 9.7303124990324718624 12.155402203116908666 -1.7089119909796539609 0.22216007841747489882 -1.0530201672901802201 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2992 1 13.957271113082700964 8.914946941571452399 11.522964034049516968 -1.0345305017673449566 -0.97532953217790496758 -0.30797384713726239092 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2560 1 15.208407549907267509 8.051543715992375283 11.483398085470142291 -1.2428386081872275781 0.43064136752039694489 2.4187741159059177321 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2900 1 16.093812372431802515 8.1786106199608212819 10.250287758216153122 0.82336889951214353722 -0.42872898141783782888 -0.8079395787369658688 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +20 1 14.437087008176277436 9.535602008943071084 10.766883107617065463 0.27141432333553938694 0.049992655715002234929 0.34515867632535918164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1002 1 16.610913732776882767 8.8848626283286140648 11.443347353094553753 -0.3826551902738154487 2.5770490013987932265 2.0075756756402176606 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +42 1 14.875162868351363699 8.2470858440495149466 10.025701851826394062 1.0271776955383695729 0.33378037068163624035 -1.4502301499789120864 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1724 1 13.378567632631963136 8.1627539745204096278 12.042685843961510983 1.0292159199950803306 -0.86748011627379595367 -0.1358916066617578966 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +970 1 17.864253431297878905 8.8697426240771761741 11.32889333165433321 1.0734659526968388654 0.24230103663400198721 -0.65156056432977549342 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3821 1 19.040762835651911189 8.6061690458159443295 11.206431720555723786 3.2598544771279351906 0.71589556073900950661 -0.39535302460996685214 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3889 1 18.474868937961325344 9.1596095421690453264 12.32148700956798848 0.20359143584400943294 1.8564619581623320599 -1.2052081846051565517 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2158 1 18.917303921581453352 9.5254029188515456639 10.851058694654135195 1.005948879845629973 -0.99618701706125867279 0.61298428321249753825 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2168 1 17.815052383801688762 9.1270608125168450897 10.267753782600253842 0.81662907288809860606 -1.1743497385783177034 -0.38314546847317526579 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +133 1 17.847076626905256092 7.5811186960602841012 10.644511274073030549 -2.2531128250445604522 -0.49795903874501729058 1.2057491530211241759 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +895 1 19.92478502707623278 7.91575353622203437 11.628226066164385699 -1.3389491931319039697 -1.7488083271958578813 -1.175334708264889505 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2922 1 16.801474803154331283 9.5257812517440196842 12.452400533780972225 0.2130238232823132849 -0.47747717532362488058 -2.6611675169175987854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1949 1 14.324381264406570224 1.3758464395707874495 12.715527074529921592 0.36493488026689829828 -0.76606161001654404785 0.72936518049849186074 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2255 1 14.969704989592317546 2.2229477050799517635 13.233021043973716147 -0.53997704967032544854 0.25525593669712937084 -0.039055340404580925207 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1888 1 13.957768978269390558 0.1133985780431556456 14.278663951249916053 -0.42375682718661716875 -1.3808908359506670838 1.5758247206596613932 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2659 1 16.204913783271912564 1.424959369027270828 12.912599368360169194 0.65763829422830277771 2.7062010587255480587 -0.98056376914607368267 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +78 1 14.97329248065189411 1.8772443078280112161 14.371716224359829539 -2.2537473254192681438 0.57393176289197722628 -1.2280173038684438769 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2676 1 13.964775880194382651 2.2478275033361612145 14.234163391302748991 0.68685853848064404303 1.4343990952063607747 -1.7297026467351206414 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3404 1 15.897538182424101549 0.84858196864457269282 14.651408028216504675 0.23449090552265042242 -0.87090871044488693542 0.72728298910896815865 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3646 1 16.173182959784735857 2.3568420688133011609 12.611779626145336763 -0.50497353630318930762 -0.54096779332070188406 -0.20506121952621850224 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2475 1 15.966993121041353376 1.8156191348848347289 13.895766277932651178 2.8621416324277659804 -0.98074748984221538084 -2.2588699335512303357 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1354 1 13.537509399888133288 0.59868990048136727644 13.165098664364023762 0.515035535553762025 -0.39268336217432697755 -1.2411366935189500627 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2184 1 19.753489067525833889 0.63173209260052987091 13.140928402600318137 -0.91376377824391608051 -0.67019462661092255029 1.2903299123760694211 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3528 1 17.578738757609237098 2.3336448868790289346 12.61790403022827789 -1.831864175586852328 -0.1036926019491822698 -2.2327090081023754919 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2419 1 19.43840643436504223 1.4776367779419818937 13.973977578990682602 0.71190910259801731819 1.3117209547770285472 1.5925427226489132781 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +304 1 19.126074609368373558 1.6562531333693080171 12.716933975648652577 1.2586873055204552685 -1.2903767199018256751 -1.0976129247696513325 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2571 1 19.26671043395785432 0.38688626331932068902 14.609390589924782233 0.49787517412742343659 -0.91119638968179672567 0.38861515272930885478 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +621 1 17.792386898431587383 1.2056407695141966308 14.366379454749889533 0.52863416887672420863 -0.72874270231923443664 0.16147737988127544573 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2705 1 18.649339195078002973 2.2579255784597531687 14.23685017801528474 0.67031207597777409113 0.68783463101825936814 0.65778835712145233838 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1934 1 17.783090642028131612 1.2898675311581009328 13.397298256682582007 1.4532261437065268073 1.1707024867980579952 1.8918858028453817699 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +17 1 16.773606879106086609 1.1758872078491686697 14.060138062035697715 0.22552672990606786874 -2.3535537531287680224 0.64740649877539280244 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +202 1 18.195184221201849084 0.051100648908351677113 13.989293032510227377 0.031076347661288077073 0.35411154422606461178 -1.596077098303485764 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3697 1 17.581483781646124243 0.44135222241856125747 14.977338367558237664 -0.21859406187649629838 -1.2219051070104618439 -0.97902525132552287168 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1751 1 15.882682597429297999 3.4110222839050039489 14.831416082366299491 1.4668794904759130393 -0.93960256832857813603 0.13729050846385473794 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2362 1 15.668136923062597532 4.5213820499795867036 14.102309246606765214 1.123515136168805828 3.2004267165554503016 -1.4820737294131867134 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2401 1 14.728713298084462835 3.5863564029443075754 13.369256632099514093 0.21153979553326321406 1.105790334376784978 -1.8768593148880108323 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3971 1 15.735871355082647227 2.7806914718319677426 13.563335977877256866 0.65484824288356469069 0.42169608972135647074 0.25683284448601917394 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3811 1 14.826093714661439549 2.9872691237954112076 12.572099316169902394 1.4115250870125459759 -2.2569952092317642212 -0.65920095886533058849 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +655 1 13.564998505700152975 4.560305565096150815 14.754855692439614145 0.4153813874972109299 -0.99302404150527801008 -0.52396277517810452284 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3303 1 15.74890081276141629 3.8378264863941313756 13.436965969415432198 1.4943206985136634479 1.5794866106575977671 -0.80218701689370719432 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2814 1 13.950572588796546825 3.974889217336481817 13.976971140477026267 -0.59032551355411699845 -0.64966767568806438327 -0.60913832468052631075 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2863 1 13.381267242861815348 3.200728051249193129 13.034464205028964301 3.2955473709661431414 -0.41541990222140851019 2.1171377177724619578 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +829 1 16.608151760085057447 4.2101383773937852695 13.793293299324545842 -0.94845766696607147761 -2.4353461686314785695 -0.62334480981907403052 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1150 1 19.876741928521845182 2.9356230286405304852 13.413482230857361799 1.5384762190247986968 -0.19339469708519615998 0.069186849506018166522 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3794 1 19.9173650757159173 3.5106272215665472736 14.491055375408505412 -1.6093228496128153537 -0.079848155123120503895 2.4082230816293090925 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2217 1 19.243588848098621469 4.1702143720631186241 14.787402437837561919 -0.5183009479963234245 -0.78230667518082575018 -1.4441918173263765812 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3966 1 18.072923152248485223 3.2517542595159656393 13.682611972449093329 0.51400166590818219259 2.1065126633016793001 -1.6296236365604328533 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3393 1 18.451449130367322482 3.4809693854347294462 12.719821934592610901 1.1686076059600638555 -0.71960688602153599636 -0.86142016105192431574 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +981 1 18.676522868077366724 3.2939406085360305454 14.563569354735848904 0.23872315480287037426 -0.73151901803140095826 0.30855530651411960941 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +160 1 17.968817679376815732 4.3096015103892906239 14.421505621461097491 -0.53747212835912239193 -0.37829410717211620074 0.57280196672036665095 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2982 1 16.890978151500220861 3.0569623161500847353 12.593816331505593098 -1.1987512242924074357 0.64478254720653849219 0.19376037753014541121 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +954 1 16.849661023976580054 4.3406811309403767751 12.543180971435344162 -2.0162552477089712433 -1.9976332672308576566 -0.65767599830591627619 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2289 1 19.406719553324840888 3.9256805511065380188 13.66142489386283998 0.070428769820425118908 0.44877499847148166756 -1.2039810317776458159 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1581 1 17.274168944526163472 2.7873579852972771853 14.462295891242215262 -1.0721463801024515572 0.20091753782177645959 -0.74040071778891347609 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +39 1 19.218053767022361455 4.8091756591386234376 13.99848536736899085 0.62278691172032429879 -0.77904665044199294943 2.801346610953923566 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3314 1 15.358795433421740029 7.1114285362359055398 12.964054058300455097 0.95185118760812115202 0.57411453082025765138 1.0603142059765695571 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +479 1 14.576579920778847566 6.2525646464437256711 13.058806806716352966 0.14836927003804586955 -0.068262304078994182066 0.10704680275722554261 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3815 1 16.433088858575690239 5.4162504057686060577 14.726915188854567518 -1.5136042455157865394 0.066967069819551847121 0.66831529356399077546 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +572 1 15.916793015570778635 6.2650312506496952381 14.153975497588136889 -0.72742776333282566092 1.2809169344985289474 0.72874776908345739734 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2829 1 16.654595075318546549 6.3252081412049747655 12.725264519157942544 0.29909065780260096767 -1.2638922176323370561 -0.12726613670493483466 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +449 1 15.738937318543875676 6.0274339132402312558 13.008535385458252165 -0.98262037040831973211 -1.5417411378576464376 -2.1708108482027634878 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2194 1 15.049648761050034906 6.3120615509079138761 14.796014573520720248 -0.71206597543923044746 0.94820611099077189987 -1.1825368806992893056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1552 1 13.649225666271144419 7.4500417380432226722 13.341323822683120781 -2.8024789136375600762 0.78108648613587383647 1.9129360879575334486 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1085 1 14.968280086540127982 7.2687847499581383914 14.230247756606475562 0.042912615310037580119 -0.47562133843649490039 -0.60924204984491114878 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2913 1 14.973457736643965177 5.2232026554117476635 12.862592243981039175 0.10542180884416378628 1.7936036721766102087 1.4440156494145413024 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2707 1 13.411139382516134688 5.4941008613981416886 12.576711590239119332 1.4112267548371961734 2.1594833614052610926 1.008408499358073751 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2354 1 16.476338667325741483 6.823092248030673268 14.97053931589325515 -2.6809251877043034362 -0.13168358692151460598 -0.017058886929187114939 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +588 1 14.05877453931146448 5.0032057907158344889 13.502800135739397192 0.40217508724050921032 1.8564411831011857767 0.54652998341591052522 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +946 1 19.817870409359390038 5.6954649693775225572 13.432324468029452902 1.1310642475064569545 -1.5352775818405508534 -1.1435713860279215215 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +327 1 17.964790693661939258 6.9343146554736083687 14.890886267978237001 1.8323927985554937514 -2.0705530349280927283 2.2053768008882670415 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +142 1 16.733367292685613847 5.4214358602215275695 13.740331808671184532 0.93542697330189605864 0.11680108650282453042 1.3427840317819257354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2102 1 18.435942106819979358 6.9933001090987678694 12.623419763939436322 2.2975061446239117835 -0.055360116404772258258 0.98929974440043622064 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1530 1 18.172928895584171016 5.1728098028553075594 13.710419474567697051 0.081400569513994949777 1.1733815043611575124 -0.31707592706138160166 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +798 1 17.157714555038808157 6.4603476104355230802 14.292516195416405722 2.7992436958781290457 0.39869591280035282521 0.71623980090762184858 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1367 1 17.899530387544018595 7.2840911502222578378 13.895930835758635524 3.8637253300023566283 0.44285449617316485771 1.088743934468744623 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3387 1 18.57319593910236577 5.6768306615063437448 14.855630186808955528 -0.54010973740378309671 3.7862627051732729022 0.59969689926007008207 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2290 1 17.614834197304354291 6.2135934955938827429 13.004314556673353565 1.7603335200776628611 0.35182117403646562259 1.4614775808754552067 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2902 1 17.401023486024566722 5.4343136577456245817 14.533979486712446771 -1.6064727463619776771 2.5035867440076886581 -2.6470148320946949028 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1090 1 19.427572216005874139 7.4858527393886031831 12.821812144132250566 -1.0185958687701917036 -0.69796311981822600767 -2.6833063866425290733 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3860 1 17.033532933341977156 5.4150337507800028192 12.506952610484018962 -0.023645333021073543234 1.883913901163279947 1.5479072401162445871 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1412 1 15.367965012798210367 9.5627052561818679521 13.929664991308332134 -0.9326220655972510265 -1.3436406448856972329 0.15140470549455470328 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2477 1 15.201264733043798216 9.1474516566136152562 12.978192075217570789 -1.2436129497268404442 -0.78917878537209573686 -3.1874228345738990775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2908 1 13.677492105908465092 8.638483173100929946 13.129729505966306391 -1.1135887860785484982 -0.60503037701526463099 -0.97588217896229012549 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3512 1 14.018958013146232133 9.6209944245687211151 14.629596400874381956 -0.092370583712619330763 2.2834534471343128637 -3.016296731411607368 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3231 1 13.850167162176170166 7.7872966580700362371 14.271387344674892006 -0.76345125992501272627 -0.74424043289100527687 -2.0721568796022906689 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2193 1 15.696956064662863639 8.8542916839992589217 14.813611510612597399 1.3101763022321137875 -2.3780875148472744307 1.0799975939267432157 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2284 1 15.481524244269149193 8.1556955840048832584 13.853716315332633258 -2.4693071956730938687 -0.27373979043780255482 0.075816152960093724511 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2061 1 14.699724753917589481 8.5626594223340806167 14.4727490610624141 1.1625859294892788576 0.30901302468703584214 -0.9159537754221768191 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +852 1 16.21029935078675166 9.4597805574389060013 13.395487291335816948 -0.339209008817494162 1.413083772452688569 -0.042396990700779103867 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +988 1 15.904855156891780865 8.5491531298265659444 12.770477219831164462 -1.9779814998673657112 -0.55629748287413538499 -0.83126325879076690128 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2629 1 16.641525511909826207 9.7501551902093481772 14.671465905590743262 1.7892632666299701505 -1.1344216644472111533 -0.2962048879986702854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2772 1 19.118883855877971456 7.5651428776868820947 13.875517779487330117 -0.79224644570775382135 2.2237061267857178848 1.9953300648246494742 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2040 1 16.841859685299386484 7.6929773124879510249 14.41014720797852533 -0.7881920363376697658 -0.72906543851488059271 -2.1670494898002958806 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1608 1 19.2479978618659473 9.1899192178834674394 13.889836922763306504 -1.7981249748293586244 2.3789329183248835164 0.40634108682127861867 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2153 1 18.760630158589396643 8.434584765334617984 13.338891040237307095 -0.21758457682126064459 0.66017105163564926418 -1.0055075708569389814 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +723 1 17.765350121302425634 9.306306918444574805 14.202115744983192513 1.6593149960785911201 -0.084888032819010098007 -1.035356214283902343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2403 1 17.883190795411724849 8.9466974927767051184 13.083250729916890975 1.6115499232092458382 -0.26765024373811119318 -0.83478224625968522332 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1368 1 19.19528000679643398 9.1733852399772324304 14.982993161665794091 -0.5343636270327116744 -0.83119498007195724565 -0.62411174775261613057 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2147 1 16.954624397657440227 8.2225828885741218954 13.066159405448930286 -1.7146364735594430417 -0.50289033281086181759 1.5965549591046908073 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3087 1 17.148398832874988784 9.5720867718166697813 13.548237659864257765 -0.3948822444871739612 1.9426609853443219667 -2.4997876258043589814 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2533 1 18.879071395432244884 8.0138462245164721054 14.777067049933513943 -1.3217567547334938549 0.84806020470090681673 -0.65021698368809510704 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2719 1 16.838754633626123791 8.8333948809258604484 14.293128024890640049 0.90648527291739999789 0.90945348009382998011 -0.35961986168869869429 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +171 1 13.597143918243206784 0.75827093097208098094 15.095899032038158083 -0.14490136013937016113 1.3564899165454917807 -0.25576611825899198127 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3854 1 14.746419388658445371 0.43072394033376087963 16.891280856409391475 -2.1755336296119587303 1.324935112742527954 3.2701727075347002405 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1529 1 15.61136854813554109 1.1621927691050422116 16.547597827145903437 2.2263627435168369395 1.5347054244415814228 -0.86710797141939532917 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +482 1 13.761008253585860217 1.9079558614653677751 16.089573800440305718 -0.64516025036221169575 0.11953906799648543469 -0.02221254346275872496 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3975 1 15.682956073318432999 2.2374592678934401846 16.471237079860753028 -0.49238071517668818844 -1.0074405557647518883 -0.9719529781488870368 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +824 1 16.249398372470288621 0.26457776442764296965 15.874137753604781409 1.0468687733208699164 -0.53736982516027020917 2.4982611517996118344 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +816 1 15.128951465223243744 2.2746892574867749737 15.404109934478919186 3.0425509868605482566 -0.70228196244839868889 -0.049662986242901253908 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2329 1 14.707666452608227914 1.6729845715669688921 16.082940882427589457 0.034795078625635807168 0.45986057732850887936 0.71761728236160138295 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1903 1 14.427257161704847732 1.4710291062911291515 17.08473188040520796 -1.8517502855553489294 0.75564896124001479372 -0.87389315140216206057 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +964 1 13.479186826504978569 0.92191987319913215604 16.994534275915853527 -1.7884219365196081242 -0.23530196509514128556 0.64131734404564599838 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1532 1 14.929696069249656531 0.92332582577243083044 15.020489101882885663 0.17498470911510344283 0.77785777564952274243 -0.46436094707714598018 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2057 1 16.578143939855721101 0.15309694182797034534 16.942826451134379795 1.4685585422882079243 2.5275576285709582258 -0.08767836261943369458 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2151 1 19.087110649094704229 1.7080493227367148368 17.420192885459787391 2.221884467843576072 -0.51007063230277016608 -0.33572504029346433851 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1376 1 19.007112331039962783 1.7677708054534773119 16.274741084243345313 0.72620632071038737632 0.69281025546571728402 0.30029124563071235565 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3282 1 18.775027282984623866 0.62881707993392665923 15.485829051146259516 -1.0688638368775762455 1.4687216554170599014 1.0917204324423683826 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1677 1 16.937737384536671215 1.2881142917876282628 15.110925383137830735 -0.62446854095739079415 0.00072268986625882648996 -1.3744509093299495106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2760 1 18.039996980059168408 1.9985043270829303541 15.511070088497953989 -1.928872569092687117 -0.53549775478294758813 -1.1995600305021913989 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1190 1 19.266684397120748429 1.7952918130551243081 15.214291554847685362 1.0849347262685995474 0.81572741211453625443 -0.94120694610564170635 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2746 1 18.201772835915452475 2.2393535945408755694 16.958929388238217939 -0.93785636068150990408 1.4181061576539628621 -0.70820424121618164026 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2547 1 18.558315621923753724 1.0059961977352818163 16.776960802223008784 1.7799818215668439247 2.532053849954936986 0.2570002921758267056 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3605 1 19.630040397371665506 0.32603486795597269587 16.50070762792561041 0.041121904971922550176 0.02896305804921995436 2.6401232922734654274 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2557 1 17.019615494016587576 2.0354947728803298723 15.770948371106372932 -1.5363321429195484491 -2.3643662523548143461 -0.012906153051916682828 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2844 1 16.792957169454648891 1.0531702873235071483 16.142539601720127251 1.554447054473543588 1.805884383385598424 -1.3611574838173285951 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2872 1 14.091770543008545147 4.6212855215359569527 16.422281489621486372 -0.72769311088335741911 -0.78938575275326150482 0.36571461191610948882 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3929 1 16.253218435696073385 2.7473274952807327232 15.615338340546534468 0.72938368567296418821 1.7941927171929936691 0.11506763018418270095 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2005 1 14.874761894989442013 3.9810800048970014231 15.786679588351645975 0.12084902522991734786 -0.60851096314811792265 -0.19763924363543272644 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +648 1 15.427022370237313709 2.9195547207858520977 17.241204958226354904 0.82988891238088213775 -0.85217367146285050161 -0.73978849147814074172 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1654 1 14.550086353557917462 3.2119361290317280933 16.626770162192979541 0.47062611942044468849 -1.9897687308020939323 -2.083224886798118014 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3941 1 15.478132920725375499 4.478048176362779742 17.211165936881023697 0.4913239567863706414 -0.90800123270319910151 -0.5868856516925659017 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1109 1 15.413882033591617571 3.1152454602455832422 15.966896407059236296 -2.0267479077515173636 0.44015143031816855723 -0.30650617920680400807 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1794 1 16.171958234525792619 3.7579437850298624824 16.761284283406734374 0.2656796958810225262 0.064883277764280031241 -0.33396575694747737684 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +641 1 13.453098093612707586 2.7999421710510148387 15.587236985948862866 -0.88326624360300676209 -0.860648506121355239 -0.16602122122193288534 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2558 1 13.391325220970568211 3.4978858342805061454 17.213774643216833482 0.0022969794687657503832 -0.44654280002397173099 0.67524286672788380592 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +617 1 13.719485023192586226 4.0271402963225835236 15.523589646197711645 1.0899459054489342158 0.96315595371889262122 0.017395264838007250957 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3549 1 14.871232572247432557 3.2975698703763440811 15.092382582843317351 -0.19813159393007673259 0.14809673334068060302 0.42371352736331652222 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1766 1 16.563073265515487975 4.7888693525462642242 17.492701171560458562 -0.50511714506953375725 -2.5245824823368727685 -0.25734348728749234514 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1470 1 17.643954460368330928 4.7815811510074519575 17.294494059081078063 -0.37423434957201434647 -0.27591511384119982164 -2.5801830005189327899 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +488 1 16.766400890639253873 3.8250775369455980446 15.384194634306606275 2.0548351975169767414 -0.078045273534369574708 -0.38286784459862505114 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1247 1 18.610793157830499922 4.0442424775789644897 16.390936485358821528 0.68653800934609054973 -1.5770801705974804019 0.1660903536692985849 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1453 1 18.135730119668156846 2.8652024554926307509 16.091934574155789761 -0.24334248020849236216 -0.14142841144175768986 -1.8140895309564502025 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1298 1 18.724280572932855193 3.0120849553149469102 17.231887923053907485 -0.87617579257975031215 0.95378088617640066627 0.77298673840805054436 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2517 1 17.934143865905816995 3.7714623173820900348 15.662292112716981407 -0.65308763327714491886 -0.8104941613055904881 2.1938252112674843097 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +403 1 19.593817863620298425 3.7834511667752712682 16.379822290548101904 0.18337910557654607535 0.089880991777409879884 1.3666909842600221126 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +185 1 19.027373242251297114 2.8494365659744564923 15.294296629347474692 -0.80389278477922765376 -1.6025618559360406135 3.5028828449059292716 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3451 1 16.768860034614530008 2.8611659204371271414 16.771051183435357501 0.66785284552313450845 0.030068213922375276737 0.44971678951966459481 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2880 1 17.082609344255708095 4.3461653064654557355 16.51855476435404313 0.58820512982863093487 -2.5534618014724586033 2.3201196209064494091 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3028 1 18.770590460780685049 4.9848497080958145133 17.27357496173617335 -3.3175535487166607496 -1.8959655125583505519 -0.1435800448414433772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +520 1 14.926101809410571519 6.7926586879965089594 16.958351162700079584 0.46474245684297788017 -1.736224019693298537 1.9108839784812963192 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +121 1 13.992531492842486429 5.5330394943715859313 17.150547066206822677 -0.43655351607851927698 1.7120547286755296579 -0.86947574595269860875 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1370 1 14.413903882374377474 6.9893453973251142841 15.879909580781724543 -0.33877619855801593962 -0.31414450023665418943 1.3275980087811558583 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +478 1 14.985484597993966815 5.1615810954208933836 16.308412277489658493 0.5542531477890551006 -0.39776718541440031496 2.1109942662805236679 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +221 1 16.025642160479915077 5.8031314030380629632 15.925524816436253062 0.61052906553062702422 -0.7928090447843352262 -0.80568343950538923171 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2989 1 15.461636073657251345 5.2102773276804734692 15.082107503565348239 1.5456756338050519073 1.00601208265084896 -0.34940082622781887256 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +367 1 13.780748290415026247 6.5660913954010480253 16.865367809248336783 -1.1714655155127828845 2.991497443039145665 0.5808334780880650694 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +560 1 19.158053020976396397 6.5119475149030385808 15.08278369403098651 -0.28510755122130898576 -1.6625464697066711928 -0.087464369343985007288 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +334 1 17.951431615348148796 6.234222177498453199 16.251987835068693045 3.0121670276666923094 -0.33737210188099120423 0.0080766430129636697377 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2398 1 19.408269548371976043 7.2326576931752946109 15.872130807185360624 -2.2285682132579811565 -0.1925563373944117751 2.3716955777816162154 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +623 1 17.385263176161178222 7.1443208676174814187 17.156679583195529659 -2.3915228994505146609 0.11198143869851513721 0.47611656332309393314 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1527 1 19.345596694194831855 6.3968510197179098142 16.385632960848226958 0.40600239201490612162 0.14799184337227430652 -1.4985682347931954528 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3776 1 18.081798412396349107 5.152115778887581321 16.450791823122472124 2.1674788341214865639 0.46792445563922008267 -0.29635246391357394913 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +173 1 17.05103792817527264 5.8633744848984230558 15.759770077885058015 0.28908737328124384236 0.4544754864787500237 1.4842376239429331264 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +845 1 16.930980972154156206 5.7628557002985623114 16.899357020397651752 0.30389481473703877645 -2.7766028909405737757 0.14111360763194230605 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +827 1 19.180249795499413779 5.0180931075431640664 16.157177608360001386 1.1767190444346178335 0.64601342625641033912 2.1572340792721247382 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +412 1 19.608600549736529217 5.8460572123532914546 17.294578465198299 0.16603600224361414472 -1.2648378859008289066 -1.0986994110551240311 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +918 1 16.827911377766920253 6.8200316177187509936 16.295484122897335055 1.8044291305765609579 0.27978605005556628216 -1.3541262022267008813 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +719 1 16.012479560139954771 7.8431988740779834401 15.271676316547576846 0.70131799863946930884 1.2362832229774050052 -0.56783756249261607696 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2031 1 16.249201361689131318 8.93013123328009506 15.813887400080524515 2.9727831904652162187 0.20639112084064376029 0.5492787765177806758 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3053 1 14.297586773183439846 8.2992860075795924502 15.412016214381219825 -0.89071747603077644495 -1.3481920963043556583 -1.6276598935707760063 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2466 1 13.697820244158004144 9.503632282345282789 15.727457044122344243 -1.0286816918052419378 -0.36937506735715625039 -2.6361583007222955111 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +831 1 15.374415854867907072 9.4253122904890478395 16.429382726945675586 -1.0523083937088668627 -1.0012661505154842878 2.7040925283185086592 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +604 1 14.808124244905863875 9.173087390030126187 15.522875232059385908 -1.6680126020465815273 1.8317737625087906483 0.021525208455696470677 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +557 1 15.999897692007611028 7.5505041204287373091 16.769954815261638004 -0.73967905657478050241 -1.8132406248878141231 -1.9640079278204873869 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2879 1 14.096839563922928917 9.9025912407987792818 17.421853479197384473 -0.34056457230354569843 -1.9659825858429136325 -0.90004040434754872813 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2706 1 19.276292559502941515 8.8890183645241176436 17.170673848262254069 -1.2440166472372113926 -0.76091850835428431754 0.3207700907574358995 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2591 1 17.95774218044340742 9.1397641398788334044 16.858254815954136774 -1.8222076995381772946 -0.0016111943765341988234 0.89787625247214530866 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +200 1 17.952921039268524339 8.9442196900266264237 15.578452825042369057 0.31954736700150010442 -0.96072605181164683064 -1.4592322882349921809 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2724 1 18.654225293182378209 7.9709039205193432664 17.174685154243146457 -1.5171535559245352687 0.061898324398915079148 -0.82762080622373856986 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3152 1 18.786950095521298465 9.6699287972761265308 17.485432992733603186 -0.0067561755616604296515 -1.9203660712220120832 1.4206628933929204006 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2683 1 17.027677442888922599 8.2225827711271204379 16.674030486533876427 -1.5553540814895487898 0.66416698022215570063 1.5504724220917200928 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +575 1 18.630282266459651908 9.2891287176555952243 16.230470120372256559 1.4636169880165468271 -0.30359047692508278615 0.29575690621659223023 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2699 1 17.678491974551697297 7.504571285309514117 15.917447210734479768 1.9936017358195767812 -0.7103369406388982954 -0.80818592505085284916 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2112 1 19.610672167399496146 8.3537282794975862288 16.252550428483342415 1.0523584115046813459 -1.175281173313643901 1.7889357732456705463 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2756 1 19.89714713074034691 9.4262470636316475492 15.932123940416804686 0.86442746716756235781 0.63024555197528286943 0.34897642751455332233 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1661 1 13.922752952871357834 1.0303682949662218427 18.182626215524869906 2.1846574563065965791 -2.13675314600630184 -0.24023486861604839704 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2331 1 14.997101408575272075 0.32361667313276937241 18.00209863601412863 -2.2690098922282890825 -1.3974797951255413242 -1.3397597675592589628 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2459 1 14.599744642471165434 1.5575026572571295524 18.631184154840259026 -0.043020738876218309055 0.068474857594340438061 1.8295351175929173149 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +952 1 15.631674583377042964 0.57619386569153874245 19.621742106341429235 0.74774579655460138294 -0.25956162266597110344 1.3269402259832370206 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2470 1 13.790044842200012809 2.1176494329129580407 19.220161343713332514 1.1149402954251281805 -0.87260731927846968414 -1.0985147280085498789 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1308 1 15.592768162956421207 1.6313287305639965208 19.162769720756465119 0.34777153321428183608 0.47731463933287032742 0.83859035159873873688 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +896 1 15.420540326418899824 1.223180762943722133 17.642634158771734576 1.0048080161355810169 -3.0851988363787397063 0.77241299588328049541 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +342 1 13.898191508565476582 0.15030623082312202787 17.90340288280079406 0.67980453140074226237 -0.88167529652604914592 0.99504758996367237422 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2997 1 16.057496273190565717 0.086025346685654285883 18.505586610559880967 -1.4657444241665358309 -0.13031263770473416885 -0.45557234202294616399 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1405 1 15.944992998990803912 2.0176383698919333476 17.658400591039594474 2.601109213354661609 -0.87238337186771253151 0.51606262626560672757 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2174 1 16.584505488437251586 0.80327413786623769187 19.210039367503522811 0.09746662496243033158 -0.71901855704872996711 2.1589408975744159846 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3893 1 13.438081475438636403 1.9505333495378627262 18.013058383514824357 1.5711977457809960246 -2.0176820655294127604 0.59833333904998631247 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2754 1 18.488710250295891768 1.743281186841062036 18.476398214103806339 -0.67096953441299145293 -0.30407609450858330558 -0.063366014518137503408 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1167 1 17.343665925416303253 1.6396976561211924484 19.083841340246319618 -1.5052949374851618547 -0.602473611295921474 -0.75864729558434584877 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +894 1 19.305614947145659954 1.4318312016296168565 19.486340977108493888 0.72251420357232565284 -0.13319076402745327892 -1.6626239200954524566 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3495 1 18.237822217256013602 1.1556720474349038152 19.785530739968681502 -0.81707759481810748881 2.1894757610695698702 -0.42033798488154267003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +305 1 19.728587197434816147 1.4678776487009626006 18.431140562847417641 0.2132001008467398484 1.604837864042894191 -0.095212332397679400042 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1119 1 18.044064690237615167 0.59237873313825628596 18.934953991502975867 -1.2024810468959192811 -0.094139337535240244503 -2.86388736133108468 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1985 1 17.311149143386721505 0.54556015374235500293 18.183044776928156239 1.4213610505633427206 1.5363739310697535068 -3.0695477247522409137 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1989 1 19.067318340527297238 0.64100845705010223163 17.877488058474494181 0.70261823752495200512 1.2778929549925137632 1.2502241774655196149 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3766 1 19.648251399066417378 0.11870295844329459278 19.673781210059814839 -0.69179176928268526492 1.6954597157846338362 -0.64693173094312561577 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2595 1 16.842143646646999144 1.5147426466478968177 17.862407488801935074 2.2014982134103191491 2.6503719690971809797 -1.6531918094417676901 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +118 1 16.451315882838432714 2.8882819218619384394 17.936138520249745198 -1.1730237136760379713 1.2654884159836858881 1.1537723678630751323 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1186 1 15.774776125219409195 4.7554547361052588172 18.515227124326337105 0.20612091042637181726 2.1643766799444943416 1.5901605958264231067 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +180 1 15.428244239633347235 2.8581265700018456677 18.188208212249143969 1.2104366492911651232 -0.21510603560335050943 1.8152652430080762347 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2208 1 16.258773839620644708 2.5616068216024197035 18.85734778583199045 -0.27101818146568495971 0.52330089563461046342 0.5175957332272037581 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3965 1 15.94729359609858399 3.9100685242353154791 17.99495610473693219 0.52813362143797004666 -3.028772957568125257 2.2677848558424646974 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3689 1 14.44206598906970207 2.9359069533049488854 17.788567098120800836 -0.41133969786169338745 -1.1129871633605701309 0.54787121910367919675 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2651 1 15.778628415738843671 3.9486151627691912225 19.224131471764927426 -0.40307629210432821543 -0.30481686664207280346 -2.0077283645778107868 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +608 1 14.239392470012392167 4.0156065328284826776 17.677075801987598425 1.1318693523788239119 0.99519759871926660733 2.1000152779614253973 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2417 1 14.69490584337672523 3.8614904004456342967 18.86531448505095554 0.075770195867355991104 -2.0288744430196756774 -0.62199472811070211087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3789 1 13.816689769369276064 4.4401794322681817917 19.612878550405955735 0.68452059218515382 -1.0560681004149348183 1.3064841461257674649 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1335 1 14.760875589897702653 2.6505951290754024008 19.894087794979249395 -2.6163022889051910091 0.76527276781340125567 2.7268319263235607508 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3269 1 16.978630956427252841 3.3253133832114363244 18.849444707424741097 -0.4322060361538706541 -1.86339668067310682 0.16489385932881450714 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2986 1 18.106475733597072519 3.1944694069255183955 18.628257472989030674 0.4625047523198405619 -0.4533104865060610944 -0.55014395596990139925 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3385 1 19.401431801210996753 2.7375924214693263536 18.380420812057113977 1.8025064228105163178 -0.38940642618561482902 -1.0353602076254229125 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1679 1 17.067540874897854764 3.7572005083864024044 17.744565793795494812 0.00060810421963531312815 0.18056451901546627381 -0.55377535374786246436 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1015 1 19.976202303112728487 4.7761992127523145157 18.784527399536418812 -0.57313507863360568795 -1.8024992394205878732 1.8523963040131132818 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +922 1 19.451077084170258047 4.7020318289557625491 19.728852653570555731 0.096540310981983887273 1.3239144454947022744 -0.67688609774972907651 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +82 1 19.623683999761183827 4.2053690427487477876 17.962586585166128827 0.89659173727410357291 -0.68928259720962659074 -3.0588345147043529693 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1752 1 18.946403581021069584 4.4991428354790974353 18.854878130385202439 -0.46839501232207286785 0.13391629185294251503 1.3922611211669848608 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +785 1 19.631763872963666984 3.297040497452311314 19.262445989485346587 2.0207423750320891997 2.4401695588486052024 -1.866251343885618974 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1919 1 17.040543737044014705 4.4236953845802755581 19.457490869215519069 0.10933092164507726696 -1.4558220599008755425 0.023584041221214959577 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1638 1 16.722954253973970395 4.447685546077907226 18.506251573554585832 0.16326743860646605877 2.7677465507228662389 -1.8810759995556476376 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1349 1 18.697006122742681811 3.8305637675731540881 18.135370994795032118 0.79001896123989767684 -1.5441412518229038486 0.83680467900154142935 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2431 1 17.847747057611776711 3.7390668990846234188 19.375908769909482743 -0.41731766655189472814 -1.4903494274658488639 -1.6584798481325915276 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2762 1 18.740347247687584087 2.7611997429238606117 19.405733004350221194 -2.0804482596686093565 -0.56984691349105598412 1.51445483124064606 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1569 1 17.959749655285946801 4.9662097618867218074 18.398800200168729191 0.17153068086136905035 -1.1693631946730833615 -0.13106097616991935206 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2564 1 14.623409617256502457 7.0387261812341463951 18.958068874561792683 0.99136751921152888034 1.5953431607332007047 0.63591577695404188919 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3116 1 15.000355826132155457 5.7339626483082239972 18.845029033345102931 -1.3745780130313305367 -2.1415697348466413708 3.1542462859413418208 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1340 1 15.043732020451066944 6.5469550588195106755 18.155189203884170013 -1.0500800774122756032 1.2283651579803833709 1.9251985431561051687 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2189 1 16.366596143137289943 6.8279480204560139001 17.602596163729192114 -0.70869901662092160688 1.1789943595071199489 -0.43116122706638670969 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1389 1 16.392801200862550104 6.7182338611306295917 18.98435532735274478 -1.6754438649785778903 0.057867581934087114481 0.055169200575404926667 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2434 1 13.462923808141253446 7.0518020763723887612 18.611773487159588569 3.4707762838995916965 -0.60150188248746228048 0.54087024321431076412 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1284 1 13.973634258118099893 6.1844805152280946103 19.748190934075154246 -0.82395983373382863935 -1.0059065180320294619 -0.69661001558509505482 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1088 1 14.55258561447429777 5.0005001846804129073 17.802688025038666098 1.2500635251863438935 0.48397607393355818184 -1.9676966772872723777 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +501 1 18.274426920837985477 6.5256287818406084611 17.979989667631951278 1.800926855329442855 -2.4555663506101157445 0.12760970251577713475 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +190 1 19.77294743305178315 6.1037843661283037733 19.02194460142846566 0.1741660245325180878 -2.9690814638495126587 -0.88787345116419513769 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +69 1 18.889943257041704072 5.5433923056873073421 18.90995659920312022 0.49953651931543374687 -3.3048111788810308198 2.9931367620788993378 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3524 1 19.03898489154491358 6.7801741366400296585 18.907191767681560179 -0.097919715659317910217 -0.4255662717588264421 3.3827099666398723343 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +525 1 18.146885843776686897 6.3304439831629331081 19.116973098764777461 0.20461145176972903026 -2.0023328958729140759 -0.59745910050002881686 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +544 1 18.154521545188067932 5.3474912423108778015 19.588265392490708194 0.36993322343020917931 1.5363374455870069113 0.14741875631181899919 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1392 1 16.232370578754885315 9.7684948445458452682 17.626743858834515777 1.5099116093842166464 -0.047328557135536512834 1.4868323465976331921 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3477 1 14.959964290332115056 8.8620228249099994855 19.774160264856618596 -1.4447240717262852527 -2.2164248499079191035 0.73618574668184455501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +294 1 15.692737398012054584 7.8094348550354277805 19.615620607277225673 1.3385599064075424103 0.062716130116626911395 -0.73292811025873771946 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +516 1 14.090890551707198952 7.9401284956275111071 18.690106566054716097 -2.7149495325637538201 0.62792667224381881752 -0.030547106802827957844 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1033 1 15.190170219656806694 9.699601339647593079 17.517784061599073198 0.48424434499878288296 -0.93046382569807717378 -1.4679738811668663345 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3758 1 14.392117741923680541 8.7803137155548292014 17.908936754881086273 1.1455742710800658202 1.7381959032824354505 -1.3403417148985714569 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3008 1 16.585142738293352949 8.2598146866207162731 17.975244851236698906 -0.39302237956185448464 -3.5685531562513692627 -1.2529143213963278569 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1227 1 14.817913498726168697 7.6616771366510185715 18.062583578065716239 1.1399731795697400916 0.51743092914601451771 -2.2528383804196878692 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3888 1 13.561168913342136477 8.511212530740360549 19.976126077415450766 1.7447219724026421517 0.092619679053780309963 -0.38352976705869495921 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3283 1 13.357316131105999801 7.6182583550573603759 19.507061287262320803 1.5625564240032887575 -1.0061049310628595865 0.66056468187295502847 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +472 1 19.708070117461058857 9.9153373229595853644 19.91395727234848323 1.0718651152831266682 1.6610797523579996504 -0.10593673635399042388 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3040 1 18.269466977649226891 8.0924602263705693872 18.474442355191726506 -0.63280424584219141515 1.8658045448871367622 2.1545141377395506943 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1965 1 18.91972714676936107 8.5607928831465986974 19.016431458342395899 -2.1188243543782152578 -0.29770042326889228912 -1.7506384193498698565 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1048 1 17.885732707337179903 8.9499895078300113482 19.262607616001677258 1.1492628626862717578 -0.21744326809977024273 -0.4905690046423444306 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1907 1 17.323820301011721767 9.063990047120272564 18.251785873998020548 -1.4430348419150602624 -0.16375400072331483536 1.6630897953684484758 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3737 1 16.830803677252575312 9.6801091041440319174 18.857702684083108124 0.78720474079896873842 0.66276132550951016853 -0.83014412466614917463 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1341 1 19.65999418760526396 9.8922114631012156849 18.394035299805395312 1.9466897854127498402 1.2826280043697930733 -0.32334929006209028879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1824 1 18.407008946082740408 9.8105140093996556772 19.751460819850663597 0.55445491579282046857 -0.88255572127732673238 0.68863419251329871518 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1847 1 19.606048419423615314 7.8942138401198267417 19.466910449379991377 -0.0066127556420414717459 1.0394432895033547393 0.17495632622973689152 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1786 1 17.276601622453789275 8.4707740033082359332 19.906942487816003506 2.7925765454025421874 0.2852213162094052179 0.80374343506166157081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3227 1 16.9878087707027845 7.6130119229262351865 18.760148487953141938 0.49834056883665572846 1.7516389178631397439 1.6561211135833111552 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3731 1 18.527304852791484535 7.5452327111219466005 19.379070316463245405 0.98263788785536509973 0.77511635443121240652 0.021702988204349314694 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1058 1 16.765708157544910506 8.6552499959836932675 18.995339889477570239 1.6301561299907654234 0.16919473071782709095 -0.67744598844275782934 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3481 1 17.601304786171841243 8.3717167852001885819 17.568324460969762413 -1.9166017969880595473 -0.073172130734748833114 1.2217013923106869733 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1331 1 16.060719718701651715 11.65740733113487515 1.5547089075096707234 -0.46570776254042101083 2.4844538520457093433 0.68328672062717221714 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3349 1 13.759142252359819025 10.982444081830339044 1.5413531767151664731 -0.73995987837300525314 0.1142991202821886515 -1.5116061196586754178 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +659 1 14.738100492057066404 10.996482750356387115 0.80951686393629185279 -1.874958186002971372 -0.91131379986920502123 -2.2423963233794985683 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1081 1 15.323590762610557192 10.836525521000965 1.7871625157687494045 1.6458051738951595677 -2.7187793908155906131 -1.5324491874954393467 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +373 1 14.953301872202828804 10.033416084140410973 2.4354135893289883263 -1.0945518211178928425 -0.80472002624190797082 2.8656527230304966736 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1832 1 13.784785420178200965 11.514144513343287812 0.22341477823898228672 1.1188479554603993904 0.34530649479338509922 0.10148579098750436234 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2770 1 14.801539579784211753 12.010765323895562062 2.1282399740989417225 -0.57134577798609098576 -0.13923465130647855181 0.67704208718830138913 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +519 1 13.703092120274721566 11.939352220858985731 1.5469554260323152839 1.8834909672434698713 1.9606230248601232979 -0.86920380799505425617 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2815 1 15.827618032276188131 11.531884366698912814 0.33201961512159500201 -0.085536090250541152447 1.741424888673732907 -0.0098461804634124017177 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2572 1 15.873561444900643025 10.390087813311652098 0.85057767186246402424 -0.66023964741665275291 1.1862647331085705016 -0.93833244328356946173 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2269 1 14.807296392591593914 12.276169264853132645 0.14675193980065648347 0.88308824129120833124 0.55962227468508296546 2.1807985063535779702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +919 1 13.346226361877045363 11.042516401477890042 2.4935432754082271778 1.8941513504366760401 1.596959225517056824 1.8130872110635474215 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3026 1 18.785910559416297616 10.617335571548975892 0.91706782463350233758 1.8878582546935267494 0.078046995079632836001 0.85595054949448534654 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1908 1 17.232036280470936163 12.294539200247793787 2.022173039736178346 0.77370430987690919089 -0.60486469841616041787 0.49216063984549368593 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +663 1 18.248555797729178352 11.691790809461721778 0.33824082127813004384 0.65896275015366279071 0.4315525026116250884 -0.9561010882580532888 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2327 1 19.857691535759666834 10.552364054759557632 1.9089327503878519288 0.37993167093284807567 1.3061704703071299605 -1.6487199561297822825 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +57 1 18.628151999686782148 11.681204681054740746 1.4830548320578365029 -0.10772936609425565191 -0.020754383392913480777 -0.57396362473497675172 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1259 1 18.053581299703171936 10.896866400704469768 1.6830025188016635163 -0.80398859876868100649 -0.44555778823674568878 1.1572895230001893907 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +664 1 16.945469400399726823 11.435214631436441124 0.80079737548198748343 0.72213875073483813072 1.6867517889029850497 0.9125513877214073144 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +333 1 17.257230615932918738 10.267112798985097655 1.0185376302830539963 1.821809155586402218 -0.63869316263911646292 -0.92281374786138559152 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2012 1 18.015022771704664706 10.684905349993702117 0.18721628101502743591 -0.47058855633790325212 0.92418439366169879978 0.97435882768939741094 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2179 1 17.039376987498627614 10.771821405602519661 2.1984873642334488153 -0.55129761630127294136 0.24817344099380822531 1.2788084658080742795 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3363 1 14.690443966906437723 12.776921254736134159 1.2167839242977085412 -0.31984194863439424639 -0.96274862469565625211 -3.3564372310800987265 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3058 1 13.724671918126221115 12.757168959030554589 0.61251725063696937923 -1.0796593512580019425 0.39804533512411688356 0.38557175866157061828 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3128 1 15.736714252450660467 14.445248369296072255 1.126669087801340563 1.53518338514021635 0.030201725161629177502 -1.9115021611631033416 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1067 1 14.750277449425338361 14.75970468665344093 0.55416595225920994849 1.6749512899880558692 0.34859030958839698489 0.85649085685443748783 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3499 1 14.943283812275607758 13.754265140514377208 0.74837621417543120916 0.54219896797050448622 -1.0394609871265527712 0.19409792855990407046 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1556 1 14.546890911723737716 13.253784183205777225 0.063270313363971417142 0.382095962759208152 -0.066468042822008813197 -2.2906615536197789673 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3242 1 15.689914880112707962 13.2625080385133014 1.5114753358570263142 -0.16143792177577312441 -2.4870226155203187801 -1.711184466706125118 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +997 1 13.8371200906341425 14.891965438201360428 2.1459970728309416543 0.40574528596155229332 -0.34920137217560887066 -0.85181530589834830725 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3114 1 14.436790833508876375 14.314120564766799504 1.542024400102822268 1.7996620322567205008 -0.7957211170799923794 2.2720913343210527024 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2293 1 13.691336786131916625 13.308152293201640504 1.8765946595040805533 -1.6471021890393904297 0.23684319966303221672 -1.8066268804814813453 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1072 1 14.78305193027864739 13.221818695790245712 2.2539887098973951929 -0.18258661516760754662 0.64652078982878424807 2.0053554007671250403 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +432 1 16.038256416187003595 13.512717309230488638 0.1512992529602501246 1.0559935761336973759 0.72293428320326535985 1.3630178999550481844 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2262 1 16.543742557443565033 14.007868045241412602 2.2172352750839534608 -1.1217279429250139877 0.75171633840220142275 -1.6531520396332133327 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1231 1 15.803016902125762044 12.583556180162366545 0.72246325740836314644 -0.20739397866654721292 1.0402579132784475213 -0.89006103142175152509 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3432 1 19.720387942396637726 13.838999813891902591 0.51930554580623300431 0.28800167139841653663 -0.78188879288313273275 -1.2578347415992336966 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3572 1 17.859222035988487676 13.444614483514701675 0.8577187539004028638 0.97547512752412368631 2.4295415634007997419 -1.4120819821095562663 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +79 1 17.423504240061852499 14.439660305039476285 0.68498562975406718234 1.2880715375803415412 1.0489100194213161199 -0.18783775475255171106 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2078 1 16.725242921953984876 13.716740707773320551 1.1298330337052135963 -0.31366120265097907627 0.4856014885751900878 1.4304161980174716629 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2649 1 17.695718771019912197 14.786635090717943797 2.2406516042176685133 -1.0098012115984353887 2.2256020943935550527 -0.033785817995713000872 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1169 1 18.461056645101649565 12.595318683569741935 0.70776121740745034927 1.2589995219893788114 0.74897245691644009913 -1.4259732497075403579 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +182 1 19.252725663916077536 13.850456524056818708 1.6118159488671996993 0.69274650108441671037 0.91533114784008495768 2.3137856514391028639 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +857 1 18.639781935455612683 14.333924354108885879 0.98894482143083417558 -0.61395869734205887891 -0.81737604790783913167 -0.80000046336325492113 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1591 1 18.497728166089874691 14.07020441456763038 2.465145987256946114 1.7176537226406272119 -0.040846431299277133342 0.53735375098916793313 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2559 1 18.858555535744304876 14.84620179683847141 2.0007503224932139396 0.52258784847352457437 0.42600811514038816608 0.97916486245901090957 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2279 1 17.933407866772235195 13.10805634763173444 2.3140662969218519507 -0.48293162022562496904 -1.3302668684411935729 0.63676792995009978693 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2056 1 18.590344308314783461 13.510975167899442084 0.16188678371814715917 1.4603272195995324889 0.27528054962485071222 0.073277349795551102729 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1399 1 19.453864464469326379 12.844434045729162364 0.19084558790320557686 1.7274305369667213306 1.9098616096071545645 -2.8994110762732527853 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1246 1 17.120915335921175426 12.601122676726172145 0.83062257946013062782 1.7099384340285364026 1.9729312767123687866 -2.2842361059555145175 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3822 1 14.800161819897164506 17.173971728013295746 2.1373232261846930591 1.1665021729191402677 0.049573394857179625683 -1.6212874008048210328 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +611 1 15.680860993603220166 16.626870300166487482 2.1199337436397351908 0.59771584493041918229 0.18230868722670803828 -0.047742396584727508912 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +563 1 13.832561855887442803 15.915797463579721693 1.187306164426322086 0.60765400256198143225 -1.9706005435933569014 1.8202960119672078054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1016 1 14.065271192734373429 15.252591490859405354 0.087477837679263384385 1.1956858300042865206 1.2628233100037677961 2.0657524705838814505 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1568 1 14.960425169283251279 16.136661925162410824 1.6613087500583032519 1.9679444158366212747 0.38393701736219770781 0.45677221373976889529 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1910 1 15.067779255772757452 16.208113800488899159 0.71364987966521853391 1.6785050694213441425 -0.61621383178183231077 -1.471269421699200608 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2673 1 13.819267614594380689 16.691723723370831323 2.0005240527743746171 -2.2802342067528997838 -0.64173817861809956398 -0.79378192926392399098 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3467 1 15.866001667703354627 15.435163552756119287 0.77190978732162129905 0.71036360928686248517 -0.94005523249084932402 0.29965697828950133008 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1182 1 14.50045649598008346 17.150510660215829262 0.671363160778176149 0.52334204555008800863 -1.5116298951791451444 0.43593632981537067117 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3615 1 18.668931968252593379 15.276441963459774342 0.46409983984620023501 2.1867143658042933474 -0.93800041957613500276 1.0270063926934300813 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +336 1 18.031055784406827769 15.9445919805126195 0.38105543210271403121 -0.83526083747565682547 0.85765739952678499147 1.8080911218395219198 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2940 1 19.584690936716086185 16.635048420378968359 1.4089152022782713836 2.2894862474006041353 3.0291680833747700596 -1.8399136717866346746 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1300 1 19.982515856069522187 16.199869265049613887 2.3164098929175214181 0.26158968199904203411 -1.3328517345181354337 2.2552199014138238908 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3506 1 18.627304305906260851 17.302708869957495352 1.409420648320180991 1.3817286675104014648 -0.43919055949698460051 0.68635157991012551992 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2955 1 17.499915445159938798 17.015067466393627882 0.741608857307606395 -2.2261721035613741826 -0.0081208463475119611885 -0.88428837762722389826 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3471 1 16.672461948953891664 16.686285443943326356 1.3911054403326008622 -0.81865401966576556436 -0.23023177681517878468 -0.23827138219670288 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3704 1 19.423014716450431649 16.270373805059040961 0.32479687787426797518 -1.5339553370259024767 1.7252423449948235401 -0.37989624149231843164 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3285 1 18.534814544006689374 16.642421954811673857 2.1256067543073364767 0.90594549013009995075 1.6183316608792492897 -0.97407485174611563306 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1131 1 17.106515499889280107 15.360164342832465678 0.21577470210803251227 1.023592663623043908 -1.0289240534327557253 0.87291374149509037839 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3750 1 16.864661458518199311 16.421232412168723869 0.046299052056934200672 2.3084009951471231581 0.2895940200761457084 1.5100163859068169714 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2299 1 16.667306708004414162 15.040794054020935278 2.3869403056747287017 0.17643365058113849586 -0.50014670449207532243 -0.28847264519279014472 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3872 1 14.579505311610363449 19.464368217109228709 0.62190223939447997203 1.6069411413791259147 -0.57654903890302078295 3.40558292970109866 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3155 1 13.449557968594739066 19.359155491346324851 0.71541115095725882345 1.9299649193253021195 0.83758953190548834922 0.55452019559745802102 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +696 1 13.71013955404494844 17.667108680463204706 1.2263230910479601121 0.21131296996223483675 0.36457473977949556021 1.7817520850586916481 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2360 1 15.80693934336236417 19.578331667092061963 0.7011857313221890875 -0.44895670632103484854 3.2180572621919556475 -1.7725130734519005671 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3151 1 16.634597471694291926 18.819174189401369546 0.1314730232190416126 -0.026884637786060931047 0.30053443329684459417 -2.5328409450137812087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +102 1 16.468238063146639405 18.824728775491479382 1.140588819712575086 1.4808273589160556583 2.1833884957470455213 -0.5809103031509814663 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3455 1 15.082988081355100718 18.395056650310223745 0.57339853455031741802 0.57379748089963955593 -0.65172319188448346594 -0.95584090796492648945 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3911 1 14.89015613676339278 18.198455674205533228 1.6052451627717159166 -1.0930540052815678198 -0.25128391461175142441 -2.0301800824728175598 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1110 1 14.011641599379760947 18.41415424427049885 0.56765288314165918138 -0.40208401012197420021 -0.76927844223329444606 0.16463638795645998969 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3654 1 15.533548600586339461 17.513373293684026066 0.21997338289367063258 1.5207567899719025561 1.298791922323879966 0.12031128214367868556 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +854 1 17.557969202690429711 18.871077628724346908 1.5968902389283785581 -0.41507260892724989754 0.52548218489432463318 2.0543725013336020524 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1357 1 18.956478696413192608 18.277170241313758225 1.7897785911159198591 0.422358813787145293 -0.50378105260624006512 0.079692844588081138135 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1207 1 16.735257118992059588 19.32498714399067552 2.2653519429197692681 -0.78463505429901159172 -1.1576395820123952518 -2.022236942084331357 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2700 1 18.428009457763842249 18.3529173704911166 0.41326898145771767679 -0.47769199163042153078 0.11131674170159362725 0.42577339265640046229 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +391 1 19.264094070522677526 18.93273052031273096 0.34865846848359005605 -0.44815811780238890005 -0.77167664875061170449 -0.9685355197214045031 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +210 1 18.624534863463182432 19.249010325123393272 1.6234388846701142128 3.0978023162655192735 -0.15388408475814641108 -0.94656569751951114 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +787 1 17.023393579118749841 17.944801417698553081 1.2642231072585978779 0.13115767723471091766 1.711075523449306468 0.94962296833702075638 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3862 1 18.079302222203708084 19.684704316708820926 0.79294787747294570579 0.37023454897190533064 0.58856041228937716614 -0.46012272805346343674 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1727 1 19.466950364447875188 19.86382789428959228 1.699424485111633798 -1.771700467690868086 3.2216050481230134039 0.43854688839743072304 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3150 1 16.827523691065991329 17.559193795007725925 2.1749336102165277573 0.90338183704235885951 -0.89284119468555200871 2.026780804758786303 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2154 1 19.527476502649925294 17.517448180813598668 2.3771284441521753905 -1.7178322378233732426 -0.17297345878525183238 -1.5688017975277011029 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3676 1 16.856813655782634243 19.810064919240335968 0.42116941854605532969 1.9342172380868651871 -2.5527766146735380026 1.3493455066983577328 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3514 1 16.488819215305692722 11.699149724996992461 2.83131466093673545 -0.46904604218771728252 -0.41811021539176618234 -0.90666871316045727358 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2473 1 15.237429582539229855 10.769195111593212744 4.018013127773691906 0.13943792604651594758 1.3792821431198074578 -0.17153528675450779861 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2120 1 15.646726832357517267 11.034544313685348271 2.9919254508207746568 -0.23675987361414538301 -0.52400997235811386243 1.2342562219680595081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +426 1 13.718602994595713085 11.337794482376541083 3.9718316998816018959 1.2000663534280158196 0.15912138232719025277 -2.205962294986191008 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +214 1 14.650319973853857647 10.653020459129407982 3.1826291283730419046 -0.25466029402643070023 -1.1680835131361895218 1.6751985268939926232 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2256 1 13.907093040743562895 11.800146114158570398 3.0064107840582536824 0.3242599058538209178 -3.032126919053150349 0.055617840851541582026 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2462 1 16.253841990753098656 11.450850131511939978 4.4179290059646820765 0.74278902580724581739 0.0036288642489243419509 -1.1250981033021840716 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1670 1 14.827329858604032964 11.818694940523993608 4.0745347147853179237 0.6428212729460852648 -0.84603173012222276927 -0.33569137670172172205 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3982 1 16.249079571281310308 10.449858881531786992 3.8573349005725261485 -1.9872151027750688534 1.4010927406138053986 2.1336663393870094474 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +161 1 14.755834276806677252 10.617740829058700314 4.9574844886805307098 0.076517784514159331577 1.4456536289737349499 0.42681690876900590936 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +270 1 14.759879926766320324 12.398596995120861664 3.2624761299550457672 0.24843589329679130473 -1.3155261156080164664 -0.66011897160590327083 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2405 1 15.69611786051178548 12.451022029466843222 3.3681952947832227707 1.3349421209831049406 -1.5043564133122544479 0.84882707982724070472 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2073 1 15.980541116569975557 10.271306298222647513 4.9941321021016511494 1.135360602958486842 0.94721345203037832228 -1.0016754902117950277 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1295 1 18.97396717560437196 10.813558433190969765 4.4127085800434135976 -0.27464497375789731493 0.57573593983749282721 -1.5638002878292986964 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3165 1 18.183968331961029463 11.164229935456541298 2.633228347382665202 -0.71517824819267694636 0.35050292962598306179 -2.0690534169668084452 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3526 1 19.434724066960281874 11.589815945607110592 2.9997314868858828696 -0.33178997389681075258 1.3231625670796365313 -1.276101841497123468 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +143 1 17.460599275437523659 10.292156756290181008 4.0671157660920984611 -0.43080268653379910626 -0.18056779352226429158 -0.79874760273662359644 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1087 1 17.848462778087668568 11.874467006421753013 4.5093807583423757279 0.40650706879596165688 0.63983282136585328814 1.4922794004810899793 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +194 1 18.767043553811220136 10.57793643186187893 3.390461541316853733 -0.71798139007493155805 0.39995668861738398192 1.1133068054757968568 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1597 1 16.819756010639114407 12.320471018129001806 3.5996071504803524022 0.74565007333832578063 0.55831384123509897321 -1.7469229312722462932 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +711 1 16.910129067448039564 10.771439634310043587 4.7807335818026306384 0.825260426320033047 1.675304090925960665 -0.81306446825482658891 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2328 1 14.91219306749894713 13.12827695338007139 4.1944093373187802953 1.3763766022901442465 -2.1031121616410088926 -0.63318207086565991837 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2387 1 15.786774959235746252 14.756546387399046338 2.8084769659796502417 -0.635296461768505627 2.5594135581434418469 0.78458159820011363905 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3042 1 14.61931991210557058 14.033981371356453849 3.3854806697497941137 -0.93391382853932181085 1.3756087419806468652 0.16145475446434473521 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1708 1 15.451599187244886124 12.507670633907538971 4.815878068568892445 -0.65138896012606428698 -0.26567821611552416838 0.61906328339156579954 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1827 1 14.825445762428607566 14.079424274600279787 4.3972898917604341662 1.5452535392018922344 -0.5849534074330591249 -0.43801709677550565436 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1693 1 14.049447008810643567 12.758028218484637861 4.2293373637762936568 0.64069082947947453288 0.011222236084267089851 -0.38862131470854444082 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1122 1 16.415645566532027999 14.94444793004462646 4.9277488289208948302 -0.67881945146737399099 -0.95397076873584640833 -1.3816365556905736423 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3167 1 13.668180412506671928 13.165551692051268518 3.1932823175597597753 -1.1799011124009890494 2.2594122855412783757 -1.2393251868281780492 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3108 1 16.575278003870657528 12.908960969077396541 4.4985762517645238034 0.76495915306257400434 2.2108899902254042225 -1.763009165546190582 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2394 1 13.544365774814748349 14.653437262380755612 4.0799377842393145244 -1.6662015731242800776 -0.9991305602319840995 -1.4386397982737557655 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2149 1 16.61574231950519831 13.175385902113371017 2.9575782915692521158 0.27568633064123310161 0.010350314228939134359 0.57085619140453569553 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3044 1 17.631450572907038321 12.905330404150895163 3.9601301045575203474 -0.021703988859963555674 -1.2219784723436255547 2.2000886089485680586 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2224 1 17.950950832846235272 13.784379398205164335 3.3123337280396958349 -2.5500190098875150646 0.99926167502607854409 -2.5791096464459641879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +83 1 16.985361758151864109 13.871674068985209161 4.4273422546818599344 0.80388790207017102318 -1.2733858780802200794 -2.155306083254336702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2002 1 19.374072294307797648 14.909094166218446631 3.884766625695531328 0.87737653025181761013 -2.1411770944280252849 -0.41184285498799499958 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3281 1 19.114854595964448691 13.945388038348387028 4.143090814159373636 1.1195187666247623515 -0.27364831312915915973 1.2496232868789471926 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2512 1 17.300760426119339286 14.480350650572255233 3.3615783867294615206 -0.98721592909566591167 0.084764364161178176738 -0.12535144134984935183 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3235 1 18.588742182035009165 14.895551821840644635 3.1591878984637773442 0.48832404132558249188 1.7929964510416636081 -0.87352169762937936781 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +843 1 17.980796980624855763 14.219821915097474729 4.2623103921040632613 2.1027129432667290843 -0.62427472295518227074 -0.47759376274176323918 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +406 1 18.064226082821438268 13.374948583908652822 4.912178651075787883 -2.1418105534666187495 -1.2792704405036667836 0.33242991031072821606 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1070 1 18.779866123058024385 13.097076985246252079 3.3301494524004118247 2.7836881475466848102 2.0950589748862573636 0.011886662092704733742 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2869 1 19.38832872528461948 14.150526973529736097 2.6727656991600752256 0.7407224362333799661 -0.18682703765670921614 1.0651455885724108175 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3757 1 14.459446925418273366 15.748735360019368912 3.7473915935658910215 0.1706173353289255068 0.71832159125656602772 2.6819422095190601496 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1196 1 16.402578936948831512 16.677076956370342486 2.8125783919500468855 -0.71507122157221025827 -2.8843449773564109329 -1.2556217428092066868 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1759 1 14.620898120243905893 17.10667048988468153 4.029051102918232985 3.2554589546548515777 1.7938462403527262179 -1.0650011892494470889 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +558 1 15.498245682940211765 16.294538441587267386 4.0373609116893005577 -1.3022219569464681399 -1.3851031439729859507 -0.39247979349051986819 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2022 1 15.911570534087722706 16.446374612921836444 4.9156507658234005476 -1.5458813394742949576 0.93881627422943614292 -0.023391634944849203775 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1198 1 15.240009703032342259 15.087236899298977377 4.0541549243209020759 -0.58358428374867366006 0.14295885770765887068 0.17203774780535169286 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +404 1 15.368008002594727657 17.376737614778392071 4.6760359221635328097 0.077086541057208093908 0.46319258505271038162 0.067168981676281741544 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1876 1 15.666971053468229158 15.905477686970677098 3.1218710502899127412 1.9998355595845729304 0.25839989913299232782 -0.85821425887987923264 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3024 1 14.973642842144178289 15.904840919853247883 4.8404825244680331764 -0.64199361735768789572 0.51004323622447045317 0.23492674234929500354 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1823 1 13.885173816606730668 15.872442717174891413 2.9203974421047669274 1.8169116764963968436 0.33656034881780028112 -0.53340811787469266658 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3751 1 15.128690235080492599 16.769372474416876173 3.0160618686063589422 1.3427155907419678904 -1.1778181674804375501 0.3334025415386331348 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2050 1 13.701795442213866139 17.317640328507227565 2.7812752874031705375 -1.1177483722379681907 -0.69424302151344430278 1.6788951377327097081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3983 1 13.45300485492123066 16.797420788342222409 3.7229191954974072409 1.501325495727878323 -0.81882748621608447692 0.16736515801301712902 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1749 1 18.092381501151553636 16.519787102122407418 3.1894216175622993603 -0.72873842346107797763 -1.0857286151990852563 -2.786241199301844329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2685 1 17.437067140683872424 15.875821313879823649 3.9155942705028357054 0.82889604172381603497 1.8074492925616620909 -0.318586005238477743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +900 1 19.505207189396166712 16.707756593703756209 4.1934929774609246422 -0.85610792205944608035 -0.68308422145504932299 1.8860157418279650532 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2584 1 17.592161401668303 16.774291965999502452 4.5773016353408246815 1.2217634107477475247 0.66139920804228335971 0.47545456484898412919 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3217 1 19.46083928493789017 16.677006314587718094 3.0965904357347815434 -0.15491572376980758396 -0.34544741708689941095 -3.5414156316044995698 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1177 1 16.714552681085862673 16.557214286941952963 4.2858643368927120676 -0.58110411210345647159 -2.1874672599476832069 1.7315000310226531521 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1543 1 17.47805093978418256 17.192528444134779875 3.6150717453589713557 0.92740399637870796212 -0.70929599764425255159 0.73760952288960257572 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1777 1 18.59709071902408084 15.125739578766934201 4.5046236504253327482 0.73434600649477521639 0.81768008458605767608 -0.20801964476043829921 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2961 1 18.716683401826493593 16.247893116984155171 4.9189771075054746774 1.6142820302238389818 -1.7436043845657414053 -2.4764259387576785798 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +913 1 18.437602578456573355 17.47008542006829046 3.5172701090096247789 -0.80758258282323946986 -1.0191976245212761576 -0.14045824333791603888 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2919 1 17.284986672913937866 16.520586604625052018 2.5068332866839035944 -0.044612328202025278157 -1.5391110088154553726 0.019364179566384476239 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3961 1 14.859913937632367009 19.513034469558562023 3.0137006813039786124 -1.3185947351751177159 -0.37254175613936368894 -1.2524463535322500896 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1426 1 13.891650179979254887 17.90621709600475242 4.1531252509131153516 0.037744599130327780023 -1.6691737369859980245 -1.1628616232563795396 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3184 1 15.583822618926211234 18.351780474280616318 2.7321190559846217916 -0.12742451255053338643 -2.0989185764145421587 0.57405816661640574061 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1209 1 13.502693510558669843 18.974016203464852737 2.6226064455087323424 -0.012817424319687588039 1.2605969155244578506 -0.59951380864167835849 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +359 1 14.828907124992479538 19.481396755661648967 4.9276830878954287485 -0.73973226539301895066 0.94529031712878475169 1.007387758964204183 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2103 1 14.914484622168119543 17.847085228819349112 3.2874933595057789226 0.30796489696626921928 0.84839656945636776619 -2.1223917790574935438 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2647 1 16.224878551961204209 17.755376093536483495 3.566068164449016642 -1.2932866953376789265 -3.8956153618294537821 1.0553461802072960918 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3912 1 14.826581425475533038 18.239232683633225918 4.3242500300629318488 -0.47644977913720376606 2.7022394265581937134 1.337682455820852212 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +250 1 19.187430471013168898 18.220994244110599425 3.6161714673447304946 -0.77575924527470452308 3.3553362925009428963 -1.6092791660073930693 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2487 1 19.126229976439880431 19.64080880628058523 4.370122132979240348 1.1852614905324947436 -0.98312550099872042519 0.40599606039378388633 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +224 1 17.893916793636623908 17.737110323251535249 4.5881047986185548027 -0.70697592652662655244 0.23294571277202930082 1.1727478490623128859 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3902 1 16.996467859523036736 18.492768299424589884 3.1921298072892763109 -1.9873720386515327796 -2.2382395089993254444 1.7509646149559023875 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1464 1 18.053344969194597525 18.418527197856846556 3.6687287561753625376 0.046076314695173828384 -1.8688042548898047279 -0.65546235266404995201 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3143 1 17.823420161514842874 19.797846526326242866 3.6749875578655748498 -0.23322762071613697965 -1.2852458667837589612 2.1057942968855396515 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1369 1 18.022145755529184186 18.975172813076859768 4.492582968731576365 1.2579702718056002819 -0.54135390948124229027 1.8017516504118500364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +700 1 16.82898500716517276 18.063836470865147987 4.3224376370332464603 -1.8502304846834318752 0.001377650041518629475 0.47607549117626785096 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +300 1 19.824902206493838719 19.535080337758802926 3.3484638191321174361 2.3367008289533282017 1.7030510689467286412 0.5098419825735756028 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2822 1 17.937894500451808 19.43949231955800272 2.5729041342256655511 -0.37239922057543795031 -1.2550983002883393524 -1.4715828171839597793 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +441 1 18.956690221493655457 18.222771565688471895 4.8576022104036624683 -0.54665703515968189219 2.0225224813738709173 -1.7849583899295085043 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2798 1 16.904980576528956249 19.095863568116893561 4.0094880800210921379 -1.7681269854602830183 0.88827186307172600888 1.5738797368166137502 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2535 1 18.855590908928693494 19.077124792711327217 2.7980251867272691868 1.815628913934886679 -0.85482610235575307023 -0.023468980845372789529 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2373 1 13.711581722093940883 10.333771878756625284 6.4749396702043462426 -1.6320604366441062716 -1.6649651348616809621 0.082395368379552844096 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3219 1 14.521857541027687333 10.982823317467930835 6.3357500647068372146 0.58444698220689617063 1.7390319294460674371 -0.81581905300958867944 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3482 1 15.579068608116308781 11.585077141575988335 7.4726621993028139457 2.7271884279528353368 1.3523582982147319687 0.62396427366784790181 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1301 1 13.635875435762288888 11.701748210627672009 5.1832786364460758932 -0.19144902490466986222 1.0901205027103837431 0.52535585929874972777 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2236 1 16.412402182652613192 11.029078493468468025 6.6416066677202625357 0.30646129719901832322 1.0137533662724600436 -1.4188162477582004772 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1684 1 15.122224775358370508 10.82573924096807616 7.1189875213720057445 0.61664438858747250283 -3.1678878439661639632 -0.22642019677428340541 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3187 1 13.591523995556276105 12.017593000774457579 6.9633071124279437569 1.3714042770180401298 0.59126622487464808309 0.60713018386711437024 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2122 1 16.416957117433859992 12.315035246837416238 5.3566332572886539154 -1.269351852765213895 0.52235890643463256389 -4.0092750255265796611 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3626 1 13.5366058623600658 10.520566874578754835 5.2211096696305423492 -0.84290196005153261716 3.5659864127555698232 0.97989376023526275628 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +889 1 15.507025251063046412 12.162811703172515365 6.2610708472348246545 -0.42816848994094852676 -2.652634304946704269 0.82548185507139015815 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +352 1 17.29557311823103305 12.394717925420238203 6.6944828959758435616 -0.24369434038254605968 1.3215070831591635425 -1.35857822773622261 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2219 1 18.522071291343696231 11.358784842800075054 5.1451840720300694443 2.9242555068504012539 -0.3188476681623828024 1.0161362166480099045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2868 1 18.19924240684805028 11.84702565646291994 6.1821056148221913418 -0.29556075043333207564 0.22485452945323763929 -2.962135108129226424 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2540 1 19.895084423059341105 10.851800577863338404 6.0734370589958244224 0.57197643444848322858 -2.3694470453773397445 -0.0045858967764649824841 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2092 1 17.694805776990161661 10.770213651909317676 6.0439055009597968393 2.1909221466964434732 -1.791090389556745377 -2.3754652673721090572 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1852 1 18.967441483176500583 10.452686960090725066 6.5337251923671528786 0.066507015262762370078 -1.0391625366609884562 -0.70045456467670808021 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2132 1 19.592774596013846633 11.756400791849703324 5.3951440430288055694 -0.55012407899282389501 0.78003817196904345899 1.1750765144129462492 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1606 1 17.716521096805522006 11.372381535442100287 7.0053911298607491887 -0.80953876728288332032 0.54294164828621815921 -0.20848780181403497869 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3582 1 19.393695194140555316 11.208330785611263281 7.1743305061666280409 0.61192923063316728705 2.5573747331029141883 -0.75131057095013520364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +632 1 17.1798099353453253 10.023367420695427299 5.3604596462764222409 -0.88101182128650279424 -0.1219510540059246112 0.20516408873601671425 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1635 1 13.408440224769156757 13.229977550605402925 6.5801433706829088877 -0.49107926983324284853 -0.12532745381785029282 1.0952068169296460542 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3135 1 16.20719285173825952 13.746190385620092655 5.0966676857008286206 0.24375728760667364492 0.21119052800063059516 -0.56362000428357061921 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +414 1 16.53242005592256092 13.185678609278546958 6.6347622911318211436 0.48152003085604394572 1.082942145678255752 -2.1071083025921657494 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2076 1 13.37289701587957147 12.782491956565580793 5.1734899575206565459 -0.29851980701777880434 -1.0761825998809380067 -1.5973040761206240834 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1566 1 15.068773430694744064 14.005924212823297026 5.3672985437858278246 -1.6714951310004675378 2.0051440994320506306 -2.4285512125212820322 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2805 1 15.355099520966092541 14.812252879785955173 7.2816265986993533588 0.2725589902370005313 -0.73281945146062643648 -1.7363940684832499528 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3913 1 13.812007509179837328 14.014975510601532349 5.4345326819026187337 -0.32937550490192046837 3.0481736335707458885 -0.74098570903557081646 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +209 1 14.453560585070537314 14.104151467326031977 7.036424640561212307 -1.3600694322132476088 2.0117058996444736607 -0.75815594794554996838 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3181 1 14.307120376839085552 14.9607438391156915 5.8833187027301763194 0.8840620963610112959 -0.5489923208882744321 -1.956825794175648392 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3530 1 14.551058235399368712 12.893339738368979397 6.740367365299858804 1.7140957073038924907 -0.32283828949984266776 0.28647464482091250515 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +999 1 14.269208805084836911 13.192766984110274819 5.7222293413386813299 0.37297165860899567091 -0.37668988214066245757 0.94458596530652405576 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +716 1 18.218175939506977556 12.575098800248726505 7.2998165825647403082 -2.2689056055679581725 -0.64460637194801528871 0.25201284373565807639 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3141 1 19.24116486642497037 13.033804903315715507 5.6873079933457431068 0.021518398459793603578 -0.083350279205756813705 -0.74841150752684582059 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +505 1 18.373313265162956043 13.795665816564653738 5.8118089395585101897 2.8148821075667753711 -0.44921690623536297826 -0.031338275936058430926 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1738 1 17.020899163306427937 14.366053150236760771 6.7478664218723487522 -1.0040842679406214444 -2.8678496587492356973 0.85329636432823330328 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2318 1 18.61759792433907279 14.544522354316336887 7.2513569940807904857 -0.018229864717573707189 -3.0481073611993223516 -0.91503012834231756134 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1923 1 19.270088860715613777 14.24015860651534382 6.2083215541224747724 -0.062644635640249579644 -2.2327986441687404096 2.3864653887077422745 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1940 1 17.738645303113671048 13.309377425575760867 6.6643821466815804655 -0.58070930230271367023 0.56957382874783646365 0.55448414113424560057 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3203 1 17.755786663174816908 14.691951981337743049 5.9574546619690975646 -1.5789550694471783387 0.79495014284486864575 1.1982284901464694826 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +957 1 15.807365418538571689 15.614704143770902434 5.4346534543531843653 0.39235687601250035517 0.92890948417529539682 -0.9198242530589518795 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1639 1 14.466877556358012313 15.325672672006184882 6.9974202150965796321 1.3799696711642479574 0.01513715043359029587 -0.044763315332135143743 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1780 1 14.710467803620119298 16.11141233549783891 6.2879018446345087412 0.37308751261466133187 -0.14835875677932283678 1.2674256422917247189 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1456 1 13.381239317345318796 15.157432409460795952 5.3540459849933110803 -1.0802463304328544513 0.93383945781766219962 1.2135937847893543129 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1238 1 13.335098535433202116 17.131065281770496256 6.6469341636678924701 -1.4041602617823181198 -2.5707180131972284798 1.3138656843773930394 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1012 1 16.454886774847171438 15.273679217477946324 6.5342369307009882107 1.6657032077476703336 0.10360117029834041424 -0.73735046263278014589 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2485 1 15.410326361374902859 15.783302024976462619 6.9798658390078713865 -1.6408676045337651228 -3.7305249615342890301 0.30405492873063644232 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3519 1 14.384210295525232226 17.4223514140317981 6.4927868295846122848 2.233662055474798791 -0.31177759084588629879 -0.86930428732269326986 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2611 1 16.48287405729136168 17.466256334847422238 7.0387703067006697211 0.54223654300604229306 -0.58777582528921568095 -0.33358156136014244231 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3586 1 13.723771304333535426 16.110072057735216333 5.2138484670905071994 -1.3053230077731607928 1.6271189448215621631 0.95293533283662479327 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3019 1 18.791617855512299684 15.385044032717155815 6.4951489597129343778 -0.41168209652902482132 -0.40185632340371402194 1.2098442300109066849 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2350 1 19.534584011584072982 17.493409019143744132 5.9860578996785012151 -2.4676126021783422182 0.28262585691598446358 -1.8279225309134772282 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1479 1 17.363951566877698696 15.478439745360175195 6.8959399551674982476 0.062843117656596184095 -0.11272015974256006932 1.5207334388661082336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2794 1 19.075929484169154904 16.345391772290469135 6.2738687994714936735 -0.063371063123451892851 1.780053864702575428 -0.91331747143819097534 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2143 1 17.738484200981655903 16.311791051861852964 5.5327752161440217904 -1.9041505831324672116 -0.99513083634342169859 -1.0847494150534502388 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2974 1 18.320762381363206117 16.737107006605317139 7.0087047241581794665 1.228531327648745064 -1.4433962869102017201 0.79542655710087439846 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3416 1 17.352467152536174666 15.411966507346361865 5.1417427912988600269 1.2777604847681762745 -0.54783402719631135724 1.0826024145153470002 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2320 1 17.049569538950056113 17.287444873324766093 5.2222205842144564514 0.95024220496588918117 -1.8262854567191566524 1.7675269669402224881 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +771 1 19.181048058552089941 17.294709458437768745 7.4792541936711822714 -0.37308607505227098233 1.1867971453870900245 1.3731656031989305511 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3945 1 19.591374558636832859 16.46893612285031594 5.3920779453654210656 2.0211264254652241412 0.74829141055667958149 2.0926995934555336909 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2985 1 17.277809571508477404 16.604633212874144732 7.1416206734516203269 -0.50010390079495847804 -1.190007076323268409 0.81605671510781196965 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +48 1 13.809976006183269703 18.755104298025958798 6.9918871357923393361 -2.5425268006017263112 -2.011337362377366933 0.21787350544965181087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +286 1 15.857233507738270006 18.980508124769855272 5.4646053873676745383 -1.9554610630290656381 -2.0552876562735744592 1.3686042601532208973 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1902 1 14.126158389911434909 19.810663837009201416 6.8526157910831129172 -0.38028853918712651749 -0.38032074573156837705 1.0983699909836219799 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +609 1 14.83056490930975535 18.450492586448937971 5.412205283812078882 0.474306354048727008 0.48059103471474001745 -1.9043188970887194866 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1885 1 14.765898866555181357 18.908595649950051154 6.2296400162485365826 -0.56559646654722572912 2.703736094420920999 0.321666795931178362 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3339 1 16.1083534027257258 17.780532158002241516 5.3726915389425782266 0.073891478166369026215 -0.45994343616541238928 -0.13856008638538938604 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3647 1 13.614731641401903062 18.128771915969618789 6.2316681125626498527 -2.5232767213628899405 -0.67979395538854237024 0.84261351047527777158 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1192 1 15.540723627769377657 18.841442348204616053 6.8566603966142487536 0.70384851905863221599 0.34839672616333361432 1.2847971421959436533 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3364 1 13.836108390047755279 19.889066981358482167 5.4491768119537056236 1.9339363070028225966 0.36682415002807389204 -0.89045113278763898812 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1463 1 13.524761560414024331 17.798243843381033713 5.2437498854295050421 -0.212678344814396042 -0.6527291821596346022 -2.3373186150824638574 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3996 1 15.019011390030708952 17.50416823461414495 5.7167181169765548532 -0.80409818155527179595 -0.36768162243542551471 0.52039189814459096972 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +306 1 14.007231271605448342 18.859448708257399829 5.0227399765895430761 -1.0652811910437975929 -0.38079493343918147108 1.0512315997951782176 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2892 1 14.595452482539476691 19.098827707872867876 7.4630817748310187554 2.1929526779080639187 0.78514206419249388258 -2.3681006434634621627 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +222 1 13.334243874905608251 19.154041017164406213 6.1521179675915229623 1.687374375046305941 1.0749483266360733147 -1.988958723024526698 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3325 1 19.85344910559378917 18.682294441804625507 7.3098232801840881123 1.5455418886590126526 -1.0112992248293251052 0.76132384418097476253 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3995 1 19.770209005199948393 19.248178070441724685 6.2142590163142061854 1.7145730119111397549 1.092715680511596732 0.91698747641018096832 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1255 1 17.317182570730466296 18.500044512382853412 5.3151602603503373956 0.53861328158999610682 -0.73225287061812049938 -1.7559753144284044879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2838 1 17.396510373355631884 17.777494813282658015 6.0524400004764871142 -0.066089769479850166145 0.47887081904643791219 0.17309336449166043415 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2536 1 18.96578427511551368 18.455329968024386744 6.1508844032958718273 -1.7581525432708353662 -0.40636142934973917829 0.46701195995190974974 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1480 1 17.418644090592927398 18.389149367335470231 7.1865977214751621815 -1.9049475047905215508 -0.9906878764084069422 -0.021690452345711274534 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1442 1 18.955758724968035267 19.207745174278013423 5.1704473763257912111 0.30401493258410411391 1.0259741295870310474 2.523156972606767745 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3425 1 18.890331858027053613 19.26200072219008419 6.7403906084265523546 -2.3432656623870000701 -0.83780419836845232417 2.0819444935880881964 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2123 1 18.143475188858555924 18.844435263701960537 5.9775018439236058398 -2.3834021260016706734 -0.93618124798422075461 0.39105818842299494564 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +773 1 19.928766655342062819 18.490411731649032845 5.3036264080811639232 2.2366567617039008198 -0.58017675808570257079 -0.84808156793952482744 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2825 1 16.971879927487098172 18.848189892794863454 6.1840594964446600201 1.0520737745370751792 2.4459898209159764981 2.204842184156381002 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1735 1 17.403306257348450714 19.746378421221560728 6.6832092607391402339 0.57959845901982476324 -2.459124671491345282 1.0118096908023219704 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +980 1 16.864145744027538854 19.695572276855067173 5.4000949097369890239 1.9531183327104086889 -1.1836353316869787644 -0.39743189222760572088 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +71 1 13.442150971528196379 12.380180072386853141 9.4832344386304061601 3.0108702285837942725 2.0672576713330625964 -0.58001592170786242519 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3065 1 16.41267091010225343 10.137372494125697742 8.0207844675149662095 -3.4205638391247426 -0.10016128696202085402 0.2955827667980149287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3304 1 16.086489846306101015 10.54674292718596007 8.9153391863650277571 -1.2466988480007348272 1.266784345564180958 1.0231561764346308596 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +744 1 15.62244537854286186 11.289115228756635645 9.2325407036921980364 -0.70789796697401141667 -0.70650041130331786565 0.11384924839928467488 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1861 1 14.75605010760572533 12.066591999210402264 8.18783426310038287 2.422432611550012993 1.2860791397849196116 1.2090433953365984365 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +928 1 15.344812429284278466 12.173011676826211769 9.1617869084737808549 -0.76687676679052674267 -1.1705141640564473704 0.51487220038623460194 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3347 1 14.969008425512415172 10.842779067947295957 8.4696145306510697282 1.7556142368739866555 1.0103637903196138748 -0.47321406718560182769 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2828 1 16.413323943065627475 11.151911017769958079 8.0564010458814188098 0.36835090296458156134 -1.552853764300853312 0.60197618059318747097 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1595 1 13.929158767931806295 10.99001299007878707 8.3780756032435395042 0.72920382404234473928 -2.4171095087424023795 -1.0509400505480126498 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2035 1 16.604099624929556711 11.382703637592076262 9.0854810879052880779 0.94559857840071614987 -2.0635811411755971001 -1.0432842771461747766 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2834 1 13.924478466624785611 10.217129704805625323 9.2724518763798169374 0.18708336932696656429 1.2952383534876417137 0.89728378242154094302 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +212 1 14.238358567365791529 10.926738436900825135 7.5301681504418622737 -0.96187973983751151597 -0.33842765221116888341 0.48037888328607181165 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2436 1 17.136357351374691405 10.452127470268180787 8.978239635308741029 -1.7574033273746028083 -1.52701123250588644 2.7476922171542295104 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2386 1 18.127954717594125356 11.112994695527955713 8.7863994139721395271 2.5965518237351976616 1.1966948009812350406 0.49915654688549904172 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3621 1 18.882191693273480126 10.695696824065544561 8.4106911968211726105 0.074921967519959012383 2.3585325277322408688 1.4993072974236525408 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +740 1 17.627859465339646761 11.967858529134868917 9.6639154568443768056 -0.065399558317978778721 0.83221675822170138037 1.7017339907665915977 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1025 1 18.714253503318438732 11.904591193360404944 9.0005094121701212373 1.7073109008877964676 1.7159778660257969385 2.1876401846280835173 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1005 1 19.92124673482383912 12.281986762087617748 9.5024260878511963568 -0.53450150419063713336 1.5905044685574480923 0.38782223839803292575 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1664 1 19.129780171076177453 11.705755820547958379 9.8661413760355394231 1.0806511694234703924 0.22676637914141214991 0.46322488995259397671 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3891 1 17.345038166653527156 12.162697889469798795 8.7803782579192830582 0.46963434396112535563 1.0018018733902218642 -0.76318799515770130437 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +736 1 19.84163018876810014 10.741363780972045916 8.2617167254114356467 -1.3502057770234145995 1.733679401271903453 0.46654931092570162132 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2325 1 16.722250256530656998 12.092334885319141691 7.5437846553780891767 2.2483736201282811251 0.19886309548539815584 -0.9547239371169693456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3550 1 15.762981870559340081 13.029377807004898671 8.6034765649689628475 3.8391909033565170262 1.0021657053853161301 0.49736655362546644543 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1636 1 15.970900562830387059 12.998763794457365961 7.5709329040707844527 2.4577102601975844287 3.543582081266642092 -0.69839306556639157986 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +374 1 15.84092601751702567 14.258536064269611288 8.8695878174912490266 1.6964245030189339936 -0.32376071062823907898 0.11649902024074398899 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +124 1 13.938148293876539086 13.585296050559527714 7.7181079159031664716 0.53570659534592190987 0.68521323165443881464 0.3340687141727289311 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2352 1 14.267522262535599964 13.046338603858595562 9.8627412132080571894 1.375799882699340948 1.7244900273485754827 1.8361962266013847067 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3025 1 16.170947842199129951 13.444175360497974125 9.5449292035558830349 -2.5137907053650043743 0.65467092682661842673 0.29660198100770951424 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +291 1 14.9038217495104508 14.364545455170915744 8.3824140484319169531 2.213076230427987845 -0.87646102593034058703 -0.64928190744170977133 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3980 1 13.356651096942673718 12.893186850271790789 8.3683084023978384636 1.1197485966362810128 -2.1079578026923573297 0.64588255341527323061 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2665 1 15.854626864066323932 12.545225102756278446 9.9935237881988125963 1.1250864568337735072 1.193111763283454696 -0.22815804937678715869 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1061 1 13.501084488305126641 14.793603605629217057 7.5017875741893496055 -0.92205650449324294549 -0.95040364448115244311 0.78064717489659118943 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +897 1 16.797789248457043243 14.527838623925507733 8.3726762488692667574 0.22469049414990474589 -1.6566484320890237925 0.5500738199092171099 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2779 1 17.22087170158310343 12.996844625595350919 9.4175319764838754111 -0.084987806857214506784 -1.1397144367696840916 -1.6907423038229212331 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2527 1 18.481250773929957631 14.290673482163795072 8.5799592667780242294 1.7750870531208879921 -1.9827471444637920772 -0.40273385371083847417 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2875 1 18.163546693842619106 12.868064451969930317 8.8961037790344708043 0.48339415879833941281 -2.5972397335537342755 -0.38122460577190186992 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +456 1 19.675158122227639268 14.71895309774277294 7.583786109557578925 0.2572305263836652256 -0.4206492621494052897 -1.8381865908930283826 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2252 1 19.680079311246039708 12.513322910657064924 7.6685657534566322724 1.1926209197486214997 -0.84770052364618697638 -2.3590704019301456107 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3673 1 19.405318458240394364 13.666286806475001825 8.2370303708504515328 1.5547971148587267365 0.11018927064806706417 -0.78129060094698898897 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +749 1 17.675890399434120326 14.939934040233028512 7.9032844546855560708 -0.24570713876204280934 -0.084260497624950983497 -0.87070597390132231652 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2777 1 17.911291463905307353 13.841553675462272111 7.7427046763148412722 0.24645484497080766273 1.2752544010652835382 -2.4096142119875234577 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1533 1 17.308315120876834214 13.598315775738496924 8.4397542854841880455 0.81213990981040218298 -0.55789752909278345072 1.0731791151406830931 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3253 1 16.893908209792964925 14.125158983870599982 9.4162425464251917617 -0.69374637225498170245 1.7950286366494361268 3.0280659545389791987 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2929 1 17.844313241608723786 13.976172264487159325 9.5908368111208535112 0.56373021907303422218 -0.38495787188977598214 -2.4398868658832655321 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1737 1 15.434276347309713984 15.725274500206865014 8.1250946746523329267 -2.811607852296461374 0.78662855285940591621 -1.7940401259795335509 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2177 1 15.932415082552626728 16.095545780024067994 9.62660245360665634 1.6830964118783708905 -1.4135825668722203918 -0.20056307869173525815 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1804 1 13.963775103723097715 16.691535965812658304 7.6946125382357886124 1.3055295406982605488 -1.1038413934091926283 -1.1660030850733100749 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1747 1 15.733019451887216178 16.763933756787185558 8.8646487451089193144 -1.1418985468619793355 -0.36172975263497492149 0.65190320653775013504 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1184 1 13.577585575825125375 16.705979548427247749 8.7697422524071804162 -0.76258802023165006556 1.2685502013166203295 -0.66648742411920358641 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2716 1 15.525793524983061644 17.099504274224013756 7.7647770520729935129 -1.4436072436856974832 -3.2561909321520059457 -0.0046755129318152618273 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3147 1 14.546569508008655447 16.849070727068493625 9.6148055916275243504 1.1536086891168790824 0.34481140994671366506 -1.1000416707902542779 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2637 1 13.692769170210365104 15.722237325920188411 8.2626634950295461124 2.1968757906062172935 1.3837461538349311585 -0.015753511550256397294 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3311 1 14.842402561826736118 15.658541949795228732 9.6778216627329261001 -0.30674129733958699351 -0.4972535254756176859 -2.8566702723977286382 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3064 1 16.581041687867141832 16.026217795712422998 7.858544307376000404 -1.1850996097065875645 1.4806649062051970844 0.64386161385623152942 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3948 1 17.487374361822187296 15.776810676137614564 8.6760626992009601821 -1.5770240910751260888 -1.4299665188966146356 0.69515869786643991191 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +610 1 19.826696895894677652 17.209552522782509243 9.7176549462277677094 0.29249956199802812362 -0.95811367907702860158 -1.418445578209514446 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2639 1 18.032213115457306429 15.106857115208267572 9.3072451186211271335 2.024175914640154339 0.98412224189033659094 0.63832023900315770781 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3858 1 18.043160331179389999 16.45390449052984394 7.9746858550469568172 0.37734190249867605171 0.5882028663370285626 3.0415448423429696234 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3876 1 19.494748439709415067 15.176312125237398476 8.6928813489231036016 -0.66046727756744416649 -1.1738734613447168176 -0.74340777565092253099 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3084 1 18.654505133058666644 15.2782468639626412 8.0595789688279921847 -0.02926643723322101473 -0.90880210971843977674 1.2522560864341727438 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +825 1 19.267914736702842049 16.264479739953099369 8.3354617350004858167 0.99129247251027319265 -2.9570955525986204471 1.2839572693103444845 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2337 1 18.813238016994286994 16.926347038487033814 9.5594147261579109909 -0.13356872884015846825 0.06127787413453313764 0.73055378767576473198 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2513 1 18.997712756048908744 15.43730600781421991 9.4823181691465467935 0.31446519383272952819 1.167630238565548817 -0.50941023185607747781 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1950 1 18.406465953261861301 17.237028662261586476 8.6152603882917038192 1.5954656088091765387 -1.2834790401779982982 0.8719091435077729324 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1313 1 16.688256363859629516 17.108815250776665096 9.270864462795369576 0.19083264582266867837 1.3912734094956786812 -1.1294141418543806044 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3474 1 17.707699859391198061 15.89951538400791442 9.8651702332955029107 0.67082404233815151606 1.3860546012171168773 -2.2838147756461268933 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3180 1 19.693656010069794604 15.712281908794871299 7.5993658901673049044 2.3213126171590974245 0.62235937273880603815 2.346124820650719478 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1135 1 16.551113402245420048 18.541780378743801805 8.0272707545317736333 0.80473642214329921263 -2.1154251288575900425 0.90286963673685649567 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3472 1 13.966740594079309901 18.512430625305860588 8.0435836416022734596 1.7608826887812134565 -1.7708851747876430682 -0.44328404181857028465 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1108 1 15.703311500348165808 19.171887349549500357 7.9000790973404333428 1.3598608566730838731 0.66707383891992877434 -0.18156865168906297092 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +397 1 14.544531162766439536 17.563728122620336336 7.9401645400897118421 0.092441401474942813676 0.24502034431980876383 -0.25848331655935929962 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1988 1 15.507793139219643308 18.191266056606981039 8.0128110029605554843 -0.96575342464951741128 -1.1522366832964290317 2.262852299731636041 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1030 1 14.25761679403852078 18.963136939176212792 9.5581326127904500112 0.55060414944956881378 1.3138799886142891182 0.23799139049130171863 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +684 1 16.256160135337768935 18.81511372523374348 9.6555715223436404671 -0.30143743642122905468 0.27010756683113334997 -2.242054547274118903 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2566 1 15.245706143644374819 19.605392175839991609 9.5244657301044561848 1.3525033283120602157 -1.2530662052855661148 -0.81267604340374610672 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3033 1 15.484305721796213007 18.684293373880194622 9.0038853447289923793 -2.2314149738829565095 0.96222216919494840681 -0.22473768571984151232 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3861 1 16.58708519688188332 19.642689979778925391 7.9055973471788014706 -0.32478969867973100927 -0.20255363539757884062 -0.34446200721509140363 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1792 1 14.063954334029075355 17.758942991079454288 8.8014681312291163096 -0.37885947915000633968 0.47163442746764433489 -1.5702926247549320315 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +382 1 15.391679362342907567 17.71993186336517212 9.3915266549923028805 -0.28853360419448120799 -0.60750719278691378555 1.9532898503333619988 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1609 1 18.318614599004284571 17.954564122600086051 7.8130262749733017102 -0.67565551743584750799 -0.76378465625953850804 -1.599889774869344361 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3348 1 19.041630517131522993 19.403555776835855085 8.9818056934575931649 -1.0392380736032702515 0.2963312335504455497 1.7461385698691829216 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1289 1 19.290741301662702512 18.741665721600352157 8.2131285521350481105 2.3063394829790153651 0.6863953286650100738 -1.6671445983557302561 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1481 1 16.744087210828787704 19.937017921788321217 9.1602804376576685286 -0.86557782204062050369 -0.15074080802518119437 -1.0975728548849268407 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3559 1 17.520592460244230892 18.784270535074870878 8.2932634482074050197 -2.3998834435068081561 1.7396648076413769868 0.58548390859086141269 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1573 1 18.279650162255212109 18.669077359746012235 9.0943188433132515769 0.4172250918191969804 -0.48610642509205814754 2.252187321849080881 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3382 1 19.681800801496027731 18.403952328614359146 9.4821357529829217725 -1.9623417904524727007 1.8909284242769661688 -1.1022293825989788463 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +936 1 17.221164213750206784 18.073652822644564964 9.3630477820179258686 1.0597493100770152274 0.74844804884840843151 -2.7528923790748462963 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1276 1 19.043128717287320484 19.763836336952817163 7.7524558518682020747 -0.24615074083437368802 1.3946184914779158337 3.949159643246858753 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +114 1 19.503943219061497416 17.511477145468997918 8.7876132000077120665 -3.4053875860195761405 -0.016366491825275518435 1.2981284497075369355 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +148 1 14.301659359559872442 11.953432703784958591 10.932139241545927533 -0.52699504777918992904 0.93351377229073984054 0.70934289117007909287 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3507 1 14.981289921822494193 10.776347894177243703 10.50076224794144153 1.0751058803631388106 0.77495306058158364149 0.43242517860507273531 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3422 1 13.736474275168067294 11.04470037274140104 11.711990772299287755 -1.4719273814839652914 -0.52695174819844115 -1.4853320401789751326 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1875 1 15.716670190157801201 12.10079756217043645 12.36724921491539142 0.356376226007289576 2.6279452403384846448 -2.1447448918495863879 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +34 1 16.020498567698929548 11.124526971090071825 10.133765024159442802 1.9936937343626932595 1.4901804426629645661 -0.67881095363590193692 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2569 1 15.176861147537689334 11.874581134159624796 11.446265132514390928 2.164576580385999538 2.1516804102153668232 1.1664992224334886917 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +786 1 13.780939421428096026 11.05115768498964357 10.274598865943103121 0.54374576853992240277 -0.44441495501824412884 0.063691261285945419135 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3503 1 15.108895272475310279 10.924862728544493251 11.758540685822767458 -1.4296411439493676987 1.1161079839015846105 1.9817630069103149282 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3826 1 13.670041906386183328 11.725617564481872535 12.411560876713123136 2.9787623779971510452 -0.92902124090819981905 0.97582206511418778661 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2077 1 16.249280546518384938 10.252421978226927024 11.654762489348348353 0.67978145314619753403 1.6406024508638146209 -0.86875696489232157038 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +331 1 16.594178107521866394 11.527009801432244629 12.078453976332470532 -1.0868405842634205616 -0.6252867156527308623 0.26575085612104409893 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +18 1 14.780188139290082461 11.640593016634223744 12.473531280632558449 1.1491640648792982304 1.3177162848155838937 -1.3453899320521602867 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1574 1 17.236245196123043399 10.477058230451394394 12.010875284671648444 -0.23341933665549227661 -0.65100445766576242601 1.5873254701884942364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3840 1 17.47590044198108572 10.816703546162623084 10.778976175832275075 2.7449730113109271912 1.4701346112986084513 -3.2318972221120176869 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +510 1 19.555146672720784551 10.293943766939561257 10.425494499774742962 1.0444025452187342129 -1.2218840598195728209 -1.4081121662463631505 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3979 1 18.561302280267149456 10.66817895053008769 11.809187931594994581 0.73961711527446472036 0.69745301641177581686 -1.0714012827450984933 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1952 1 18.54064685988918626 12.101617855567264215 10.847115783308503012 0.78172072900510158888 -2.069019209272115134 1.7024505653858950094 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1172 1 17.686454693870238941 12.363129484922943391 12.092655657849011419 0.76329793677766288873 -1.3993325612635074684 0.080271094927514302642 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3122 1 19.532593255741367955 10.381923600204899572 12.334080818771782972 0.033496888363525614829 0.033023556210904241037 0.022358702627650352962 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3388 1 19.851626114143609669 12.178800496165640865 11.585409380189627626 1.8298206992864380904 -1.7944259386190877237 -1.2585036184300264495 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2081 1 18.108982989206062086 10.207615756285017383 10.167053296380901273 3.1962182809672086137 -0.061966066766330527016 -0.056250331767879802047 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2099 1 18.770347209536414113 11.725070334090455404 12.290469265943842814 2.9499640065912924314 -1.5857531742579948908 -0.10814503763611772735 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +75 1 16.130665059591912325 13.570201182152404229 11.566749384357427388 0.53453222398744393296 -1.8293147336211810217 -1.947036458748315324 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3745 1 14.079151590362787516 13.85591127177219839 12.370594890988876102 -0.81919133284967182718 -2.1473801084156445285 1.2338254005536892777 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3867 1 16.551879423661603141 13.299142474333402575 10.671736746496707227 -1.2092110640148221457 2.6312727419942127938 -1.0634441160969922979 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1283 1 13.882524795761177927 14.872692180178738397 12.163769596129192507 -0.5739038193100698404 2.2661724949383725836 0.063336547776617457828 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1124 1 16.440175293505827625 14.578331670520173091 10.364329096294373045 0.12234815470878454557 0.96703347057946609233 -1.6463658296282421833 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2276 1 14.477706653142165649 14.246423049973515162 11.421298002944858752 -0.22339649153057700159 -0.16194446297052414452 0.20124983242170477182 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1587 1 13.873168292828889747 13.079192576196863484 11.269555509002978866 -0.45266287658592763155 0.93119686153896319425 0.066532986563226356735 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2411 1 15.315673510229967036 13.151635125377861613 10.922477968078750266 -1.3066614478475839789 0.3305190997678595366 -2.8918986681472649281 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +330 1 15.697993239401382581 14.508930894826153946 11.724656678253671416 1.744177144230798282 1.1602918766308978338 0.36233542761715442637 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2740 1 18.291842490888580386 13.565718630030410452 11.648671675073643428 -0.59440024133972868547 -0.53313156037952369459 -2.8685455274316677965 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +340 1 18.907746544054496951 14.47650273040306601 10.729801293461891376 -0.92459692848880403737 -1.2510212879473061598 -0.81762647772433205695 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1461 1 19.361105119797148433 12.662535913345658756 10.333052807653929861 0.42535978124194795402 0.32308647091580500188 -0.19347182931459749877 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2996 1 17.21503520176188573 14.12603077071266533 11.694372624183856146 0.73258756520021117709 -0.93056799666639444801 -0.1187562277958098822 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1024 1 18.850945889906409292 12.860394697309828871 12.082336080450787108 -1.2200875200845699986 0.4344578008295372773 0.14961762188706229093 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1064 1 17.302547912964683974 14.019222968872949053 10.569211366213478343 0.49552578159239840661 0.92249505046064894653 -1.5641099412430188309 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +977 1 17.162863854518544571 13.155157077545139188 12.208573176760348034 -0.19217113800680590829 0.54757750295013607467 0.48178003856677137362 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +983 1 18.095994803379380045 14.809340210378847402 11.622937991842620775 0.26544355374326528141 -2.8507728989044358592 0.23191010568207606757 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1205 1 19.57300397384481272 14.208241622935021908 11.651181388424967977 -0.28670665374936971093 -0.024557044722370063167 1.521959113849089329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +800 1 17.470571509223251638 12.791677582210979836 10.949671326743629862 1.1483889177927162351 1.4787266781589607501 1.9327244843579247657 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3271 1 18.343116420881738549 12.840633968857899205 10.222907686086609047 -0.3162342574271453377 0.74316783596796176514 -0.58040417902785357285 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +745 1 14.797152382405933224 15.188026907600175264 11.893689460550692871 0.25324828535921706241 -2.0747383597442143888 -0.26762215938263911319 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1758 1 15.156760359904628999 16.12228396585916812 11.325691646738302865 3.6987172948255571114 -0.42085808471975244549 -0.53397382411886151754 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1021 1 14.126739917482856512 17.182931155430463122 11.919451725220696403 1.4219982961787316356 -1.8853475821786196409 -1.482069016030921782 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1966 1 16.642063877451292342 15.704131864511261085 10.443609297139696324 0.89973758037686246691 -1.7664025034534784897 -0.65914365655991513648 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2730 1 13.754024123498155063 16.475523764337577148 10.570219557706474589 -1.3657657832813734355 0.15069887665286169076 0.13972223044374967871 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3220 1 15.156234401965720693 16.920388481743188436 12.386622750194696607 0.43395432524193733315 -0.12432368372878685459 2.1017403491241095637 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +370 1 14.054685841200015517 16.168553800543485011 11.538618640991124664 1.2808555119575950609 0.79741900908065488363 1.0362193361210207954 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2523 1 15.890130960245517855 15.508947864594690103 11.304779756555868531 -0.40197288914305528973 -0.3396132265095158087 0.22799870738073182985 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +686 1 14.623368368230204695 17.424631692942682548 10.526279733448347997 0.33806980240231243595 -2.6506732082963986308 -1.2228955994550885222 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3134 1 18.626057425835561787 15.662249682268289064 11.582161877567104469 -0.72835654440199537607 -0.52766443399861462371 -0.094210718959201647515 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +311 1 17.920938300329542159 16.630386939426085036 11.531768534905991075 -0.075452208919322943936 1.2746619723561296578 0.18439549878116379134 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +54 1 18.948199741592297585 16.821685395172025324 11.427492328027792468 0.085842490312252925366 -1.3486866966610648877 1.1902339866503948151 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2725 1 17.665275612772845193 15.716228250177175951 11.076782711450087859 -0.40859071286341053231 -1.8981103498433760102 0.097340178496607698833 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1183 1 16.907643368046255006 15.995304113223012266 11.950461041974746124 0.92446732599251857376 -0.18365380009763271341 -0.65087750572802960392 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3671 1 19.922822801472552356 17.275514414934889373 11.71188574744221178 0.39130829831606789293 0.073282041120663138356 0.47094913955172740261 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1394 1 19.263691528282574694 16.406609788002125327 10.346189366490047945 1.763411932348659894 1.8401215486409634448 -0.10006508850101056285 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2657 1 19.214771065870966282 17.466270967497365518 10.66746456744599314 0.44552288127261707729 1.2490894336336257897 0.12671962593512262063 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3541 1 19.76774327288873323 15.128926247140185524 11.016347948939614554 -1.3800906206665215503 2.1944642217488072866 -0.58842620876371498628 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1763 1 17.129945272936634382 15.04774780984370075 12.357123876179061384 -2.7504700339305103718 0.59337552440030527645 -2.2547494212850627271 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1507 1 18.673702297409842998 16.296813543044088135 12.456921106832643531 1.313503844767562212 0.0066521036362633297057 -1.5070709386754586045 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +859 1 15.886638492340196649 17.701632113488688702 11.403511012760626286 -0.60396495843055442165 2.126344307177172599 0.15628775703290925803 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1936 1 14.985469401711467796 19.810481215802798971 12.331925255838424249 -0.71929607414433305301 1.9808285105243614854 -0.43171477841964661648 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1651 1 15.886882625763936616 18.122627768153282801 12.299314009272523052 -1.498471016185660698 1.1669430319054501233 0.51990062033220163507 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +909 1 14.488854773485407179 18.950797015170188331 11.115957504591317928 0.49007370428926183559 -0.8811232195921745447 -1.1710117569797755532 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +26 1 14.83864354297993593 17.993017314806202478 11.455400333851999406 -0.015615626058076618674 -0.3520507586025880542 1.5742672482547512836 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2326 1 13.417895262965013004 19.265635046831977917 11.078887253476949581 -1.4492271349303915695 -0.097369164774226052428 -1.7980010112764177599 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +675 1 15.13597052191157033 18.47963293158025877 10.427078359784051287 -4.2543181672119319003 0.22747542195031558721 0.37662554937295594781 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1525 1 16.502433414917259569 19.58343013921591691 11.801033484676095142 0.36373395395593605128 0.76499495700729647218 -1.0270892069057406815 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +308 1 15.542745251589778377 18.901811290220585704 11.718371181169018769 3.1429839399679306844 0.31046512009659033016 -1.482101614999891348 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1260 1 13.623524012654300464 17.549275764591619975 10.933711694193185338 2.0604111071053394788 0.065035003976341113074 1.2959824350039459429 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +357 1 16.47431866079553231 18.236645976916008749 10.524638065921475771 -1.3173783282658482197 -1.42444413401017278 0.59221695064843715706 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2660 1 17.457860986162753392 19.169190374737848259 11.246128440979449081 2.1249996561162096675 1.2808387230358369013 -0.65198808703323096747 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +115 1 18.18221506266964127 17.518658516250489754 12.178927761664480656 1.5115364082064821627 -1.1287268420725566909 -0.73049908007380237596 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2314 1 18.186917208529365553 18.488413824301161981 10.529150640807333872 0.81915149098214579126 2.2431111666835468199 1.5849603784240871018 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1436 1 18.039641346907131947 19.887793137610657368 11.658575306975558661 -1.8540799616825407448 0.37042717381078038574 0.41042950328114352621 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2096 1 17.899684550738463429 19.544953740322092983 10.242362013567179346 -0.079152125057964511923 -1.1512657830242842838 -0.25962023184617138982 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2539 1 19.991381323397835246 19.231230124623923672 11.505456027269682195 0.36643020388564639944 0.13797627350495911269 0.79517369331797860266 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2227 1 19.057167923931448428 19.522527014324829508 10.25823316516966166 -1.9626066500186443164 2.7590932469603979271 -0.67830427088132527746 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3473 1 18.875270614439102701 18.97483504660018383 11.449901503524747781 -1.5544321190024206203 0.89786027249249444893 1.2873470115603937725 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +368 1 19.410934980428098839 19.389291315652148029 12.375144494494836778 0.66944363185124533544 0.047504686446146519863 -0.35157850207509944163 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3643 1 17.776101603208761759 17.567592153287918677 10.34812718267975562 -1.7888286999984832626 0.19682612206711910807 0.25866473314200960631 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3092 1 14.785019060242026612 11.152859712471789422 13.520305282320839169 -3.3626479599466221337 2.1519380712705844516 -1.3805781778574830465 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +217 1 14.131250322975255074 10.804383326635386808 14.948951887684598816 0.79975199596907176058 -0.77790877351993081845 1.6765681460485757359 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +907 1 14.186498470022417706 10.641855985829534958 12.543713356937916004 0.68251388488705466706 1.528224734195282819 1.0709838527575705758 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2857 1 15.449449439290074082 11.533672480018543283 14.42303864365385202 -1.2890067158545568393 -0.57229817364172719252 0.36065905419445992708 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2853 1 15.830150412557408401 10.750231894812314337 13.66164491500224365 0.9330876859241774568 -0.017660826489785456245 -1.4676534759402255492 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1993 1 15.538837745716081784 10.004979162878159471 14.884296775374577848 0.31542209879412358431 -0.99680005635457125113 -0.71919630917831323114 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1074 1 16.004378012140200838 12.476848428476820629 14.934314275611416889 -1.0399513878930561894 -0.29697171539279454411 -1.2594751718648602434 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2490 1 16.582156721742475014 10.508599198452568402 12.775646139258874712 2.6455837884486399503 0.89087609324950223222 -0.57160855746827654578 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1444 1 14.129466989750902428 12.110814325135788039 13.492480034732823313 -1.1027845616762690373 -0.32876695507331177293 -0.94496293317689072921 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +491 1 15.189410076912952974 10.13082250403234319 12.765576864380841826 -1.384566482118430919 -1.4197787443235239113 -1.3940784201919478313 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +383 1 14.823509371568626136 10.450127253363300284 14.241416880534757183 1.0345318002715835348 0.85146987140994789822 -2.1800464125614067434 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1891 1 14.31416764380605855 11.7820888111836517 14.783410840859577462 1.9200971063987104515 -2.3951509045089265371 -1.1763497970776051194 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +876 1 19.143495791317096888 10.107434049604583137 14.806093700187306084 0.3777396408022315466 2.3635849331571305854 1.5695246308723456163 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3367 1 17.782719495615253891 11.015023350140891623 13.583104977221042375 -0.3251507272616758204 0.56454195570503351576 0.47385639887149028082 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1704 1 16.914084444653646244 11.367301558684207663 14.057157712477099665 0.59090039439068720029 1.8069756021443872385 -0.084086070393032064096 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3291 1 19.183151898402517332 11.26074173130860423 13.31658167137041815 -1.229164925863788671 2.3827884519585240675 -1.533183200159519366 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +106 1 17.385014846136535027 12.365878636555928338 14.030459948673629 1.0852505296441343763 0.42693512505899100518 1.473447508336112266 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +961 1 18.386895825382090663 10.403717390573225643 12.819942899484090049 -0.13842388414700923516 0.088913570881997319728 -1.9247931147183567901 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2821 1 16.764648222881991302 12.22752784749752486 12.799243639780728543 0.37500590368786579365 -0.94967084397503043203 0.031237526099056688034 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2042 1 19.672919448195926861 10.163143663458281907 13.80798848461378725 -1.6945306822909715905 0.12088297471653154658 0.073234925169842882142 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +576 1 17.379886049983294782 11.147684470937234025 14.844558376793521859 0.75076886764573125266 -2.3404007032938825006 -0.23070012943344772594 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1179 1 19.601660881843443462 11.067200210156324047 14.97560511977322939 1.7617376489053215849 -0.62434593509129254763 -2.9521662742709913196 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2899 1 15.446351968549459244 13.811249256389764639 13.684959644032234749 -2.0136464770263633461 0.73929619348048047911 -1.7927549072334061364 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2845 1 13.9011296737207104 14.394673264324152839 14.064204257271260445 -1.6242519737870566576 1.3530394054973724494 0.25495658429577561233 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2739 1 15.36292814602435719 14.747587626251021931 14.263661772565184194 0.48730398721047535338 1.3161345855005259775 0.6577257483188813092 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1673 1 13.703575733760267497 12.658627118206061013 14.780087952457009237 -0.014823974301480144847 0.48972949379768720979 -0.53938156687510196985 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +530 1 14.958976354227106143 12.909857657446142554 13.563661284324943779 -1.3024227920497475353 -0.081922865223498855802 -0.52915052204497314836 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3761 1 13.528682314584294488 13.104684449751383468 13.812628127230979658 -0.71460481069824455247 0.24067552780554135605 -1.6875584265475882528 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +942 1 15.196029058584498372 13.734832995651204968 12.53927929659478302 -0.80729995983124769321 -1.0415776077805614097 -0.40285923363127335017 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +947 1 16.455956296803513794 13.829432136244244944 13.158768785513901278 2.3215289380905619332 0.92410914969238455718 -2.2834601900280868669 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2464 1 15.094260609265642614 14.939542653175132969 13.355681705566198048 0.10421695245224781023 0.37874629755244082485 2.0546614855183307213 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1960 1 14.24716984435110767 12.58238707509887 12.64224426081644026 0.56987433305575541098 -0.0025497227095804294965 -0.34152123855810490038 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1294 1 16.154877590435386736 13.623371738666847364 14.458141496376480717 -0.5724008547356248533 1.5957343905090450864 -0.66408754854337737061 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1723 1 14.199065064678174863 13.589254311974563905 14.508060302008635389 2.0839688764784729536 -0.46604854299604608903 1.3081629526950926401 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +613 1 18.264771588019726778 12.676769771298440403 12.92678623326950671 -1.0370506172023139513 -2.0322396894036884873 -0.0072041388465713231473 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +179 1 19.081058218712861674 12.962388426308770306 14.817805737835524127 -0.482564846571088224 -0.39602871350516644089 1.8550123757398000457 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2702 1 19.108369953429715338 13.005744509627005456 13.487877654835999763 -0.89236734672669870694 -0.53828626797779088875 -3.0288397464790279834 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1236 1 18.334127738297709698 14.92139266186978297 12.710129981871098437 0.63496076811308599375 0.42992153721480164119 0.47144423050718803347 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1351 1 17.367123044598962167 14.86014224312615184 13.892210532835974846 -1.0072642943437055685 -0.45087234478062859777 1.139683732579669817 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3056 1 19.165698547576521804 14.409033571890496717 13.398930213549304469 0.40770370044132875353 1.0159870217892776889 1.0369283916384561817 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1138 1 17.859862373421972137 13.429561391469810872 14.042139670594510292 -0.33715079783107415601 1.0002363474100091079 1.0202817988765180424 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +467 1 19.236996330259664489 13.89683716231890287 12.555149490603946916 0.0012763768221196220183 -1.9660466615982770122 1.1859243032281669983 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1073 1 15.606883168832165865 15.816290772233280393 14.557988910618393064 -1.5362240702442693241 3.5504564606892605738 0.36013645256933562999 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1928 1 16.298259150854626398 15.118252366595660519 13.219602510721745858 -0.2685692371965704428 -1.1681809378462226778 0.88190583575557190965 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1689 1 15.31307867252078303 15.730053302772061485 12.678712595263419871 0.65200439423227196656 -1.1531115280414894197 -1.3203170917448916466 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3297 1 13.958602899337760661 16.259208591806761035 14.364481675258240045 0.73087222875497659391 -1.3802157303144020339 1.278306828174616161 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3703 1 13.784866615012621338 16.683340104022896355 13.200926595443988276 -0.87148267200844153901 0.28186420836518522037 0.8213882856461433013 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1511 1 15.027585247331755269 16.457037157854895071 13.709739075997562807 0.35875183160115164949 0.053050907005921674187 0.75471779139642414247 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1688 1 14.35460319346355007 15.600223230227681981 12.971628996251219235 0.10407235674126771863 -0.33664024990337898524 0.58283147321733341784 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1588 1 15.781646593004079904 17.100234335645524197 14.422965488450243399 0.77361603835167302989 -0.01298246274840277395 1.5978387905718565154 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2941 1 14.42687246171736426 15.401591621315969149 14.062363821597424263 -2.341987324355722766 0.28036803442525526364 -1.0242179363051455709 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +288 1 16.054496449164066263 16.17830544752399291 13.165134046872188023 -1.3087801192607089185 0.25066034825343957992 0.41531723155568484041 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1878 1 14.431695527649399224 17.294608008818968869 14.461517434257663339 0.6582209387059095862 -1.3584624733374213168 1.7943237998009637924 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3164 1 17.279430463183050648 15.793976899227217814 14.169987123800106943 -0.21659387732721754882 -0.59374955743192781021 2.1575902899771128851 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3484 1 18.631556847960791146 15.760879254541441341 14.728903576690493438 2.7528019896621356288 2.6954656418572491283 1.702893363494319301 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +197 1 17.425867913010229415 15.748528941655008495 13.026094486639674841 1.3509852181365855639 1.2831645763027905716 -0.77015178283424845507 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3668 1 19.003196990863322924 15.950189105884044594 13.453556269291700787 0.16315367458558724389 -0.993661961836393548 -1.6354222083612939276 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1036 1 19.581030529770387716 17.395073501464676013 14.70974167296726165 -0.38975799645165726259 -0.72860523856523462527 -0.16480770324915741676 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +131 1 16.804147256530828969 17.155311038164377635 12.616340044445090385 -2.9912746851749263399 -0.12766594619920582088 -0.65214679662036378893 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1223 1 17.681597390196586161 16.904711457801852248 14.577975979409959706 -0.61199689020862335642 -0.62901185738711462569 2.4794528361824652585 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2046 1 18.738321432378590714 16.777795895902194445 13.859964651872827446 0.21833560684085187575 1.2177750381119600842 -0.64784880981880987871 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2216 1 19.846322378539237974 15.47335063733442162 12.543203312601942656 -0.63003957503389829142 -0.91540164826063197268 0.95374312927163396036 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1906 1 19.440425693956175479 16.743966828713649164 12.752522879100885334 1.0170297196620461389 -1.3583878837122820293 -1.2743492905591782272 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +654 1 19.799138358911317681 16.445505763985892145 14.986576116342474663 1.1663881893825465141 -0.19969246089405198741 -0.93922864477958178941 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3588 1 14.157866822961338471 17.790638064735919244 12.749547507052147566 -0.12317290756589693856 -0.80888466620307120092 0.77855315766687582801 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1814 1 16.475982225894775013 19.407865748384196536 13.651619611330971793 -1.8241542547949349817 1.6765834372244621253 -0.87035674092709225391 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3841 1 15.733605015764982937 18.738197452312089553 14.409528812202406556 -2.3353215956156390121 -1.0045271964556081734 0.86352486893785762589 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3251 1 16.499005143735875123 17.850645814412537504 13.250437074386958614 -1.5585617809413883084 -0.085352350249894598511 -0.39874359644819629134 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2206 1 15.376264566985364368 18.078845349733764891 13.683101968605477339 -1.7205636641711614665 1.8617475455323313493 -0.43428033755538136829 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2604 1 15.764773508070019759 18.885233336518691516 13.026597023265740205 1.5379814185919380431 -0.4658628123420975875 1.550243586265479534 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2027 1 13.990862885035612706 19.174023214195614173 14.072408959142386209 -2.0220020884441991527 0.18340048739625591789 -0.52104474855265536792 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +904 1 15.070128263564100735 17.886410710195381313 14.911629492718102341 -0.2667306713296731524 -0.36670601918008272069 -1.7729708016605649767 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1256 1 15.801095605322945659 19.741618714097931786 14.973306971194222825 0.52594939100041937508 -2.857461729580934584 -0.80300952082206167315 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +643 1 18.18427133768491899 17.877864780617205298 14.279296601675122602 -3.5756554267024314164 0.54233028838038543906 1.5502950004359952185 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +932 1 18.731136496789932977 19.893621717254806214 13.129249106968375216 -0.18954076559467392116 -0.83264527798788645629 0.72225182317188252323 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +504 1 17.283105228435189815 18.441476058459759457 13.218286276929450906 1.7752008829114658273 -2.2131416383578832452 0.080594779933173460451 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +51 1 17.414001582280839386 19.765128961067521374 12.778827189051634505 0.75568343094990730879 -0.12412664067354738096 -1.4827490897650752455 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1296 1 19.216606136834201379 17.735618951161104206 13.576268149577414235 -2.1733914902144619852 -0.45113422604110553493 -0.5888514639104033277 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3442 1 17.927100165854803038 18.904358147272173341 13.824538512463043105 1.1054723665510053365 1.7722481031273760177 -1.3905020518329973545 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +393 1 18.299278724229399273 17.762186523417863526 13.146043529615596412 -0.13648072987694093161 -1.6018962412072232926 1.7471400426422589724 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2987 1 16.693216390376850455 19.983181415995048269 14.512552230910245044 0.21131634003850199854 2.6096475048768934535 -0.29388773472342316628 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +849 1 17.046585861606956769 18.025229436985586773 14.185106935210788137 -1.2482306479971796431 -0.77718233752910681478 -1.1634305962999442752 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3836 1 18.786100811663160925 19.116742181411410684 14.231323830019187326 1.6208655660869539794 1.7809362646943240893 -1.5994507310059189464 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +58 1 19.108103496284389422 18.322940273433257374 12.515137768202171387 1.5257116670572143935 1.0640979751906731732 -1.5420881085640727459 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3275 1 17.920846344633122982 18.648633917281873806 12.502397625066832276 -1.2564635794211298503 0.47099258169428748211 1.4111646743523416081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1112 1 14.942316294623608997 11.122052899804046433 15.289751697602524061 -0.58947888155343630689 0.68129486181919074461 -0.28406120954294783454 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +615 1 15.104196300095091843 12.203511254449750822 16.991945114091098645 0.75328830065902774304 0.75322093803751721808 0.22858249791645082749 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2731 1 13.717422397291041847 10.850302156486209881 15.928459290539779047 1.6241429185292757253 1.4947549901814671802 0.99631176883834271507 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3221 1 15.049218631975202598 11.324921506540757576 16.368011389653172927 0.66924639505507388382 0.38451864001617980238 0.25550927884140239854 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3252 1 16.31439687134341554 10.420256519313333854 15.792237913524942883 0.32490589758546345456 -0.14122932375105876068 -1.7159375276981470027 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2928 1 13.485271271184579689 11.777445293974130536 15.309441820400792267 3.0592140177637672238 -0.35218642277549261355 -0.52073923072426453462 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2594 1 14.767339761057945324 10.363739099224417828 15.964222659938613447 0.57293140553951604765 0.11199555953791663632 1.6002814505907361209 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1558 1 13.766468299416162679 11.007717141856877774 16.998345405239646766 -0.27102138593838126512 0.97955198387862385534 -1.1963323465818282987 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2377 1 13.532671987779552936 12.278595778825136975 16.27389566301547319 -1.8157738778004788305 0.44001845748463075392 -0.5388146986798149074 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2516 1 16.325463482774832613 11.706678844631301928 16.805892385306865577 1.8655515744635740027 0.990623430898218027 1.3199407427648863766 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2388 1 17.393068696449976329 10.849994537781876502 17.300461231678056606 -0.7986776347973395529 0.63654124130434130979 -1.9979834351732665976 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3353 1 17.394763073762533168 10.207531425327523777 15.584370793535269328 1.7309079313115944831 0.33712018091405943077 1.1386626658870107054 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3224 1 18.569343045798536451 10.606646007113290864 16.370511956179587543 0.69030657274043583094 0.58505101259035507955 1.4320955406214481709 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +998 1 19.347119472374654237 10.222114778347442865 15.772903043764880948 -0.67943923553383156477 1.1196235124633442393 -3.2095572349309438032 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2369 1 17.871507433337395554 11.764496613290127414 16.872748612300952686 0.352352922799778423 -1.4778854949951991671 0.58568891711346582341 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2281 1 19.784839869739542451 11.538428341724918269 17.051572915137363395 -0.56744212926119974583 -1.1408787543420122468 -0.92601771960809520223 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1890 1 17.197367179772701462 11.432687123200452106 16.040280714470160461 0.38455493024974396477 1.3203227365818956951 0.32600431984236100114 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1509 1 19.48131318444263016 11.216753573797259236 16.020902105251131786 -0.37759096485055082537 -1.0788167165704245498 1.112799045213785698 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2843 1 19.486170897667911106 10.412518008741294295 17.14190520312456556 -0.44772020924967875777 -0.30668112812942421863 -0.50228127450067483473 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3004 1 18.224642313891294521 11.432649335875090912 15.526416413933281646 -0.23314738115812427832 1.1627420174963301047 1.4789738845442752524 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1709 1 18.67149986637658543 12.169048578075015499 16.156095961470803957 -1.405614193194134165 -1.3072700711027600562 0.60431622922032224299 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2450 1 17.204215741741158752 12.415414629236492416 15.032347790164138246 -3.2240241282023252012 0.38501082083751031471 -0.17245960973830321006 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3589 1 15.741310367160687989 14.325310185495713 16.385954736576586299 -2.7083185832746088373 1.7042598598494742568 -2.1543790735860048891 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2230 1 16.606480156060872133 13.063997757000210598 16.750735209272292536 1.3286190979317389349 -0.26245202060421934931 -0.32761626238628049901 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3273 1 14.845647846876181219 13.45986474263419197 16.197657941636489198 0.13240858849265485508 -0.77767790679224779726 -0.76470725989803500777 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +241 1 14.181257022670855861 14.621950675977656076 16.728867129982017303 1.7073432646231625487 -1.0182227694825582986 -0.66670347037710597782 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3678 1 15.431349853300980968 12.54184752245162926 15.91284853323987214 1.6932038024993936176 -0.23035882381088795823 0.24544452502700964125 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3109 1 14.17614961194548151 14.519320052481651473 15.568499830699289888 -1.4014255116981415572 -2.9717549892984460591 -0.326176462846116344 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1524 1 16.470107876517175782 14.52764479527271213 17.345855735829527333 1.0249900130669324927 -0.12211166544253565514 1.2928997130737509558 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +164 1 16.548954454590081298 14.804807100770062789 15.707297649759569325 -1.6469498016537185148 -1.2365025736994381678 0.12373273039525063688 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +242 1 14.368729478600641869 13.549530008036237305 17.471281269377364254 -2.6360841343142009663 0.66045767732077653722 -3.767212828831826954 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2937 1 18.603831047967329226 14.893179181600670447 16.041160901058621135 0.7578237629548040255 1.120013805812315244 -1.7325180622169873423 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +534 1 19.21849906171667044 14.413749475198496697 16.761549746632415037 2.1107788970827869868 0.94176018399431293826 -0.34664373402416870373 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2458 1 17.578838272400201248 12.640282008007490688 17.128669748401286199 1.7354127274840183137 1.9309406722675943602 0.14178096641861964722 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3959 1 19.766623774258192725 14.724114414137273954 16.039315133913842004 -1.731352659036687669 1.1050598258135877483 -1.3406530689682321089 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3736 1 18.219123595528319726 14.889605149325394251 15.12835177921216534 -0.38226846343521703186 -0.92152151585041930382 -1.8654538069624768681 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3813 1 18.584820812253170175 13.661124449717835461 16.788891701660428879 -0.56985156773417888765 0.66388204604020473187 -1.5925044253804707672 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +941 1 19.88712068095893315 13.886842769862379754 15.291032323015631533 0.43355918420530098478 0.8410305538739689668 -3.5558312448472984002 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2669 1 17.275702199691657768 13.798585033738870465 16.240736097361690327 -1.4160869992206239765 0.16117798308595890355 -0.60508832420544766961 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1267 1 17.785884125189173943 13.019866548699816633 15.981770706167198526 1.2653747514270312635 -0.61664520666134536864 -0.044854337527542129105 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +276 1 18.450957687582985045 13.778902586729355306 15.281809045721214346 -1.4909012649877877443 -1.3436100839809881347 1.1363478582692487784 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3857 1 17.005080668138756295 13.790054811248909417 15.066345377855313359 -1.9950392288613947311 -2.6576332110880427351 1.090370319746075678 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +187 1 17.774494760634098611 14.6534861734296733 16.498846755499432248 2.8352706366690383355 -0.52355828872457843559 -0.51815928494185747866 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1631 1 17.74285021328204337 14.074681369395849018 17.349107803508541537 -0.49505345542202505715 0.6856116132071555791 -0.79874462224200815097 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3699 1 13.714424403062173141 16.598002871268963787 15.399142351068421775 0.4212525298474487645 0.74658793193691797008 -1.4074099561555102333 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1879 1 13.891953549472615848 16.68159059283477319 16.605062124594404338 -1.7202148047093757111 0.33448398185213534806 1.604876629876946792 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3428 1 14.863178015663104148 16.641700082759541601 16.828668122151164255 -1.5012415461649302184 2.2089933059067727861 -2.0920412891950115331 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1582 1 15.924892632148623051 16.576861256527521959 15.726033789590980305 1.5864764759698277707 -2.7357027036273282583 0.43094673270258826436 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3949 1 16.635643880719470644 16.979245720649011275 16.620297411698299328 0.70625849060096534959 0.017243188059976724547 2.7927130019772170577 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3312 1 16.3103613905145437 15.788577482710971722 16.99758889824495256 0.6360004411184758677 1.2074126950730956764 0.018862704185847796456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1541 1 15.542239828667636203 15.39973712144656659 16.312414738173497852 1.4287106352006100352 0.61490873082596497756 1.2881766299984203084 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2241 1 15.18537406108799992 15.722567387308156839 17.234173214692830811 -2.2981197411360998473 -1.1867280249717022667 -0.94731071122514298732 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1475 1 18.811157395090944533 15.365960785543403944 17.019154682988610006 -0.91967501147209851364 1.9369302971616322306 0.95042656963273597359 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3760 1 17.096528104130207737 17.041857087398721404 15.581834590188424983 -0.33767092624924932576 0.63019116125102403458 1.9471843681315663677 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +809 1 17.733096900213890734 15.872204988044565255 15.551308637501675136 -2.1333347395572856975 -1.1916148944875104565 0.82505346794263523247 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +579 1 18.691052520636315393 16.408376306049355264 17.214319282253200072 1.429481540067653933 0.74164865294319926026 0.66910894774960172349 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +325 1 16.944976771285713113 15.80743347529730336 16.216447615300243257 -1.813593773099231532 -0.29073135131556149258 0.24330021351090161397 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2242 1 17.722370162011092276 17.489096812478347687 16.766885701297752576 2.4409810044241537774 -0.052965154650640264289 -0.81284501264082253957 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1142 1 18.148516053711997387 16.687463375023810386 16.133992752210712496 0.72053112117294382255 -0.8691461014427456222 -1.6249703408893898526 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3843 1 19.191122426402440482 16.694752196840468628 16.064136144985830867 0.42177154045324577458 -0.79778785846818733862 1.768537457477191932 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1577 1 18.648857828510056578 17.122169597062931956 15.182687263659161658 1.8052239742569207159 -1.8685884799567242798 0.69440213245242532469 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2270 1 19.837395913067123132 15.945794691130991794 16.893599397250728344 1.5031639263924372329 -1.6743918856771824455 -1.1830275915598300607 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2521 1 14.199194474985546321 17.867550242950457573 17.366796710873988019 -1.041262733513013572 -1.155678118450001568 0.07249071025123074441 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3934 1 15.135470745018642091 19.058908485017244772 15.358590618417789386 2.2111546420194434504 -0.60165186532251280216 0.052849565839305952253 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +509 1 13.362165978217301898 18.341917351247079893 16.275894903857466289 -1.8304454391063964547 0.91298802359533071105 0.0070402491192187305336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1521 1 16.564407680081011165 18.719976262912702225 17.038513956084308631 -1.0148007396762208643 0.71143161865972304181 -0.93055794985820072807 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2341 1 14.809291759988200354 18.837749658814139764 16.474192304795728603 -0.99877775186220674186 -1.8426890002812623681 -0.64785938877611071174 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1510 1 14.200498780904865725 19.480110502690301644 15.450725630601459315 1.0062323040232137306 -0.43169585311033104036 -0.29956705396623783955 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3525 1 16.23888278409584629 18.112563505235957706 15.05972719996550957 2.3142472886249234598 -2.4935159215394340215 -0.87292629259261911301 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2334 1 14.014127121109693164 18.210899132451320526 15.526515808696832011 0.044830517440120058736 -0.42655286511669793237 -1.0520630520564917543 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2144 1 15.170426162380385549 19.922493081939652626 15.976517526647651124 0.63449952808433041085 -0.58400068316283637593 -0.13084313296214020172 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1930 1 16.461895126369995523 19.152165148119575377 16.089838845572536741 -1.125820509857503593 -1.306721319214078969 -0.7803475017226497723 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2488 1 17.770070641555300028 17.707208726473460558 15.3255294245442375 -1.1904010341693296304 0.018064150055913726078 1.4787578260001359443 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +875 1 18.239873124865447096 19.913064017662495786 17.054190643512015413 1.1059798643112550565 0.21852355898555400615 -0.30672191703025425413 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1701 1 19.949994399364609166 17.639384002328672096 17.420448548182605464 1.2284555574589461902 -0.63778809357402854729 -0.6306113275481168845 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1068 1 18.631559274720615349 18.538310624789147596 16.462434830271270414 -1.6706097634869991886 1.1406936302631665026 1.1199914725281288064 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3270 1 17.700526607842402171 18.377380657787938389 17.253113260035654264 0.62909361028432775331 0.14567015556688497901 -1.3692433047510519373 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3845 1 18.171000943477235268 18.759136053761555019 15.37843706398439636 -0.37520455428770987938 -0.043124628567299830295 0.18201113971632093547 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1962 1 17.505405451834395336 19.311631618619841788 16.240383106966568505 2.2767998733789061028 -0.57471970284828610698 0.38508138060699059757 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1649 1 19.570004658326222824 18.88664955740282636 15.251200731243359954 -0.94103572598191498333 -0.13773237180556083259 -2.1927286340793803454 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +923 1 17.083972851314598529 18.34130239961293185 15.900142076888618803 0.62961944784046763868 -0.95683062505707117129 -0.39711247234793539684 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2810 1 18.600695318275942469 19.847758146974573634 16.196992107534125438 1.0806384264086215108 0.87194993958369992892 0.93963298828042252087 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3213 1 18.700949561058127557 17.838741855001217118 15.739054016566630168 -0.57446256138342610686 -0.78182457085534451391 -2.2804727833675748627 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +594 1 19.356776710450930068 19.652078289235141995 17.432115714843458676 0.34830114126978428679 -0.99219114142543618495 -0.57239118019481616262 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3346 1 18.947050088187424421 18.311497660424969069 17.41712764155037263 -0.387679055353698232 -0.30274282181644796008 -0.42981955136723648536 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +126 1 18.795861735171829565 17.560380855785446386 16.70746602950612214 -2.3434294842214034027 -0.099302431947305341842 2.0270318481850231329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +698 1 13.523745339029927592 12.264365226599057479 19.29125277326804877 -0.74599608144604279136 -0.65435145533353278324 0.21197456151848501071 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1435 1 16.645964725311490184 10.624690309759968088 19.547119994257482034 0.44358388464169651311 -0.28438347099009392283 -0.68348740103447602756 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +757 1 16.521757093587758902 11.028098550638656405 17.811341361146141082 1.976610418237882083 0.18607232608081003544 -1.7955409777834909768 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2597 1 14.513776940320523678 11.050000149795604187 18.260257490170896943 2.1873523929986320447 -1.2423322783784209733 -2.2301787793118084124 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3338 1 14.218562552720360515 10.230180540224244723 19.546105234336909717 0.76121487395411424615 1.2085693025267871814 0.23828726439804309711 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2370 1 16.112319343857144816 12.217206363388143586 19.529340567499076542 -1.2672390088905958194 0.92383988955409113153 -0.97077139213999874556 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +618 1 15.479235876694122709 10.908661160807291424 19.034896883476463358 -0.47104047153661471325 1.5217426675927581137 0.12251459268892612997 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3919 1 15.485114713028606204 10.382853043254925751 19.93777763206018605 -1.8952717767621889422 -1.0143358315388755209 0.83855915745405673611 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1485 1 13.931521224935151437 10.032078704330112728 18.502967320499664083 -0.17360449742167952114 -1.4227421091351857285 0.69080501176372577365 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1460 1 13.763676744796494944 11.887727454488551615 18.325532052015617523 -0.40761905922944619007 2.2090126913405687681 -0.35351073187018183797 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2486 1 13.354418840425793746 11.003356894412686273 17.857084796580082298 0.13150191215539758227 -2.1610752902793177732 -3.4083664452014073021 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +945 1 15.098758037229369933 11.230832300282637348 17.508752439647334853 -0.55784507839648234118 2.9400156328864817112 1.6838545478293249769 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3755 1 16.835930381012065737 11.789552724476058287 18.766794872585755627 -0.21790955616152316021 -1.259323875256943559 1.1185360384715345994 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +949 1 17.806245682195086744 11.421931642701826704 19.28518922535854685 0.02763537389578701528 -2.2515135360992237779 -0.2906646038832806922 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +702 1 18.65030177212363327 12.06807353246052017 18.482582112348353576 -0.74515045717173600259 2.6641979453657755883 0.49018463165532283332 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2546 1 18.866001055061385472 11.502055088961135709 17.598930690199768634 -0.54869415961795708903 -0.43168637457315389705 0.16922637775096679991 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1920 1 17.58008404727937446 12.454602772957482415 19.687599454999872961 1.7131829201623878234 0.8554761043567561396 0.52719641914713277764 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +127 1 17.91436653135352941 11.955858273331855912 17.870691289523666256 -2.6050563465086820081 -0.91763381963144918796 2.8976187615277524401 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3465 1 18.40711595766960329 10.971370652316517535 18.343689630632326271 1.1434107267565518651 0.88953704615374751263 0.63917066534645494702 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2818 1 19.429904384475626955 11.147605508280248543 19.062529465273691187 -0.17919886825935710251 -0.43479269094198652601 -0.75706535603678981605 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2471 1 17.036198266707611282 12.416363512969061489 17.949174467892373031 -1.0830500085627743356 -1.4863635424377832361 -0.27379936472631311029 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3545 1 15.130529498624913032 13.342156426429992777 18.332925521613724129 -0.69292315457575637261 3.2117700667231448008 0.28477321270785216356 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +494 1 16.17693016885648305 12.909030395799161894 18.842890200605612705 1.2020411025704531571 2.4869045531412337091 0.9432177168130280176 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2890 1 15.05209520531070666 13.759058537601005057 19.494557465230318627 1.2321849842306915601 1.626182972662382431 -0.29651132888603293214 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +101 1 14.583050428534289011 14.233464724168142013 18.493072267756833327 1.6834521929931769435 0.65370048824940074628 0.027656787225845795575 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3288 1 15.60419210462491435 12.816069974699878742 17.580596536258713769 0.048985776104777528639 1.684543552185047588 -0.033336027964317727079 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3799 1 14.169947338965711126 13.192260959247935403 18.961142841942155712 0.95587313881544200278 -2.6114048867362145145 0.90374923645812887951 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3625 1 19.542386420896335153 14.13582503463842599 17.735532429487214756 -2.346359291421578952 1.2844925786376280019 1.0369359712220658221 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3947 1 16.992172838385489086 14.015189731846573906 19.415010263386818679 0.18473011028405975087 -0.37590126661902345528 0.17712111511184092105 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3634 1 19.01067755690034744 14.359790007985376192 19.75009702292949143 -0.25480734803409449407 -0.98041510983559576609 -0.532428797278534649 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3274 1 17.376425030148670459 14.487267192047195152 18.397699154410283029 0.96869463939370104022 2.0262816664153264767 0.31292425637312132336 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +178 1 16.75235855709537347 13.752584638475269685 17.878408251572860621 0.059387270494268416809 0.11938818895580365076 -0.73210890714253484823 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3663 1 19.610541760933163147 12.953563110934410929 18.058055987130220643 -0.16959925361006028544 -1.6231048077191898571 -1.6912989510276974503 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1810 1 19.923017437084222792 14.269843046800950503 19.077463974925354506 1.0545399776703803241 -0.82699301097786803716 -1.4598977464639124602 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3774 1 19.267734685250605509 13.282982711697592038 19.093571143989322536 -0.51737616761406390875 0.47642703227131538712 1.8970431792853150732 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3741 1 18.557910857556667139 14.239677578854779583 18.833035753452126215 -1.0197232773066218225 0.73638721916419258573 -1.0937279728790236799 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2043 1 17.933982552480689066 14.673055074372802764 19.733803323076340774 -2.6748164902471924798 -0.1348538875399470649 -1.2246774851742086021 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2021 1 15.264901405828904757 16.099857512942062243 19.109191938222583218 3.9168772098536832615 -0.69519094314995255601 -0.48895309957783433807 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2932 1 14.462990382265733302 16.819688350708378977 19.650960256487778111 1.0448084707980109798 0.18663540616448404119 -0.83112130834016018088 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2316 1 13.919546481727007148 16.417880734306070423 17.714458896770615581 0.70575302979825937921 -2.0958169736047378429 -1.682833883291675825 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +674 1 14.019957966603818988 16.955938600774548064 18.7694053762040447 0.8030452905277034592 2.4698985391061887285 0.91213840970440385192 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +29 1 13.651293068075533554 16.183526516245244409 19.337606113021848842 0.39060503711080357681 0.62439046712966372876 -0.77517816673132855509 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +358 1 14.399506119304003704 15.503458911382965724 19.25412930413071777 2.4785461302714604237 0.74759606996260452583 -0.18107618417754248186 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2998 1 15.14501465810469405 17.413470567293050095 18.188029596912993924 0.32761100126591008452 0.27157358547486465383 -1.9369875926542905464 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2947 1 16.117265135552823807 15.542736077796831751 19.646454907974728599 -1.3576537339270329241 0.15777759527320650568 3.5665369286777721669 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3740 1 16.41814810055598528 17.03724592865423304 18.211055051313611131 0.52692232203926614442 -0.50341304246031270964 0.84461063370457090116 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2645 1 14.567498936373253215 15.944497367128063203 18.321909477164975755 0.23671306036371639325 1.5383961874150724469 0.71801839164284642081 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +188 1 13.721227907089561526 15.305128502364786058 17.884272956300083735 1.4617636675899337018 -0.90445922732355321649 -0.84503967502198340522 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2852 1 15.335042688172759284 17.214198095731799043 19.216126697300222048 1.8241729886342150646 -1.7962920578584256059 0.15437102371067246143 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1147 1 16.131161177923228678 15.114545964962513125 18.582698849378246564 1.0699473795040275181 2.8724669478699835778 -2.2074082761453639456 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1406 1 16.624787184138735796 15.96954022378999305 18.221812548181496538 -2.565065898385929799 -1.7304824465526789101 -0.67457685365080544138 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +770 1 19.187329245605347694 15.339924898957159272 19.069370220632158919 0.52637928865111027754 0.82233672797528423182 -0.29383006703827979633 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3613 1 17.743181851996467913 15.656471273837677671 17.599941490970959279 -1.5946014036451046092 -0.10480696501819711242 -1.4370037152244046208 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2634 1 19.700740348134569757 16.313691687847267531 19.195922804656831318 1.0101704148516394977 1.3029774293428886267 2.1564198388955482244 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2545 1 16.954611792861118857 16.732901364444700221 18.959461946572275792 0.49582803632480837441 -0.96135281747940581898 -1.6382668927586852003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +823 1 17.876088549738529565 17.484027371892143066 18.590705339447374911 -0.51263639876981137444 1.3394895297840434534 0.42126472029464451241 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1914 1 18.546569384606431896 16.288910904006794311 19.628339349399137603 1.0788922264801648065 2.9296566452161991734 -1.4990854877895307684 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1358 1 19.954445506540761102 15.257537934940948787 18.335255097590554385 -1.5914652697812834425 -2.1615397254968158336 0.36006522051517902971 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1116 1 18.708009522804335489 16.156925131728197442 18.249202930012721424 -0.038461779678586667519 -0.24691621433596475099 1.4393021885714334385 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2238 1 19.114872156352312516 17.042446535633473559 18.260629238678216524 -0.82100884754581582303 -2.5734628500718828015 -0.14533090072134050019 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +830 1 18.0930190287259407 15.279196176422626507 18.841872179823436539 -3.1039118384011361584 -1.9010884459696784088 -0.18372794361839780986 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1851 1 17.076178332664607495 15.494500922732196813 19.142121860033974201 -1.9420704200431337938 0.10092529368371104537 -0.40486804155791705773 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2212 1 17.502730298844010548 16.750470325686915629 17.710031445766698965 1.4695793177278517749 0.079531459564517084648 0.27966275112025024141 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1761 1 18.688741184739001255 17.272094473712840568 19.911575926264379888 -1.490361120952452989 1.2025230742674306583 -0.022204336186779020934 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3787 1 18.30737430228828444 17.335295096573922535 17.569427719447062941 -0.86259646029562986325 -1.5461765049856657228 0.79505102243697456377 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2029 1 18.612091526493074412 15.00189789699981624 18.078331451873538072 -0.086961864551779219368 0.75095609743072866404 -1.2843282133078968155 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1828 1 15.110803243885241542 18.787401548533470219 18.105463492349048948 -0.78382999408194875546 -0.4968948798165628844 0.36900786700418236608 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1528 1 16.579717335811793077 17.785181579288018128 19.672461332045081406 1.4394725370906833462 2.6253710828659087007 0.21163511278381569314 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +2446 1 15.591557428905757021 19.409854229853774399 19.622774748611742979 -0.072901286424842934308 2.0630423773780037777 2.279986204336635236 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +660 1 16.002170102821775544 19.420743812697836006 17.716831720722847621 -1.636421174780856358 -0.59853856693737339523 0.9642872850934335327 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1610 1 14.20821387406042291 19.628461610229788192 19.124006915791309069 -0.52446516016886424172 0.94933100525113556234 -2.2727821746765686228 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3315 1 13.89045752783752441 19.072233059160563329 17.512705903409159447 1.2534891817452260554 0.45642120307692018999 1.2717620356015340022 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1627 1 16.901060624419475431 17.946095146404363874 17.752980519528982484 -0.63755805680561505877 0.18361930188736491631 1.71808520988693747 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1770 1 19.184322599208126547 17.951561758780638201 18.966037248233480028 -0.048230357519545158373 0.68075370486970454564 3.111847013200145895 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +783 1 18.380746894451164053 18.70879433727814245 19.01815920469406862 0.20156024463083452303 1.8326495139066552031 2.2562113187659562641 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1963 1 17.682728710758084389 18.701031989302439484 18.212086173158830604 -0.51666736808149449356 -2.9069676243350559552 -2.0471550229099375606 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3409 1 19.986714804478705076 18.71982325166280603 17.93923287324937732 -0.088973053027599835474 0.79413186971536331438 0.40005729023602748518 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1418 1 17.207015200635900953 18.258677186212104004 19.076233018557790189 2.0457759460222422199 0.75883185701294841863 -0.80166214839307603501 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1801 1 17.211525881089084322 19.83461054817511382 19.351997490731132956 -0.74452541682854878058 1.2323765058734434952 -0.81574516539902997003 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +356 1 18.240956649901338693 19.625133109363833483 18.441954205902678865 0.16240436653927178834 -0.80961018930495054491 2.1365727000450762674 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1730 1 19.385482305601449582 19.483208713641190002 19.045783995254307541 0.64635148972832634495 -0.16067107356548659958 -1.0989160992119413329 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +3015 1 18.36684168641450654 19.740940959759335271 19.535702344558309562 0.93679633577557164248 1.1965098910527165454 -1.5611459870136727979 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 +1123 1 16.989299068753393129 19.209997826497840379 17.781963640797549431 1.3402425386981366984 0.63546502861624099001 0.405148665967848709 0.70710678118654757274 0.70710678118654757274 0 0 0 0 0 From 1b6d9e4c2a19e8a9edcd044d16ce3f9629bc7e28 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 22 Jun 2022 13:47:18 +0200 Subject: [PATCH 56/76] Consider sample in EPS only if enough particles --- src/plugins/ExtendedProfileSampling.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index a04803fe72..de3f31100f 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -671,7 +671,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); dof_total = (1 + dof_rot/3.0)*numMols; // ??? rot dof } - if (dof_total > 0) { + // Only consider sample if it is representative i.e. enough particles inside the bin (e.g. to have a temperature defined in the first place) + // Arbitrarily set to 10 particles () -> binwidth must not be too small + if (numMols >= 10) { const double rho = numMols / _slabVolume; const double ViX = virialVect_step[0].global.at(i); const double ViY = virialVect_step[1].global.at(i); From 1451948767aa4cc33c95d9e08964b3b75296fd68 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 22 Jun 2022 14:45:38 +0200 Subject: [PATCH 57/76] Add sampling of massflux and fix in force sampling --- src/plugins/ExtendedProfileSampling.cpp | 13 ++++++++++--- src/plugins/ExtendedProfileSampling.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index de3f31100f..04553cb05e 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -689,6 +689,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _temperature_accum.at(i) += temperature_step_global.at(i); _ekin_accum.at(i) += ekin2Trans_step.global.at(i) / numMols; _epot_accum.at(i) += epot_step.global.at(i) / numMols; + _massflux_accum.at(i) += rho * veloDrift_step_global[1].at(i); _pressure_accum.at(i) += rho * ( (ViX + ViY + ViZ)/(3.0*numMols) + temperature_step_global.at(i) ); // ??? Welche Temperature? Mit Drift? Statisch/dynamisch? _chemPot_accum.at(i) += chemPot_step.global.at(i); _countNTest_accum.at(i) += countNTest_step.global.at(i); @@ -702,9 +703,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _pressureVect_accum[0].at(i) += rho * ( ViX/numMols + Tx ); _pressureVect_accum[1].at(i) += rho * ( ViY/numMols + Ty ); _pressureVect_accum[2].at(i) += rho * ( ViZ/numMols + Tz ); - _forceVect_accum[0].at(i) += Fx; - _forceVect_accum[1].at(i) += Fy; - _forceVect_accum[2].at(i) += Fz; + _forceVect_accum[0].at(i) += Fx / numMols; + _forceVect_accum[1].at(i) += Fy / numMols; + _forceVect_accum[2].at(i) += Fz / numMols; _energyfluxVect_accum[0].at(i) += energyfluxVect_step[0].global.at(i) / _slabVolume; _energyfluxVect_accum[1].at(i) += energyfluxVect_step[1].global.at(i) / _slabVolume; _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / _slabVolume; @@ -747,6 +748,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, << setw(22) << "T[" << cid << "]" // Temperature without drift (i.e. "real" temperature) << setw(22) << "ekin[" << cid << "]" // Kinetic energy including drift << setw(22) << "epot[" << cid << "]" // Potential energy + << setw(22) << "jp_y[" << cid << "]" // Mass flux in y-direction << setw(22) << "p[" << cid << "]" // Pressure << setw(22) << "chemPot_res[" << cid << "]" // Chemical potential as known as mu_tilde (equals the ms2 value) << setw(22) << "numTest[" << cid << "]" // Number of inserted test particles per sample step @@ -778,6 +780,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, double T {0.0}; double ekin {0.0}; double epot {0.0}; + double jp_y {0.0}; double p {0.0}; double chemPot_res {0.0}; double numTest {0.0}; @@ -803,6 +806,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, T = _temperature_accum.at(i) /_countSamples.at(i); ekin = _ekin_accum.at(i) /_countSamples.at(i); epot = _epot_accum.at(i) /_countSamples.at(i); + jp_y = _massflux_accum.at(i) /_countSamples.at(i); p = _pressure_accum.at(i) /_countSamples.at(i); T_x = _temperatureVect_accum[0].at(i)/_countSamples.at(i); T_y = _temperatureVect_accum[1].at(i)/_countSamples.at(i); @@ -830,6 +834,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, << FORMAT_SCI_MAX_DIGITS << T << FORMAT_SCI_MAX_DIGITS << ekin << FORMAT_SCI_MAX_DIGITS << epot + << FORMAT_SCI_MAX_DIGITS << jp_y << FORMAT_SCI_MAX_DIGITS << p << FORMAT_SCI_MAX_DIGITS << chemPot_res << FORMAT_SCI_MAX_DIGITS << numTest @@ -953,6 +958,7 @@ void ExtendedProfileSampling::resizeVectors() { _temperature_accum.resize(_lenVector); _ekin_accum.resize(_lenVector); _epot_accum.resize(_lenVector); + _massflux_accum.resize(_lenVector); _pressure_accum.resize(_lenVector); _chemPot_accum.resize(_lenVector); _countNTest_accum.resize(_lenVector); @@ -1002,6 +1008,7 @@ void ExtendedProfileSampling::resetVectors() { std::fill(_temperature_accum.begin(), _temperature_accum.end(), 0.0f); std::fill(_ekin_accum.begin(), _ekin_accum.end(), 0.0f); std::fill(_epot_accum.begin(), _epot_accum.end(), 0.0f); + std::fill(_massflux_accum.begin(), _massflux_accum.end(), 0.0f); std::fill(_pressure_accum.begin(), _pressure_accum.end(), 0.0f); std::fill(_chemPot_accum.begin(), _chemPot_accum.end(), 0.0f); std::fill(_countNTest_accum.begin(), _countNTest_accum.end(), 0ul); diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index d23e6b11cf..f4c30a7b79 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -82,6 +82,7 @@ class ExtendedProfileSampling : public PluginBase { std::vector _temperature_accum; // Temperature (drift corrected) std::vector _ekin_accum; // Kinetic energy including drift std::vector _epot_accum; // Potential energy + std::vector _massflux_accum; // Mass flux in y-direction (=rho*v_y) std::vector _pressure_accum; // Pressure std::vector _chemPot_accum; // Chemical potential as sampled in ms2 (Widom insertion method) std::vector _countNTest_accum; // Number of inserted test particles for chem. pot. sampling From 28e571d0348dcf045736e97b8c6c7314dd612ca6 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 16 Aug 2022 14:31:24 +0200 Subject: [PATCH 58/76] Fixes in ESP, TemperatureControl and DriftControl --- src/plugins/ExtendedProfileSampling.cpp | 395 ++++++++++++------------ src/plugins/ExtendedProfileSampling.h | 13 +- src/plugins/NEMD/DriftCtrl.cpp | 17 +- src/plugins/NEMD/DriftCtrl.h | 2 + src/thermostats/TemperatureControl.cpp | 89 ++++-- src/thermostats/TemperatureControl.h | 2 + 6 files changed, 278 insertions(+), 240 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 04553cb05e..fcc82a9a68 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -85,6 +85,8 @@ void ExtendedProfileSampling::readXML(XMLfileUnits& xmlconfig) { } else { _cidsTest.push_back(1); // Default } + for(auto const& cid : _cidsTest) { strCids += std::to_string(cid) + ", "; } + strCids.erase(strCids.length()-2); // Remove last ", " std::string insMethod; if (_lattice) { @@ -145,18 +147,18 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, CommVar> numMolecules_step; - CommVar> ekin2_step; // Without drift energy - CommVar> ekin2Trans_step; // Including drift energy + CommVar> mass_step; + CommVar> ekin_step; // Including drift energy CommVar> epot_step; CommVar> chemPot_step; CommVar> countNTest_step; - std::array>, 3> ekin2Vect_step; + std::array>, 3> ekinVect_step; std::array>, 3> velocityVect_step; std::array>, 3> virialVect_step; std::array>, 3> forceVect_step; std::array>, 3> energyfluxVect_step; - std::array, 3> veloDrift_step_global; // Drift velocity per particle; global value as calculated with global values + std::array, 3> veloDrift_step_global; // Drift velocity std::vector temperature_step_global (_lenVector, 0.0); // Required for sampling of chem. pot. CommVar> hmDelta_step; @@ -231,27 +233,27 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } numMolecules_step.local.resize(_lenVector); - ekin2_step.local.resize(_lenVector); - ekin2Trans_step.local.resize(_lenVector); + mass_step.local.resize(_lenVector); + ekin_step.local.resize(_lenVector); epot_step.local.resize(_lenVector); chemPot_step.local.resize(_lenVector); countNTest_step.local.resize(_lenVector); numMolecules_step.global.resize(_lenVector); - ekin2_step.global.resize(_lenVector); - ekin2Trans_step.global.resize(_lenVector); + mass_step.global.resize(_lenVector); + ekin_step.global.resize(_lenVector); epot_step.global.resize(_lenVector); chemPot_step.global.resize(_lenVector); countNTest_step.global.resize(_lenVector); for (unsigned short d = 0; d < 3; d++) { - ekin2Vect_step.at(d).local.resize(_lenVector); + ekinVect_step.at(d).local.resize(_lenVector); velocityVect_step.at(d).local.resize(_lenVector); virialVect_step.at(d).local.resize(_lenVector); forceVect_step.at(d).local.resize(_lenVector); energyfluxVect_step.at(d).local.resize(_lenVector); - ekin2Vect_step.at(d).global.resize(_lenVector); + ekinVect_step.at(d).global.resize(_lenVector); velocityVect_step.at(d).global.resize(_lenVector); virialVect_step.at(d).global.resize(_lenVector); forceVect_step.at(d).global.resize(_lenVector); @@ -261,27 +263,27 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } std::fill(numMolecules_step.local.begin(), numMolecules_step.local.end(), 0ul); - std::fill(ekin2_step.local.begin(), ekin2_step.local.end(), 0.0f); - std::fill(ekin2Trans_step.local.begin(), ekin2Trans_step.local.end(), 0.0f); + std::fill(mass_step.local.begin(), mass_step.local.end(), 0.0f); + std::fill(ekin_step.local.begin(), ekin_step.local.end(), 0.0f); std::fill(epot_step.local.begin(), epot_step.local.end(), 0.0f); std::fill(chemPot_step.local.begin(), chemPot_step.local.end(), 0.0f); std::fill(countNTest_step.local.begin(), countNTest_step.local.end(), 0ul); std::fill(numMolecules_step.global.begin(), numMolecules_step.global.end(), 0ul); - std::fill(ekin2_step.global.begin(), ekin2_step.global.end(), 0.0f); - std::fill(ekin2Trans_step.global.begin(), ekin2Trans_step.global.end(), 0.0f); + std::fill(mass_step.global.begin(), mass_step.global.end(), 0.0f); + std::fill(ekin_step.global.begin(), ekin_step.global.end(), 0.0f); std::fill(epot_step.global.begin(), epot_step.global.end(), 0.0f); std::fill(chemPot_step.global.begin(), chemPot_step.global.end(), 0.0f); std::fill(countNTest_step.global.begin(), countNTest_step.global.end(), 0ul); for (unsigned short d = 0; d < 3; d++) { - std::fill(ekin2Vect_step.at(d).local.begin(), ekin2Vect_step.at(d).local.end(), 0.0f); + std::fill(ekinVect_step.at(d).local.begin(), ekinVect_step.at(d).local.end(), 0.0f); std::fill(velocityVect_step.at(d).local.begin(), velocityVect_step.at(d).local.end(), 0.0f); std::fill(virialVect_step.at(d).local.begin(), virialVect_step.at(d).local.end(), 0.0f); std::fill(forceVect_step.at(d).local.begin(), forceVect_step.at(d).local.end(), 0.0f); std::fill(energyfluxVect_step.at(d).local.begin(), energyfluxVect_step.at(d).local.end(), 0.0f); - std::fill(ekin2Vect_step.at(d).global.begin(), ekin2Vect_step.at(d).global.end(), 0.0f); + std::fill(ekinVect_step.at(d).global.begin(), ekinVect_step.at(d).global.end(), 0.0f); std::fill(velocityVect_step.at(d).global.begin(), velocityVect_step.at(d).global.end(), 0.0f); std::fill(virialVect_step.at(d).global.begin(), virialVect_step.at(d).global.end(), 0.0f); std::fill(forceVect_step.at(d).global.begin(), forceVect_step.at(d).global.end(), 0.0f); @@ -333,30 +335,26 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double ry = pit->r(1); const unsigned int index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin - const double veloCorrX = pit->v(0) - veloDrift_step_global[0].at(index); - const double veloCorrY = pit->v(1) - veloDrift_step_global[1].at(index); - const double veloCorrZ = pit->v(2) - veloDrift_step_global[2].at(index); - const double veloCorrSqrt = veloCorrX*veloCorrX + veloCorrY*veloCorrY + veloCorrZ*veloCorrZ; // Squared velocity of particle without drift const double veloX = pit->v(0); const double veloY = pit->v(1); const double veloZ = pit->v(2); const double mass = pit->mass(); const double epot = pit->U_pot(); - const double ekinX = mass * veloCorrX * veloCorrX + (pit->U_rot_2()/3.0); //??? Wie Rotation? - const double ekinY = mass * veloCorrY * veloCorrY + (pit->U_rot_2()/3.0); //??? Wie Rotation? - const double ekinZ = mass * veloCorrZ * veloCorrZ + (pit->U_rot_2()/3.0); //??? Wie Rotation? + const double ekinX2 = mass * veloX * veloX + (pit->U_rot_2()/3.0); + const double ekinY2 = mass * veloY * veloY + (pit->U_rot_2()/3.0); + const double ekinZ2 = mass * veloZ * veloZ + (pit->U_rot_2()/3.0); std::vector cids = {0}; // add quantities to "all components" (0) and respective component if (!_singleComp) { cids.push_back(pit->componentid() + 1); } for (unsigned int cid : cids) { const uint32_t indexCID = cid*_numBinsGlobal + index; - ekin2_step.local.at(indexCID) += ekinX + ekinY + ekinZ; - ekin2Trans_step.local.at(indexCID) += pit->U_kin(); + mass_step.local.at(indexCID) += pit->mass(); + ekin_step.local.at(indexCID) += pit->U_kin(); epot_step.local.at(indexCID) += epot; - ekin2Vect_step[0].local.at(indexCID) += ekinX; - ekin2Vect_step[1].local.at(indexCID) += ekinY; - ekin2Vect_step[2].local.at(indexCID) += ekinZ; + ekinVect_step[0].local.at(indexCID) += 0.5*ekinX2; + ekinVect_step[1].local.at(indexCID) += 0.5*ekinY2; + ekinVect_step[2].local.at(indexCID) += 0.5*ekinZ2; virialVect_step[0].local.at(indexCID) += pit->Vi(0); virialVect_step[1].local.at(indexCID) += pit->Vi(1); virialVect_step[2].local.at(indexCID) += pit->Vi(2); @@ -366,7 +364,12 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, energyfluxVect_step[0].local.at(indexCID) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); + if (_sampleHigherMoms) { + const double veloCorrX = veloX - veloDrift_step_global[0].at(index); + const double veloCorrY = veloY - veloDrift_step_global[1].at(index); + const double veloCorrZ = veloZ - veloDrift_step_global[2].at(index); + const double veloCorrSqrt = veloCorrX*veloCorrX + veloCorrY*veloCorrY + veloCorrZ*veloCorrZ; // Squared velocity of particle without drift const std::array velos = {veloCorrX, veloCorrY, veloCorrZ}; hmDelta_step.local.at(indexCID) += veloCorrSqrt*veloCorrSqrt; @@ -434,42 +437,30 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } } - // Calculate temperature (without drift) per bin over all processes -#ifdef ENABLE_MPI - MPI_Allreduce(ekin2_step.local.data(), ekin2_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); -#else - for (unsigned long i = 0; i < _lenVector; i++) { - ekin2_step.global.at(i) = ekin2_step.local.at(i); - } -#endif - - for (unsigned long i = 0; i < _lenVector; i++) { - const unsigned long numMols = numMolecules_step.global.at(i); - unsigned int dof_total {0}; - if (!_singleComp) { - const unsigned int cid = i/_numBinsGlobal; - if (cid == 0) { - for (unsigned long cj = 0; cj < _numComps; cj++) { - const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); - dof_total += (3 + dof_rot)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); - } - } else { - const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); - dof_total = (3 + dof_rot)*numMols; + // Calculate chemical potential + // if sampling of chem. pot. is activated + if (_sampleChemPot and + // only conducted every _samplefrequency step + ((simstep - _startSampling) % _samplefrequency == 0 ) and + // only in second half of sampling interval in order to be able to calculate a correct temperature + ((simstep - _startSampling) % _writeFrequency > 0.5*_writeFrequency)) { + + // Root calculates temperature (without drift) per bin over all processes in second half of sampling interval for chem. pot. sampling + // and propagates it to other processes + if (domainDecomp->getRank() == 0) { + for (unsigned long index = 0; index < _lenVector; index++) { + const double v_x = _velocityVect_accum[0].at(index) / _countSamples.at(index); + const double v_y = _velocityVect_accum[1].at(index) / _countSamples.at(index); + const double v_z = _velocityVect_accum[2].at(index) / _countSamples.at(index); + double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; + temperature_step_global.at(index) = (2*_ekin_accum.at(index) - v_drift_sqr*_mass_accum.at(index)) / _doftotal_accum.at(index); } - } else { - // For single component sampling, the rot. DOF of component 0 is taken - const unsigned int dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); - dof_total = (3 + dof_rot)*numMols; // ??? rot dof - } - if (dof_total > 0ul) { - temperature_step_global.at(i) = ekin2_step.global.at(i) / dof_total; } - } - +#ifdef ENABLE_MPI + MPI_Bcast(temperature_step_global.data(), _lenVector, MPI_DOUBLE, 0, MPI_COMM_WORLD); + MPI_Barrier(MPI_COMM_WORLD); +#endif - // Calculate chemical potential - if (_sampleChemPot and ((simstep - _startSampling) % _samplefrequency == 0 )) { // Calculate number of test particles per bin std::vector dX(_numBinsGlobal, 0.0); std::vector dY(_numBinsGlobal, 0.0); @@ -520,17 +511,20 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, + _simulation.getLongRangeCorrection()->getUpotCorr(&_mTest); double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); // Global temperature of all components if (std::isfinite(chemPot)) { - chemPot_step.local.at(indexCID) += chemPot; - countNTest_step.local.at(indexCID)++; // For component 0 (single component) chemPot_step.local.at(index) += chemPot; countNTest_step.local.at(index)++; - #ifndef NDEBUG + // Also add to specific component record if no single-component-sampling + if (!_singleComp) { + chemPot_step.local.at(indexCID) += chemPot; + countNTest_step.local.at(indexCID)++; + } +#ifndef NDEBUG std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) << " ; cid = " << _mTest.componentid() << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; - #endif +#endif } } } @@ -565,17 +559,20 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, + _simulation.getLongRangeCorrection()->getUpotCorr(&_mTest); double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); if (std::isfinite(chemPot)) { - chemPot_step.local.at(indexCID) += chemPot; - countNTest_step.local.at(indexCID)++; // For component 0 (single component) chemPot_step.local.at(index) += chemPot; countNTest_step.local.at(index)++; - #ifndef NDEBUG + // Also add to specific component record if no single-component-sampling + if (!_singleComp) { + chemPot_step.local.at(indexCID) += chemPot; + countNTest_step.local.at(indexCID)++; + } +#ifndef NDEBUG std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) << " ; cid = " << _mTest.componentid() << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; - #endif +#endif } } } @@ -585,7 +582,8 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // Gather quantities of all processes. Note: MPI_Reduce instead of MPI_Allreduce! #ifdef ENABLE_MPI - MPI_Reduce(ekin2Trans_step.local.data(), ekin2Trans_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(mass_step.local.data(), mass_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(ekin_step.local.data(), ekin_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(epot_step.local.data(), epot_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[0].local.data(), virialVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[1].local.data(), virialVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); @@ -593,9 +591,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, MPI_Reduce(forceVect_step[0].local.data(), forceVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(forceVect_step[1].local.data(), forceVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(forceVect_step[2].local.data(), forceVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(ekin2Vect_step[0].local.data(), ekin2Vect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(ekin2Vect_step[1].local.data(), ekin2Vect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(ekin2Vect_step[2].local.data(), ekin2Vect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(ekinVect_step[0].local.data(), ekinVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(ekinVect_step[1].local.data(), ekinVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(ekinVect_step[2].local.data(), ekinVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(energyfluxVect_step[0].local.data(), energyfluxVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(energyfluxVect_step[1].local.data(), energyfluxVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(energyfluxVect_step[2].local.data(), energyfluxVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); @@ -616,7 +614,8 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } #else for (unsigned long i = 0; i < _lenVector; i++) { - ekin2Trans_step.global.at(i) = ekin2Trans_step.local.at(i); + mass_step.global.at(i) = mass_step.local.at(i); + ekin_step.global.at(i) = ekin_step.local.at(i); epot_step.global.at(i) = epot_step.local.at(i); virialVect_step[0].global.at(i) = virialVect_step[0].local.at(i); virialVect_step[1].global.at(i) = virialVect_step[1].local.at(i); @@ -624,9 +623,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, forceVect_step[0].global.at(i) = forceVect_step[0].local.at(i); forceVect_step[1].global.at(i) = forceVect_step[1].local.at(i); forceVect_step[2].global.at(i) = forceVect_step[2].local.at(i); - ekin2Vect_step[0].global.at(i) = ekin2Vect_step[0].local.at(i); - ekin2Vect_step[1].global.at(i) = ekin2Vect_step[1].local.at(i); - ekin2Vect_step[2].global.at(i) = ekin2Vect_step[2].local.at(i); + ekinVect_step[0].global.at(i) = ekinVect_step[0].local.at(i); + ekinVect_step[1].global.at(i) = ekinVect_step[1].local.at(i); + ekinVect_step[2].global.at(i) = ekinVect_step[2].local.at(i); energyfluxVect_step[0].global.at(i) = energyfluxVect_step[0].local.at(i); energyfluxVect_step[1].global.at(i) = energyfluxVect_step[1].local.at(i); energyfluxVect_step[2].global.at(i) = energyfluxVect_step[2].local.at(i); @@ -660,70 +659,60 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, if (cid == 0) { for (unsigned long cj = 0; cj < _numComps; cj++) { dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); - dof_total += (1 + dof_rot/3.0)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); // ??? rot dof + dof_total += (3 + dof_rot)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); } } else { dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); - dof_total = (1 + dof_rot/3.0)*numMols; // ??? rot dof + dof_total = (3 + dof_rot)*numMols; } } else { // For single component sampling, the rot. DOF of component 0 is taken dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); - dof_total = (1 + dof_rot/3.0)*numMols; // ??? rot dof + dof_total = (3 + dof_rot)*numMols; } - // Only consider sample if it is representative i.e. enough particles inside the bin (e.g. to have a temperature defined in the first place) - // Arbitrarily set to 10 particles () -> binwidth must not be too small - if (numMols >= 10) { - const double rho = numMols / _slabVolume; - const double ViX = virialVect_step[0].global.at(i); - const double ViY = virialVect_step[1].global.at(i); - const double ViZ = virialVect_step[2].global.at(i); - const double Fx = forceVect_step[0].global.at(i); - const double Fy = forceVect_step[1].global.at(i); - const double Fz = forceVect_step[2].global.at(i); - const double Tx = ekin2Vect_step[0].global.at(i) / dof_total; - const double Ty = ekin2Vect_step[1].global.at(i) / dof_total; - const double Tz = ekin2Vect_step[2].global.at(i) / dof_total; - _numMolecules_accum.at(i) += numMolecules_step.global.at(i); - _density_accum.at(i) += rho; - _temperature_accum.at(i) += temperature_step_global.at(i); - _ekin_accum.at(i) += ekin2Trans_step.global.at(i) / numMols; - _epot_accum.at(i) += epot_step.global.at(i) / numMols; - _massflux_accum.at(i) += rho * veloDrift_step_global[1].at(i); - _pressure_accum.at(i) += rho * ( (ViX + ViY + ViZ)/(3.0*numMols) + temperature_step_global.at(i) ); // ??? Welche Temperature? Mit Drift? Statisch/dynamisch? - _chemPot_accum.at(i) += chemPot_step.global.at(i); - _countNTest_accum.at(i) += countNTest_step.global.at(i); - - _temperatureVect_accum[0].at(i) += Tx; - _temperatureVect_accum[1].at(i) += Ty; - _temperatureVect_accum[2].at(i) += Tz; - _velocityVect_accum[0].at(i) += veloDrift_step_global[0].at(i); - _velocityVect_accum[1].at(i) += veloDrift_step_global[1].at(i); - _velocityVect_accum[2].at(i) += veloDrift_step_global[2].at(i); - _pressureVect_accum[0].at(i) += rho * ( ViX/numMols + Tx ); - _pressureVect_accum[1].at(i) += rho * ( ViY/numMols + Ty ); - _pressureVect_accum[2].at(i) += rho * ( ViZ/numMols + Tz ); - _forceVect_accum[0].at(i) += Fx / numMols; - _forceVect_accum[1].at(i) += Fy / numMols; - _forceVect_accum[2].at(i) += Fz / numMols; - _energyfluxVect_accum[0].at(i) += energyfluxVect_step[0].global.at(i) / _slabVolume; - _energyfluxVect_accum[1].at(i) += energyfluxVect_step[1].global.at(i) / _slabVolume; - _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / _slabVolume; - - _countSamples.at(i)++; - - if (_sampleHigherMoms) { - _hmDelta_accum.at(i) += hmDelta_step.global.at(i) / _slabVolume; - for (unsigned short d = 0; d < 3; d++) { - _hmHeatflux_accum[d].at(i) += hmHeatflux_step[d].global.at(i) / _slabVolume; - } - for (unsigned short d = 0; d < 9; d++) { - _hmPressure_accum[d].at(i) += hmPressure_step[d].global.at(i) / _slabVolume; - _hmR_accum[d].at(i) += hmR_step[d].global.at(i) / _slabVolume; - _hmM_accum[d].at(i) += hmM_step[d].global.at(i) / _slabVolume; - _hmM_accum[d+9u].at(i) += hmM_step[d+9u].global.at(i) / _slabVolume; - _hmM_accum[d+18u].at(i) += hmM_step[d+18u].global.at(i) / _slabVolume; - } + + const double ViX = virialVect_step[0].global.at(i); + const double ViY = virialVect_step[1].global.at(i); + const double ViZ = virialVect_step[2].global.at(i); + + _doftotal_accum.at(i) += dof_total; + _numMolecules_accum.at(i) += numMols; + _mass_accum.at(i) += mass_step.global.at(i); + _ekin_accum.at(i) += ekin_step.global.at(i); + _epot_accum.at(i) += epot_step.global.at(i); + _virial_accum.at(i) += ViX + ViY + ViZ; + _chemPot_accum.at(i) += chemPot_step.global.at(i); + _countNTest_accum.at(i) += countNTest_step.global.at(i); + + _ekinVect_accum[0].at(i) += ekinVect_step[0].global.at(i); + _ekinVect_accum[1].at(i) += ekinVect_step[1].global.at(i); + _ekinVect_accum[2].at(i) += ekinVect_step[2].global.at(i); + _velocityVect_accum[0].at(i) += veloDrift_step_global[0].at(i); + _velocityVect_accum[1].at(i) += veloDrift_step_global[1].at(i); + _velocityVect_accum[2].at(i) += veloDrift_step_global[2].at(i); + _virialVect_accum[0].at(i) += ViX; + _virialVect_accum[1].at(i) += ViY; + _virialVect_accum[2].at(i) += ViZ; + _forceVect_accum[0].at(i) += forceVect_step[0].global.at(i); + _forceVect_accum[1].at(i) += forceVect_step[1].global.at(i); + _forceVect_accum[2].at(i) += forceVect_step[2].global.at(i); + _energyfluxVect_accum[0].at(i) += energyfluxVect_step[0].global.at(i) / _slabVolume; + _energyfluxVect_accum[1].at(i) += energyfluxVect_step[1].global.at(i) / _slabVolume; + _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / _slabVolume; + + _countSamples.at(i)++; + + if (_sampleHigherMoms) { + _hmDelta_accum.at(i) += hmDelta_step.global.at(i) / _slabVolume; + for (unsigned short d = 0; d < 3; d++) { + _hmHeatflux_accum[d].at(i) += hmHeatflux_step[d].global.at(i) / _slabVolume; + } + for (unsigned short d = 0; d < 9; d++) { + _hmPressure_accum[d].at(i) += hmPressure_step[d].global.at(i) / _slabVolume; + _hmR_accum[d].at(i) += hmR_step[d].global.at(i) / _slabVolume; + _hmM_accum[d].at(i) += hmM_step[d].global.at(i) / _slabVolume; + _hmM_accum[d+9u].at(i) += hmM_step[d+9u].global.at(i) / _slabVolume; + _hmM_accum[d+18u].at(i) += hmM_step[d+18u].global.at(i) / _slabVolume; } } } @@ -748,7 +737,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, << setw(22) << "T[" << cid << "]" // Temperature without drift (i.e. "real" temperature) << setw(22) << "ekin[" << cid << "]" // Kinetic energy including drift << setw(22) << "epot[" << cid << "]" // Potential energy - << setw(22) << "jp_y[" << cid << "]" // Mass flux in y-direction << setw(22) << "p[" << cid << "]" // Pressure << setw(22) << "chemPot_res[" << cid << "]" // Chemical potential as known as mu_tilde (equals the ms2 value) << setw(22) << "numTest[" << cid << "]" // Number of inserted test particles per sample step @@ -775,66 +763,71 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs << FORMAT_SCI_MAX_DIGITS << (idx+0.5)*_binwidth; for (unsigned long cid = 0; cid < numOutputs; cid++) { unsigned long i = idx + cid*_numBinsGlobal; - double numMolsPerStep {0.0}; // Not an int as particles change bin during simulation - double rho {0.0}; - double T {0.0}; - double ekin {0.0}; - double epot {0.0}; - double jp_y {0.0}; - double p {0.0}; - double chemPot_res {0.0}; - double numTest {0.0}; - double T_x {0.0}; - double T_y {0.0}; - double T_z {0.0}; - double v_x {0.0}; - double v_y {0.0}; - double v_z {0.0}; - double p_x {0.0}; - double p_y {0.0}; - double p_z {0.0}; - double F_x {0.0}; - double F_y {0.0}; - double F_z {0.0}; - double jEF_x {0.0}; - double jEF_y {0.0}; - double jEF_z {0.0}; - double numSamples {0.0}; - if (_countSamples.at(i) > 0ul) { - numMolsPerStep = static_cast(_numMolecules_accum.at(i))/_countSamples.at(i); - rho = _density_accum.at(i) /_countSamples.at(i); - T = _temperature_accum.at(i) /_countSamples.at(i); - ekin = _ekin_accum.at(i) /_countSamples.at(i); - epot = _epot_accum.at(i) /_countSamples.at(i); - jp_y = _massflux_accum.at(i) /_countSamples.at(i); - p = _pressure_accum.at(i) /_countSamples.at(i); - T_x = _temperatureVect_accum[0].at(i)/_countSamples.at(i); - T_y = _temperatureVect_accum[1].at(i)/_countSamples.at(i); - T_z = _temperatureVect_accum[2].at(i)/_countSamples.at(i); - v_x = _velocityVect_accum[0].at(i) /_countSamples.at(i); - v_y = _velocityVect_accum[1].at(i) /_countSamples.at(i); - v_z = _velocityVect_accum[2].at(i) /_countSamples.at(i); - p_x = _pressureVect_accum[0].at(i) /_countSamples.at(i); - p_y = _pressureVect_accum[1].at(i) /_countSamples.at(i); - p_z = _pressureVect_accum[2].at(i) /_countSamples.at(i); - F_x = _forceVect_accum[0].at(i) /_countSamples.at(i); - F_y = _forceVect_accum[1].at(i) /_countSamples.at(i); - F_z = _forceVect_accum[2].at(i) /_countSamples.at(i); - jEF_x = _energyfluxVect_accum[0].at(i) /_countSamples.at(i); - jEF_y = _energyfluxVect_accum[1].at(i) /_countSamples.at(i); - jEF_z = _energyfluxVect_accum[2].at(i) /_countSamples.at(i); - numSamples = _countSamples.at(i); + double numMolsPerStep {std::nan("0")}; // Not an int as particles change bin during simulation + double rho {std::nan("0")}; + double T {std::nan("0")}; + double ekin {std::nan("0")}; + double epot {std::nan("0")}; + double p {std::nan("0")}; + double chemPot_res {std::nan("0")}; + double numTest {std::nan("0")}; + double T_x {std::nan("0")}; + double T_y {std::nan("0")}; + double T_z {std::nan("0")}; + double v_x {std::nan("0")}; + double v_y {std::nan("0")}; + double v_z {std::nan("0")}; + double p_x {std::nan("0")}; + double p_y {std::nan("0")}; + double p_z {std::nan("0")}; + double F_x {std::nan("0")}; + double F_y {std::nan("0")}; + double F_z {std::nan("0")}; + double jEF_x {std::nan("0")}; + double jEF_y {std::nan("0")}; + double jEF_z {std::nan("0")}; + double numSamples {std::nan("0")}; + if ((_countSamples.at(i) > 0ul) and (_doftotal_accum.at(i)) > 0ul) { + const unsigned long countSamples = _countSamples.at(i); + const double numMols_accum = static_cast(_numMolecules_accum.at(i)); + + numMolsPerStep = numMols_accum/countSamples; + rho = numMolsPerStep / _slabVolume; + v_x = _velocityVect_accum[0].at(i) / countSamples; + v_y = _velocityVect_accum[1].at(i) / countSamples; + v_z = _velocityVect_accum[2].at(i) / countSamples; + + double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; + + T = (2*_ekin_accum.at(i) - v_drift_sqr*_mass_accum.at(i)) / _doftotal_accum.at(i); + ekin = _ekin_accum.at(i) / numMols_accum; + epot = _epot_accum.at(i) / numMols_accum; + p = rho * ( (_virial_accum.at(i))/(3.0*numMols_accum) + T); + + T_x = 3*(2*_ekinVect_accum[0].at(i) - (v_x*v_x)*numMols_accum) / _doftotal_accum.at(i); + T_y = 3*(2*_ekinVect_accum[1].at(i) - (v_y*v_y)*numMols_accum) / _doftotal_accum.at(i); + T_z = 3*(2*_ekinVect_accum[2].at(i) - (v_z*v_z)*numMols_accum) / _doftotal_accum.at(i); + p_x = rho * ( _virialVect_accum[0].at(i)/numMols_accum + T); + p_y = rho * ( _virialVect_accum[1].at(i)/numMols_accum + T); + p_z = rho * ( _virialVect_accum[2].at(i)/numMols_accum + T); + F_x = _forceVect_accum[0].at(i) / numMols_accum; + F_y = _forceVect_accum[1].at(i) / numMols_accum; + F_z = _forceVect_accum[2].at(i) / numMols_accum; + jEF_x = _energyfluxVect_accum[0].at(i) / countSamples; + jEF_y = _energyfluxVect_accum[1].at(i) / countSamples; + jEF_z = _energyfluxVect_accum[2].at(i) / countSamples; + + numSamples = countSamples; } if ((_chemPot_accum.at(i) > 0.0) and (_countNTest_accum.at(i) > 0ul)) { - numTest = static_cast(_countNTest_accum.at(i)*_samplefrequency) / _writeFrequency; - chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); + numTest = static_cast(_countNTest_accum.at(i)*_samplefrequency) / (2*_writeFrequency); + chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); // Implemented in accordance to ms2 } ofs << FORMAT_SCI_MAX_DIGITS << numMolsPerStep << FORMAT_SCI_MAX_DIGITS << rho << FORMAT_SCI_MAX_DIGITS << T << FORMAT_SCI_MAX_DIGITS << ekin << FORMAT_SCI_MAX_DIGITS << epot - << FORMAT_SCI_MAX_DIGITS << jp_y << FORMAT_SCI_MAX_DIGITS << p << FORMAT_SCI_MAX_DIGITS << chemPot_res << FORMAT_SCI_MAX_DIGITS << numTest @@ -954,19 +947,18 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, void ExtendedProfileSampling::resizeVectors() { _numMolecules_accum.resize(_lenVector); - _density_accum.resize(_lenVector); - _temperature_accum.resize(_lenVector); + _doftotal_accum.resize(_lenVector); + _mass_accum.resize(_lenVector); _ekin_accum.resize(_lenVector); _epot_accum.resize(_lenVector); - _massflux_accum.resize(_lenVector); - _pressure_accum.resize(_lenVector); + _virial_accum.resize(_lenVector); _chemPot_accum.resize(_lenVector); _countNTest_accum.resize(_lenVector); for (unsigned short d = 0; d < 3; d++) { - _temperatureVect_accum.at(d).resize(_lenVector); + _ekinVect_accum.at(d).resize(_lenVector); _velocityVect_accum.at(d).resize(_lenVector); - _pressureVect_accum.at(d).resize(_lenVector); + _virialVect_accum.at(d).resize(_lenVector); _forceVect_accum.at(d).resize(_lenVector); _energyfluxVect_accum.at(d).resize(_lenVector); } @@ -1004,19 +996,18 @@ void ExtendedProfileSampling::resizeVectors() { // Fill vectors with zeros void ExtendedProfileSampling::resetVectors() { std::fill(_numMolecules_accum.begin(), _numMolecules_accum.end(), 0ul); - std::fill(_density_accum.begin(), _density_accum.end(), 0.0f); - std::fill(_temperature_accum.begin(), _temperature_accum.end(), 0.0f); + std::fill(_doftotal_accum.begin(), _doftotal_accum.end(), 0ul); + std::fill(_mass_accum.begin(), _mass_accum.end(), 0.0f); std::fill(_ekin_accum.begin(), _ekin_accum.end(), 0.0f); std::fill(_epot_accum.begin(), _epot_accum.end(), 0.0f); - std::fill(_massflux_accum.begin(), _massflux_accum.end(), 0.0f); - std::fill(_pressure_accum.begin(), _pressure_accum.end(), 0.0f); + std::fill(_virial_accum.begin(), _virial_accum.end(), 0.0f); std::fill(_chemPot_accum.begin(), _chemPot_accum.end(), 0.0f); std::fill(_countNTest_accum.begin(), _countNTest_accum.end(), 0ul); for (unsigned short d = 0; d < 3; d++) { - std::fill(_temperatureVect_accum.at(d).begin(), _temperatureVect_accum.at(d).end(), 0.0f); + std::fill(_ekinVect_accum.at(d).begin(), _ekinVect_accum.at(d).end(), 0.0f); std::fill(_velocityVect_accum.at(d).begin(), _velocityVect_accum.at(d).end(), 0.0f); - std::fill(_pressureVect_accum.at(d).begin(), _pressureVect_accum.at(d).end(), 0.0f); + std::fill(_virialVect_accum.at(d).begin(), _virialVect_accum.at(d).end(), 0.0f); std::fill(_forceVect_accum.at(d).begin(), _forceVect_accum.at(d).end(), 0.0f); std::fill(_energyfluxVect_accum.at(d).begin(), _energyfluxVect_accum.at(d).end(), 0.0f); } @@ -1056,9 +1047,13 @@ double ExtendedProfileSampling::getQuantity(DomainDecompBase* domainDecomp, std: } if (quantityName == "T") { - return _temperature_accum.at(index) / _countSamples.at(index); + const double v_x = _velocityVect_accum[0].at(index) / _countSamples.at(index); + const double v_y = _velocityVect_accum[1].at(index) / _countSamples.at(index); + const double v_z = _velocityVect_accum[2].at(index) / _countSamples.at(index); + double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; + return (2*_ekin_accum.at(index) - v_drift_sqr*_mass_accum.at(index)) / _doftotal_accum.at(index); } else if (quantityName == "rho") { - return _density_accum.at(index) / _countSamples.at(index); + return _numMolecules_accum.at(index) / (_slabVolume * _countSamples.at(index)); } else if (quantityName == "ekin") { return _ekin_accum.at(index) / _countSamples.at(index); } diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index f4c30a7b79..0fdf6bab46 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -36,7 +36,7 @@ class ExtendedProfileSamplingTest; BOOL FLOAT INT - INT,INT,INT,... + INT,INT,INT,... * * \endcode @@ -78,17 +78,16 @@ class ExtendedProfileSampling : public PluginBase { // NOTE: Only the root process knows correct values (except number of molecules and temperature) // With only the root process writing data, MPI_Reduce instead of MPI_Allreduce could be used -> only root has correct data std::vector _numMolecules_accum; // Number of molecules in bin - std::vector _density_accum; // Local density - std::vector _temperature_accum; // Temperature (drift corrected) + std::vector _doftotal_accum; // DOF in bin + std::vector _mass_accum; // Mass std::vector _ekin_accum; // Kinetic energy including drift std::vector _epot_accum; // Potential energy - std::vector _massflux_accum; // Mass flux in y-direction (=rho*v_y) - std::vector _pressure_accum; // Pressure + std::vector _virial_accum; // Virial std::vector _chemPot_accum; // Chemical potential as sampled in ms2 (Widom insertion method) std::vector _countNTest_accum; // Number of inserted test particles for chem. pot. sampling - std::array, 3> _temperatureVect_accum; // Kinetic temperature in each direction (drift corrected) + std::array, 3> _ekinVect_accum; // Kinetic energy in each direction (drift corrected) std::array, 3> _velocityVect_accum; // Drift velocity in each direction - std::array, 3> _pressureVect_accum; // Pressure in each direction + std::array, 3> _virialVect_accum; // Virial in each direction std::array, 3> _forceVect_accum; // Sum of forces on particles in each direction std::array, 3> _energyfluxVect_accum; // Energy flux (heat flux plus enthalpy flux) in each direction diff --git a/src/plugins/NEMD/DriftCtrl.cpp b/src/plugins/NEMD/DriftCtrl.cpp index 399bfc2738..4fcf838b09 100644 --- a/src/plugins/NEMD/DriftCtrl.cpp +++ b/src/plugins/NEMD/DriftCtrl.cpp @@ -23,8 +23,6 @@ DriftCtrl::~DriftCtrl() void DriftCtrl::init(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, Domain* domain) { - global_log->debug() << "[DriftCtrl] Enabled in range yl,yr=" << _range.yl << "," << _range.yr << std::endl; - // number of components uint32_t numComponents = domain->getNumberOfComponents() + 1; // + 1 because component 0 stands for all components _sampling.resize(numComponents); @@ -55,7 +53,7 @@ void DriftCtrl::init(ParticleContainer* particleContainer, DomainDecompBase* dom _sampling.at(cid).velocity.at(2).local.at(yPosID) = 0.; } } - global_log->info() << "[DriftCtrl] Init data structures for " << numComponents << " components." << std::endl; + global_log->debug() << "[DriftCtrl] Init data structures for " << numComponents << " components." << std::endl; // init files uint64_t simstep = global_simulation->getSimulationStep(); @@ -87,9 +85,15 @@ void DriftCtrl::readXML(XMLfileUnits& xmlconfig) _control.freq.sample = 10; _control.freq.control = 100; _control.freq.write = 10000; + _control.start = 0; + _control.stop = std::numeric_limits::max(); + xmlconfig.getNodeValue("control/freq/sample", _control.freq.sample); xmlconfig.getNodeValue("control/freq/control", _control.freq.control); xmlconfig.getNodeValue("control/freq/write", _control.freq.write); + + xmlconfig.getNodeValue("control/start", _control.start); + xmlconfig.getNodeValue("control/stop", _control.stop); // range _range.yl = 0.; @@ -100,6 +104,7 @@ void DriftCtrl::readXML(XMLfileUnits& xmlconfig) // accept "box" as input _range.yr = (strVal == "box") ? _simulation.getDomain()->getGlobalLength(1) : atof(strVal.c_str()); global_log->info() << "[DriftCtrl] Enabled in range yl,yr=" << _range.yl << "," << _range.yr << std::endl; + global_log->info() << "[DriftCtrl] Enabled between simstep " << _control.start << " and " << _control.stop << std::endl; _range.width = _range.yr - _range.yl; // subdivision _range.subdivision.binWidth.init = 10.; @@ -148,6 +153,12 @@ void DriftCtrl::readXML(XMLfileUnits& xmlconfig) void DriftCtrl::beforeForces(ParticleContainer* particleContainer, DomainDecompBase* domainDecomp, unsigned long simstep) { + + // Only between start and stop + if ((simstep < _control.start) or (simstep > _control.stop)) { + return; + } + int nRank = domainDecomp->getRank(); // sample diff --git a/src/plugins/NEMD/DriftCtrl.h b/src/plugins/NEMD/DriftCtrl.h index 6fbb3a4518..a6019f2be6 100644 --- a/src/plugins/NEMD/DriftCtrl.h +++ b/src/plugins/NEMD/DriftCtrl.h @@ -74,6 +74,8 @@ class DriftCtrl : public PluginBase struct Freq{ uint32_t sample, control, write; } freq; + uint32_t start; + uint32_t stop; } _control; struct Range{ double yl, yr, width; diff --git a/src/thermostats/TemperatureControl.cpp b/src/thermostats/TemperatureControl.cpp index a295b95ca6..b12aabf867 100644 --- a/src/thermostats/TemperatureControl.cpp +++ b/src/thermostats/TemperatureControl.cpp @@ -440,15 +440,15 @@ void ControlRegionT::InitBetaLogfile() { // int numprocs = domainDecomp->getNumProcs(); if (rank != 0) return; #endif - - std::stringstream filenamestream; - filenamestream << _strFilenamePrefixBetaLog << "_reg" << this->GetID() << ".dat"; - std::stringstream outputstream; - outputstream.write(reinterpret_cast(&_nWriteFreqBeta), 8); - - std::ofstream fileout(filenamestream.str().c_str(), std::ios::out | std::ios::binary); - fileout << outputstream.str(); - fileout.close(); + // touch file + const std::string fname = _strFilenamePrefixBetaLog + "_reg" + std::to_string(this->GetID()) + ".dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::out); + ofs << setw(12) << "simstep" + << setw(24) << "dBetaTrans" + << setw(24) << "dBetaRot" + << std::endl; + ofs.close(); } } @@ -468,18 +468,19 @@ void ControlRegionT::WriteBetaLogfile(unsigned long simstep) { if (rank != 0) return; #endif - std::stringstream filenamestream; - filenamestream << _strFilenamePrefixBetaLog << "_reg" << this->GetID() << ".dat"; - std::stringstream outputstream; - double dInvNumConfigs = 1. / (double)(_numSampledConfigs); - double dBetaTrans = _dBetaTransSumGlobal * dInvNumConfigs; - double dBetaRot = _dBetaRotSumGlobal * dInvNumConfigs; - outputstream.write(reinterpret_cast(&dBetaTrans), 8); - outputstream.write(reinterpret_cast(&dBetaRot), 8); + double dInvNumConfigsSlabs = 1. / (double)(_numSampledConfigs*_nNumSlabs); + double dBetaTrans = _dBetaTransSumGlobal * dInvNumConfigsSlabs; + double dBetaRot = _dBetaRotSumGlobal * dInvNumConfigsSlabs; - ofstream fileout(filenamestream.str().c_str(), std::ios::app | std::ios::binary); - fileout << outputstream.str(); - fileout.close(); + // writing to file + const std::string fname = _strFilenamePrefixBetaLog + "_reg" + std::to_string(this->GetID()) + ".dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::app); + ofs << setw(12) << simstep + << FORMAT_SCI_MAX_DIGITS << dBetaTrans + << FORMAT_SCI_MAX_DIGITS << dBetaRot + << std::endl; + ofs.close(); // reset averaged values _numSampledConfigs = 0; @@ -517,6 +518,28 @@ void ControlRegionT::update(SubjectBase* subject) { _dSlabWidth = this->GetWidth(1) / ((double)(_nNumSlabs)); } +void ControlRegionT::InitAddedEkin() { + if (_localMethod == VelocityScaling) { +#ifdef ENABLE_MPI + DomainDecompBase* domainDecomp = &(global_simulation->domainDecomposition()); + int rank = domainDecomp->getRank(); + // int numprocs = domainDecomp->getNumProcs(); + if (rank != 0) return; +#endif + // touch file + const std::string fname = "addedEkin_reg" + std::to_string(this->GetID()) + "_cid" + std::to_string(_nTargetComponentID) + ".dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::out); + ofs << setw(12) << "simstep"; + for (int i = 0; i < _nNumSlabs; ++i) { + std::string s = "bin" + std::to_string(i+1); + ofs << setw(24) << s; + } + ofs << std::endl; + ofs.close(); + } +} + void ControlRegionT::writeAddedEkin(DomainDecompBase* domainDecomp, const uint64_t& simstep) { if (_localMethod != VelocityScaling) return; @@ -525,7 +548,7 @@ void ControlRegionT::writeAddedEkin(DomainDecompBase* domainDecomp, const uint64 for (int thread = 0; thread < mardyn_get_max_threads(); ++thread) { mardyn_assert(_addedEkin.data.local.size() == _nNumSlabs); for (size_t slabID = 0; slabID < _nNumSlabs; ++slabID) { - _addedEkin.data.local[0] += _addedEkinLocalThreadBuffer[thread][slabID]; + _addedEkin.data.local[slabID] += _addedEkinLocalThreadBuffer[thread][slabID]; } } // calc global values @@ -556,15 +579,16 @@ void ControlRegionT::writeAddedEkin(DomainDecompBase* domainDecomp, const uint64 } // writing .dat-files - std::stringstream filenamestream; - filenamestream << "addedEkin_reg" << this->GetID() << "_cid" << _nTargetComponentID << ".dat"; - - std::stringstream outputstream; - outputstream.write(reinterpret_cast(_addedEkin.data.global.data()), 8 * _addedEkin.data.global.size()); - - ofstream fileout(filenamestream.str().c_str(), std::ios::app | std::ios::binary); - fileout << outputstream.str(); - fileout.close(); + const std::string fname = "addedEkin_reg" + std::to_string(this->GetID()) + "_cid" + std::to_string(_nTargetComponentID) + ".dat"; + std::ofstream ofs; + ofs.open(fname, std::ios::app); + + ofs << setw(12) << simstep; + for (double& it : vg) { + ofs << FORMAT_SCI_MAX_DIGITS << it; + } + ofs << std::endl; + ofs.close(); } // class TemperatureControl @@ -631,6 +655,7 @@ void TemperatureControl::prepare_start() { reg->registerAsObserver(); } this->InitBetaLogfiles(); + this->InitAddedEkin(); } void TemperatureControl::AddRegion(ControlRegionT* region) { _vecControlRegions.push_back(region); } @@ -671,6 +696,10 @@ void TemperatureControl::WriteBetaLogfiles(unsigned long simstep) { for (auto&& reg : _vecControlRegions) reg->WriteBetaLogfile(simstep); } +void TemperatureControl::InitAddedEkin() { + for (auto&& reg : _vecControlRegions) reg->InitAddedEkin(); +} + void TemperatureControl::writeAddedEkin(DomainDecompBase* domainDecomp, const uint64_t& simstep) { for (auto&& reg : _vecControlRegions) reg->writeAddedEkin(domainDecomp, simstep); } diff --git a/src/thermostats/TemperatureControl.h b/src/thermostats/TemperatureControl.h index add31ffa3a..dbf3d08491 100644 --- a/src/thermostats/TemperatureControl.h +++ b/src/thermostats/TemperatureControl.h @@ -102,6 +102,7 @@ class ControlRegionT : public CuboidRegionObs { void update(SubjectBase* subject) override; // measure added kin. energy + void InitAddedEkin(); void writeAddedEkin(DomainDecompBase* domainDecomp, const uint64_t& simstep); private: @@ -194,6 +195,7 @@ class TemperatureControl : public ControlInstance { void VelocityScalingPreparation(DomainDecompBase*, ParticleContainer*, unsigned long simstep); // measure added kin. energy + void InitAddedEkin(); void writeAddedEkin(DomainDecompBase* domainDecomp, const uint64_t& simstep); private: From e9f4a41005bd675171b09ece9f2d07eefbf85070 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 19 Aug 2022 11:58:07 +0200 Subject: [PATCH 59/76] Fix sampling of chem. pot. for LRC --- src/plugins/ExtendedProfileSampling.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index fcc82a9a68..69dc3dd52c 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -508,7 +508,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const uint32_t indexCID = cid*_numBinsGlobal + index; _mTest.setComponent(&(_simulation.getEnsemble()->getComponents()->at(cid-1))); const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor) - + _simulation.getLongRangeCorrection()->getUpotCorr(&_mTest); + + 2.0*_simulation.getLongRangeCorrection()->getUpotCorr(&_mTest); double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); // Global temperature of all components if (std::isfinite(chemPot)) { // For component 0 (single component) From 1dee5ae03c5acac1c193e4596c7ce3171b1b2732 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 24 Oct 2022 16:55:26 +0200 Subject: [PATCH 60/76] Fix in EPS plugin for multi-atom molecules --- src/plugins/ExtendedProfileSampling.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 69dc3dd52c..20d300e078 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -340,9 +340,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double veloZ = pit->v(2); const double mass = pit->mass(); const double epot = pit->U_pot(); - const double ekinX2 = mass * veloX * veloX + (pit->U_rot_2()/3.0); - const double ekinY2 = mass * veloY * veloY + (pit->U_rot_2()/3.0); - const double ekinZ2 = mass * veloZ * veloZ + (pit->U_rot_2()/3.0); std::vector cids = {0}; // add quantities to "all components" (0) and respective component if (!_singleComp) { cids.push_back(pit->componentid() + 1); } @@ -352,9 +349,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, mass_step.local.at(indexCID) += pit->mass(); ekin_step.local.at(indexCID) += pit->U_kin(); epot_step.local.at(indexCID) += epot; - ekinVect_step[0].local.at(indexCID) += 0.5*ekinX2; - ekinVect_step[1].local.at(indexCID) += 0.5*ekinY2; - ekinVect_step[2].local.at(indexCID) += 0.5*ekinZ2; + ekinVect_step[0].local.at(indexCID) += 0.5*mass*veloX*veloX; + ekinVect_step[1].local.at(indexCID) += 0.5*mass*veloY*veloY; + ekinVect_step[2].local.at(indexCID) += 0.5*mass*veloZ*veloZ; virialVect_step[0].local.at(indexCID) += pit->Vi(0); virialVect_step[1].local.at(indexCID) += pit->Vi(1); virialVect_step[2].local.at(indexCID) += pit->Vi(2); @@ -804,9 +801,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, epot = _epot_accum.at(i) / numMols_accum; p = rho * ( (_virial_accum.at(i))/(3.0*numMols_accum) + T); - T_x = 3*(2*_ekinVect_accum[0].at(i) - (v_x*v_x)*numMols_accum) / _doftotal_accum.at(i); - T_y = 3*(2*_ekinVect_accum[1].at(i) - (v_y*v_y)*numMols_accum) / _doftotal_accum.at(i); - T_z = 3*(2*_ekinVect_accum[2].at(i) - (v_z*v_z)*numMols_accum) / _doftotal_accum.at(i); + T_x = (2*_ekinVect_accum[0].at(i) - (v_x*v_x)*_mass_accum.at(i)) / numMols_accum; + T_y = (2*_ekinVect_accum[1].at(i) - (v_y*v_y)*_mass_accum.at(i)) / numMols_accum; + T_z = (2*_ekinVect_accum[2].at(i) - (v_z*v_z)*_mass_accum.at(i)) / numMols_accum; p_x = rho * ( _virialVect_accum[0].at(i)/numMols_accum + T); p_y = rho * ( _virialVect_accum[1].at(i)/numMols_accum + T); p_z = rho * ( _virialVect_accum[2].at(i)/numMols_accum + T); From 9468c8683e29931f68c7a12182e9b42e960fdc3a Mon Sep 17 00:00:00 2001 From: HomesGH Date: Mon, 7 Nov 2022 14:30:24 +0100 Subject: [PATCH 61/76] Fix in GammaWriter --- src/io/GammaWriter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/io/GammaWriter.cpp b/src/io/GammaWriter.cpp index f5fc44537b..138cb14370 100644 --- a/src/io/GammaWriter.cpp +++ b/src/io/GammaWriter.cpp @@ -89,7 +89,7 @@ void GammaWriter::calculateGamma(ParticleContainer* particleContainer, DomainDec // Only for particles within range if ((tempMol->r(1) - _range.ymax)*(tempMol->r(1) - _range.ymin) <= 0) { - const unsigned cid = tempMol->componentid(); + const unsigned cid = tempMol->componentid() + 1; const double gamma = tempMol->Vi(1) - 0.5 * (tempMol->Vi(0) + tempMol->Vi(2)); localGamma_thread[cid] += gamma; localGamma_thread[0] += gamma; // 0 is component-independent value From 452abb81067e7ee8fe167523af0eef79371902f7 Mon Sep 17 00:00:00 2001 From: HomesGH <55833544+HomesGH@users.noreply.github.com> Date: Wed, 18 Jan 2023 16:25:01 +0100 Subject: [PATCH 62/76] Fix in HigherMoments of EPS --- src/plugins/ExtendedProfileSampling.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 20d300e078..5e0e596079 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -201,14 +201,14 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(hmPressure_step.at(d).local.begin(), hmPressure_step.at(d).local.end(), 0.0f); std::fill(hmR_step.at(d).local.begin(), hmR_step.at(d).local.end(), 0.0f); std::fill(hmM_step.at(d).local.begin(), hmM_step.at(d).local.end(), 0.0f); - std::fill(hmM_step.at(d).local.begin(), hmM_step.at(d).local.end(), 0.0f); - std::fill(hmM_step.at(d).local.begin(), hmM_step.at(d).local.end(), 0.0f); + std::fill(hmM_step.at(d+9u).local.begin(), hmM_step.at(d+9u).local.end(), 0.0f); + std::fill(hmM_step.at(d+18u).local.begin(), hmM_step.at(d+18u).local.end(), 0.0f); std::fill(hmPressure_step.at(d).global.begin(), hmPressure_step.at(d).global.end(), 0.0f); std::fill(hmR_step.at(d).global.begin(), hmR_step.at(d).global.end(), 0.0f); std::fill(hmM_step.at(d).global.begin(), hmM_step.at(d).global.end(), 0.0f); - std::fill(hmM_step.at(d).global.begin(), hmM_step.at(d).global.end(), 0.0f); - std::fill(hmM_step.at(d).global.begin(), hmM_step.at(d).global.end(), 0.0f); + std::fill(hmM_step.at(d+9u).global.begin(), hmM_step.at(d+9u).global.end(), 0.0f); + std::fill(hmM_step.at(d+18u).global.begin(), hmM_step.at(d+18u).global.end(), 0.0f); } } else { @@ -861,6 +861,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs << setw(24) << "pos"; // Bin position for (unsigned long cid = 0; cid < numOutputs; cid++) { ofs << setw(22) << "delta[" << cid << "]"; + // key k_i and value v_i for (auto& [k_i, v_i] : dirs) { ofs << setw(20) << "q_" << k_i << "[" << cid << "]"; } @@ -918,13 +919,13 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } for (auto& [k_i, v_i] : dirs) { for (auto& [k_j, v_j] : dirs) { - ofs << FORMAT_SCI_MAX_DIGITS << p[3u*v_i+v_j]; + ofs << FORMAT_SCI_MAX_DIGITS << R[3u*v_i+v_j]; } } for (auto& [k_i, v_i] : dirs) { for (auto& [k_j, v_j] : dirs) { for (auto& [k_k, v_k] : dirs) { - ofs << FORMAT_SCI_MAX_DIGITS << p[9u*v_i+3u*v_j+v_k]; + ofs << FORMAT_SCI_MAX_DIGITS << m[9u*v_i+3u*v_j+v_k]; } } } From 141bfece56a8a03a9db473fb2e91881c9cb6873e Mon Sep 17 00:00:00 2001 From: HomesGH <55833544+HomesGH@users.noreply.github.com> Date: Thu, 23 Feb 2023 12:11:24 +0100 Subject: [PATCH 63/76] Fix in sampling of higher moments --- src/plugins/ExtendedProfileSampling.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 5e0e596079..cfc30d8f37 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -897,14 +897,14 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, if (_countSamples.at(i) > 0ul) { delta = _hmDelta_accum.at(i)/_countSamples.at(i); for (unsigned short d = 0; d < 3; d++) { - q[d] = _hmHeatflux_accum[d].at(i); + q[d] = _hmHeatflux_accum[d].at(i)/_countSamples.at(i); } for (unsigned short d = 0; d < 9; d++) { - p[d] = _hmPressure_accum[d].at(i); - R[d] = _hmR_accum[d].at(i); - m[d] = _hmM_accum[d].at(i); - m[d+9u] = _hmM_accum[d+9u].at(i); - m[d+18u] = _hmM_accum[d+18u].at(i); + p[d] = _hmPressure_accum[d].at(i)/_countSamples.at(i); + R[d] = _hmR_accum[d].at(i)/_countSamples.at(i); + m[d] = _hmM_accum[d].at(i)/_countSamples.at(i); + m[d+9u] = _hmM_accum[d+9u].at(i)/_countSamples.at(i); + m[d+18u] = _hmM_accum[d+18u].at(i)/_countSamples.at(i); } } ofs << FORMAT_SCI_MAX_DIGITS << delta; From c0e4044e7e9c66ba6b22a87a32d607dd266670cf Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 12 Apr 2023 16:54:06 +0200 Subject: [PATCH 64/76] Add orientation angle to sampling --- src/plugins/ExtendedProfileSampling.cpp | 42 +++++++++++++++++++++++++ src/plugins/ExtendedProfileSampling.h | 1 + 2 files changed, 43 insertions(+) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 5e0e596079..9baafc74ed 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -150,6 +150,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, CommVar> mass_step; CommVar> ekin_step; // Including drift energy CommVar> epot_step; + CommVar> orientation_step; CommVar> chemPot_step; CommVar> countNTest_step; std::array>, 3> ekinVect_step; @@ -236,6 +237,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, mass_step.local.resize(_lenVector); ekin_step.local.resize(_lenVector); epot_step.local.resize(_lenVector); + orientation_step.local.resize(_lenVector); chemPot_step.local.resize(_lenVector); countNTest_step.local.resize(_lenVector); @@ -243,6 +245,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, mass_step.global.resize(_lenVector); ekin_step.global.resize(_lenVector); epot_step.global.resize(_lenVector); + orientation_step.global.resize(_lenVector); chemPot_step.global.resize(_lenVector); countNTest_step.global.resize(_lenVector); @@ -266,6 +269,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(mass_step.local.begin(), mass_step.local.end(), 0.0f); std::fill(ekin_step.local.begin(), ekin_step.local.end(), 0.0f); std::fill(epot_step.local.begin(), epot_step.local.end(), 0.0f); + std::fill(orientation_step.local.begin(), orientation_step.local.end(), 0.0f); std::fill(chemPot_step.local.begin(), chemPot_step.local.end(), 0.0f); std::fill(countNTest_step.local.begin(), countNTest_step.local.end(), 0ul); @@ -273,6 +277,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(mass_step.global.begin(), mass_step.global.end(), 0.0f); std::fill(ekin_step.global.begin(), ekin_step.global.end(), 0.0f); std::fill(epot_step.global.begin(), epot_step.global.end(), 0.0f); + std::fill(orientation_step.global.begin(), orientation_step.global.end(), 0.0f); std::fill(chemPot_step.global.begin(), chemPot_step.global.end(), 0.0f); std::fill(countNTest_step.global.begin(), countNTest_step.global.end(), 0ul); @@ -349,6 +354,13 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, mass_step.local.at(indexCID) += pit->mass(); ekin_step.local.at(indexCID) += pit->U_kin(); epot_step.local.at(indexCID) += epot; + + Quaternion q_pit = pit->q(); + mardyn_assert(q_pit.isNormalized()); + std::array pos_rot = q_pit.rotate({0., 0., 1.}); + const double angle = std::atan(abs(pos_rot[1])/(std::sqrt(pos_rot[0]*pos_rot[0]+pos_rot[2]*pos_rot[2])))*(180/3.14159265); + orientation_step.local.at(indexCID) += angle; + ekinVect_step[0].local.at(indexCID) += 0.5*mass*veloX*veloX; ekinVect_step[1].local.at(indexCID) += 0.5*mass*veloY*veloY; ekinVect_step[2].local.at(indexCID) += 0.5*mass*veloZ*veloZ; @@ -362,6 +374,27 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); + // std::array r1 = pit->computeLJcenter_d(0); + // std::array r2 = pit->computeLJcenter_d(1); + + // double dx = abs(r1[0]-r2[0]); + // double dy = abs(r1[1]-r2[1]); + // double dz = abs(r1[2]-r2[2]); + + // double angle = std::atan(dy/(std::sqrt(dx*dx+dz*dz)))*(180/3.14159265); + + // if (pit->getID()==33) { std::cout << "asdf1 " << dx << " " << dy << " " << dz << " " << angle << std::endl; } + + // Quaternion q_pit = pit->q(); + // mardyn_assert(q_pit.isNormalized()); + // std::array dpos = q_pit.rotate({0., 0., std::sqrt(dx*dx+dy*dy+dz*dz)}); + + // double angle2 = std::atan(abs(dpos[1])/(std::sqrt(dpos[0]*dpos[0]+dpos[2]*dpos[2])))*(180/3.14159265); + + // if (pit->getID()==33) { std::cout << "asdf2 " << dpos[0] << " " << dpos[1] << " " << dpos[2] << " " << angle2 << std::endl; } + // if (pit->getID()==33) { std::cout << "asdf2 " << q_pit.qw() << " " << q_pit.qx() << " " << q_pit.qy() << " " << q_pit.qz() << std::endl; } + + if (_sampleHigherMoms) { const double veloCorrX = veloX - veloDrift_step_global[0].at(index); const double veloCorrY = veloY - veloDrift_step_global[1].at(index); @@ -582,6 +615,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, MPI_Reduce(mass_step.local.data(), mass_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(ekin_step.local.data(), ekin_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(epot_step.local.data(), epot_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(orientation_step.local.data(), orientation_step.global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[0].local.data(), virialVect_step[0].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[1].local.data(), virialVect_step[1].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(virialVect_step[2].local.data(), virialVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); @@ -614,6 +648,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, mass_step.global.at(i) = mass_step.local.at(i); ekin_step.global.at(i) = ekin_step.local.at(i); epot_step.global.at(i) = epot_step.local.at(i); + orientation_step.global.at(i) = orientation_step.local.at(i); virialVect_step[0].global.at(i) = virialVect_step[0].local.at(i); virialVect_step[1].global.at(i) = virialVect_step[1].local.at(i); virialVect_step[2].global.at(i) = virialVect_step[2].local.at(i); @@ -677,6 +712,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _mass_accum.at(i) += mass_step.global.at(i); _ekin_accum.at(i) += ekin_step.global.at(i); _epot_accum.at(i) += epot_step.global.at(i); + _orientation_accum.at(i) += orientation_step.global.at(i); _virial_accum.at(i) += ViX + ViY + ViZ; _chemPot_accum.at(i) += chemPot_step.global.at(i); _countNTest_accum.at(i) += countNTest_step.global.at(i); @@ -734,6 +770,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, << setw(22) << "T[" << cid << "]" // Temperature without drift (i.e. "real" temperature) << setw(22) << "ekin[" << cid << "]" // Kinetic energy including drift << setw(22) << "epot[" << cid << "]" // Potential energy + << setw(22) << "angle[" << cid << "]" // Orientation angle between y plane and z axis of molecule << setw(22) << "p[" << cid << "]" // Pressure << setw(22) << "chemPot_res[" << cid << "]" // Chemical potential as known as mu_tilde (equals the ms2 value) << setw(22) << "numTest[" << cid << "]" // Number of inserted test particles per sample step @@ -765,6 +802,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, double T {std::nan("0")}; double ekin {std::nan("0")}; double epot {std::nan("0")}; + double angle {std::nan("0")}; double p {std::nan("0")}; double chemPot_res {std::nan("0")}; double numTest {std::nan("0")}; @@ -799,6 +837,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, T = (2*_ekin_accum.at(i) - v_drift_sqr*_mass_accum.at(i)) / _doftotal_accum.at(i); ekin = _ekin_accum.at(i) / numMols_accum; epot = _epot_accum.at(i) / numMols_accum; + angle = _orientation_accum.at(i) / numMols_accum;; p = rho * ( (_virial_accum.at(i))/(3.0*numMols_accum) + T); T_x = (2*_ekinVect_accum[0].at(i) - (v_x*v_x)*_mass_accum.at(i)) / numMols_accum; @@ -825,6 +864,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, << FORMAT_SCI_MAX_DIGITS << T << FORMAT_SCI_MAX_DIGITS << ekin << FORMAT_SCI_MAX_DIGITS << epot + << FORMAT_SCI_MAX_DIGITS << angle << FORMAT_SCI_MAX_DIGITS << p << FORMAT_SCI_MAX_DIGITS << chemPot_res << FORMAT_SCI_MAX_DIGITS << numTest @@ -949,6 +989,7 @@ void ExtendedProfileSampling::resizeVectors() { _mass_accum.resize(_lenVector); _ekin_accum.resize(_lenVector); _epot_accum.resize(_lenVector); + _orientation_accum.resize(_lenVector); _virial_accum.resize(_lenVector); _chemPot_accum.resize(_lenVector); _countNTest_accum.resize(_lenVector); @@ -998,6 +1039,7 @@ void ExtendedProfileSampling::resetVectors() { std::fill(_mass_accum.begin(), _mass_accum.end(), 0.0f); std::fill(_ekin_accum.begin(), _ekin_accum.end(), 0.0f); std::fill(_epot_accum.begin(), _epot_accum.end(), 0.0f); + std::fill(_orientation_accum.begin(), _orientation_accum.end(), 0.0f); std::fill(_virial_accum.begin(), _virial_accum.end(), 0.0f); std::fill(_chemPot_accum.begin(), _chemPot_accum.end(), 0.0f); std::fill(_countNTest_accum.begin(), _countNTest_accum.end(), 0ul); diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index 0fdf6bab46..a459f1db40 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -82,6 +82,7 @@ class ExtendedProfileSampling : public PluginBase { std::vector _mass_accum; // Mass std::vector _ekin_accum; // Kinetic energy including drift std::vector _epot_accum; // Potential energy + std::vector _orientation_accum; // Orientation angle between y plane and z axis of molecule std::vector _virial_accum; // Virial std::vector _chemPot_accum; // Chemical potential as sampled in ms2 (Widom insertion method) std::vector _countNTest_accum; // Number of inserted test particles for chem. pot. sampling From e1c300f4923aebefce104dee4dd0dcd5fc3e31a4 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 13 Apr 2023 12:10:23 +0200 Subject: [PATCH 65/76] Fix default of Quaternions (which was not normalized) --- src/molecules/AutoPasSimpleMolecule.h | 9 +++++---- src/molecules/FullMolecule.h | 2 +- src/molecules/MoleculeRMM.h | 2 +- src/molecules/Quaternion.h | 2 +- src/plugins/ExtendedProfileSampling.cpp | 3 +++ 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/molecules/AutoPasSimpleMolecule.h b/src/molecules/AutoPasSimpleMolecule.h index 94a04eaccd..9eb6916952 100644 --- a/src/molecules/AutoPasSimpleMolecule.h +++ b/src/molecules/AutoPasSimpleMolecule.h @@ -17,10 +17,11 @@ */ class AutoPasSimpleMolecule final : public MoleculeInterface, public autopas::ParticleFP64 { public: - explicit AutoPasSimpleMolecule(unsigned long id = 0, Component* component = nullptr, double rx = 0., double ry = 0., - double rz = 0., double vx = 0., double vy = 0., double vz = 0., double q0 = 1., - double q1 = 1., double q2 = 0., double q3 = 0., double Dx = 0., double Dy = 0., - double Dz = 0.); + explicit AutoPasSimpleMolecule(unsigned long id = 0, Component* component = nullptr, + double rx = 0., double ry = 0., double rz = 0., + double vx = 0., double vy = 0., double vz = 0., + double q0 = 1., double q1 = 0., double q2 = 0., double q3 = 0., + double Dx = 0., double Dy = 0., double Dz = 0.); AutoPasSimpleMolecule(const AutoPasSimpleMolecule& m) = default; diff --git a/src/molecules/FullMolecule.h b/src/molecules/FullMolecule.h index be820a6a53..cd3d901244 100644 --- a/src/molecules/FullMolecule.h +++ b/src/molecules/FullMolecule.h @@ -25,7 +25,7 @@ class FullMolecule : public MoleculeInterface { FullMolecule(unsigned long id = 0, Component *component = nullptr, double rx = 0., double ry = 0., double rz = 0., double vx = 0., double vy = 0., double vz = 0., - double q0 = 1., double q1 = 1., double q2 = 0., double q3 = 0., + double q0 = 1., double q1 = 0., double q2 = 0., double q3 = 0., double Dx = 0., double Dy = 0., double Dz = 0. ); FullMolecule(const FullMolecule& m); diff --git a/src/molecules/MoleculeRMM.h b/src/molecules/MoleculeRMM.h index 99568762c4..d74111f760 100644 --- a/src/molecules/MoleculeRMM.h +++ b/src/molecules/MoleculeRMM.h @@ -21,7 +21,7 @@ class MoleculeRMM : public MoleculeInterface { MoleculeRMM(unsigned long id = 0, Component *component = nullptr, double rx = 0., double ry = 0., double rz = 0., double vx = 0., double vy = 0., double vz = 0., - double = 0., double = 0., double = 0., double = 0., /*q0, q1, q2, q3*/ + double = 1., double = 0., double = 0., double = 0., /*q0, q1, q2, q3*/ double = 0., double = 0., double = 0. /*Dx, Dy, Dz*/ ) { _state = STORAGE_AOS; diff --git a/src/molecules/Quaternion.h b/src/molecules/Quaternion.h index a232c17309..ccaed9352c 100644 --- a/src/molecules/Quaternion.h +++ b/src/molecules/Quaternion.h @@ -9,7 +9,7 @@ */ class Quaternion { public: - Quaternion(double qw = 1., double qx = 1., double qy = 0., double qz = 0.) + Quaternion(double qw = 1., double qx = 0., double qy = 0., double qz = 0.) : m_qw(qw), m_qx(qx), m_qy(qy), m_qz(qz) { } diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 5f35c0c634..143d414710 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -356,6 +356,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, epot_step.local.at(indexCID) += epot; Quaternion q_pit = pit->q(); + if (fabs(q_pit.magnitude2() - 1.0) >= 1e-15) { + std::cout << pit->getID() << " Not normalized " << q_pit.qw() << " " << q_pit.qx() << " " << q_pit.qy() << " " << q_pit.qz() << " " << q_pit.magnitude2() << std::endl; + } mardyn_assert(q_pit.isNormalized()); std::array pos_rot = q_pit.rotate({0., 0., 1.}); const double angle = std::atan(abs(pos_rot[1])/(std::sqrt(pos_rot[0]*pos_rot[0]+pos_rot[2]*pos_rot[2])))*(180/3.14159265); From de343091400ac26d79fb00b14f1cdbb8e4878b96 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 14 Apr 2023 16:57:31 +0200 Subject: [PATCH 66/76] Change orientation from angle to order parameter --- src/plugins/ExtendedProfileSampling.cpp | 24 ++++++++++++++---------- src/plugins/ExtendedProfileSampling.h | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 143d414710..d9280c359c 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -356,13 +356,17 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, epot_step.local.at(indexCID) += epot; Quaternion q_pit = pit->q(); - if (fabs(q_pit.magnitude2() - 1.0) >= 1e-15) { - std::cout << pit->getID() << " Not normalized " << q_pit.qw() << " " << q_pit.qx() << " " << q_pit.qy() << " " << q_pit.qz() << " " << q_pit.magnitude2() << std::endl; - } - mardyn_assert(q_pit.isNormalized()); + // if (fabs(q_pit.magnitude2() - 1.0) >= 1e-15) { + // std::cout << pit->getID() << " Not normalized " << q_pit.qw() << " " << q_pit.qx() << " " << q_pit.qy() << " " << q_pit.qz() << " " << q_pit.magnitude2() << std::endl; + // } + // mardyn_assert(q_pit.isNormalized()); + // Molecule should be elongated (ie. main axis) in z direction std::array pos_rot = q_pit.rotate({0., 0., 1.}); - const double angle = std::atan(abs(pos_rot[1])/(std::sqrt(pos_rot[0]*pos_rot[0]+pos_rot[2]*pos_rot[2])))*(180/3.14159265); - orientation_step.local.at(indexCID) += angle; + // Orientation order parameter, cf. Eq. 29 in Mecke2001 + // cos^2(theta) = dy^2 = pos_rot[1]^2 since length of rotated vector (hypotenuse) is 1 + orientation_step.local.at(indexCID) += 3.*pos_rot[1]*pos_rot[1] - 1.; + // Angle between normal vector of y plane and z axis of molecule + // const double angle = 90 - (std::atan(abs(pos_rot[1])/(std::sqrt(pos_rot[0]*pos_rot[0]+pos_rot[2]*pos_rot[2])))*(180/3.14159265)); ekinVect_step[0].local.at(indexCID) += 0.5*mass*veloX*veloX; ekinVect_step[1].local.at(indexCID) += 0.5*mass*veloY*veloY; @@ -773,7 +777,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, << setw(22) << "T[" << cid << "]" // Temperature without drift (i.e. "real" temperature) << setw(22) << "ekin[" << cid << "]" // Kinetic energy including drift << setw(22) << "epot[" << cid << "]" // Potential energy - << setw(22) << "angle[" << cid << "]" // Orientation angle between y plane and z axis of molecule + << setw(22) << "orientation[" << cid << "]" // Orientation order parameter, cf. Eq. 29 in Mecke2001 << setw(22) << "p[" << cid << "]" // Pressure << setw(22) << "chemPot_res[" << cid << "]" // Chemical potential as known as mu_tilde (equals the ms2 value) << setw(22) << "numTest[" << cid << "]" // Number of inserted test particles per sample step @@ -805,7 +809,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, double T {std::nan("0")}; double ekin {std::nan("0")}; double epot {std::nan("0")}; - double angle {std::nan("0")}; + double orderparam {std::nan("0")}; double p {std::nan("0")}; double chemPot_res {std::nan("0")}; double numTest {std::nan("0")}; @@ -840,7 +844,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, T = (2*_ekin_accum.at(i) - v_drift_sqr*_mass_accum.at(i)) / _doftotal_accum.at(i); ekin = _ekin_accum.at(i) / numMols_accum; epot = _epot_accum.at(i) / numMols_accum; - angle = _orientation_accum.at(i) / numMols_accum;; + orderparam = 0.5*_orientation_accum.at(i) / numMols_accum;; p = rho * ( (_virial_accum.at(i))/(3.0*numMols_accum) + T); T_x = (2*_ekinVect_accum[0].at(i) - (v_x*v_x)*_mass_accum.at(i)) / numMols_accum; @@ -867,7 +871,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, << FORMAT_SCI_MAX_DIGITS << T << FORMAT_SCI_MAX_DIGITS << ekin << FORMAT_SCI_MAX_DIGITS << epot - << FORMAT_SCI_MAX_DIGITS << angle + << FORMAT_SCI_MAX_DIGITS << orderparam << FORMAT_SCI_MAX_DIGITS << p << FORMAT_SCI_MAX_DIGITS << chemPot_res << FORMAT_SCI_MAX_DIGITS << numTest diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index a459f1db40..386476cc17 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -82,7 +82,7 @@ class ExtendedProfileSampling : public PluginBase { std::vector _mass_accum; // Mass std::vector _ekin_accum; // Kinetic energy including drift std::vector _epot_accum; // Potential energy - std::vector _orientation_accum; // Orientation angle between y plane and z axis of molecule + std::vector _orientation_accum; // Orientation order parameter, cf. Eq. 29 in Mecke2001 std::vector _virial_accum; // Virial std::vector _chemPot_accum; // Chemical potential as sampled in ms2 (Widom insertion method) std::vector _countNTest_accum; // Number of inserted test particles for chem. pot. sampling From d738d773b46baf18f8f3c4102dc5f57dfe41159f Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 18 Apr 2023 15:41:34 +0200 Subject: [PATCH 67/76] Fix regarding quaternions --- src/io/ASCIIReader.cpp | 2 ++ src/io/Adios2Reader.cpp | 3 ++- src/io/BinaryReader.cpp | 2 ++ src/io/tests/Adios2IOTest.cpp | 2 +- src/plugins/ExtendedProfileSampling.cpp | 25 ------------------------- src/plugins/ExtendedProfileSampling.h | 2 +- src/utils/generator/Basis.cpp | 2 +- 7 files changed, 9 insertions(+), 29 deletions(-) diff --git a/src/io/ASCIIReader.cpp b/src/io/ASCIIReader.cpp index 7eaaf910c0..5f3d22e300 100644 --- a/src/io/ASCIIReader.cpp +++ b/src/io/ASCIIReader.cpp @@ -402,6 +402,8 @@ ASCIIReader::readPhaseSpace(ParticleContainer* particleContainer, Domain* domain // The necessary check is performed in the particleContainer addParticle method // FIXME: Datastructures? Pass pointer instead of object, so that we do not need to copy?! Molecule m1 = Molecule(id, &dcomponents[componentid], x, y, z, vx, vy, vz, q0, q1, q2, q3, Dx, Dy, Dz); + // Check if quaternions are normalized + mardyn_assert(m1.q().isNormalized()); #ifdef ENABLE_MPI ParticleData::MoleculeToParticleData(particle_buff[particle_buff_pos], m1); } // Rank 0 only diff --git a/src/io/Adios2Reader.cpp b/src/io/Adios2Reader.cpp index f71ba79958..d975e12d4e 100644 --- a/src/io/Adios2Reader.cpp +++ b/src/io/Adios2Reader.cpp @@ -470,7 +470,8 @@ void Adios2Reader::parallelRead(ParticleContainer* particleContainer, Domain* do particle_buff[j].r[1], particle_buff[j].r[2], particle_buff[j].v[0], particle_buff[j].v[1], particle_buff[j].v[2], particle_buff[j].q[0], particle_buff[j].q[1], particle_buff[j].q[2], particle_buff[j].q[3], particle_buff[j].D[0], particle_buff[j].D[1], particle_buff[j].D[2]); - + // Check if quaternions are normalized + mardyn_assert(m.q().isNormalized()); // only add particle if it is inside of the own domain! if(particleContainer->isInBoundingBox(m.r_arr().data())) { particleContainer->addParticle(m, true, false); diff --git a/src/io/BinaryReader.cpp b/src/io/BinaryReader.cpp index 3d9f534fc3..b9be7c586b 100644 --- a/src/io/BinaryReader.cpp +++ b/src/io/BinaryReader.cpp @@ -265,6 +265,8 @@ BinaryReader::readPhaseSpace(ParticleContainer* particleContainer, Domain* domai for (int j = 0; j < particle_buff_pos; j++) { Molecule m; ParticleData::ParticleDataToMolecule(particle_buff[j], m); + // Check if quaternions are normalized + mardyn_assert(m.q().isNormalized()); // only add particle if it is inside of the own domain! if(particleContainer->isInBoundingBox(m.r_arr().data())) { particleContainer->addParticle(m, true, false); diff --git a/src/io/tests/Adios2IOTest.cpp b/src/io/tests/Adios2IOTest.cpp index db1054e030..9b3a88a260 100644 --- a/src/io/tests/Adios2IOTest.cpp +++ b/src/io/tests/Adios2IOTest.cpp @@ -87,7 +87,7 @@ void Adios2IOTest::initParticles() { // init quaternions for (auto& q : _quaternions) { q[0] = 1.0; - q[1] = 1.0; + q[1] = 0.0; q[2] = 0.0; q[3] = 0.0; } diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index d9280c359c..b9ebbaee53 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -356,10 +356,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, epot_step.local.at(indexCID) += epot; Quaternion q_pit = pit->q(); - // if (fabs(q_pit.magnitude2() - 1.0) >= 1e-15) { - // std::cout << pit->getID() << " Not normalized " << q_pit.qw() << " " << q_pit.qx() << " " << q_pit.qy() << " " << q_pit.qz() << " " << q_pit.magnitude2() << std::endl; - // } - // mardyn_assert(q_pit.isNormalized()); // Molecule should be elongated (ie. main axis) in z direction std::array pos_rot = q_pit.rotate({0., 0., 1.}); // Orientation order parameter, cf. Eq. 29 in Mecke2001 @@ -381,27 +377,6 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); - // std::array r1 = pit->computeLJcenter_d(0); - // std::array r2 = pit->computeLJcenter_d(1); - - // double dx = abs(r1[0]-r2[0]); - // double dy = abs(r1[1]-r2[1]); - // double dz = abs(r1[2]-r2[2]); - - // double angle = std::atan(dy/(std::sqrt(dx*dx+dz*dz)))*(180/3.14159265); - - // if (pit->getID()==33) { std::cout << "asdf1 " << dx << " " << dy << " " << dz << " " << angle << std::endl; } - - // Quaternion q_pit = pit->q(); - // mardyn_assert(q_pit.isNormalized()); - // std::array dpos = q_pit.rotate({0., 0., std::sqrt(dx*dx+dy*dy+dz*dz)}); - - // double angle2 = std::atan(abs(dpos[1])/(std::sqrt(dpos[0]*dpos[0]+dpos[2]*dpos[2])))*(180/3.14159265); - - // if (pit->getID()==33) { std::cout << "asdf2 " << dpos[0] << " " << dpos[1] << " " << dpos[2] << " " << angle2 << std::endl; } - // if (pit->getID()==33) { std::cout << "asdf2 " << q_pit.qw() << " " << q_pit.qx() << " " << q_pit.qy() << " " << q_pit.qz() << std::endl; } - - if (_sampleHigherMoms) { const double veloCorrX = veloX - veloDrift_step_global[0].at(index); const double veloCorrY = veloY - veloDrift_step_global[1].at(index); diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index 386476cc17..34bd3356b2 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -82,7 +82,7 @@ class ExtendedProfileSampling : public PluginBase { std::vector _mass_accum; // Mass std::vector _ekin_accum; // Kinetic energy including drift std::vector _epot_accum; // Potential energy - std::vector _orientation_accum; // Orientation order parameter, cf. Eq. 29 in Mecke2001 + std::vector _orientation_accum; // Orientation order parameter, cf. Eq. 29 in Mecke2001, between z axis of molecule and y plane std::vector _virial_accum; // Virial std::vector _chemPot_accum; // Chemical potential as sampled in ms2 (Widom insertion method) std::vector _countNTest_accum; // Number of inserted test particles for chem. pot. sampling diff --git a/src/utils/generator/Basis.cpp b/src/utils/generator/Basis.cpp index da19a38ce3..a2486cc569 100644 --- a/src/utils/generator/Basis.cpp +++ b/src/utils/generator/Basis.cpp @@ -34,7 +34,7 @@ void Basis::readXML(XMLfileUnits& xmlconfig) { molecule.setr(0, r[0]); molecule.setr(1, r[1]); molecule.setr(2, r[2]); - Quaternion q(1.0, 0., 0., 0.); /* orientation of molecules has to be set to a value other than 0,0,0,0! */ + Quaternion q(1., 0., 0., 0.); /* orientation of molecules has to be set to a value other than 0,0,0,0! */ molecule.setq(q); global_log->info() << "[Basis] Adding molecule cid=" << componentid << ", (x,y,z)=(" << molecule.r(0) << "," << molecule.r(1) << "," << molecule.r(2) << ")" << endl; addMolecule(molecule); From 745a9e771c6f26a5151aef6987e1a78e9c91e7e6 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Tue, 18 Apr 2023 19:16:11 +0200 Subject: [PATCH 68/76] Normalize quaternions in test input files --- test_input/DomainDecompBase.inp | 6 +++--- test_input/LinkedCells.inp | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/test_input/DomainDecompBase.inp b/test_input/DomainDecompBase.inp index b3c1b847b5..1f6563b3dc 100644 --- a/test_input/DomainDecompBase.inp +++ b/test_input/DomainDecompBase.inp @@ -9,6 +9,6 @@ mardyn trunk 20100321 1e+10 NumberOfMolecules 3 MoleculeFormat ICRVQD -0 1 44.193660131599571628 44.193660131599571628 44.193660131599571628 0.021964449482946436787 0.042014399418642357775 0.026758280005558285342 0.71407455266990882414 0.16707280034322180562 0.16707280034322180562 0 0 0 0 -1 1 36.158449198581472217 4.0176054665090523699 4.0176054665090523699 -0.0026091310149019574828 -0.03563214196939688827 0.034605883650549819353 0.65981044784274645032 0.204365637679579909 0.204365637679579909 0 0 0 0 -2 1 44.193660131599571628 44.193660131599571628 28.123238265563365701 0.037788355215588681491 0.039996302405151527848 0.010555364842161261973 0.72418655692611333397 0.16028895143913016175 0.16028895143913016175 0 0 0 0 +0 1 44.193660131599571628 44.193660131599571628 44.193660131599571628 0.021964449482946436787 0.042014399418642357775 0.026758280005558285342 0.971685833369484 0.16707280034322180562 0.16707280034322180562 0 0 0 0 +1 1 36.158449198581472217 4.0176054665090523699 4.0176054665090523699 -0.0026091310149019574828 -0.03563214196939688827 0.034605883650549819353 0.957324068574293 0.204365637679579909 0.204365637679579909 0 0 0 0 +2 1 44.193660131599571628 44.193660131599571628 28.123238265563365701 0.037788355215588681491 0.039996302405151527848 0.010555364842161261973 0.973968636093118 0.16028895143913016175 0.16028895143913016175 0 0 0 0 diff --git a/test_input/LinkedCells.inp b/test_input/LinkedCells.inp index e745664035..988ff71583 100644 --- a/test_input/LinkedCells.inp +++ b/test_input/LinkedCells.inp @@ -9,11 +9,11 @@ mardyn trunk 20100321 1e+10 NumberOfMolecules 8 MoleculeFormat ICRVQD -0 1 0.5 0.5 0.5 0.021964449482946436787 0.042014399418642357775 0.026758280005558285342 0.71407455266990882414 0.16707280034322180562 0.16707280034322180562 0 0 0 0 -1 1 0.5 0.5 1.5 -0.0026091310149019574828 -0.03563214196939688827 0.034605883650549819353 0.65981044784274645032 0.204365637679579909 0.204365637679579909 0 0 0 0 -2 1 0.5 1.5 0.5 0.037788355215588681491 0.039996302405151527848 0.010555364842161261973 0.72418655692611333397 0.16028895143913016175 0.16028895143913016175 0 0 0 0 -3 1 0.5 1.5 1.5 0.021964449482946436787 0.042014399418642357775 0.026758280005558285342 0.71407455266990882414 0.16707280034322180562 0.16707280034322180562 0 0 0 0 -4 1 1.5 0.5 0.5 -0.0026091310149019574828 -0.03563214196939688827 0.034605883650549819353 0.65981044784274645032 0.204365637679579909 0.204365637679579909 0 0 0 0 -5 1 1.5 0.5 1.5 0.037788355215588681491 0.039996302405151527848 0.010555364842161261973 0.72418655692611333397 0.16028895143913016175 0.16028895143913016175 0 0 0 0 -6 1 1.5 1.5 0.5 0.021964449482946436787 0.042014399418642357775 0.026758280005558285342 0.71407455266990882414 0.16707280034322180562 0.16707280034322180562 0 0 0 0 -7 1 1.5 1.5 1.5 -0.0026091310149019574828 -0.03563214196939688827 0.034605883650549819353 0.65981044784274645032 0.204365637679579909 0.204365637679579909 0 0 0 0 +0 1 0.5 0.5 0.5 0.021964449482946436787 0.042014399418642357775 0.026758280005558285342 0.971685833369484 0.16707280034322180562 0.16707280034322180562 0 0 0 0 +1 1 0.5 0.5 1.5 -0.0026091310149019574828 -0.03563214196939688827 0.034605883650549819353 0.957324068574293 0.204365637679579909 0.204365637679579909 0 0 0 0 +2 1 0.5 1.5 0.5 0.037788355215588681491 0.039996302405151527848 0.010555364842161261973 0.973968636093118 0.16028895143913016175 0.16028895143913016175 0 0 0 0 +3 1 0.5 1.5 1.5 0.021964449482946436787 0.042014399418642357775 0.026758280005558285342 0.971685833369484 0.16707280034322180562 0.16707280034322180562 0 0 0 0 +4 1 1.5 0.5 0.5 -0.0026091310149019574828 -0.03563214196939688827 0.034605883650549819353 0.957324068574293 0.204365637679579909 0.204365637679579909 0 0 0 0 +5 1 1.5 0.5 1.5 0.037788355215588681491 0.039996302405151527848 0.010555364842161261973 0.973968636093118 0.16028895143913016175 0.16028895143913016175 0 0 0 0 +6 1 1.5 1.5 0.5 0.021964449482946436787 0.042014399418642357775 0.026758280005558285342 0.971685833369484 0.16707280034322180562 0.16707280034322180562 0 0 0 0 +7 1 1.5 1.5 1.5 -0.0026091310149019574828 -0.03563214196939688827 0.034605883650549819353 0.957324068574293 0.204365637679579909 0.204365637679579909 0 0 0 0 From 20976e249b89ffc2b49bbb907f971c36e70b2ee1 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 19 Apr 2023 11:14:28 +0200 Subject: [PATCH 69/76] Normalize quaternions during read --- src/io/ASCIIReader.cpp | 2 +- src/io/Adios2Reader.cpp | 4 +++- src/io/BinaryReader.cpp | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/io/ASCIIReader.cpp b/src/io/ASCIIReader.cpp index 5f3d22e300..cd2c25a251 100644 --- a/src/io/ASCIIReader.cpp +++ b/src/io/ASCIIReader.cpp @@ -403,7 +403,7 @@ ASCIIReader::readPhaseSpace(ParticleContainer* particleContainer, Domain* domain // FIXME: Datastructures? Pass pointer instead of object, so that we do not need to copy?! Molecule m1 = Molecule(id, &dcomponents[componentid], x, y, z, vx, vy, vz, q0, q1, q2, q3, Dx, Dy, Dz); // Check if quaternions are normalized - mardyn_assert(m1.q().isNormalized()); + if (!m1.q().isNormalized()) { m1.normalizeQuaternion(); }; #ifdef ENABLE_MPI ParticleData::MoleculeToParticleData(particle_buff[particle_buff_pos], m1); } // Rank 0 only diff --git a/src/io/Adios2Reader.cpp b/src/io/Adios2Reader.cpp index d975e12d4e..1e635b6394 100644 --- a/src/io/Adios2Reader.cpp +++ b/src/io/Adios2Reader.cpp @@ -471,7 +471,7 @@ void Adios2Reader::parallelRead(ParticleContainer* particleContainer, Domain* do particle_buff[j].v[2], particle_buff[j].q[0], particle_buff[j].q[1], particle_buff[j].q[2], particle_buff[j].q[3], particle_buff[j].D[0], particle_buff[j].D[1], particle_buff[j].D[2]); // Check if quaternions are normalized - mardyn_assert(m.q().isNormalized()); + if (!m.q().isNormalized()) { m.normalizeQuaternion(); }; // only add particle if it is inside of the own domain! if(particleContainer->isInBoundingBox(m.r_arr().data())) { particleContainer->addParticle(m, true, false); @@ -501,6 +501,8 @@ void Adios2Reader::parallelRead(ParticleContainer* particleContainer, Domain* do std::get>(Ly), std::get>(Lz)); } + // Check if quaternions are normalized + if (!m.q().isNormalized()) { m.normalizeQuaternion(); }; // only add particle if it is inside of the own domain! if (particleContainer->isInBoundingBox(m.r_arr().data())) { particleContainer->addParticle(m, true, false); diff --git a/src/io/BinaryReader.cpp b/src/io/BinaryReader.cpp index b9be7c586b..a33bcfe4fc 100644 --- a/src/io/BinaryReader.cpp +++ b/src/io/BinaryReader.cpp @@ -251,6 +251,8 @@ BinaryReader::readPhaseSpace(ParticleContainer* particleContainer, Domain* domai // FIXME: Datastructures? Pass pointer instead of object, so that we do not need to copy?! Molecule m1 = Molecule(id, &dcomponents[componentid], x, y, z, vx, vy, vz, q0, q1, q2, q3, Dx, Dy, Dz); + // Check if quaternions are normalized + if (!m1.q().isNormalized()) { m1.normalizeQuaternion(); }; #ifdef ENABLE_MPI ParticleData::MoleculeToParticleData( particle_buff[particle_buff_pos], m1); @@ -265,8 +267,6 @@ BinaryReader::readPhaseSpace(ParticleContainer* particleContainer, Domain* domai for (int j = 0; j < particle_buff_pos; j++) { Molecule m; ParticleData::ParticleDataToMolecule(particle_buff[j], m); - // Check if quaternions are normalized - mardyn_assert(m.q().isNormalized()); // only add particle if it is inside of the own domain! if(particleContainer->isInBoundingBox(m.r_arr().data())) { particleContainer->addParticle(m, true, false); From 8f66703bcbecdc03253284869097c33267461235 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 19 Apr 2023 11:14:55 +0200 Subject: [PATCH 70/76] Add script to run validation tests --- examples/run-validation.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 examples/run-validation.sh diff --git a/examples/run-validation.sh b/examples/run-validation.sh new file mode 100755 index 0000000000..0ecd97135e --- /dev/null +++ b/examples/run-validation.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Testscript running validation tests according to GitHub Actions +# +# Copyright (c) 2023 Simon Homes +# + +repoPath="$PWD/.." # Path to root directory + +export OMP_NUM_THREADS=2 + +logfileName="${repoPath}/examples/run-validation.log" +rm -f ${logfileName} + +IFS=$'\n' +for i in $(cat "${repoPath}/examples/example-list.txt" ) +do + # skip if comment or empty line + if [[ $i == \#* || -z "$i" ]] + then + continue + fi + cd ${repoPath}/examples/$(dirname $i) + + # run the examples + printf "Running example: ${i} ... " | tee -a ${logfileName} + EXE=${repoPath}/build/src/MarDyn + + mpirun --oversubscribe -np 4 ${EXE} $(basename $i) --steps=20 | tee -a ${logfileName} + printf "done\n" +done + From 90e835c5d002e4af063f1208f34a63acd04f3661 Mon Sep 17 00:00:00 2001 From: HomesGH <55833544+HomesGH@users.noreply.github.com> Date: Wed, 18 Oct 2023 13:27:22 +0200 Subject: [PATCH 71/76] Add std:: --- src/plugins/tests/ExtendedProfileSamplingTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/tests/ExtendedProfileSamplingTest.cpp b/src/plugins/tests/ExtendedProfileSamplingTest.cpp index 06f751185a..c0f8ded10e 100755 --- a/src/plugins/tests/ExtendedProfileSamplingTest.cpp +++ b/src/plugins/tests/ExtendedProfileSamplingTest.cpp @@ -64,7 +64,7 @@ void ExtendedProfileSamplingTest::testEPSampling() { ASSERT_DOUBLES_EQUAL(rho_actual_all, rho_actual_cid1, delta); ASSERT_DOUBLES_EQUAL(ekin_actual_all, ekin_actual_cid1, delta); } - cout << endl; + std::cout << std::endl; } } From 9d9dd0e26b7e7cf523c4d2a59b2220a29f65a4c7 Mon Sep 17 00:00:00 2001 From: HomesGH Date: Wed, 18 Oct 2023 17:22:20 +0200 Subject: [PATCH 72/76] Performance improvements --- src/plugins/ExtendedProfileSampling.cpp | 677 +++++++++++++----------- 1 file changed, 360 insertions(+), 317 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index b750a9de20..bcb5eeeb80 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -179,57 +179,57 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(hmDelta_step.global.begin(), hmDelta_step.global.end(), 0.0f); for (unsigned short d = 0; d < 3; d++) { - hmHeatflux_step.at(d).local.resize(_lenVector); - hmHeatflux_step.at(d).global.resize(_lenVector); + hmHeatflux_step[d].local.resize(_lenVector); + hmHeatflux_step[d].global.resize(_lenVector); - std::fill(hmHeatflux_step.at(d).local.begin(), hmHeatflux_step.at(d).local.end(), 0.0f); - std::fill(hmHeatflux_step.at(d).global.begin(), hmHeatflux_step.at(d).global.end(), 0.0f); + std::fill(hmHeatflux_step[d].local.begin(), hmHeatflux_step[d].local.end(), 0.0f); + std::fill(hmHeatflux_step[d].global.begin(), hmHeatflux_step[d].global.end(), 0.0f); } for (unsigned short d = 0; d < 9; d++) { - hmPressure_step.at(d).local.resize(_lenVector); - hmR_step.at(d).local.resize(_lenVector); - hmM_step.at(d).local.resize(_lenVector); - hmM_step.at(d+9u).local.resize(_lenVector); - hmM_step.at(d+18u).local.resize(_lenVector); - - hmPressure_step.at(d).global.resize(_lenVector); - hmR_step.at(d).global.resize(_lenVector); - hmM_step.at(d).global.resize(_lenVector); - hmM_step.at(d+9u).global.resize(_lenVector); - hmM_step.at(d+18u).global.resize(_lenVector); - - std::fill(hmPressure_step.at(d).local.begin(), hmPressure_step.at(d).local.end(), 0.0f); - std::fill(hmR_step.at(d).local.begin(), hmR_step.at(d).local.end(), 0.0f); - std::fill(hmM_step.at(d).local.begin(), hmM_step.at(d).local.end(), 0.0f); - std::fill(hmM_step.at(d+9u).local.begin(), hmM_step.at(d+9u).local.end(), 0.0f); - std::fill(hmM_step.at(d+18u).local.begin(), hmM_step.at(d+18u).local.end(), 0.0f); - - std::fill(hmPressure_step.at(d).global.begin(), hmPressure_step.at(d).global.end(), 0.0f); - std::fill(hmR_step.at(d).global.begin(), hmR_step.at(d).global.end(), 0.0f); - std::fill(hmM_step.at(d).global.begin(), hmM_step.at(d).global.end(), 0.0f); - std::fill(hmM_step.at(d+9u).global.begin(), hmM_step.at(d+9u).global.end(), 0.0f); - std::fill(hmM_step.at(d+18u).global.begin(), hmM_step.at(d+18u).global.end(), 0.0f); + hmPressure_step[d].local.resize(_lenVector); + hmR_step[d].local.resize(_lenVector); + hmM_step[d].local.resize(_lenVector); + hmM_step[d+9u].local.resize(_lenVector); + hmM_step[d+18u].local.resize(_lenVector); + + hmPressure_step[d].global.resize(_lenVector); + hmR_step[d].global.resize(_lenVector); + hmM_step[d].global.resize(_lenVector); + hmM_step[d+9u].global.resize(_lenVector); + hmM_step[d+18u].global.resize(_lenVector); + + std::fill(hmPressure_step[d].local.begin(), hmPressure_step[d].local.end(), 0.0f); + std::fill(hmR_step[d].local.begin(), hmR_step[d].local.end(), 0.0f); + std::fill(hmM_step[d].local.begin(), hmM_step[d].local.end(), 0.0f); + std::fill(hmM_step[d+9u].local.begin(), hmM_step[d+9u].local.end(), 0.0f); + std::fill(hmM_step[d+18u].local.begin(), hmM_step[d+18u].local.end(), 0.0f); + + std::fill(hmPressure_step[d].global.begin(), hmPressure_step[d].global.end(), 0.0f); + std::fill(hmR_step[d].global.begin(), hmR_step[d].global.end(), 0.0f); + std::fill(hmM_step[d].global.begin(), hmM_step[d].global.end(), 0.0f); + std::fill(hmM_step[d+9u].global.begin(), hmM_step[d+9u].global.end(), 0.0f); + std::fill(hmM_step[d+18u].global.begin(), hmM_step[d+18u].global.end(), 0.0f); } } else { hmDelta_step.local.clear(); hmDelta_step.global.clear(); for (unsigned short d = 0; d < 3; d++) { - hmHeatflux_step.at(d).local.clear(); - hmHeatflux_step.at(d).global.clear(); + hmHeatflux_step[d].local.clear(); + hmHeatflux_step[d].global.clear(); } for (unsigned short d = 0; d < 9; d++) { - hmPressure_step.at(d).local.clear(); - hmR_step.at(d).local.clear(); - hmM_step.at(d).local.clear(); - hmM_step.at(d+9u).local.clear(); - hmM_step.at(d+18u).local.clear(); - hmPressure_step.at(d).global.clear(); - hmR_step.at(d).global.clear(); - hmM_step.at(d).global.clear(); - hmM_step.at(d+9u).global.clear(); - hmM_step.at(d+18u).global.clear(); + hmPressure_step[d].local.clear(); + hmR_step[d].local.clear(); + hmM_step[d].local.clear(); + hmM_step[d+9u].local.clear(); + hmM_step[d+18u].local.clear(); + hmPressure_step[d].global.clear(); + hmR_step[d].global.clear(); + hmM_step[d].global.clear(); + hmM_step[d+9u].global.clear(); + hmM_step[d+18u].global.clear(); } } @@ -250,19 +250,19 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, countNTest_step.global.resize(_lenVector); for (unsigned short d = 0; d < 3; d++) { - ekinVect_step.at(d).local.resize(_lenVector); - velocityVect_step.at(d).local.resize(_lenVector); - virialVect_step.at(d).local.resize(_lenVector); - forceVect_step.at(d).local.resize(_lenVector); - energyfluxVect_step.at(d).local.resize(_lenVector); - - ekinVect_step.at(d).global.resize(_lenVector); - velocityVect_step.at(d).global.resize(_lenVector); - virialVect_step.at(d).global.resize(_lenVector); - forceVect_step.at(d).global.resize(_lenVector); - energyfluxVect_step.at(d).global.resize(_lenVector); - - veloDrift_step_global.at(d).resize(_lenVector); + ekinVect_step[d].local.resize(_lenVector); + velocityVect_step[d].local.resize(_lenVector); + virialVect_step[d].local.resize(_lenVector); + forceVect_step[d].local.resize(_lenVector); + energyfluxVect_step[d].local.resize(_lenVector); + + ekinVect_step[d].global.resize(_lenVector); + velocityVect_step[d].global.resize(_lenVector); + virialVect_step[d].global.resize(_lenVector); + forceVect_step[d].global.resize(_lenVector); + energyfluxVect_step[d].global.resize(_lenVector); + + veloDrift_step_global[d].resize(_lenVector); } std::fill(numMolecules_step.local.begin(), numMolecules_step.local.end(), 0ul); @@ -282,35 +282,47 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::fill(countNTest_step.global.begin(), countNTest_step.global.end(), 0ul); for (unsigned short d = 0; d < 3; d++) { - std::fill(ekinVect_step.at(d).local.begin(), ekinVect_step.at(d).local.end(), 0.0f); - std::fill(velocityVect_step.at(d).local.begin(), velocityVect_step.at(d).local.end(), 0.0f); - std::fill(virialVect_step.at(d).local.begin(), virialVect_step.at(d).local.end(), 0.0f); - std::fill(forceVect_step.at(d).local.begin(), forceVect_step.at(d).local.end(), 0.0f); - std::fill(energyfluxVect_step.at(d).local.begin(), energyfluxVect_step.at(d).local.end(), 0.0f); - - std::fill(ekinVect_step.at(d).global.begin(), ekinVect_step.at(d).global.end(), 0.0f); - std::fill(velocityVect_step.at(d).global.begin(), velocityVect_step.at(d).global.end(), 0.0f); - std::fill(virialVect_step.at(d).global.begin(), virialVect_step.at(d).global.end(), 0.0f); - std::fill(forceVect_step.at(d).global.begin(), forceVect_step.at(d).global.end(), 0.0f); - std::fill(energyfluxVect_step.at(d).global.begin(), energyfluxVect_step.at(d).global.end(), 0.0f); - - std::fill(veloDrift_step_global.at(d).begin(), veloDrift_step_global.at(d).end(), 0.0f); + std::fill(ekinVect_step[d].local.begin(), ekinVect_step[d].local.end(), 0.0f); + std::fill(velocityVect_step[d].local.begin(), velocityVect_step[d].local.end(), 0.0f); + std::fill(virialVect_step[d].local.begin(), virialVect_step[d].local.end(), 0.0f); + std::fill(forceVect_step[d].local.begin(), forceVect_step[d].local.end(), 0.0f); + std::fill(energyfluxVect_step[d].local.begin(), energyfluxVect_step[d].local.end(), 0.0f); + + std::fill(ekinVect_step[d].global.begin(), ekinVect_step[d].global.end(), 0.0f); + std::fill(velocityVect_step[d].global.begin(), velocityVect_step[d].global.end(), 0.0f); + std::fill(virialVect_step[d].global.begin(), virialVect_step[d].global.end(), 0.0f); + std::fill(forceVect_step[d].global.begin(), forceVect_step[d].global.end(), 0.0f); + std::fill(energyfluxVect_step[d].global.begin(), energyfluxVect_step[d].global.end(), 0.0f); + + std::fill(veloDrift_step_global[d].begin(), veloDrift_step_global[d].end(), 0.0f); } // Calculate drift as it is needed first + std::vector cids = {0}; for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { const double ry = pit->r(1); const unsigned int index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin - std::vector cids = {0}; // add velocities to "all components" (0) and respective component - if (!_singleComp) { cids.push_back(pit->componentid() + 1); } + const std::array velo { + pit->v(0), pit->v(1), pit->v(2) + }; + + // add velocities to "all components" (0) and respective component + if (!_singleComp) { + cids.push_back(pit->componentid() + 1); + } for (unsigned int cid : cids) { const uint32_t indexCID = cid*_numBinsGlobal + index; - numMolecules_step.local.at(indexCID) ++; - velocityVect_step.at(0).local.at(indexCID) += pit->v(0); - velocityVect_step.at(1).local.at(indexCID) += pit->v(1); - velocityVect_step.at(2).local.at(indexCID) += pit->v(2); + numMolecules_step.local[indexCID] ++; + for (unsigned short d = 0; d < 3; d++) { + velocityVect_step[d].local[indexCID] += velo[d]; + } + } + + // delete componentID + if (!_singleComp) { + cids.pop_back(); } } @@ -321,82 +333,108 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, MPI_Allreduce(velocityVect_step[2].local.data(), velocityVect_step[2].global.data(), _lenVector, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); #else for (unsigned long i = 0; i < _lenVector; i++) { - numMolecules_step.global.at(i) = numMolecules_step.local.at(i); - velocityVect_step[0].global.at(i) = velocityVect_step[0].local.at(i); - velocityVect_step[1].global.at(i) = velocityVect_step[1].local.at(i); - velocityVect_step[2].global.at(i) = velocityVect_step[2].local.at(i); + numMolecules_step.global[i] = numMolecules_step.local[i]; + velocityVect_step[0].global[i] = velocityVect_step[0].local[i]; + velocityVect_step[1].global[i] = velocityVect_step[1].local[i]; + velocityVect_step[2].global[i] = velocityVect_step[2].local[i]; } #endif for (unsigned long i = 0; i < _lenVector; i++) { - if (numMolecules_step.global.at(i) > 0ul) { - veloDrift_step_global[0].at(i) = velocityVect_step[0].global.at(i) / numMolecules_step.global.at(i); - veloDrift_step_global[1].at(i) = velocityVect_step[1].global.at(i) / numMolecules_step.global.at(i); - veloDrift_step_global[2].at(i) = velocityVect_step[2].global.at(i) / numMolecules_step.global.at(i); + if (numMolecules_step.global[i] > 0ul) { + veloDrift_step_global[0][i] = velocityVect_step[0].global[i] / numMolecules_step.global[i]; + veloDrift_step_global[1][i] = velocityVect_step[1].global[i] / numMolecules_step.global[i]; + veloDrift_step_global[2][i] = velocityVect_step[2].global[i] / numMolecules_step.global[i]; } } + cids.clear(); + cids.push_back(0u); for (auto pit = particleContainer->iterator(ParticleIterator::ONLY_INNER_AND_BOUNDARY); pit.isValid(); ++pit) { const double ry = pit->r(1); const unsigned int index = std::min(_numBinsGlobal, static_cast(ry/_binwidth)); // Index of bin - const double veloX = pit->v(0); - const double veloY = pit->v(1); - const double veloZ = pit->v(2); const double mass = pit->mass(); const double epot = pit->U_pot(); - - std::vector cids = {0}; // add quantities to "all components" (0) and respective component - if (!_singleComp) { cids.push_back(pit->componentid() + 1); } + const double ekin = pit->U_kin(); + const double etot = ekin + epot; + + const std::array virial { + pit->Vi(0), pit->Vi(1), pit->Vi(2), + pit->Vi(3), pit->Vi(4), pit->Vi(5), + pit->Vi(6), pit->Vi(7), pit->Vi(8) + }; + + const std::array force { + pit->F(0), pit->F(1), pit->F(2) + }; + + const std::array velo { + pit->v(0), pit->v(1), pit->v(2) + }; + + const std::array ekinVect { + 0.5*mass*velo[0]*velo[0], + 0.5*mass*velo[1]*velo[1], + 0.5*mass*velo[2]*velo[2] + }; + + const std::array energyflux { + etot*velo[0] + (virial[0]*velo[0] + virial[3]*velo[1] + virial[4]*velo[2]), + etot*velo[1] + (virial[6]*velo[0] + virial[1]*velo[1] + virial[5]*velo[2]), + etot*velo[2] + (virial[7]*velo[0] + virial[8]*velo[1] + virial[2]*velo[2]) + }; + + // Molecule should be elongated (ie. main axis) in z direction + const std::array pos_rot = pit->q().rotate({0., 0., 1.}); + // Orientation order parameter, cf. Eq. 29 in Mecke2001 + // cos^2(theta) = dy^2 = pos_rot[1]^2 since length of rotated vector (hypotenuse) is 1 + const double orientation = 3.*pos_rot[1]*pos_rot[1] - 1.; + // Angle between normal vector of y plane and z axis of molecule + // const double angle = 90 - (std::atan(abs(pos_rot[1])/(std::sqrt(pos_rot[0]*pos_rot[0]+pos_rot[2]*pos_rot[2])))*(180/3.14159265)); + + + // add quantities to "all components" (0) and respective component + if (!_singleComp) { + cids.push_back(pit->componentid() + 1); + } for (unsigned int cid : cids) { const uint32_t indexCID = cid*_numBinsGlobal + index; - mass_step.local.at(indexCID) += pit->mass(); - ekin_step.local.at(indexCID) += pit->U_kin(); - epot_step.local.at(indexCID) += epot; - - Quaternion q_pit = pit->q(); - // Molecule should be elongated (ie. main axis) in z direction - std::array pos_rot = q_pit.rotate({0., 0., 1.}); - // Orientation order parameter, cf. Eq. 29 in Mecke2001 - // cos^2(theta) = dy^2 = pos_rot[1]^2 since length of rotated vector (hypotenuse) is 1 - orientation_step.local.at(indexCID) += 3.*pos_rot[1]*pos_rot[1] - 1.; - // Angle between normal vector of y plane and z axis of molecule - // const double angle = 90 - (std::atan(abs(pos_rot[1])/(std::sqrt(pos_rot[0]*pos_rot[0]+pos_rot[2]*pos_rot[2])))*(180/3.14159265)); - - ekinVect_step[0].local.at(indexCID) += 0.5*mass*veloX*veloX; - ekinVect_step[1].local.at(indexCID) += 0.5*mass*veloY*veloY; - ekinVect_step[2].local.at(indexCID) += 0.5*mass*veloZ*veloZ; - virialVect_step[0].local.at(indexCID) += pit->Vi(0); - virialVect_step[1].local.at(indexCID) += pit->Vi(1); - virialVect_step[2].local.at(indexCID) += pit->Vi(2); - forceVect_step[0].local.at(indexCID) += pit->F(0); - forceVect_step[1].local.at(indexCID) += pit->F(1); - forceVect_step[2].local.at(indexCID) += pit->F(2); - energyfluxVect_step[0].local.at(indexCID) += (pit->U_kin() + epot)*veloX + (pit->Vi(0)*veloX + pit->Vi(3)*veloY + pit->Vi(4)*veloZ); - energyfluxVect_step[1].local.at(indexCID) += (pit->U_kin() + epot)*veloY + (pit->Vi(6)*veloX + pit->Vi(1)*veloY + pit->Vi(5)*veloZ); - energyfluxVect_step[2].local.at(indexCID) += (pit->U_kin() + epot)*veloZ + (pit->Vi(7)*veloX + pit->Vi(8)*veloY + pit->Vi(2)*veloZ); + mass_step.local[indexCID] += mass; + ekin_step.local[indexCID] += ekin; + epot_step.local[indexCID] += epot; + + orientation_step.local[indexCID] = orientation; + + for (unsigned short d = 0; d < 3; d++) { + ekinVect_step[d].local[indexCID] += ekinVect[d]; + virialVect_step[d].local[indexCID] += virial[d]; + forceVect_step[d].local[indexCID] += force[d]; + energyfluxVect_step[d].local[indexCID] += energyflux[d]; + } if (_sampleHigherMoms) { - const double veloCorrX = veloX - veloDrift_step_global[0].at(index); - const double veloCorrY = veloY - veloDrift_step_global[1].at(index); - const double veloCorrZ = veloZ - veloDrift_step_global[2].at(index); - const double veloCorrSqrt = veloCorrX*veloCorrX + veloCorrY*veloCorrY + veloCorrZ*veloCorrZ; // Squared velocity of particle without drift - const std::array velos = {veloCorrX, veloCorrY, veloCorrZ}; + const std::array veloCorr { + velo[0] - veloDrift_step_global[0][index], + velo[1] - veloDrift_step_global[1][index], + velo[2] - veloDrift_step_global[2][index] + }; + const double veloCorrSqrt = veloCorr[0]*veloCorr[0] + veloCorr[1]*veloCorr[1] + veloCorr[2]*veloCorr[2]; // Squared velocity of particle without drift - hmDelta_step.local.at(indexCID) += veloCorrSqrt*veloCorrSqrt; + hmDelta_step.local[indexCID] += veloCorrSqrt*veloCorrSqrt; for (unsigned short i = 0; i < 3; i++) { - hmHeatflux_step[i].local.at(indexCID) += 0.5*veloCorrSqrt*velos[i]; + hmHeatflux_step[i].local[indexCID] += 0.5*veloCorrSqrt*veloCorr[i]; for (unsigned short j = 0; j < 3; j++) { if (i == j) { // Trace elements - hmPressure_step[3*i+j].local.at(indexCID) += velos[i]*velos[j] - (1./3.)*veloCorrSqrt; // Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz - hmR_step[3u*i+j].local.at(indexCID) += (velos[i]*velos[j] - (1./3.)*veloCorrSqrt)*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + hmPressure_step[3*i+j].local[indexCID] += veloCorr[i]*veloCorr[j] - (1./3.)*veloCorrSqrt; // Pressure; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz + hmR_step[3u*i+j].local[indexCID] += (veloCorr[i]*veloCorr[j] - (1./3.)*veloCorrSqrt)*veloCorrSqrt; // R; cxcx, cxcy, cxcz, cycx, cycy, cycz, czcx, czcy, czcz } else { - hmPressure_step[3u*i+j].local.at(indexCID) += velos[i]*velos[j]; - hmR_step[3u*i+j].local.at(indexCID) += velos[i]*velos[j]*veloCorrSqrt; + hmPressure_step[3u*i+j].local[indexCID] += veloCorr[i]*veloCorr[j]; + hmR_step[3u*i+j].local[indexCID] += veloCorr[i]*veloCorr[j]*veloCorrSqrt; } } } @@ -405,7 +443,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, for (unsigned short i = 0; i < 3; i++) { for (unsigned short j = 0; j < 3; j++) { for (unsigned short k = 0; k < 3; k++) { - m[i][j][k] = velos[i]*velos[j]*velos[k]; + m[i][j][k] = veloCorr[i]*veloCorr[j]*veloCorr[k]; } } } @@ -416,37 +454,42 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, m[2][0][0] + m[2][1][1] + m[2][2][2] }; - hmM_step[0].local.at(indexCID) += m[0][0][0] - 0.6*(mSum[0]); // m: cxcxcx - hmM_step[1].local.at(indexCID) += m[0][0][1] - 0.2*(mSum[1]); // m: cxcxcy - hmM_step[2].local.at(indexCID) += m[0][0][2] - 0.2*(mSum[2]); // m: cxcxcz - hmM_step[3].local.at(indexCID) += m[0][1][0] - 0.2*(mSum[1]); // m: cxcycx - hmM_step[4].local.at(indexCID) += m[0][1][1] - 0.2*(mSum[0]); // m: cxcycy - hmM_step[5].local.at(indexCID) += m[0][1][2]; // m: cxcycz - hmM_step[6].local.at(indexCID) += m[0][2][0] - 0.2*(mSum[2]); // m: cxczcx - hmM_step[7].local.at(indexCID) += m[0][2][1]; // m: cxczcy - hmM_step[8].local.at(indexCID) += m[0][2][2] - 0.2*(mSum[0]); // m: cxczcz - - hmM_step[9].local.at(indexCID) += m[1][0][0] - 0.2*(mSum[1]); // m: cycxcx - hmM_step[10].local.at(indexCID) += m[1][0][1] - 0.2*(mSum[0]); // m: cycxcy - hmM_step[11].local.at(indexCID) += m[1][0][2]; // m: cycxcz - hmM_step[12].local.at(indexCID) += m[1][1][0] - 0.2*(mSum[0]); // m: cycycx - hmM_step[13].local.at(indexCID) += m[1][1][1] - 0.6*(mSum[1]); // m: cycycy - hmM_step[14].local.at(indexCID) += m[1][1][2] - 0.2*(mSum[2]); // m: cycycz - hmM_step[15].local.at(indexCID) += m[1][2][0]; // m: cyczcx - hmM_step[16].local.at(indexCID) += m[1][2][1] - 0.2*(mSum[2]); // m: cyczcy - hmM_step[17].local.at(indexCID) += m[1][2][2] - 0.2*(mSum[1]); // m: cyczcz - - hmM_step[18].local.at(indexCID) += m[2][0][0] - 0.2*(mSum[2]); // m: czcxcx - hmM_step[19].local.at(indexCID) += m[2][0][1]; // m: czcxcy - hmM_step[20].local.at(indexCID) += m[2][0][2] - 0.2*(mSum[0]); // m: czcxcz - hmM_step[21].local.at(indexCID) += m[2][1][0]; // m: czcycx - hmM_step[22].local.at(indexCID) += m[2][1][1] - 0.2*(mSum[2]); // m: czcycy - hmM_step[23].local.at(indexCID) += m[2][1][2] - 0.2*(mSum[1]); // m: czcycz - hmM_step[24].local.at(indexCID) += m[2][2][0] - 0.2*(mSum[0]); // m: czczcx - hmM_step[25].local.at(indexCID) += m[2][2][1] - 0.2*(mSum[1]); // m: czczcy - hmM_step[26].local.at(indexCID) += m[2][2][2] - 0.6*(mSum[2]); // m: czczcz + hmM_step[0].local[indexCID] += m[0][0][0] - 0.6*(mSum[0]); // m: cxcxcx + hmM_step[1].local[indexCID] += m[0][0][1] - 0.2*(mSum[1]); // m: cxcxcy + hmM_step[2].local[indexCID] += m[0][0][2] - 0.2*(mSum[2]); // m: cxcxcz + hmM_step[3].local[indexCID] += m[0][1][0] - 0.2*(mSum[1]); // m: cxcycx + hmM_step[4].local[indexCID] += m[0][1][1] - 0.2*(mSum[0]); // m: cxcycy + hmM_step[5].local[indexCID] += m[0][1][2]; // m: cxcycz + hmM_step[6].local[indexCID] += m[0][2][0] - 0.2*(mSum[2]); // m: cxczcx + hmM_step[7].local[indexCID] += m[0][2][1]; // m: cxczcy + hmM_step[8].local[indexCID] += m[0][2][2] - 0.2*(mSum[0]); // m: cxczcz + + hmM_step[9].local[indexCID] += m[1][0][0] - 0.2*(mSum[1]); // m: cycxcx + hmM_step[10].local[indexCID] += m[1][0][1] - 0.2*(mSum[0]); // m: cycxcy + hmM_step[11].local[indexCID] += m[1][0][2]; // m: cycxcz + hmM_step[12].local[indexCID] += m[1][1][0] - 0.2*(mSum[0]); // m: cycycx + hmM_step[13].local[indexCID] += m[1][1][1] - 0.6*(mSum[1]); // m: cycycy + hmM_step[14].local[indexCID] += m[1][1][2] - 0.2*(mSum[2]); // m: cycycz + hmM_step[15].local[indexCID] += m[1][2][0]; // m: cyczcx + hmM_step[16].local[indexCID] += m[1][2][1] - 0.2*(mSum[2]); // m: cyczcy + hmM_step[17].local[indexCID] += m[1][2][2] - 0.2*(mSum[1]); // m: cyczcz + + hmM_step[18].local[indexCID] += m[2][0][0] - 0.2*(mSum[2]); // m: czcxcx + hmM_step[19].local[indexCID] += m[2][0][1]; // m: czcxcy + hmM_step[20].local[indexCID] += m[2][0][2] - 0.2*(mSum[0]); // m: czcxcz + hmM_step[21].local[indexCID] += m[2][1][0]; // m: czcycx + hmM_step[22].local[indexCID] += m[2][1][1] - 0.2*(mSum[2]); // m: czcycy + hmM_step[23].local[indexCID] += m[2][1][2] - 0.2*(mSum[1]); // m: czcycz + hmM_step[24].local[indexCID] += m[2][2][0] - 0.2*(mSum[0]); // m: czczcx + hmM_step[25].local[indexCID] += m[2][2][1] - 0.2*(mSum[1]); // m: czczcy + hmM_step[26].local[indexCID] += m[2][2][2] - 0.6*(mSum[2]); // m: czczcz } } + + // delete componentID + if (!_singleComp) { + cids.pop_back(); + } } // Calculate chemical potential @@ -461,11 +504,11 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // and propagates it to other processes if (domainDecomp->getRank() == 0) { for (unsigned long index = 0; index < _lenVector; index++) { - const double v_x = _velocityVect_accum[0].at(index) / _countSamples.at(index); - const double v_y = _velocityVect_accum[1].at(index) / _countSamples.at(index); - const double v_z = _velocityVect_accum[2].at(index) / _countSamples.at(index); + const double v_x = _velocityVect_accum[0][index] / _countSamples[index]; + const double v_y = _velocityVect_accum[1][index] / _countSamples[index]; + const double v_z = _velocityVect_accum[2][index] / _countSamples[index]; double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; - temperature_step_global.at(index) = (2*_ekin_accum.at(index) - v_drift_sqr*_mass_accum.at(index)) / _doftotal_accum.at(index); + temperature_step_global[index] = (2*_ekin_accum[index] - v_drift_sqr*_mass_accum[index]) / _doftotal_accum[index]; } } #ifdef ENABLE_MPI @@ -484,16 +527,16 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, for (unsigned int i = 0; i < _numBinsGlobal; i++) { // Make sure, number of test particles is never zero and number of test particles per direction is at least 1 - const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMolecules_step.global.at(i))); + const unsigned long nTest = std::max(1ul,static_cast(_factorNumTest*numMolecules_step.global[i])); - nY.at(i) = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[2]),(1./3.))); - dY.at(i) = std::min(static_cast(_binwidth/nY.at(i)), static_cast(0.5*regionSize[1])); + nY[i] = std::max(1.0,std::pow((nTest*_binwidth*_binwidth)/(_globalBoxLength[0]*_globalBoxLength[2]),(1./3.))); + dY[i] = std::min(static_cast(_binwidth/nY[i]), static_cast(0.5*regionSize[1])); - nX.at(i) = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); - dX.at(i) = std::min(static_cast(_globalBoxLength[0]/nX.at(i)), static_cast(0.5*regionSize[0])); + nX[i] = std::max(1.0,std::pow((nTest*_globalBoxLength[0]*_globalBoxLength[0])/(_binwidth*_globalBoxLength[2]),(1./3.))); + dX[i] = std::min(static_cast(_globalBoxLength[0]/nX[i]), static_cast(0.5*regionSize[0])); - nZ.at(i) = std::max(1ul,nTest/(nX.at(i)*nY.at(i))); - dZ.at(i) = std::min(static_cast(_globalBoxLength[2]/nZ.at(i)), static_cast(0.5*regionSize[2])); + nZ[i] = std::max(1ul,nTest/(nX[i]*nY[i])); + dZ[i] = std::min(static_cast(_globalBoxLength[2]/nZ[i]), static_cast(0.5*regionSize[2])); nTestGlobal += nTest; } @@ -503,16 +546,16 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // Index of bin in which the left region boundary (y-dir) is in; std::min if particle position is precisely at right boundary const unsigned int idxStart = std::min(_numBinsGlobal, static_cast(regionLowCorner[1]/_binwidth)); - double rY = regionLowCorner[1]+0.5*dY.at(idxStart); + double rY = regionLowCorner[1]+0.5*dY[idxStart]; while (rY < regionHighCorner[1]) { const unsigned int index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin - double rX = regionLowCorner[0]+0.5*dX.at(idxStart); + double rX = regionLowCorner[0]+0.5*dX[idxStart]; while (rX < regionHighCorner[0]) { - double rZ = regionLowCorner[2]+0.5*dZ.at(idxStart); + double rZ = regionLowCorner[2]+0.5*dZ[idxStart]; while (rZ < regionHighCorner[2]) { - if (temperature_step_global.at(index) > 1e-9) { + if (temperature_step_global[index] > 1e-9) { _mTest.setr(0,rX); _mTest.setr(1,rY); _mTest.setr(2,rZ); @@ -521,30 +564,30 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _mTest.setComponent(&(_simulation.getEnsemble()->getComponents()->at(cid-1))); const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor) + 2.0*_simulation.getLongRangeCorrection()->getUpotCorr(&_mTest); - double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); // Global temperature of all components + double chemPot = exp(-deltaUpot/temperature_step_global[index]); // Global temperature of all components if (std::isfinite(chemPot)) { // For component 0 (single component) - chemPot_step.local.at(index) += chemPot; - countNTest_step.local.at(index)++; + chemPot_step.local[index] += chemPot; + countNTest_step.local[index]++; // Also add to specific component record if no single-component-sampling if (!_singleComp) { - chemPot_step.local.at(indexCID) += chemPot; - countNTest_step.local.at(indexCID)++; + chemPot_step.local[indexCID] += chemPot; + countNTest_step.local[indexCID]++; } #ifndef NDEBUG std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) << " ; cid = " << _mTest.componentid() - << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global[index] << " ; index = " << index << std::endl; #endif } } } - rZ += dZ.at(index); + rZ += dZ[index]; } - rX += dX.at(index); + rX += dX[index]; } - rY += dY.at(index); + rY += dY[index]; } } else { // Random insertion @@ -560,7 +603,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const double rY = regionLowCorner[1] + rnd->rnd()*regionSize[1]; const double rZ = regionLowCorner[2] + rnd->rnd()*regionSize[2]; const unsigned int index = std::min(_numBinsGlobal, static_cast(rY/_binwidth)); // Index of bin - if (temperature_step_global.at(index) > 1e-9) { + if (temperature_step_global[index] > 1e-9) { _mTest.setr(0,rX); _mTest.setr(1,rY); _mTest.setr(2,rZ); @@ -569,21 +612,21 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, _mTest.setComponent(&(_simulation.getEnsemble()->getComponents()->at(cid-1))); const double deltaUpot = particleContainer->getEnergy(_particlePairsHandler.get(), &_mTest, *_cellProcessor) + _simulation.getLongRangeCorrection()->getUpotCorr(&_mTest); - double chemPot = exp(-deltaUpot/temperature_step_global.at(index)); + double chemPot = exp(-deltaUpot/temperature_step_global[index]); if (std::isfinite(chemPot)) { // For component 0 (single component) - chemPot_step.local.at(index) += chemPot; - countNTest_step.local.at(index)++; + chemPot_step.local[index] += chemPot; + countNTest_step.local[index]++; // Also add to specific component record if no single-component-sampling if (!_singleComp) { - chemPot_step.local.at(indexCID) += chemPot; - countNTest_step.local.at(indexCID)++; + chemPot_step.local[indexCID] += chemPot; + countNTest_step.local[indexCID]++; } #ifndef NDEBUG std::cout << "[ExtendedProfileSampling] Rank " << domainDecomp->getRank() << " : Inserting molecule at x,y,z = " << _mTest.r(0) << " , " << _mTest.r(1) << " , " << _mTest.r(2) << " ; cid = " << _mTest.componentid() - << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global.at(index) << " ; index = " << index << std::endl; + << " ; chemPot = " << chemPot << " ; dU = " << deltaUpot << " ; T = " << temperature_step_global[index] << " ; index = " << index << std::endl; #endif } } @@ -627,35 +670,35 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, } #else for (unsigned long i = 0; i < _lenVector; i++) { - mass_step.global.at(i) = mass_step.local.at(i); - ekin_step.global.at(i) = ekin_step.local.at(i); - epot_step.global.at(i) = epot_step.local.at(i); - orientation_step.global.at(i) = orientation_step.local.at(i); - virialVect_step[0].global.at(i) = virialVect_step[0].local.at(i); - virialVect_step[1].global.at(i) = virialVect_step[1].local.at(i); - virialVect_step[2].global.at(i) = virialVect_step[2].local.at(i); - forceVect_step[0].global.at(i) = forceVect_step[0].local.at(i); - forceVect_step[1].global.at(i) = forceVect_step[1].local.at(i); - forceVect_step[2].global.at(i) = forceVect_step[2].local.at(i); - ekinVect_step[0].global.at(i) = ekinVect_step[0].local.at(i); - ekinVect_step[1].global.at(i) = ekinVect_step[1].local.at(i); - ekinVect_step[2].global.at(i) = ekinVect_step[2].local.at(i); - energyfluxVect_step[0].global.at(i) = energyfluxVect_step[0].local.at(i); - energyfluxVect_step[1].global.at(i) = energyfluxVect_step[1].local.at(i); - energyfluxVect_step[2].global.at(i) = energyfluxVect_step[2].local.at(i); - chemPot_step.global.at(i) = chemPot_step.local.at(i); - countNTest_step.global.at(i) = countNTest_step.local.at(i); + mass_step.global[i] = mass_step.local[i]; + ekin_step.global[i] = ekin_step.local[i]; + epot_step.global[i] = epot_step.local[i]; + orientation_step.global[i] = orientation_step.local[i]; + virialVect_step[0].global[i] = virialVect_step[0].local[i]; + virialVect_step[1].global[i] = virialVect_step[1].local[i]; + virialVect_step[2].global[i] = virialVect_step[2].local[i]; + forceVect_step[0].global[i] = forceVect_step[0].local[i]; + forceVect_step[1].global[i] = forceVect_step[1].local[i]; + forceVect_step[2].global[i] = forceVect_step[2].local[i]; + ekinVect_step[0].global[i] = ekinVect_step[0].local[i]; + ekinVect_step[1].global[i] = ekinVect_step[1].local[i]; + ekinVect_step[2].global[i] = ekinVect_step[2].local[i]; + energyfluxVect_step[0].global[i] = energyfluxVect_step[0].local[i]; + energyfluxVect_step[1].global[i] = energyfluxVect_step[1].local[i]; + energyfluxVect_step[2].global[i] = energyfluxVect_step[2].local[i]; + chemPot_step.global[i] = chemPot_step.local[i]; + countNTest_step.global[i] = countNTest_step.local[i]; if (_sampleHigherMoms) { - hmDelta_step.global.at(i) = hmDelta_step.local.at(i); + hmDelta_step.global[i] = hmDelta_step.local[i]; for (unsigned short d = 0; d < 3; d++) { - hmHeatflux_step[d].global.at(i) = hmHeatflux_step[d].local.at(i); + hmHeatflux_step[d].global[i] = hmHeatflux_step[d].local[i]; } for (unsigned short d = 0; d < 9; d++) { - hmPressure_step[d].global.at(i) = hmPressure_step[d].local.at(i); - hmR_step[d].global.at(i) = hmR_step[d].local.at(i); - hmM_step[d].global.at(i) = hmM_step[d].local.at(i); - hmM_step[d+9u].global.at(i) = hmM_step[d+9u].local.at(i); - hmM_step[d+18u].global.at(i) = hmM_step[d+18u].local.at(i); + hmPressure_step[d].global[i] = hmPressure_step[d].local[i]; + hmR_step[d].global[i] = hmR_step[d].local[i]; + hmM_step[d].global[i] = hmM_step[d].local[i]; + hmM_step[d+9u].global[i] = hmM_step[d+9u].local[i]; + hmM_step[d+18u].global[i] = hmM_step[d+18u].local[i]; } } } @@ -665,7 +708,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // Accumulate data if (domainDecomp->getRank() == 0) { for (unsigned long i = 0; i < _lenVector; i++) { - const unsigned long numMols = numMolecules_step.global.at(i); + const unsigned long numMols = numMolecules_step.global[i]; const unsigned int cid = i/_numBinsGlobal; unsigned int dof_rot {0}; unsigned int dof_total {0}; @@ -673,7 +716,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, if (cid == 0) { for (unsigned long cj = 0; cj < _numComps; cj++) { dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); - dof_total += (3 + dof_rot)*numMolecules_step.global.at((cj+1)*_numBinsGlobal + i); + dof_total += (3 + dof_rot)*numMolecules_step.global[(cj+1)*_numBinsGlobal + i]; } } else { dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); @@ -685,49 +728,49 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, dof_total = (3 + dof_rot)*numMols; } - const double ViX = virialVect_step[0].global.at(i); - const double ViY = virialVect_step[1].global.at(i); - const double ViZ = virialVect_step[2].global.at(i); - - _doftotal_accum.at(i) += dof_total; - _numMolecules_accum.at(i) += numMols; - _mass_accum.at(i) += mass_step.global.at(i); - _ekin_accum.at(i) += ekin_step.global.at(i); - _epot_accum.at(i) += epot_step.global.at(i); - _orientation_accum.at(i) += orientation_step.global.at(i); - _virial_accum.at(i) += ViX + ViY + ViZ; - _chemPot_accum.at(i) += chemPot_step.global.at(i); - _countNTest_accum.at(i) += countNTest_step.global.at(i); - - _ekinVect_accum[0].at(i) += ekinVect_step[0].global.at(i); - _ekinVect_accum[1].at(i) += ekinVect_step[1].global.at(i); - _ekinVect_accum[2].at(i) += ekinVect_step[2].global.at(i); - _velocityVect_accum[0].at(i) += veloDrift_step_global[0].at(i); - _velocityVect_accum[1].at(i) += veloDrift_step_global[1].at(i); - _velocityVect_accum[2].at(i) += veloDrift_step_global[2].at(i); - _virialVect_accum[0].at(i) += ViX; - _virialVect_accum[1].at(i) += ViY; - _virialVect_accum[2].at(i) += ViZ; - _forceVect_accum[0].at(i) += forceVect_step[0].global.at(i); - _forceVect_accum[1].at(i) += forceVect_step[1].global.at(i); - _forceVect_accum[2].at(i) += forceVect_step[2].global.at(i); - _energyfluxVect_accum[0].at(i) += energyfluxVect_step[0].global.at(i) / _slabVolume; - _energyfluxVect_accum[1].at(i) += energyfluxVect_step[1].global.at(i) / _slabVolume; - _energyfluxVect_accum[2].at(i) += energyfluxVect_step[2].global.at(i) / _slabVolume; - - _countSamples.at(i)++; + const double ViX = virialVect_step[0].global[i]; + const double ViY = virialVect_step[1].global[i]; + const double ViZ = virialVect_step[2].global[i]; + + _doftotal_accum[i] += dof_total; + _numMolecules_accum[i] += numMols; + _mass_accum[i] += mass_step.global[i]; + _ekin_accum[i] += ekin_step.global[i]; + _epot_accum[i] += epot_step.global[i]; + _orientation_accum[i] += orientation_step.global[i]; + _virial_accum[i] += ViX + ViY + ViZ; + _chemPot_accum[i] += chemPot_step.global[i]; + _countNTest_accum[i] += countNTest_step.global[i]; + + _ekinVect_accum[0][i] += ekinVect_step[0].global[i]; + _ekinVect_accum[1][i] += ekinVect_step[1].global[i]; + _ekinVect_accum[2][i] += ekinVect_step[2].global[i]; + _velocityVect_accum[0][i] += veloDrift_step_global[0][i]; + _velocityVect_accum[1][i] += veloDrift_step_global[1][i]; + _velocityVect_accum[2][i] += veloDrift_step_global[2][i]; + _virialVect_accum[0][i] += ViX; + _virialVect_accum[1][i] += ViY; + _virialVect_accum[2][i] += ViZ; + _forceVect_accum[0][i] += forceVect_step[0].global[i]; + _forceVect_accum[1][i] += forceVect_step[1].global[i]; + _forceVect_accum[2][i] += forceVect_step[2].global[i]; + _energyfluxVect_accum[0][i] += energyfluxVect_step[0].global[i] / _slabVolume; + _energyfluxVect_accum[1][i] += energyfluxVect_step[1].global[i] / _slabVolume; + _energyfluxVect_accum[2][i] += energyfluxVect_step[2].global[i] / _slabVolume; + + _countSamples[i]++; if (_sampleHigherMoms) { - _hmDelta_accum.at(i) += hmDelta_step.global.at(i) / _slabVolume; + _hmDelta_accum[i] += hmDelta_step.global[i] / _slabVolume; for (unsigned short d = 0; d < 3; d++) { - _hmHeatflux_accum[d].at(i) += hmHeatflux_step[d].global.at(i) / _slabVolume; + _hmHeatflux_accum[d][i] += hmHeatflux_step[d].global[i] / _slabVolume; } for (unsigned short d = 0; d < 9; d++) { - _hmPressure_accum[d].at(i) += hmPressure_step[d].global.at(i) / _slabVolume; - _hmR_accum[d].at(i) += hmR_step[d].global.at(i) / _slabVolume; - _hmM_accum[d].at(i) += hmM_step[d].global.at(i) / _slabVolume; - _hmM_accum[d+9u].at(i) += hmM_step[d+9u].global.at(i) / _slabVolume; - _hmM_accum[d+18u].at(i) += hmM_step[d+18u].global.at(i) / _slabVolume; + _hmPressure_accum[d][i] += hmPressure_step[d].global[i] / _slabVolume; + _hmR_accum[d][i] += hmR_step[d].global[i] / _slabVolume; + _hmM_accum[d][i] += hmM_step[d].global[i] / _slabVolume; + _hmM_accum[d+9u][i] += hmM_step[d+9u].global[i] / _slabVolume; + _hmM_accum[d+18u][i] += hmM_step[d+18u].global[i] / _slabVolume; } } } @@ -804,42 +847,42 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, double jEF_y {std::nan("0")}; double jEF_z {std::nan("0")}; double numSamples {std::nan("0")}; - if ((_countSamples.at(i) > 0ul) and (_doftotal_accum.at(i)) > 0ul) { - const unsigned long countSamples = _countSamples.at(i); - const double numMols_accum = static_cast(_numMolecules_accum.at(i)); + if ((_countSamples[i] > 0ul) and (_doftotal_accum[i]) > 0ul) { + const unsigned long countSamples = _countSamples[i]; + const double numMols_accum = static_cast(_numMolecules_accum[i]); numMolsPerStep = numMols_accum/countSamples; rho = numMolsPerStep / _slabVolume; - v_x = _velocityVect_accum[0].at(i) / countSamples; - v_y = _velocityVect_accum[1].at(i) / countSamples; - v_z = _velocityVect_accum[2].at(i) / countSamples; + v_x = _velocityVect_accum[0][i] / countSamples; + v_y = _velocityVect_accum[1][i] / countSamples; + v_z = _velocityVect_accum[2][i] / countSamples; double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; - T = (2*_ekin_accum.at(i) - v_drift_sqr*_mass_accum.at(i)) / _doftotal_accum.at(i); - ekin = _ekin_accum.at(i) / numMols_accum; - epot = _epot_accum.at(i) / numMols_accum; - orderparam = 0.5*_orientation_accum.at(i) / numMols_accum;; - p = rho * ( (_virial_accum.at(i))/(3.0*numMols_accum) + T); - - T_x = (2*_ekinVect_accum[0].at(i) - (v_x*v_x)*_mass_accum.at(i)) / numMols_accum; - T_y = (2*_ekinVect_accum[1].at(i) - (v_y*v_y)*_mass_accum.at(i)) / numMols_accum; - T_z = (2*_ekinVect_accum[2].at(i) - (v_z*v_z)*_mass_accum.at(i)) / numMols_accum; - p_x = rho * ( _virialVect_accum[0].at(i)/numMols_accum + T); - p_y = rho * ( _virialVect_accum[1].at(i)/numMols_accum + T); - p_z = rho * ( _virialVect_accum[2].at(i)/numMols_accum + T); - F_x = _forceVect_accum[0].at(i) / numMols_accum; - F_y = _forceVect_accum[1].at(i) / numMols_accum; - F_z = _forceVect_accum[2].at(i) / numMols_accum; - jEF_x = _energyfluxVect_accum[0].at(i) / countSamples; - jEF_y = _energyfluxVect_accum[1].at(i) / countSamples; - jEF_z = _energyfluxVect_accum[2].at(i) / countSamples; + T = (2*_ekin_accum[i] - v_drift_sqr*_mass_accum[i]) / _doftotal_accum[i]; + ekin = _ekin_accum[i] / numMols_accum; + epot = _epot_accum[i] / numMols_accum; + orderparam = 0.5*_orientation_accum[i] / numMols_accum;; + p = rho * ( (_virial_accum[i])/(3.0*numMols_accum) + T); + + T_x = (2*_ekinVect_accum[0][i] - (v_x*v_x)*_mass_accum[i]) / numMols_accum; + T_y = (2*_ekinVect_accum[1][i] - (v_y*v_y)*_mass_accum[i]) / numMols_accum; + T_z = (2*_ekinVect_accum[2][i] - (v_z*v_z)*_mass_accum[i]) / numMols_accum; + p_x = rho * ( _virialVect_accum[0][i]/numMols_accum + T); + p_y = rho * ( _virialVect_accum[1][i]/numMols_accum + T); + p_z = rho * ( _virialVect_accum[2][i]/numMols_accum + T); + F_x = _forceVect_accum[0][i] / numMols_accum; + F_y = _forceVect_accum[1][i] / numMols_accum; + F_z = _forceVect_accum[2][i] / numMols_accum; + jEF_x = _energyfluxVect_accum[0][i] / countSamples; + jEF_y = _energyfluxVect_accum[1][i] / countSamples; + jEF_z = _energyfluxVect_accum[2][i] / countSamples; numSamples = countSamples; } - if ((_chemPot_accum.at(i) > 0.0) and (_countNTest_accum.at(i) > 0ul)) { - numTest = static_cast(_countNTest_accum.at(i)*_samplefrequency) / (2*_writeFrequency); - chemPot_res = -log(_chemPot_accum.at(i)/_countNTest_accum.at(i)) + log(rho); // Implemented in accordance to ms2 + if ((_chemPot_accum[i] > 0.0) and (_countNTest_accum[i] > 0ul)) { + numTest = static_cast(_countNTest_accum[i]*_samplefrequency) / (2*_writeFrequency); + chemPot_res = -log(_chemPot_accum[i]/_countNTest_accum[i]) + log(rho); // Implemented in accordance to ms2 } ofs << FORMAT_SCI_MAX_DIGITS << numMolsPerStep << FORMAT_SCI_MAX_DIGITS << rho @@ -916,17 +959,17 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, std::array p = {0.0}; std::array R = {0.0}; std::array m = {0.0}; - if (_countSamples.at(i) > 0ul) { - delta = _hmDelta_accum.at(i)/_countSamples.at(i); + if (_countSamples[i] > 0ul) { + delta = _hmDelta_accum[i]/_countSamples[i]; for (unsigned short d = 0; d < 3; d++) { - q[d] = _hmHeatflux_accum[d].at(i)/_countSamples.at(i); + q[d] = _hmHeatflux_accum[d][i]/_countSamples[i]; } for (unsigned short d = 0; d < 9; d++) { - p[d] = _hmPressure_accum[d].at(i)/_countSamples.at(i); - R[d] = _hmR_accum[d].at(i)/_countSamples.at(i); - m[d] = _hmM_accum[d].at(i)/_countSamples.at(i); - m[d+9u] = _hmM_accum[d+9u].at(i)/_countSamples.at(i); - m[d+18u] = _hmM_accum[d+18u].at(i)/_countSamples.at(i); + p[d] = _hmPressure_accum[d][i]/_countSamples[i]; + R[d] = _hmR_accum[d][i]/_countSamples[i]; + m[d] = _hmM_accum[d][i]/_countSamples[i]; + m[d+9u] = _hmM_accum[d+9u][i]/_countSamples[i]; + m[d+18u] = _hmM_accum[d+18u][i]/_countSamples[i]; } } ofs << FORMAT_SCI_MAX_DIGITS << delta; @@ -977,11 +1020,11 @@ void ExtendedProfileSampling::resizeVectors() { _countNTest_accum.resize(_lenVector); for (unsigned short d = 0; d < 3; d++) { - _ekinVect_accum.at(d).resize(_lenVector); - _velocityVect_accum.at(d).resize(_lenVector); - _virialVect_accum.at(d).resize(_lenVector); - _forceVect_accum.at(d).resize(_lenVector); - _energyfluxVect_accum.at(d).resize(_lenVector); + _ekinVect_accum[d].resize(_lenVector); + _velocityVect_accum[d].resize(_lenVector); + _virialVect_accum[d].resize(_lenVector); + _forceVect_accum[d].resize(_lenVector); + _energyfluxVect_accum[d].resize(_lenVector); } _countSamples.resize(_lenVector); @@ -989,26 +1032,26 @@ void ExtendedProfileSampling::resizeVectors() { if (_sampleHigherMoms) { _hmDelta_accum.resize(_lenVector); for (unsigned short d = 0; d < 3; d++) { - _hmHeatflux_accum.at(d).resize(_lenVector); + _hmHeatflux_accum[d].resize(_lenVector); } for (unsigned short d = 0; d < 9; d++) { - _hmPressure_accum.at(d).resize(_lenVector); - _hmR_accum.at(d).resize(_lenVector); - _hmM_accum.at(d).resize(_lenVector); - _hmM_accum.at(d+9u).resize(_lenVector); - _hmM_accum.at(d+18u).resize(_lenVector); + _hmPressure_accum[d].resize(_lenVector); + _hmR_accum[d].resize(_lenVector); + _hmM_accum[d].resize(_lenVector); + _hmM_accum[d+9u].resize(_lenVector); + _hmM_accum[d+18u].resize(_lenVector); } } else { _hmDelta_accum.clear(); for (unsigned short d = 0; d < 3; d++) { - _hmHeatflux_accum.at(d).clear(); + _hmHeatflux_accum[d].clear(); } for (unsigned short d = 0; d < 9; d++) { - _hmPressure_accum.at(d).clear(); - _hmR_accum.at(d).clear(); - _hmM_accum.at(d).clear(); - _hmM_accum.at(d+9u).clear(); - _hmM_accum.at(d+18u).clear(); + _hmPressure_accum[d].clear(); + _hmR_accum[d].clear(); + _hmM_accum[d].clear(); + _hmM_accum[d+9u].clear(); + _hmM_accum[d+18u].clear(); } } @@ -1027,11 +1070,11 @@ void ExtendedProfileSampling::resetVectors() { std::fill(_countNTest_accum.begin(), _countNTest_accum.end(), 0ul); for (unsigned short d = 0; d < 3; d++) { - std::fill(_ekinVect_accum.at(d).begin(), _ekinVect_accum.at(d).end(), 0.0f); - std::fill(_velocityVect_accum.at(d).begin(), _velocityVect_accum.at(d).end(), 0.0f); - std::fill(_virialVect_accum.at(d).begin(), _virialVect_accum.at(d).end(), 0.0f); - std::fill(_forceVect_accum.at(d).begin(), _forceVect_accum.at(d).end(), 0.0f); - std::fill(_energyfluxVect_accum.at(d).begin(), _energyfluxVect_accum.at(d).end(), 0.0f); + std::fill(_ekinVect_accum[d].begin(), _ekinVect_accum[d].end(), 0.0f); + std::fill(_velocityVect_accum[d].begin(), _velocityVect_accum[d].end(), 0.0f); + std::fill(_virialVect_accum[d].begin(), _virialVect_accum[d].end(), 0.0f); + std::fill(_forceVect_accum[d].begin(), _forceVect_accum[d].end(), 0.0f); + std::fill(_energyfluxVect_accum[d].begin(), _energyfluxVect_accum[d].end(), 0.0f); } std::fill(_countSamples.begin(), _countSamples.end(), 0ul); @@ -1039,14 +1082,14 @@ void ExtendedProfileSampling::resetVectors() { if (_sampleHigherMoms) { std::fill(_hmDelta_accum.begin(), _hmDelta_accum.end(), 0.0f); for (unsigned short d = 0; d < 3; d++) { - std::fill(_hmHeatflux_accum.at(d).begin(), _hmHeatflux_accum.at(d).end(), 0.0f); + std::fill(_hmHeatflux_accum[d].begin(), _hmHeatflux_accum[d].end(), 0.0f); } for (unsigned short d = 0; d < 9; d++) { - std::fill(_hmPressure_accum.at(d).begin(), _hmPressure_accum.at(d).end(), 0.0f); - std::fill(_hmR_accum.at(d).begin(), _hmR_accum.at(d).end(), 0.0f); - std::fill(_hmM_accum.at(d).begin(), _hmM_accum.at(d).end(), 0.0f); - std::fill(_hmM_accum.at(d+9u).begin(), _hmM_accum.at(d+9u).end(), 0.0f); - std::fill(_hmM_accum.at(d+18u).begin(), _hmM_accum.at(d+18u).end(), 0.0f); + std::fill(_hmPressure_accum[d].begin(), _hmPressure_accum[d].end(), 0.0f); + std::fill(_hmR_accum[d].begin(), _hmR_accum[d].end(), 0.0f); + std::fill(_hmM_accum[d].begin(), _hmM_accum[d].end(), 0.0f); + std::fill(_hmM_accum[d+9u].begin(), _hmM_accum[d+9u].end(), 0.0f); + std::fill(_hmM_accum[d+18u].begin(), _hmM_accum[d+18u].end(), 0.0f); } } } @@ -1063,21 +1106,21 @@ double ExtendedProfileSampling::getQuantity(DomainDecompBase* domainDecomp, std: return 0.0; } - if (_countSamples.at(index) == 0) { + if (_countSamples[index] == 0) { Log::global_log->error() << "[ExtendedProfileSampling] Nothing sampled yet at given index" << std::endl; return 0.0; } if (quantityName == "T") { - const double v_x = _velocityVect_accum[0].at(index) / _countSamples.at(index); - const double v_y = _velocityVect_accum[1].at(index) / _countSamples.at(index); - const double v_z = _velocityVect_accum[2].at(index) / _countSamples.at(index); + const double v_x = _velocityVect_accum[0][index] / _countSamples[index]; + const double v_y = _velocityVect_accum[1][index] / _countSamples[index]; + const double v_z = _velocityVect_accum[2][index] / _countSamples[index]; double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; - return (2*_ekin_accum.at(index) - v_drift_sqr*_mass_accum.at(index)) / _doftotal_accum.at(index); + return (2*_ekin_accum[index] - v_drift_sqr*_mass_accum[index]) / _doftotal_accum[index]; } else if (quantityName == "rho") { - return _numMolecules_accum.at(index) / (_slabVolume * _countSamples.at(index)); + return _numMolecules_accum[index] / (_slabVolume * _countSamples[index]); } else if (quantityName == "ekin") { - return _ekin_accum.at(index) / _countSamples.at(index); + return _ekin_accum[index] / _countSamples[index]; } Log::global_log->error() << "[ExtendedProfileSampling] Quantity (" << quantityName << ") unknown!" << std::endl; From 07acfdc5178cb93e79f517d5728b18ed8499edcd Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 19 Oct 2023 10:41:15 +0200 Subject: [PATCH 73/76] Fix in ExtProfileSampling --- src/plugins/ExtendedProfileSampling.cpp | 116 ++++++++++++------------ 1 file changed, 59 insertions(+), 57 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index bcb5eeeb80..e233e345cb 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -709,68 +709,70 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, if (domainDecomp->getRank() == 0) { for (unsigned long i = 0; i < _lenVector; i++) { const unsigned long numMols = numMolecules_step.global[i]; - const unsigned int cid = i/_numBinsGlobal; - unsigned int dof_rot {0}; - unsigned int dof_total {0}; - if (!_singleComp) { - if (cid == 0) { - for (unsigned long cj = 0; cj < _numComps; cj++) { - dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); - dof_total += (3 + dof_rot)*numMolecules_step.global[(cj+1)*_numBinsGlobal + i]; + if (numMols > 0ul) { + const unsigned int cid = i/_numBinsGlobal; + unsigned int dof_rot {0}; + unsigned int dof_total {0}; + if (!_singleComp) { + if (cid == 0) { + for (unsigned long cj = 0; cj < _numComps; cj++) { + dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); + dof_total += (3 + dof_rot)*numMolecules_step.global[(cj+1)*_numBinsGlobal + i]; + } + } else { + dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); + dof_total = (3 + dof_rot)*numMols; } } else { - dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); + // For single component sampling, the rot. DOF of component 0 is taken + dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); dof_total = (3 + dof_rot)*numMols; } - } else { - // For single component sampling, the rot. DOF of component 0 is taken - dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); - dof_total = (3 + dof_rot)*numMols; - } - - const double ViX = virialVect_step[0].global[i]; - const double ViY = virialVect_step[1].global[i]; - const double ViZ = virialVect_step[2].global[i]; - - _doftotal_accum[i] += dof_total; - _numMolecules_accum[i] += numMols; - _mass_accum[i] += mass_step.global[i]; - _ekin_accum[i] += ekin_step.global[i]; - _epot_accum[i] += epot_step.global[i]; - _orientation_accum[i] += orientation_step.global[i]; - _virial_accum[i] += ViX + ViY + ViZ; - _chemPot_accum[i] += chemPot_step.global[i]; - _countNTest_accum[i] += countNTest_step.global[i]; - - _ekinVect_accum[0][i] += ekinVect_step[0].global[i]; - _ekinVect_accum[1][i] += ekinVect_step[1].global[i]; - _ekinVect_accum[2][i] += ekinVect_step[2].global[i]; - _velocityVect_accum[0][i] += veloDrift_step_global[0][i]; - _velocityVect_accum[1][i] += veloDrift_step_global[1][i]; - _velocityVect_accum[2][i] += veloDrift_step_global[2][i]; - _virialVect_accum[0][i] += ViX; - _virialVect_accum[1][i] += ViY; - _virialVect_accum[2][i] += ViZ; - _forceVect_accum[0][i] += forceVect_step[0].global[i]; - _forceVect_accum[1][i] += forceVect_step[1].global[i]; - _forceVect_accum[2][i] += forceVect_step[2].global[i]; - _energyfluxVect_accum[0][i] += energyfluxVect_step[0].global[i] / _slabVolume; - _energyfluxVect_accum[1][i] += energyfluxVect_step[1].global[i] / _slabVolume; - _energyfluxVect_accum[2][i] += energyfluxVect_step[2].global[i] / _slabVolume; - - _countSamples[i]++; - if (_sampleHigherMoms) { - _hmDelta_accum[i] += hmDelta_step.global[i] / _slabVolume; - for (unsigned short d = 0; d < 3; d++) { - _hmHeatflux_accum[d][i] += hmHeatflux_step[d].global[i] / _slabVolume; - } - for (unsigned short d = 0; d < 9; d++) { - _hmPressure_accum[d][i] += hmPressure_step[d].global[i] / _slabVolume; - _hmR_accum[d][i] += hmR_step[d].global[i] / _slabVolume; - _hmM_accum[d][i] += hmM_step[d].global[i] / _slabVolume; - _hmM_accum[d+9u][i] += hmM_step[d+9u].global[i] / _slabVolume; - _hmM_accum[d+18u][i] += hmM_step[d+18u].global[i] / _slabVolume; + const double ViX = virialVect_step[0].global[i]; + const double ViY = virialVect_step[1].global[i]; + const double ViZ = virialVect_step[2].global[i]; + + _doftotal_accum[i] += dof_total; + _numMolecules_accum[i] += numMols; + _mass_accum[i] += mass_step.global[i]; + _ekin_accum[i] += ekin_step.global[i]; + _epot_accum[i] += epot_step.global[i]; + _orientation_accum[i] += orientation_step.global[i]; + _virial_accum[i] += ViX + ViY + ViZ; + _chemPot_accum[i] += chemPot_step.global[i]; + _countNTest_accum[i] += countNTest_step.global[i]; + + _ekinVect_accum[0][i] += ekinVect_step[0].global[i]; + _ekinVect_accum[1][i] += ekinVect_step[1].global[i]; + _ekinVect_accum[2][i] += ekinVect_step[2].global[i]; + _velocityVect_accum[0][i] += veloDrift_step_global[0][i]; + _velocityVect_accum[1][i] += veloDrift_step_global[1][i]; + _velocityVect_accum[2][i] += veloDrift_step_global[2][i]; + _virialVect_accum[0][i] += ViX; + _virialVect_accum[1][i] += ViY; + _virialVect_accum[2][i] += ViZ; + _forceVect_accum[0][i] += forceVect_step[0].global[i]; + _forceVect_accum[1][i] += forceVect_step[1].global[i]; + _forceVect_accum[2][i] += forceVect_step[2].global[i]; + _energyfluxVect_accum[0][i] += energyfluxVect_step[0].global[i] / _slabVolume; + _energyfluxVect_accum[1][i] += energyfluxVect_step[1].global[i] / _slabVolume; + _energyfluxVect_accum[2][i] += energyfluxVect_step[2].global[i] / _slabVolume; + + _countSamples[i]++; + + if (_sampleHigherMoms) { + _hmDelta_accum[i] += hmDelta_step.global[i] / _slabVolume; + for (unsigned short d = 0; d < 3; d++) { + _hmHeatflux_accum[d][i] += hmHeatflux_step[d].global[i] / _slabVolume; + } + for (unsigned short d = 0; d < 9; d++) { + _hmPressure_accum[d][i] += hmPressure_step[d].global[i] / _slabVolume; + _hmR_accum[d][i] += hmR_step[d].global[i] / _slabVolume; + _hmM_accum[d][i] += hmM_step[d].global[i] / _slabVolume; + _hmM_accum[d+9u][i] += hmM_step[d+9u].global[i] / _slabVolume; + _hmM_accum[d+18u][i] += hmM_step[d+18u].global[i] / _slabVolume; + } } } } From c3affd0f278e542ad62a20182b96ec16fa93cf4c Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 19 Oct 2023 11:52:31 +0200 Subject: [PATCH 74/76] Minor fixes --- src/plugins/ExtendedProfileSampling.cpp | 8 +-- tools/ppls1/ppls1/fluids/ljts/ljts.py | 96 +++++++++++++++++++++++-- 2 files changed, 94 insertions(+), 10 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index e233e345cb..53037b7692 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -853,7 +853,7 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, const unsigned long countSamples = _countSamples[i]; const double numMols_accum = static_cast(_numMolecules_accum[i]); - numMolsPerStep = numMols_accum/countSamples; + numMolsPerStep = numMols_accum/_writeFrequency; rho = numMolsPerStep / _slabVolume; v_x = _velocityVect_accum[0][i] / countSamples; v_y = _velocityVect_accum[1][i] / countSamples; @@ -876,9 +876,9 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, F_x = _forceVect_accum[0][i] / numMols_accum; F_y = _forceVect_accum[1][i] / numMols_accum; F_z = _forceVect_accum[2][i] / numMols_accum; - jEF_x = _energyfluxVect_accum[0][i] / countSamples; - jEF_y = _energyfluxVect_accum[1][i] / countSamples; - jEF_z = _energyfluxVect_accum[2][i] / countSamples; + jEF_x = _energyfluxVect_accum[0][i] / _writeFrequency; + jEF_y = _energyfluxVect_accum[1][i] / _writeFrequency; + jEF_z = _energyfluxVect_accum[2][i] / _writeFrequency; numSamples = countSamples; } diff --git a/tools/ppls1/ppls1/fluids/ljts/ljts.py b/tools/ppls1/ppls1/fluids/ljts/ljts.py index 4d133e708b..5b3d3fcd3c 100644 --- a/tools/ppls1/ppls1/fluids/ljts/ljts.py +++ b/tools/ppls1/ppls1/fluids/ljts/ljts.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import numpy as np +import pandas as pd #%% Get surface tension of LJTS fluid with correlation by Vrabec et al., Molecular Physics 104 (2006), DOI: 10.1080/00268970600556774 @@ -21,22 +22,105 @@ def gamma_vrabec2006(T): #%% Get saturated densities and pressure by Vrabec et al., Molecular Physics 104 (2006), DOI: 10.1080/00268970600556774. -def sat_vrabec2006(T, radius=None): +def sat_vrabec2006(T): ''' - Get saturated densities by Vrabec et al., Molecular Physics 104 (2006). Equation numbers refer this paper. + Get saturated densities by Vrabec et al., Molecular Physics 104 (2006) :param float T: Temperature - :param float radius: reduced radius of spherical interface :return: float rhol, float rhov, float pv: Saturated liquid and vapor density and pressure ''' tc,rc=1.0779,0.3190 dt=tc-T a,b,c=0.5649,0.1314,0.0413 - rhol=rc+a*dt**(1/3.)+b*dt+c*dt**(3/2.) # equation 4 + rhol=rc+a*dt**(1/3.)+b*dt+c*dt**(3/2.) a,b,c=0.5649,0.2128,0.0702 rhov=rc-a*dt**(1/3.)+b*dt+c*dt**(3/2.) - return rhol,rhov + a,b,c=3.1664,5.9809,0.01498 + pv = np.exp(a - b/T + c/(T**(3))) + return rhol,rhov,pv + + +#%% Get saturated densities by Thol et al., Int J Thermophys 36 (2015), DOI: 10.1007/s10765-014-1764-4. +def sat_thol2015(T): + ''' + Get saturated densities by Thol et al., Int J Thermophys 36 (2015) + + :param float T: Temperature + :return: float rhol, float rhov: Saturated liquid and vapor density + ''' + + coeff = {"pv" : np.array([-6.21,1.5,-1.92,2.2,-4.76]), + "rhol": np.array([1.45,-0.172,-0.298,0.295]), + "rhov": np.array([1.59809,-0.09975,-0.4774,-2.33736])} + exp = {"pv" : np.array([1,1.5,3.25,4.85,6.63]), + "rhol" : np.array([0.334,0.667,1.25,1.92]), + "rhov" : np.array([1,1.5,5.94,0.41452])} + + crit1 = {"pv" : 1.086 , "rhol" : 1.086 , "rhov" : 1.086} + crit2 = {"pv" : 0.101 , "rhol" : 0.319 , "rhov" : 0.319} + + summe = sum(coeff['rhol']*(1.0 - T/crit1['rhol'])**exp['rhol']) + rhol = crit2['rhol']*np.exp(summe) + + summe = sum(coeff['rhov']*(1.0 - T/crit1['rhov'])**exp['rhov']) + rhov = crit2['rhov']*(1.0 + summe) + + summe = sum(coeff['pv']*(1.0 - T/crit1['pv'])**exp['pv']) + pv = crit2['pv']*np.exp(crit1['pv']/T*summe) + + return rhol,rhov,pv + + +#%% Convert Gibbs free energy from PeTS to ms2 value +def g_PeTS2ms2(g_pets, T, rho): + ''' + Convert Gibbs free energy from PeTS to ms2 value + + :param float g_pets: Gibbs free energy from PeTS + :param float T: Temperature + :param float rho: Density + :return: float g_ms2: Gibbs free energy from ms2 + ''' + + rhocrit = 0.319 + Tcrit = 1.086 + delta0 = (0.001/0.8)/rhocrit + tau0 = Tcrit/0.8 + ig1 = 0.0 # Originally in PeTS: -2.5/tau0 + ig2 = 1.5 - np.log(delta0) - 1.5*np.log(tau0) + tau = Tcrit/T + delta = rho/rhocrit + alphaId = np.log(delta) + 1.5*np.log(tau) + ig1*tau + ig2 + g_res = g_pets/T - 1.0 - alphaId + g_ms2 = g_res + np.log(rho) + return g_ms2 + + +#%% Convert Gibbs free energy from ms2 to PeTS value +def g_ms22PeTS(g_ms2, T, rho): + ''' + Convert Gibbs free energy from ms2 to PeTS value + + :param float g_ms2: Gibbs free energy from ms2 + :param float T: Temperature + :param float rho: Density + :return: float g_pets: Gibbs free energy from PeTS + ''' + + rhocrit = 0.319 + Tcrit = 1.086 + delta0 = (0.001/0.8)/rhocrit + tau0 = Tcrit/0.8 + ig1 = 0.0 # Originally in PeTS: -2.5/tau0 + ig2 = 1.5 - np.log(delta0) - 1.5*np.log(tau0) + tau = Tcrit/T + delta = rho/rhocrit + alphaId = np.log(delta) + 1.5*np.log(tau) + ig1*tau + ig2 + g_res = g_ms2 - np.log(rho) + g_pets = T*(1.0 + alphaId + g_res) + return g_pets + if __name__ == "__main__": print('Running test with T = 0.8 ...') @@ -53,4 +137,4 @@ def sat_vrabec2006(T, radius=None): print('Vapor pressure (Thol2015): '+str(pv_thol)) print('gamma Vrabec2006: '+str(gamma_vrabec2006(T))) - + \ No newline at end of file From 334a32dd5deb05dfc5d0e46cb41dde97932e75ba Mon Sep 17 00:00:00 2001 From: HomesGH Date: Thu, 19 Oct 2023 12:03:48 +0200 Subject: [PATCH 75/76] Fix in EPS --- src/plugins/ExtendedProfileSampling.cpp | 116 ++++++++++++------------ 1 file changed, 57 insertions(+), 59 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index 53037b7692..b402216567 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -709,70 +709,68 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, if (domainDecomp->getRank() == 0) { for (unsigned long i = 0; i < _lenVector; i++) { const unsigned long numMols = numMolecules_step.global[i]; - if (numMols > 0ul) { - const unsigned int cid = i/_numBinsGlobal; - unsigned int dof_rot {0}; - unsigned int dof_total {0}; - if (!_singleComp) { - if (cid == 0) { - for (unsigned long cj = 0; cj < _numComps; cj++) { - dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); - dof_total += (3 + dof_rot)*numMolecules_step.global[(cj+1)*_numBinsGlobal + i]; - } - } else { - dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); - dof_total = (3 + dof_rot)*numMols; + const unsigned int cid = i/_numBinsGlobal; + unsigned int dof_rot {0}; + unsigned int dof_total {0}; + if (!_singleComp) { + if (cid == 0) { + for (unsigned long cj = 0; cj < _numComps; cj++) { + dof_rot = _simulation.getEnsemble()->getComponent(cj)->getRotationalDegreesOfFreedom(); + dof_total += (3 + dof_rot)*numMolecules_step.global[(cj+1)*_numBinsGlobal + i]; } } else { - // For single component sampling, the rot. DOF of component 0 is taken - dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); + dof_rot = _simulation.getEnsemble()->getComponent(cid-1)->getRotationalDegreesOfFreedom(); dof_total = (3 + dof_rot)*numMols; } + } else { + // For single component sampling, the rot. DOF of component 0 is taken + dof_rot = _simulation.getEnsemble()->getComponent(0)->getRotationalDegreesOfFreedom(); + dof_total = (3 + dof_rot)*numMols; + } - const double ViX = virialVect_step[0].global[i]; - const double ViY = virialVect_step[1].global[i]; - const double ViZ = virialVect_step[2].global[i]; - - _doftotal_accum[i] += dof_total; - _numMolecules_accum[i] += numMols; - _mass_accum[i] += mass_step.global[i]; - _ekin_accum[i] += ekin_step.global[i]; - _epot_accum[i] += epot_step.global[i]; - _orientation_accum[i] += orientation_step.global[i]; - _virial_accum[i] += ViX + ViY + ViZ; - _chemPot_accum[i] += chemPot_step.global[i]; - _countNTest_accum[i] += countNTest_step.global[i]; - - _ekinVect_accum[0][i] += ekinVect_step[0].global[i]; - _ekinVect_accum[1][i] += ekinVect_step[1].global[i]; - _ekinVect_accum[2][i] += ekinVect_step[2].global[i]; - _velocityVect_accum[0][i] += veloDrift_step_global[0][i]; - _velocityVect_accum[1][i] += veloDrift_step_global[1][i]; - _velocityVect_accum[2][i] += veloDrift_step_global[2][i]; - _virialVect_accum[0][i] += ViX; - _virialVect_accum[1][i] += ViY; - _virialVect_accum[2][i] += ViZ; - _forceVect_accum[0][i] += forceVect_step[0].global[i]; - _forceVect_accum[1][i] += forceVect_step[1].global[i]; - _forceVect_accum[2][i] += forceVect_step[2].global[i]; - _energyfluxVect_accum[0][i] += energyfluxVect_step[0].global[i] / _slabVolume; - _energyfluxVect_accum[1][i] += energyfluxVect_step[1].global[i] / _slabVolume; - _energyfluxVect_accum[2][i] += energyfluxVect_step[2].global[i] / _slabVolume; - - _countSamples[i]++; - - if (_sampleHigherMoms) { - _hmDelta_accum[i] += hmDelta_step.global[i] / _slabVolume; - for (unsigned short d = 0; d < 3; d++) { - _hmHeatflux_accum[d][i] += hmHeatflux_step[d].global[i] / _slabVolume; - } - for (unsigned short d = 0; d < 9; d++) { - _hmPressure_accum[d][i] += hmPressure_step[d].global[i] / _slabVolume; - _hmR_accum[d][i] += hmR_step[d].global[i] / _slabVolume; - _hmM_accum[d][i] += hmM_step[d].global[i] / _slabVolume; - _hmM_accum[d+9u][i] += hmM_step[d+9u].global[i] / _slabVolume; - _hmM_accum[d+18u][i] += hmM_step[d+18u].global[i] / _slabVolume; - } + const double ViX = virialVect_step[0].global[i]; + const double ViY = virialVect_step[1].global[i]; + const double ViZ = virialVect_step[2].global[i]; + + _doftotal_accum[i] += dof_total; + _numMolecules_accum[i] += numMols; + _mass_accum[i] += mass_step.global[i]; + _ekin_accum[i] += ekin_step.global[i]; + _epot_accum[i] += epot_step.global[i]; + _orientation_accum[i] += orientation_step.global[i]; + _virial_accum[i] += ViX + ViY + ViZ; + _chemPot_accum[i] += chemPot_step.global[i]; + _countNTest_accum[i] += countNTest_step.global[i]; + + _ekinVect_accum[0][i] += ekinVect_step[0].global[i]; + _ekinVect_accum[1][i] += ekinVect_step[1].global[i]; + _ekinVect_accum[2][i] += ekinVect_step[2].global[i]; + _velocityVect_accum[0][i] += veloDrift_step_global[0][i]; + _velocityVect_accum[1][i] += veloDrift_step_global[1][i]; + _velocityVect_accum[2][i] += veloDrift_step_global[2][i]; + _virialVect_accum[0][i] += ViX; + _virialVect_accum[1][i] += ViY; + _virialVect_accum[2][i] += ViZ; + _forceVect_accum[0][i] += forceVect_step[0].global[i]; + _forceVect_accum[1][i] += forceVect_step[1].global[i]; + _forceVect_accum[2][i] += forceVect_step[2].global[i]; + _energyfluxVect_accum[0][i] += energyfluxVect_step[0].global[i] / _slabVolume; + _energyfluxVect_accum[1][i] += energyfluxVect_step[1].global[i] / _slabVolume; + _energyfluxVect_accum[2][i] += energyfluxVect_step[2].global[i] / _slabVolume; + + if (numMols > 0ul) { _countSamples[i]++; } + + if (_sampleHigherMoms) { + _hmDelta_accum[i] += hmDelta_step.global[i] / _slabVolume; + for (unsigned short d = 0; d < 3; d++) { + _hmHeatflux_accum[d][i] += hmHeatflux_step[d].global[i] / _slabVolume; + } + for (unsigned short d = 0; d < 9; d++) { + _hmPressure_accum[d][i] += hmPressure_step[d].global[i] / _slabVolume; + _hmR_accum[d][i] += hmR_step[d].global[i] / _slabVolume; + _hmM_accum[d][i] += hmM_step[d].global[i] / _slabVolume; + _hmM_accum[d+9u][i] += hmM_step[d+9u].global[i] / _slabVolume; + _hmM_accum[d+18u][i] += hmM_step[d+18u].global[i] / _slabVolume; } } } From d2b95831e7d75a44832c37ec570061a48413cc3f Mon Sep 17 00:00:00 2001 From: HomesGH Date: Fri, 20 Oct 2023 14:56:43 +0200 Subject: [PATCH 76/76] Fix in higher moments and unit test --- src/plugins/ExtendedProfileSampling.cpp | 48 +++++++++++-------- src/plugins/ExtendedProfileSampling.h | 2 +- .../tests/ExtendedProfileSamplingTest.cpp | 12 ++--- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/plugins/ExtendedProfileSampling.cpp b/src/plugins/ExtendedProfileSampling.cpp index b402216567..708c19bb84 100644 --- a/src/plugins/ExtendedProfileSampling.cpp +++ b/src/plugins/ExtendedProfileSampling.cpp @@ -504,11 +504,15 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, // and propagates it to other processes if (domainDecomp->getRank() == 0) { for (unsigned long index = 0; index < _lenVector; index++) { - const double v_x = _velocityVect_accum[0][index] / _countSamples[index]; - const double v_y = _velocityVect_accum[1][index] / _countSamples[index]; - const double v_z = _velocityVect_accum[2][index] / _countSamples[index]; - double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; - temperature_step_global[index] = (2*_ekin_accum[index] - v_drift_sqr*_mass_accum[index]) / _doftotal_accum[index]; + if (_countSamples[index] > 0ul) { + const double v_x = _velocityVect_accum[0][index] / _countSamples[index]; + const double v_y = _velocityVect_accum[1][index] / _countSamples[index]; + const double v_z = _velocityVect_accum[2][index] / _countSamples[index]; + double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; + temperature_step_global[index] = (2*_ekin_accum[index] - v_drift_sqr*_mass_accum[index]) / _doftotal_accum[index]; + } else { + temperature_step_global[index] = 0.0; + } } } #ifdef ENABLE_MPI @@ -954,23 +958,20 @@ void ExtendedProfileSampling::afterForces(ParticleContainer* particleContainer, ofs << FORMAT_SCI_MAX_DIGITS << (idx+0.5)*_binwidth; for (unsigned long cid = 0; cid < numOutputs; cid++) { unsigned long i = idx + cid*_numBinsGlobal; - double delta {0.0}; std::array q = {0.0}; std::array p = {0.0}; std::array R = {0.0}; std::array m = {0.0}; - if (_countSamples[i] > 0ul) { - delta = _hmDelta_accum[i]/_countSamples[i]; - for (unsigned short d = 0; d < 3; d++) { - q[d] = _hmHeatflux_accum[d][i]/_countSamples[i]; - } - for (unsigned short d = 0; d < 9; d++) { - p[d] = _hmPressure_accum[d][i]/_countSamples[i]; - R[d] = _hmR_accum[d][i]/_countSamples[i]; - m[d] = _hmM_accum[d][i]/_countSamples[i]; - m[d+9u] = _hmM_accum[d+9u][i]/_countSamples[i]; - m[d+18u] = _hmM_accum[d+18u][i]/_countSamples[i]; - } + double delta = _hmDelta_accum[i]/_writeFrequency; + for (unsigned short d = 0; d < 3; d++) { + q[d] = _hmHeatflux_accum[d][i]/_writeFrequency; + } + for (unsigned short d = 0; d < 9; d++) { + p[d] = _hmPressure_accum[d][i]/_writeFrequency; + R[d] = _hmR_accum[d][i]/_writeFrequency; + m[d] = _hmM_accum[d][i]/_writeFrequency; + m[d+9u] = _hmM_accum[d+9u][i]/_writeFrequency; + m[d+18u] = _hmM_accum[d+18u][i]/_writeFrequency; } ofs << FORMAT_SCI_MAX_DIGITS << delta; // key k_i and value v_i @@ -1095,7 +1096,7 @@ void ExtendedProfileSampling::resetVectors() { } // Get value of quantity at certain index; Mainly used for unit test -double ExtendedProfileSampling::getQuantity(DomainDecompBase* domainDecomp, std::string quantityName, unsigned long index) { +double ExtendedProfileSampling::getQuantity(DomainDecompBase* domainDecomp, std::string quantityName, unsigned long index, unsigned long simstep) { if (index > _lenVector) { Log::global_log->error() << "[ExtendedProfileSampling] Trying to get value but index (" << index << ") is greater than possible (" << _lenVector << ")" << std::endl; return 0.0; @@ -1111,6 +1112,11 @@ double ExtendedProfileSampling::getQuantity(DomainDecompBase* domainDecomp, std: return 0.0; } + if (simstep <= _startSampling) { + Log::global_log->error() << "[ExtendedProfileSampling] Sampling not possible for simstep<=_startSampling" << std::endl; + return 0.0; + } + if (quantityName == "T") { const double v_x = _velocityVect_accum[0][index] / _countSamples[index]; const double v_y = _velocityVect_accum[1][index] / _countSamples[index]; @@ -1118,9 +1124,9 @@ double ExtendedProfileSampling::getQuantity(DomainDecompBase* domainDecomp, std: double v_drift_sqr = v_x*v_x + v_y*v_y + v_z*v_z; return (2*_ekin_accum[index] - v_drift_sqr*_mass_accum[index]) / _doftotal_accum[index]; } else if (quantityName == "rho") { - return _numMolecules_accum[index] / (_slabVolume * _countSamples[index]); + return _numMolecules_accum[index] / (_slabVolume * ((simstep-_startSampling)%_writeFrequency)); } else if (quantityName == "ekin") { - return _ekin_accum[index] / _countSamples[index]; + return _ekin_accum[index] / static_cast(_numMolecules_accum[index]); } Log::global_log->error() << "[ExtendedProfileSampling] Quantity (" << quantityName << ") unknown!" << std::endl; diff --git a/src/plugins/ExtendedProfileSampling.h b/src/plugins/ExtendedProfileSampling.h index 34bd3356b2..33534d21bd 100755 --- a/src/plugins/ExtendedProfileSampling.h +++ b/src/plugins/ExtendedProfileSampling.h @@ -126,7 +126,7 @@ class ExtendedProfileSampling : public PluginBase { static PluginBase* createInstance() { return new ExtendedProfileSampling(); } // Get value of quantity at certain index; Mainly used for unit test - double getQuantity(DomainDecompBase* domainDecomp, std::string quantityName, unsigned long index); + double getQuantity(DomainDecompBase* domainDecomp, std::string quantityName, unsigned long index, unsigned long simstep); }; diff --git a/src/plugins/tests/ExtendedProfileSamplingTest.cpp b/src/plugins/tests/ExtendedProfileSamplingTest.cpp index c0f8ded10e..a94ff70b59 100755 --- a/src/plugins/tests/ExtendedProfileSamplingTest.cpp +++ b/src/plugins/tests/ExtendedProfileSamplingTest.cpp @@ -49,17 +49,17 @@ void ExtendedProfileSamplingTest::testEPSampling() { // Default binwidth is 1 and global domain length of test system is 20; therefore 20 bins in total for (unsigned int i = 0; i < 20; i++) { - const double temp_actual_all = plugin->getQuantity(_domainDecomposition, "T", i); - const double rho_actual_all = plugin->getQuantity(_domainDecomposition, "rho", i); - const double ekin_actual_all = plugin->getQuantity(_domainDecomposition, "ekin", i); + const double temp_actual_all = plugin->getQuantity(_domainDecomposition, "T", i, 1ul); + const double rho_actual_all = plugin->getQuantity(_domainDecomposition, "rho", i, 1ul); + const double ekin_actual_all = plugin->getQuantity(_domainDecomposition, "ekin", i, 1ul); ASSERT_DOUBLES_EQUAL_MSG("Temperature at index "+std::to_string(i)+" not as expected", temp_expected[i], temp_actual_all, delta); ASSERT_DOUBLES_EQUAL_MSG("Temperature at index "+std::to_string(i)+" not as expected", temp_expected[i], temp_actual_all, delta); ASSERT_DOUBLES_EQUAL_MSG("Temperature at index "+std::to_string(i)+" not as expected", temp_expected[i], temp_actual_all, delta); // As there is only one component in the test system, the componentwise and overall values are supposed to be equal - const double temp_actual_cid1 = plugin->getQuantity(_domainDecomposition, "T", i+20u); - const double rho_actual_cid1 = plugin->getQuantity(_domainDecomposition, "rho", i+20u); - const double ekin_actual_cid1 = plugin->getQuantity(_domainDecomposition, "ekin", i+20u); + const double temp_actual_cid1 = plugin->getQuantity(_domainDecomposition, "T", i+20u, 1ul); + const double rho_actual_cid1 = plugin->getQuantity(_domainDecomposition, "rho", i+20u, 1ul); + const double ekin_actual_cid1 = plugin->getQuantity(_domainDecomposition, "ekin", i+20u, 1ul); ASSERT_DOUBLES_EQUAL(temp_actual_all, temp_actual_cid1, delta); ASSERT_DOUBLES_EQUAL(rho_actual_all, rho_actual_cid1, delta); ASSERT_DOUBLES_EQUAL(ekin_actual_all, ekin_actual_cid1, delta);

    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 czFOps(nd5S)wnhM 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

  • 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