void ILines::runEvent(Particle& p1, Particle& p2, const IntEvent& iEvent) { PairEventData retval; switch (iEvent.getType()) { case CORE: { ++Sim->eventCount; //We have a line interaction! Run it double e = (_e->getProperty(p1.getID()) + _e->getProperty(p2.getID())) * 0.5; double l = (_length->getProperty(p1.getID()) + _length->getProperty(p2.getID())) * 0.5; retval = Sim->dynamics->runLineLineCollision(iEvent, e, l); break; } case NBHOOD_IN: { ICapture::add(p1, p2); retval = PairEventData(p1, p2, *Sim->species[p1], *Sim->species[p2], VIRTUAL); iEvent.setType(VIRTUAL); break; } case NBHOOD_OUT: { ICapture::remove(p1, p2); retval = PairEventData(p1, p2, *Sim->species[p1], *Sim->species[p2], VIRTUAL); iEvent.setType(VIRTUAL); break; } case VIRTUAL: { retval = PairEventData(p1, p2, *Sim->species[p1], *Sim->species[p2], VIRTUAL); iEvent.setType(VIRTUAL); break; } default: M_throw() << "Unknown collision type"; } Sim->_sigParticleUpdate(retval); Sim->ptrScheduler->fullUpdate(p1, p2); for (shared_ptr<OutputPlugin> & Ptr : Sim->outputPlugins) Ptr->eventUpdate(iEvent, retval); }
PairEventData ILines::runEvent(Particle& p1, Particle& p2, const IntEvent& iEvent) { PairEventData retval; switch (iEvent.getType()) { case CORE: { ++Sim->eventCount; //We have a line interaction! Run it const double e = _e->getProperty(p1, p2); const double l = _length->getProperty(p1, p2); retval = Sim->dynamics->runLineLineCollision(iEvent, e, l); break; } case NBHOOD_IN: { ICapture::add(p1, p2); retval = PairEventData(p1, p2, *Sim->species(p1), *Sim->species(p2), VIRTUAL); iEvent.setType(VIRTUAL); break; } case NBHOOD_OUT: { ICapture::remove(p1, p2); retval = PairEventData(p1, p2, *Sim->species(p1), *Sim->species(p2), VIRTUAL); iEvent.setType(VIRTUAL); break; } case VIRTUAL: { retval = PairEventData(p1, p2, *Sim->species(p1), *Sim->species(p2), VIRTUAL); iEvent.setType(VIRTUAL); break; } default: M_throw() << "Unknown collision type"; } return retval; }
PairEventData IDSMC::runEvent(Particle& p1, Particle& p2, Event iEvent) { PairEventData retval; ++Sim->eventCount; switch (iEvent._type) { case NBHOOD_IN: ICapture::add(p1, p2); return PairEventData(p1, p2, *Sim->species(p1), *Sim->species(p2), VIRTUAL); case NBHOOD_OUT: ICapture::remove(p1, p2); return PairEventData(p1, p2, *Sim->species(p1), *Sim->species(p2), VIRTUAL); case VIRTUAL: return PairEventData(p1, p2, *Sim->species(p1), *Sim->species(p2), VIRTUAL); default: M_throw() << "Unknown collision type"; } }