$treeview $search $mathjax
|
Palabos
Version 1.1
$projectbrief
|
$projectbrief
|
$searchbox |
00001 /* This file is part of the Palabos library. 00002 * 00003 * Copyright (C) 2011 FlowKit Sarl 00004 * Avenue de Chailly 23 00005 * 1012 Lausanne, Switzerland 00006 * E-mail contact: contact@flowkit.com 00007 * 00008 * The most recent release of Palabos can be downloaded at 00009 * <http://www.palabos.org/> 00010 * 00011 * The library Palabos is free software: you can redistribute it and/or 00012 * modify it under the terms of the GNU Affero General Public License as 00013 * published by the Free Software Foundation, either version 3 of the 00014 * License, or (at your option) any later version. 00015 * 00016 * The library is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Affero General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Affero General Public License 00022 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00023 */ 00024 00029 #ifndef MULTI_BLOCK_MANAGEMENT_3D_H 00030 #define MULTI_BLOCK_MANAGEMENT_3D_H 00031 00032 #include "core/globalDefs.h" 00033 #include "core/geometry3D.h" 00034 #include "multiBlock/threadAttribution.h" 00035 #include "multiBlock/sparseBlockStructure3D.h" 00036 #include "multiBlock/localMultiBlockInfo3D.h" 00037 #include "multiGrid/multiScale.h" 00038 #include <vector> 00039 00040 00041 namespace plb { 00042 00043 class MultiBlockManagement3D { 00044 public: 00045 MultiBlockManagement3D( SparseBlockStructure3D const& sparseBlock_, 00046 ThreadAttribution* threadAttribution_, 00047 plint envelopeWidth_, 00048 plint refinementLevel_ =0 ); 00049 MultiBlockManagement3D(MultiBlockManagement3D const& rhs); 00050 MultiBlockManagement3D& operator=(MultiBlockManagement3D const& rhs); 00051 void swap(MultiBlockManagement3D& rhs); 00052 ~MultiBlockManagement3D(); 00053 plint getEnvelopeWidth() const; 00054 Box3D getBoundingBox() const; 00055 Box3D getBulk(plint blockId) const; 00056 Box3D getUniqueBulk(plint blockId) const; 00057 Box3D getEnvelope(plint blockId) const; 00058 SparseBlockStructure3D const& getSparseBlockStructure() const; 00059 LocalMultiBlockInfo3D const& getLocalInfo() const; 00060 ThreadAttribution const& getThreadAttribution() const; 00061 void setCoProcessors(std::map<plint,int> const& coProcessors); 00062 bool findInLocalBulk ( 00063 plint iX, plint iY, plint iZ, plint& foundId, 00064 plint& localX, plint& localY, plint& localZ ) const; 00065 bool findAllLocalRepresentations ( 00066 plint iX, plint iY, plint iZ, std::vector<plint>& foundId, 00067 std::vector<plint>& foundX, std::vector<plint>& foundY, 00068 std::vector<plint>& foundZ ) const; 00069 plint getRefinementLevel() const; 00070 void setRefinementLevel(plint newLevel); 00071 private: 00072 plint envelopeWidth; 00073 SparseBlockStructure3D sparseBlock; 00074 ThreadAttribution* threadAttribution; 00075 LocalMultiBlockInfo3D localInfo; 00076 plint refinementLevel; 00077 }; 00078 00079 MultiBlockManagement3D scale(MultiBlockManagement3D const& originalManagement, plint relativeLevel); 00080 00082 00086 MultiBlockManagement3D intersect ( 00087 MultiBlockManagement3D const& originalManagement, 00088 Box3D subDomain, bool crop ); 00089 00091 MultiBlockManagement3D intersect ( 00092 MultiBlockManagement3D const& originalManagement, 00093 Box3D subDomain, Box3D newBoundingBox ); 00094 00096 00100 MultiBlockManagement3D intersect( MultiBlockManagement3D const& management1, 00101 MultiBlockManagement3D const& management2, bool crop ); 00102 00104 00106 MultiBlockManagement3D extend( MultiBlockManagement3D const& management, 00107 Box3D addedBulk, Box3D addedUniqueBulk ); 00108 00110 MultiBlockManagement3D except( MultiBlockManagement3D const& management, 00111 Box3D exceptedBlock ); 00112 00114 00117 MultiBlockManagement3D block_union( MultiBlockManagement3D const& management1, 00118 MultiBlockManagement3D const& management2 ); 00119 00122 MultiBlockManagement3D align( MultiBlockManagement3D const& originalManagement, 00123 MultiBlockManagement3D const& partnerManagement ); 00124 00126 00129 MultiBlockManagement3D reparallelize(MultiBlockManagement3D const& management, 00130 plint blockLx, plint blockLy, plint blockLz); 00131 00132 00134 class SmartBulk3D { 00135 public: 00137 SmartBulk3D( MultiBlockManagement3D const& management, 00138 plint blockId ); 00140 SmartBulk3D( SparseBlockStructure3D const& sparseBlock_, 00141 plint envelopeWidth_, plint blockId ); 00142 SmartBulk3D( SparseBlockStructure3D const& sparseBlock_, 00143 plint envelopeWidth_, Box3D const& bulk_ ); 00145 Box3D getBulk() const; 00147 Box3D computeEnvelope() const; 00149 Box3D computeNonPeriodicEnvelope() const; 00151 Box3D toLocal(Box3D const& coord) const; 00153 plint toLocalX(plint iX) const; 00155 plint toLocalY(plint iY) const; 00157 plint toLocalZ(plint iZ) const; 00158 private: 00159 SparseBlockStructure3D const& sparseBlock; 00160 plint envelopeWidth; 00161 Box3D bulk; 00162 }; 00163 00164 } // namespace plb 00165 00166 #endif // MULTI_BLOCK_MANAGEMENT_3D_H
1.6.3
1.6.3