41 #ifndef GETFEM_MESH_FEM_PRODUCT_H__
42 #define GETFEM_MESH_FEM_PRODUCT_H__
48 class fem_product :
public virtual_fem {
51 dal::bit_vector enriched_dof1;
56 const dal::bit_vector &nn)
57 : cv(i), xfem_index(xfi), enriched_dof1(nn)
58 { pfems[0] = pf1_; pfems[1] = pf2_; init(); }
61 void base_value(
const base_node &x, base_tensor &t)
const;
62 void grad_base_value(
const base_node &x, base_tensor &t)
const;
63 void hess_base_value(
const base_node &x, base_tensor &t)
const;
65 void real_base_value(
const fem_interpolation_context& c,
66 base_tensor &t,
bool =
true)
const;
67 void real_grad_base_value(
const fem_interpolation_context& c,
68 base_tensor &t,
bool =
true)
const;
69 void real_hess_base_value(
const fem_interpolation_context& c,
70 base_tensor &t,
bool =
true)
const;
75 class mesh_fem_product :
public mesh_fem {
79 mutable std::vector<pfem> build_methods;
80 mutable bool is_adapted;
82 dal::bit_vector enriched_dof;
83 void clear_build_methods();
87 void update_from_context(
void)
const { is_adapted =
false; touch(); }
91 {
return mesh_fem::memsize(); }
93 mesh_fem_product(
const mesh_fem &me1,
const mesh_fem &me2)
95 { is_adapted =
false; xfem_index = reserve_xfem_index(); }
96 void set_enrichment(
const dal::bit_vector &nn)
97 { enriched_dof = nn; adapt(); }
99 ~mesh_fem_product() { clear_build_methods(); }