void CSysGhost::initialise(size_t nID) { ID = nID; meanFreeTime /= Sim->N; dt = getGhostt(); sqrtTemp = sqrt(Temp); }
void SysAndersen::initialise(size_t nID) { ID = nID; dt = getGhostt(); sqrtTemp = sqrt(Temp); eventCount = 0; lastlNColl = 0; }
void CSysGhost::runEvent() const { ++Sim->eventCount; ++eventCount; if (tune && (eventCount > setFrequency)) { meanFreeTime *= static_cast<double>(eventCount) / ((Sim->eventCount - lastlNColl) * setPoint); lastlNColl = Sim->eventCount; eventCount = 0; } double locdt = dt; #ifdef DYNAMO_DEBUG if (boost::math::isnan(locdt)) M_throw() << "A NAN system event time has been found"; #endif Sim->dSysTime += locdt; Sim->ptrScheduler->stream(locdt); Sim->dynamics.stream(locdt); locdt += Sim->freestreamAcc; Sim->freestreamAcc = 0; dt = getGhostt(); unsigned int step = boost::variate_generator <dynamo::baseRNG&, boost::uniform_int<unsigned int> > (Sim->ranGenerator, boost::uniform_int<unsigned int>(0, range->size() - 1))(); const Particle& part(Sim->particleList[*(range->begin()+step)]); //Run the collision and catch the data NEventData SDat(Sim->dynamics.getLiouvillean().randomGaussianEvent (part, sqrtTemp)); Sim->signalParticleUpdate(SDat); Sim->ptrScheduler->fullUpdate(part); BOOST_FOREACH(std::tr1::shared_ptr<OutputPlugin>& Ptr, Sim->outputPlugins) Ptr->eventUpdate(*this, SDat, locdt); }
NEventData SysAndersen::runEvent() { ++Sim->eventCount; ++eventCount; if (tune && (eventCount > setFrequency)) { meanFreeTime *= static_cast<double>(eventCount) / ((Sim->eventCount - lastlNColl) * setPoint); lastlNColl = Sim->eventCount; eventCount = 0; } dt = getGhostt(); const size_t step = std::uniform_int_distribution<size_t>(0, range->size() - 1)(Sim->ranGenerator); return Sim->dynamics->randomGaussianEvent(Sim->particles[*(range->begin() + step)], sqrtTemp, dimensions); }