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