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_CELL_INF_H 21 : #define LIBMESH_CELL_INF_H 22 : 23 : #include "libmesh/libmesh_config.h" 24 : 25 : #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 26 : 27 : // Local includes 28 : #include "libmesh/elem.h" 29 : 30 : namespace libMesh 31 : { 32 : 33 : /** 34 : * The \p InfCell is an abstract element type that lives in 35 : * three dimensions. An infinite cell could be an infinite hexahedron, 36 : * or an infinite prism. 37 : * 38 : * \author Daniel Dreyer 39 : * \date 2003 40 : * \brief The base class for all 3D infinite geometric element types. 41 : */ 42 : class InfCell : public Elem 43 : { 44 : public: 45 : 46 : /** 47 : * Constructor. 48 : */ 49 1280 : InfCell (const unsigned int nn, 50 : const unsigned int ns, 51 : Elem * p, 52 : Elem ** elemlinkdata, 53 2729 : Node ** nodelinkdata) : 54 2729 : Elem (nn, ns, p, elemlinkdata, nodelinkdata) 55 1280 : {} 56 : 57 : InfCell (InfCell &&) = delete; 58 : InfCell (const InfCell &) = delete; 59 : InfCell & operator= (const InfCell &) = delete; 60 : InfCell & operator= (InfCell &&) = delete; 61 5571 : virtual ~InfCell() = default; 62 : 63 : /** 64 : * \returns 3, the dimensionality of the object. 65 : */ 66 1596254 : virtual unsigned short dim () const override { return 3; } 67 : 68 : /** 69 : * \returns \p true. All classes derived from \p InfCell 70 : * are infinite elements. 71 : */ 72 36669 : virtual bool infinite () const override { return true; } 73 : 74 : /** 75 : * \returns The origin of this infinite element. 76 : */ 77 454898 : virtual Point origin () const override 78 : { 79 454898 : return (this->point(0)*2 - this->point(this->n_vertices()/2)); 80 : } 81 : }; 82 : 83 : } // namespace libMesh 84 : 85 : #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 86 : 87 : #endif // LIBMESH_CELL_INF_H