27   void partial_mesh_fem::clear(
void)
 
   28   { mesh_fem::clear(); is_adapted = 
false; }
 
   30   partial_mesh_fem::partial_mesh_fem(
const mesh_fem &mef)
 
   31     : mesh_fem(mef.linked_mesh()), mf(mef)
 
   32   { is_adapted = 
false; }
 
   36   partial_mesh_fem::partial_mesh_fem(
const mesh_fem *mef)
 
   37     : mesh_fem(*(mef ? &(mef->linked_mesh()) : &(void_mesh__))), mf(*mef)
 
   38   { is_adapted = 
false; }
 
   40   DAL_SIMPLE_KEY(special_partialmf_key, 
pfem);
 
   41   void partial_mesh_fem::adapt(
const dal::bit_vector &kept_dofs,
 
   42                                const dal::bit_vector &rejected_elt) {
 
   45     if (!(mi.is_equal(mf.get_qdims()))) {
 
   48       dof_enumeration_made = 
false; touch(); v_num = act_counter();
 
   51     fe_convex = mf.convex_index();
 
   52     fe_convex.setminus(rejected_elt);
 
   54     gmm::row_matrix<gmm::rsvector<scalar_type> >
 
   55       RR(kept_dofs.card(), mf.nb_dof());
 
   57     for (dal::bv_visitor i(kept_dofs); !i.finished(); ++i, ++j)
 
   58       RR(j, i) = scalar_type(1);
 
   60     R_ = REDUCTION_MATRIX(kept_dofs.card(), mf.nb_basic_dof());
 
   61     E_ = EXTENSION_MATRIX(mf.nb_basic_dof(), kept_dofs.card());
 
   63     if (mf.is_reduced()) {
 
   64       gmm::row_matrix<gmm::rsvector<scalar_type> >
 
   65         A(kept_dofs.card(), mf.nb_basic_dof());
 
   66       gmm::mult(RR, mf.reduction_matrix(), A);
 
   68       gmm::row_matrix<gmm::rsvector<scalar_type> >
 
   69         B(mf.nb_basic_dof(), kept_dofs.card());
 
   70       gmm::mult(mf.extension_matrix(), gmm::transposed(RR), B);
 
   74       gmm::copy(RR, R_); gmm::copy(gmm::transposed(RR), E_);
 
   78     is_adapted = 
true; touch(); v_num = act_counter();
 
   97   void partial_mesh_fem::write_to_file(std::ostream &ost)
 const 
   98   { context_check(); mf.context_check();
 
   99     gmm::stream_standard_locale sl(ost);
 
  100     ost << 
'\n' << 
"BEGIN MESH_FEM" << 
'\n' << 
'\n';
 
  101     mf.write_basic_to_file(ost);
 
  102     write_reduction_matrices_to_file(ost);
 
  103     ost << 
"END MESH_FEM" << 
'\n';
 
  106   void partial_mesh_fem::write_to_file(
const std::string &name,
 
  107                                        bool with_mesh)
 const {
 
  108     std::ofstream o(name.c_str());
 
  109     GMM_ASSERT1(o, 
"impossible to open file '" << name << 
"'");
 
  110     o << 
"% GETFEM MESH_FEM FILE " << 
'\n';
 
  111     o << 
"% GETFEM VERSION " << GETFEM_VERSION << 
'\n' << 
'\n' << 
'\n';
 
  112     if (with_mesh) mf.linked_mesh().write_to_file(o);
 
  119     unsigned N = m.dim();
 
  120     if (P == 
unsigned(-1)) P = N;
 
  123     bgeot::pgeotrans_precomp pgp2 = 0;
 
  125     getfem::pfem_precomp pfp = 0;
 
  126     pintegration_method pim1 = 0;
 
  129     std::vector<scalar_type> area_supports(mf.
nb_basic_dof());
 
  130     dal::bit_vector kept_dofs;
 
  132     for (dal::bv_visitor cv(mim.
convex_index()); !cv.finished(); ++cv) {
 
  133       m.points_of_convex(cv, G);
 
  136       if (pim == 
im_none()) 
continue;
 
  138       GMM_ASSERT1(pim->type() == IM_APPROX,
 
  139                   "Works only with approximate integration");
 
  140       papprox_integration pai2= pim->approx_method();
 
  141       static papprox_integration pai2_old = 0;
 
  142       if (pgt_old != pgt || pai2 != pai2_old) {
 
  144         pgp2 = bgeot::geotrans_precomp(pgt, pai2->pintegration_points(),pim);
 
  146       if (pai2 != pai2_old || pf != pf_old) {
 
  158       for (
size_type i = 0; i < pai2->nb_points_on_convex(); ++i) {
 
  159         for (
unsigned d = 0; d < pf->nb_dof(cv); ++d) {
 
  165               += pai2->coeff(i) * c2.
J() * gmm::sqr(pfp->val(i)[d]);
 
  173     std::vector<scalar_type> areas2(mf.
nb_dof());
 
  174     std::vector<scalar_type> area_supports2(mf.
nb_dof());
 
  182       gmm::copy(areas, areas2);
 
  183       gmm::copy(area_supports, area_supports2);
 
  187       if (area_supports2[i] > pow(1e-14 * areas2[i], scalar_type(P) / N))
 
the geotrans_interpolation_context structure is passed as the argument of geometric transformation in...
 
void set_ii(size_type ii__)
change the current point (assuming a geotrans_precomp_ is used)
 
scalar_type J() const
get the Jacobian of the geometric trans (taken at point xref() )
 
Describe a finite element method linked to a mesh.
 
virtual ind_dof_ct ind_basic_dof_of_element(size_type cv) const
Give an array of the dof numbers a of convex.
 
virtual dim_type get_qdim() const
Return the Q dimension.
 
virtual size_type nb_dof() const
Return the total number of degrees of freedom.
 
const mesh & linked_mesh() const
Return a reference to the underlying mesh.
 
const EXTENSION_MATRIX & extension_matrix() const
Return the extension matrix corresponding to reduction applied (RE=I).
 
virtual size_type nb_basic_dof() const
Return the total number of basic degrees of freedom (before the optional reduction).
 
virtual pfem fem_of_element(size_type cv) const
Return the basic fem associated with an element (if no fem is associated, the function will crash!...
 
bool is_reduced() const
Return true if a reduction matrix is applied to the dofs.
 
Describe an integration method linked to a mesh.
 
virtual pintegration_method int_method_of_element(size_type cv) const
return the integration method associated with an element (in no integration is associated,...
 
const dal::bit_vector & convex_index(void) const
Get the set of convexes where an integration method has been assigned.
 
Describe a mesh (collection of convexes (elements) and points).
 
a subclass of getfem::mesh_fem which allows to eliminate a number of dof of the original mesh_fem.
 
scalar_type APIDECL convex_area_estimate(bgeot::pgeometric_trans pgt, const base_matrix &pts, pintegration_method pim)
rough estimate of the convex area.
 
std::shared_ptr< const getfem::virtual_fem > pfem
type of pointer on a fem description
 
pfem_precomp fem_precomp(pfem pf, bgeot::pstored_point_tab pspt, dal::pstatic_stored_object dep)
Handles precomputations for FEM.
 
size_t size_type
used as the common size type in the library
 
std::shared_ptr< const bgeot::geometric_trans > pgeometric_trans
pointer type for a geometric transformation
 
GEneric Tool for Finite Element Methods.
 
dal::bit_vector select_dofs_from_im(const mesh_fem &mf, const mesh_im &mim, unsigned P=unsigned(-1))
Return a selection of dof who contribute significantly to the mass-matrix that would be computed with...
 
pintegration_method classical_approx_im(bgeot::pgeometric_trans pgt, dim_type degree)
try to find an approximate integration method for the geometric transformation pgt which is able to i...
 
pintegration_method im_none(void)
return IM_NONE