OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
OrbitThreader Class Reference

#include <OrbitThreader.h>

Collaboration diagram for OrbitThreader:
Collaboration graph

Classes

struct  elementPosition
 
struct  elementPositionComp
 

Public Member Functions

 OrbitThreader (const PartData &ref, const Vector_t< double, 3 > &r, const Vector_t< double, 3 > &p, double s, double maxDiffZBunch, double t, double dT, StepSizeConfig stepSizes, OpalBeamline &bl)
 
void execute ()
 
IndexMap::value_t query (IndexMap::key_t::first_type step, IndexMap::key_t::second_type length)
 
IndexMap::key_t getRange (const IndexMap::value_t::value_type &element, double position) const
 
IndexMap::value_t getTouchingElements (const IndexMap::key_t &range) const
 
BoundingBox getBoundingBox () const
 
const ReferencePathModelgetReferencePathModel () const
 Return the threader-owned reference-path model.
 
const ReferencePathModelgetActionRangeRegistrationModel () const
 Return the action-range registration model.
 

Private Member Functions

void trackBack ()
 
void integrate (const IndexMap::value_t &activeSet, double maxDrift=10.0)
 
bool containsCavity (const IndexMap::value_t &activeSet)
 
void autophaseCavities (const IndexMap::value_t &activeSet, const std::set< std::string > &visitedElements)
 
double getMaxDesignEnergy (const IndexMap::value_t &elementSet) const
 
void registerElement (const IndexMap::value_t &elementSet, double, const Vector_t< double, 3 > &r, const Vector_t< double, 3 > &p)
 
void processElementRegister ()
 
void setDesignEnergy (FieldList &allElements, const std::set< std::string > &visitedElements)
 
void computeBoundingBox ()
 
void updateBoundingBoxWithCurrentPosition ()
 
double computeDriftLengthToBoundingBox (const std::set< std::shared_ptr< Component > > &elements, const Vector_t< double, 3 > &position, const Vector_t< double, 3 > &direction) const
 
void checkElementLengths (const std::set< std::shared_ptr< Component > > &elements)
 

Private Attributes

Vector_t< double, 3 > r_m
 position of reference particle in lab coordinates
 
Vector_t< double, 3 > p_m
 momentum of reference particle
 
double pathLength_m
 position of reference particle in path length
 
double distTrackBack_m
 
double time_m
 the simulated time
 
double dt_m
 the time step
 
ValueRange< long > stepRange_m
 
long currentStep_m {0}
 
StepSizeConfig stepSizes_m
 final position in path length
 
const double zstop_m
 
ValueRange< double > pathLengthRange_m
 
OpalBeamlineitsOpalBeamline_m
 
IndexMap imap_m
 
unsigned int errorFlag_m
 
BorisPusher integrator_m
 
const PartDatareference_m
 
std::ofstream logger_m
 
size_t loggingFrequency_m
 
BoundingBox globalBoundingBox_m
 
std::multimap< std::shared_ptr< Component >, elementPosition, std::owner_less< std::shared_ptr< Component > > > elementRegistry_m
 
ReferencePathModel actionRangeRegistrationModel_m
 

Detailed Description

Definition at line 38 of file OrbitThreader.h.


Class Documentation

◆ OrbitThreader::elementPosition

struct OrbitThreader::elementPosition

Definition at line 110 of file OrbitThreader.h.

Collaboration diagram for OrbitThreader::elementPosition:
Collaboration graph
Class Members
double elementEdge_m
double endField_m
double startField_m

Constructor & Destructor Documentation

◆ OrbitThreader()

OrbitThreader::OrbitThreader ( const PartData ref,
const Vector_t< double, 3 > &  r,
const Vector_t< double, 3 > &  p,
double  s,
double  maxDiffZBunch,
double  t,
double  dT,
StepSizeConfig  stepSizes,
OpalBeamline bl 
)

Member Function Documentation

◆ autophaseCavities()

void OrbitThreader::autophaseCavities ( const IndexMap::value_t activeSet,
const std::set< std::string > &  visitedElements 
)
private

◆ checkElementLengths()

void OrbitThreader::checkElementLengths ( const std::set< std::shared_ptr< Component > > &  elements)
private

Definition at line 93 of file OrbitThreader.cpp.

References Physics::c, euclidean_norm(), StepSizeConfig::getdT(), Util::getGamma(), StepSizeConfig::getZStop(), p_m, pathLength_m, StepSizeConfig::reachedEnd(), and stepSizes_m.

Referenced by execute().

Here is the call graph for this function:

◆ computeBoundingBox()

void OrbitThreader::computeBoundingBox ( )
private

