|
IBAMR
IBAMR version 0.19.
|
Class FEDataInterpolation manages data required to evaluate one or more FE field variables at a collection of points, possibly (not not necessarily) corresponding to the points of a quadrature rule.
#include <ibtk/FEDataInterpolation.h>
Public Member Functions | |
| FEDataInterpolation (unsigned int dim, std::shared_ptr< FEData > fe_data) | |
| ~FEDataInterpolation ()=default | |
| void | attachQuadratureRule (libMesh::QBase *qrule) |
| void | attachQuadratureRuleFace (libMesh::QBase *qrule_face) |
| void | evalQuadraturePoints () |
| void | evalQuadratureWeights () |
| void | evalQuadraturePointsFace () |
| void | evalQuadratureWeightsFace () |
| void | evalNormalsFace () |
| const libMesh::QBase * | getQrule () const |
| const libMesh::QBase * | getQruleFace () const |
| const std::vector< libMesh::Point > & | getQuadraturePoints () const |
| const std::vector< double > & | getQuadratureWeights () const |
| const std::vector< libMesh::Point > & | getQuadraturePointsFace () const |
| const std::vector< double > & | getQuadratureWeightsFace () const |
| const std::vector< libMesh::Point > & | getNormalsFace () const |
| const std::vector< std::vector< double > > & | getPhi (const libMesh::FEType &fe_type) const |
| const std::vector< std::vector< libMesh::VectorValue< double > > > & | getDphi (const libMesh::FEType &fe_type) const |
| const std::vector< std::vector< double > > & | getPhiFace (const libMesh::FEType &fe_type) const |
| const std::vector< std::vector< libMesh::VectorValue< double > > > & | getDphiFace (const libMesh::FEType &fe_type) const |
| void | registerSystem (const libMesh::System &system, const std::vector< int > &phi_vars=std::vector< int >(1, 0), const std::vector< int > &dphi_vars=std::vector< int >(1, 0)) |
| Configure the class to evaluate the requested shape functions / derivatives for the given system. More... | |
| size_t | registerInterpolatedSystem (const libMesh::System &system, const std::vector< int > &vars=std::vector< int >(1, 0), const std::vector< int > &grad_vars=std::vector< int >(), libMesh::NumericVector< double > *system_vec=nullptr) |
| Configure the class to interpolate the requested variables / gradients for the given system. More... | |
| const std::vector< std::vector< std::vector< double > > > & | getVarInterpolation () |
| Get the variable data for all of the systems. More... | |
| const std::vector< std::vector< std::vector< libMesh::VectorValue< double > > > > & | getGradVarInterpolation () |
| Get the gradient variable data for all of the systems. More... | |
| void | setupInterpolatedSystemDataIndexes (std::vector< size_t > &system_idxs, const std::vector< SystemData > &system_data, const libMesh::EquationSystems *const equation_systems) |
| Register systems to be interpolated and get the corresponding system indices. More... | |
| void | setInterpolatedDataPointers (std::vector< const std::vector< double > * > &var_data, std::vector< const std::vector< libMesh::VectorValue< double > > * > &grad_var_data, const std::vector< size_t > &system_idxs, const libMesh::Elem *const elem, const unsigned int qp) |
| Set up pointers to the interpolated data to be evaluated. More... | |
| void | init () |
| Initialize all of the data structures required to evaluate the FE shape functions, quadrature rules, etc. More... | |
| void | reinit (const libMesh::Elem *elem, const std::vector< libMesh::Point > *const points=nullptr, const std::vector< double > *weights=nullptr) |
| Reinitialize the FE shape functions, quadrature rules, etc. for the specified element. More... | |
| void | reinit (const libMesh::Elem *elem, unsigned int side, double tol=libMesh::TOLERANCE, const std::vector< libMesh::Point > *points=nullptr, const std::vector< double > *weights=nullptr) |
| Reinitialize the FE shape functions, quadrature rules, etc. for the specified side of the specified element. More... | |
| void | collectDataForInterpolation (const libMesh::Elem *elem) |
| Get the local (element) data to be interpolated from the global vectors. More... | |
| const boost::multi_array< double, 2 > & | getElemData (const libMesh::Elem *elem, size_t system_idx) |
| Provide the elemental data associated with the given system index and element. More... | |
| void | interpolate (const libMesh::Elem *elem) |
| Interpolate FE data on the specified element. More... | |
| void | interpolate (const libMesh::Elem *elem, unsigned int side) |
| Interpolate FE data on the specified side of the specified element. More... | |
Private Member Functions | |
| FEDataInterpolation ()=delete | |
| FEDataInterpolation (const FEDataInterpolation &)=delete | |
| FEDataInterpolation & | operator= (const FEDataInterpolation &)=delete |
| size_t | getFETypeIndex (const libMesh::FEType &fe_type) const |
| void | interpolateCommon (std::vector< std::vector< std::vector< double > > > &system_var_data, std::vector< std::vector< std::vector< libMesh::VectorValue< double > > > > &system_grad_var_data, const std::vector< const std::vector< std::vector< double > > * > &phi_data, const std::vector< const std::vector< std::vector< libMesh::VectorValue< double > > > * > &dphi_data) |
Private Attributes | |
| const unsigned int | d_dim |
| std::shared_ptr< FEData > | d_fe_data |
| bool | d_initialized = false |
| bool | d_eval_q_point = false |
| bool | d_eval_JxW = false |
| bool | d_eval_q_point_face = false |
| bool | d_eval_JxW_face = false |
| bool | d_eval_normal_face = false |
| libMesh::QBase * | d_qrule = nullptr |
| libMesh::QBase * | d_qrule_face = nullptr |
| const std::vector< libMesh::Point > * | d_q_point = nullptr |
| const std::vector< libMesh::Point > * | d_q_point_face = nullptr |
| const std::vector< double > * | d_JxW = nullptr |
| const std::vector< double > * | d_JxW_face = nullptr |
| const std::vector< libMesh::Point > * | d_normal_face = nullptr |
| std::vector< const libMesh::System * > | d_systems |
| std::vector< FEDataManager::SystemDofMapCache * > | d_system_dof_map_caches |
| std::vector< std::vector< int > > | d_system_all_vars |
| std::vector< std::vector< int > > | d_system_vars |
| std::vector< std::vector< int > > | d_system_grad_vars |
| std::vector< std::vector< size_t > > | d_system_var_idx |
| std::vector< std::vector< size_t > > | d_system_grad_var_idx |
| std::vector< libMesh::NumericVector< double > * > | d_system_vecs |
| std::vector< std::vector< size_t > > | d_system_var_fe_type_idx |
| std::vector< std::vector< size_t > > | d_system_grad_var_fe_type_idx |
| std::vector< std::vector< std::vector< double > > > | d_system_var_data |
| std::vector< std::vector< std::vector< libMesh::VectorValue< double > > > > | d_system_grad_var_data |
| std::vector< const libMesh::System * > | d_noninterp_systems |
| std::vector< std::vector< int > > | d_noninterp_system_all_vars |
| std::vector< std::vector< int > > | d_noninterp_system_phi_vars |
| std::vector< std::vector< int > > | d_noninterp_system_dphi_vars |
| std::vector< libMesh::FEType > | d_fe_types |
| std::vector< std::unique_ptr< IBTK::FEValuesBase > > | d_fe |
| std::vector< std::unique_ptr< libMesh::FEBase > > | d_fe_face |
| std::vector< bool > | d_eval_phi |
| std::vector< bool > | d_eval_dphi |
| std::vector< const std::vector< std::vector< double > > * > | d_phi |
| std::vector< const std::vector< std::vector< double > > * > | d_phi_face |
| std::vector< const std::vector< std::vector< libMesh::VectorValue< double > > > * > | d_dphi |
| std::vector< const std::vector< std::vector< libMesh::VectorValue< double > > > * > | d_dphi_face |
| const libMesh::Elem * | d_current_elem = nullptr |
| unsigned int | d_current_side = std::numeric_limits<unsigned int>::max() |
| std::vector< boost::multi_array< double, 2 > > | d_system_elem_data |
| unsigned int | d_n_qp = std::numeric_limits<unsigned int>::max() |
| IBTK::FEDataInterpolation::FEDataInterpolation | ( | unsigned int | dim, |
| std::shared_ptr< FEData > | fe_data | ||
| ) |
|
default |
|
privatedelete |
|
privatedelete |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| void IBTK::FEDataInterpolation::registerSystem | ( | const libMesh::System & | system, |
| const std::vector< int > & | phi_vars = std::vector< int >(1, 0), |
||
| const std::vector< int > & | dphi_vars = std::vector< int >(1, 0) |
||
| ) |
NOTE: To interpolate variables associated with the system, use registerInterpolatedSystem().
| size_t IBTK::FEDataInterpolation::registerInterpolatedSystem | ( | const libMesh::System & | system, |
| const std::vector< int > & | vars = std::vector< int >(1, 0), |
||
| const std::vector< int > & | grad_vars = std::vector< int >(), |
||
| libMesh::NumericVector< double > * | system_vec = nullptr |
||
| ) |
If the system data vector is nullptr, then this class will use system.current_local_solution.
NOTE: The same system can be registered multiple times with different sets of variables/gradients and system data vectors.
|
inline |
NOTE: Data are indexed via [qp][system_idx][var_idx].
|
inline |
NOTE: Data are indexed via [qp][system_idx][var_idx].
| void IBTK::FEDataInterpolation::setupInterpolatedSystemDataIndexes | ( | std::vector< size_t > & | system_idxs, |
| const std::vector< SystemData > & | system_data, | ||
| const libMesh::EquationSystems *const | equation_systems | ||
| ) |
| void IBTK::FEDataInterpolation::setInterpolatedDataPointers | ( | std::vector< const std::vector< double > * > & | var_data, |
| std::vector< const std::vector< libMesh::VectorValue< double > > * > & | grad_var_data, | ||
| const std::vector< size_t > & | system_idxs, | ||
| const libMesh::Elem *const | elem, | ||
| const unsigned int | qp | ||
| ) |
| void IBTK::FEDataInterpolation::init | ( | ) |
NOTE: This method must be called before reinitializing data on individual elements.
| void IBTK::FEDataInterpolation::reinit | ( | const libMesh::Elem * | elem, |
| const std::vector< libMesh::Point > *const | points = nullptr, |
||
| const std::vector< double > * | weights = nullptr |
||
| ) |
NOTE: Nodal values are set by calling collectDataForInterpolation().
| void IBTK::FEDataInterpolation::reinit | ( | const libMesh::Elem * | elem, |
| unsigned int | side, | ||
| double | tol = libMesh::TOLERANCE, |
||
| const std::vector< libMesh::Point > * | points = nullptr, |
||
| const std::vector< double > * | weights = nullptr |
||
| ) |
NOTE: Nodal values are set by calling collectDataForInterpolation().
| void IBTK::FEDataInterpolation::collectDataForInterpolation | ( | const libMesh::Elem * | elem | ) |
| const boost::multi_array<double, 2>& IBTK::FEDataInterpolation::getElemData | ( | const libMesh::Elem * | elem, |
| size_t | system_idx | ||
| ) |
| void IBTK::FEDataInterpolation::interpolate | ( | const libMesh::Elem * | elem | ) |
NOTE: Nodal values are set by calling collectDataForInterpolation().
| void IBTK::FEDataInterpolation::interpolate | ( | const libMesh::Elem * | elem, |
| unsigned int | side | ||
| ) |
NOTE: Nodal values are set by calling collectDataForInterpolation().
|
privatedelete |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
1.8.17