OPAL (Object Oriented Parallel Accelerator Library)  2021.1.99
OPAL
Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
BoundaryGeometry Class Reference

#include <BoundaryGeometry.h>

Inheritance diagram for BoundaryGeometry:
Inheritance graph
[legend]
Collaboration diagram for BoundaryGeometry:
Collaboration graph
[legend]

Public Types

enum  DebugFlags {
  debug_isInside = 0x0001 , debug_fastIsInside = 0x0002 , debug_intersectRayBoundary = 0x0004 , debug_intersectLineSegmentBoundary = 0x0008 ,
  debug_intersectTinyLineSegmentBoundary = 0x0010 , debug_PartInside = 0x0020
}
 

Public Member Functions

 BoundaryGeometry ()
 
virtual ~BoundaryGeometry ()
 
virtual bool canReplaceBy (Object *object)
 Test if replacement is allowed. More...
 
virtual BoundaryGeometryclone (const std::string &name)
 Return a clone. More...
 
virtual void execute ()
 Execute the command. More...
 
virtual void update ()
 Update this object. More...
 
void updateElement (ElementBase *element)
 
void initialize ()
 
int partInside (const Vector_t &r, const Vector_t &v, const double dt, Vector_t &intecoords, int &triId)
 
InformprintInfo (Inform &os) const
 
void writeGeomToVtk (std::string fn)
 
std::string getFilename () const
 
std::string getTopology () const
 
double getA ()
 
double getB ()
 
double getC ()
 
double getS ()
 
double getLength ()
 
double getL1 ()
 
double getL2 ()
 
size_t getNumBFaces ()
 
Vector_t gethr ()
 
Vektor< int, 3 > getnr ()
 
Vector_t getmincoords ()
 
Vector_t getmaxcoords ()
 
bool getInsidePoint (Vector_t &pt)
 
bool findInsidePoint (void)
 
int intersectRayBoundary (const Vector_t &P, const Vector_t &v, Vector_t &I)
 
int fastIsInside (const Vector_t &reference_pt, const Vector_t &P)
 
void enableDebug (enum DebugFlags flags)
 
void disableDebug (enum DebugFlags flags)
 
- Public Member Functions inherited from Definition
virtual ~Definition ()
 
virtual const std::string getCategory () const
 Return the object category as a string. More...
 
virtual bool shouldTrace () const
 Trace flag. More...
 
virtual bool shouldUpdate () const
 Update flag. More...
 
- Public Member Functions inherited from Object
virtual ~Object ()
 
void copyAttributes (const Object &)
 Copy attributes from another object. More...
 
virtual AttributefindAttribute (const std::string &name)
 Find an attribute by name. More...
 
virtual const AttributefindAttribute (const std::string &name) const
 Find an attribute by name. More...
 
virtual ObjectmakeTemplate (const std::string &, TokenStream &, Statement &)
 Macro handler function. More...
 
virtual ObjectmakeInstance (const std::string &name, Statement &, const Parser *)
 Macro handler function. More...
 
virtual void parse (Statement &)
 Parse the object. More...
 
virtual void parseShortcut (Statement &, bool eval=true)
 Parser for single-attribute commands. More...
 
virtual void print (std::ostream &) const
 Print the object. More...
 
virtual void printValue (std::ostream &) const
 
virtual void printHelp (std::ostream &) const
 Print help. More...
 
virtual void replace (Object *oldObject, Object *newObject)
 Replace references. More...
 
bool isBuiltin () const
 True, if [b]this[/b] is a built-in object. More...
 
virtual bool isShared () const
 Shared flag. More...
 
virtual void setShared (bool)
 Set/reset shared flag. More...
 
void setDirty (bool)
 Set/reset the [b]modified[/b] flag. More...
 
bool isDirty () const
 True, if the [b]modified[/b] flag is set. More...
 
void setFlag (bool)
 Flag/unflag this object, e. g. to control output of objects for. More...
 
bool isFlagged () const
 True, if [b]this[/b] is flagged by setFlag(true). More...
 
const ObjectgetBaseObject () const
 Return the object's base type object. More...
 
const std::string & getOpalName () const
 Return object name. More...
 
