NedelecMesh Class Reference

#include <nedelecmesh.h>

Collaboration diagram for NedelecMesh:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 NedelecMesh (mesh::TetMesh *mesh, int order, unsigned int sym_plane_config)
 ~NedelecMesh ()
NedelecElementget_element (mesh::id_t i) const
void assembleAM (Epetra_FECrsMatrix *A, Epetra_FECrsMatrix *M)
mesh::id_t get_num_my_dofs (int order) const
mesh::id_t get_num_global_dofs (int order) const
mesh::id_t get_num_global_mdofs (int order) const
mesh::id_t gdof (mesh::id_t ldof) const
bool is_owned_gdof (mesh::id_t gdof) const
mesh::id_t map_dof (mesh::id_t orig_dof) const
int map_dof_rev (int mapped_dof) const
void set_map (unsigned int sym_plane_config)
mesh::Vector3 eval (const mesh::Vector3 &x, const colarray::Vector< double > &q) const
mesh::Vector3 eval_curl (const mesh::Vector3 &x, const colarray::Vector< double > &q) const
double quality (double lambda, const double *q) const
double q_factor (double lambda, const double *q) const
mesh::TetMeshgetTetMesh () const
void generate_sorted_AM (const Epetra_FECrsMatrix *A, const Epetra_FECrsMatrix *M, Epetra_FECrsMatrix *A_s, Epetra_FECrsMatrix *M_s)

Private Types

typedef std::pair< mesh::id_t,
mesh::id_t
nodepair
typedef utility::triple< nodepair,
mesh::id_t, mesh::id_t
dof_with_ids

Private Member Functions

void sort_matrix (const Epetra_FECrsMatrix *M, Epetra_FECrsMatrix *M_s, const vector< dof_with_ids > &all_dofs)

Private Attributes

mesh::TetMesh_mesh
mesh::ParallelTetMesh_pmesh
NedelecElement_element
int _order
std::map< mesh::id_t, mesh::id_t_mgid_map
std::vector< mesh::id_t_map_rev
std::vector< mesh::id_t_nof_orig_dofs
std::vector< mesh::id_t_nof_mapped_dofs
std::vector< mesh::id_t_num_global_dofs

Detailed Description

Unstructured tetrahedral mesh of hierarchical Nedelec finite elements

The class is also responsible for mapping original degrees of freedom (DOFs) to the actual DOFs corresponding to matrix rows and columns. This mapping is necessary because some DOFs are eliminated due to boundary conditions and linear dependencies.

For first order elements (order==1) the original DOF number corresponds to the edge number. The total number of original DOFs is the number of edges.

For second order elements (order==2) the total number of original DOFs is 2*nof_edges + 3*nof_faces. Their numbering is as follows: DOFs i=0..nof_edges-1 corresond edge i, DOFs i=nof_edges..2*nof_edges-1 corresond to edge i-nof_edges. DOFs i=2*nof_edges..2*nof_edges+3*nof_faces-1 correspond to face (i-2*nof_edges)/3.

Author:
Roman Geus

Definition at line 53 of file nedelecmesh.h.


Member Typedef Documentation

typedef utility::triple<nodepair, mesh::id_t, mesh::id_t> NedelecMesh::dof_with_ids [private]

Definition at line 149 of file nedelecmesh.h.

typedef std::pair<mesh::id_t, mesh::id_t> NedelecMesh::nodepair [private]

Definition at line 148 of file nedelecmesh.h.


Constructor & Destructor Documentation

NedelecMesh::NedelecMesh ( mesh::TetMesh mesh,
int  order,
unsigned int  sym_plane_config 
)

Construct NedelecMesh.

Currently all elements will be of the same type as specified by order.

Parameters:
mesh Unstructured mesh
order Order of finite elements

Definition at line 58 of file nedelecmesh.cpp.

References _element, _mesh, _nof_orig_dofs, _num_global_dofs, _pmesh, mesh::TetMesh::get_nof_edges(), mesh::TetMesh::get_nof_faces(), mesh::ParallelTetMesh::get_num_global_edges(), mesh::ParallelTetMesh::get_num_global_faces(), and set_map().

