35 #ifndef NEKMESHUTILS_MESHELEMENTS_NODE 36 #define NEKMESHUTILS_MESHELEMENTS_NODE 50 namespace NekMeshUtils
194 return sqrt((
m_x - p->m_x) * (
m_x - p->m_x) +
195 (
m_y - p->m_y) * (
m_y - p->m_y) +
196 (
m_z - p->m_z) * (
m_z - p->m_z));
202 va[0] = a->m_x -
m_x;
203 va[1] = a->m_y -
m_y;
204 va[2] = a->m_z -
m_z;
205 vb[0] = b->m_x -
m_x;
206 vb[1] = b->m_y -
m_y;
207 vb[2] = b->m_z -
m_z;
209 NekDouble lva = sqrt(va[0] * va[0] + va[1] * va[1] + va[2] * va[2]);
210 NekDouble lvb = sqrt(vb[0] * vb[0] + vb[1] * vb[1] + vb[2] * vb[2]);
214 NekDouble cosw = (va[0] * vb[0] + va[1] * vb[1] + va[2] * vb[2]) * aw;
216 cn[0] = vb[1] * va[2] - vb[2] * va[1];
217 cn[1] = vb[2] * va[0] - vb[0] * va[2];
218 cn[2] = vb[0] * va[1] - vb[1] * va[0];
220 NekDouble lcn = sqrt(cn[0] * cn[0] + cn[1] * cn[1] + cn[2] * cn[2]);
227 an += 6.2831853071796;
242 CADCurveList.insert(make_pair(c->GetId(), make_pair(c, t)));
253 CADSurfList.insert(make_pair(s->GetId(), make_pair(s, uv)));
261 return search->second.second;
269 return search->second.second;
274 std::vector<CADCurveSharedPtr> lst;
277 lst.push_back(c.second.first);
284 std::vector<CADSurfSharedPtr> lst;
287 lst.push_back(s.second.first);
367 ASSERTL0(
false,
"Unrecognised rotational direction: " + dir);
377 A[0] = locA[0] -
m_x;
378 A[1] = locA[1] -
m_y;
379 A[2] = locA[2] -
m_z;
380 B[0] = locB[0] -
m_x;
381 B[1] = locB[1] -
m_y;
382 B[2] = locB[2] -
m_z;
384 CP[0] =
A[1] * B[2] -
A[2] * B[1];
385 CP[1] = -1.0 * (
A[0] * B[2] -
A[2] * B[0]);
386 CP[2] =
A[0] * B[1] -
A[1] * B[0];
388 NekDouble ang = sqrt(CP[0] * CP[0] + CP[1] * CP[1] + CP[2] * CP[2]);
390 ang /= sqrt(
A[0] *
A[0] +
A[1] *
A[1] +
A[2] *
A[2]);
391 ang /= sqrt(B[0] * B[0] + B[1] * B[1] + B[2] * B[2]);
393 NekDouble dot = N[0] * CP[0] + N[1] * CP[1] + N[2] * CP[2];
399 ang = 2.0 * M_PI -
ang;
417 std::map<int, std::pair<CADSurfSharedPtr, Array<OneD, NekDouble>>>
426 NodeSharedPtr
const &p2);
428 NodeSharedPtr
const &p2);
430 NodeSharedPtr
const &p2);
432 const NodeSharedPtr &n);
440 struct NodeHash : std::unary_function<NodeSharedPtr, std::size_t>
447 typedef std::unordered_set<NodeSharedPtr, NodeHash>
NodeSet;
static NekDouble ang(NekDouble x, NekDouble y)
NEKMESHUTILS_EXPORT SpatialDomains::PointGeomSharedPtr GetGeom(int coordDim)
Generate a SpatialDomains::PointGeom for this node.
NEKMESHUTILS_EXPORT NekDouble Angle(NodeSharedPtr &a, NodeSharedPtr &b)
std::shared_ptr< CADSurf > CADSurfSharedPtr
#define ASSERTL0(condition, msg)
NEKMESHUTILS_EXPORT Node operator+(const Node &pSrc) const
std::size_t operator()(NodeSharedPtr const &p) const
std::ostream & operator<<(std::ostream &os, const NodeSharedPtr &n)
Print description of node to given ostream.
NEKMESHUTILS_EXPORT NekDouble abs2() const
NEKMESHUTILS_EXPORT bool operator<(const Node &pSrc)
Define node ordering based on ID.
void Move(NekDouble x, NekDouble y, NekDouble z, int c, NekDouble t)
NEKMESHUTILS_EXPORT int GetID(void)
Get the local id;.
NEKMESHUTILS_EXPORT ~Node()
void hash_combine(std::size_t &seed)
NEKMESHUTILS_EXPORT Node operator*(const NekDouble &alpha) const
NekDouble m_y
Y-coordinate.
NEKMESHUTILS_EXPORT NekDouble dot(const Node &pSrc) const
NEKMESHUTILS_EXPORT void operator*=(const NekDouble &alpha)
Defines a hash function for nodes.
void Move(Array< OneD, NekDouble > l, int s, Array< OneD, NekDouble > uv)
Represents a point in the domain.
std::shared_ptr< Node > NodeSharedPtr
std::vector< CADSurfSharedPtr > GetCADSurfs()
std::unordered_set< NodeSharedPtr, NodeHash > NodeSet
void Move(NekDouble x, NekDouble y, NekDouble z, int s, Array< OneD, NekDouble > uv)
void SetCADCurve(CADCurveSharedPtr c, NekDouble t)
NEKMESHUTILS_EXPORT Node operator-(const Node &pSrc) const
bool operator!=(NodeSharedPtr const &p1, NodeSharedPtr const &p2)
Compares two nodes for inequality based on IDs.
NEKMESHUTILS_EXPORT void operator/=(const NekDouble &alpha)
void SetCADSurf(CADSurfSharedPtr s, Array< OneD, NekDouble > uv)
NEKMESHUTILS_EXPORT void SetID(int pId)
Reset the local id;.
std::shared_ptr< CADCurve > CADCurveSharedPtr
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
void Rotate(std::string dir, NekDouble angle)
NEKMESHUTILS_EXPORT NodeSharedPtr copy()
std::shared_ptr< PointGeom > PointGeomSharedPtr
NEKMESHUTILS_EXPORT Node operator*(const Node &pSrc) const
NEKMESHUTILS_EXPORT bool operator==(const Node &pSrc)
Define node equality based on coordinate.
NEKMESHUTILS_EXPORT Node()
Copy an existing node.
NekDouble Angle(Array< OneD, NekDouble > locA, Array< OneD, NekDouble > locB, Array< OneD, NekDouble > N)
NEKMESHUTILS_EXPORT Node curl(const Node &pSrc) const
std::map< int, std::pair< CADSurfSharedPtr, Array< OneD, NekDouble > > > CADSurfList
list of cadsurfs the node lies on
NEKMESHUTILS_EXPORT Node operator/(const NekDouble &alpha) const
NEKMESHUTILS_EXPORT NekDouble Distance(NodeSharedPtr &p)
NekDouble m_x
X-coordinate.
std::map< int, std::pair< CADCurveSharedPtr, NekDouble > > CADCurveList
list of cadcurves the node lies on
NEKMESHUTILS_EXPORT void operator+=(const Node &pSrc)
#define NEKMESHUTILS_EXPORT
NekDouble GetCADCurveInfo(int i)
void Move(Array< OneD, NekDouble > l, int c, NekDouble t)
Array< OneD, NekDouble > GetCADSurfInfo(int i)
NekDouble m_z
Z-coordinate.
std::vector< CADCurveSharedPtr > GetCADCurves()
NEKMESHUTILS_EXPORT Node(int pId, NekDouble pX, NekDouble pY, NekDouble pZ)
Create a new node at a specified coordinate.
SpatialDomains::PointGeomSharedPtr m_geom
NEKMESHUTILS_EXPORT Array< OneD, NekDouble > GetLoc()