ObjectgetParent () const
 Return parent pointer. More...
 
bool isTreeMember (const Object *subTree) const
 Test for tree membership. More...
 
void setOpalName (const std::string &name)
 Set object name. More...
 
void setParent (Object *)
 Set parent object. More...
 
void clear ()
 Clear the occurrence counter. More...
 
int increment ()
 Increment and return the occurrence counter. More...
 
int occurrenceCount ()
 Return the occurrence counter. More...
 
void registerReference (Invalidator *a)
 Register a reference to this object. More...
 
void unregisterReference (Invalidator *a)
 Unegister a reference to this object. More...
 
void registerOwnership (const AttributeHandler::OwnerType &itsClass) const
 
- Public Member Functions inherited from RCObject
int addReference () const
 Increment reference count. More...
 
int removeReference () const
 Decrement the reference count. More...
 
bool isShared () const
 Test for sharing. More...
 

Static Public Member Functions

static BoundaryGeometryfind (const std::string &name)
 

Private Types

enum  INTERSECTION_TESTS { SEGMENT , RAY , LINE }
 
enum  {
  FGEOM , LENGTH , S , L1 ,
  L2 , A , B , C ,
  TOPO , ZSHIFT , XYZSCALE , XSCALE ,
  YSCALE , ZSCALE , INSIDEPOINT , SIZE
}
 

Private Member Functions

bool isInside (const Vector_t &P)
 
int intersectTriangleVoxel (const int triangle_id, const int i, const int j, const int k)
 
int intersectTinyLineSegmentBoundary (const Vector_t &, const Vector_t &, Vector_t &, int &)
 
int intersectLineSegmentBoundary (const Vector_t &P0, const Vector_t &P1, Vector_t &intersection_pt, int &triangle_id)
 
 BoundaryGeometry (const BoundaryGeometry &)
 
void operator= (const BoundaryGeometry &)
 
 BoundaryGeometry (const std::string &name, BoundaryGeometry *parent)
 
const Vector_tgetPoint (const int triangle_id, const int vertex_id)
 
int intersectLineTriangle (const enum INTERSECTION_TESTS kind, const Vector_t &P0, const Vector_t &P1, const int triangle_id, Vector_t &I)
 
int mapVoxelIndices2ID (const int i, const int j, const int k)
 
Vector_t mapIndices2Voxel (const int, const int, const int)
 
Vector_t mapPoint2Voxel (const Vector_t &)
 
void computeMeshVoxelization (void)
 

Private Attributes

std::string h5FileName_m
 
std::vector< Vector_tPoints_m
 
std::vector< std::array< unsigned int, 4 > > Triangles_m
 
std::vector< Vector_tTriNormals_m
 
std::vector< double > TriAreas_m
 
Vector_t minExtent_m
 
Vector_t maxExtent_m
 
struct {
   Vector_t   minExtent
 
   Vector_t   maxExtent
 
   Vector_t   sizeOfVoxel
 
   Vektor< int, 3 >   nr_m
 
   std::unordered_map< int, std::unordered_set< int > >   ids
 
voxelMesh_m
 
int debugFlags_m
 
bool haveInsidePoint_m
 
Vector_t insidePoint_m
 
gsl_rng * randGen_m
 
IpplTimings::TimerRef Tinitialize_m
 
IpplTimings::TimerRef TisInside_m
 
IpplTimings::TimerRef TfastIsInside_m
 
IpplTimings::TimerRef TRayTrace_m
 
IpplTimings::TimerRef TPartInside_m
 

Additional Inherited Members

- Public Attributes inherited from Object
std::vector< AttributeitsAttr
 The object attributes. More...
 
- Protected Member Functions inherited from Definition
 Definition (int size, const char *name, const char *help)
 Constructor for exemplars. More...
 
 Definition (const std::string &name, Definition *parent)
 Constructor for clones. More...
 
- Protected Member Functions inherited from Object
 Object (int size, const char *name, const char *help)
 Constructor for exemplars. More...
 
 Object (const std::string &name, Object *parent)
 Constructor for clones. More...
 
- Protected Member Functions inherited from RCObject
 RCObject ()
 Default constructor. More...
 
