31      Eigen::VectorXd _interpolate_velocity(
 
   37      void _construct_stabilization(
size_t iT);
 
   39      std::unique_ptr<DiscreteSpace> m_bdmn_space;
 
 
   45    Eigen::VectorXd BottiMassa::_interpolate_velocity(
 
   54      const auto & bdmn_edge_dofs = m_bdmn_space->get<
PolyEdgeType>(
"EdgeDOFs");
 
   61      std::function<void(
size_t, 
size_t)> interpolate_edges
 
   62        = [
this, 
v, &vh, &edge_dofs, &doe_edge](
size_t start, 
size_t end)->
void 
   64          for (
size_t iE = start; iE < 
end; iE++) {
 
   66            const auto & edge_dofs_E = edge_dofs[E.global_index()];
 
   69            vh.segment(this->
m_velocity_space->globalOffset(E), this->m_velocity_space->numberOfLocalEdgeDofs())
 
   76      std::function<void(
size_t, 
size_t)> interpolate_cells
 
   77        = [
this, &vh, 
v, &cell_dofs, &bdmn_edge_dofs, &doe_cell, &doe_edge](
size_t start, 
size_t end)->
void 
   79          for (
size_t iT = start; iT < 
end; iT++) {
 
   83            int dim_cell_dofs = this->
m_velocity_space->numberOfLocalCellDofs(
"CellDOFs");                       
 
   86            Eigen::MatrixXd MIT = Eigen::MatrixXd::Zero(dim_cell_dofs, dim_cell_dofs);
 
   87            Eigen::VectorXd bIT = Eigen::VectorXd::Zero(dim_cell_dofs);
 
   90            const auto & cell_dofs_T = cell_dofs[iT];
 
   94              int dim_bdmn_goly_dofs = this->m_bdmn_space->numberOfLocalCellDofs(
"GolyCellDOFs");
 
   95              int offset_bdmn_goly_dofs = this->m_bdmn_space->localOffset(
T, 
"GolyCellDOFs");
 
   96              const auto & bdmn_goly_dofs = this->m_bdmn_space->get<
GolyCellType>(
"GolyCellDOFs")[iT];
 
   98              MIT.block(offset_bdmn_goly_dofs, 0, dim_bdmn_goly_dofs, dim_cell_dofs)
 
  101              bIT.segment(offset_bdmn_goly_dofs, dim_bdmn_goly_dofs) = 
integrate(
v, bdmn_goly_dofs_quad, quad_T);
 
  105              int dim_bdmn_goly_compl_dofs = this->m_bdmn_space->numberOfLocalCellDofs(
"GolyComplCellDOFs");
 
  106              int offset_bdmn_goly_compl_dofs = this->m_bdmn_space->localOffset(
T, 
"GolyComplCellDOFs");
 
  107              const auto & bdmn_goly_compl_dofs = this->m_bdmn_space->get<
GolyComplCellType>(
"GolyComplCellDOFs")[iT];
 
  109              MIT.block(offset_bdmn_goly_compl_dofs, 0, dim_bdmn_goly_compl_dofs, dim_cell_dofs)
 
  112              bIT.segment(offset_bdmn_goly_compl_dofs, dim_bdmn_goly_compl_dofs) = 
integrate(
v, bdmn_goly_compl_quad, quad_T);
 
  115            for (
size_t iE = 0; iE < 
T.n_edges(); iE++) {
 
  116              const Edge & E = *
T.edge(iE);
 
  117              auto nTE = 
T.edge_normal(iE);
 
  119              const auto & bdmn_edge_dofs_E = bdmn_edge_dofs[E.global_index()];
 
  122              auto cell_dofs_nTE_quad
 
  123                = transform_values_quad<double>(
 
  125                                                [&nTE](
const VectorRd & w)->
double { 
return w.dot(nTE); }
 
  129              int dim_bdmn_edge_dofs = this->m_bdmn_space->numberOfLocalEdgeDofs(
"EdgeDOFs"); 
 
  131              std::function<double(
const VectorRd &)> v_dot_nTE
 
  132                = [
v, &nTE](
const VectorRd & 
x) { 
return v(
x).dot(nTE); };
 
  134              MIT.block(this->m_bdmn_space->localOffset(
T, E), 0, dim_bdmn_edge_dofs, dim_cell_dofs)
 
  137              bIT.segment(this->m_bdmn_space->localOffset(
T, E), dim_bdmn_edge_dofs)
 
  138                = 
integrate(v_dot_nTE, bdmn_edge_dofs_quad, quad_E);
 
  140            vh.segment(this->
m_velocity_space->globalOffset(T), this->m_velocity_space->numberOfLocalCellDofs())
 
  141              = MIT.fullPivLu().solve(bIT);
 
 
The BoundaryConditions class provides definition of boundary conditions.
Definition BoundaryConditions.hpp:45
 
Definition botti-massa.hpp:12
 
Eigen::VectorXd interpolate(const VelocityType &u, const PressureType &p) const
Interpolate both velocity and pressure.
Definition botti-massa.cpp:112
 
std::function< VectorRd(const VectorRd &)> VelocityType
Definition hypre.hpp:37
 
size_t degree() const
Returns the degree.
Definition hypre.hpp:64
 
const Mesh & mesh() const
Returns the mesh.
Definition hypre.hpp:166
 
std::unique_ptr< DiscreteSpace > m_velocity_space
Definition hypre.hpp:366
 
size_t m_degree
Definition hypre.hpp:345
 
std::function< double(const VectorRd &)> PressureType
Definition hypre.hpp:39
 
Vector family obtained by tensorization of a scalar family.
Definition basis.hpp:564
 
end
Definition convergence_analysis.m:107
 
Create grid points x
Definition generate_cartesian_mesh.m:22
 
Eigen::Vector2d VectorRd
Definition basis.hpp:55
 
Eigen::MatrixXd compute_gram_matrix(const boost::multi_array< VectorRd, 2 > &B1, const boost::multi_array< double, 2 > &B2, const QuadratureRule &qr)
Compute the Gram-like matrix given a family of vector-valued and one of scalar-valued functions by te...
Definition basis.cpp:239
 
Eigen::VectorXd l2_projection(const std::function< typename BasisType::FunctionValue(const VectorRd &)> &f, const BasisType &basis, QuadratureRule &quad, const boost::multi_array< typename BasisType::FunctionValue, 2 > &basis_quad, const Eigen::MatrixXd &mass_basis=Eigen::MatrixXd::Zero(1, 1))
Compute the L2-projection of a function.
Definition basis.hpp:3023
 
Eigen::VectorXd integrate(const FType< T > &f, const BasisQuad< T > &B, const QuadratureRule &qr, size_t n_rows=0)
Compute the integral of a given function against all functions from a family.
Definition basis.hpp:2837
 
static boost::multi_array< typename detail::basis_evaluation_traits< BasisType, BasisFunction >::ReturnValue, 2 > compute(const BasisType &basis, const QuadratureRule &quad)
Generic basis evaluation.
Definition basis.hpp:2425
 
static void parallel_for(unsigned nb_elements, std::function< void(size_t start, size_t end)> functor, bool use_threads=true, unsigned nb_threads_max=1e9)
Generic function to execute threaded processes.
Definition parallel_for.hpp:42
 
Polytope< 1 > Edge
A Face is a Polytope with object_dim = DIMENSION - 1.
Definition Polytope2D.hpp:147
 
std::vector< QuadratureNode > QuadratureRule
Definition quadraturerule.hpp:55
 
Eigen::MatrixXd GramMatrix(const Cell &T, const MonomialScalarBasisCell &basis1, const MonomialScalarBasisCell &basis2, MonomialCellIntegralsType mono_int_map={})
Computes the Gram Matrix of a pair of local scalar monomial bases.
Definition GMpoly_cell.cpp:86
 
QuadratureRule generate_quadrature_rule(const Cell &T, const int doe, const bool force_split)
Generate quadrature rule on mesh element.
Definition quadraturerule.cpp:10
 
if(strcmp(field, 'real')) % real valued entries T
Definition mmread.m:93
 
Family< GradientBasis< ShiftedBasis< MonomialScalarBasisCell > > > GolyCellType
Definition discrete-space-descriptor.hpp:19
 
Family< GolyComplBasisCell > GolyComplCellType
Definition discrete-space-descriptor.hpp:20
 
Definition ddr-klplate.hpp:27
 
static auto v
Definition ddrcore-test.hpp:32
 
Definition hho-interpolate.hpp:15
 
int doe_cell
Definition hho-interpolate.hpp:17
 
bool use_threads
Definition hho-interpolate.hpp:16
 
int doe_edge
Definition hho-interpolate.hpp:18
 
Evaluate a basis at quadrature nodes. 'BasisFunction' (=Function, Gradient, Curl, Divergence,...
Definition basis.hpp:2421