Here is the call graph for this function:

NedelecMesh::~NedelecMesh (  ) 

Definition at line 99 of file nedelecmesh.cpp.

References _element.


Member Function Documentation

void NedelecMesh::assembleAM ( Epetra_FECrsMatrix *  A,
Epetra_FECrsMatrix *  M 
)

Assemble global distributed matrices A and M

Definition at line 103 of file nedelecmesh.cpp.

References _mesh, NedelecElement::get_dof_ids(), get_element(), NedelecElement::get_element_matrix(), NedelecElement::get_nof_dofs(), mesh::TetMesh::tet_begin(), and mesh::TetMesh::tet_end().

Referenced by QuadraticEigsolvOperators::matrixAssembly(), and LinearEigsolvOperators::matrixAssembly().

Here is the call graph for this function:

mesh::Vector3 NedelecMesh::eval ( const mesh::Vector3 x,
const colarray::Vector< double > &  q 
) const

Evaluate field defined by vector q (containing all mapped DOFs) at position x

Definition at line 412 of file nedelecmesh.cpp.

References _mesh, NedelecElement::eval(), mesh::TetMesh::find_tets_by_point(), NedelecElement::get_dof_ids(), get_element(), NedelecElement::get_nof_dofs(), map_dof(), and x.

Referenced by postprocess::VtkExport::export_a_to_b(), postprocess::VtkExport::export_eigenfields2(), EfieldIntegrand::operator()(), and EfieldDs< Curve >::operator()().

Here is the call graph for this function:

mesh::Vector3 NedelecMesh::eval_curl ( const mesh::Vector3 x,
const colarray::Vector< double > &  q 
) const

Evaluate curl defined by vector q (containing all mapped DOFs) at position x

Definition at line 450 of file nedelecmesh.cpp.

References _mesh, NedelecElement::eval_curl(), mesh::TetMesh::find_tets_by_point(), NedelecElement::get_dof_ids(), get_element(), NedelecElement::get_nof_dofs(), map_dof(), and x.

Referenced by postprocess::VtkExport::export_a_to_b(), and postprocess::VtkExport::export_eigenfields2().

Here is the call graph for this function:

mesh::id_t NedelecMesh::gdof ( mesh::id_t  ldof  )  const

Convert local dof id (ldof) to global dof id.

Definition at line 374 of file nedelecmesh.cpp.

References _mesh, _pmesh, mesh::ParallelTetMesh::edge_gid(), mesh::ParallelTetMesh::face_gid(), mesh::TetMesh::get_nof_edges(), and get_num_global_dofs().

Referenced by h5_write_eigenfeield_retrieve_DoF_efficient(), map_dof(), QuadraticEigsolvOperators::matrixAssembly(), LinearEigsolvOperators::matrixAssembly(), and set_map().

Here is the call graph for this function:

void NedelecMesh::generate_sorted_AM ( const Epetra_FECrsMatrix *  A,
const Epetra_FECrsMatrix *  M,
Epetra_FECrsMatrix *  A_s,
Epetra_FECrsMatrix *  M_s 
)

Definition at line 260 of file nedelecmesh.cpp.

References _mesh, _pmesh, mesh::ParallelTetMesh::edge_gid(), mesh::ParallelTetMesh::get_comm(), mesh::TetMesh::get_edge(), mesh::TetMesh::get_nof_edges(), mesh::ID_NONE, mesh::ParallelTetMesh::is_owned_edge(), map_dof(), mesh::ParallelTetMesh::point_gid(), parallel::set_counts_displs(), and sort_matrix().

Here is the call graph for this function:

NedelecElement* NedelecMesh::get_element ( mesh::id_t  i  )  const [inline]

Return finite element i

Definition at line 66 of file nedelecmesh.h.

References _element.

Referenced by assembleAM(), eval(), eval_curl(), h5_cartesian_sampling(), h5_compute_eigenquality(), h5_write_eigenfeield_retrieve_DoF_efficient(), h5_write_eigenfield(), postprocess::LinearFieldInterpolation::LinearFieldInterpolation(), q_factor(), and set_map().