 RCObject (const RCObject &)
 Copy constructor. More...
 
virtual ~RCObject ()=0
 
RCObjectoperator= (const RCObject &right)
 
- Protected Attributes inherited from Object
bool builtin
 Built-in flag. More...
 
bool modified
 Dirty flag. More...
 
bool flagged
 Object flag. More...
 

Detailed Description

Definition at line 52 of file BoundaryGeometry.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
FGEOM 
LENGTH 
L1 
L2 
TOPO 
ZSHIFT 
XYZSCALE 
XSCALE 
YSCALE 
ZSCALE 
INSIDEPOINT 
SIZE 

Definition at line 286 of file BoundaryGeometry.h.

◆ DebugFlags

Enumerator
debug_isInside 
debug_fastIsInside 
debug_intersectRayBoundary 
debug_intersectLineSegmentBoundary 
debug_intersectTinyLineSegmentBoundary 
debug_PartInside 

Definition at line 180 of file BoundaryGeometry.h.

◆ INTERSECTION_TESTS

Enumerator
SEGMENT 
RAY 
LINE 

Definition at line 268 of file BoundaryGeometry.h.

Constructor & Destructor Documentation

◆ BoundaryGeometry() [1/3]

BoundaryGeometry::BoundaryGeometry ( )

◆ ~BoundaryGeometry()

BoundaryGeometry::~BoundaryGeometry ( )
virtual

Definition at line 1069 of file BoundaryGeometry.cpp.

References randGen_m.

◆ BoundaryGeometry() [2/3]

BoundaryGeometry::BoundaryGeometry ( const BoundaryGeometry )
private

◆ BoundaryGeometry() [3/3]

BoundaryGeometry::BoundaryGeometry ( const std::string &  name,
BoundaryGeometry parent 
)
private

Member Function Documentation

◆ canReplaceBy()

bool BoundaryGeometry::canReplaceBy ( Object object)
virtual

Test if replacement is allowed.

Reimplemented from Object.

Definition at line 1073 of file BoundaryGeometry.cpp.

◆ clone()

BoundaryGeometry * BoundaryGeometry::clone ( const std::string &  name)
virtual

Return a clone.

Implements Object.

Definition at line 1078 of file BoundaryGeometry.cpp.

References BoundaryGeometry(), and name.

Referenced by BoundaryGeometry(), TrackRun::setupCyclotronTracker(), TrackRun::setupThickTracker(), and TrackRun::setupTTracker().

Here is the call graph for this function:

◆ computeMeshVoxelization()

void BoundaryGeometry::computeMeshVoxelization ( void  )
inlineprivate

◆ disableDebug()

void BoundaryGeometry::disableDebug ( enum DebugFlags  flags)
inline

Definition at line 193 of file BoundaryGeometry.h.

References debugFlags_m.

◆ enableDebug()

void BoundaryGeometry::enableDebug ( enum DebugFlags  flags)
inline

Definition at line 189 of file BoundaryGeometry.h.

References debugFlags_m.

◆ execute()

void BoundaryGeometry::execute ( )
virtual

Execute the command.

Reimplemented from Object.

Definition at line 1087 of file BoundaryGeometry.cpp.

References IpplTimings::getTimer(), TfastIsInside_m, Tinitialize_m, TisInside_m, TPartInside_m, TRayTrace_m, and update().

Here is the call graph for this function:

◆ fastIsInside()

int BoundaryGeometry::fastIsInside ( const Vector_t reference_pt,
const Vector_t P 
)

◆ find()

BoundaryGeometry * BoundaryGeometry::find ( const std::string &  name)
static

◆ findInsidePoint()

bool BoundaryGeometry::findInsidePoint ( void  )

Definition at line 1362 of file BoundaryGeometry.cpp.

References B, endl(), fastIsInside(), gmsg, insidePoint_m, level2(), maxExtent_m, minExtent_m, and Hypervolume::n.

Here is the call graph for this function:

◆ getA()

double BoundaryGeometry::getA ( )
inline

Definition at line 99 of file BoundaryGeometry.h.

References A, Attributes::getReal(), and Object::itsAttr.

Referenced by EllipticDomain::EllipticDomain(), FieldSolver::initSolver(), and MGPoissonSolver::MGPoissonSolver().

Here is the call graph for this function:

◆ getB()

double BoundaryGeometry::getB ( )
inline

Definition at line 103 of file BoundaryGeometry.h.

References B, Attributes::getReal(), and Object::itsAttr.

Referenced by EllipticDomain::EllipticDomain(), and MGPoissonSolver::MGPoissonSolver().

Here is the call graph for this function:

◆ getC()

double BoundaryGeometry::getC ( )
inline

Definition at line 107 of file BoundaryGeometry.h.

References C, Attributes::getReal(), and Object::itsAttr.

Referenced by MGPoissonSolver::MGPoissonSolver().

Here is the call graph for this function:

◆ getFilename()

std::string BoundaryGeometry::getFilename ( ) const
inline

Definition at line 91 of file BoundaryGeometry.h.

References FGEOM, Attributes::getString(), and Object::itsAttr.

Referenced by MGPoissonSolver::MGPoissonSolver().

Here is the call graph for this function:

◆ gethr()

Vector_t BoundaryGeometry::gethr ( )
inline

Return the hr_m.

Definition at line 137 of file BoundaryGeometry.h.

References voxelMesh_m.

◆ getInsidePoint()

bool BoundaryGeometry::getInsidePoint ( Vector_t pt)
inline

Definition at line 160 of file BoundaryGeometry.h.

References haveInsidePoint_m, and insidePoint_m.

Referenced by ArbitraryDomain::ArbitraryDomain().

◆ getL1()

double BoundaryGeometry::getL1 ( )
inline

Definition at line 119 of file BoundaryGeometry.h.

References Attributes::getReal(), Object::itsAttr, and L1.

Referenced by MGPoissonSolver::MGPoissonSolver().

Here is the call graph for this function:

◆ getL2()

double BoundaryGeometry::getL2 ( )
inline

Definition at line 123 of file BoundaryGeometry.h.

References Attributes::getReal(), Object::itsAttr, and L2.

Referenced by MGPoissonSolver::MGPoissonSolver().

Here is the call graph for this function:

◆ getLength()

double BoundaryGeometry::getLength ( )
inline

Definition at line 115 of file BoundaryGeometry.h.

References Attributes::getReal(), Object::itsAttr, and LENGTH.

Referenced by EllipticDomain::EllipticDomain().

Here is the call graph for this function:

◆ getmaxcoords()

Vector_t BoundaryGeometry::getmaxcoords ( )
inline

Return the maxcoords_m.

Definition at line 156 of file BoundaryGeometry.h.

References maxExtent_m.

Referenced by ArbitraryDomain::ArbitraryDomain(), and MGPoissonSolver::MGPoissonSolver().

◆ getmincoords()

Vector_t BoundaryGeometry::getmincoords ( )
inline

Return the mincoords_m.

Definition at line 150 of file BoundaryGeometry.h.

References minExtent_m.

Referenced by ArbitraryDomain::ArbitraryDomain(), and MGPoissonSolver::MGPoissonSolver().

◆ getnr()

Vektor<int, 3> BoundaryGeometry::getnr ( )
inline

Return the nr_m.

Definition at line 143 of file BoundaryGeometry.h.

References voxelMesh_m.

◆ getNumBFaces()

size_t BoundaryGeometry::getNumBFaces ( )
inline

Return number of boundary faces.

Definition at line 130 of file BoundaryGeometry.h.

References Triangles_m.

◆ getPoint()

const Vector_t& BoundaryGeometry::getPoint ( const int  triangle_id,
const int  vertex_id 
)
inlineprivate

◆ getS()

double BoundaryGeometry::getS ( )
inline

Definition at line 111 of file BoundaryGeometry.h.

References Attributes::getReal(), Object::itsAttr, and S.

Referenced by EllipticDomain::EllipticDomain().

Here is the call graph for this function:

◆ getTopology()

std::string BoundaryGeometry::getTopology ( ) const
inline

Definition at line 95 of file BoundaryGeometry.h.

References Attributes::getString(), Object::itsAttr, TOPO, and Util::toUpper().

Referenced by MGPoissonSolver::MGPoissonSolver(), and printInfo().

Here is the call graph for this function:

◆ initialize()

void BoundaryGeometry::initialize ( )

◆ intersectLineSegmentBoundary()

int BoundaryGeometry::intersectLineSegmentBoundary ( const Vector_t P0,
const Vector_t P1,
Vector_t intersection_pt,
int &  triangle_id 
)
private

◆ intersectLineTriangle()

int BoundaryGeometry::intersectLineTriangle ( const enum INTERSECTION_TESTS  kind,
const Vector_t P0,
const Vector_t P1,
const int  triangle_id,
Vector_t I 
)
private

◆ intersectRayBoundary()

int BoundaryGeometry::intersectRayBoundary ( const Vector_t P,
const Vector_t v,
Vector_t I 
)

◆ intersectTinyLineSegmentBoundary()

int BoundaryGeometry::intersectTinyLineSegmentBoundary ( const Vector_t P,
const Vector_t Q,
Vector_t intersect_pt,
int &  triangle_id 
)
private

◆ intersectTriangleVoxel()

int BoundaryGeometry::intersectTriangleVoxel ( const int  triangle_id,
const int  i,
const int  j,
const int  k 
)
private

Definition at line 1110 of file BoundaryGeometry.cpp.

References getPoint(), Voxel::intersect(), and voxelMesh_m.

Referenced by computeMeshVoxelization().

Here is the call graph for this function:

◆ isInside()

bool BoundaryGeometry::isInside ( const Vector_t P)
private

Definition at line 1256 of file BoundaryGeometry.cpp.

References fastIsInside(), cmp_ulp::lt(), maxExtent_m, and minExtent_m.

Referenced by initialize().

Here is the call graph for this function:

◆ mapIndices2Voxel()

Vector_t BoundaryGeometry::mapIndices2Voxel ( const int  i,
const int  j,
const int  k 
)
inlineprivate

Definition at line 1561 of file BoundaryGeometry.cpp.

References voxelMesh_m.

Referenced by intersectTinyLineSegmentBoundary(), and mapPoint2Voxel().

◆ mapPoint2Voxel()

Vector_t BoundaryGeometry::mapPoint2Voxel ( const Vector_t pt)
inlineprivate

Definition at line 1573 of file BoundaryGeometry.cpp.

References floor(), mapIndices2Voxel(), and voxelMesh_m.

Here is the call graph for this function:

◆ mapVoxelIndices2ID()

int BoundaryGeometry::mapVoxelIndices2ID ( const int  i,
const int  j,
const int  k 
)
inlineprivate

Definition at line 1529 of file BoundaryGeometry.cpp.

References voxelMesh_m.

Referenced by computeMeshVoxelization(), and intersectTinyLineSegmentBoundary().

◆ operator=()

void BoundaryGeometry::operator= ( const BoundaryGeometry )
private

◆ partInside()

int BoundaryGeometry::partInside ( const Vector_t r,
const Vector_t v,
const double  dt,
Vector_t intersect_pt,
int &  triangle_id 
)

Determine whether a particle with position

Parameters
r,momenta

Definition at line 2378 of file BoundaryGeometry.cpp.

References Physics::c, debug_intersectTinyLineSegmentBoundary, debug_PartInside, debugFlags_m, dot(), endl(), gmsg, intersectTinyLineSegmentBoundary(), sqrt(), IpplTimings::startTimer(), IpplTimings::stopTimer(), and TPartInside_m.

Referenced by ParallelCyclotronTracker::bgf_main_collision_test().

Here is the call graph for this function:

◆ printInfo()

Inform & BoundaryGeometry::printInfo ( Inform os) const

◆ update()

void BoundaryGeometry::update ( )
virtual

Update this object.

Reimplemented from Object.

Definition at line 1082 of file BoundaryGeometry.cpp.

References Object::getOpalName(), and Object::setOpalName().

Referenced by BoundaryGeometry(), and execute().

Here is the call graph for this function:

◆ updateElement()

void BoundaryGeometry::updateElement ( ElementBase element)

Definition at line 1106 of file BoundaryGeometry.cpp.

Referenced by ElementBase::ElementBase().

◆ writeGeomToVtk()

void BoundaryGeometry::writeGeomToVtk ( std::string  fn)

Definition at line 2432 of file BoundaryGeometry.cpp.

References endl(), PAssert, PointID, Points_m, and Triangles_m.

Referenced by DataSink::writeGeomToVtk().

Here is the call graph for this function:

Member Data Documentation

◆ debugFlags_m

int BoundaryGeometry::debugFlags_m
private

◆ h5FileName_m

std::string BoundaryGeometry::h5FileName_m
private

Definition at line 222 of file BoundaryGeometry.h.

Referenced by BoundaryGeometry(), and computeMeshVoxelization().

◆ haveInsidePoint_m

bool BoundaryGeometry::haveInsidePoint_m
private

Definition at line 246 of file BoundaryGeometry.h.

Referenced by getInsidePoint().

◆ ids

std::unordered_map<int, std::unordered_set<int> > BoundaryGeometry::ids

Definition at line 240 of file BoundaryGeometry.h.

◆ insidePoint_m

Vector_t BoundaryGeometry::insidePoint_m
private

Definition at line 247 of file BoundaryGeometry.h.

Referenced by findInsidePoint(), and getInsidePoint().

◆ maxExtent

Vector_t BoundaryGeometry::maxExtent

Definition at line 236 of file BoundaryGeometry.h.

Referenced by initialize().

◆ maxExtent_m

Vector_t BoundaryGeometry::maxExtent_m
private

◆ minExtent

Vector_t BoundaryGeometry::minExtent

Definition at line 235 of file BoundaryGeometry.h.

Referenced by initialize().

◆ minExtent_m

Vector_t BoundaryGeometry::minExtent_m
private

◆ nr_m

Vektor<int, 3> BoundaryGeometry::nr_m

Definition at line 238 of file BoundaryGeometry.h.

Referenced by initialize().

◆ Points_m

std::vector<Vector_t> BoundaryGeometry::Points_m
private

Definition at line 224 of file BoundaryGeometry.h.

Referenced by getPoint(), initialize(), printInfo(), and writeGeomToVtk().

◆ randGen_m

gsl_rng* BoundaryGeometry::randGen_m
private

Definition at line 249 of file BoundaryGeometry.h.

Referenced by BoundaryGeometry(), initialize(), and ~BoundaryGeometry().

◆ sizeOfVoxel

Vector_t BoundaryGeometry::sizeOfVoxel

Definition at line 237 of file BoundaryGeometry.h.

Referenced by initialize().

◆ TfastIsInside_m

IpplTimings::TimerRef BoundaryGeometry::TfastIsInside_m
private

Definition at line 253 of file BoundaryGeometry.h.

Referenced by BoundaryGeometry(), execute(), and fastIsInside().

◆ Tinitialize_m

IpplTimings::TimerRef BoundaryGeometry::Tinitialize_m
private

Definition at line 251 of file BoundaryGeometry.h.

Referenced by BoundaryGeometry(), and execute().

◆ TisInside_m

IpplTimings::TimerRef BoundaryGeometry::TisInside_m
private

Definition at line 252 of file BoundaryGeometry.h.

Referenced by BoundaryGeometry(), execute(), and initialize().

◆ TPartInside_m

IpplTimings::TimerRef BoundaryGeometry::TPartInside_m
private

Definition at line 255 of file BoundaryGeometry.h.

Referenced by BoundaryGeometry(), execute(), and partInside().

◆ TRayTrace_m

IpplTimings::TimerRef BoundaryGeometry::TRayTrace_m
private

Definition at line 254 of file BoundaryGeometry.h.

Referenced by BoundaryGeometry(), execute(), and intersectRayBoundary().

◆ Triangles_m

std::vector<std::array<unsigned int,4> > BoundaryGeometry::Triangles_m
private

◆ TriAreas_m

std::vector<double> BoundaryGeometry::TriAreas_m
private

Definition at line 229 of file BoundaryGeometry.h.

◆ TriNormals_m

std::vector<Vector_t> BoundaryGeometry::TriNormals_m
private

Definition at line 228 of file BoundaryGeometry.h.

◆ 

struct { ... } BoundaryGeometry::voxelMesh_m

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