Line data Source code
1 : // The libMesh Finite Element Library. 2 : // Copyright (C) 2002-2025 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 : 19 : 20 : #ifndef LIBMESH_HP_SELECTOR_H 21 : #define LIBMESH_HP_SELECTOR_H 22 : 23 : // Local Includes 24 : #include "libmesh/libmesh_common.h" 25 : 26 : // C++ includes 27 : #include <vector> 28 : 29 : #ifdef LIBMESH_ENABLE_AMR 30 : 31 : namespace libMesh 32 : { 33 : 34 : // Forward Declarations 35 : class System; 36 : 37 : 38 : /** 39 : * Subclasses of this abstract base class choose between h 40 : * refining and p elevation. 41 : * Currently we assume that a set of elements has already been flagged 42 : * for h refinement, and we may want to change some of those elements 43 : * to be flagged for p refinement. 44 : * 45 : * \author Roy H. Stogner 46 : * \date 2006 47 : */ 48 : class HPSelector 49 : { 50 : public: 51 : 52 : /** 53 : * Constructor. 54 : */ 55 : HPSelector() = default; 56 : 57 : /** 58 : * Copy/move ctor, copy/move assignment operator, and destructor are 59 : * all explicitly defaulted for this simple class. 60 : */ 61 : HPSelector (const HPSelector &) = default; 62 : HPSelector (HPSelector &&) = default; 63 : HPSelector & operator= (const HPSelector &) = default; 64 : HPSelector & operator= (HPSelector &&) = default; 65 0 : virtual ~HPSelector() = default; 66 : 67 : /** 68 : * This pure virtual function must be redefined 69 : * in derived classes to take a mesh flagged for h 70 : * refinement and potentially change the desired 71 : * refinement type. 72 : */ 73 : virtual void select_refinement (System & system) = 0; 74 : 75 : /** 76 : * This vector can be used to "scale" certain 77 : * variables in a system. 78 : * If the mask is not empty, the consideration given to each 79 : * component's h and p error estimates will be scaled by 80 : * component_scale[c]. 81 : */ 82 : std::vector<float> component_scale; 83 : }; 84 : 85 : } // namespace libMesh 86 : 87 : #endif // #ifdef LIBMESH_ENABLE_AMR 88 : 89 : #endif // LIBMESH_HP_SELECTOR_H