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

multiBlockGenerator2D.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_2D_H
00030 #define MULTI_BLOCK_GENERATOR_2D_H
00031 
00032 #include "core/globalDefs.h"
00033 #include "multiBlock/multiDataField2D.h"
00034 #include "multiBlock/multiBlockLattice2D.h"
00035 #include "multiBlock/sparseBlockStructure2D.h"
00036 #include <memory>
00037 
00038 namespace plb {
00039 
00040 /* *************** 1. MultiScalarField ************************************** */
00041 
00045 template<typename T>
00046 std::auto_ptr<MultiScalarField2D<T> > generateMultiScalarField (
00047         Box2D boundingBox, plint envelopeWidth=1 );
00048 
00052 template<typename T>
00053 std::auto_ptr<MultiScalarField2D<T> > generateMultiScalarField (
00054         Box2D boundingBox, T iniVal, plint envelopeWidth=1 );
00055 
00060 template<typename T>
00061 std::auto_ptr<MultiScalarField2D<T> > defaultGenerateMultiScalarField2D (
00062         MultiBlockManagement2D const& management, plint nDim=1 );
00063 
00065 
00068 template<typename T>
00069 std::auto_ptr<MultiScalarField2D<T> > clone (
00070         MultiScalarField2D<T>& originalField, Box2D const& subDomain, bool crop=true );
00071 
00074 
00078 template<typename T>
00079 std::auto_ptr<MultiScalarField2D<T> > generateMultiScalarField (
00080         MultiBlock2D const& originalField, Box2D const& intersection,
00081         bool crop=true );
00082 
00085 
00091 template<typename T>
00092 std::auto_ptr<MultiScalarField2D<T> > generateIntersectMultiScalarField (
00093         MultiBlock2D const& originalField1,
00094         MultiBlock2D const& originalField2, bool crop=true );
00095 
00098 
00105 template<typename T>
00106 std::auto_ptr<MultiScalarField2D<T> > generateIntersectMultiScalarField (
00107         MultiBlock2D const& originalField1,
00108         MultiBlock2D const& originalField2,
00109         Box2D const& intersection, bool crop=true );
00110 
00113 
00119 template<typename T>
00120 std::auto_ptr<MultiScalarField2D<T> > generateJoinMultiScalarField (
00121         MultiBlock2D const& originalField1,
00122         MultiBlock2D const& originalField2 );
00123 
00126 template<typename T>
00127 std::auto_ptr<MultiScalarField2D<T> > extend (
00128         MultiScalarField2D<T>& originalBlock, Box2D const& addedBlock );
00129 
00132 template<typename T>
00133 std::auto_ptr<MultiScalarField2D<T> > except (
00134         MultiScalarField2D<T>& originalBlock,
00135         Box2D const& exceptedBlock );
00136 
00138 template<typename T>
00139 std::auto_ptr<MultiScalarField2D<T> > redistribute (
00140         MultiScalarField2D<T> const& originalField,
00141         SparseBlockStructure2D const& newBlockStructure );
00142 
00145 
00148 template<typename T>
00149 std::auto_ptr<MultiScalarField2D<T> > redistribute (
00150         MultiScalarField2D<T> const& originalField,
00151         SparseBlockStructure2D const& newBlockStructure,
00152         Box2D const& intersection, bool crop=true );
00153 
00157 template<typename T>
00158 std::auto_ptr<MultiScalarField2D<T> > align (
00159         MultiScalarField2D<T> const& originalBlock,
00160         MultiBlock2D const& partnerBlock );
00161 
00163 template<typename T>
00164 std::auto_ptr<MultiScalarField2D<T> > reparallelize (
00165         MultiScalarField2D<T> const& originalBlock );
00166 
00168 
00170 template<typename T>
00171 std::auto_ptr<MultiScalarField2D<T> > reparallelize (
00172         MultiScalarField2D<T> const& originalBlock,
00173         plint blockLx, plint blockLy);
00174 
00175 
00176 
00177 /* *************** 2. MultiNTensorField ************************************** */
00178 
00183 template<typename T>
00184 std::auto_ptr<MultiNTensorField2D<T> > defaultGenerateMultiNTensorField2D (
00185         MultiBlockManagement2D const& management, plint nDim=1 );
00186 
00187 template<typename T>
00188 MultiNTensorField2D<T>* generateMultiNTensorField2D(Box2D const& domain, plint ndim);
00189 
00191 
00194 template<typename T>
00195 MultiNTensorField2D<T>* clone (
00196         MultiNTensorField2D<T>& originalField, Box2D const& subDomain, bool crop=true );
00197 
00200 
00204 template<typename T>
00205 MultiNTensorField2D<T>* generateMultiNTensorField (
00206         MultiBlock2D const& originalField, Box2D const& intersection,
00207         plint nDim, bool crop=true );
00208 
00209 template<typename T1, typename T2>
00210 MultiNTensorField2D<T2>*
00211     generateNTensorFieldFromNTensor2D (
00212             MultiNTensorField2D<T1> const& field,
00213             Box2D const& intersection, plint nDim );
00214 
00215 template<typename T1, typename T2, template<typename U> class Descriptor>
00216 MultiNTensorField2D<T1>*
00217     generateNTensorFieldFromBlockLattice2D (
00218             MultiBlockLattice2D<T2,Descriptor> const& lattice,
00219             Box2D const& intersection, plint nDim );
00220 
00221 
00224 
00230 template<typename T>
00231 MultiNTensorField2D<T>* generateIntersectMultiNTensorField (
00232         MultiBlock2D const& originalField1,
00233         MultiBlock2D const& originalField2,
00234         plint nDim, bool crop=true );
00235 
00238 
00245 template<typename T>
00246 MultiNTensorField2D<T>* generateIntersectMultiNTensorField (
00247         MultiBlock2D const& originalField1,
00248         MultiBlock2D const& originalField2,
00249         Box2D const& intersection, plint nDim,  bool crop=true );
00250 
00253 
00259 template<typename T>
00260 MultiNTensorField2D<T>* generateJoinMultiNTensorField (
00261         MultiBlock2D const& originalField1,
00262         MultiBlock2D const& originalField2,
00263         plint nDim );
00264 
00267 template<typename T>
00268 MultiNTensorField2D<T>* extend (
00269         MultiNTensorField2D<T>& originalBlock, Box2D const& addedBlock );
00270 
00273 template<typename T>
00274 MultiNTensorField2D<T>* except (
00275         MultiNTensorField2D<T>& originalBlock,
00276         Box2D const& exceptedBlock );
00277 
00281 template<typename T>
00282 MultiNTensorField2D<T>* align (
00283         MultiNTensorField2D<T> const& originalBlock,
00284         MultiBlock2D const& partnerBlock );
00285 
00287 template<typename T>
00288 MultiNTensorField2D<T>* reparallelize (
00289         MultiNTensorField2D<T> const& originalBlock );
00290 
00291 
00292 
00293 /* *************** 3. MultiTensorField ************************************** */
00294 
00298 template<typename T, int nDim>
00299 std::auto_ptr<MultiTensorField2D<T,nDim> > generateMultiTensorField (
00300         Box2D boundingBox, plint envelopeWidth=1 );
00301 
00305 template<typename T, int nDim>
00306 std::auto_ptr<MultiTensorField2D<T,nDim> > generateMultiTensorField (
00307         Box2D boundingBox, Array<T,nDim> const& iniVal, plint envelopeWidth=1 );
00308 
00313 template<typename T, int nDim>
00314 std::auto_ptr<MultiTensorField2D<T,nDim> > defaultGenerateMultiTensorField2D (
00315         MultiBlockManagement2D const& management, plint nDimParam=1 );
00316 
00318 
00321 template<typename T, int nDim>
00322 std::auto_ptr<MultiTensorField2D<T,nDim> > clone (
00323         MultiTensorField2D<T,nDim>& originalField, Box2D const& subDomain, bool crop=true );
00324 
00327 
00331 template<typename T, int nDim>
00332 std::auto_ptr<MultiTensorField2D<T,nDim> > generateMultiTensorField (
00333         MultiBlock2D const& originalField, Box2D const& intersection,
00334         bool crop=true );
00335 
00338 
00344 template<typename T, int nDim>
00345 std::auto_ptr<MultiTensorField2D<T,nDim> > generateIntersectMultiTensorField (
00346         MultiBlock2D const& originalField1,
00347         MultiBlock2D const& originalField2, bool crop=true );
00348 
00351 
00358 template<typename T, int nDim>
00359 std::auto_ptr<MultiTensorField2D<T,nDim> > generateIntersectMultiTensorField (
00360         MultiBlock2D const& originalField1,
00361         MultiBlock2D const& originalField2,
00362         Box2D const& intersection, bool crop=true );
00363 
00366 
00372 template<typename T, int nDim>
00373 std::auto_ptr<MultiTensorField2D<T,nDim> > generateJoinMultiTensorField (
00374         MultiBlock2D const& originalField1,
00375         MultiBlock2D const& originalField2 );
00376 
00379 template<typename T, int nDim>
00380 std::auto_ptr<MultiTensorField2D<T,nDim> > extend (
00381         MultiTensorField2D<T,nDim>& originalBlock, Box2D const& addedBlock );
00382 
00385 template<typename T, int nDim>
00386 std::auto_ptr<MultiTensorField2D<T,nDim> > except (
00387         MultiTensorField2D<T,nDim>& originalBlock,
00388         Box2D const& exceptedBlock );
00389 
00391 template<typename T, int nDim>
00392 std::auto_ptr<MultiTensorField2D<T,nDim> > redistribute (
00393         MultiTensorField2D<T,nDim> const& originalField,
00394         SparseBlockStructure2D const& newBlockStructure );
00395 
00398 
00401 template<typename T, int nDim>
00402 std::auto_ptr<MultiTensorField2D<T,nDim> > redistribute (
00403         MultiTensorField2D<T,nDim> const& originalField,
00404         SparseBlockStructure2D const& newBlockStructure,
00405         Box2D const& intersection, bool crop=true );
00406 
00410 template<typename T, int nDim>
00411 std::auto_ptr<MultiTensorField2D<T,nDim> > align (
00412         MultiTensorField2D<T,nDim> const& originalBlock,
00413         MultiBlock2D const& partnerBlock );
00414 
00416 template<typename T, int nDim>
00417 std::auto_ptr<MultiTensorField2D<T,nDim> > reparallelize (
00418         MultiTensorField2D<T,nDim> const& originalBlock );
00419 
00421 
00423 template<typename T, int nDim>
00424 std::auto_ptr<MultiTensorField2D<T,nDim> > reparallelize (
00425         MultiTensorField2D<T,nDim> const& originalBlock,
00426         plint blockLx, plint blockLy);
00427 
00428 
00429 /* *************** 4. MultiBlockLattice ************************************** */
00430 
00434 template<typename T, template<typename U> class Descriptor>
00435 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > generateMultiBlockLattice (
00436         Box2D boundingBox, Dynamics<T,Descriptor>* backgroundDynamics, plint envelopeWidth=1 );
00437 
00442 template<typename T, template<typename U> class Descriptor>
00443 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > defaultGenerateMultiBlockLattice2D (
00444         MultiBlockManagement2D const& management, plint nDim=1 );
00445 
00447 
00450 template<typename T, template<typename U> class Descriptor>
00451 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > clone (
00452         MultiBlockLattice2D<T,Descriptor>& originalLattice,
00453         Box2D const& subDomain, bool crop=true );
00454 
00457 
00461 template<typename T, template<typename U> class Descriptor>
00462 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > generateMultiBlockLattice (
00463         MultiBlock2D const& originalBlock, Box2D const& intersection,
00464         bool crop=true );
00465 
00468 
00474 template<typename T, template<typename U> class Descriptor>
00475 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > generateIntersectMultiBlockLattice (
00476         MultiBlock2D const& originalBlock1,
00477         MultiBlock2D const& originalBlock2, bool crop=true );
00478 
00481 
00488 template<typename T, template<typename U> class Descriptor>
00489 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > generateIntersectMultiBlockLattice (
00490         MultiBlock2D const& originalBlock1,
00491         MultiBlock2D const& originalBlock2,
00492         Box2D const& intersection, bool crop=true );
00493 
00496 
00502 template<typename T, template<typename U> class Descriptor>
00503 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > generateJoinMultiBlockLattice (
00504         MultiBlock2D const& originalBlock1,
00505         MultiBlock2D const& originalBlock2 );
00506 
00509 template<typename T, template<typename U> class Descriptor>
00510 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > extend (
00511         MultiBlockLattice2D<T,Descriptor>& originalBlock, Box2D const& addedBlock );
00512 
00515 template<typename T, template<typename U> class Descriptor>
00516 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > except (
00517         MultiBlockLattice2D<T,Descriptor>& originalBlock,
00518         Box2D const& exceptedBlock );
00519 
00521 template<typename T, template<typename U> class Descriptor>
00522 std::auto_ptr<MultiBlockLattice2D<T, Descriptor> > redistribute (
00523         MultiBlockLattice2D<T, Descriptor> const& originalBlock,
00524         SparseBlockStructure2D const& newBlockStructure );
00525 
00528 
00531 template<typename T, template<typename U> class Descriptor>
00532 std::auto_ptr<MultiBlockLattice2D<T, Descriptor> > redistribute (
00533         MultiBlockLattice2D<T, Descriptor> const& originalBlock,
00534         SparseBlockStructure2D const& newBlockStructure,
00535         Box2D const& intersection, bool crop=true );
00536 
00540 template<typename T, template<typename U> class Descriptor>
00541 std::auto_ptr<MultiBlockLattice2D<T, Descriptor> > align (
00542         MultiBlockLattice2D<T, Descriptor> const& originalBlock,
00543         MultiBlock2D const& partnerBlock );
00544 
00546 template<typename T, template<typename U> class Descriptor>
00547 std::auto_ptr<MultiBlockLattice2D<T, Descriptor> > reparallelize (
00548         MultiBlockLattice2D<T, Descriptor> const& originalBlock );
00549 
00551 
00553 template<typename T, template<typename U> class Descriptor>
00554 std::auto_ptr<MultiBlockLattice2D<T, Descriptor> > reparallelize (
00555         MultiBlockLattice2D<T, Descriptor> const& originalBlock,
00556         plint blockLx, plint blockLy);
00557 
00560 void transferDataProcessors(MultiBlock2D const& from, MultiBlock2D& to);
00561 
00562 }  // namespace plb
00563 
00564 #endif  // MULTI_BLOCK_GENERATOR_2D_H