$extrastylesheet
node_elem.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_NODE_ELEM_H
00021 #define LIBMESH_NODE_ELEM_H
00022 
00023 // Local includes
00024 #include "libmesh/elem.h"
00025 
00026 // C++ includes
00027 #include <cstddef>
00028 
00029 namespace libMesh
00030 {
00031 
00032 
00033 // Forward declarations
00034 
00035 
00040 class NodeElem : public Elem
00041 {
00042 public:
00043 
00047   explicit
00048   NodeElem (Elem* p=NULL) :
00049     Elem(NodeElem::n_nodes(), NodeElem::n_sides(), p, _elemlinks_data, _nodelinks_data) {}
00050 
00054   unsigned int dim () const { return 0; }
00055 
00059   unsigned int n_nodes() const { return 1; }
00060 
00064   unsigned int n_sides() const { return 0; }
00065 
00069   unsigned int n_vertices() const { return 1; }
00070 
00074   unsigned int n_edges() const { return 0; }
00075 
00079   unsigned int n_faces() const { return 0; }
00080 
00084   unsigned int n_children() const { return 1; }
00085 
00090   dof_id_type key (const unsigned int) const
00091   { return 0; }
00092 
00096   UniquePtr<Elem> side (const unsigned int) const
00097   { libmesh_not_implemented(); return UniquePtr<Elem>(); }
00098 
00102   UniquePtr<Elem> build_side (const unsigned int, bool) const
00103   { libmesh_not_implemented(); return UniquePtr<Elem>(); }
00104 
00108   UniquePtr<Elem> build_edge (const unsigned int) const
00109   { libmesh_not_implemented(); return UniquePtr<Elem>(); }
00110 
00114   unsigned int n_sub_elem() const { return 1; }
00115 
00119   virtual bool is_vertex(const unsigned int) const { return true; }
00120 
00124   virtual bool is_edge(const unsigned int) const { return false; }
00125 
00126   virtual bool is_face(const unsigned int) const { return false; }
00127 
00128   virtual bool is_child_on_side(const unsigned int,
00129                                 const unsigned int) const
00130   { libmesh_not_implemented(); return false; }
00131 
00132   virtual bool is_node_on_side(const unsigned int,
00133                                const unsigned int) const
00134   { libmesh_not_implemented(); return false; }
00135 
00136   virtual bool is_node_on_edge(const unsigned int,
00137                                const unsigned int) const
00138   { libmesh_not_implemented(); return false; }
00139 
00140   virtual bool is_edge_on_side(const unsigned int,
00141                                const unsigned int) const
00142   { libmesh_not_implemented(); return false; }
00143 
00144   /*
00145    * @returns true iff the element map is definitely affine within
00146    * numerical tolerances
00147    */
00148   virtual bool has_affine_map () const { return true; }
00149 
00154   virtual bool is_linear () const { return true; }
00155 
00159   ElemType type()  const { return NODEELEM; }
00160 
00164   Order default_order() const { return FIRST; }
00165 
00166   virtual void connectivity(const unsigned int sc,
00167                             const IOPackage iop,
00168                             std::vector<dof_id_type>& conn) const;
00169 
00170 
00171 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
00172 
00176   bool infinite () const { return false; }
00177 
00178 #endif
00179 
00180 
00181 protected:
00182 
00186   Elem* _elemlinks_data[1+(LIBMESH_DIM>0)];
00187 
00191   Node* _nodelinks_data[1];
00192 
00193 
00194 #ifdef LIBMESH_ENABLE_AMR
00195 
00199   float embedding_matrix (const unsigned int i,
00200                           const unsigned int j,
00201                           const unsigned int k) const
00202   { return _embedding_matrix[i][j][k]; }
00203 
00208   static const float _embedding_matrix[1][1][1];
00209 
00213   unsigned int side_children_matrix (const unsigned int,
00214                                      const unsigned int) const
00215   { libmesh_not_implemented(); return 0; }
00216 
00217 #endif
00218 
00219 };
00220 
00221 
00222 
00223 
00224 
00225 // ------------------------------------------------------------
00226 // NodeElem class member functions
00227 
00228 } // namespace libMesh
00229 
00230 #endif // LIBMESH_NODE_ELEM_H