示例#1
0
 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;
 }
示例#3
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);
  }