libMesh
Loading...
Searching...
No Matches
hp_singular.C
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 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
29namespace 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
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:83
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
This is the MeshBase class.
Definition mesh_base.h:81
Manages consistently variables, degrees of freedom, and coefficient vectors.
Definition system.h:100
const MeshBase & get_mesh() const
Definition system.h:2401
MeshBase & mesh
The libMesh namespace provides an interface to certain functionality in the library.