$treeview $search $mathjax
Palabos  Version 1.1
$projectbrief
$projectbrief
$searchbox

multiBlockGenerator3D.h

Go to the documentation of this file.
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