#include <nedelecmesh.h>
Collaboration diagram for NedelecMesh:
Public Member Functions | |
NedelecMesh (mesh::TetMesh *mesh, int order, unsigned int sym_plane_config) | |
~NedelecMesh () | |
NedelecElement * | get_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::TetMesh * | getTetMesh () 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 |
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.
Definition at line 53 of file nedelecmesh.h.
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.
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.
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 | ( | ) |
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).
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
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] |
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.
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().