libMesh
hp_singular.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2017 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"
23 #include "libmesh/libmesh_logging.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 (std::list<Point>::iterator ppoint =
54  singular_points.begin();
55  ppoint != singular_points.end(); ++ppoint)
56  {
57  if (elem->contains_point(*ppoint))
58  {
59  elem->set_p_refinement_flag(Elem::DO_NOTHING);
60  elem->set_refinement_flag(Elem::REFINE);
61  break;
62  }
63  }
64  }
65 }
66 
67 } // namespace libMesh
68 
69 #endif // #ifdef LIBMESH_ENABLE_AMR
MeshBase & mesh
virtual SimpleRange< element_iterator > active_element_ptr_range()=0
The libMesh namespace provides an interface to certain functionality in the library.
This is the MeshBase class.
Definition: mesh_base.h:68
std::list< Point > singular_points
This list, to be filled by the user, should include all singular points in the solution.
Definition: hp_singular.h:79
const MeshBase & get_mesh() const
Definition: system.h:2014
This is the base class for classes which contain information related to any physical process that mig...
Definition: system.h:76
virtual void select_refinement(System &system)
This pure virtual function must be redefined in derived classes to take a mesh flagged for h refineme...
Definition: hp_singular.C:36