$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_GENERATOR_3D_H 00030 #define MULTI_BLOCK_GENERATOR_3D_H 00031 00032 #include "core/globalDefs.h" 00033 #include "multiBlock/multiDataField3D.h" 00034 #include "multiBlock/multiBlockLattice3D.h" 00035 #include "multiBlock/sparseBlockStructure3D.h" 00036 #include <memory> 00037 00038 namespace plb { 00039 00040 /* *************** 1. MultiScalarField ************************************** */ 00041 00045 template<typename T> 00046 std::auto_ptr<MultiScalarField3D<T> > generateMultiScalarField ( 00047 Box3D boundingBox, plint envelopeWidth=1 ); 00048 00054 template<typename T> 00055 std::auto_ptr<MultiScalarField3D<T> > generateMultiScalarField ( 00056 Box3D boundingBox, T iniVal, plint envelopeWidth ); 00057 00062 template<typename T> 00063 std::auto_ptr<MultiScalarField3D<T> > defaultGenerateMultiScalarField3D ( 00064 MultiBlockManagement3D const& management, plint nDim=1 ); 00065 00067 00070 template<typename T> 00071 std::auto_ptr<MultiScalarField3D<T> > clone ( 00072 MultiScalarField3D<T>& originalField, Box3D const& subDomain, bool crop=true ); 00073 00076 00080 template<typename T> 00081 std::auto_ptr<MultiScalarField3D<T> > generateMultiScalarField ( 00082 MultiBlock3D const& originalField, Box3D const& intersection, 00083 bool crop=true ); 00084 00087 00093 template<typename T> 00094 std::auto_ptr<MultiScalarField3D<T> > generateIntersectMultiScalarField ( 00095 MultiBlock3D const& originalField1, 00096 MultiBlock3D const& originalField2, bool crop=true ); 00097 00100 00107 template<typename T> 00108 std::auto_ptr<MultiScalarField3D<T> > generateIntersectMultiScalarField ( 00109 MultiBlock3D const& originalField1, 00110 MultiBlock3D const& originalField2, 00111 Box3D const& intersection, bool crop=true ); 00112 00115 00121 template<typename T> 00122 std::auto_ptr<MultiScalarField3D<T> > generateJoinMultiScalarField ( 00123 MultiBlock3D const& originalField1, 00124 MultiBlock3D const& originalField2 ); 00125 00128 template<typename T> 00129 std::auto_ptr<MultiScalarField3D<T> > extend ( 00130 MultiScalarField3D<T>& originalBlock, Box3D const& addedBlock ); 00131 00134 template<typename T> 00135 std::auto_ptr<MultiScalarField3D<T> > except ( 00136 MultiScalarField3D<T>& originalBlock, 00137 Box3D const& exceptedBlock ); 00138 00140 template<typename T> 00141 std::auto_ptr<MultiScalarField3D<T> > redistribute ( 00142 MultiScalarField3D<T> const& originalField, 00143 SparseBlockStructure3D const& newBlockStructure ); 00144 00147 00150 template<typename T> 00151 std::auto_ptr<MultiScalarField3D<T> > redistribute ( 00152 MultiScalarField3D<T> const& originalField, 00153 SparseBlockStructure3D const& newBlockStructure, 00154 Box3D const& intersection, bool crop=true ); 00155 00159 template<typename T> 00160 std::auto_ptr<MultiScalarField3D<T> > align ( 00161 MultiScalarField3D<T> const& originalBlock, 00162 MultiBlock3D const& partnerBlock ); 00163 00165 template<typename T> 00166 std::auto_ptr<MultiScalarField3D<T> > reparallelize ( 00167 MultiScalarField3D<T> const& originalBlock ); 00168 00170 00173 template<typename T> 00174 std::auto_ptr<MultiScalarField3D<T> > reparallelize ( 00175 MultiScalarField3D<T> const& originalBlock, 00176 plint blockLx, plint blockLy, plint blockLz ); 00177 00178 00179 /* *************** 2. MultiNTensorField ************************************** */ 00180 00185 template<typename T> 00186 std::auto_ptr<MultiNTensorField3D<T> > defaultGenerateMultiNTensorField3D ( 00187 MultiBlockManagement3D const& management, plint nDim=1 ); 00188 00189 00190 template<typename T> 00191 MultiNTensorField3D<T>* generateMultiNTensorField3D ( 00192 MultiBlock3D& multiBlock, plint envelopeWidth, plint ndim ); 00193 00194 template<typename T> 00195 MultiNTensorField3D<T>* generateMultiNTensorField3D(Box3D const& domain, plint ndim); 00196 00198 00201 template<typename T> 00202 MultiNTensorField3D<T>* clone ( 00203 MultiNTensorField3D<T>& originalField, Box3D const& subDomain, bool crop=true ); 00204 00205 template<typename T> 00206 MultiNTensorField3D<T>* generateMultiNTensorField3D ( 00207 MultiBlock3D& multiBlock, plint envelopeWidth, plint ndim ); 00208 00211 00215 template<typename T> 00216 MultiNTensorField3D<T>* generateMultiNTensorField ( 00217 MultiBlock3D const& originalField, Box3D const& intersection, 00218 plint nDim, bool crop=true ); 00219 00220 template<typename T1, typename T2> 00221 MultiNTensorField3D<T2>* 00222 generateNTensorFieldFromNTensor3D ( 00223 MultiNTensorField3D<T1> const& field, 00224 Box3D const& intersection, plint nDim ); 00225 00226 template<typename T1, typename T2, template<typename U> class Descriptor> 00227 MultiNTensorField3D<T1>* 00228 generateNTensorFieldFromBlockLattice3D ( 00229 MultiBlockLattice3D<T2,Descriptor> const& lattice, 00230 Box3D const& intersection, plint nDim ); 00231 00234 00240 template<typename T> 00241 MultiNTensorField3D<T>* generateIntersectMultiNTensorField ( 00242 MultiBlock3D const& originalField1, 00243 MultiBlock3D const& originalField2, 00244 plint nDim, bool crop=true ); 00245 00248 00255 template<typename T> 00256 MultiNTensorField3D<T>* generateIntersectMultiNTensorField ( 00257 MultiBlock3D const& originalField1, 00258 MultiBlock3D const& originalField2, 00259 Box3D const& intersection, plint nDim, bool crop=true ); 00260 00263 00269 template<typename T> 00270 MultiNTensorField3D<T>* generateJoinMultiNTensorField ( 00271 MultiBlock3D const& originalField1, 00272 MultiBlock3D const& originalField2, 00273 plint nDim ); 00274 00277 template<typename T> 00278 MultiNTensorField3D<T>* extend ( 00279 MultiNTensorField3D<T>& originalBlock, Box3D const& addedBlock ); 00280 00283 template<typename T> 00284 MultiNTensorField3D<T>* except ( 00285 MultiNTensorField3D<T>& originalBlock, 00286 Box3D const& exceptedBlock ); 00287 00291 template<typename T> 00292 MultiNTensorField3D<T>* align ( 00293 MultiNTensorField3D<T> const& originalBlock, 00294 MultiBlock3D const& partnerBlock ); 00295 00297 template<typename T> 00298 MultiNTensorField3D<T>* reparallelize ( 00299 MultiNTensorField3D<T> const& originalBlock ); 00300 00301 00302 /* *************** 3. MultiTensorField ************************************** */ 00303 00307 template<typename T, int nDim> 00308 std::auto_ptr<MultiTensorField3D<T,nDim> > generateMultiTensorField ( 00309 Box3D boundingBox, plint envelopeWidth=1 ); 00310 00314 template<typename T, int nDim> 00315 std::auto_ptr<MultiTensorField3D<T,nDim> > generateMultiTensorField ( 00316 Box3D boundingBox, Array<T,nDim> const& iniVal, plint envelopeWidth=1 ); 00317 00322 template<typename T, int nDim> 00323 std::auto_ptr<MultiTensorField3D<T,nDim> > defaultGenerateMultiTensorField3D ( 00324 MultiBlockManagement3D const& management, plint nDimParam=1 ); 00325 00327 00330 template<typename T, int nDim> 00331 std::auto_ptr<MultiTensorField3D<T,nDim> > clone ( 00332 MultiTensorField3D<T,nDim>& originalField, Box3D const& subDomain, bool crop=true ); 00333 00336 00340 template<typename T, int nDim> 00341 std::auto_ptr<MultiTensorField3D<T,nDim> > generateMultiTensorField ( 00342 MultiBlock3D const& originalField, Box3D const& intersection, 00343 bool crop=true ); 00344 00347 00353 template<typename T, int nDim> 00354 std::auto_ptr<MultiTensorField3D<T,nDim> > generateIntersectMultiTensorField ( 00355 MultiBlock3D const& originalField1, 00356 MultiBlock3D const& originalField2, bool crop=true ); 00357 00360 00367 template<typename T, int nDim> 00368 std::auto_ptr<MultiTensorField3D<T,nDim> > generateIntersectMultiTensorField ( 00369 MultiBlock3D const& originalField1, 00370 MultiBlock3D const& originalField2, 00371 Box3D const& intersection, bool crop=true ); 00372 00375 00381 template<typename T, int nDim> 00382 std::auto_ptr<MultiTensorField3D<T,nDim> > generateJoinMultiTensorField ( 00383 MultiBlock3D const& originalField1, 00384 MultiBlock3D const& originalField2 ); 00385 00388 template<typename T, int nDim> 00389 std::auto_ptr<MultiTensorField3D<T,nDim> > extend ( 00390 MultiTensorField3D<T,nDim>& originalBlock, Box3D const& addedBlock ); 00391 00394 template<typename T, int nDim> 00395 std::auto_ptr<MultiTensorField3D<T,nDim> > except ( 00396 MultiTensorField3D<T,nDim>& originalBlock, 00397 Box3D const& exceptedBlock ); 00398 00400 template<typename T, int nDim> 00401 std::auto_ptr<MultiTensorField3D<T,nDim> > redistribute ( 00402 MultiTensorField3D<T,nDim> const& originalField, 00403 SparseBlockStructure3D const& newBlockStructure ); 00404 00407 00410 template<typename T, int nDim> 00411 std::auto_ptr<MultiTensorField3D<T,nDim> > redistribute ( 00412 MultiTensorField3D<T,nDim> const& originalField, 00413 SparseBlockStructure3D const& newBlockStructure, 00414 Box3D const& intersection, bool crop=true ); 00415 00419 template<typename T, int nDim> 00420 std::auto_ptr<MultiTensorField3D<T,nDim> > align ( 00421 MultiTensorField3D<T,nDim> const& originalBlock, 00422 MultiBlock3D const& partnerBlock ); 00423 00425 template<typename T, int nDim> 00426 std::auto_ptr<MultiTensorField3D<T,nDim> > reparallelize ( 00427 MultiTensorField3D<T,nDim> const& originalBlock ); 00428 00430 00433 template<typename T, int nDim> 00434 std::auto_ptr<MultiTensorField3D<T,nDim> > reparallelize ( 00435 MultiTensorField3D<T,nDim> const& originalBlock, 00436 plint blockLx, plint blockLy, plint blockLz); 00437 00438 00439 /* *************** 4. MultiBlockLattice ************************************** */ 00440 00444 template<typename T, template<typename U> class Descriptor> 00445 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > generateMultiBlockLattice ( 00446 Box3D boundingBox, Dynamics<T,Descriptor>* backgroundDynamics, plint envelopeWidth=1 ); 00447 00452 template<typename T, template<typename U> class Descriptor> 00453 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > defaultGenerateMultiBlockLattice3D ( 00454 MultiBlockManagement3D const& management, plint nDim=1 ); 00455 00456 00458 00461 template<typename T, template<typename U> class Descriptor> 00462 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > clone ( 00463 MultiBlockLattice3D<T,Descriptor>& originalLattice, 00464 Box3D const& subDomain, bool crop=true ); 00465 00466 template<typename T, template<typename U> class Descriptor> 00467 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > generateMultiBlockLattice ( 00468 MultiBlock3D& multiBlock, plint envelopeWidth, 00469 Dynamics<T,Descriptor>* backgroundDynamics=new NoDynamics<T,Descriptor> ); 00470 00473 00477 template<typename T, template<typename U> class Descriptor> 00478 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > generateMultiBlockLattice ( 00479 MultiBlock3D const& originalBlock, Box3D const& intersection, 00480 bool crop=true ); 00481 00484 00490 template<typename T, template<typename U> class Descriptor> 00491 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > generateIntersectMultiBlockLattice ( 00492 MultiBlock3D const& originalBlock1, 00493 MultiBlock3D const& originalBlock2, bool crop=true ); 00494 00497 00504 template<typename T, template<typename U> class Descriptor> 00505 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > generateIntersectMultiBlockLattice ( 00506 MultiBlock3D const& originalBlock1, 00507 MultiBlock3D const& originalBlock2, 00508 Box3D const& intersection, bool crop=true ); 00509 00512 00518 template<typename T, template<typename U> class Descriptor> 00519 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > generateJoinMultiBlockLattice ( 00520 MultiBlock3D const& originalBlock1, 00521 MultiBlock3D const& originalBlock2 ); 00522 00525 template<typename T, template<typename U> class Descriptor> 00526 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > extend ( 00527 MultiBlockLattice3D<T,Descriptor>& originalBlock, Box3D const& addedBlock ); 00528 00531 template<typename T, template<typename U> class Descriptor> 00532 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > except ( 00533 MultiBlockLattice3D<T,Descriptor>& originalBlock, 00534 Box3D const& exceptedBlock ); 00535 00537 template<typename T, template<typename U> class Descriptor> 00538 std::auto_ptr<MultiBlockLattice3D<T, Descriptor> > redistribute ( 00539 MultiBlockLattice3D<T, Descriptor> const& originalBlock, 00540 SparseBlockStructure3D const& newBlockStructure ); 00541 00544 00547 template<typename T, template<typename U> class Descriptor> 00548 std::auto_ptr<MultiBlockLattice3D<T, Descriptor> > redistribute ( 00549 MultiBlockLattice3D<T, Descriptor> const& originalBlock, 00550 SparseBlockStructure3D const& newBlockStructure, 00551 Box3D const& intersection, bool crop=true ); 00552 00556 template<typename T, template<typename U> class Descriptor> 00557 std::auto_ptr<MultiBlockLattice3D<T, Descriptor> > align ( 00558 MultiBlockLattice3D<T, Descriptor> const& originalBlock, 00559 MultiBlock3D const& partnerBlock ); 00560 00562 template<typename T, template<typename U> class Descriptor> 00563 std::auto_ptr<MultiBlockLattice3D<T, Descriptor> > reparallelize ( 00564 MultiBlockLattice3D<T, Descriptor> const& originalBlock ); 00565 00567 00570 template<typename T, template<typename U> class Descriptor> 00571 std::auto_ptr<MultiBlockLattice3D<T, Descriptor> > reparallelize ( 00572 MultiBlockLattice3D<T, Descriptor> const& originalBlock, 00573 plint blockLx, plint blockLy, plint blockLz); 00574 00577 void transferDataProcessors(MultiBlock3D const& from, MultiBlock3D& to); 00578 00579 } // namespace plb 00580 00581 #endif // MULTI_BLOCK_GENERATOR_3D_H
1.6.3
1.6.3