OPAL (Object Oriented Parallel Accelerator Library)
2021.1.99
OPAL
|
#include <BoundaryGeometry.h>
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 BoundaryGeometry * | clone (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) |
Inform & | printInfo (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 Attribute * | findAttribute (const std::string &name) |
Find an attribute by name. More... | |
virtual const Attribute * | findAttribute (const std::string &name) const |
Find an attribute by name. More... | |
virtual Object * | makeTemplate (const std::string &, TokenStream &, Statement &) |
Macro handler function. More... | |
virtual Object * | makeInstance (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 Object * | getBaseObject () const |
Return the object's base type object. More... | |
const std::string & | getOpalName () const |
Return object name. More... | |
Object * | getParent () 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 BoundaryGeometry * | find (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_t & | getPoint (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_t > | Points_m |
std::vector< std::array< unsigned int, 4 > > | Triangles_m |
std::vector< Vector_t > | TriNormals_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< Attribute > | itsAttr |
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 |
RCObject & | operator= (const RCObject &right) |
Protected Attributes inherited from Object | |
bool | builtin |
Built-in flag. More... | |
bool | modified |
Dirty flag. More... | |
bool | flagged |
Object flag. More... | |
Definition at line 52 of file BoundaryGeometry.h.
|
private |
Enumerator | |
---|---|
FGEOM | |
LENGTH | |
S | |
L1 | |
L2 | |
A | |
B | |
C | |
TOPO | |
ZSHIFT | |
XYZSCALE | |
XSCALE | |
YSCALE | |
ZSCALE | |
INSIDEPOINT | |
SIZE |
Definition at line 286 of file BoundaryGeometry.h.
Enumerator | |
---|---|
debug_isInside | |
debug_fastIsInside | |
debug_intersectRayBoundary | |
debug_intersectLineSegmentBoundary | |
debug_intersectTinyLineSegmentBoundary | |
debug_PartInside |
Definition at line 180 of file BoundaryGeometry.h.
|
private |
Enumerator | |
---|---|
SEGMENT | |
RAY | |
LINE |
Definition at line 268 of file BoundaryGeometry.h.
BoundaryGeometry::BoundaryGeometry | ( | ) |
Definition at line 947 of file BoundaryGeometry.cpp.
References A, B, Object::builtin, C, clone(), OpalData::define(), FGEOM, OpalData::getInstance(), Attributes::getString(), IpplTimings::getTimer(), h5FileName_m, initialize(), INSIDEPOINT, Object::itsAttr, L1, L2, LENGTH, Attributes::makePredefinedString(), Attributes::makeReal(), Attributes::makeRealArray(), Attributes::makeString(), randGen_m, Object::registerOwnership(), S, AttributeHandler::STATEMENT, TfastIsInside_m, Tinitialize_m, TisInside_m, TOPO, TPartInside_m, TRayTrace_m, update(), XSCALE, XYZSCALE, YSCALE, ZSCALE, and ZSHIFT.
Referenced by clone().
|
virtual |
Definition at line 1069 of file BoundaryGeometry.cpp.
References randGen_m.
|
private |
|
private |
Definition at line 1051 of file BoundaryGeometry.cpp.
References FGEOM, Attributes::getString(), IpplTimings::getTimer(), h5FileName_m, initialize(), Object::itsAttr, randGen_m, TfastIsInside_m, Tinitialize_m, TisInside_m, TPartInside_m, and TRayTrace_m.
|
virtual |
Test if replacement is allowed.
Reimplemented from Object.
Definition at line 1073 of file BoundaryGeometry.cpp.
|
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().
|
inlineprivate |
Definition at line 1585 of file BoundaryGeometry.cpp.
References Util::combineFilePath(), Options::enableVTK, endl(), OpalData::getAuxiliaryOutputDirectory(), OpalData::getInstance(), getPoint(), gmsg, h5FileName_m, INSIDE, intersectTriangleVoxel(), level2(), mapPoint2VoxelIndices, mapVoxelIndices2ID(), max(), min(), IpplInfo::myNode(), Triangles_m, and voxelMesh_m.
|
inline |
Definition at line 193 of file BoundaryGeometry.h.
References debugFlags_m.
|
inline |
Definition at line 189 of file BoundaryGeometry.h.
References debugFlags_m.
|
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().
Definition at line 1426 of file BoundaryGeometry.cpp.
References Physics::c, ceil(), debug_fastIsInside, debug_intersectTinyLineSegmentBoundary, debugFlags_m, endl(), gmsg, maxExtent_m, minExtent_m, IpplTimings::startTimer(), and TfastIsInside_m.
Referenced by ArbitraryDomain::compute(), findInsidePoint(), and isInside().
|
static |
Definition at line 1096 of file BoundaryGeometry.cpp.
References OpalData::find(), OpalData::getInstance(), and name.
Referenced by FieldSolver::initSolver(), TrackRun::setupCyclotronTracker(), TrackRun::setupThickTracker(), TrackRun::setupTTracker(), OpalCavity::update(), OpalCyclotron::update(), and OpalDrift::update().
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.
|
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().
|
inline |
Definition at line 103 of file BoundaryGeometry.h.
References B, Attributes::getReal(), and Object::itsAttr.
Referenced by EllipticDomain::EllipticDomain(), and MGPoissonSolver::MGPoissonSolver().
|
inline |
Definition at line 107 of file BoundaryGeometry.h.
References C, Attributes::getReal(), and Object::itsAttr.
Referenced by MGPoissonSolver::MGPoissonSolver().
|
inline |
Definition at line 91 of file BoundaryGeometry.h.
References FGEOM, Attributes::getString(), and Object::itsAttr.
Referenced by MGPoissonSolver::MGPoissonSolver().
|
inline |
|
inline |
Definition at line 160 of file BoundaryGeometry.h.
References haveInsidePoint_m, and insidePoint_m.
Referenced by ArbitraryDomain::ArbitraryDomain().
|
inline |
Definition at line 119 of file BoundaryGeometry.h.
References Attributes::getReal(), Object::itsAttr, and L1.
Referenced by MGPoissonSolver::MGPoissonSolver().
|
inline |
Definition at line 123 of file BoundaryGeometry.h.
References Attributes::getReal(), Object::itsAttr, and L2.
Referenced by MGPoissonSolver::MGPoissonSolver().
|
inline |
Definition at line 115 of file BoundaryGeometry.h.
References Attributes::getReal(), Object::itsAttr, and LENGTH.
Referenced by EllipticDomain::EllipticDomain().
|
inline |
Return the maxcoords_m.
Definition at line 156 of file BoundaryGeometry.h.
References maxExtent_m.
Referenced by ArbitraryDomain::ArbitraryDomain(), and MGPoissonSolver::MGPoissonSolver().
|
inline |
Return the mincoords_m.
Definition at line 150 of file BoundaryGeometry.h.
References minExtent_m.
Referenced by ArbitraryDomain::ArbitraryDomain(), and MGPoissonSolver::MGPoissonSolver().
|
inline |
|
inline |
Return number of boundary faces.
Definition at line 130 of file BoundaryGeometry.h.
References Triangles_m.
|
inlineprivate |
Definition at line 263 of file BoundaryGeometry.h.
References PAssert, Points_m, and Triangles_m.
Referenced by computeMeshVoxelization(), initialize(), intersectLineTriangle(), intersectTinyLineSegmentBoundary(), and intersectTriangleVoxel().
|
inline |
Definition at line 111 of file BoundaryGeometry.h.
References Attributes::getReal(), Object::itsAttr, and S.
Referenced by EllipticDomain::EllipticDomain().
|
inline |
Definition at line 95 of file BoundaryGeometry.h.
References Attributes::getString(), Object::itsAttr, TOPO, and Util::toUpper().
Referenced by MGPoissonSolver::MGPoissonSolver(), and printInfo().
void BoundaryGeometry::initialize | ( | ) |
Definition at line 1645 of file BoundaryGeometry.cpp.
References A, B, C, endl(), floor(), getPoint(), gmsg, intersectLineTriangle(), isInside(), level2(), max(), maxExtent, maxExtent_m, minExtent, minExtent_m, nr_m, PAssert, Points_m, randGen_m, SEGMENT, sizeOfVoxel, SQR, sqrt(), IpplTimings::startTimer(), IpplTimings::stopTimer(), TisInside_m, Triangles_m, and voxelMesh_m.
Referenced by BoundaryGeometry().
|
private |
Definition at line 2308 of file BoundaryGeometry.cpp.
References debug_intersectLineSegmentBoundary, debug_intersectTinyLineSegmentBoundary, debugFlags_m, endl(), gmsg, intersectTinyLineSegmentBoundary(), mapPoint2VoxelIndices, max(), min(), and Hypervolume::n.
Referenced by intersectRayBoundary().
|
private |
Definition at line 1173 of file BoundaryGeometry.cpp.
References a, cross(), dot(), cmp_ulp::eq_zero(), cmp_ulp::ge_zero(), getPoint(), cmp_ulp::gt(), cmp_ulp::le(), LINE, cmp_ulp::lt(), cmp_ulp::lt_zero(), Hypervolume::n, RAY, and SEGMENT.
Referenced by initialize(), and intersectTinyLineSegmentBoundary().
Definition at line 1477 of file BoundaryGeometry.cpp.
References Physics::c, debug_intersectLineSegmentBoundary, debug_intersectRayBoundary, debugFlags_m, endl(), gmsg, intersectLineSegmentBoundary(), IpplTimings::startTimer(), IpplTimings::stopTimer(), TRayTrace_m, and voxelMesh_m.
Referenced by ArbitraryDomain::compute().
|
private |
Definition at line 2156 of file BoundaryGeometry.cpp.
References debug_intersectTinyLineSegmentBoundary, debugFlags_m, endl(), cmp_ulp::eq_zero(), getPoint(), gmsg, Voxel::intersect(), intersectLineTriangle(), LINE, mapIndices2Voxel(), mapPoint2VoxelIndices, mapVoxelIndices2ID(), max(), min(), PAssert, Voxel::pts, and voxelMesh_m.
Referenced by intersectLineSegmentBoundary(), and partInside().
|
private |
Definition at line 1110 of file BoundaryGeometry.cpp.
References getPoint(), Voxel::intersect(), and voxelMesh_m.
Referenced by computeMeshVoxelization().
|
private |
Definition at line 1256 of file BoundaryGeometry.cpp.
References fastIsInside(), cmp_ulp::lt(), maxExtent_m, and minExtent_m.
Referenced by initialize().
|
inlineprivate |
Definition at line 1561 of file BoundaryGeometry.cpp.
References voxelMesh_m.
Referenced by intersectTinyLineSegmentBoundary(), and mapPoint2Voxel().
Definition at line 1573 of file BoundaryGeometry.cpp.
References floor(), mapIndices2Voxel(), and voxelMesh_m.
|
inlineprivate |
Definition at line 1529 of file BoundaryGeometry.cpp.
References voxelMesh_m.
Referenced by computeMeshVoxelization(), and intersectTinyLineSegmentBoundary().
|
private |
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
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().
Definition at line 2468 of file BoundaryGeometry.cpp.
References A, B, C, endl(), FGEOM, Object::getOpalName(), Attributes::getReal(), Attributes::getString(), getTopology(), Object::itsAttr, L1, L2, LENGTH, maxExtent_m, minExtent_m, Points_m, S, TOPO, Triangles_m, voxelMesh_m, XSCALE, XYZSCALE, YSCALE, and ZSCALE.
Referenced by operator<<().
|
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().
void BoundaryGeometry::updateElement | ( | ElementBase * | element | ) |
Definition at line 1106 of file BoundaryGeometry.cpp.
Referenced by ElementBase::ElementBase().
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().
|
private |
Definition at line 244 of file BoundaryGeometry.h.
Referenced by disableDebug(), enableDebug(), fastIsInside(), intersectLineSegmentBoundary(), intersectRayBoundary(), intersectTinyLineSegmentBoundary(), and partInside().
|
private |
Definition at line 222 of file BoundaryGeometry.h.
Referenced by BoundaryGeometry(), and computeMeshVoxelization().
|
private |
Definition at line 246 of file BoundaryGeometry.h.
Referenced by getInsidePoint().
std::unordered_map<int, std::unordered_set<int> > BoundaryGeometry::ids |
Definition at line 240 of file BoundaryGeometry.h.
|
private |
Definition at line 247 of file BoundaryGeometry.h.
Referenced by findInsidePoint(), and getInsidePoint().
Vector_t BoundaryGeometry::maxExtent |
Definition at line 236 of file BoundaryGeometry.h.
Referenced by initialize().
|
private |
Definition at line 232 of file BoundaryGeometry.h.
Referenced by fastIsInside(), findInsidePoint(), getmaxcoords(), initialize(), isInside(), and printInfo().
Vector_t BoundaryGeometry::minExtent |
Definition at line 235 of file BoundaryGeometry.h.
Referenced by initialize().
|
private |
Definition at line 231 of file BoundaryGeometry.h.
Referenced by fastIsInside(), findInsidePoint(), getmincoords(), initialize(), isInside(), and printInfo().
Vektor<int, 3> BoundaryGeometry::nr_m |
Definition at line 238 of file BoundaryGeometry.h.
Referenced by initialize().
|
private |
Definition at line 224 of file BoundaryGeometry.h.
Referenced by getPoint(), initialize(), printInfo(), and writeGeomToVtk().
|
private |
Definition at line 249 of file BoundaryGeometry.h.
Referenced by BoundaryGeometry(), initialize(), and ~BoundaryGeometry().
Vector_t BoundaryGeometry::sizeOfVoxel |
Definition at line 237 of file BoundaryGeometry.h.
Referenced by initialize().
|
private |
Definition at line 253 of file BoundaryGeometry.h.
Referenced by BoundaryGeometry(), execute(), and fastIsInside().
|
private |
Definition at line 251 of file BoundaryGeometry.h.
Referenced by BoundaryGeometry(), and execute().
|
private |
Definition at line 252 of file BoundaryGeometry.h.
Referenced by BoundaryGeometry(), execute(), and initialize().
|
private |
Definition at line 255 of file BoundaryGeometry.h.
Referenced by BoundaryGeometry(), execute(), and partInside().
|
private |
Definition at line 254 of file BoundaryGeometry.h.
Referenced by BoundaryGeometry(), execute(), and intersectRayBoundary().
|
private |
Definition at line 225 of file BoundaryGeometry.h.
Referenced by computeMeshVoxelization(), getNumBFaces(), getPoint(), initialize(), printInfo(), and writeGeomToVtk().
|
private |
Definition at line 229 of file BoundaryGeometry.h.
|
private |
Definition at line 228 of file BoundaryGeometry.h.
struct { ... } BoundaryGeometry::voxelMesh_m |