$extrastylesheet
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