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