12#ifndef BELFEM_CL_FEM_POSTPROCESSOR_HPP
13#define BELFEM_CL_FEM_POSTPROCESSOR_HPP
66 bool mIsInitialized = false ;
68 bool mHaveEdges = false ;
69 bool mHaveFaces = false ;
92 uint mNumCoefficients = 0 ;
96 bool mShellLocal = false ;
107 real mElementThickness = 1.0 ;
230 create_target_fields();
233 check_if_we_have_edges_and_faces();
236 select_elements_and_owned_nodes();
239 select_all_relevant_nodes();
242 synch_node_indices(
const bool aOwnedOnly );
255 get_interpolation_order(
const Mesh * aMesh )
const;
258 compute_node_matrices();
261 select_recovery_mode();
270 shell_offset(
const uint aLocalNode,
const uint aK )
const ;
273 compute_node_frame(
mesh::Node * aNode, NodeFrame & aFrame );
276 add_node_gram(
mesh::Node * aNode,
const NodeFrame & aFrame );
279 compute_local_poly(
const NodeFrame & aFrame,
const uint aLocalNode,
const uint aK );
285 delete_node_matrices();
290 const uint aLocalNode,
295 synch_source_field(
const string & aField );
308 poly1_2d(
const real x,
const real y );
311 poly2_2d(
const real x,
const real y );
314 poly3_2d(
const real x,
const real y );
317 poly4_2d(
const real x,
const real y );
342 return mNumTruncated ;
374 (this->*mFunComputePoly)( aX );
381 (this->*mFunPoly2D )( aX( 0 ), aX( 1 ) );
387 (this->*mFunPoly3D )( aX( 0 ), aX( 1 ), aX( 2 ) );
391 Postprocessor::poly1_2d(
const real x,
const real y )
393 mPoly( 0, 0 ) = 1.0 ;
399 Postprocessor::poly2_2d(
const real x,
const real y )
401 mPoly( 0, 0 ) = 1.0 ;
404 mPoly( 3, 0 ) =
x*
x ;
405 mPoly( 4, 0 ) =
x*
y ;
406 mPoly( 5, 0 ) =
y*
y ;
410 Postprocessor::poly3_2d(
const real x,
const real y )
412 mPoly( 0, 0 ) = 1.0 ;
415 mPoly( 3, 0 ) =
x*
x ;
416 mPoly( 4, 0 ) =
x*
y ;
417 mPoly( 5, 0 ) =
y*
y ;
418 mPoly( 6, 0 ) = mPoly( 3, 0 )*
x ;
419 mPoly( 7, 0 ) = mPoly( 3, 0 )*
y ;
420 mPoly( 8, 0 ) =
x * mPoly( 5, 0 );
421 mPoly( 9, 0 ) =
y * mPoly( 5, 0 );
425 Postprocessor::poly4_2d(
const real x,
const real y )
427 mPoly( 0, 0 ) = 1.0 ;
430 mPoly( 3, 0 ) =
x*
x ;
431 mPoly( 4, 0 ) =
x*
y ;
432 mPoly( 5, 0 ) =
y*
y ;
433 mPoly( 6, 0 ) = mPoly( 3, 0 )*
x ;
434 mPoly( 7, 0 ) = mPoly( 3, 0 )*
y ;
435 mPoly( 8, 0 ) =
x * mPoly( 5, 0 );
436 mPoly( 9, 0 ) =
y * mPoly( 5, 0 );
437 mPoly( 10, 0 ) = mPoly( 3, 0 ) * mPoly( 3, 0 );
438 mPoly( 11, 0 ) = mPoly( 6, 0 ) *
y ;
439 mPoly( 12, 0 ) = mPoly( 3, 0 ) * mPoly( 5, 0 ) ;
440 mPoly( 13, 0 ) =
x * mPoly( 9, 0 ) ;
441 mPoly( 14, 0 ) = mPoly( 5, 0 ) * mPoly( 5, 0 ) ;
445 Postprocessor::poly1_3d(
const real x,
const real y,
const real z )
447 mPoly( 0, 0 ) = 1.0 ;
454 Postprocessor::poly2_3d(
const real x,
const real y,
const real z )
456 mPoly( 0, 0 ) = 1.0 ;
460 mPoly( 4, 0 ) =
x*
x ;
461 mPoly( 5, 0 ) =
x*
y ;
462 mPoly( 6, 0 ) =
y*
y ;
463 mPoly( 7, 0 ) =
y*z ;
464 mPoly( 8, 0 ) = z*z ;
465 mPoly( 9, 0 ) = z*
x ;
469 Postprocessor::poly3_3d(
const real x,
const real y,
const real z )
471 mPoly( 0, 0 ) = 1.0 ;
475 mPoly( 4, 0 ) =
x*
x ;
476 mPoly( 5, 0 ) =
x*
y ;
477 mPoly( 6, 0 ) =
y*
y ;
478 mPoly( 7, 0 ) =
y*z ;
479 mPoly( 8, 0 ) = z*z ;
480 mPoly( 9, 0 ) = z*
x ;
481 mPoly( 10, 0 ) = mPoly( 4, 0 ) *
x ;
482 mPoly( 11, 0 ) = mPoly( 4, 0 ) *
y ;
483 mPoly( 12, 0 ) =
x * mPoly( 6, 0 ) ;
484 mPoly( 13, 0 ) =
y * mPoly( 6, 0 ) ;
485 mPoly( 14, 0 ) = z * mPoly( 6, 0 ) ;
486 mPoly( 15, 0 ) =
y * mPoly( 8, 0 ) ;
487 mPoly( 16, 0 ) = z * mPoly( 8, 0 ) ;
488 mPoly( 17, 0 ) =
x * mPoly( 8, 0 ) ;
489 mPoly( 18, 0 ) = mPoly( 4, 0 ) * z ;
490 mPoly( 19, 0 ) =
x *
y * z ;
494 Postprocessor::poly4_3d(
const real x,
const real y,
const real z )
496 mPoly( 0, 0 ) = 1.0 ;
500 mPoly( 4, 0 ) =
x*
x ;
501 mPoly( 5, 0 ) =
x*
y ;
502 mPoly( 6, 0 ) =
y*
y ;
503 mPoly( 7, 0 ) =
y*z ;
504 mPoly( 8, 0 ) = z*z ;
505 mPoly( 9, 0 ) = z*
x ;
506 mPoly( 10, 0 ) = mPoly( 4, 0 ) *
x ;
507 mPoly( 11, 0 ) = mPoly( 4, 0 ) *
y ;
508 mPoly( 12, 0 ) =
x * mPoly( 6, 0 ) ;
509 mPoly( 13, 0 ) =
y * mPoly( 6, 0 ) ;
510 mPoly( 14, 0 ) = z * mPoly( 6, 0 ) ;
511 mPoly( 15, 0 ) =
y * mPoly( 8, 0 ) ;
512 mPoly( 16, 0 ) = z * mPoly( 8, 0 ) ;
513 mPoly( 17, 0 ) =
x * mPoly( 8, 0 ) ;
514 mPoly( 18, 0 ) = mPoly( 4, 0 ) * z ;
515 mPoly( 19, 0 ) =
x *
y * z ;
516 mPoly( 20, 0 ) = mPoly( 4, 0 ) * mPoly( 4, 0 ) ;
517 mPoly( 21, 0 ) = mPoly( 4, 0 ) * mPoly( 5, 0 ) ;
518 mPoly( 22, 0 ) = mPoly( 4, 0 ) * mPoly( 6, 0 ) ;
519 mPoly( 23, 0 ) = mPoly( 5, 0 ) * mPoly( 6, 0 ) ;
520 mPoly( 24, 0 ) = mPoly( 6, 0 ) * mPoly( 6, 0 ) ;
521 mPoly( 25, 0 ) = mPoly( 6, 0 ) * mPoly( 7, 0 ) ;
522 mPoly( 26, 0 ) = mPoly( 6, 0 ) * mPoly( 8, 0 ) ;
523 mPoly( 27, 0 ) = mPoly( 7, 0 ) * mPoly( 8, 0 ) ;
524 mPoly( 28, 0 ) = mPoly( 8, 0 ) * mPoly( 8, 0 ) ;
525 mPoly( 29, 0 ) = mPoly( 9, 0 ) * mPoly( 8, 0 ) ;
526 mPoly( 30, 0 ) = mPoly( 4, 0 ) * mPoly( 8, 0 ) ;
527 mPoly( 31, 0 ) = mPoly( 9, 0 ) * mPoly( 4, 0 ) ;
528 mPoly( 32, 0 ) = mPoly( 4, 0 ) * mPoly( 7, 0 ) ;
529 mPoly( 33, 0 ) = mPoly( 6, 0 ) * mPoly( 9, 0 ) ;
530 mPoly( 34, 0 ) = mPoly( 5, 0 ) * mPoly( 8, 0 ) ;
533 inline const Cell< id_t > &
542 return mMyElementIndices ;
size_t size() const
Definition cl_Cell.hpp:189
Runtime-sized bitset; one bit per flag, packed into 64-bit words.
Definition cl_DynamicBitset.hpp:33
Hash map (unordered key-value).
Definition cl_Map.hpp:75
Base class for all materials in BELFEM.
Definition cl_Material.hpp:270
Top-level container for all mesh entities.
Definition cl_Mesh.hpp:60
Definition cl_FEM_Block.hpp:35
Definition cl_FEM_Calculator.hpp:596
Main workhorse: DOF management, assembly coordination and the solver interface.
Definition cl_FEM_DofManager.hpp:52
Definition cl_FEM_Element.hpp:41
Prototype for Integrator of Weak Form Governing Equation.
Definition cl_IWG.hpp:81
Top-level orchestrator.
Definition cl_FEM_Kernel.hpp:56
void set_source_fields(const Cell< string > &aFields)
Definition cl_FEM_Postprocessor.hpp:346
Kernel * mKernel
Definition cl_FEM_Postprocessor.hpp:139
uint mNumSourceFields
Definition cl_FEM_Postprocessor.hpp:136
virtual void initialize()
Definition cl_FEM_Postprocessor.cpp:97
virtual void run()
Definition cl_FEM_Postprocessor.cpp:1395
void recover_fields()
Definition cl_FEM_Postprocessor.cpp:1241
const Cell< index_t > & my_element_indices() const
Definition cl_FEM_Postprocessor.hpp:540
void set_block_ids(const Vector< id_t > &aBlockIDs)
Definition cl_FEM_Postprocessor.cpp:80
IWG * mEquation
Definition cl_FEM_Postprocessor.hpp:142
const Matrix< real > & compute_poly(const Vector< real > &aX)
Definition cl_FEM_Postprocessor.hpp:372
const Cell< string > & target_fields() const
Definition cl_FEM_Postprocessor.hpp:366
const uint mOrder
Definition cl_FEM_Postprocessor.hpp:30
DomainType mDomainType
Definition cl_FEM_Postprocessor.hpp:131
void synch_source_fields()
Definition cl_FEM_Postprocessor.cpp:140
Element * mElement
Definition cl_FEM_Postprocessor.hpp:144
DofManager * projector()
Definition cl_FEM_Postprocessor.hpp:334
void synch_target_fields(Matrix< real > &aData)
Definition cl_FEM_Postprocessor.cpp:149
DofManager * mField
Definition cl_FEM_Postprocessor.hpp:141
const proc_t mCommSize
Definition cl_FEM_Postprocessor.hpp:28
const Cell< string > & source_fields() const
Definition cl_FEM_Postprocessor.hpp:360
void set_target_fields(const Cell< string > &aFields)
Definition cl_FEM_Postprocessor.hpp:353
void set_field(DofManager *aField)
Definition cl_FEM_Postprocessor.cpp:67
uint mNumTargetFields
Definition cl_FEM_Postprocessor.hpp:137
const proc_t mCommRank
Definition cl_FEM_Postprocessor.hpp:27
Block * mBlock
Definition cl_FEM_Postprocessor.hpp:145
Cell< string > mSourceFields
Definition cl_FEM_Postprocessor.hpp:135
Mesh * mMesh
Definition cl_FEM_Postprocessor.hpp:140
const Cell< id_t > & block_ids() const
Definition cl_FEM_Postprocessor.hpp:534
virtual const Vector< real > & compute(const uint aK)
Definition cl_FEM_Postprocessor.cpp:638
index_t number_of_truncated_patches() const
node fits of this rank in which the inversion dropped a direction; set by initialize()
Definition cl_FEM_Postprocessor.hpp:340
Postprocessor(Kernel *aKernel, DofManager *aField=nullptr)
Collective.
Definition cl_FEM_Postprocessor.cpp:27
const uint mNumDimensions
Definition cl_FEM_Postprocessor.hpp:29
virtual void update_element_dofs()
Definition cl_FEM_Postprocessor.cpp:645
Material * mMaterial
Definition cl_FEM_Postprocessor.hpp:143
Cell< string > mTargetFields
Definition cl_FEM_Postprocessor.hpp:134
Calculator * mCalculator
Definition cl_FEM_Postprocessor.hpp:146
Definition cl_IFB_LINE3.hpp:21
USER GUIDES:
Definition cl_Capacitor.cpp:16
constexpr id_t gNoID
Definition typedefs.hpp:58
unsigned int uint
Definition typedefs.hpp:30
unsigned int id_t
Definition typedefs.hpp:41
int proc_t
Definition commtypes.hpp:29
ElementType
Element types.
Definition Mesh_Enums.hpp:27
@ EMPTY
Definition Mesh_Enums.hpp:28
uint32_t index_t
Definition typedefs.hpp:52
double real
Definition typedefs.hpp:36
DomainType
Definition en_DomainType.hpp:20
@ Default
Definition en_DomainType.hpp:21
float x
Definition test_curve_frame.py:37
y
Definition test_stadium.py:44