12#ifndef BELFEM_CL_NODE_HPP
13#define BELFEM_CL_NODE_HPP
35 Node ** mDuplicates = nullptr ;
36 int mNumberOfDuplicates = 0 ;
38 Node * mPeriodic = nullptr ;
66 x(
const uint aDimension )
const;
217 return mCoords[ aDimension ];
228 return mNumberOfDuplicates == -1 ? 0 : mNumberOfDuplicates ;
236 return mNumberOfDuplicates == -1 ;
248 "Duplicate Index %d for node %lu out of bounds, which must be less than %d",
250 (
long unsigned int ) this->
id(),
251 (
int ) mNumberOfDuplicates );
253 return mDuplicates[ aIndex ];
262 (
long unsigned int ) this->
id(),(
long unsigned int ) this->
original()->
id());
265 BELFEM_ASSERT( mNumberOfDuplicates == 0,
"duplicate container of node %lu already allocated", (
luint) this->
id() );
269 mDuplicates =
new Node * [ aSize ];
271 mNumberOfDuplicates = 0;
279 if( mDuplicates !=
nullptr )
281 delete[] mDuplicates;
282 mDuplicates =
nullptr;
283 mNumberOfDuplicates = 0;
291 mDuplicates[ mNumberOfDuplicates++ ] = aNode ;
299 BELFEM_ASSERT( mNumberOfDuplicates == 0,
"can't set original if this node has duplicates" );
301 mNumberOfDuplicates = -1 ;
302 mDuplicates =
new Node * [ 1 ];
303 mDuplicates[ 0 ] = aNode ;
310 mNumberOfDuplicates = 0 ;
311 delete[] mDuplicates;
312 mDuplicates = nullptr ;
320 return mNumberOfDuplicates == -1 ? mDuplicates[ 0 ] : this ;
327 return mNumberOfDuplicates == -1 ? mDuplicates[ 0 ] : this ;
340 + std::abs( mNumberOfDuplicates ) *
sizeof(
Node * );
366 return mPeriodic != nullptr ;
372 aCoords( 0 ) = mCoords[ 0 ];
373 aCoords( 1 ) = mCoords[ 1 ];
374 aCoords( 2 ) = mCoords[ 2 ];
#define BELFEM_ASSERT(aCheck,...)
Definition assert.hpp:244
Column vector.
Definition cl_BZ_Vector.hpp:41
void set_size(const size_t aNumRows)
change the size of the vector
Definition cl_AR_Vector.hpp:237
Definition cl_Node.hpp:30
void set_periodic(Node *aNode)
Definition cl_Node.hpp:346
void reset_duplicate_container()
Definition cl_Node.hpp:277
void add_duplicate(Node *aNode)
Definition cl_Node.hpp:289
EntityType entity_type() const override
returns the type of this vertex
Definition cl_Node.hpp:175
void get_coords(Vector< real > &aCoords)
Definition cl_Node.hpp:369
bool is_periodic() const
Definition cl_Node.hpp:364
size_t memory() const
Definition cl_Node.hpp:333
bool is_duplicate() const
Definition cl_Node.hpp:234
void allocate_duplicate_container(const uint aSize)
Definition cl_Node.hpp:259
void unlink_from_original()
Definition cl_Node.hpp:307
Node * periodic()
Definition cl_Node.hpp:352
real y() const
Definition cl_Node.hpp:191
Node(const id_t &aID, const real aX=0.0, const real aY=0.0, const real aZ=0.0)
Definition cl_Node.cpp:21
Node * original()
returns the original of this node
Definition cl_Node.hpp:318
real x() const
Definition cl_Node.hpp:183
uint number_of_duplicates() const
returns the number of duplicates of this node
Definition cl_Node.hpp:226
Vector< real > coords() const
Definition cl_Node.hpp:207
Node * duplicate(const uint aIndex)
returns duplicates of this node
Definition cl_Node.hpp:245
void set_coords(const Vector< real > &aCoords)
change the coordinates of this node
Definition cl_Node.cpp:48
void set_original(Node *aNode)
Definition cl_Node.hpp:297
real z() const
Definition cl_Node.hpp:199
Vertex()
Definition cl_Vertex.cpp:24
size_t array_memory() const
Definition cl_Vertex.hpp:304
Definition cl_EF_EdgeFunction.hpp:17
USER GUIDES:
Definition cl_Capacitor.cpp:16
long unsigned int luint
Definition typedefs.hpp:33
unsigned int uint
Definition typedefs.hpp:30
unsigned int id_t
Definition typedefs.hpp:41
EntityType
Definition Mesh_Enums.hpp:116
@ NODE
Definition Mesh_Enums.hpp:117
double real
Definition typedefs.hpp:36