basis_on_pointset_evaluate.icc
Go to the documentation of this file.
#ifndef _RHEO_BASIS_ON_POINTSET_EVALUATE_H
#define _RHEO_BASIS_ON_POINTSET_EVALUATE_H
// basis evaluated on lattice of quadrature formulae: auxilliaries
#include "rheolef/basis.h"
namespace rheolef { namespace details {
// vdm = (phi_j(xi))_{i,j}
// i.e. the full basis at xi is the i-th row
template<class Basis, class T, class Value>
void basis_on_pointset_evaluate (
const Basis& b,
const reference_element& hat_K,
const Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& hat_x,
Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& vdm)
{
size_t loc_ndof = b.ndof(hat_K);
size_t loc_nnod = hat_x.size();
vdm.resize (loc_nnod, loc_ndof);
Eigen::Matrix<Value,Eigen::Dynamic,1> vdm_row;
vdm_row.resize (loc_ndof);
for (size_t loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
b.evaluate (hat_K, hat_x[loc_inod], vdm_row);
vdm.row (loc_inod) = vdm_row.transpose(); // TODO: how to avoid a copy: support matrix::row arg ?
}
}
template<class Basis, class T, class Value>
void basis_on_pointset_grad_evaluate (
const Basis& b,
const reference_element& hat_K,
const Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& hat_x,
Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& vdm_grad)
{
size_t loc_ndof = b.ndof(hat_K);
size_t loc_nnod = hat_x.size();
vdm_grad.resize (loc_nnod, loc_ndof);
Eigen::Matrix<Value,Eigen::Dynamic,1> vdm_grad_row;
vdm_grad_row.resize (loc_ndof);
for (size_t loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
b.grad_evaluate (hat_K, hat_x[loc_inod], vdm_grad_row);
vdm_grad.row (loc_inod) = vdm_grad_row.transpose(); // TODO: how to avoid a copy: support matrix::row arg ?
}
}
template<class Basis, class T, class Value>
void basis_on_pointset_evaluate_on_side (
const Basis& b,
const reference_element& tilde_K,
const side_information_type& sid,
const Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& hat_x,
Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& vdm)
{
size_t d = tilde_K.dimension();
check_macro (d > 0, "invalid zero dimension");
size_t loc_ndof = b.ndof(tilde_K);
size_t loc_nnod = hat_x.size();
vdm.resize (loc_nnod, loc_ndof);
Eigen::Matrix<Value,Eigen::Dynamic,1> vdm_row;
vdm_row.resize (loc_ndof);
for (size_t loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
b.evaluate_on_side (tilde_K, sid, hat_x[loc_inod], vdm_row);
vdm.row (loc_inod) = vdm_row.transpose(); // TODO: how to avoid a copy: support matrix::row arg ?
}
}
}}// namespace rheolef::details
#endif // _RHEO_BASIS_ON_POINTSET_EVALUATE_H
rheolef::point_basic
Definition: point.h:87
rheolef::reference_element
see the reference_element page for the full documentation
Definition: reference_element.h:66
rheolef::reference_element::dimension
size_type dimension() const
Definition: reference_element.h:101
check_macro
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
mkgeo_ball.b
int b
Definition: mkgeo_ball.sh:152
mkgeo_ball.d
int d
Definition: mkgeo_ball.sh:154
rheolef::details::basis_on_pointset_grad_evaluate
void basis_on_pointset_grad_evaluate(const Basis &b, const reference_element &hat_K, const Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &hat_x, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &vdm_grad)
Definition: basis_on_pointset_evaluate.icc:48
rheolef::details::basis_on_pointset_evaluate_on_side
void basis_on_pointset_evaluate_on_side(const Basis &b, const reference_element &tilde_K, const side_information_type &sid, const Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &hat_x, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &vdm)
Definition: basis_on_pointset_evaluate.icc:65
rheolef::details::basis_on_pointset_evaluate
void basis_on_pointset_evaluate(const Basis &b, const reference_element &hat_K, const Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &hat_x, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &vdm)
Definition: basis_on_pointset_evaluate.icc:31
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::side_information_type
Definition: reference_element_face_transformation.h:37