#include <nedelecelement.h>
Inheritance diagram for NedelecElement:
Public Member Functions | |
NedelecElement () | |
virtual | ~NedelecElement () |
virtual void | get_element_matrix (mesh::Tet *tet, colarray::Matrix< double > &Ae, colarray::Matrix< double > &Me)=0 |
virtual mesh::Vector3 | eval (mesh::Tet *tet, const mesh::Vector3 &x, const colarray::Vector< double > &dof)=0 |
virtual mesh::Vector3 | eval_curl (mesh::Tet *tet, const mesh::Vector3 &x, const colarray::Vector< double > &dof)=0 |
virtual int | get_nof_dofs () const =0 |
virtual int | get_order () const =0 |
virtual const int * | get_dof_ids (mesh::TetMesh *m, mesh::Tet *tet) const =0 |
virtual const bool * | get_eliminated_dofs (mesh::TetMesh *m, mesh::Tet *tet, unsigned int sym_plane_config) const =0 |
double | surface_integral_curl (mesh::Tet *tet, mesh::Face *face, const colarray::Vector< double > &dofs) |
Protected Member Functions | |
void | get_Ae (mesh::Tet *tet, int order, const mesh::Tet::GradientMatrix &J, colarray::Matrix< double > &Ae) |
void | get_Me (mesh::Tet *tet, int order, const mesh::Tet::GradientMatrix &J, colarray::Matrix< double > &Me) |
void | constructGQ (int order) |
void | evalElementFunctions (Matrix< double > &x, Matrix< double > &iM, Matrix< double > &Ned, Matrix< double > &Nod) |
void | get_AeMe (mesh::Tet *tet, int order, colarray::Matrix< double > &Ae, colarray::Matrix< double > &Me) |
mesh::Vector3 | eval_cartesian (mesh::Tet *tet, int order, const colarray::Vector< double > &dof, const mesh::Tet::GradientMatrix &J, const mesh::Vector3 &x) |
mesh::Vector3 | eval_curl_cartesian (mesh::Tet *tet, int order, const colarray::Vector< double > &dof, const mesh::Tet::GradientMatrix &J, const mesh::Vector3 &x) |
mesh::Vector3 | eval_simplex (mesh::Tet *tet, int order, const colarray::Vector< double > &dof, const mesh::Tet::GradientMatrix &J, const mesh::Vector4 &x) |
mesh::Vector3 | eval_curl_simplex (mesh::Tet *tet, int order, const colarray::Vector< double > &dof, const mesh::Tet::GradientMatrix &J, const mesh::Vector4 &x) |
Protected Attributes | |
int | _intOrder |
vector< double > | _w |
vector< double > | _xi |
vector< double > | _eta |
vector< double > | _zeta |
Matrix< double > | _mu |
Matrix< double > | _eps |
Matrix< double > | _Cur |
Matrix< double > | _Ned |
Implemented using the "Flyweight" and "Singleton" design patterns.
Definition at line 37 of file nedelecelement.h.
NedelecElement::NedelecElement | ( | ) |
Definition at line 29 of file nedelecelement.cpp.
NedelecElement::~NedelecElement | ( | ) | [virtual] |
Definition at line 48 of file nedelecelement.cpp.
void NedelecElement::constructGQ | ( | int | order | ) | [protected] |
Constructs a Gaussian quadrature scheme for fixed order
Definition at line 59 of file nedelecelement.cpp.
References _eta, _intOrder, _w, _xi, _zeta, linalg::eigenvalueDecomp(), colarray::Matrix< T >::fill(), and Q.
Here is the call graph for this function:
virtual mesh::Vector3 NedelecElement::eval | ( | mesh::Tet * | tet, | |
const mesh::Vector3 & | x, | |||
const colarray::Vector< double > & | dof | |||
) | [pure virtual] |
Evaluate at location given by simplex coordinates x
Implemented in NedelecElement1, and NedelecElement2.
Referenced by NedelecMesh::eval(), and postprocess::LinearFieldInterpolation::LinearFieldInterpolation().
Vector3 NedelecElement::eval_cartesian | ( | mesh::Tet * | tet, | |
int | order, | |||
const colarray::Vector< double > & | dof, | |||
const mesh::Tet::GradientMatrix & | J, | |||
const mesh::Vector3 & | x | |||
) | [protected] |
Evaluate field in Nedelec finite element at point given in cartesian coordinates.
Definition at line 923 of file nedelecelement.cpp.
References mesh::Tet::cartesian_to_simplex(), eval_simplex(), and x.
Referenced by NedelecElement2::eval(), and NedelecElement1::eval().
Here is the call graph for this function:
virtual mesh::Vector3 NedelecElement::eval_curl | ( | mesh::Tet * | tet, | |
const mesh::Vector3 & | x, | |||
const colarray::Vector< double > & | dof | |||
) | [pure virtual] |
Evaluate curl at location given by simplex coordinates x, 14/07/04 Z.M.
Implemented in NedelecElement1, and NedelecElement2.
Referenced by NedelecMesh::eval_curl().
Vector3 NedelecElement::eval_curl_cartesian | ( | mesh::Tet * | tet, | |
int | order, | |||
const colarray::Vector< double > & | dof, | |||
const mesh::Tet::GradientMatrix & | J, | |||
const mesh::Vector3 & | x | |||
) | [protected] |
Evaluate curl in Nedelec finite element at point given in cartesian coordinates. 14/07/04 Z.M.
Definition at line 932 of file nedelecelement.cpp.
References mesh::Tet::cartesian_to_simplex(), eval_curl_simplex(), and x.
Referenced by NedelecElement2::eval_curl(), and NedelecElement1::eval_curl().
Here is the call graph for this function:
Vector3 NedelecElement::eval_curl_simplex | ( | mesh::Tet * | tet, | |
int | order, | |||
const colarray::Vector< double > & | dof, | |||
const mesh::Tet::GradientMatrix & | J, | |||
const mesh::Vector4 & | x | |||
) | [protected] |
Evaluate the curl of the field in Nedelec finite element at point given in simplex coordinates.
Definition at line 1008 of file nedelecelement.cpp.
References CURL_DOF_LIN_1, CURL_DOF_QUAD, and x.
Referenced by eval_curl_cartesian().
Vector3 NedelecElement::eval_simplex | ( | mesh::Tet * | tet, | |
int | order, | |||
const colarray::Vector< double > & | dof, | |||
const mesh::Tet::GradientMatrix & | J, | |||
const mesh::Vector4 & | x | |||
) | [protected] |
Evaluate field in Nedelec finite element at point given in simplex coordinates.
Definition at line 942 of file nedelecelement.cpp.
References DOF_LIN_1, DOF_LIN_2, and DOF_QUAD.
Referenced by eval_cartesian().
void NedelecElement::evalElementFunctions | ( | Matrix< double > & | x, | |
Matrix< double > & | iM, | |||
Matrix< double > & | Ned, | |||
Matrix< double > & | Nod | |||
) | [protected] |
Routine that computes the element functions
Definition at line 103 of file nedelecelement.cpp.
Referenced by get_AeMe().
void NedelecElement::get_Ae | ( | mesh::Tet * | tet, | |
int | order, | |||
const mesh::Tet::GradientMatrix & | J, | |||
colarray::Matrix< double > & | Ae | |||
) | [protected] |
Computes element matrix Ae for hierarchical first or second element
Definition at line 367 of file nedelecelement.cpp.
References blas::gemm(), mesh::Tet::get_edge_orientation(), colarray::Matrix< T >::get_m(), and mesh::Tet::get_volume().
Referenced by NedelecElement2::get_element_matrix(), and NedelecElement1::get_element_matrix().
Here is the call graph for this function:
void NedelecElement::get_AeMe | ( | mesh::Tet * | tet, | |
int | order, | |||
colarray::Matrix< double > & | Ae, | |||
colarray::Matrix< double > & | Me | |||
) | [protected] |
Computes element matrices Ae AND Me for hierarchical first or second element (using quadrature)
Definition at line 222 of file nedelecelement.cpp.
References _Cur, _eps, _eta, _intOrder, _mu, _Ned, _w, _xi, _zeta, linalg::determinant(), evalElementFunctions(), colarray::Matrix< T >::fill(), mesh::Point::get_coord(), mesh::Tet::get_corner(), mesh::Tet::get_edge_orientation(), colarray::Matrix< T >::get_m(), mesh::Tet::get_material_ID(), mesh::TetMesh::get_materials(), mesh::Tet::get_mesh(), Materials::getParameters(), linalg::inverse(), mesh::Vector3::x, mesh::Vector3::y, and mesh::Vector3::z.
Referenced by NedelecElement2::get_element_matrix(), and NedelecElement1::get_element_matrix().
Here is the call graph for this function:
virtual const int* NedelecElement::get_dof_ids | ( | mesh::TetMesh * | m, | |
mesh::Tet * | tet | |||
) | const [pure virtual] |
Return pointer to static array storing DOF ids of element tet. This function is NOT thread safe.
Implemented in NedelecElement1, and NedelecElement2.
Referenced by NedelecMesh::assembleAM(), NedelecMesh::eval(), NedelecMesh::eval_curl(), h5_cartesian_sampling(), postprocess::LinearFieldInterpolation::LinearFieldInterpolation(), and NedelecMesh::q_factor().
virtual void NedelecElement::get_element_matrix | ( | mesh::Tet * | tet, | |
colarray::Matrix< double > & | Ae, | |||
colarray::Matrix< double > & | Me | |||
) | [pure virtual] |
Compute element matrices Ae and Me
Implemented in NedelecElement1, and NedelecElement2.
Referenced by NedelecMesh::assembleAM().
virtual const bool* NedelecElement::get_eliminated_dofs | ( | mesh::TetMesh * | m, | |
mesh::Tet * | tet, | |||
unsigned int | sym_plane_config | |||
) | const [pure virtual] |
Return pointer to a static array of bool. If element i is true, the corresponding local dof i will be eliminated due to boundary conditions or because it is lineary dependant on other dofs.
sym_plane_config | Holds information on boundary conditions on symmetry planes in bit 0, bit 1 and bit 2. If bit i is set, then e \dot n = 0 is implemented on symmetriy plane i, otherwise e \times n = 0 is implemented. |
Implemented in NedelecElement1, and NedelecElement2.
void NedelecElement::get_Me | ( | mesh::Tet * | tet, | |
int | order, | |||
const mesh::Tet::GradientMatrix & | J, | |||
colarray::Matrix< double > & | Me | |||
) | [protected] |
Computes element matrix Me for hierarchical first or second element
Definition at line 534 of file nedelecelement.cpp.
References blas::gemm(), mesh::Tet::get_edge_orientation(), colarray::Matrix< T >::get_m(), colarray::Matrix< T >::get_n(), and mesh::Tet::get_volume().
Referenced by NedelecElement2::get_element_matrix(), and NedelecElement1::get_element_matrix().
Here is the call graph for this function:
virtual int NedelecElement::get_nof_dofs | ( | ) | const [pure virtual] |
Return number of element dofs
Implemented in NedelecElement1, and NedelecElement2.
Referenced by NedelecMesh::assembleAM(), NedelecMesh::eval(), NedelecMesh::eval_curl(), postprocess::LinearFieldInterpolation::LinearFieldInterpolation(), NedelecMesh::q_factor(), and surface_integral_curl().
virtual int NedelecElement::get_order | ( | ) | const [pure virtual] |
Return order of element
Implemented in NedelecElement1, and NedelecElement2.
Referenced by h5_cartesian_sampling(), h5_write_eigenfeield_retrieve_DoF_efficient(), and surface_integral_curl().
double NedelecElement::surface_integral_curl | ( | mesh::Tet * | tet, | |
mesh::Face * | face, | |||
const colarray::Vector< double > & | dofs | |||
) |
Evaluate integral of curl(E)*curl(E) over face of tetraderon tet.
Definition at line 1069 of file nedelecelement.cpp.
References colarray::Vector< T >::_n, mesh::Vector3::dot_product(), blas::gemm(), mesh::Point::get_coord(), mesh::Face::get_corner(), mesh::Tet::get_edge_orientation(), mesh::Tet::get_face_id(), mesh::Entity::get_id(), get_nof_dofs(), get_order(), colarray::Vector< T >::inject(), and colarray::Matrix< T >::inject().
Referenced by NedelecMesh::q_factor().
Here is the call graph for this function:
Matrix<double> NedelecElement::_Cur [protected] |
Storage for the material tensors
Definition at line 90 of file nedelecelement.h.
Referenced by get_AeMe().
Matrix<double> NedelecElement::_eps [protected] |
vector<double> NedelecElement::_eta [protected] |
int NedelecElement::_intOrder [protected] |
Matrix<double> NedelecElement::_mu [protected] |
Storage for the material tensors
Definition at line 82 of file nedelecelement.h.
Referenced by get_AeMe().
Matrix<double> NedelecElement::_Ned [protected] |
vector<double> NedelecElement::_w [protected] |
vector<double> NedelecElement::_xi [protected] |
vector<double> NedelecElement::_zeta [protected] |