#include "b2element_field_transfer.H"
Public Member Functions | |
std::pair< int, Node *const * > | get_nodes () const override |
void | set_nodes (std::pair< int, Node *const * > nodes_) override |
int | get_number_of_dof () const override |
size_t | set_global_dof_numbering (size_t index) override |
std::pair< size_t, size_t > | get_global_dof_numbering () const override |
int | edge_field_order (const int edge_id, const std::string &field_name) override |
bool | edge_field_linear_on_dof (const int edge_id, const std::string &field_name) override |
int | edge_field_polynomial_sub_edge (const int edge_id, const std::string &field_name, b2linalg::Vector< double, b2linalg::Vdense > &sub_nodes) override |
void | edge_geom (const int edge_id, const double internal_coor, b2linalg::Vector< double > &geom, b2linalg::Vector< double > &d_geom_d_icoor) override |
void | edge_field_value (const int edge_id, const std::string &field_name, const double internal_coor, const b2linalg::Matrix< double, b2linalg::Mrectangle_constref > &dof, const double time, b2linalg::Vector< double, b2linalg::Vdense > &value, b2linalg::Vector< double, b2linalg::Vdense > &d_value_d_icoor, b2linalg::Index &dof_numbering, b2linalg::Matrix< double, b2linalg::Mrectangle > &d_value_d_dof, b2linalg::Index &d_value_d_dof_dep) override |
![]() | |
virtual void | get_constraint (Model &model, const bool linear, const double time, const b2linalg::Matrix< double, b2linalg::Mrectangle_constref > &dof, b2linalg::Index &dof_numbering, b2linalg::Vector< double, b2linalg::Vdense > &constraint, b2linalg::Matrix< double, b2linalg::Mcompressed_col > &trans_d_constraint_d_dof, b2linalg::Vector< double, b2linalg::Vdense > &d_constraint_d_time) |
virtual void | face_field_value (const int face_id, const std::string &field_name, const b2linalg::Vector< double, b2linalg::Vdense_constref > &internal_coor, const b2linalg::Matrix< double, b2linalg::Mrectangle_constref > &dof, const double time, b2linalg::Vector< double, b2linalg::Vdense > &value, b2linalg::Matrix< double, b2linalg::Mrectangle > &d_value_d_icoor, b2linalg::Index &dof_numbering, b2linalg::Matrix< double, b2linalg::Mrectangle > &d_value_d_dof, b2linalg::Index &d_value_d_dof_dep_col) |
virtual void | body_field_value (const std::string &field_name, const b2linalg::Vector< double, b2linalg::Vdense_constref > &internal_coor, const b2linalg::Matrix< double, b2linalg::Mrectangle_constref > &dof, const double time, b2linalg::Vector< double, b2linalg::Vdense > &value, b2linalg::Matrix< double, b2linalg::Mrectangle > &d_value_d_icoor, b2linalg::Index &dof_numbering, b2linalg::Matrix< double, b2linalg::Mrectangle > &d_value_d_dof) |
virtual void | field_volume_integration (const b2linalg::Vector< double, b2linalg::Vdense_constref > &dof, const b2linalg::Vector< double, b2linalg::Vdense_constref > &dofdot, const b2linalg::Vector< double, b2linalg::Vdense_constref > &dofdotdot, const Field< double > &f, b2linalg::Index &dof_numbering, b2linalg::Vector< double, b2linalg::Vdense > &discretised_field, b2linalg::Matrix< double, b2linalg::Mpacked > &d_discretised_field_d_dof) |
virtual void | field_face_integration (const b2linalg::Vector< double, b2linalg::Vdense_constref > &dof, const b2linalg::Vector< double, b2linalg::Vdense_constref > &dofdot, const b2linalg::Vector< double, b2linalg::Vdense_constref > &dofdotdot, const Field< double > &field, int face, b2linalg::Index &dof_numbering, b2linalg::Vector< double, b2linalg::Vdense > &discretised_field, b2linalg::Matrix< double, b2linalg::Mpacked > &d_discretised_field_d_dof) |
virtual void | field_edge_integration (const b2linalg::Vector< double, b2linalg::Vdense_constref > &dof, const b2linalg::Vector< double, b2linalg::Vdense_constref > &dofdot, const b2linalg::Vector< double, b2linalg::Vdense_constref > &dofdotdot, const Field< double > &f, int edge, b2linalg::Index &dof_numbering, b2linalg::Vector< double, b2linalg::Vdense > &discretised_field, b2linalg::Matrix< double, b2linalg::Mpacked > &d_discretised_field_d_dof) |
void | AssembleElementEffectiveSystem (const solver::TypedSolver< double, MATRIX_FORMAT > &solver, b2linalg::Matrix< double, typename MATRIX_FORMAT::dense > &k_eff, b2linalg::Vector< double, b2linalg::Vdense > &f_eff, b2linalg::Index &index) |
Assembles the element effective matrix and vector. | |
b2linalg::Matrix< double, typename MATRIX_FORMAT::dense > | AssembleElementEffectiveMatrix (const solver::TypedSolver< double, MATRIX_FORMAT > &solver, b2linalg::Index &index) |
Assembles the element effective matrix. | |
double | ComputeElementError (const solver::TypedSolver< double, MATRIX_FORMAT > &solver) |
TODO. | |
b2linalg::Vector< double, b2linalg::Vdense > | AssembleElementEffectiveVector (const solver::TypedSolver< double, MATRIX_FORMAT > &solver, b2linalg::Index index) |
Assembles the element effective vector. | |
void | ComputeElementGradient (const solver::TypedSolver< double, MATRIX_FORMAT > &solver, GradientContainer *const gradient_container) |
Compute the gradients for post-processing. | |
virtual void | get_value (Model &model, const bool linear, const EquilibriumSolution equilibrium_solution, const double time, const double delta_time, const b2linalg::Matrix< double, b2linalg::Mrectangle_constref > &dof, GradientContainer *gradient_container, SolverHints *solver_hints, b2linalg::Index &dof_numbering, b2linalg::Vector< double, b2linalg::Vdense > &value, const std::vector< bool > &d_value_d_dof_flags, std::vector< b2linalg::Matrix< double, b2linalg::Mrectangle > > &d_value_d_dof, b2linalg::Vector< double, b2linalg::Vdense > &d_value_d_time) |
Compute the internal forces and their derivatives of the element. | |
virtual void | get_value (Model &model, const bool linear, const EquilibriumSolution equilibrium_solution, const double time, const double delta_time, const b2linalg::Matrix< double, b2linalg::Mrectangle_constref > &dof, GradientContainer *gradient_container, SolverHints *solver_hints, b2linalg::Index &dof_numbering, b2linalg::Vector< double, b2linalg::Vdense > &value, const std::vector< bool > &d_value_d_dof_flags, std::vector< b2linalg::Matrix< double, b2linalg::Mpacked > > &d_value_d_dof, b2linalg::Vector< double, b2linalg::Vdense > &d_value_d_time) |
Compute the internal forces and their derivatives of the element. | |
![]() | |
virtual const std::vector< VariableInfo > | get_value_info () const |
virtual std::pair< int, VariableInfo > | get_constraint_info () |
Element (const bool symmetric) | |
Sets the symmetry property of this element. Call this constructor if your newly defined element is not symmetric. | |
size_t | get_id () const |
void | set_id (size_t id_) |
int | get_elem_type_number () const |
void | set_elem_type_number (int elno) |
const std::string & | get_object_name () const override |
void | set_object_name (const std::string &name) |
virtual void | get_dof_numbering (b2linalg::Index &dof_numbering) |
virtual const ElementProperty * | get_property () const |
virtual void | set_property (ElementProperty *property) |
virtual void | set_additional_properties (const RTable &rtable) |
virtual void | init (Model &model) |
virtual std::pair< size_t, Element ** > | get_subelements () |
iterator | begin () |
iterator | end () const |
virtual int | face_field_order (const int face_id, const std::string &field_name) |
virtual bool | face_field_linear_on_dof (const int face_id, const std::string &field_name) |
virtual int | face_field_polynomial_sub_face (const int face_id, const std::string &field_name, b2linalg::Matrix< double, b2linalg::Mrectangle > &sub_nodes, std::vector< Triangle > &sub_faces) |
virtual void | face_geom (const int face_id, const b2linalg::Vector< double, b2linalg::Vdense_constref > &internal_coor, b2linalg::Vector< double > &geom, b2linalg::Matrix< double, b2linalg::Mrectangle > &d_geom_d_icoor) |
virtual int | body_field_order (const std::string &field_name) |
virtual bool | body_field_linear_on_dof (const std::string &field_name) |
virtual int | body_field_polynomial_sub_volume (const std::string &field_name, b2linalg::Matrix< double, b2linalg::Mrectangle > &sub_nodes, std::vector< Tetrahedral > &sub_volumes) |
virtual void | body_geom (const b2linalg::Vector< double, b2linalg::Vdense_constref > &internal_coor, b2linalg::Vector< double > &geom, b2linalg::Matrix< double, b2linalg::Mrectangle > &d_geom_d_icoor) |
virtual std::pair< int, int > | get_state_buffer_size () const |
virtual std::pair< int *, double * > | get_state_buffer (std::pair< int *, double * > buffers) const |
virtual std::pair< const int *, const double * > | set_state_buffer (std::pair< const int *, const double * > buffers) |
![]() | |
virtual | ~Object () |
Additional Inherited Members | |
![]() | |
enum | VariableInfo { zero = 0 , constant = 1 , linear = 2 , nonlinear = 3 } |
![]() | |
static type_t | type |
Element interface typed by the dof. | |
![]() | |
static ObjectType | type |
CFD Element with two constant fields: Temperature and HeatFlux The nodes don't have dof. The first element's dof is the temperature. The second element's dof is the heat flux peer surface unit.
|
inlineoverridevirtual |
edge_id | The edge number, starting at 1, according to the B2000++ conventions. |
field_name | The field name. |
Reimplemented from b2000::Element.
|
inlineoverridevirtual |
edge_id | The edge number, starting at 1, according to the B2000++ conventions. |
field_name | The field name. Usually, the integration order is independent of the field name. |
Reimplemented from b2000::Element.
|
inlineoverridevirtual |
Sub-divide the edge into polynomial sub-edges and compute the edge-internal coordinates of the nodes at the sub-edge boundaries. Most elements should put [-1, +1] (one sub-edge).
edge_id | The edge number, starting at 1, according to the B2000++ conventions. |
field_name | The field name. |
sub_nodes | A vector containing the edge-internal coordinates of the sub-nodes. The coordinates must be strictly increasing, and the first sub-node must be at -1, and the last sub-node must be at +1. |
Reimplemented from b2000::Element.
|
inlineoverridevirtual |
Interpolate the value of the field and its derivatives at a specified edge integration point for real-valued elements.
edge_id | The edge number, starting at 1, according to the B2000++ conventions (input). |
field_name | The field name. |
internal_coor | The edge-internal coordinate (from -1 to +1) of the integration point (input). |
dof | The solution vector (input). |
time | The current time (input). |
value | The value of the field interpolated at the given edge-internal coordinate for the given dof and time. |
d_value_d_icoor | The derivatives of the interpolated field value w.r.t. the internal coordinate (vector, output). |
dof_numbering | Array of the global dof indices on which the interpolated field value depends (vector, output). |
d_value_d_dof | The derivatives of the interpolated field values w.r.t. the dof's (matrix, output). |
d_value_d_dof_dep_col | Array of the global dof indices on which the interpolated field value depends for the current deformation (vector, output). |
Reimplemented from b2000::TypedElement< double >.
|
inlineoverridevirtual |
Compute the edge geometry at a specified integration point.
edge_id | The edge number, starting at 1, according to the B2000++ conventions (input). |
internal_coor | The edge-internal coordinate (from -1 to +1) of the integration point (input). |
geom | The branch-global coordinates of the integration point (vector, output). |
d_geom_d_icoor | The derivatives of the branch-global coordinates w.r.t. the internal coordinate; this is the edge tangential vector (vector, output). |
Reimplemented from b2000::Element.
|
inlineoverridevirtual |
Elements without internal dof's do not need to override this function.
The variable internal_dof_index is a member of the element class and was set in set_global_dof_numbering().
Reimplemented from b2000::Element.
|
inlineoverridevirtual |
Must be overridden.
Reimplemented from b2000::Element.
|
inlineoverridevirtual |
Elements without internal dof's do not need to override this function.
A Finite Element with 4 internal dof's would return 4.
Reimplemented from b2000::Element.
|
inlineoverridevirtual |
Elements without internal dof's do not need to override this function.
Set the global degree-of-freedom numbers of the degrees-of-freedom belonging to the entity.
index | The index into the global solution vector of the first degree-of-freedom of the entity. |
A Finite Element with 4 internal dof's:
The variable internal_dof_index is a member of the element class.
Reimplemented from b2000::Element.
|
inlineoverridevirtual |
Must be overridden. Set the nodes of the element. This function is called by the Domain object.
todo: not all elements override this function!
nodes | A pair (first, second) with first being the number of nodes, and second a pointer to a const array containing pointers to the Node instances. The length of the array corresponds to the number of nodes. |
Implementations should verify the number of nodes. The checking of the correct node type is optional.
It is recommended to perform a dynamic cast to the exact node type, this allows the use of the get_coor_s() and get_dof_numbering_s() functions without the overhead of the virtual functions Node::get_coor() and DegreesOfFreedom::get_global_dof_numbering().
A quadrilateral 2D stress element named Q4.S.2D.EXAMPLE. It has 3 coordinates (the Z-coordinate set to 0) and displacement dof's in X- and Y-direction. The following using statement gives the alias NodeType for the exact Node type:
The class has an array of NodeType pointers.
This array is initialized in the set_nodes() function:
The code to retrieve the coordinates of all 4 nodes of the element, without the overhead of virtual functions could then look like this:
The dof_numbering index vector (as given in the get_value(), get_constraint(), etc. functions) can then be initialized without the overhead of virtual functions:
Reimplemented from b2000::Element.