mesh::id_t NedelecMesh::get_num_global_dofs ( int  order  )  const

Return number of mapped dofs belonging to element order "order" or return total number of original dofs if "order" is zero.

Definition at line 370 of file nedelecmesh.cpp.

References _num_global_dofs.

Referenced by gdof(), is_owned_gdof(), and set_map().

mesh::id_t NedelecMesh::get_num_global_mdofs ( int  order  )  const

Definition at line 366 of file nedelecmesh.cpp.

References _nof_mapped_dofs.

Referenced by FemaxMesh::constructY(), FemaxMesh::constructY_transp(), and QuadraticEigsolvOperators::QuadraticEigsolvOperators().

mesh::id_t NedelecMesh::get_num_my_dofs ( int  order  )  const

Return number of original (unmapped) dofs belonging to element order "order" or return total number of original dofs if "order" is zero.

Definition at line 362 of file nedelecmesh.cpp.

References _nof_orig_dofs.

Referenced by QuadraticEigsolvOperators::matrixAssembly(), LinearEigsolvOperators::matrixAssembly(), and set_map().

mesh::TetMesh* NedelecMesh::getTetMesh (  )  const [inline]

Definition at line 141 of file nedelecmesh.h.

References _mesh.

Referenced by postprocess::LinearFieldInterpolation::eval(), postprocess::VtkExport::export_eigenfields2(), postprocess::VtkExport::export_mesh(), postprocess::VtkExport::integrate_a_to_b(), and postprocess::LinearFieldInterpolation::LinearFieldInterpolation().

bool NedelecMesh::is_owned_gdof ( mesh::id_t  gdof  )  const

Returns true if gdof is owned by calling processor.

Definition at line 387 of file nedelecmesh.cpp.

References _pmesh, get_num_global_dofs(), mesh::ParallelTetMesh::is_owned_edge(), and mesh::ParallelTetMesh::is_owned_face().

Referenced by QuadraticEigsolvOperators::matrixAssembly(), and LinearEigsolvOperators::matrixAssembly().

Here is the call graph for this function:

mesh::id_t NedelecMesh::map_dof ( mesh::id_t  orig_dof  )  const

Return the id of the corresponding mapped dof given the id of an unmapped local dof or mesh::ID_NONE if the unmapped dof is eliminated.

Definition at line 399 of file nedelecmesh.cpp.

References _mgid_map, gdof(), and mesh::ID_NONE.

Referenced by FemaxMesh::constructY(), FemaxMesh::constructY_transp(), eval(), eval_curl(), generate_sorted_AM(), h5_cartesian_sampling(), h5_compute_eigenquality(), h5_write_eigenfeield_retrieve_DoF_efficient(), h5_write_eigenfield(), postprocess::LinearFieldInterpolation::LinearFieldInterpolation(), QuadraticEigsolvOperators::matrixAssembly(), LinearEigsolvOperators::matrixAssembly(), q_factor(), and set_map().

Here is the call graph for this function:

int NedelecMesh::map_dof_rev ( int  mapped_dof  )  const

Return the id of the corresponding original dof given the id of an mapped dof.

Definition at line 407 of file nedelecmesh.cpp.

References _map_rev.

double NedelecMesh::q_factor ( double  lambda,
const double *  q 
) const

Calculate Q-factor for specified eigenpair (lambda, q).

Parameters:
lambda eigenvalue
q eigenvector.

Definition at line 487 of file nedelecmesh.cpp.

References _mesh, NedelecElement::get_dof_ids(), get_element(), NedelecElement::get_nof_dofs(), mesh::TetMesh::get_tet(), map_dof(), pi, Q, mesh::TetMesh::surface_begin(), mesh::TetMesh::surface_end(), and NedelecElement::surface_integral_curl().

Referenced by FemaxxDriver::postprocess(), and q_factor().

Here is the call graph for this function:

double NedelecMesh::quality ( double  lambda,
const double *  q 
) const

