$extrastylesheet
serial_mesh_iterators.C
Go to the documentation of this file.
00001 // The libSerialMesh 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 // C++ includes
00021 
00022 // Local includes
00023 // #include "libmesh/mesh_base.h"
00024 #include "libmesh/serial_mesh.h"
00025 #include "libmesh/elem.h"
00026 
00027 namespace libMesh
00028 {
00029 
00030 // This file contains the implementation of all the different iterator
00031 // functions for the mesh class.  They were put here to save space in the
00032 // header files.
00033 
00034 
00035 // default begin() accessor
00036 SerialMesh::element_iterator
00037 SerialMesh::elements_begin ()
00038 {
00039   Predicates::NotNull<elem_iterator_imp> p;
00040   return element_iterator(_elements.begin(), _elements.end(), p);
00041 }
00042 
00043 
00044 
00045 // active elements begin() accessor
00046 SerialMesh::element_iterator
00047 SerialMesh::active_elements_begin ()
00048 {
00049   Predicates::Active<elem_iterator_imp> p;
00050   return element_iterator(_elements.begin(), _elements.end(), p);
00051 }
00052 
00053 
00054 
00055 // not active elements begin() accessor
00056 SerialMesh::element_iterator
00057 SerialMesh::not_active_elements_begin ()
00058 {
00059   Predicates::NotActive<elem_iterator_imp> p;
00060   return element_iterator(_elements.begin(), _elements.end(), p);
00061 }
00062 
00063 
00064 
00065 // ancestor elements begin() accessor
00066 SerialMesh::element_iterator
00067 SerialMesh::ancestor_elements_begin ()
00068 {
00069   Predicates::Ancestor<elem_iterator_imp> p;
00070   return element_iterator(_elements.begin(), _elements.end(), p);
00071 }
00072 
00073 
00074 
00075 // not ancestor elements begin() accessor
00076 SerialMesh::element_iterator
00077 SerialMesh::not_ancestor_elements_begin ()
00078 {
00079   Predicates::Ancestor<elem_iterator_imp> p;
00080   return element_iterator(_elements.begin(), _elements.end(), p);
00081 }
00082 
00083 
00084 
00085 // subactive elements begin() accessor
00086 SerialMesh::element_iterator
00087 SerialMesh::subactive_elements_begin ()
00088 {
00089   Predicates::SubActive<elem_iterator_imp> p;
00090   return element_iterator(_elements.begin(), _elements.end(), p);
00091 }
00092 
00093 
00094 
00095 // not subactive elements begin() accessor
00096 SerialMesh::element_iterator
00097 SerialMesh::not_subactive_elements_begin ()
00098 {
00099   Predicates::NotSubActive<elem_iterator_imp> p;
00100   return element_iterator(_elements.begin(), _elements.end(), p);
00101 }
00102 
00103 
00104 
00105 // local elements begin() accessor
00106 SerialMesh::element_iterator
00107 SerialMesh::local_elements_begin ()
00108 {
00109   Predicates::Local<elem_iterator_imp> p(this->processor_id());
00110   return element_iterator(_elements.begin(), _elements.end(), p);
00111 }
00112 
00113 
00114 
00115 // semilocal elements begin() accessor
00116 SerialMesh::element_iterator
00117 SerialMesh::semilocal_elements_begin ()
00118 {
00119   Predicates::SemiLocal<elem_iterator_imp> p(this->processor_id());
00120   return element_iterator(_elements.begin(), _elements.end(), p);
00121 }
00122 
00123 
00124 
00125 // face-local elements begin() accessor
00126 SerialMesh::element_iterator
00127 SerialMesh::facelocal_elements_begin ()
00128 {
00129   Predicates::FaceLocal<elem_iterator_imp> p(this->processor_id());
00130   return element_iterator(_elements.begin(), _elements.end(), p);
00131 }
00132 
00133 
00134 
00135 // not_local elements begin() accessor
00136 SerialMesh::element_iterator
00137 SerialMesh::not_local_elements_begin ()
00138 {
00139   Predicates::NotLocal<elem_iterator_imp> p(this->processor_id());
00140   return element_iterator(_elements.begin(), _elements.end(), p);
00141 }
00142 
00143 
00144 
00145 // active local elements begin() accessor
00146 SerialMesh::element_iterator
00147 SerialMesh::active_local_elements_begin ()
00148 {
00149   Predicates::ActiveLocal<elem_iterator_imp> p(this->processor_id());
00150   return element_iterator(_elements.begin(), _elements.end(), p);
00151 }
00152 
00153 
00154 
00155 // active_not_local elements begin() accessor
00156 SerialMesh::element_iterator
00157 SerialMesh::active_not_local_elements_begin ()
00158 {
00159   Predicates::ActiveNotLocal<elem_iterator_imp> p(this->processor_id());
00160   return element_iterator(_elements.begin(), _elements.end(), p);
00161 }
00162 
00163 
00164 
00165 // level elements begin() accessor
00166 SerialMesh::element_iterator
00167 SerialMesh::level_elements_begin (const unsigned int level)
00168 {
00169   Predicates::Level<elem_iterator_imp> p(level);
00170   return element_iterator(_elements.begin(), _elements.end(), p);
00171 }
00172 
00173 
00174 
00175 // not level elements begin() accessor
00176 SerialMesh::element_iterator
00177 SerialMesh::not_level_elements_begin (const unsigned int level)
00178 {
00179   Predicates::NotLevel<elem_iterator_imp> p(level);
00180   return element_iterator(_elements.begin(), _elements.end(), p);
00181 }
00182 
00183 
00184 
00185 // local level elements begin() accessor
00186 SerialMesh::element_iterator
00187 SerialMesh::local_level_elements_begin (const unsigned int level)
00188 {
00189   Predicates::LocalLevel<elem_iterator_imp> p(this->processor_id(),level);
00190   return element_iterator(_elements.begin(), _elements.end(), p);
00191 }
00192 
00193 
00194 
00195 // local not level elements begin() accessor
00196 SerialMesh::element_iterator
00197 SerialMesh::local_not_level_elements_begin (const unsigned int level)
00198 {
00199   Predicates::LocalNotLevel<elem_iterator_imp> p(this->processor_id(),level);
00200   return element_iterator(_elements.begin(), _elements.end(), p);
00201 }
00202 
00203 
00204 
00205 // pid elements begin() accessor
00206 SerialMesh::element_iterator
00207 SerialMesh::pid_elements_begin (const processor_id_type proc_id)
00208 {
00209   Predicates::PID<elem_iterator_imp> p(proc_id);
00210   return element_iterator(_elements.begin(), _elements.end(), p);
00211 }
00212 
00213 
00214 
00215 // type elements begin() accessor
00216 SerialMesh::element_iterator
00217 SerialMesh::type_elements_begin (const ElemType type)
00218 {
00219   Predicates::Type<elem_iterator_imp> p(type);
00220   return element_iterator(_elements.begin(), _elements.end(), p);
00221 }
00222 
00223 
00224 
00225 // active type elements begin() accessor
00226 SerialMesh::element_iterator
00227 SerialMesh::active_type_elements_begin (const ElemType type)
00228 {
00229   Predicates::ActiveType<elem_iterator_imp> p(type);
00230   return element_iterator(_elements.begin(), _elements.end(), p);
00231 }
00232 
00233 
00234 
00235 // active pid elements begin() accessor
00236 SerialMesh::element_iterator
00237 SerialMesh::active_pid_elements_begin (const processor_id_type proc_id)
00238 {
00239   Predicates::ActivePID<elem_iterator_imp> p(proc_id);
00240   return element_iterator(_elements.begin(), _elements.end(), p);
00241 }
00242 
00243 
00244 
00245 // unpartitioned elements begin() accessor
00246 SerialMesh::element_iterator
00247 SerialMesh::unpartitioned_elements_begin ()
00248 {
00249   return this->pid_elements_begin(DofObject::invalid_processor_id);
00250 }
00251 
00252 
00253 
00254 // subdomain elements begin() accessor
00255 SerialMesh::element_iterator
00256 SerialMesh::active_local_subdomain_elements_begin (const subdomain_id_type subdomain_id)
00257 {
00258   Predicates::ActiveLocalSubdomain<elem_iterator_imp> p(this->processor_id(),subdomain_id);
00259   return element_iterator(_elements.begin(), _elements.end(), p);
00260 }
00261 
00262 
00263 
00264 // subdomain elements begin() accessor
00265 SerialMesh::element_iterator
00266 SerialMesh::active_subdomain_elements_begin (const subdomain_id_type subdomain_id)
00267 {
00268   Predicates::ActiveSubdomain<elem_iterator_imp> p(subdomain_id);
00269   return element_iterator(_elements.begin(), _elements.end(), p);
00270 }
00271 
00272 
00273 
00274 
00275 
00276 
00277 
00278 // default const begin() accessor
00279 SerialMesh::const_element_iterator
00280 SerialMesh::elements_begin () const
00281 {
00282   Predicates::NotNull<const_elem_iterator_imp> p;
00283   return const_element_iterator(_elements.begin(), _elements.end(), p);
00284 }
00285 
00286 
00287 
00288 // const active begin() accessor
00289 SerialMesh::const_element_iterator
00290 SerialMesh::active_elements_begin () const
00291 {
00292   Predicates::Active<const_elem_iterator_imp> p;
00293   return const_element_iterator(_elements.begin(), _elements.end(), p);
00294 }
00295 
00296 
00297 
00298 // const not active begin() accessor
00299 SerialMesh::const_element_iterator
00300 SerialMesh::not_active_elements_begin () const
00301 {
00302   Predicates::NotActive<const_elem_iterator_imp> p;
00303   return const_element_iterator(_elements.begin(), _elements.end(), p);
00304 }
00305 
00306 
00307 
00308 // const ancestor begin() accessor
00309 SerialMesh::const_element_iterator
00310 SerialMesh::ancestor_elements_begin () const
00311 {
00312   Predicates::Ancestor<const_elem_iterator_imp> p;
00313   return const_element_iterator(_elements.begin(), _elements.end(), p);
00314 }
00315 
00316 
00317 
00318 // const not ancestor begin() accessor
00319 SerialMesh::const_element_iterator
00320 SerialMesh::not_ancestor_elements_begin () const
00321 {
00322   Predicates::Ancestor<const_elem_iterator_imp> p;
00323   return const_element_iterator(_elements.begin(), _elements.end(), p);
00324 }
00325 
00326 
00327 
00328 // const subactive begin() accessor
00329 SerialMesh::const_element_iterator
00330 SerialMesh::subactive_elements_begin () const
00331 {
00332   Predicates::SubActive<const_elem_iterator_imp> p;
00333   return const_element_iterator(_elements.begin(), _elements.end(), p);
00334 }
00335 
00336 
00337 
00338 // const not subactive begin() accessor
00339 SerialMesh::const_element_iterator
00340 SerialMesh::not_subactive_elements_begin () const
00341 {
00342   Predicates::NotSubActive<const_elem_iterator_imp> p;
00343   return const_element_iterator(_elements.begin(), _elements.end(), p);
00344 }
00345 
00346 
00347 
00348 // const local begin() accessor
00349 SerialMesh::const_element_iterator
00350 SerialMesh::local_elements_begin () const
00351 {
00352   Predicates::Local<const_elem_iterator_imp> p(this->processor_id());
00353   return const_element_iterator(_elements.begin(), _elements.end(), p);
00354 }
00355 
00356 
00357 
00358 // const semilocal begin() accessor
00359 SerialMesh::const_element_iterator
00360 SerialMesh::semilocal_elements_begin () const
00361 {
00362   Predicates::SemiLocal<const_elem_iterator_imp> p(this->processor_id());
00363   return const_element_iterator(_elements.begin(), _elements.end(), p);
00364 }
00365 
00366 
00367 
00368 // const face-local begin() accessor
00369 SerialMesh::const_element_iterator
00370 SerialMesh::facelocal_elements_begin () const
00371 {
00372   Predicates::FaceLocal<const_elem_iterator_imp> p(this->processor_id());
00373   return const_element_iterator(_elements.begin(), _elements.end(), p);
00374 }
00375 
00376 
00377 
00378 // const not_local begin() accessor
00379 SerialMesh::const_element_iterator
00380 SerialMesh::not_local_elements_begin () const
00381 {
00382   Predicates::NotLocal<const_elem_iterator_imp> p(this->processor_id());
00383   return const_element_iterator(_elements.begin(), _elements.end(), p);
00384 }
00385 
00386 
00387 
00388 // const active local begin() accessor
00389 SerialMesh::const_element_iterator
00390 SerialMesh::active_local_elements_begin () const
00391 {
00392   Predicates::ActiveLocal<const_elem_iterator_imp> p(this->processor_id());
00393   return const_element_iterator(_elements.begin(), _elements.end(), p);
00394 }
00395 
00396 
00397 
00398 // const active not_local begin() accessor
00399 SerialMesh::const_element_iterator
00400 SerialMesh::active_not_local_elements_begin () const
00401 {
00402   Predicates::ActiveNotLocal<const_elem_iterator_imp> p(this->processor_id());
00403   return const_element_iterator(_elements.begin(), _elements.end(), p);
00404 }
00405 
00406 
00407 
00408 // const level begin() accessor
00409 SerialMesh::const_element_iterator
00410 SerialMesh::level_elements_begin (const unsigned int level) const
00411 {
00412   Predicates::Level<const_elem_iterator_imp> p(level);
00413   return const_element_iterator(_elements.begin(), _elements.end(), p);
00414 }
00415 
00416 
00417 
00418 // const not level begin() accessor
00419 SerialMesh::const_element_iterator
00420 SerialMesh::not_level_elements_begin (const unsigned int level) const
00421 {
00422   Predicates::NotLevel<const_elem_iterator_imp> p(level);
00423   return const_element_iterator(_elements.begin(), _elements.end(), p);
00424 }
00425 
00426 
00427 
00428 // const local level begin() accessor
00429 SerialMesh::const_element_iterator
00430 SerialMesh::local_level_elements_begin (const unsigned int level) const
00431 {
00432   Predicates::LocalLevel<const_elem_iterator_imp> p(this->processor_id(),level);
00433   return const_element_iterator(_elements.begin(), _elements.end(), p);
00434 }
00435 
00436 
00437 
00438 // const local not level begin() accessor
00439 SerialMesh::const_element_iterator
00440 SerialMesh::local_not_level_elements_begin (const unsigned int level) const
00441 {
00442   Predicates::LocalNotLevel<const_elem_iterator_imp> p(this->processor_id(),level);
00443   return const_element_iterator(_elements.begin(), _elements.end(), p);
00444 }
00445 
00446 
00447 
00448 // const pid begin() accessor
00449 SerialMesh::const_element_iterator
00450 SerialMesh::pid_elements_begin (const processor_id_type proc_id) const
00451 {
00452   Predicates::PID<const_elem_iterator_imp> p(proc_id);
00453   return const_element_iterator(_elements.begin(), _elements.end(), p);
00454 }
00455 
00456 
00457 
00458 // const type begin() accessor
00459 SerialMesh::const_element_iterator
00460 SerialMesh::type_elements_begin (const ElemType type) const
00461 {
00462   Predicates::Type<const_elem_iterator_imp> p(type);
00463   return const_element_iterator(_elements.begin(), _elements.end(), p);
00464 }
00465 
00466 
00467 
00468 // const active type begin() accessor
00469 SerialMesh::const_element_iterator
00470 SerialMesh::active_type_elements_begin (const ElemType type) const
00471 {
00472   Predicates::ActiveType<const_elem_iterator_imp> p(type);
00473   return const_element_iterator(_elements.begin(), _elements.end(), p);
00474 }
00475 
00476 
00477 
00478 // const active pid elements begin() accessor
00479 SerialMesh::const_element_iterator
00480 SerialMesh::active_pid_elements_begin (const processor_id_type proc_id) const
00481 {
00482   Predicates::ActivePID<const_elem_iterator_imp> p(proc_id);
00483   return const_element_iterator(_elements.begin(), _elements.end(), p);
00484 }
00485 
00486 
00487 
00488 // const unpartitioned elements begin() accessor
00489 SerialMesh::const_element_iterator
00490 SerialMesh::unpartitioned_elements_begin () const
00491 {
00492   return this->pid_elements_begin(DofObject::invalid_processor_id);
00493 }
00494 
00495 
00496 
00497 // subdomain elements begin() accessor
00498 SerialMesh::const_element_iterator
00499 SerialMesh::active_local_subdomain_elements_begin (const subdomain_id_type subdomain_id) const
00500 {
00501   Predicates::ActiveLocalSubdomain<const_elem_iterator_imp> p(this->processor_id(),subdomain_id);
00502   return const_element_iterator(_elements.begin(), _elements.end(), p);
00503 }
00504 
00505 
00506 
00507 // subdomain elements begin() accessor
00508 SerialMesh::const_element_iterator
00509 SerialMesh::active_subdomain_elements_begin (const subdomain_id_type subdomain_id) const
00510 {
00511   Predicates::ActiveSubdomain<const_elem_iterator_imp> p(subdomain_id);
00512   return const_element_iterator(_elements.begin(), _elements.end(), p);
00513 }
00514 
00515 
00516 
00517 
00518 
00519 
00520 
00521 // default end() accessor
00522 SerialMesh::element_iterator
00523 SerialMesh::elements_end ()
00524 {
00525   Predicates::NotNull<elem_iterator_imp> p;
00526   return element_iterator(_elements.end(), _elements.end(), p);
00527 }
00528 
00529 
00530 
00531 // active end() accessor
00532 SerialMesh::element_iterator
00533 SerialMesh::active_elements_end ()
00534 {
00535   Predicates::Active<elem_iterator_imp> p;
00536   return element_iterator(_elements.end(), _elements.end(), p);
00537 }
00538 
00539 
00540 
00541 // active end() accessor
00542 SerialMesh::element_iterator
00543 SerialMesh::not_active_elements_end ()
00544 {
00545   Predicates::NotActive<elem_iterator_imp> p;
00546   return element_iterator(_elements.end(), _elements.end(), p);
00547 }
00548 
00549 
00550 
00551 // ancestor end() accessor
00552 SerialMesh::element_iterator
00553 SerialMesh::ancestor_elements_end ()
00554 {
00555   Predicates::Ancestor<elem_iterator_imp> p;
00556   return element_iterator(_elements.end(), _elements.end(), p);
00557 }
00558 
00559 
00560 
00561 // ancestor end() accessor
00562 SerialMesh::element_iterator
00563 SerialMesh::not_ancestor_elements_end ()
00564 {
00565   Predicates::Ancestor<elem_iterator_imp> p;
00566   return element_iterator(_elements.end(), _elements.end(), p);
00567 }
00568 
00569 
00570 
00571 // subactive end() accessor
00572 SerialMesh::element_iterator
00573 SerialMesh::subactive_elements_end ()
00574 {
00575   Predicates::SubActive<elem_iterator_imp> p;
00576   return element_iterator(_elements.end(), _elements.end(), p);
00577 }
00578 
00579 
00580 
00581 // subactive end() accessor
00582 SerialMesh::element_iterator
00583 SerialMesh::not_subactive_elements_end ()
00584 {
00585   Predicates::NotSubActive<elem_iterator_imp> p;
00586   return element_iterator(_elements.end(), _elements.end(), p);
00587 }
00588 
00589 
00590 
00591 // local end() accessor
00592 SerialMesh::element_iterator
00593 SerialMesh::local_elements_end ()
00594 {
00595   Predicates::Local<elem_iterator_imp> p(this->processor_id());
00596   return element_iterator(_elements.end(), _elements.end(), p);
00597 }
00598 
00599 
00600 
00601 // semilocal end() accessor
00602 SerialMesh::element_iterator
00603 SerialMesh::semilocal_elements_end ()
00604 {
00605   Predicates::SemiLocal<elem_iterator_imp> p(this->processor_id());
00606   return element_iterator(_elements.end(), _elements.end(), p);
00607 }
00608 
00609 
00610 
00611 // face-local end() accessor
00612 SerialMesh::element_iterator
00613 SerialMesh::facelocal_elements_end ()
00614 {
00615   Predicates::FaceLocal<elem_iterator_imp> p(this->processor_id());
00616   return element_iterator(_elements.end(), _elements.end(), p);
00617 }
00618 
00619 
00620 
00621 // not_local end() accessor
00622 SerialMesh::element_iterator
00623 SerialMesh::not_local_elements_end ()
00624 {
00625   Predicates::NotLocal<elem_iterator_imp> p(this->processor_id());
00626   return element_iterator(_elements.end(), _elements.end(), p);
00627 }
00628 
00629 
00630 
00631 // active local end() accessor
00632 SerialMesh::element_iterator
00633 SerialMesh::active_local_elements_end ()
00634 {
00635   Predicates::ActiveLocal<elem_iterator_imp> p(this->processor_id());
00636   return element_iterator(_elements.end(), _elements.end(), p);
00637 }
00638 
00639 
00640 
00641 // not_local end() accessor
00642 SerialMesh::element_iterator
00643 SerialMesh::active_not_local_elements_end ()
00644 {
00645   Predicates::ActiveNotLocal<elem_iterator_imp> p(this->processor_id());
00646   return element_iterator(_elements.end(), _elements.end(), p);
00647 }
00648 
00649 
00650 
00651 // level end() accessor
00652 SerialMesh::element_iterator
00653 SerialMesh::level_elements_end (const unsigned int level)
00654 {
00655   Predicates::Level<elem_iterator_imp> p(level);
00656   return element_iterator(_elements.end(), _elements.end(), p);
00657 }
00658 
00659 
00660 
00661 // not level end() accessor
00662 SerialMesh::element_iterator
00663 SerialMesh::not_level_elements_end (const unsigned int level)
00664 {
00665   Predicates::NotLevel<elem_iterator_imp> p(level);
00666   return element_iterator(_elements.end(), _elements.end(), p);
00667 }
00668 
00669 
00670 
00671 // local level end() accessor
00672 SerialMesh::element_iterator
00673 SerialMesh::local_level_elements_end (const unsigned int level)
00674 {
00675   Predicates::LocalLevel<elem_iterator_imp> p(this->processor_id(),level);
00676   return element_iterator(_elements.end(), _elements.end(), p);
00677 }
00678 
00679 
00680 
00681 // local not level end() accessor
00682 SerialMesh::element_iterator
00683 SerialMesh::local_not_level_elements_end (const unsigned int level)
00684 {
00685   Predicates::LocalNotLevel<elem_iterator_imp> p(this->processor_id(),level);
00686   return element_iterator(_elements.end(), _elements.end(), p);
00687 }
00688 
00689 
00690 
00691 // pid end() accessor
00692 SerialMesh::element_iterator
00693 SerialMesh::pid_elements_end (const processor_id_type proc_id)
00694 {
00695   Predicates::PID<elem_iterator_imp> p(proc_id);
00696   return element_iterator(_elements.end(), _elements.end(), p);
00697 }
00698 
00699 
00700 
00701 // type end() accessor
00702 SerialMesh::element_iterator
00703 SerialMesh::type_elements_end (const ElemType type)
00704 {
00705   Predicates::Type<elem_iterator_imp> p(type);
00706   return element_iterator(_elements.end(), _elements.end(), p);
00707 }
00708 
00709 
00710 
00711 // active type end() accessor
00712 SerialMesh::element_iterator
00713 SerialMesh::active_type_elements_end (const ElemType type)
00714 {
00715   Predicates::ActiveType<elem_iterator_imp> p(type);
00716   return element_iterator(_elements.end(), _elements.end(), p);
00717 }
00718 
00719 
00720 
00721 // active PID end() accessor
00722 SerialMesh::element_iterator
00723 SerialMesh::active_pid_elements_end (const processor_id_type proc_id)
00724 {
00725   Predicates::ActivePID<elem_iterator_imp> p(proc_id);
00726   return element_iterator(_elements.end(), _elements.end(), p);
00727 }
00728 
00729 
00730 
00731 // unpartitioned elements end() accessor
00732 SerialMesh::element_iterator
00733 SerialMesh::unpartitioned_elements_end ()
00734 {
00735   return this->pid_elements_end(DofObject::invalid_processor_id);
00736 }
00737 
00738 
00739 
00740 // subdomain elements end() accessor
00741 SerialMesh::element_iterator
00742 SerialMesh::active_local_subdomain_elements_end (const subdomain_id_type subdomain_id)
00743 {
00744   Predicates::ActiveLocalSubdomain<elem_iterator_imp> p(this->processor_id(),subdomain_id);
00745   return element_iterator(_elements.end(), _elements.end(), p);
00746 }
00747 
00748 
00749 
00750 // subdomain elements end() accessor
00751 SerialMesh::element_iterator
00752 SerialMesh::active_subdomain_elements_end (const subdomain_id_type subdomain_id)
00753 {
00754   Predicates::ActiveSubdomain<elem_iterator_imp> p(subdomain_id);
00755   return element_iterator(_elements.end(), _elements.end(), p);
00756 }
00757 
00758 
00759 
00760 
00761 
00762 
00763 
00764 
00765 
00766 
00767 
00768 // default const end() accessor
00769 SerialMesh::const_element_iterator
00770 SerialMesh::elements_end () const
00771 {
00772   Predicates::NotNull<const_elem_iterator_imp> p;
00773   return const_element_iterator(_elements.end(), _elements.end(), p);
00774 }
00775 
00776 
00777 
00778 // active const end() accessor
00779 SerialMesh::const_element_iterator
00780 SerialMesh::active_elements_end () const
00781 {
00782   Predicates::Active<const_elem_iterator_imp> p;
00783   return const_element_iterator(_elements.end(), _elements.end(), p);
00784 }
00785 
00786 
00787 
00788 // not active const end() accessor
00789 SerialMesh::const_element_iterator
00790 SerialMesh::not_active_elements_end () const
00791 {
00792   Predicates::NotActive<const_elem_iterator_imp> p;
00793   return const_element_iterator(_elements.end(), _elements.end(), p);
00794 }
00795 
00796 
00797 
00798 // ancestor const end() accessor
00799 SerialMesh::const_element_iterator
00800 SerialMesh::ancestor_elements_end () const
00801 {
00802   Predicates::Ancestor<const_elem_iterator_imp> p;
00803   return const_element_iterator(_elements.end(), _elements.end(), p);
00804 }
00805 
00806 
00807 
00808 // not ancestor const end() accessor
00809 SerialMesh::const_element_iterator
00810 SerialMesh::not_ancestor_elements_end () const
00811 {
00812   Predicates::Ancestor<const_elem_iterator_imp> p;
00813   return const_element_iterator(_elements.end(), _elements.end(), p);
00814 }
00815 
00816 
00817 
00818 // subactive const end() accessor
00819 SerialMesh::const_element_iterator
00820 SerialMesh::subactive_elements_end () const
00821 {
00822   Predicates::SubActive<const_elem_iterator_imp> p;
00823   return const_element_iterator(_elements.end(), _elements.end(), p);
00824 }
00825 
00826 
00827 
00828 // not subactive const end() accessor
00829 SerialMesh::const_element_iterator
00830 SerialMesh::not_subactive_elements_end () const
00831 {
00832   Predicates::NotSubActive<const_elem_iterator_imp> p;
00833   return const_element_iterator(_elements.end(), _elements.end(), p);
00834 }
00835 
00836 
00837 
00838 // local const end() accessor
00839 SerialMesh::const_element_iterator
00840 SerialMesh::local_elements_end () const
00841 {
00842   Predicates::Local<const_elem_iterator_imp> p(this->processor_id());
00843   return const_element_iterator(_elements.end(), _elements.end(), p);
00844 }
00845 
00846 
00847 
00848 // semilocal const end() accessor
00849 SerialMesh::const_element_iterator
00850 SerialMesh::semilocal_elements_end () const
00851 {
00852   Predicates::SemiLocal<const_elem_iterator_imp> p(this->processor_id());
00853   return const_element_iterator(_elements.end(), _elements.end(), p);
00854 }
00855 
00856 
00857 
00858 // face-local const end() accessor
00859 SerialMesh::const_element_iterator
00860 SerialMesh::facelocal_elements_end () const
00861 {
00862   Predicates::FaceLocal<const_elem_iterator_imp> p(this->processor_id());
00863   return const_element_iterator(_elements.end(), _elements.end(), p);
00864 }
00865 
00866 
00867 
00868 // not_local const end() accessor
00869 SerialMesh::const_element_iterator
00870 SerialMesh::not_local_elements_end () const
00871 {
00872   Predicates::NotLocal<const_elem_iterator_imp> p(this->processor_id());
00873   return const_element_iterator(_elements.end(), _elements.end(), p);
00874 }
00875 
00876 
00877 
00878 // local active const end() accessor
00879 SerialMesh::const_element_iterator
00880 SerialMesh::active_local_elements_end () const
00881 {
00882   Predicates::ActiveLocal<const_elem_iterator_imp> p(this->processor_id());
00883   return const_element_iterator(_elements.end(), _elements.end(), p);
00884 }
00885 
00886 
00887 
00888 // const local active const end() accessor
00889 SerialMesh::const_element_iterator
00890 SerialMesh::active_not_local_elements_end () const
00891 {
00892   Predicates::ActiveNotLocal<const_elem_iterator_imp> p(this->processor_id());
00893   return const_element_iterator(_elements.end(), _elements.end(), p);
00894 }
00895 
00896 
00897 
00898 // level const end() accessor
00899 SerialMesh::const_element_iterator
00900 SerialMesh::level_elements_end (const unsigned int level) const
00901 {
00902   Predicates::Level<const_elem_iterator_imp> p(level);
00903   return const_element_iterator(_elements.end(), _elements.end(), p);
00904 }
00905 
00906 
00907 
00908 // not level const end() accessor
00909 SerialMesh::const_element_iterator
00910 SerialMesh::not_level_elements_end (const unsigned int level) const
00911 {
00912   Predicates::NotLevel<const_elem_iterator_imp> p(level);
00913   return const_element_iterator(_elements.end(), _elements.end(), p);
00914 }
00915 
00916 
00917 
00918 // local level const end() accessor
00919 SerialMesh::const_element_iterator
00920 SerialMesh::local_level_elements_end (const unsigned int level) const
00921 {
00922   Predicates::LocalLevel<const_elem_iterator_imp> p(this->processor_id(),level);
00923   return const_element_iterator(_elements.end(), _elements.end(), p);
00924 }
00925 
00926 
00927 
00928 // local not level const end() accessor
00929 SerialMesh::const_element_iterator
00930 SerialMesh::local_not_level_elements_end (const unsigned int level) const
00931 {
00932   Predicates::LocalNotLevel<const_elem_iterator_imp> p(this->processor_id(),level);
00933   return const_element_iterator(_elements.end(), _elements.end(), p);
00934 }
00935 
00936 
00937 
00938 // pid const end() accessor
00939 SerialMesh::const_element_iterator
00940 SerialMesh::pid_elements_end (const processor_id_type proc_id) const
00941 {
00942   Predicates::PID<const_elem_iterator_imp> p(proc_id);
00943   return const_element_iterator(_elements.end(), _elements.end(), p);
00944 }
00945 
00946 
00947 
00948 // type const end() accessor
00949 SerialMesh::const_element_iterator
00950 SerialMesh::type_elements_end (const ElemType type) const
00951 {
00952   Predicates::Type<const_elem_iterator_imp> p(type);
00953   return const_element_iterator(_elements.end(), _elements.end(), p);
00954 }
00955 
00956 
00957 
00958 // active type const end() accessor
00959 SerialMesh::const_element_iterator
00960 SerialMesh::active_type_elements_end (const ElemType type) const
00961 {
00962   Predicates::ActiveType<const_elem_iterator_imp> p(type);
00963   return const_element_iterator(_elements.end(), _elements.end(), p);
00964 }
00965 
00966 
00967 
00968 // active PID end() accessor
00969 SerialMesh::const_element_iterator
00970 SerialMesh::active_pid_elements_end (const processor_id_type proc_id) const
00971 {
00972   Predicates::ActivePID<const_elem_iterator_imp> p(proc_id);
00973   return const_element_iterator(_elements.end(), _elements.end(), p);
00974 }
00975 
00976 
00977 
00978 // unpartitioned elements end() accessor
00979 SerialMesh::const_element_iterator
00980 SerialMesh::unpartitioned_elements_end () const
00981 {
00982   return this->pid_elements_end(DofObject::invalid_processor_id);
00983 }
00984 
00985 
00986 
00987 // subdomain elements end() accessor
00988 SerialMesh::const_element_iterator
00989 SerialMesh::active_local_subdomain_elements_end (const subdomain_id_type subdomain_id) const
00990 {
00991   Predicates::ActiveLocalSubdomain<const_elem_iterator_imp> p(this->processor_id(),subdomain_id);
00992   return const_element_iterator(_elements.end(), _elements.end(), p);
00993 }
00994 
00995 
00996 
00997 // subdomain elements end() accessor
00998 SerialMesh::const_element_iterator
00999 SerialMesh::active_subdomain_elements_end (const subdomain_id_type subdomain_id) const
01000 {
01001   Predicates::ActiveSubdomain<const_elem_iterator_imp> p(subdomain_id);
01002   return const_element_iterator(_elements.end(), _elements.end(), p);
01003 }
01004 
01005 
01006 
01007 
01008 
01009 
01010 // default nodes begin() accessor
01011 SerialMesh::node_iterator
01012 SerialMesh::nodes_begin ()
01013 {
01014   Predicates::NotNull<node_iterator_imp> p;
01015   return node_iterator(_nodes.begin(), _nodes.end(), p);
01016 }
01017 
01018 
01019 
01020 // active nodes begin() accessor
01021 SerialMesh::node_iterator
01022 SerialMesh::active_nodes_begin ()
01023 {
01024   Predicates::Active<node_iterator_imp> p;
01025   return node_iterator(_nodes.begin(), _nodes.end(), p);
01026 }
01027 
01028 
01029 
01030 // local nodes begin() accessor
01031 SerialMesh::node_iterator
01032 SerialMesh::local_nodes_begin ()
01033 {
01034   Predicates::Local<node_iterator_imp> p(this->processor_id());
01035   return node_iterator(_nodes.begin(), _nodes.end(), p);
01036 }
01037 
01038 
01039 
01040 // pid nodes begin() accessor
01041 SerialMesh::node_iterator
01042 SerialMesh::pid_nodes_begin (const processor_id_type proc_id)
01043 {
01044   Predicates::PID<node_iterator_imp> p(proc_id);
01045   return node_iterator(_nodes.begin(), _nodes.end(), p);
01046 }
01047 
01048 
01049 
01050 // default const nodes begin() accessor
01051 SerialMesh::const_node_iterator
01052 SerialMesh::nodes_begin () const
01053 {
01054   Predicates::NotNull<const_node_iterator_imp> p;
01055   return const_node_iterator(_nodes.begin(), _nodes.end(), p);
01056 }
01057 
01058 
01059 
01060 // active const nodes begin() accessor
01061 SerialMesh::const_node_iterator
01062 SerialMesh::active_nodes_begin () const
01063 {
01064   Predicates::Active<const_node_iterator_imp> p;
01065   return const_node_iterator(_nodes.begin(), _nodes.end(), p);
01066 }
01067 
01068 
01069 
01070 // local const nodes begin() accessor
01071 SerialMesh::const_node_iterator
01072 SerialMesh::local_nodes_begin () const
01073 {
01074   Predicates::Local<const_node_iterator_imp> p(this->processor_id());
01075   return const_node_iterator(_nodes.begin(), _nodes.end(), p);
01076 }
01077 
01078 
01079 
01080 // pid const nodes begin() accessor
01081 SerialMesh::const_node_iterator
01082 SerialMesh::pid_nodes_begin (const processor_id_type proc_id) const
01083 {
01084   Predicates::PID<const_node_iterator_imp> p(proc_id);
01085   return const_node_iterator(_nodes.begin(), _nodes.end(), p);
01086 }
01087 
01088 
01089 
01090 // default nodes end() accessor
01091 SerialMesh::node_iterator
01092 SerialMesh::nodes_end ()
01093 {
01094   Predicates::NotNull<node_iterator_imp> p;
01095   return node_iterator(_nodes.end(), _nodes.end(), p);
01096 }
01097 
01098 
01099 
01100 // active nodes end() accessor
01101 SerialMesh::node_iterator
01102 SerialMesh::active_nodes_end ()
01103 {
01104   Predicates::Active<node_iterator_imp> p;
01105   return node_iterator(_nodes.end(), _nodes.end(), p);
01106 }
01107 
01108 
01109 
01110 // local nodes end() accessor
01111 SerialMesh::node_iterator
01112 SerialMesh::local_nodes_end ()
01113 {
01114   Predicates::Local<node_iterator_imp> p(this->processor_id());
01115   return node_iterator(_nodes.end(), _nodes.end(), p);
01116 }
01117 
01118 
01119 
01120 // pid nodes end() accessor
01121 SerialMesh::node_iterator
01122 SerialMesh::pid_nodes_end (const processor_id_type proc_id)
01123 {
01124   Predicates::PID<node_iterator_imp> p(proc_id);
01125   return node_iterator(_nodes.end(), _nodes.end(), p);
01126 }
01127 
01128 
01129 
01130 // default const nodes end() accessor
01131 SerialMesh::const_node_iterator
01132 SerialMesh::nodes_end () const
01133 {
01134   Predicates::NotNull<const_node_iterator_imp> p;
01135   return const_node_iterator(_nodes.end(), _nodes.end(), p);
01136 }
01137 
01138 
01139 
01140 // const active nodes end() accessor
01141 SerialMesh::const_node_iterator
01142 SerialMesh::active_nodes_end () const
01143 {
01144   Predicates::Active<const_node_iterator_imp> p;
01145   return const_node_iterator(_nodes.end(), _nodes.end(), p);
01146 }
01147 
01148 
01149 
01150 // local const nodes end() accessor
01151 SerialMesh::const_node_iterator
01152 SerialMesh::local_nodes_end () const
01153 {
01154   Predicates::Local<const_node_iterator_imp> p(this->processor_id());
01155   return const_node_iterator(_nodes.end(), _nodes.end(), p);
01156 }
01157 
01158 
01159 
01160 // pid const nodes end() accessor
01161 SerialMesh::const_node_iterator
01162 SerialMesh::pid_nodes_end (const processor_id_type proc_id) const
01163 {
01164   Predicates::PID<const_node_iterator_imp> p(proc_id);
01165   return const_node_iterator(_nodes.end(), _nodes.end(), p);
01166 }
01167 
01168 } // namespace libMesh