◆ computeDriftLengthToBoundingBox()

double OrbitThreader::computeDriftLengthToBoundingBox ( const std::set< std::shared_ptr< Component > > &  elements,
const Vector_t< double, 3 > &  position,
const Vector_t< double, 3 > &  direction 
) const
private

Definition at line 479 of file OrbitThreader.cpp.

References DRIFT, euclidean_norm(), BoundingBox::getIntersectionPoint(), and globalBoundingBox_m.

Referenced by execute(), and trackBack().

Here is the call graph for this function:

◆ containsCavity()

bool OrbitThreader::containsCavity ( const IndexMap::value_t activeSet)
private

Definition at line 279 of file OrbitThreader.cpp.

References RFCAVITY, and TRAVELINGWAVE.

Referenced by execute().

◆ execute()

◆ getActionRangeRegistrationModel()

const ReferencePathModel & OrbitThreader::getActionRangeRegistrationModel ( ) const
inline

Return the action-range registration model.

This model is distinct from the traced reference-path occupancy model. It records the element passages that are later converted into backward-compatible action ranges and legacy ELEMEDGE-anchored intervals on the elements.

Definition at line 169 of file OrbitThreader.h.

References actionRangeRegistrationModel_m.

Referenced by TEST_F(), and TEST_F().

◆ getBoundingBox()

BoundingBox OrbitThreader::getBoundingBox ( ) const
inline

Definition at line 163 of file OrbitThreader.h.

References globalBoundingBox_m.

Referenced by ParallelTracker::execute().

◆ getMaxDesignEnergy()

double OrbitThreader::getMaxDesignEnergy ( const IndexMap::value_t elementSet) const
private

Definition at line 313 of file OrbitThreader.cpp.

References RFCavity::getDesignEnergy(), RFCAVITY, and TRAVELINGWAVE.

Here is the call graph for this function:

◆ getRange()

IndexMap::key_t OrbitThreader::getRange ( const IndexMap::value_t::value_type &  element,
double  position 
) const
inline

Definition at line 154 of file OrbitThreader.h.

References IndexMap::getRange(), and imap_m.

Here is the call graph for this function:

◆ getReferencePathModel()

const ReferencePathModel & OrbitThreader::getReferencePathModel ( ) const
inline

Return the threader-owned reference-path model.

This model stores the ordered active-element sets on the reporting coordinate \(s\) that are traced by the reference particle through the summed fields. In other words, it is the occupancy model derived from the reference-particle integration, not a privileged-element ownership model. The returned reference remains owned by the OrbitThreader.

Definition at line 165 of file OrbitThreader.h.

References IndexMap::getReferencePathModel(), and imap_m.

Referenced by TEST_F(), and TEST_F().

Here is the call graph for this function:

◆ getTouchingElements()

IndexMap::value_t OrbitThreader::getTouchingElements ( const IndexMap::key_t range) const
inline

Definition at line 159 of file OrbitThreader.h.

References IndexMap::getTouchingElements(), and imap_m.

Here is the call graph for this function:

◆ integrate()

◆ processElementRegister()

void OrbitThreader::processElementRegister ( )
private

Definition at line 386 of file OrbitThreader.cpp.

References actionRangeRegistrationModel_m, ReferencePathModel::clear(), elementRegistry_m, ReferencePathSegment::getBegin(), and ReferencePathSegment::getEnd().

Referenced by execute().

Here is the call graph for this function:

◆ query()

IndexMap::value_t OrbitThreader::query ( IndexMap::key_t::first_type  step,
IndexMap::key_t::second_type  length 
)
inline

Definition at line 149 of file OrbitThreader.h.

References imap_m, and IndexMap::query().

Referenced by ParallelTracker::computeExternalFields().

Here is the call graph for this function:

◆ registerElement()

void OrbitThreader::registerElement ( const IndexMap::value_t elementSet,
double  start,
const Vector_t< double, 3 > &  r,
const Vector_t< double, 3 > &  p 
)
private

Definition at line 357 of file OrbitThreader.cpp.

References elementRegistry_m, euclidean_norm(), itsOpalBeamline_m, pathLength_m, OpalBeamline::rotateToLocalCS(), and OpalBeamline::transformToLocalCS().

Referenced by execute().

Here is the call graph for this function:

◆ setDesignEnergy()

void OrbitThreader::setDesignEnergy ( FieldList allElements,
const std::set< std::string > &  visitedElements 
)
private

Definition at line 440 of file OrbitThreader.cpp.

References dot(), PartData::getM(), p_m, reference_m, RFCAVITY, and TRAVELINGWAVE.

Referenced by execute().

Here is the call graph for this function:

◆ trackBack()

◆ updateBoundingBoxWithCurrentPosition()

void OrbitThreader::updateBoundingBoxWithCurrentPosition ( )
private

Definition at line 470 of file OrbitThreader.cpp.

References Physics::c, dt_m, BoundingBox::enlargeToContainPosition(), Util::getGamma(), globalBoundingBox_m, p_m, and r_m.

Referenced by computeBoundingBox(), and execute().

Here is the call graph for this function:

Member Data Documentation

◆ actionRangeRegistrationModel_m

ReferencePathModel OrbitThreader::actionRangeRegistrationModel_m
private

Definition at line 126 of file OrbitThreader.h.

Referenced by getActionRangeRegistrationModel(), and processElementRegister().

◆ currentStep_m

long OrbitThreader::currentStep_m {0}
private

Definition at line 90 of file OrbitThreader.h.

Referenced by execute(), integrate(), and trackBack().

◆ distTrackBack_m

double OrbitThreader::distTrackBack_m
private

distance to track back before tracking forward (length of bunch but not beyond cathode)

Definition at line 84 of file OrbitThreader.h.

Referenced by OrbitThreader(), and trackBack().

◆ dt_m

double OrbitThreader::dt_m
private

◆ elementRegistry_m

std::multimap< std::shared_ptr<Component>, elementPosition, std::owner_less<std::shared_ptr<Component> > > OrbitThreader::elementRegistry_m
private

Definition at line 125 of file OrbitThreader.h.

Referenced by processElementRegister(), and registerElement().

◆ errorFlag_m

unsigned int OrbitThreader::errorFlag_m
private

Definition at line 100 of file OrbitThreader.h.

Referenced by execute(), and integrate().

◆ globalBoundingBox_m

BoundingBox OrbitThreader::globalBoundingBox_m
private

◆ imap_m

IndexMap OrbitThreader::imap_m
private

Definition at line 98 of file OrbitThreader.h.

Referenced by execute(), getRange(), getReferencePathModel(), getTouchingElements(), and query().

◆ integrator_m

BorisPusher OrbitThreader::integrator_m
private

Definition at line 102 of file OrbitThreader.h.

Referenced by execute(), integrate(), and trackBack().

◆ itsOpalBeamline_m

OpalBeamline& OrbitThreader::itsOpalBeamline_m
private

◆ logger_m

std::ofstream OrbitThreader::logger_m
private

Definition at line 105 of file OrbitThreader.h.

Referenced by integrate(), and OrbitThreader().

◆ loggingFrequency_m

size_t OrbitThreader::loggingFrequency_m
private

Definition at line 106 of file OrbitThreader.h.

Referenced by integrate(), and OrbitThreader().

◆ p_m

Vector_t<double, 3> OrbitThreader::p_m
private

◆ pathLength_m

double OrbitThreader::pathLength_m
private

position of reference particle in path length

Definition at line 81 of file OrbitThreader.h.

Referenced by checkElementLengths(), execute(), integrate(), OrbitThreader(), registerElement(), and trackBack().

◆ pathLengthRange_m

ValueRange<double> OrbitThreader::pathLengthRange_m
private

Definition at line 95 of file OrbitThreader.h.

Referenced by execute(), integrate(), OrbitThreader(), and trackBack().

◆ r_m

Vector_t<double, 3> OrbitThreader::r_m
private

position of reference particle in lab coordinates

Definition at line 77 of file OrbitThreader.h.

Referenced by autophaseCavities(), execute(), integrate(), trackBack(), and updateBoundingBoxWithCurrentPosition().

◆ reference_m

const PartData& OrbitThreader::reference_m
private

Definition at line 103 of file OrbitThreader.h.

Referenced by autophaseCavities(), integrate(), and setDesignEnergy().

◆ stepRange_m

ValueRange<long> OrbitThreader::stepRange_m
private

Definition at line 89 of file OrbitThreader.h.

Referenced by execute(), integrate(), OrbitThreader(), and trackBack().

◆ stepSizes_m

StepSizeConfig OrbitThreader::stepSizes_m
private

final position in path length

Definition at line 93 of file OrbitThreader.h.

Referenced by checkElementLengths(), and OrbitThreader().

◆ time_m

double OrbitThreader::time_m
private

the simulated time

Definition at line 86 of file OrbitThreader.h.

Referenced by autophaseCavities(), and integrate().

◆ zstop_m

const double OrbitThreader::zstop_m
private

Definition at line 94 of file OrbitThreader.h.

Referenced by execute(), integrate(), and OrbitThreader().


The documentation for this class was generated from the following files: