$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_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
1.6.3
1.6.3