$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_3D_HH 00027 #define REDUCTIVE_MULTI_DATA_PROCESSOR_WRAPPER_3D_HH 00028 00029 #include "multiBlock/reductiveMultiDataProcessorWrapper3D.h" 00030 #include "multiBlock/multiBlockLattice3D.h" 00031 #include "multiBlock/multiDataField3D.h" 00032 #include "multiBlock/multiBlockOperations3D.h" 00033 #include "atomicBlock/dataProcessor3D.h" 00034 #include "core/plbDebug.h" 00035 00036 namespace plb { 00037 00038 /* *************** LatticeBoxProcessing3D ****************************************** */ 00039 00040 template<typename T, template<typename U> class Descriptor> 00041 void applyProcessingFunctional ( 00042 ReductiveLatticeBoxProcessingFunctional3D<T,Descriptor>& functional, 00043 Box3D domain, 00044 std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices ) 00045 { 00046 std::vector<MultiBlock3D*> multiBlocks(lattices.size()); 00047 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00048 multiBlocks[iLattice] = dynamic_cast<MultiBlock3D*>(lattices[iLattice]); 00049 } 00050 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00051 executeDataProcessor( generator, multiBlocks ); 00052 functional.getStatistics() = generator.getFunctional().getStatistics(); 00053 } 00054 00055 00056 /* *************** MultiScalarFieldBoxProcessing3D ******************************* */ 00057 00058 template<typename T> 00059 void applyProcessingFunctional(ReductiveScalarFieldBoxProcessingFunctional3D<T>& functional, 00060 Box3D domain, 00061 std::vector<MultiScalarField3D<T>*> fields ) 00062 { 00063 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00064 for (pluint iField=0; iField<fields.size(); ++iField) { 00065 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00066 } 00067 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00068 executeDataProcessor( generator, multiBlocks ); 00069 functional.getStatistics() = generator.getFunctional().getStatistics(); 00070 } 00071 00072 00073 /* *************** MultiTensorFieldBoxProcessing3D ******************************* */ 00074 00075 template<typename T, int nDim> 00076 void applyProcessingFunctional ( 00077 ReductiveTensorFieldBoxProcessingFunctional3D<T,nDim>& functional, 00078 Box3D domain, 00079 std::vector<MultiTensorField3D<T,nDim>*> fields ) 00080 { 00081 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00082 for (pluint iField=0; iField<fields.size(); ++iField) { 00083 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00084 } 00085 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00086 executeDataProcessor( generator, multiBlocks ); 00087 functional.getStatistics() = generator.getFunctional().getStatistics(); 00088 } 00089 00090 /* *************** MultiNTensorFieldBoxProcessing3D ******************************* */ 00091 00092 template<typename T> 00093 void applyProcessingFunctional ( 00094 ReductiveNTensorFieldBoxProcessingFunctional3D<T>& functional, 00095 Box3D domain, 00096 std::vector<MultiNTensorField3D<T>*> fields ) 00097 { 00098 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00099 for (pluint iField=0; iField<fields.size(); ++iField) { 00100 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00101 } 00102 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00103 executeDataProcessor( generator, multiBlocks ); 00104 functional.getStatistics() = generator.getFunctional().getStatistics(); 00105 } 00106 00107 /* *************** ReductiveBoxProcessing3D_L ******************************************* */ 00108 00109 template<typename T, template<typename U> class Descriptor> 00110 void applyProcessingFunctional(ReductiveBoxProcessingFunctional3D_L<T,Descriptor>& functional, 00111 Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice) 00112 { 00113 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00114 executeDataProcessor( generator, lattice ); 00115 functional.getStatistics() = generator.getFunctional().getStatistics(); 00116 } 00117 00118 00119 /* *************** ReductiveBoxProcessing3D_S ******************************************* */ 00120 00121 template<typename T> 00122 void applyProcessingFunctional(ReductiveBoxProcessingFunctional3D_S<T>& functional, 00123 Box3D domain, MultiScalarField3D<T>& field) 00124 { 00125 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00126 executeDataProcessor( generator, field ); 00127 functional.getStatistics() = generator.getFunctional().getStatistics(); 00128 } 00129 00130 00131 /* *************** ReductiveBoxProcessing3D_T ******************************************* */ 00132 00133 template<typename T, int nDim> 00134 void applyProcessingFunctional(ReductiveBoxProcessingFunctional3D_T<T,nDim>& functional, 00135 Box3D domain, MultiTensorField3D<T,nDim>& field) 00136 { 00137 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00138 executeDataProcessor( generator, field ); 00139 functional.getStatistics() = generator.getFunctional().getStatistics(); 00140 } 00141 00142 /* *************** ReductiveBoxProcessing3D_N ******************************************* */ 00143 00144 template<typename T> 00145 void applyProcessingFunctional(ReductiveBoxProcessingFunctional3D_N<T>& functional, 00146 Box3D domain, MultiNTensorField3D<T>& field) 00147 { 00148 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00149 executeDataProcessor( generator, field ); 00150 functional.getStatistics() = generator.getFunctional().getStatistics(); 00151 } 00152 00153 /* *************** MaskedReductiveBoxProcessing3D_N ******************************************* */ 00154 00155 template<typename T> 00156 void applyProcessingFunctional(MaskedReductiveBoxProcessingFunctional3D_N<T>& functional, 00157 Box3D domain, 00158 MultiNTensorField3D<T>& field, 00159 MultiNTensorField3D<int>& mask) 00160 { 00161 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00162 executeDataProcessor( generator, field, mask ); 00163 functional.getStatistics() = generator.getFunctional().getStatistics(); 00164 } 00165 00166 /* *************** ReductiveBoxProcessing3D_LL******************************************* */ 00167 00168 template<typename T1, template<typename U1> class Descriptor1, 00169 typename T2, template<typename U2> class Descriptor2> 00170 void applyProcessingFunctional ( 00171 ReductiveBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00172 Box3D domain, 00173 MultiBlockLattice3D<T1,Descriptor1>& lattice1, 00174 MultiBlockLattice3D<T2,Descriptor2>& lattice2 ) 00175 { 00176 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00177 executeDataProcessor( generator, lattice1, lattice2 ); 00178 functional.getStatistics() = generator.getFunctional().getStatistics(); 00179 } 00180 00181 00182 /* *************** ReductiveBoxProcessing3D_SS ****************************************** */ 00183 00184 template<typename T1, typename T2> 00185 void applyProcessingFunctional(ReductiveBoxProcessingFunctional3D_SS<T1,T2>& functional, 00186 Box3D domain, 00187 MultiScalarField3D<T1>& field1, 00188 MultiScalarField3D<T2>& field2 ) 00189 { 00190 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00191 executeDataProcessor( generator, field1, field2 ); 00192 functional.getStatistics() = generator.getFunctional().getStatistics(); 00193 } 00194 00195 /* *************** ReductiveBoxProcessing3D_TT ****************************************** */ 00196 00197 template<typename T1, int nDim1, typename T2, int nDim2> 00198 void applyProcessingFunctional ( 00199 ReductiveBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>& functional, 00200 Box3D domain, 00201 MultiTensorField3D<T1,nDim1>& field1, 00202 MultiTensorField3D<T2,nDim2>& field2 ) 00203 { 00204 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00205 executeDataProcessor( generator, field1, field2 ); 00206 functional.getStatistics() = generator.getFunctional().getStatistics(); 00207 } 00208 00209 /* *************** ReductiveBoxProcessing3D_NN ****************************************** */ 00210 00211 template<typename T1, typename T2> 00212 void applyProcessingFunctional ( 00213 ReductiveBoxProcessingFunctional3D_NN<T1,T2>& functional, 00214 Box3D domain, 00215 MultiNTensorField3D<T1>& field1, 00216 MultiNTensorField3D<T2>& field2 ) 00217 { 00218 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00219 executeDataProcessor( generator, field1, field2 ); 00220 functional.getStatistics() = generator.getFunctional().getStatistics(); 00221 } 00222 00223 /* *************** MaskedReductiveBoxProcessing3D_NN ****************************************** */ 00224 00225 template<typename T1, typename T2> 00226 void applyProcessingFunctional ( 00227 MaskedReductiveBoxProcessingFunctional3D_NN<T1,T2>& functional, 00228 Box3D domain, 00229 MultiNTensorField3D<T1>& field1, 00230 MultiNTensorField3D<T2>& field2, 00231 MultiNTensorField3D<int>& mask ) 00232 { 00233 std::vector<MultiBlock3D*> multiBlocks(3); 00234 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field1); 00235 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field2); 00236 multiBlocks[2] = dynamic_cast<MultiBlock3D*>(&mask); 00237 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00238 executeDataProcessor( generator, multiBlocks ); 00239 functional.getStatistics() = generator.getFunctional().getStatistics(); 00240 } 00241 00242 /* *************** ReductiveBoxProcessing3D_ST ****************************************** */ 00243 00244 template<typename T1, typename T2, int nDim> 00245 void applyProcessingFunctional(ReductiveBoxProcessingFunctional3D_ST<T1,T2,nDim>& functional, 00246 Box3D domain, 00247 MultiScalarField3D<T1>& field1, 00248 MultiTensorField3D<T2,nDim>& field2 ) 00249 { 00250 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00251 executeDataProcessor( generator, field1, field2 ); 00252 functional.getStatistics() = generator.getFunctional().getStatistics(); 00253 } 00254 00255 00256 /* *************** ReductiveBoxProcessing3D_SN ****************************************** */ 00257 00258 template<typename T1, typename T2> 00259 void applyProcessingFunctional(ReductiveBoxProcessingFunctional3D_SN<T1,T2>& functional, 00260 Box3D domain, 00261 MultiScalarField3D<T1>& field1, 00262 MultiNTensorField3D<T2>& field2 ) 00263 { 00264 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00265 executeDataProcessor( generator, field1, field2 ); 00266 functional.getStatistics() = generator.getFunctional().getStatistics(); 00267 } 00268 00269 00270 /* *************** ReductiveBoxProcessing3D_LS ****************************************** */ 00271 00272 template<typename T1, template<typename U> class Descriptor, typename T2> 00273 void applyProcessingFunctional ( 00274 ReductiveBoxProcessingFunctional3D_LS<T1,Descriptor,T2>& functional, 00275 Box3D domain, 00276 MultiBlockLattice3D<T1,Descriptor>& lattice, 00277 MultiScalarField3D<T2>& field ) 00278 { 00279 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00280 executeDataProcessor( generator, lattice, field ); 00281 functional.getStatistics() = generator.getFunctional().getStatistics(); 00282 } 00283 00284 00285 /* *************** ReductiveBoxProcessing3D_LT ****************************************** */ 00286 00287 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00288 void applyProcessingFunctional ( 00289 ReductiveBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>& functional, 00290 Box3D domain, 00291 MultiBlockLattice3D<T1,Descriptor>& lattice, 00292 MultiTensorField3D<T2,nDim>& field ) 00293 { 00294 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00295 executeDataProcessor( generator, lattice, field ); 00296 functional.getStatistics() = generator.getFunctional().getStatistics(); 00297 } 00298 00299 /* *************** ReductiveBoxProcessing3D_LN ****************************************** */ 00300 00301 template<typename T1, template<typename U> class Descriptor, typename T2> 00302 void applyProcessingFunctional ( 00303 ReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>& functional, 00304 Box3D domain, 00305 MultiBlockLattice3D<T1,Descriptor>& lattice, 00306 MultiNTensorField3D<T2>& field ) 00307 { 00308 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00309 executeDataProcessor( generator, lattice, field ); 00310 functional.getStatistics() = generator.getFunctional().getStatistics(); 00311 } 00312 00313 /* *************** MaskedReductiveBoxProcessing3D_LN ****************************************** */ 00314 00315 template<typename T1, template<typename U> class Descriptor, typename T2> 00316 void applyProcessingFunctional ( 00317 MaskedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>& functional, 00318 Box3D domain, 00319 MultiBlockLattice3D<T1,Descriptor>& lattice, 00320 MultiNTensorField3D<T2>& field, 00321 MultiNTensorField3D<int>& mask ) 00322 { 00323 std::vector<MultiBlock3D*> multiBlocks(3); 00324 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&lattice); 00325 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field); 00326 multiBlocks[2] = dynamic_cast<MultiBlock3D*>(&mask); 00327 ReductiveBoxProcessorGenerator3D generator(functional.clone(), domain); 00328 executeDataProcessor( generator, multiBlocks ); 00329 functional.getStatistics() = generator.getFunctional().getStatistics(); 00330 } 00331 00332 /* *************** LatticeDotProcessing3D ****************************************** */ 00333 00334 template<typename T, template<typename U> class Descriptor> 00335 void applyProcessingFunctional ( 00336 ReductiveLatticeDotProcessingFunctional3D<T,Descriptor>& functional, 00337 DotList3D const& dotList, 00338 std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices ) 00339 { 00340 std::vector<MultiBlock3D*> multiBlocks(lattices.size()); 00341 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00342 multiBlocks[iLattice] = dynamic_cast<MultiBlock3D*>(lattices[iLattice]); 00343 } 00344 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00345 executeDataProcessor( generator, multiBlocks ); 00346 functional.getStatistics() = generator.getFunctional().getStatistics(); 00347 } 00348 00349 00350 /* *************** ScalarFieldDotProcessing3D ****************************************** */ 00351 00352 template<typename T> 00353 void applyProcessingFunctional(ReductiveScalarFieldDotProcessingFunctional3D<T>& functional, 00354 DotList3D const& dotList, 00355 std::vector<MultiScalarField3D<T>*> fields ) 00356 { 00357 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00358 for (pluint iField=0; iField<fields.size(); ++iField) { 00359 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00360 } 00361 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00362 executeDataProcessor( generator, multiBlocks ); 00363 functional.getStatistics() = generator.getFunctional().getStatistics(); 00364 } 00365 00366 00367 00368 /* *************** TensorFieldDotProcessing3D ****************************************** */ 00369 00370 template<typename T, int nDim> 00371 void applyProcessingFunctional ( 00372 ReductiveTensorFieldDotProcessingFunctional3D<T,nDim>& functional, 00373 DotList3D const& dotList, 00374 std::vector<MultiTensorField3D<T,nDim>*> fields ) 00375 { 00376 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00377 for (pluint iField=0; iField<fields.size(); ++iField) { 00378 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00379 } 00380 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00381 executeDataProcessor( generator, multiBlocks ); 00382 functional.getStatistics() = generator.getFunctional().getStatistics(); 00383 } 00384 00385 /* *************** NTensorFieldDotProcessing3D ****************************************** */ 00386 00387 template<typename T> 00388 void applyProcessingFunctional ( 00389 ReductiveNTensorFieldDotProcessingFunctional3D<T>& functional, 00390 DotList3D const& dotList, 00391 std::vector<MultiNTensorField3D<T>*> fields ) 00392 { 00393 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00394 for (pluint iField=0; iField<fields.size(); ++iField) { 00395 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00396 } 00397 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00398 executeDataProcessor( generator, multiBlocks ); 00399 functional.getStatistics() = generator.getFunctional().getStatistics(); 00400 } 00401 00402 /* *************** ReductiveDotProcessing3D_L ******************************************* */ 00403 00404 template<typename T, template<typename U> class Descriptor> 00405 void applyProcessingFunctional(ReductiveDotProcessingFunctional3D_L<T,Descriptor>& functional, 00406 DotList3D const& dotList, 00407 MultiBlockLattice3D<T,Descriptor>& lattice) 00408 { 00409 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00410 executeDataProcessor( generator, lattice ); 00411 functional.getStatistics() = generator.getFunctional().getStatistics(); 00412 } 00413 00414 00415 /* *************** ReductiveDotProcessing3D_S ******************************************* */ 00416 00417 template<typename T> 00418 void applyProcessingFunctional(ReductiveDotProcessingFunctional3D_S<T>& functional, 00419 DotList3D const& dotList, MultiScalarField3D<T>& field) 00420 { 00421 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00422 executeDataProcessor( generator, field ); 00423 functional.getStatistics() = generator.getFunctional().getStatistics(); 00424 } 00425 00426 00427 /* *************** ReductiveDotProcessing3D_T ******************************************* */ 00428 00429 template<typename T, int nDim> 00430 void applyProcessingFunctional(ReductiveDotProcessingFunctional3D_T<T,nDim>& functional, 00431 DotList3D const& dotList, 00432 MultiTensorField3D<T,nDim>& field) 00433 { 00434 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00435 executeDataProcessor( generator, field ); 00436 functional.getStatistics() = generator.getFunctional().getStatistics(); 00437 } 00438 00439 /* *************** ReductiveDotProcessing3D_N ******************************************* */ 00440 00441 template<typename T> 00442 void applyProcessingFunctional(ReductiveDotProcessingFunctional3D_N<T>& functional, 00443 DotList3D const& dotList, 00444 MultiNTensorField3D<T>& field) 00445 { 00446 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00447 executeDataProcessor( generator, field ); 00448 functional.getStatistics() = generator.getFunctional().getStatistics(); 00449 } 00450 00451 /* *************** ReductiveDotProcessing3D_LL******************************************* */ 00452 00453 template<typename T1, template<typename U1> class Descriptor1, 00454 typename T2, template<typename U2> class Descriptor2> 00455 void applyProcessingFunctional ( 00456 ReductiveDotProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00457 DotList3D const& dotList, 00458 MultiBlockLattice3D<T1,Descriptor1>& lattice1, 00459 MultiBlockLattice3D<T2,Descriptor2>& lattice2 ) 00460 { 00461 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00462 executeDataProcessor( generator, lattice1, lattice2 ); 00463 functional.getStatistics() = generator.getFunctional().getStatistics(); 00464 } 00465 00466 /* *************** ReductiveDotProcessing3D_SS ****************************************** */ 00467 00468 template<typename T1, typename T2> 00469 void applyProcessingFunctional ( 00470 ReductiveDotProcessingFunctional3D_SS<T1,T2>& functional, 00471 DotList3D const& dotList, 00472 MultiScalarField3D<T1>& field1, 00473 MultiScalarField3D<T2>& field2 ) 00474 { 00475 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00476 executeDataProcessor( generator, field1, field2 ); 00477 functional.getStatistics() = generator.getFunctional().getStatistics(); 00478 } 00479 00480 /* *************** ReductiveDotProcessing3D_TT ****************************************** */ 00481 00482 template<typename T1, int nDim1, typename T2, int nDim2> 00483 void applyProcessingFunctional ( 00484 ReductiveDotProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>& functional, 00485 DotList3D const& dotList, 00486 MultiTensorField3D<T1,nDim1>& field1, 00487 MultiTensorField3D<T2,nDim2>& field2 ) 00488 { 00489 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00490 executeDataProcessor( generator, field1, field2 ); 00491 functional.getStatistics() = generator.getFunctional().getStatistics(); 00492 } 00493 00494 00495 /* *************** ReductiveDotProcessing3D_NN ****************************************** */ 00496 00497 template<typename T1, typename T2> 00498 void applyProcessingFunctional ( 00499 ReductiveDotProcessingFunctional3D_NN<T1,T2>& functional, 00500 DotList3D const& dotList, 00501 MultiNTensorField3D<T1>& field1, 00502 MultiNTensorField3D<T2>& field2 ) 00503 { 00504 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00505 executeDataProcessor( generator, field1, field2 ); 00506 functional.getStatistics() = generator.getFunctional().getStatistics(); 00507 } 00508 00509 00510 /* *************** ReductiveDotProcessing3D_ST ****************************************** */ 00511 00512 template<typename T1, typename T2, int nDim> 00513 void applyProcessingFunctional(ReductiveDotProcessingFunctional3D_ST<T1,T2,nDim>& functional, 00514 DotList3D const& dotList, 00515 MultiScalarField3D<T1>& field1, 00516 MultiTensorField3D<T2,nDim>& field2 ) 00517 { 00518 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00519 executeDataProcessor( generator, field1, field2 ); 00520 functional.getStatistics() = generator.getFunctional().getStatistics(); 00521 } 00522 00523 00524 /* *************** ReductiveDotProcessing3D_SN ****************************************** */ 00525 00526 template<typename T1, typename T2> 00527 void applyProcessingFunctional(ReductiveDotProcessingFunctional3D_SN<T1,T2>& functional, 00528 DotList3D const& dotList, 00529 MultiScalarField3D<T1>& field1, 00530 MultiNTensorField3D<T2>& field2 ) 00531 { 00532 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00533 executeDataProcessor( generator, field1, field2 ); 00534 functional.getStatistics() = generator.getFunctional().getStatistics(); 00535 } 00536 00537 00538 /* *************** ReductiveDotProcessing3D_LS ****************************************** */ 00539 00540 template<typename T1, template<typename U> class Descriptor, typename T2> 00541 void applyProcessingFunctional ( 00542 ReductiveDotProcessingFunctional3D_LS<T1,Descriptor,T2>& functional, 00543 DotList3D const& dotList, 00544 MultiBlockLattice3D<T1,Descriptor>& lattice, 00545 MultiScalarField3D<T2>& field ) 00546 { 00547 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00548 executeDataProcessor( generator, lattice, field ); 00549 functional.getStatistics() = generator.getFunctional().getStatistics(); 00550 } 00551 00552 /* *************** ReductiveDotProcessing3D_LT ****************************************** */ 00553 00554 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00555 void applyProcessingFunctional ( 00556 ReductiveDotProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>& functional, 00557 DotList3D const& dotList, 00558 MultiBlockLattice3D<T1,Descriptor>& lattice, 00559 MultiTensorField3D<T2,nDim>& field ) 00560 { 00561 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00562 executeDataProcessor( generator, lattice, field ); 00563 functional.getStatistics() = generator.getFunctional().getStatistics(); 00564 } 00565 00566 00567 /* *************** ReductiveDotProcessing3D_LN ****************************************** */ 00568 00569 template<typename T1, template<typename U> class Descriptor, typename T2> 00570 void applyProcessingFunctional ( 00571 ReductiveDotProcessingFunctional3D_LN<T1,Descriptor,T2>& functional, 00572 DotList3D const& dotList, 00573 MultiBlockLattice3D<T1,Descriptor>& lattice, 00574 MultiNTensorField3D<T2>& field ) 00575 { 00576 ReductiveDotProcessorGenerator3D generator(functional.clone(), dotList); 00577 executeDataProcessor( generator, lattice, field ); 00578 functional.getStatistics() = generator.getFunctional().getStatistics(); 00579 } 00580 00581 00582 /* *************** BoundedReductiveLatticeBoxProcessing3D **************************** */ 00583 00584 template<typename T, template<typename U> class Descriptor> 00585 void applyProcessingFunctional ( 00586 BoundedReductiveLatticeBoxProcessingFunctional3D<T,Descriptor>& functional, 00587 Box3D domain, 00588 std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices, 00589 plint boundaryWidth ) 00590 { 00591 std::vector<MultiBlock3D*> multiBlocks(lattices.size()); 00592 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00593 multiBlocks[iLattice] = dynamic_cast<MultiBlock3D*>(lattices[iLattice]); 00594 } 00595 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00596 } 00597 00598 00599 /* *************** BoundedReductiveMultiScalarFieldBoxProcessing3D ************************ */ 00600 00601 template<typename T> 00602 void applyProcessingFunctional ( 00603 BoundedReductiveScalarFieldBoxProcessingFunctional3D<T>& functional, 00604 Box3D domain, 00605 std::vector<MultiScalarField3D<T>*> fields, 00606 plint boundaryWidth ) 00607 { 00608 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00609 for (pluint iField=0; iField<fields.size(); ++iField) { 00610 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00611 } 00612 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00613 } 00614 00615 00616 /* *************** BoundedReductiveMultiTensorFieldBoxProcessing3D ************************ */ 00617 00618 template<typename T, int nDim> 00619 void applyProcessingFunctional ( 00620 BoundedReductiveTensorFieldBoxProcessingFunctional3D<T,nDim>& functional, 00621 Box3D domain, 00622 std::vector<MultiTensorField3D<T,nDim>*> fields, plint boundaryWidth ) 00623 { 00624 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00625 for (pluint iField=0; iField<fields.size(); ++iField) { 00626 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00627 } 00628 applyProcessingFunctional(functional, domain, 00629 multiBlocks, boundaryWidth); 00630 } 00631 00632 /* *************** BoundedReductiveMultiNTensorFieldBoxProcessing3D ************************ */ 00633 00634 template<typename T> 00635 void applyProcessingFunctional ( 00636 BoundedReductiveNTensorFieldBoxProcessingFunctional3D<T>& functional, 00637 Box3D domain, 00638 std::vector<MultiNTensorField3D<T>*> fields, plint boundaryWidth ) 00639 { 00640 std::vector<MultiBlock3D*> multiBlocks(fields.size()); 00641 for (pluint iField=0; iField<fields.size(); ++iField) { 00642 multiBlocks[iField] = dynamic_cast<MultiBlock3D*>(fields[iField]); 00643 } 00644 applyProcessingFunctional(functional, domain, 00645 multiBlocks, boundaryWidth); 00646 } 00647 00648 /* *************** BoundedReductiveBoxProcessing3D_L ********************************* */ 00649 00650 template<typename T, template<typename U> class Descriptor> 00651 void applyProcessingFunctional ( 00652 BoundedReductiveBoxProcessingFunctional3D_L<T,Descriptor>& functional, 00653 Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice, plint boundaryWidth ) 00654 { 00655 std::vector<MultiBlock3D*> multiBlocks(1); 00656 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&lattice); 00657 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00658 } 00659 00660 00661 /* *************** BoundedReductiveBoxProcessing3D_S ********************************* */ 00662 00663 template<typename T> 00664 void applyProcessingFunctional ( 00665 BoundedReductiveBoxProcessingFunctional3D_S<T>& functional, 00666 Box3D domain, MultiScalarField3D<T>& field, plint boundaryWidth ) 00667 { 00668 std::vector<MultiBlock3D*> multiBlocks(1); 00669 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field); 00670 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00671 } 00672 00673 /* *************** BoundedReductiveBoxProcessing3D_T ********************************* */ 00674 00675 template<typename T, int nDim> 00676 void applyProcessingFunctional ( 00677 BoundedReductiveBoxProcessingFunctional3D_T<T,nDim>& functional, 00678 Box3D domain, MultiTensorField3D<T,nDim>& field, plint boundaryWidth ) 00679 { 00680 std::vector<MultiBlock3D*> multiBlocks(1); 00681 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field); 00682 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00683 } 00684 00685 /* *************** BoundedReductiveBoxProcessing3D_N ********************************* */ 00686 00687 template<typename T> 00688 void applyProcessingFunctional ( 00689 BoundedReductiveBoxProcessingFunctional3D_N<T>& functional, 00690 Box3D domain, MultiNTensorField3D<T>& field, plint boundaryWidth ) 00691 { 00692 std::vector<MultiBlock3D*> multiBlocks(1); 00693 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field); 00694 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00695 } 00696 00697 /* *************** BoundedMaskedReductiveBoxProcessing3D_N ********************************* */ 00698 00699 template<typename T> 00700 void applyProcessingFunctional ( 00701 BoundedMaskedReductiveBoxProcessingFunctional3D_N<T>& functional, 00702 Box3D domain, 00703 MultiNTensorField3D<T>& field, 00704 MultiNTensorField3D<int>& mask, 00705 plint boundaryWidth ) 00706 { 00707 std::vector<MultiBlock3D*> multiBlocks(2); 00708 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field); 00709 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&mask); 00710 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00711 } 00712 00713 /* *************** BoundedReductiveBoxProcessing3D_LL********************************* */ 00714 00715 template<typename T1, template<typename U1> class Descriptor1, 00716 typename T2, template<typename U2> class Descriptor2> 00717 void applyProcessingFunctional ( 00718 BoundedReductiveBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00719 Box3D domain, 00720 MultiBlockLattice3D<T1,Descriptor1>& lattice1, 00721 MultiBlockLattice3D<T2,Descriptor2>& lattice2, 00722 plint boundaryWidth ) 00723 { 00724 std::vector<MultiBlock3D*> multiBlocks(2); 00725 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&lattice1); 00726 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&lattice2); 00727 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00728 } 00729 00730 00731 /* *************** BoundedReductiveBoxProcessing3D_SS ****************************************** */ 00732 00733 template<typename T1, typename T2> 00734 void applyProcessingFunctional ( 00735 BoundedReductiveBoxProcessingFunctional3D_SS<T1,T2>& functional, 00736 Box3D domain, 00737 MultiScalarField3D<T1>& field1, 00738 MultiScalarField3D<T2>& field2, 00739 plint boundaryWidth ) 00740 { 00741 std::vector<MultiBlock3D*> multiBlocks(2); 00742 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field1); 00743 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field2); 00744 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00745 } 00746 00747 /* *************** BoundedReductiveBoxProcessing3D_TT ********************************** */ 00748 00749 template<typename T1, int nDim1, typename T2, int nDim2> 00750 void applyProcessingFunctional ( 00751 BoundedReductiveBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>& functional, 00752 Box3D domain, 00753 MultiTensorField3D<T1,nDim1>& field1, 00754 MultiTensorField3D<T2,nDim2>& field2, 00755 plint boundaryWidth ) 00756 { 00757 std::vector<MultiBlock3D*> multiBlocks(2); 00758 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field1); 00759 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field2); 00760 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00761 } 00762 00763 00764 /* *************** BoundedReductiveBoxProcessing3D_NN ********************************** */ 00765 00766 template<typename T1, typename T2> 00767 void applyProcessingFunctional ( 00768 BoundedReductiveBoxProcessingFunctional3D_NN<T1,T2>& functional, 00769 Box3D domain, 00770 MultiNTensorField3D<T1>& field1, 00771 MultiNTensorField3D<T2>& field2, 00772 plint boundaryWidth ) 00773 { 00774 std::vector<MultiBlock3D*> multiBlocks(2); 00775 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field1); 00776 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field2); 00777 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00778 } 00779 00780 00781 /* *************** BoundedMaskedReductiveBoxProcessing3D_NN ********************************** */ 00782 00783 template<typename T1, typename T2> 00784 void applyProcessingFunctional ( 00785 BoundedMaskedReductiveBoxProcessingFunctional3D_NN<T1,T2>& functional, 00786 Box3D domain, 00787 MultiNTensorField3D<T1>& field1, 00788 MultiNTensorField3D<T2>& field2, 00789 MultiNTensorField3D<int>& mask, 00790 plint boundaryWidth ) 00791 { 00792 std::vector<MultiBlock3D*> multiBlocks(3); 00793 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field1); 00794 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field2); 00795 multiBlocks[2] = dynamic_cast<MultiBlock3D*>(&mask); 00796 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00797 } 00798 00799 00800 /* *************** BoundedReductiveBoxProcessing3D_ST ******************************** */ 00801 00802 template<typename T1, typename T2, int nDim> 00803 void applyProcessingFunctional ( 00804 BoundedReductiveBoxProcessingFunctional3D_ST<T1,T2,nDim>& functional, 00805 Box3D domain, 00806 MultiScalarField3D<T1>& field1, 00807 MultiTensorField3D<T2,nDim>& field2, 00808 plint boundaryWidth ) 00809 { 00810 std::vector<MultiBlock3D*> multiBlocks(2); 00811 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field1); 00812 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field2); 00813 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00814 } 00815 00816 00817 /* *************** BoundedReductiveBoxProcessing3D_SN ******************************** */ 00818 00819 template<typename T1, typename T2> 00820 void applyProcessingFunctional ( 00821 BoundedReductiveBoxProcessingFunctional3D_SN<T1,T2>& functional, 00822 Box3D domain, 00823 MultiScalarField3D<T1>& field1, 00824 MultiNTensorField3D<T2>& field2, 00825 plint boundaryWidth ) 00826 { 00827 std::vector<MultiBlock3D*> multiBlocks(2); 00828 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&field1); 00829 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field2); 00830 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00831 } 00832 00833 00834 /* *************** BoundedReductiveBoxProcessing3D_LS ******************************** */ 00835 00836 template<typename T1, template<typename U> class Descriptor, typename T2> 00837 void applyProcessingFunctional ( 00838 BoundedReductiveBoxProcessingFunctional3D_LS<T1,Descriptor,T2>& functional, 00839 Box3D domain, 00840 MultiBlockLattice3D<T1,Descriptor>& lattice, 00841 MultiScalarField3D<T2>& field, 00842 plint boundaryWidth ) 00843 { 00844 std::vector<MultiBlock3D*> multiBlocks(2); 00845 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&lattice); 00846 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field); 00847 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00848 } 00849 00850 /* *************** BoundedReductiveBoxProcessing3D_LT ****************************************** */ 00851 00852 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00853 void applyProcessingFunctional ( 00854 BoundedReductiveBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>& functional, 00855 Box3D domain, 00856 MultiBlockLattice3D<T1,Descriptor>& lattice, 00857 MultiTensorField3D<T2,nDim>& field, 00858 plint boundaryWidth ) 00859 { 00860 std::vector<MultiBlock3D*> multiBlocks(2); 00861 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&lattice); 00862 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field); 00863 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00864 } 00865 00866 /* *************** BoundedReductiveBoxProcessing3D_LN ****************************************** */ 00867 00868 template<typename T1, template<typename U> class Descriptor, typename T2> 00869 void applyProcessingFunctional ( 00870 BoundedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>& functional, 00871 Box3D domain, 00872 MultiBlockLattice3D<T1,Descriptor>& lattice, 00873 MultiNTensorField3D<T2>& field, 00874 plint boundaryWidth ) 00875 { 00876 std::vector<MultiBlock3D*> multiBlocks(2); 00877 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&lattice); 00878 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field); 00879 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00880 } 00881 00882 /* *************** BoundedReductiveBoxProcessing3D_LN ****************************************** */ 00883 00884 template<typename T1, template<typename U> class Descriptor, typename T2> 00885 void applyProcessingFunctional ( 00886 BoundedMaskedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>& functional, 00887 Box3D domain, 00888 MultiBlockLattice3D<T1,Descriptor>& lattice, 00889 MultiNTensorField3D<T2>& field, 00890 MultiNTensorField3D<int>& mask, 00891 plint boundaryWidth ) 00892 { 00893 std::vector<MultiBlock3D*> multiBlocks(2); 00894 multiBlocks[0] = dynamic_cast<MultiBlock3D*>(&lattice); 00895 multiBlocks[1] = dynamic_cast<MultiBlock3D*>(&field); 00896 multiBlocks[2] = dynamic_cast<MultiBlock3D*>(&mask); 00897 applyProcessingFunctional(functional, domain, multiBlocks, boundaryWidth); 00898 } 00899 00900 } // namespace plb 00901 00902 #endif // REDUCTIVE_MULTI_DATA_PROCESSOR_WRAPPER_3D_HH
1.6.3
1.6.3