serial_mesh.h
Go to the documentation of this file.00001 // The libMesh Finite Element Library. 00002 // Copyright (C) 2002-2012 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_SERIAL_MESH_H 00021 #define LIBMESH_SERIAL_MESH_H 00022 00023 // Local Includes ----------------------------------- 00024 #include "libmesh/unstructured_mesh.h" 00025 #include "libmesh/boundary_info.h" 00026 00027 // C++ Includes ----------------------------------- 00028 #include <cstddef> 00029 00030 namespace libMesh 00031 { 00032 00033 00034 00035 00036 00037 00045 // ------------------------------------------------------------ 00046 // Mesh class definition 00047 class SerialMesh : public UnstructuredMesh 00048 { 00049 public: 00050 00056 explicit 00057 SerialMesh (unsigned int dim=1); 00058 00063 SerialMesh (const UnstructuredMesh& other_mesh); 00064 00069 SerialMesh (const SerialMesh& other_mesh); 00070 00074 virtual AutoPtr<MeshBase> clone () const 00075 { return AutoPtr<MeshBase>(new SerialMesh(*this)); } 00076 00080 virtual ~SerialMesh(); 00081 00085 virtual void clear(); 00086 00090 virtual void renumber_nodes_and_elements (); 00091 00092 virtual dof_id_type n_nodes () const 00093 { return libmesh_cast_int<dof_id_type>(_nodes.size()); } 00094 00095 virtual dof_id_type parallel_n_nodes () const 00096 { return libmesh_cast_int<dof_id_type>(_nodes.size()); } 00097 00098 virtual dof_id_type max_node_id () const 00099 { return libmesh_cast_int<dof_id_type>(_nodes.size()); } 00100 00101 virtual void reserve_nodes (const dof_id_type nn) 00102 { _nodes.reserve (nn); } 00103 00104 virtual dof_id_type n_elem () const 00105 { return libmesh_cast_int<dof_id_type>(_elements.size()); } 00106 00107 virtual dof_id_type parallel_n_elem () const 00108 { return libmesh_cast_int<dof_id_type>(_elements.size()); } 00109 00110 virtual dof_id_type n_active_elem () const; 00111 00112 virtual dof_id_type max_elem_id () const 00113 { return libmesh_cast_int<dof_id_type>(_elements.size()); } 00114 00115 virtual void reserve_elem (const dof_id_type ne) { _elements.reserve (ne); } 00116 00117 // SerialMesh has no caches to update 00118 virtual void update_parallel_id_counts () {} 00119 00120 virtual const Point& point (const dof_id_type i) const ; 00121 virtual const Node& node (const dof_id_type i) const ; 00122 virtual Node& node (const dof_id_type i) ; 00123 virtual const Node* node_ptr (const dof_id_type i) const ; 00124 virtual Node* node_ptr (const dof_id_type i) ; 00125 virtual const Node* query_node_ptr (const dof_id_type i) const ; 00126 virtual Node* query_node_ptr (const dof_id_type i) ; 00127 virtual const Elem* elem (const dof_id_type i) const ; 00128 virtual Elem* elem (const dof_id_type i) ; 00129 virtual const Elem* query_elem (const dof_id_type i) const ; 00130 virtual Elem* query_elem (const dof_id_type i) ; 00131 00135 virtual Node* add_point (const Point& p, 00136 const dof_id_type id = 00137 DofObject::invalid_id, 00138 const processor_id_type proc_id = 00139 DofObject::invalid_processor_id); 00140 virtual Node* add_node (Node* n) ; 00141 virtual void delete_node (Node* n) ; 00142 virtual void renumber_node (dof_id_type old_id, dof_id_type new_id); 00143 virtual Elem* add_elem (Elem* e) ; 00144 virtual Elem* insert_elem (Elem* e) ; 00145 virtual void delete_elem (Elem* e) ; 00146 virtual void renumber_elem (dof_id_type old_id, dof_id_type new_id); 00147 00154 virtual void fix_broken_node_and_element_numbering (); 00155 00164 void stitch_meshes (SerialMesh& other_mesh, 00165 boundary_id_type this_mesh_boundary, 00166 boundary_id_type other_mesh_boundary, 00167 Real tol=TOLERANCE, 00168 bool clear_stitched_boundary_ids=false, 00169 bool verbose=true); 00170 00171 public: 00175 element_iterator elements_begin (); 00176 element_iterator elements_end (); 00177 00178 element_iterator active_elements_begin (); 00179 element_iterator active_elements_end (); 00180 00181 element_iterator ancestor_elements_begin (); 00182 element_iterator ancestor_elements_end (); 00183 00184 element_iterator subactive_elements_begin (); 00185 element_iterator subactive_elements_end (); 00186 00187 element_iterator not_active_elements_begin (); 00188 element_iterator not_active_elements_end (); 00189 00190 element_iterator not_ancestor_elements_begin (); 00191 element_iterator not_ancestor_elements_end (); 00192 00193 element_iterator not_subactive_elements_begin (); 00194 element_iterator not_subactive_elements_end (); 00195 00196 element_iterator local_elements_begin (); 00197 element_iterator local_elements_end (); 00198 00199 element_iterator not_local_elements_begin (); 00200 element_iterator not_local_elements_end (); 00201 00202 element_iterator active_local_elements_begin (); 00203 element_iterator active_local_elements_end (); 00204 00205 element_iterator active_not_local_elements_begin (); 00206 element_iterator active_not_local_elements_end (); 00207 00208 element_iterator level_elements_begin (const unsigned int level); 00209 element_iterator level_elements_end (const unsigned int level); 00210 00211 element_iterator not_level_elements_begin (const unsigned int level); 00212 element_iterator not_level_elements_end (const unsigned int level); 00213 00214 element_iterator local_level_elements_begin (const unsigned int level); 00215 element_iterator local_level_elements_end (const unsigned int level); 00216 00217 element_iterator local_not_level_elements_begin (const unsigned int level); 00218 element_iterator local_not_level_elements_end (const unsigned int level); 00219 00220 element_iterator pid_elements_begin (const processor_id_type proc_id); 00221 element_iterator pid_elements_end (const processor_id_type proc_id); 00222 00223 element_iterator type_elements_begin (const ElemType type); 00224 element_iterator type_elements_end (const ElemType type); 00225 00226 element_iterator active_type_elements_begin (const ElemType type); 00227 element_iterator active_type_elements_end (const ElemType type); 00228 00229 element_iterator active_pid_elements_begin (const processor_id_type proc_id); 00230 element_iterator active_pid_elements_end (const processor_id_type proc_id); 00231 00232 element_iterator unpartitioned_elements_begin (); 00233 element_iterator unpartitioned_elements_end (); 00234 00235 element_iterator active_local_subdomain_elements_begin (const subdomain_id_type subdomain_id); 00236 element_iterator active_local_subdomain_elements_end (const subdomain_id_type subdomain_id); 00237 00238 element_iterator active_subdomain_elements_begin (const subdomain_id_type subdomain_id); 00239 element_iterator active_subdomain_elements_end (const subdomain_id_type subdomain_id); 00240 00244 const_element_iterator elements_begin() const; 00245 const_element_iterator elements_end() const; 00246 00247 const_element_iterator active_elements_begin() const; 00248 const_element_iterator active_elements_end() const; 00249 00250 const_element_iterator ancestor_elements_begin() const; 00251 const_element_iterator ancestor_elements_end() const; 00252 00253 const_element_iterator subactive_elements_begin() const; 00254 const_element_iterator subactive_elements_end() const; 00255 00256 const_element_iterator not_active_elements_begin() const; 00257 const_element_iterator not_active_elements_end() const; 00258 00259 const_element_iterator not_ancestor_elements_begin() const; 00260 const_element_iterator not_ancestor_elements_end() const; 00261 00262 const_element_iterator not_subactive_elements_begin() const; 00263 const_element_iterator not_subactive_elements_end() const; 00264 00265 const_element_iterator local_elements_begin () const; 00266 const_element_iterator local_elements_end () const; 00267 00268 const_element_iterator not_local_elements_begin () const; 00269 const_element_iterator not_local_elements_end () const; 00270 00271 const_element_iterator active_local_elements_begin () const; 00272 const_element_iterator active_local_elements_end () const; 00273 00274 const_element_iterator active_not_local_elements_begin () const; 00275 const_element_iterator active_not_local_elements_end () const; 00276 00277 const_element_iterator level_elements_begin (const unsigned int level) const; 00278 const_element_iterator level_elements_end (const unsigned int level) const; 00279 00280 const_element_iterator not_level_elements_begin (const unsigned int level) const; 00281 const_element_iterator not_level_elements_end (const unsigned int level) const; 00282 00283 const_element_iterator local_level_elements_begin (const unsigned int level) const; 00284 const_element_iterator local_level_elements_end (const unsigned int level) const; 00285 00286 const_element_iterator local_not_level_elements_begin (const unsigned int level) const; 00287 const_element_iterator local_not_level_elements_end (const unsigned int level) const; 00288 00289 const_element_iterator pid_elements_begin (const processor_id_type proc_id) const; 00290 const_element_iterator pid_elements_end (const processor_id_type proc_id) const; 00291 00292 const_element_iterator type_elements_begin (const ElemType type) const; 00293 const_element_iterator type_elements_end (const ElemType type) const; 00294 00295 const_element_iterator active_type_elements_begin (const ElemType type) const; 00296 const_element_iterator active_type_elements_end (const ElemType type) const; 00297 00298 const_element_iterator active_pid_elements_begin (const processor_id_type proc_id) const; 00299 const_element_iterator active_pid_elements_end (const processor_id_type proc_id) const; 00300 00301 const_element_iterator unpartitioned_elements_begin () const; 00302 const_element_iterator unpartitioned_elements_end () const; 00303 00304 const_element_iterator active_local_subdomain_elements_begin (const subdomain_id_type subdomain_id) const; 00305 const_element_iterator active_local_subdomain_elements_end (const subdomain_id_type subdomain_id) const; 00306 00307 const_element_iterator active_subdomain_elements_begin (const subdomain_id_type subdomain_id) const; 00308 const_element_iterator active_subdomain_elements_end (const subdomain_id_type subdomain_id) const; 00309 00310 00311 00312 00313 00314 00318 node_iterator nodes_begin(); 00319 node_iterator nodes_end(); 00320 00321 node_iterator active_nodes_begin(); 00322 node_iterator active_nodes_end(); 00323 00324 node_iterator local_nodes_begin (); 00325 node_iterator local_nodes_end (); 00326 00327 node_iterator pid_nodes_begin (const processor_id_type proc_id); 00328 node_iterator pid_nodes_end (const processor_id_type proc_id); 00329 00333 const_node_iterator nodes_begin() const; 00334 const_node_iterator nodes_end() const; 00335 00336 const_node_iterator active_nodes_begin() const; 00337 const_node_iterator active_nodes_end() const; 00338 00339 const_node_iterator local_nodes_begin () const; 00340 const_node_iterator local_nodes_end () const; 00341 00342 const_node_iterator pid_nodes_begin (const processor_id_type proc_id) const; 00343 const_node_iterator pid_nodes_end (const processor_id_type proc_id) const; 00344 00345 protected: 00349 std::vector<Node*> _nodes; 00350 00354 std::vector<Elem*> _elements; 00355 00356 private: 00357 00362 typedef std::vector<Elem*>::iterator elem_iterator_imp; 00363 typedef std::vector<Elem*>::const_iterator const_elem_iterator_imp; 00364 00369 typedef std::vector<Node*>::iterator node_iterator_imp; 00370 typedef std::vector<Node*>::const_iterator const_node_iterator_imp; 00371 }; 00372 00373 00374 00375 } // namespace libMesh 00376 00377 00378 00379 #endif // LIBMESH_SERIAL_MESH_H
Site Created By: libMesh Developers
Last modified: February 05 2013 19:54:48 UTC
Hosted By: