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