BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Element.hpp
Go to the documentation of this file.
1/*
2 * BELFEM -- The Berkeley Lab Finite Element Framework
3 * Copyright (c) 2026, The Regents of the University of California,
4 * through Lawrence Berkeley National Laboratory (subject to receipt of any required
5 * approvals from the U.S. Dept. of Energy). All rights reserved.
6 *
7 * Developers: Christian Messe, Gregory Giard
8 *
9 * See the top-level LICENSE file for the complete license and disclaimer.
10 */
11
12#ifndef BELFEM_MESH_ELEMENT_HPP
13#define BELFEM_MESH_ELEMENT_HPP
14
15#include "assert.hpp"
16#include "typedefs.hpp"
17#include "cl_Cell.hpp"
18
19#include "Mesh_Enums.hpp"
20#include "cl_ControlPoint.hpp"
21#include "cl_Node.hpp"
22#include "cl_Edge.hpp"
23#include "cl_Face.hpp"
24
25namespace belfem
26{
27//------------------------------------------------------------------------------
28
29 namespace mesh
30 {
34 class Element : public Basis
35 {
36//------------------------------------------------------------------------------
37 protected:
38//------------------------------------------------------------------------------
39
41 bool mCurvedFlag = true ;
42
45 uint16_t mElementTags[ 2 ] = { 0, 0 };
46
47 uint16_t mNumberOfElements = 0;
48
51
53 Element ** mElements = nullptr ;
54
57 Element ** mNeighbors = nullptr ;
58
59 // Facets connected to this element (probably not needed anymore)
60 Facet ** mFacets = nullptr ;
61
64
65//------------------------------------------------------------------------------
66 public:
67//------------------------------------------------------------------------------
68
69 Element( const id_t aID );
70
71//------------------------------------------------------------------------------
72
73 ~Element() override ;
74
75//------------------------------------------------------------------------------
76
77 void
78 set_geometry_tag( const uint aTag );
79
80//------------------------------------------------------------------------------
81
82 void
83 set_physical_tag( const uint aTag );
84
85//------------------------------------------------------------------------------
86
87 void
88 set_block_id( const id_t aID );
89
90//------------------------------------------------------------------------------
91
92 id_t
93 block_id() const;
94
95//------------------------------------------------------------------------------
96
97 uint
98 geometry_tag() const;
99
100//------------------------------------------------------------------------------
101
102 uint
103 physical_tag() const ;
104
105//------------------------------------------------------------------------------
106
107 virtual uint
108 dimension() const ;
109
110//------------------------------------------------------------------------------
111
112 void
114
115//------------------------------------------------------------------------------
116
117 void
119
120//------------------------------------------------------------------------------
121
122 bool
123 is_curved() const;
124
125//------------------------------------------------------------------------------
126
127 uint
128 number_of_nodes() const override
129 {
130 BELFEM_ERROR( false,
131 "invalid call of base class function number_of_nodes() from Element %lu",
132 ( long unsigned int ) this->id() );
133
134 return 0;
135 }
136
137//------------------------------------------------------------------------------
138
139 virtual uint
141 {
142 BELFEM_ERROR( false,
143 "invalid call of base class function number_of_corner_nodes() from Element %lu",
144 ( long unsigned int ) this->id() );
145
146 return 0;
147 }
148
149//------------------------------------------------------------------------------
150
151 virtual uint
153 {
154 BELFEM_ERROR( false,
155 "invalid call of base class function number_of_facets() from Element %lu",
156 ( long unsigned int ) this->id() );
157
158 return 0;
159 }
160
161//------------------------------------------------------------------------------
162
163 uint
164 number_of_faces() const override
165 {
166 BELFEM_ERROR( false,
167 "invalid call of base class function number_of_faces() from Element %lu",
168 ( long unsigned int ) this->id() );
169
170 return 0;
171 }
172
173//------------------------------------------------------------------------------
174
175 uint
176 number_of_edges() const override
177 {
178 BELFEM_ERROR( false,
179 "invalid call of base class function number_of_edges() from Element %lu",
180 ( long unsigned int ) this->id() );
181
182 return 0;
183 }
184
185//------------------------------------------------------------------------------
186
187 virtual bool
188 is_thinshell() const { return false; }
189
190//------------------------------------------------------------------------------
191
192 uint
194 {
196 }
197
198//------------------------------------------------------------------------------
199
201 control_point( const uint aIndex )
202 {
203 BELFEM_ASSERT( aIndex < mNumberOfControlPoints, "invalid control point index" );
204 return mControlPoints[ aIndex ];
205 }
206
207 //------------------------------------------------------------------------------
208
210 control_point( const uint aIndex ) const
211 {
212 BELFEM_ASSERT( aIndex < mNumberOfControlPoints, "invalid control point index" );
213 return mControlPoints[ aIndex ];
214 }
215
216//------------------------------------------------------------------------------
217
218 virtual inline bool
219 has_edges() const
220 {
221 BELFEM_ERROR( false,
222 "invalid call of base class function has_edges() from Element %lu",
223 ( long unsigned int ) this->id() );
224
225 return false ;
226 }
227
228//------------------------------------------------------------------------------
229
230 virtual inline bool
231 has_faces() const
232 {
233 BELFEM_ERROR( false,
234 "invalid call of base class function has_faces() from Element %lu",
235 ( long unsigned int ) this->id() );
236
237 return false ;
238 }
239
240//------------------------------------------------------------------------------
241
242 virtual ElementType
243 type() const
244 {
245 BELFEM_ERROR( false,
246 "invalid call of base class function type() from Element %lu",
247 ( long unsigned int ) this->id() );
249 }
250
251//------------------------------------------------------------------------------
252
253 Node *
254 node( const uint aIndex ) override
255 {
256 BELFEM_ERROR( false,
257 "invalid call of base class function node() from Element %lu",
258 ( long unsigned int ) this->id() );
259
260 return nullptr;
261 }
262
263//------------------------------------------------------------------------------
264
265 const Node *
266 node( const uint aIndex ) const override
267 {
268 BELFEM_ERROR( false,
269 "invalid call of base class function const node() from Element %lu",
270 ( long unsigned int ) this->id() );
271
272 return nullptr;
273 }
274
275//------------------------------------------------------------------------------
276
277 Edge *
278 edge( const uint aIndex ) override
279 {
280 BELFEM_ERROR( false,
281 "invalid call of base class function edge() from Element %lu",
282 ( long unsigned int ) this->id() );
283
284 return nullptr;
285 }
286
287//------------------------------------------------------------------------------
288
289 const Edge *
290 edge( const uint aIndex ) const override
291 {
292 BELFEM_ERROR( false,
293 "invalid call of base class function const edge() from Element %lu",
294 ( long unsigned int ) this->id() );
295
296 return nullptr;
297 }
298
299//------------------------------------------------------------------------------
300
301 Face *
302 face( const uint aIndex ) override
303 {
304 BELFEM_ERROR( false,
305 "invalid call of base class function face() from Element %lu",
306 ( long unsigned int ) this->id() );
307
308 return nullptr;
309 }
310
311//------------------------------------------------------------------------------
312
313 const Face *
314 face( const uint aIndex ) const override
315 {
316 BELFEM_ERROR( false,
317 "invalid call of base class function const face() from Element %lu",
318 ( long unsigned int ) this->id() );
319
320 return nullptr;
321 }
322
323
324//------------------------------------------------------------------------------
325
326 virtual void
327 insert_node( Node * aNode, const uint aIndex )
328 {
329 BELFEM_ERROR( false,
330 "invalid call of base class function insert_node() from Element %lu",
331 ( long unsigned int ) this->id() );
332 }
333
334//------------------------------------------------------------------------------
335
336 virtual void
337 insert_edge( Edge * aEdge, const uint aIndex )
338 {
339 BELFEM_ERROR( false,
340 "invalid call of base class function insert_edge() from Element %lu",
341 ( long unsigned int ) this->id() );
342 }
343
344//------------------------------------------------------------------------------
345
346 virtual void
347 insert_face( Face * aFace, const uint aIndex )
348 {
349 BELFEM_ERROR( false,
350 "invalid call of base class function insert_face() from Element %lu",
351 ( long unsigned int ) this->id() );
352 }
353
354//------------------------------------------------------------------------------
355
356 virtual void
357 insert_control_point( ControlPoint * aControlPoint, const uint aIndex )
358 {
359 BELFEM_ASSERT( aIndex < mNumberOfControlPoints, "invalid control point index" );
360 mControlPoints[ aIndex ] = aControlPoint;
361 }
362//------------------------------------------------------------------------------
363
364 virtual void
365 unflag_nodes( const uint8_t aIndex=0 )
366 {
367 BELFEM_ERROR( false,
368 "invalid call of base class function unflag_nodes() from Element %lu",
369 ( long unsigned int ) this->id() );
370 }
371
372//------------------------------------------------------------------------------
373
374 virtual void
375 flag_nodes( const uint8_t aIndex=0 )
376 {
377 BELFEM_ERROR( false,
378 "invalid call of base class function flag_nodes() from Element %lu",
379 ( long unsigned int ) this->id() );
380 }
381
382//------------------------------------------------------------------------------
383
387 virtual void
388 flag_corner_nodes( const uint8_t aIndex=0 )
389 {
390 BELFEM_ERROR( false,
391 "invalid call of base class function flag_corner_nodes() from Element %lu",
392 ( long unsigned int ) this->id() );
393 }
394
395//------------------------------------------------------------------------------
396
400 virtual void
401 unflag_corner_nodes( const uint8_t aIndex=0 )
402 {
403 BELFEM_ERROR( false,
404 "invalid call of base class function unflag_corner_nodes() from Element %lu",
405 ( long unsigned int ) this->id() );
406 }
407
408//------------------------------------------------------------------------------
409
410 virtual void
412 {
413 BELFEM_ERROR( false,
414 "invalid call of base class function unflag_edges() from Element %lu",
415 ( long unsigned int ) this->id() );
416 }
417
418//------------------------------------------------------------------------------
419
420 virtual void
422 {
423 BELFEM_ERROR( false,
424 "invalid call of base class function flag_edges() from Element %lu",
425 ( long unsigned int ) this->id() );
426 }
427
428//------------------------------------------------------------------------------
429
430 virtual void
432 {
433 BELFEM_ERROR( false,
434 "invalid call of base class function unflag_faces() from Element %lu",
435 ( long unsigned int ) this->id() );
436 }
437
438//------------------------------------------------------------------------------
439
440 virtual void
442 {
443 BELFEM_ERROR( false,
444 "invalid call of base class function flag_faces() from Element %lu",
445 ( long unsigned int ) this->id() );
446 }
447
448//------------------------------------------------------------------------------
449
450 virtual void
451 get_nodes_of_facet( const uint aFacetIndex, Cell<Node *> & aNodes )
452 {
453 BELFEM_ERROR( false,
454 "invalid call of base class function get_nodes_of_facet() from Element %lu",
455 ( long unsigned int ) this->id() );
456 }
457
458//------------------------------------------------------------------------------
459
460 virtual void
461 get_corner_nodes_of_facet( const uint aFacetIndex, Cell<Node *> & aNodes )
462 {
463 BELFEM_ERROR( false,
464 "invalid call of base class function get_corner_nodes_of_facet() from Element %lu",
465 ( long unsigned int ) this->id() );
466 }
467
468//------------------------------------------------------------------------------
469
470 virtual void
471 get_edges_of_facet( const uint aFacetIndex, Cell< Edge * > & aEdges )
472 {
473 BELFEM_ERROR( false,
474 "invalid call of base class function get_edges_of_facet() from Element %lu",
475 ( long unsigned int ) this->id() );
476 }
477
478
479//------------------------------------------------------------------------------
480
481 virtual void
482 get_nodes_of_edge( const uint aEdgeIndex, Cell<Node *> & aNodes )
483 {
484 BELFEM_ERROR( false,
485 "invalid call of base class function get_nodes_of_edge() from Element %lu",
486 ( long unsigned int ) this->id() );
487 }
488
489//------------------------------------------------------------------------------
490
491 virtual Node *
492 node_of_edge( const uint aNodeIndex, const uint aEdgeIndex )
493 {
494 BELFEM_ERROR( false,
495 "invalid call of base class function get_node_of_edge() from Element %lu",
496 ( long unsigned int ) this->id() );
497 return nullptr ;
498 }
499
500//------------------------------------------------------------------------------
501
502 virtual void
504 {
505 BELFEM_ERROR( false,
506 "invalid call of base class function allocate_edge_container() from Element %lu",
507 ( long unsigned int ) this->id() );
508 }
509
510//------------------------------------------------------------------------------
511
512 virtual void
514 {
515 BELFEM_ERROR( false,
516 "invalid call of base class function allocate_face_container() from Element %lu",
517 ( long unsigned int ) this->id() );
518 }
519
520//------------------------------------------------------------------------------
521
522 virtual void
524 {
525 BELFEM_ASSERT( mControlPoints == nullptr,
526 "control points already allocated" );
527
528 // the count field is narrow; refuse before anything is allocated
529 BELFEM_ERROR( aSize <= std::numeric_limits< decltype( mNumberOfControlPoints ) >::max(),
530 "control point count of element %lu overflows its counter width ( %u requested )",
531 ( long unsigned int ) this->id(), ( unsigned int ) aSize );
532
533 mControlPoints = (ControlPoint **) malloc( aSize * sizeof(ControlPoint *) );
534
535 // we need to initialize with null pointers because sometimes,
536 // not all points might be set
537 for ( uint i = 0; i < aSize; ++i )
538 {
539 mControlPoints[ i ] = nullptr;
540 }
541 mNumberOfControlPoints = aSize ;
542 }
543
544//------------------------------------------------------------------------------
545
546 void
548 {
549 if ( mControlPoints != nullptr )
550 {
551 free( mControlPoints );
552 mControlPoints = nullptr ;
554 }
555 }
556//------------------------------------------------------------------------------
557
558 virtual void
559 set_edge_direction( const uint aEdgeIndex, const bool aIsPlus )
560 {
561 BELFEM_ERROR( false,
562 "invalid call of base class function set_edge_direction() from Element %lu",
563 ( long unsigned int ) this->id() );
564 }
565
566
567//------------------------------------------------------------------------------
568
569 virtual bool
570 edge_direction( const uint aEdgeIndex ) const
571 {
572 BELFEM_ERROR( false,
573 "invalid call of base class function edge_direction() from Element %lu",
574 ( long unsigned int ) this->id() );
575
576 return false ;
577 }
578
579//------------------------------------------------------------------------------
580
581 virtual void
583 {
584 BELFEM_ERROR( false,
585 "invalid call of base class function reset_edge_container() from Element %lu",
586 ( long unsigned int ) this->id() );
587 }
588
589//------------------------------------------------------------------------------
590
591 virtual void
593 {
594 BELFEM_ERROR( false,
595 "invalid call of base class function reset_face_container() from Element %lu",
596 ( long unsigned int ) this->id() );
597 }
598
599//------------------------------------------------------------------------------
600
601 void
603
604//------------------------------------------------------------------------------
605
606 void
607 allocate_element_container( const uint aSize=0 );
608
609//------------------------------------------------------------------------------
610
611 void
612 allocate_facet_container( const uint aSize );
613
614//------------------------------------------------------------------------------
615
616 void
618
619//------------------------------------------------------------------------------
620
621 void
622 insert_neighbor( Element * aNeighbor, const uint aIndex );
623
624//------------------------------------------------------------------------------
625
626 void
627 insert_element( Element * aElement );
628
629//------------------------------------------------------------------------------
630
631 void
632 insert_facet( Facet * aFacet, const uint aIndex );
633
634//------------------------------------------------------------------------------
635
636 void
637 reset_element_container() override;
638
639//------------------------------------------------------------------------------
640
641 // get the connected element
642 Element *
643 element( const uint aIndex ) override;
644
645//------------------------------------------------------------------------------
646
647 // get the neighbor, warning: may return nullptr if on domain edge!
648 Element *
649 neighbor( const uint aIndex );
650
651//------------------------------------------------------------------------------
652
653 // get the facet element
654 Facet *
655 facet( const uint aIndex );
656
657//------------------------------------------------------------------------------
658
659 uint
660 number_of_elements() const override;
661
662//------------------------------------------------------------------------------
663
668 entity_type() const override ;
669
670//------------------------------------------------------------------------------
671
672 virtual void
673 print() const ;
674
675//------------------------------------------------------------------------------
676
679 virtual size_t
680 memory() const ;
681
682//------------------------------------------------------------------------------
683 protected:
684//------------------------------------------------------------------------------
685
692 size_t
693 array_memory() const ;
694
695//------------------------------------------------------------------------------
696 };
697
698//------------------------------------------------------------------------------
699
700 inline void
702 {
703 BELFEM_ASSERT( aID < std::numeric_limits<uint16_t>::max(), "Buffer overflow for geometry tag, aka block id" );
704 mElementTags[ 0 ] = aID ;
705 }
706
707//------------------------------------------------------------------------------
708
709 inline void
711 {
712 BELFEM_ASSERT( aTag < std::numeric_limits<uint16_t>::max(), "Buffer overflow for geometry tag, aka block id" );
713 mElementTags[ 0 ] = aTag;
714 }
715
716//------------------------------------------------------------------------------
717
718 inline void
720 {
721 BELFEM_ASSERT( aTag < std::numeric_limits<uint16_t>::max(), "Buffer overflow for physical id" );
722 mElementTags[ 1 ] = aTag;
723 }
724
725//------------------------------------------------------------------------------
726
727 inline id_t
729 {
730 return mElementTags[ 0 ] ;
731 }
732
733//------------------------------------------------------------------------------
734
735 inline uint
737 {
738 return mElementTags[ 0 ];
739 }
740
741//------------------------------------------------------------------------------
742
743 inline uint
745 {
746 return mElementTags[ 1 ];
747 }
748
749//------------------------------------------------------------------------------
750
751 inline uint
753 {
754 BELFEM_ERROR( false, "invalid call to Element::dimension()" );
755 return BELFEM_UINT_MAX;
756 }
757
758//------------------------------------------------------------------------------
759
760 inline void
762 {
763 mCurvedFlag = true ;
764 }
765
766//------------------------------------------------------------------------------
767
768 inline void
770 {
771 mCurvedFlag = false ;
772 }
773
774//------------------------------------------------------------------------------
775
776 inline bool
778 {
779 return mCurvedFlag;
780 }
781
782//------------------------------------------------------------------------------
783
784 // get the connected element
785 inline Element *
786 Element::element( const uint aIndex )
787 {
788 return mElements[ aIndex ];
789 }
790
791//------------------------------------------------------------------------------
792
793 inline Facet *
794 Element::facet( const uint aIndex )
795 {
796 return mFacets[ aIndex ];
797 }
798
799//------------------------------------------------------------------------------
800
801 inline uint
803 {
804 return mNumberOfElements ;
805 }
806
807//------------------------------------------------------------------------------
808
809 inline EntityType
811 {
812 return EntityType::CELL ;
813 }
814
815//------------------------------------------------------------------------------
816
817 inline Element *
818 Element::neighbor( const uint aIndex )
819 {
820 return mNeighbors[ aIndex ];
821 }
822
823//------------------------------------------------------------------------------
824
825 inline size_t
827 {
828 size_t tMem = this->number_of_vertices() * sizeof( graph::Vertex * );
829
830 tMem += this->number_of_dofs() * sizeof( graph::Vertex * );
831
832 // sources and weights are parallel arrays with the same slot count
833 tMem += this->number_of_sources() * ( sizeof( Basis * ) + sizeof( real ) );
834
835 tMem += this->number_of_elements() * sizeof( Element * );
836 tMem += this->number_of_control_points() * sizeof( ControlPoint * );
837
838 // neighbors and facets exist only once allocated; both carry
839 // one slot per facet
840 if( mNeighbors != nullptr )
841 {
842 tMem += this->number_of_facets() * sizeof( Element * );
843 }
844 if( mFacets != nullptr )
845 {
846 tMem += this->number_of_facets() * sizeof( Facet * );
847 }
848
849 return tMem ;
850 }
851
852//------------------------------------------------------------------------------
853
854 inline size_t
856 {
857 return sizeof( Element ) + this->array_memory() ;
858 }
859
860//------------------------------------------------------------------------------
861 }
862}
863#endif //BELFEM_MESH_ELEMENT_HPP
#define BELFEM_ERROR(aCheck,...)
Definition assert.hpp:264
#define BELFEM_ASSERT(aCheck,...)
Definition assert.hpp:244
Cell is a wrapper around the standard vector.
Definition cl_Cell.hpp:42
Graph node with an adjacency list; the vertex type the graph algorithms operate on.
Definition cl_Graph_Vertex.hpp:32
uint number_of_vertices() const
Definition cl_Graph_Vertex.hpp:321
uint number_of_dofs() const
Definition cl_Mesh_Basis.hpp:303
uint number_of_sources() const
Definition cl_Mesh_Basis.hpp:240
Basis()
Definition cl_Mesh_Basis.cpp:21
Definition cl_ControlPoint.hpp:27
Special Edge class for NEDELEC-Type elements.
Definition cl_Edge.hpp:30
Lagrange Element baseclass.
Definition cl_Element.hpp:35
void set_physical_tag(const uint aTag)
Definition cl_Element.hpp:719
virtual void flag_faces()
Definition cl_Element.hpp:441
Element * element(const uint aIndex) override
Definition cl_Element.hpp:786
ControlPoint * control_point(const uint aIndex) const
Definition cl_Element.hpp:210
virtual void insert_control_point(ControlPoint *aControlPoint, const uint aIndex)
Definition cl_Element.hpp:357
uint16_t mNumberOfElements
Definition cl_Element.hpp:47
void insert_facet(Facet *aFacet, const uint aIndex)
Definition cl_Element.cpp:156
virtual bool edge_direction(const uint aEdgeIndex) const
Definition cl_Element.hpp:570
uint number_of_edges() const override
Definition cl_Element.hpp:176
void unset_curved_flag()
Definition cl_Element.hpp:769
ControlPoint * control_point(const uint aIndex)
Definition cl_Element.hpp:201
virtual bool is_thinshell() const
Definition cl_Element.hpp:188
Face * face(const uint aIndex) override
Definition cl_Element.hpp:302
uint number_of_nodes() const override
Definition cl_Element.hpp:128
virtual ElementType type() const
Definition cl_Element.hpp:243
void set_curved_flag()
Definition cl_Element.hpp:761
const Edge * edge(const uint aIndex) const override
Definition cl_Element.hpp:290
Facet * facet(const uint aIndex)
Definition cl_Element.hpp:794
bool is_curved() const
Definition cl_Element.hpp:777
virtual void get_edges_of_facet(const uint aFacetIndex, Cell< Edge * > &aEdges)
Definition cl_Element.hpp:471
virtual void flag_nodes(const uint8_t aIndex=0)
Definition cl_Element.hpp:375
id_t block_id() const
Definition cl_Element.hpp:728
uint geometry_tag() const
Definition cl_Element.hpp:736
void allocate_element_container(const uint aSize=0)
Definition cl_Element.cpp:59
void reset_control_point_container()
Definition cl_Element.hpp:547
virtual void insert_edge(Edge *aEdge, const uint aIndex)
Definition cl_Element.hpp:337
ControlPoint ** mControlPoints
control points connected to this element, if any
Definition cl_Element.hpp:63
virtual void get_nodes_of_edge(const uint aEdgeIndex, Cell< Node * > &aNodes)
Definition cl_Element.hpp:482
virtual void insert_node(Node *aNode, const uint aIndex)
Definition cl_Element.hpp:327
virtual void allocate_edge_container()
Definition cl_Element.hpp:503
void increment_element_counter()
Definition cl_Element.cpp:51
Element ** mNeighbors
Definition cl_Element.hpp:57
size_t array_memory() const
Definition cl_Element.hpp:826
Element * neighbor(const uint aIndex)
Definition cl_Element.hpp:818
void set_geometry_tag(const uint aTag)
Definition cl_Element.hpp:710
virtual void unflag_edges()
Definition cl_Element.hpp:411
virtual void unflag_nodes(const uint8_t aIndex=0)
Definition cl_Element.hpp:365
virtual uint number_of_facets() const
Definition cl_Element.hpp:152
virtual void get_corner_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes)
Definition cl_Element.hpp:461
virtual void flag_edges()
Definition cl_Element.hpp:421
virtual void allocate_control_points_container(const uint aSize)
Definition cl_Element.hpp:523
const Node * node(const uint aIndex) const override
Definition cl_Element.hpp:266
uint number_of_elements() const override
Definition cl_Element.hpp:802
uint number_of_faces() const override
Definition cl_Element.hpp:164
virtual void unflag_faces()
Definition cl_Element.hpp:431
void reset_element_container() override
Definition cl_Element.cpp:164
uint number_of_control_points() const
Definition cl_Element.hpp:193
virtual void unflag_corner_nodes(const uint8_t aIndex=0)
flags nodes for linear representation only
Definition cl_Element.hpp:401
uint8_t mNumberOfControlPoints
number of control points connected to this element
Definition cl_Element.hpp:50
virtual size_t memory() const
Definition cl_Element.hpp:855
void allocate_neighbor_container()
Definition cl_Element.cpp:119
void insert_element(Element *aElement)
Definition cl_Element.cpp:148
EntityType entity_type() const override
returns a cell, needed for DOF handling
Definition cl_Element.hpp:810
Edge * edge(const uint aIndex) override
Definition cl_Element.hpp:278
virtual uint number_of_corner_nodes() const
Definition cl_Element.hpp:140
Element ** mElements
Elements connected to this element.
Definition cl_Element.hpp:53
uint16_t mElementTags[2]
Definition cl_Element.hpp:45
virtual void reset_face_container()
Definition cl_Element.hpp:592
virtual void set_edge_direction(const uint aEdgeIndex, const bool aIsPlus)
Definition cl_Element.hpp:559
Element(const id_t aID)
Definition cl_Element.cpp:21
virtual void allocate_face_container()
Definition cl_Element.hpp:513
Facet ** mFacets
Definition cl_Element.hpp:60
virtual void insert_face(Face *aFace, const uint aIndex)
Definition cl_Element.hpp:347
virtual bool has_edges() const
Definition cl_Element.hpp:219
virtual void flag_corner_nodes(const uint8_t aIndex=0)
flags nodes for linear representation only
Definition cl_Element.hpp:388
void insert_neighbor(Element *aNeighbor, const uint aIndex)
Definition cl_Element.cpp:140
virtual Node * node_of_edge(const uint aNodeIndex, const uint aEdgeIndex)
Definition cl_Element.hpp:492
Node * node(const uint aIndex) override
Definition cl_Element.hpp:254
void set_block_id(const id_t aID)
Definition cl_Element.hpp:701
bool mCurvedFlag
flag telling if this element is curved
Definition cl_Element.hpp:41
virtual void print() const
Definition cl_Element.cpp:177
virtual uint dimension() const
Definition cl_Element.hpp:752
virtual void get_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes)
Definition cl_Element.hpp:451
const Face * face(const uint aIndex) const override
Definition cl_Element.hpp:314
virtual void reset_edge_container()
Definition cl_Element.hpp:582
virtual bool has_faces() const
Definition cl_Element.hpp:231
void allocate_facet_container(const uint aSize)
Definition cl_Element.cpp:91
uint physical_tag() const
Definition cl_Element.hpp:744
Definition cl_Face.hpp:29
Definition cl_Facet.hpp:24
Definition cl_Node.hpp:30
Definition cl_EF_EdgeFunction.hpp:17
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30
unsigned int id_t
Definition typedefs.hpp:41
ElementType
Element types.
Definition Mesh_Enums.hpp:27
@ UNDEFINED
Definition Mesh_Enums.hpp:64
T max(const Vector< T > &aVector)
Definition fn_AR_max.hpp:24
EntityType
Definition Mesh_Enums.hpp:116
@ CELL
Definition Mesh_Enums.hpp:120
EntityType entity_type(const string &aFieldLabel)
guesses the type of the entity based on the passed field
Definition fn_entity_type.cpp:21
double real
Definition typedefs.hpp:36
#define BELFEM_UINT_MAX
Definition typedefs.hpp:80