hp_singular.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2018 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 // C++ includes
19 
20 // Local Includes
21 #include "libmesh/elem.h"
22 #include "libmesh/hp_singular.h"
24 #include "libmesh/mesh_base.h"
25 #include "libmesh/system.h"
26 
27 #ifdef LIBMESH_ENABLE_AMR
28 
29 namespace libMesh
30 {
31 
32 //-----------------------------------------------------------------
33 // HPSingularity implementations
34 
35 
37 {
38  LOG_SCOPE("select_refinement()", "HPSingularity");
39 
40  // The current mesh
41  MeshBase & mesh = system.get_mesh();
42 
43  for (auto & elem : mesh.active_element_ptr_range())
44  {
45  // We're only checking elements that are already flagged for h
46  // refinement
47  if (elem->refinement_flag() != Elem::REFINE)
48  continue;
49 
50  elem->set_p_refinement_flag(Elem::REFINE);
51  elem->set_refinement_flag(Elem::DO_NOTHING);
52 
53  for (const auto & pt : singular_points)
54  if (elem->contains_point(pt))
55  {
56  elem->set_p_refinement_flag(Elem::DO_NOTHING);
57  elem->set_refinement_flag(Elem::REFINE);
58  break;
59  }
60  }
61 }
62 
63 } // namespace libMesh
64 
65 #endif // #ifdef LIBMESH_ENABLE_AMR
MeshBase & mesh
const MeshBase & get_mesh() const
Definition: system.h:2033
Base class for Mesh.
Definition: mesh_base.h:77
std::list< Point > singular_points
Definition: hp_singular.h:83
Manages consistently variables, degrees of freedom, and coefficient vectors.
Definition: system.h:92
virtual void select_refinement(System &system)
Definition: hp_singular.C:36