void NedelecMesh::set_map ( unsigned int  sym_plane_config  ) 

Computes the mapping array that maps original dof numbers to dof numbers after elimination due to boundary conditiones and linear dependence.

bc_map[i] == j, if j == -1, original dof i is eliminated otherwise, original dof i is mapped to j

Parameters:
bc_map mapping array
sym_plane_config@see NedelecElement::get_eliminated_dofs
nof_mapped_dofs vector containing number of mapped dofs. nof_mapped_dofs[0]: total number of mapped dofs nof_mapped_dofs[1]: number of first-order mapped dofs nof_mapped_dofs[2]: number of second-order mapped dofs

Definition at line 161 of file nedelecmesh.cpp.

References _mesh, _mgid_map, _nof_mapped_dofs, _order, _pmesh, comm, parallel::compute_mgid_map(), mesh::ParallelTetMesh::edge_gid(), gdof(), mesh::ParallelTetMesh::get_comm(), mesh::TetMesh::get_edge(), mesh::ParallelTetMesh::get_edge_gids(), get_element(), mesh::Edge::get_end_id(), mesh::TetMesh::get_nof_edges(), mesh::TetMesh::get_nof_faces(), mesh::TetMesh::get_nof_tets(), get_num_global_dofs(), get_num_my_dofs(), mesh::Edge::get_start_id(), mesh::TetMesh::get_tet(), map_dof(), mesh::ParallelTetMesh::point_gid(), and rDebugAll.

Referenced by NedelecMesh().

Here is the call graph for this function:

void NedelecMesh::sort_matrix ( const Epetra_FECrsMatrix *  M,
Epetra_FECrsMatrix *  M_s,
const vector< dof_with_ids > &  all_dofs 
) [private]

Definition at line 329 of file nedelecmesh.cpp.

Referenced by generate_sorted_AM().


Member Data Documentation

NedelecElement* NedelecMesh::_element [private]

Element (Singleton used for all elements in mesh)

Definition at line 158 of file nedelecmesh.h.

Referenced by get_element(), NedelecMesh(), and ~NedelecMesh().

std::vector<mesh::id_t> NedelecMesh::_map_rev [private]

array for mapping mapped dofs to original dofs

Definition at line 166 of file nedelecmesh.h.

Referenced by map_dof_rev().

mesh::TetMesh* NedelecMesh::_mesh [private]

Unstructured mesh

Definition at line 153 of file nedelecmesh.h.

Referenced by assembleAM(), eval(), eval_curl(), gdof(), generate_sorted_AM(), getTetMesh(), NedelecMesh(), q_factor(), and set_map().

std::map<mesh::id_t, mesh::id_t> NedelecMesh::_mgid_map [private]

Map for transforming local dof ids to global mapped dof ids.

Definition at line 164 of file nedelecmesh.h.

Referenced by map_dof(), and set_map().

std::vector<mesh::id_t> NedelecMesh::_nof_mapped_dofs [private]

number of mapped dofs by element order

Definition at line 170 of file nedelecmesh.h.

Referenced by get_num_global_mdofs(), and set_map().

std::vector<mesh::id_t> NedelecMesh::_nof_orig_dofs [private]

number of original (unmapped) dofs by element order

Definition at line 168 of file nedelecmesh.h.

Referenced by get_num_my_dofs(), and NedelecMesh().

std::vector<mesh::id_t> NedelecMesh::_num_global_dofs [private]

Number of global unmapped dofs by element order.

Definition at line 172 of file nedelecmesh.h.

Referenced by get_num_global_dofs(), and NedelecMesh().

int NedelecMesh::_order [private]

Order of all Nedelec elements in mesh (_order >= 1)

Definition at line 160 of file nedelecmesh.h.

Referenced by set_map().

mesh::ParallelTetMesh* NedelecMesh::_pmesh [private]

Pointer to paralleltetmesh

Definition at line 155 of file nedelecmesh.h.

Referenced by gdof(), generate_sorted_AM(), is_owned_gdof(), NedelecMesh(), and set_map().


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