$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 00025 00026 #ifndef REDUCTIVE_MULTI_DATA_PROCESSOR_WRAPPER_2D_HH 00027 #define REDUCTIVE_MULTI_DATA_PROCESSOR_WRAPPER_2D_HH 00028 00029 #include "multiBlock/reductiveMultiDataProcessorWrapper2D.h" 00030 #include "multiBlock/multiBlockLattice2D.h" 00031 #include "multiBlock/multiDataField2D.h" 00032 #include "multiBlock/multiBlockOperations2D.h" 00033 #include "atomicBlock/dataProcessor2D.h" 00034 #include "core/plbDebug.h" 00035 00036 namespace plb { 00037 00038 /* *************** LatticeBoxProcessing2D ****************************************** */ 00039 00040 template<typename T, template<typename U> class Descriptor> 00041 void applyProcessingFunctional ( 00042 ReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>& functional, 00043 Box2D domain, 00044 std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices ) 00045 { 00046 std::vector<MultiBlock2D*> multiBlocks(lattices.size()); 00047 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00048 multiBlocks[iLattice] = dynamic_cast<MultiBlock2D*>(lattices[iLattice]); 00049 } 00050 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00051 executeDataProcessor( generator, multiBlocks ); 00052 functional.getStatistics() = generator.getFunctional().getStatistics(); 00053 } 00054 00055 00056 /* *************** MultiScalarFieldBoxProcessing2D ******************************* */ 00057 00058 template<typename T> 00059 void applyProcessingFunctional(ReductiveScalarFieldBoxProcessingFunctional2D<T>& functional, 00060 Box2D domain, 00061 std::vector<MultiScalarField2D<T>*> fields ) 00062 { 00063 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00064 for (pluint iField=0; iField<fields.size(); ++iField) { 00065 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00066 } 00067 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00068 executeDataProcessor( generator, multiBlocks ); 00069 functional.getStatistics() = generator.getFunctional().getStatistics(); 00070 } 00071 00072 00073 /* *************** TensorFieldBoxProcessing2D ******************************* */ 00074 00075 template<typename T, int nDim> 00076 void applyProcessingFunctional ( 00077 ReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>& functional, 00078 Box2D domain, 00079 std::vector<MultiTensorField2D<T,nDim>*> fields ) 00080 { 00081 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00082 for (pluint iField=0; iField<fields.size(); ++iField) { 00083 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00084 } 00085 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00086 executeDataProcessor( generator, multiBlocks ); 00087 functional.getStatistics() = generator.getFunctional().getStatistics(); 00088 } 00089 00090 /* *************** NTensorFieldBoxProcessing2D ******************************* */ 00091 00092 template<typename T> 00093 void applyProcessingFunctional ( 00094 ReductiveNTensorFieldBoxProcessingFunctional2D<T>& functional, 00095 Box2D domain, 00096 std::vector<MultiNTensorField2D<T>*> fields ) 00097 { 00098 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00099 for (pluint iField=0; iField<fields.size(); ++iField) { 00100 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00101 } 00102 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00103 executeDataProcessor( generator, multiBlocks ); 00104 functional.getStatistics() = generator.getFunctional().getStatistics(); 00105 } 00106 00107 /* *************** ReductiveBoxProcessing2D_L ******************************************* */ 00108 00109 template<typename T, template<typename U> class Descriptor> 00110 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_L<T,Descriptor>& functional, 00111 Box2D domain, MultiBlockLattice2D<T,Descriptor>& lattice) 00112 { 00113 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00114 executeDataProcessor( generator, lattice ); 00115 functional.getStatistics() = generator.getFunctional().getStatistics(); 00116 } 00117 00118 00119 /* *************** ReductiveBoxProcessing2D_S ******************************************* */ 00120 00121 template<typename T> 00122 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_S<T>& functional, 00123 Box2D domain, MultiScalarField2D<T>& field) 00124 { 00125 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00126 executeDataProcessor( generator, field ); 00127 functional.getStatistics() = generator.getFunctional().getStatistics(); 00128 } 00129 00130 00131 /* *************** ReductiveBoxProcessing2D_T ******************************************* */ 00132 00133 template<typename T, int nDim> 00134 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_T<T,nDim>& functional, 00135 Box2D domain, MultiTensorField2D<T,nDim>& field) 00136 { 00137 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00138 executeDataProcessor( generator, field ); 00139 functional.getStatistics() = generator.getFunctional().getStatistics(); 00140 } 00141 00142 /* *************** ReductiveBoxProcessing2D_N ******************************************* */ 00143 00144 template<typename T> 00145 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_N<T>& functional, 00146 Box2D domain, MultiNTensorField2D<T>& field) 00147 { 00148 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00149 executeDataProcessor( generator, field ); 00150 functional.getStatistics() = generator.getFunctional().getStatistics(); 00151 } 00152 00153 /* *************** ReductiveBoxProcessing2D_N ******************************************* */ 00154 00155 template<typename T> 00156 void applyProcessingFunctional(MaskedReductiveBoxProcessingFunctional2D_N<T>& functional, 00157 Box2D domain, 00158 MultiNTensorField2D<T>& field, 00159 MultiNTensorField2D<int>& mask) 00160 { 00161 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00162 executeDataProcessor( generator, field, mask ); 00163 functional.getStatistics() = generator.getFunctional().getStatistics(); 00164 } 00165 00166 /* *************** ReductiveBoxProcessing2D_LL******************************************* */ 00167 00168 template<typename T1, template<typename U1> class Descriptor1, 00169 typename T2, template<typename U2> class Descriptor2> 00170 void applyProcessingFunctional ( 00171 ReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00172 Box2D domain, 00173 MultiBlockLattice2D<T1,Descriptor1>& lattice1, 00174 MultiBlockLattice2D<T2,Descriptor2>& lattice2 ) 00175 { 00176 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00177 executeDataProcessor( generator, lattice1, lattice2 ); 00178 functional.getStatistics() = generator.getFunctional().getStatistics(); 00179 } 00180 00181 00182 /* *************** ReductiveBoxProcessing2D_SS ****************************************** */ 00183 00184 template<typename T1, typename T2> 00185 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_SS<T1,T2>& functional, 00186 Box2D domain, 00187 MultiScalarField2D<T1>& field1, 00188 MultiScalarField2D<T2>& field2 ) 00189 { 00190 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00191 executeDataProcessor( generator, field1, field2 ); 00192 functional.getStatistics() = generator.getFunctional().getStatistics(); 00193 } 00194 00195 /* *************** ReductiveBoxProcessing2D_TT ****************************************** */ 00196 00197 template<typename T1, int nDim1, typename T2, int nDim2> 00198 void applyProcessingFunctional ( 00199 ReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00200 Box2D domain, 00201 MultiTensorField2D<T1,nDim1>& field1, 00202 MultiTensorField2D<T2,nDim2>& field2 ) 00203 { 00204 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00205 executeDataProcessor( generator, field1, field2 ); 00206 functional.getStatistics() = generator.getFunctional().getStatistics(); 00207 } 00208 00209 /* *************** ReductiveBoxProcessing2D_NN ****************************************** */ 00210 00211 template<typename T1, typename T2> 00212 void applyProcessingFunctional ( 00213 ReductiveBoxProcessingFunctional2D_NN<T1,T2>& functional, 00214 Box2D domain, 00215 MultiNTensorField2D<T1>& field1, 00216 MultiNTensorField2D<T2>& field2 ) 00217 { 00218 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00219 executeDataProcessor( generator, field1, field2 ); 00220 functional.getStatistics() = generator.getFunctional().getStatistics(); 00221 } 00222 00223 /* *************** ReductiveBoxProcessing2D_NN ****************************************** */ 00224 00225 template<typename T1, typename T2> 00226 void applyProcessingFunctional ( 00227 MaskedReductiveBoxProcessingFunctional2D_NN<T1,T2>& functional, 00228 Box2D domain, 00229 MultiNTensorField2D<T1>& field1, 00230 MultiNTensorField2D<T2>& field2, 00231 MultiNTensorField2D<int>& mask ) 00232 { 00233 std::vector<MultiBlock2D*> multiBlocks(3); 00234 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field1); 00235 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field2); 00236 multiBlocks[2] = dynamic_cast<MultiBlock2D*>(&mask); 00237 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00238 executeDataProcessor( generator, multiBlocks ); 00239 functional.getStatistics() = generator.getFunctional().getStatistics(); 00240 } 00241 00242 /* *************** ReductiveBoxProcessing2D_ST ****************************************** */ 00243 00244 template<typename T1, typename T2, int nDim> 00245 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00246 Box2D domain, 00247 MultiScalarField2D<T1>& field1, 00248 MultiTensorField2D<T2,nDim>& field2 ) 00249 { 00250 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00251 executeDataProcessor( generator, field1, field2 ); 00252 functional.getStatistics() = generator.getFunctional().getStatistics(); 00253 } 00254 00255 00256 /* *************** ReductiveBoxProcessing2D_SN ****************************************** */ 00257 00258 template<typename T1, typename T2> 00259 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_SN<T1,T2>& functional, 00260 Box2D domain, 00261 MultiScalarField2D<T1>& field1, 00262 MultiNTensorField2D<T2>& field2 ) 00263 { 00264 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00265 executeDataProcessor( generator, field1, field2 ); 00266 functional.getStatistics() = generator.getFunctional().getStatistics(); 00267 } 00268 00269 00270 /* *************** ReductiveBoxProcessing2D_LS ****************************************** */ 00271 00272 template<typename T1, template<typename U> class Descriptor, typename T2> 00273 void applyProcessingFunctional ( 00274 ReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00275 Box2D domain, 00276 MultiBlockLattice2D<T1,Descriptor>& lattice, 00277 MultiScalarField2D<T2>& field ) 00278 { 00279 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00280 executeDataProcessor( generator, lattice, field ); 00281 functional.getStatistics() = generator.getFunctional().getStatistics(); 00282 } 00283 00284 00285 /* *************** ReductiveBoxProcessing2D_LT ****************************************** */ 00286 00287 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00288 void applyProcessingFunctional ( 00289 ReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00290 Box2D domain, 00291 MultiBlockLattice2D<T1,Descriptor>& lattice, 00292 MultiTensorField2D<T2,nDim>& field ) 00293 { 00294 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00295 executeDataProcessor( generator, lattice, field ); 00296 functional.getStatistics() = generator.getFunctional().getStatistics(); 00297 } 00298 00299 /* *************** ReductiveBoxProcessing2D_LN ****************************************** */ 00300 00301 template<typename T1, template<typename U> class Descriptor, typename T2> 00302 void applyProcessingFunctional ( 00303 ReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00304 Box2D domain, 00305 MultiBlockLattice2D<T1,Descriptor>& lattice, 00306 MultiNTensorField2D<T2>& field ) 00307 { 00308 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00309 executeDataProcessor( generator, lattice, field ); 00310 functional.getStatistics() = generator.getFunctional().getStatistics(); 00311 } 00312 00313 /* *************** MaskedReductiveBoxProcessing2D_LN ****************************************** */ 00314 00315 template<typename T1, template<typename U> class Descriptor, typename T2> 00316 void applyProcessingFunctional ( 00317 MaskedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00318 Box2D domain, 00319 MultiBlockLattice2D<T1,Descriptor>& lattice, 00320 MultiNTensorField2D<T2>& field, 00321 MultiNTensorField2D<int>& mask ) 00322 { 00323 std::vector<MultiBlock2D*> multiBlocks(3); 00324 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&lattice); 00325 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field); 00326 multiBlocks[2] = dynamic_cast<MultiBlock2D*>(&mask); 00327 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00328 executeDataProcessor( generator, multiBlocks ); 00329 functional.getStatistics() = generator.getFunctional().getStatistics(); 00330 } 00331 00332 /* *************** LatticeDotProcessing2D ****************************************** */ 00333 00334 template<typename T, template<typename U> class Descriptor> 00335 void applyProcessingFunctional ( 00336 ReductiveLatticeDotProcessingFunctional2D<T,Descriptor>& functional, 00337 DotList2D const& dotList, 00338 std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices ) 00339 { 00340 std::vector<MultiBlock2D*> multiBlocks(lattices.size()); 00341 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00342 multiBlocks[iLattice] = dynamic_cast<MultiBlock2D*>(lattices[iLattice]); 00343 } 00344 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00345 executeDataProcessor( generator, multiBlocks ); 00346 functional.getStatistics() = generator.getFunctional().getStatistics(); 00347 } 00348 00349 00350 /* *************** ScalarFieldDotProcessing2D ****************************************** */ 00351 00352 template<typename T> 00353 void applyProcessingFunctional(ReductiveScalarFieldDotProcessingFunctional2D<T>& functional, 00354 DotList2D const& dotList, 00355 std::vector<MultiScalarField2D<T>*> fields ) 00356 { 00357 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00358 for (pluint iField=0; iField<fields.size(); ++iField) { 00359 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00360 } 00361 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00362 executeDataProcessor( generator, multiBlocks ); 00363 functional.getStatistics() = generator.getFunctional().getStatistics(); 00364 } 00365 00366 00367 00368 /* *************** MultiTensorFieldDotProcessing2D ****************************************** */ 00369 00370 template<typename T, int nDim> 00371 void applyProcessingFunctional ( 00372 ReductiveTensorFieldDotProcessingFunctional2D<T,nDim>& functional, 00373 DotList2D const& dotList, 00374 std::vector<MultiTensorField2D<T,nDim>*> fields ) 00375 { 00376 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00377 for (pluint iField=0; iField<fields.size(); ++iField) { 00378 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00379 } 00380 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00381 executeDataProcessor( generator, multiBlocks ); 00382 functional.getStatistics() = generator.getFunctional().getStatistics(); 00383 } 00384 00385 /* *************** MultiNTensorFieldDotProcessing2D ****************************************** */ 00386 00387 template<typename T> 00388 void applyProcessingFunctional ( 00389 ReductiveNTensorFieldDotProcessingFunctional2D<T>& functional, 00390 DotList2D const& dotList, 00391 std::vector<MultiNTensorField2D<T>*> fields ) 00392 { 00393 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00394 for (pluint iField=0; iField<fields.size(); ++iField) { 00395 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00396 } 00397 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00398 executeDataProcessor( generator, multiBlocks ); 00399 functional.getStatistics() = generator.getFunctional().getStatistics(); 00400 } 00401 00402 /* *************** ReductiveDotProcessing2D_L ******************************************* */ 00403 00404 template<typename T, template<typename U> class Descriptor> 00405 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_L<T,Descriptor>& functional, 00406 DotList2D const& dotList, 00407 MultiBlockLattice2D<T,Descriptor>& lattice) 00408 { 00409 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00410 executeDataProcessor( generator, lattice ); 00411 functional.getStatistics() = generator.getFunctional().getStatistics(); 00412 } 00413 00414 00415 /* *************** ReductiveDotProcessing2D_S ******************************************* */ 00416 00417 template<typename T> 00418 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_S<T>& functional, 00419 DotList2D const& dotList, MultiScalarField2D<T>& field) 00420 { 00421 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00422 executeDataProcessor( generator, field ); 00423 functional.getStatistics() = generator.getFunctional().getStatistics(); 00424 } 00425 00426 00427 /* *************** ReductiveDotProcessing2D_T ******************************************* */ 00428 00429 template<typename T, int nDim> 00430 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_T<T,nDim>& functional, 00431 DotList2D const& dotList, 00432 MultiTensorField2D<T,nDim>& field) 00433 { 00434 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00435 executeDataProcessor( generator, field ); 00436 functional.getStatistics() = generator.getFunctional().getStatistics(); 00437 } 00438 00439 /* *************** ReductiveDotProcessing2D_N ******************************************* */ 00440 00441 template<typename T> 00442 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_N<T>& functional, 00443 DotList2D const& dotList, 00444 MultiNTensorField2D<T>& field) 00445 { 00446 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00447 executeDataProcessor( generator, field ); 00448 functional.getStatistics() = generator.getFunctional().getStatistics(); 00449 } 00450 00451 /* *************** ReductiveDotProcessing2D_LL******************************************* */ 00452 00453 template<typename T1, template<typename U1> class Descriptor1, 00454 typename T2, template<typename U2> class Descriptor2> 00455 void applyProcessingFunctional ( 00456 ReductiveDotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00457 DotList2D const& dotList, 00458 MultiBlockLattice2D<T1,Descriptor1>& lattice1, 00459 MultiBlockLattice2D<T2,Descriptor2>& lattice2 ) 00460 { 00461 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00462 executeDataProcessor( generator, lattice1, lattice2 ); 00463 functional.getStatistics() = generator.getFunctional().getStatistics(); 00464 } 00465 00466 /* *************** ReductiveDotProcessing2D_SS ****************************************** */ 00467 00468 template<typename T1, typename T2> 00469 void applyProcessingFunctional ( 00470 ReductiveDotProcessingFunctional2D_SS<T1,T2>& functional, 00471 DotList2D const& dotList, 00472 MultiScalarField2D<T1>& field1, 00473 MultiScalarField2D<T2>& field2 ) 00474 { 00475 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00476 executeDataProcessor( generator, field1, field2 ); 00477 functional.getStatistics() = generator.getFunctional().getStatistics(); 00478 } 00479 00480 /* *************** ReductiveDotProcessing2D_TT ****************************************** */ 00481 00482 template<typename T1, int nDim1, typename T2, int nDim2> 00483 void applyProcessingFunctional ( 00484 ReductiveDotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00485 DotList2D const& dotList, 00486 MultiTensorField2D<T1,nDim1>& field1, 00487 MultiTensorField2D<T2,nDim2>& field2 ) 00488 { 00489 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00490 executeDataProcessor( generator, field1, field2 ); 00491 functional.getStatistics() = generator.getFunctional().getStatistics(); 00492 } 00493 00494 /* *************** ReductiveDotProcessing2D_NN ****************************************** */ 00495 00496 template<typename T1, typename T2> 00497 void applyProcessingFunctional ( 00498 ReductiveDotProcessingFunctional2D_NN<T1,T2>& functional, 00499 DotList2D const& dotList, 00500 MultiNTensorField2D<T1>& field1, 00501 MultiNTensorField2D<T2>& field2 ) 00502 { 00503 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00504 executeDataProcessor( generator, field1, field2 ); 00505 functional.getStatistics() = generator.getFunctional().getStatistics(); 00506 } 00507 00508 00509 /* *************** ReductiveDotProcessing2D_ST ****************************************** */ 00510 00511 template<typename T1, typename T2, int nDim> 00512 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00513 DotList2D const& dotList, 00514 MultiScalarField2D<T1>& field1, 00515 MultiTensorField2D<T2,nDim>& field2 ) 00516 { 00517 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00518 executeDataProcessor( generator, field1, field2 ); 00519 functional.getStatistics() = generator.getFunctional().getStatistics(); 00520 } 00521 00522 00523 /* *************** ReductiveDotProcessing2D_SN ****************************************** */ 00524 00525 template<typename T1, typename T2> 00526 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_SN<T1,T2>& functional, 00527 DotList2D const& dotList, 00528 MultiScalarField2D<T1>& field1, 00529 MultiNTensorField2D<T2>& field2 ) 00530 { 00531 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00532 executeDataProcessor( generator, field1, field2 ); 00533 functional.getStatistics() = generator.getFunctional().getStatistics(); 00534 } 00535 00536 00537 /* *************** ReductiveDotProcessing2D_LS ****************************************** */ 00538 00539 template<typename T1, template<typename U> class Descriptor, typename T2> 00540 void applyProcessingFunctional ( 00541 ReductiveDotProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00542 DotList2D const& dotList, 00543 MultiBlockLattice2D<T1,Descriptor>& lattice, 00544 MultiScalarField2D<T2>& field ) 00545 { 00546 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00547 executeDataProcessor( generator, lattice, field ); 00548 functional.getStatistics() = generator.getFunctional().getStatistics(); 00549 } 00550 00551 /* *************** ReductiveDotProcessing2D_LT ****************************************** */ 00552 00553 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00554 void applyProcessingFunctional ( 00555 ReductiveDotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00556 DotList2D const& dotList, 00557 MultiBlockLattice2D<T1,Descriptor>& lattice, 00558 MultiTensorField2D<T2,nDim>& field ) 00559 { 00560 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00561 executeDataProcessor( generator, lattice, field ); 00562 functional.getStatistics() = generator.getFunctional().getStatistics(); 00563 } 00564 00565 /* *************** ReductiveDotProcessing2D_LN ****************************************** */ 00566 00567 template<typename T1, template<typename U> class Descriptor, typename T2> 00568 void applyProcessingFunctional ( 00569 ReductiveDotProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00570 DotList2D const& dotList, 00571 MultiBlockLattice2D<T1,Descriptor>& lattice, 00572 MultiNTensorField2D<T2>& field ) 00573 { 00574 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00575 executeDataProcessor( generator, lattice, field ); 00576 functional.getStatistics() = generator.getFunctional().getStatistics(); 00577 } 00578 00579 00580 /* *************** BoundedReductiveLatticeBoxProcessing2D **************************** */ 00581 00582 template<typename T, template<typename U> class Descriptor> 00583 void applyProcessingFunctional ( 00584 BoundedReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>& functional, 00585 Box2D domain, 00586 std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices, 00587 plint boundaryWidth ) 00588 { 00589 std::vector<MultiBlock2D*> multiBlocks(lattices.size()); 00590 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00591 multiBlocks[iLattice] = dynamic_cast<MultiBlock2D*>(lattices[iLattice]); 00592 } 00593 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00594 } 00595 00596 00597 /* *************** BoundedReductiveMultiScalarFieldBoxProcessing2D ************************ */ 00598 00599 template<typename T> 00600 void applyProcessingFunctional ( 00601 BoundedReductiveScalarFieldBoxProcessingFunctional2D<T>& functional, 00602 Box2D domain, 00603 std::vector<MultiScalarField2D<T>*> fields, 00604 plint boundaryWidth ) 00605 { 00606 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00607 for (pluint iField=0; iField<fields.size(); ++iField) { 00608 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00609 } 00610 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00611 } 00612 00613 00614 /* *************** BoundedReductiveTensorFieldBoxProcessing2D ************************ */ 00615 00616 template<typename T, int nDim> 00617 void applyProcessingFunctional ( 00618 BoundedReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>& functional, 00619 Box2D domain, 00620 std::vector<MultiTensorField2D<T,nDim>*> fields, plint boundaryWidth ) 00621 { 00622 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00623 for (pluint iField=0; iField<fields.size(); ++iField) { 00624 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00625 } 00626 applyProcessingFunctional(functional, domain, 00627 multiBlocks, boundaryWidth); 00628 } 00629 00630 /* *************** BoundedReductiveNTensorFieldBoxProcessing2D ************************ */ 00631 00632 template<typename T> 00633 void applyProcessingFunctional ( 00634 BoundedReductiveNTensorFieldBoxProcessingFunctional2D<T>& functional, 00635 Box2D domain, 00636 std::vector<MultiNTensorField2D<T>*> fields, plint boundaryWidth ) 00637 { 00638 std::vector<MultiBlock2D*> multiBlocks(fields.size()); 00639 for (pluint iField=0; iField<fields.size(); ++iField) { 00640 multiBlocks[iField] = dynamic_cast<MultiBlock2D*>(fields[iField]); 00641 } 00642 applyProcessingFunctional(functional, domain, 00643 multiBlocks, boundaryWidth); 00644 } 00645 00646 /* *************** BoundedReductiveBoxProcessing2D_L ********************************* */ 00647 00648 template<typename T, template<typename U> class Descriptor> 00649 void applyProcessingFunctional ( 00650 BoundedReductiveBoxProcessingFunctional2D_L<T,Descriptor>& functional, 00651 Box2D domain, MultiBlockLattice2D<T,Descriptor>& lattice, plint boundaryWidth ) 00652 { 00653 std::vector<MultiBlock2D*> multiBlocks(1); 00654 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&lattice); 00655 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00656 } 00657 00658 00659 /* *************** BoundedReductiveBoxProcessing2D_S ********************************* */ 00660 00661 template<typename T> 00662 void applyProcessingFunctional ( 00663 BoundedReductiveBoxProcessingFunctional2D_S<T>& functional, 00664 Box2D domain, MultiScalarField2D<T>& field, plint boundaryWidth ) 00665 { 00666 std::vector<MultiBlock2D*> multiBlocks(1); 00667 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field); 00668 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00669 } 00670 00671 /* *************** BoundedReductiveBoxProcessing2D_T ********************************* */ 00672 00673 template<typename T, int nDim> 00674 void applyProcessingFunctional ( 00675 BoundedReductiveBoxProcessingFunctional2D_T<T,nDim>& functional, 00676 Box2D domain, MultiTensorField2D<T,nDim>& field, plint boundaryWidth ) 00677 { 00678 std::vector<MultiBlock2D*> multiBlocks(1); 00679 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field); 00680 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00681 } 00682 00683 /* *************** BoundedReductiveBoxProcessing2D_N ********************************* */ 00684 00685 template<typename T> 00686 void applyProcessingFunctional ( 00687 BoundedReductiveBoxProcessingFunctional2D_N<T>& functional, 00688 Box2D domain, MultiNTensorField2D<T>& field, plint boundaryWidth ) 00689 { 00690 std::vector<MultiBlock2D*> multiBlocks(1); 00691 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field); 00692 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00693 } 00694 00695 /* *************** BoundedMaskedReductiveBoxProcessing2D_N ********************************* */ 00696 00697 template<typename T> 00698 void applyProcessingFunctional ( 00699 BoundedMaskedReductiveBoxProcessingFunctional2D_N<T>& functional, 00700 Box2D domain, 00701 MultiNTensorField2D<T>& field, 00702 MultiNTensorField2D<int>& mask, 00703 plint boundaryWidth ) 00704 { 00705 std::vector<MultiBlock2D*> multiBlocks(2); 00706 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field); 00707 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&mask); 00708 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00709 } 00710 00711 /* *************** BoundedReductiveBoxProcessing2D_LL********************************* */ 00712 00713 template<typename T1, template<typename U1> class Descriptor1, 00714 typename T2, template<typename U2> class Descriptor2> 00715 void applyProcessingFunctional ( 00716 BoundedReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00717 Box2D domain, 00718 MultiBlockLattice2D<T1,Descriptor1>& lattice1, 00719 MultiBlockLattice2D<T2,Descriptor2>& lattice2, 00720 plint boundaryWidth ) 00721 { 00722 std::vector<MultiBlock2D*> multiBlocks(2); 00723 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&lattice1); 00724 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&lattice2); 00725 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00726 } 00727 00728 00729 /* *************** BoundedReductiveBoxProcessing2D_SS ****************************************** */ 00730 00731 template<typename T1, typename T2> 00732 void applyProcessingFunctional ( 00733 BoundedReductiveBoxProcessingFunctional2D_SS<T1,T2>& functional, 00734 Box2D domain, 00735 MultiScalarField2D<T1>& field1, 00736 MultiScalarField2D<T2>& field2, 00737 plint boundaryWidth ) 00738 { 00739 std::vector<MultiBlock2D*> multiBlocks(2); 00740 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field1); 00741 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field2); 00742 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00743 } 00744 00745 /* *************** BoundedReductiveBoxProcessing2D_TT ********************************** */ 00746 00747 template<typename T1, int nDim1, typename T2, int nDim2> 00748 void applyProcessingFunctional ( 00749 BoundedReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00750 Box2D domain, 00751 MultiTensorField2D<T1,nDim1>& field1, 00752 MultiTensorField2D<T2,nDim2>& field2, 00753 plint boundaryWidth ) 00754 { 00755 std::vector<MultiBlock2D*> multiBlocks(2); 00756 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field1); 00757 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field2); 00758 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00759 } 00760 00761 00762 /* *************** BoundedReductiveBoxProcessing2D_NN ********************************** */ 00763 00764 template<typename T1, typename T2> 00765 void applyProcessingFunctional ( 00766 BoundedReductiveBoxProcessingFunctional2D_NN<T1,T2>& functional, 00767 Box2D domain, 00768 MultiNTensorField2D<T1>& field1, 00769 MultiNTensorField2D<T2>& field2, 00770 plint boundaryWidth ) 00771 { 00772 std::vector<MultiBlock2D*> multiBlocks(2); 00773 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field1); 00774 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field2); 00775 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00776 } 00777 00778 00779 /* *************** BoundedMaskedReductiveBoxProcessing2D_NN ********************************** */ 00780 00781 template<typename T1, typename T2> 00782 void applyProcessingFunctional ( 00783 BoundedMaskedReductiveBoxProcessingFunctional2D_NN<T1,T2>& functional, 00784 Box2D domain, 00785 MultiNTensorField2D<T1>& field1, 00786 MultiNTensorField2D<T2>& field2, 00787 MultiNTensorField2D<int>& mask, 00788 plint boundaryWidth ) 00789 { 00790 std::vector<MultiBlock2D*> multiBlocks(3); 00791 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field1); 00792 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field2); 00793 multiBlocks[2] = dynamic_cast<MultiBlock2D*>(&mask); 00794 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00795 } 00796 00797 00798 /* *************** BoundedReductiveBoxProcessing2D_ST ******************************** */ 00799 00800 template<typename T1, typename T2, int nDim> 00801 void applyProcessingFunctional ( 00802 BoundedReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00803 Box2D domain, 00804 MultiScalarField2D<T1>& field1, 00805 MultiTensorField2D<T2,nDim>& field2, 00806 plint boundaryWidth ) 00807 { 00808 std::vector<MultiBlock2D*> multiBlocks(2); 00809 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field1); 00810 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field2); 00811 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00812 } 00813 00814 00815 /* *************** BoundedReductiveBoxProcessing2D_SN ******************************** */ 00816 00817 template<typename T1, typename T2> 00818 void applyProcessingFunctional ( 00819 BoundedReductiveBoxProcessingFunctional2D_SN<T1,T2>& functional, 00820 Box2D domain, 00821 MultiScalarField2D<T1>& field1, 00822 MultiNTensorField2D<T2>& field2, 00823 plint boundaryWidth ) 00824 { 00825 std::vector<MultiBlock2D*> multiBlocks(2); 00826 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&field1); 00827 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field2); 00828 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00829 } 00830 00831 00832 /* *************** BoundedReductiveBoxProcessing2D_LS ******************************** */ 00833 00834 template<typename T1, template<typename U> class Descriptor, typename T2> 00835 void applyProcessingFunctional ( 00836 BoundedReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00837 Box2D domain, 00838 MultiBlockLattice2D<T1,Descriptor>& lattice, 00839 MultiScalarField2D<T2>& field, 00840 plint boundaryWidth ) 00841 { 00842 std::vector<MultiBlock2D*> multiBlocks(2); 00843 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&lattice); 00844 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field); 00845 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00846 } 00847 00848 /* *************** BoundedReductiveBoxProcessing2D_LT ****************************************** */ 00849 00850 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00851 void applyProcessingFunctional ( 00852 BoundedReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00853 Box2D domain, 00854 MultiBlockLattice2D<T1,Descriptor>& lattice, 00855 MultiTensorField2D<T2,nDim>& field, 00856 plint boundaryWidth ) 00857 { 00858 std::vector<MultiBlock2D*> multiBlocks(2); 00859 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&lattice); 00860 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field); 00861 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00862 } 00863 00864 /* *************** BoundedReductiveBoxProcessing2D_LN ****************************************** */ 00865 00866 template<typename T1, template<typename U> class Descriptor, typename T2> 00867 void applyProcessingFunctional ( 00868 BoundedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00869 Box2D domain, 00870 MultiBlockLattice2D<T1,Descriptor>& lattice, 00871 MultiNTensorField2D<T2>& field, 00872 plint boundaryWidth ) 00873 { 00874 std::vector<MultiBlock2D*> multiBlocks(2); 00875 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&lattice); 00876 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field); 00877 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00878 } 00879 00880 /* *************** BoundedMaskedReductiveBoxProcessing2D_LN ****************************************** */ 00881 00882 template<typename T1, template<typename U> class Descriptor, typename T2> 00883 void applyProcessingFunctional ( 00884 BoundedMaskedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00885 Box2D domain, 00886 MultiBlockLattice2D<T1,Descriptor>& lattice, 00887 MultiNTensorField2D<T2>& field, 00888 MultiNTensorField2D<int>& mask, 00889 plint boundaryWidth ) 00890 { 00891 std::vector<MultiBlock2D*> multiBlocks(3); 00892 multiBlocks[0] = dynamic_cast<MultiBlock2D*>(&lattice); 00893 multiBlocks[1] = dynamic_cast<MultiBlock2D*>(&field); 00894 multiBlocks[2] = dynamic_cast<MultiBlock2D*>(&mask); 00895 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00896 } 00897 00898 } // namespace plb 00899 00900 #endif // REDUCTIVE_MULTI_DATA_PROCESSOR_WRAPPER_2D_HH
1.6.3
1.6.3