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_H 21 : #define LIBMESH_CELL_H 22 : 23 : // Local includes 24 : #include "libmesh/elem.h" 25 : 26 : namespace libMesh 27 : { 28 : 29 : /** 30 : * The \p Cell is an abstract element type that lives in 31 : * three dimensions. A cell could be a tetrahedron, a hexahedron, 32 : * a pyramid, a prism, etc... 33 : * 34 : * \author Benjamin S. Kirk 35 : * \date 2002 36 : * \brief The base class for all 3D geometric element types. 37 : */ 38 : class Cell : public Elem 39 : { 40 : public: 41 : 42 : /** 43 : * Constructor. 44 : */ 45 548832 : Cell (const unsigned int nn, 46 : const unsigned int ns, 47 : Elem * p, 48 : Elem ** elemlinkdata, 49 25797704 : Node ** nodelinkdata) : 50 26544359 : Elem (nn, ns, p, elemlinkdata, nodelinkdata) {} 51 : 52 : Cell (Cell &&) = delete; 53 : Cell (const Cell &) = delete; 54 : Cell & operator= (const Cell &) = delete; 55 : Cell & operator= (Cell &&) = delete; 56 27415130 : virtual ~Cell() = default; 57 : 58 : /** 59 : * \returns 3, the dimensionality of the object. 60 : */ 61 7906190169 : virtual unsigned short dim () const override { return 3; } 62 : 63 : /** 64 : * \returns A bounding box (not necessarily the minimal bounding box) 65 : * containing the geometric element. 66 : */ 67 : virtual BoundingBox loose_bounding_box () const override; 68 : 69 : #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 70 : 71 : /** 72 : * \returns \p false. All classes derived from \p Cell 73 : * are finite elements. 74 : */ 75 356878626 : virtual bool infinite () const override { return false; } 76 : 77 : #endif 78 : }; 79 : 80 : 81 : } // namespace libMesh 82 : 83 : 84 : #endif // LIBMESH_CELL_H