NedelecElement Class Reference

#include <nedelecelement.h>

Inheritance diagram for NedelecElement:

Inheritance graph
[legend]
Collaboration diagram for NedelecElement:

Collaboration graph
[legend]
List of all members.

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

Detailed Description

Base class for Nedelec tetrahedral elements.

Implemented using the "Flyweight" and "Singleton" design patterns.

Author:
Roman Geus

Definition at line 37 of file nedelecelement.h.


Constructor & Destructor Documentation

NedelecElement::NedelecElement (  ) 

Definition at line 29 of file nedelecelement.cpp.

NedelecElement::~NedelecElement (  )  [virtual]

Definition at line 48 of file nedelecelement.cpp.


Member Function Documentation

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.

References CROSS, and CROSS2.

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.

Parameters:
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:


Member Data Documentation

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]

Definition at line 83 of file nedelecelement.h.

Referenced by get_AeMe().

vector<double> NedelecElement::_eta [protected]

Definition at line 79 of file nedelecelement.h.

Referenced by constructGQ(), and get_AeMe().

int NedelecElement::_intOrder [protected]

Definition at line 77 of file nedelecelement.h.

Referenced by constructGQ(), and get_AeMe().

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]

Definition at line 91 of file nedelecelement.h.

Referenced by get_AeMe().

vector<double> NedelecElement::_w [protected]

Definition at line 78 of file nedelecelement.h.

Referenced by constructGQ(), and get_AeMe().

vector<double> NedelecElement::_xi [protected]

Definition at line 79 of file nedelecelement.h.

Referenced by constructGQ(), and get_AeMe().

vector<double> NedelecElement::_zeta [protected]

Definition at line 79 of file nedelecelement.h.

Referenced by constructGQ(), and get_AeMe().


The documentation for this class was generated from the following files:
Generated on Fri Oct 26 13:35:16 2007 for FEMAXX (Finite Element Maxwell Eigensolver) by  doxygen 1.4.7