33#ifndef _OPAL_BOUNDARY_GEOMETRY_H
34#define _OPAL_BOUNDARY_GEOMETRY_H
45#include <gsl/gsl_rng.h>
48#include <unordered_map>
49#include <unordered_set>
68 const std::string&
name);
75 const std::string&
name);
102 static const std::unordered_map<std::string, Topology> stringTopology_s = {
215 const int triangle_id,
251 std::unordered_map<int,
252 std::unordered_set<int>>
ids;
276 PAssert (1 <= vertex_id && vertex_id <=3);
290 const int triangle_id,
Inform & operator<<(Inform &os, const BoundaryGeometry &b)
double getReal(const Attribute &attr)
Return real value.
std::string getString(const Attribute &attr)
Get string value.
The base class for all OPAL definitions.
The base class for all OPAL objects.
std::vector< Attribute > itsAttr
The object attributes.
std::vector< std::array< unsigned int, 4 > > Triangles_m
IpplTimings::TimerRef TisInside_m
std::unordered_map< int, std::unordered_set< int > > ids
std::vector< Vector_t > TriNormals_m
int fastIsInside(const Vector_t &reference_pt, const Vector_t &P)
int intersectRayBoundary(const Vector_t &P, const Vector_t &v, Vector_t &I)
BoundaryGeometry(const BoundaryGeometry &)
std::vector< double > TriAreas_m
struct BoundaryGeometry::@70 voxelMesh_m
virtual void execute()
Execute the command.
const Vector_t & getPoint(const int triangle_id, const int vertex_id)
virtual void update()
Update this object.
IpplTimings::TimerRef TRayTrace_m
virtual bool canReplaceBy(Object *object)
Test if replacement is allowed.
bool isInside(const Vector_t &P)
std::vector< Vector_t > Points_m
void operator=(const BoundaryGeometry &)
static BoundaryGeometry * find(const std::string &name)
int intersectLineSegmentBoundary(const Vector_t &P0, const Vector_t &P1, Vector_t &intersection_pt, int &triangle_id)
IpplTimings::TimerRef Tinitialize_m
int mapVoxelIndices2ID(const int i, const int j, const int k)
void disableDebug(enum DebugFlags flags)
IpplTimings::TimerRef TPartInside_m
Vector_t mapPoint2Voxel(const Vector_t &)
IpplTimings::TimerRef TfastIsInside_m
bool getInsidePoint(Vector_t &pt)
int intersectTriangleVoxel(const int triangle_id, const int i, const int j, const int k)
void enableDebug(enum DebugFlags flags)
void writeGeomToVtk(std::string fn)
@ debug_intersectRayBoundary
@ debug_intersectTinyLineSegmentBoundary
@ debug_intersectLineSegmentBoundary
bool findInsidePoint(void)
int partInside(const Vector_t &r, const Vector_t &v, const double dt, Vector_t &intecoords, int &triId)
int intersectTinyLineSegmentBoundary(const Vector_t &, const Vector_t &, Vector_t &, int &)
virtual BoundaryGeometry * clone(const std::string &name)
Return a clone.
Topology getTopology() const
virtual ~BoundaryGeometry()
Inform & printInfo(Inform &os) const
Vector_t mapIndices2Voxel(const int, const int, const int)
int intersectLineTriangle(const enum INTERSECTION_TESTS kind, const Vector_t &P0, const Vector_t &P1, const int triangle_id, Vector_t &I)
void computeMeshVoxelization(void)
void updateElement(ElementBase *element)
std::string getFilename() const
Timing::TimerRef TimerRef