$extrastylesheet
cell_inf_hex.h
Go to the documentation of this file.
00001 // The libMesh Finite Element Library.
00002 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
00003 
00004 // This library is free software; you can redistribute it and/or
00005 // modify it under the terms of the GNU Lesser General Public
00006 // License as published by the Free Software Foundation; either
00007 // version 2.1 of the License, or (at your option) any later version.
00008 
00009 // This library is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // Lesser General Public License for more details.
00013 
00014 // You should have received a copy of the GNU Lesser General Public
00015 // License along with this library; if not, write to the Free Software
00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018 
00019 
00020 #ifndef LIBMESH_CELL_INF_HEX_H
00021 #define LIBMESH_CELL_INF_HEX_H
00022 
00023 #include "libmesh/libmesh_config.h"
00024 
00025 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
00026 
00027 // Local includes
00028 #include "libmesh/cell_inf.h"
00029 
00030 namespace libMesh
00031 {
00032 
00033 
00034 
00035 
00045 class InfHex : public InfCell
00046 {
00047 public:
00048 
00053   InfHex(const unsigned int nn, Elem* p, Node** nodelinkdata);
00054 
00055   //   /**
00056   //    * @returns 4 for the base \p s=0 and 2 for side faces.
00057   //    */
00058   //   unsigned int n_children_per_side(const unsigned int s) const;
00059 
00065   unsigned int n_sides() const { return 5; }
00066 
00071   unsigned int n_vertices() const { return 8; }
00072 
00077   unsigned int n_edges() const { return 8; }
00078 
00082   unsigned int n_faces() const { return 5; }
00083 
00087   unsigned int n_children() const { return 4; }
00088 
00089   /*
00090    * @returns true iff the specified child is on the
00091    * specified side
00092    */
00093   virtual bool is_child_on_side(const unsigned int c,
00094                                 const unsigned int s) const;
00095 
00096   /*
00097    * @returns true iff the specified edge is on the specified side
00098    */
00099   virtual bool is_edge_on_side(const unsigned int e,
00100                                const unsigned int s) const;
00101 
00107   dof_id_type key (const unsigned int s) const;
00108 
00113   UniquePtr<Elem> side (const unsigned int i) const;
00114 
00119   Real quality (const ElemQuality q) const;
00120 
00126   std::pair<Real, Real> qual_bounds (const ElemQuality q) const;
00127 
00128 
00129 
00130 protected:
00131 
00135   Elem* _elemlinks_data[6+(LIBMESH_DIM>3)];
00136 
00137 
00138 
00148   static const unsigned short int _second_order_adjacent_vertices[8][2];
00149 
00153   static const unsigned short int _second_order_vertex_child_number[18];
00154 
00158   static const unsigned short int _second_order_vertex_child_index[18];
00159 };
00160 
00161 
00162 
00163 // ------------------------------------------------------------
00164 // InfHex class member functions
00165 inline
00166 InfHex::InfHex(const unsigned int nn, Elem* p, Node** nodelinkdata) :
00167   InfCell(nn, InfHex::n_sides(), p, _elemlinks_data, nodelinkdata)
00168 {
00169 }
00170 
00171 
00172 // inline
00173 // unsigned int InfHex::n_children_per_side(const unsigned int s) const
00174 // {
00175 //   libmesh_assert_less (s, this->n_sides());
00176 
00177 //   switch (s)
00178 //   {
00179 //     case 0:
00180 //       // every infinite element has 4 children in the base side
00181 //       return 4;
00182 
00183 //     default:
00184 //       // on infinite faces (sides), only 2 children exist
00185 //       //
00186 //       // note that the face at infinity is already caught by the libmesh_assertion
00187 //       return 2;
00188 //   }
00189 // }
00190 
00191 
00192 } // namespace libMesh
00193 
00194 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
00195 
00196 #endif // LIBMESH_CELL_INF_HEX_H