$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_2D_HH 00027 #define REDUCTIVE_DATA_PROCESSOR_WRAPPER_2D_HH 00028 00029 #include "atomicBlock/reductiveDataProcessorWrapper2D.h" 00030 #include "atomicBlock/blockLattice2D.h" 00031 #include "atomicBlock/dataField2D.h" 00032 #include "atomicBlock/dataProcessor2D.h" 00033 #include "atomicBlock/atomicBlockOperations2D.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<BlockLattice2D<T,Descriptor>*> lattices ) 00045 { 00046 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00047 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00048 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00049 } 00050 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00051 executeDataProcessor( generator, atomicBlocks ); 00052 functional.getStatistics() = generator.getFunctional().getStatistics(); 00053 } 00054 00055 00056 /* *************** ScalarFieldBoxProcessing2D ******************************* */ 00057 00058 template<typename T> 00059 void applyProcessingFunctional(ReductiveScalarFieldBoxProcessingFunctional2D<T>& functional, 00060 Box2D domain, 00061 std::vector<ScalarField2D<T>*> fields ) 00062 { 00063 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00064 for (pluint iField=0; iField<fields.size(); ++iField) { 00065 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00066 } 00067 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00068 executeDataProcessor( generator, atomicBlocks ); 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<TensorField2D<T,nDim>*> fields ) 00080 { 00081 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00082 for (pluint iField=0; iField<fields.size(); ++iField) { 00083 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00084 } 00085 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00086 executeDataProcessor( generator, atomicBlocks ); 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<NTensorField2D<T>*> fields ) 00097 { 00098 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00099 for (pluint iField=0; iField<fields.size(); ++iField) { 00100 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00101 } 00102 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00103 executeDataProcessor( generator, atomicBlocks ); 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, BlockLattice2D<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, ScalarField2D<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, TensorField2D<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, NTensorField2D<T>& field) 00147 { 00148 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00149 executeDataProcessor( generator, field ); 00150 functional.getStatistics() = generator.getFunctional().getStatistics(); 00151 } 00152 00153 /* *************** ReductiveBoxProcessing2D_LL******************************************* */ 00154 00155 template<typename T1, template<typename U1> class Descriptor1, 00156 typename T2, template<typename U2> class Descriptor2> 00157 void applyProcessingFunctional ( 00158 ReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00159 Box2D domain, 00160 BlockLattice2D<T1,Descriptor1>& lattice1, 00161 BlockLattice2D<T2,Descriptor2>& lattice2 ) 00162 { 00163 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00164 executeDataProcessor( generator, lattice1, lattice2 ); 00165 functional.getStatistics() = generator.getFunctional().getStatistics(); 00166 } 00167 00168 00169 /* *************** ReductiveBoxProcessing2D_SS ****************************************** */ 00170 00171 template<typename T1, typename T2> 00172 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_SS<T1,T2>& functional, 00173 Box2D domain, 00174 ScalarField2D<T1>& field1, 00175 ScalarField2D<T2>& field2 ) 00176 { 00177 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00178 executeDataProcessor( generator, field1, field2 ); 00179 functional.getStatistics() = generator.getFunctional().getStatistics(); 00180 } 00181 00182 /* *************** ReductiveBoxProcessing2D_TT ****************************************** */ 00183 00184 template<typename T1, int nDim1, typename T2, int nDim2> 00185 void applyProcessingFunctional ( 00186 ReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00187 Box2D domain, 00188 TensorField2D<T1,nDim1>& field1, 00189 TensorField2D<T2,nDim2>& field2 ) 00190 { 00191 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00192 executeDataProcessor( generator, field1, field2 ); 00193 functional.getStatistics() = generator.getFunctional().getStatistics(); 00194 } 00195 00196 /* *************** ReductiveBoxProcessing2D_NN ****************************************** */ 00197 00198 template<typename T1, typename T2> 00199 void applyProcessingFunctional ( 00200 ReductiveBoxProcessingFunctional2D_NN<T1,T2>& functional, 00201 Box2D domain, 00202 NTensorField2D<T1>& field1, 00203 NTensorField2D<T2>& field2 ) 00204 { 00205 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00206 executeDataProcessor( generator, field1, field2 ); 00207 functional.getStatistics() = generator.getFunctional().getStatistics(); 00208 } 00209 00210 /* *************** ReductiveBoxProcessing2D_ST ****************************************** */ 00211 00212 template<typename T1, typename T2, int nDim> 00213 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00214 Box2D domain, 00215 ScalarField2D<T1>& field1, 00216 TensorField2D<T2,nDim>& field2 ) 00217 { 00218 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00219 executeDataProcessor( generator, field1, field2 ); 00220 functional.getStatistics() = generator.getFunctional().getStatistics(); 00221 } 00222 00223 00224 /* *************** ReductiveBoxProcessing2D_SN ****************************************** */ 00225 00226 template<typename T1, typename T2> 00227 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_SN<T1,T2>& functional, 00228 Box2D domain, 00229 ScalarField2D<T1>& field1, 00230 NTensorField2D<T2>& field2 ) 00231 { 00232 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00233 executeDataProcessor( generator, field1, field2 ); 00234 functional.getStatistics() = generator.getFunctional().getStatistics(); 00235 } 00236 00237 00238 /* *************** ReductiveBoxProcessing2D_LS ****************************************** */ 00239 00240 template<typename T1, template<typename U> class Descriptor, typename T2> 00241 void applyProcessingFunctional ( 00242 ReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00243 Box2D domain, 00244 BlockLattice2D<T1,Descriptor>& lattice, 00245 ScalarField2D<T2>& field ) 00246 { 00247 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00248 executeDataProcessor( generator, lattice, field ); 00249 functional.getStatistics() = generator.getFunctional().getStatistics(); 00250 } 00251 00252 00253 /* *************** ReductiveBoxProcessing2D_LT ****************************************** */ 00254 00255 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00256 void applyProcessingFunctional ( 00257 ReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00258 Box2D domain, 00259 BlockLattice2D<T1,Descriptor>& lattice, 00260 TensorField2D<T2,nDim>& field ) 00261 { 00262 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00263 executeDataProcessor( generator, lattice, field ); 00264 functional.getStatistics() = generator.getFunctional().getStatistics(); 00265 } 00266 00267 /* *************** ReductiveBoxProcessing2D_LN ****************************************** */ 00268 00269 template<typename T1, template<typename U> class Descriptor, typename T2> 00270 void applyProcessingFunctional ( 00271 ReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00272 Box2D domain, 00273 BlockLattice2D<T1,Descriptor>& lattice, 00274 NTensorField2D<T2>& field ) 00275 { 00276 ReductiveBoxProcessorGenerator2D generator(functional.clone(), domain); 00277 executeDataProcessor( generator, lattice, field ); 00278 functional.getStatistics() = generator.getFunctional().getStatistics(); 00279 } 00280 00281 /* *************** LatticeDotProcessing2D ****************************************** */ 00282 00283 template<typename T, template<typename U> class Descriptor> 00284 void applyProcessingFunctional ( 00285 ReductiveLatticeDotProcessingFunctional2D<T,Descriptor>& functional, 00286 DotList2D const& dotList, 00287 std::vector<BlockLattice2D<T,Descriptor>*> lattices ) 00288 { 00289 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00290 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00291 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00292 } 00293 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00294 executeDataProcessor( generator, atomicBlocks ); 00295 functional.getStatistics() = generator.getFunctional().getStatistics(); 00296 } 00297 00298 00299 /* *************** ScalarFieldDotProcessing2D ****************************************** */ 00300 00301 template<typename T> 00302 void applyProcessingFunctional(ReductiveScalarFieldDotProcessingFunctional2D<T>& functional, 00303 DotList2D const& dotList, 00304 std::vector<ScalarField2D<T>*> fields ) 00305 { 00306 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00307 for (pluint iField=0; iField<fields.size(); ++iField) { 00308 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00309 } 00310 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00311 executeDataProcessor( generator, atomicBlocks ); 00312 functional.getStatistics() = generator.getFunctional().getStatistics(); 00313 } 00314 00315 00316 00317 /* *************** TensorFieldDotProcessing2D ****************************************** */ 00318 00319 template<typename T, int nDim> 00320 void applyProcessingFunctional ( 00321 ReductiveTensorFieldDotProcessingFunctional2D<T,nDim>& functional, 00322 DotList2D const& dotList, 00323 std::vector<TensorField2D<T,nDim>*> fields ) 00324 { 00325 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00326 for (pluint iField=0; iField<fields.size(); ++iField) { 00327 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00328 } 00329 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00330 executeDataProcessor( generator, atomicBlocks ); 00331 functional.getStatistics() = generator.getFunctional().getStatistics(); 00332 } 00333 00334 /* *************** NTensorFieldDotProcessing2D ****************************************** */ 00335 00336 template<typename T> 00337 void applyProcessingFunctional ( 00338 ReductiveNTensorFieldDotProcessingFunctional2D<T>& functional, 00339 DotList2D const& dotList, 00340 std::vector<NTensorField2D<T>*> fields ) 00341 { 00342 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00343 for (pluint iField=0; iField<fields.size(); ++iField) { 00344 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00345 } 00346 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00347 executeDataProcessor( generator, atomicBlocks ); 00348 functional.getStatistics() = generator.getFunctional().getStatistics(); 00349 } 00350 00351 /* *************** ReductiveDotProcessing2D_L ******************************************* */ 00352 00353 template<typename T, template<typename U> class Descriptor> 00354 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_L<T,Descriptor>& functional, 00355 DotList2D const& dotList, 00356 BlockLattice2D<T,Descriptor>& lattice) 00357 { 00358 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00359 executeDataProcessor( generator, lattice ); 00360 functional.getStatistics() = generator.getFunctional().getStatistics(); 00361 } 00362 00363 00364 /* *************** ReductiveDotProcessing2D_S ******************************************* */ 00365 00366 template<typename T> 00367 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_S<T>& functional, 00368 DotList2D const& dotList, ScalarField2D<T>& field) 00369 { 00370 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00371 executeDataProcessor( generator, field ); 00372 functional.getStatistics() = generator.getFunctional().getStatistics(); 00373 } 00374 00375 00376 /* *************** ReductiveDotProcessing2D_T ******************************************* */ 00377 00378 template<typename T, int nDim> 00379 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_T<T,nDim>& functional, 00380 DotList2D const& dotList, 00381 TensorField2D<T,nDim>& field) 00382 { 00383 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00384 executeDataProcessor( generator, field ); 00385 functional.getStatistics() = generator.getFunctional().getStatistics(); 00386 } 00387 00388 /* *************** ReductiveDotProcessing2D_N ******************************************* */ 00389 00390 template<typename T> 00391 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_N<T>& functional, 00392 DotList2D const& dotList, 00393 NTensorField2D<T>& field) 00394 { 00395 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00396 executeDataProcessor( generator, field ); 00397 functional.getStatistics() = generator.getFunctional().getStatistics(); 00398 } 00399 00400 /* *************** ReductiveDotProcessing2D_LL******************************************* */ 00401 00402 template<typename T1, template<typename U1> class Descriptor1, 00403 typename T2, template<typename U2> class Descriptor2> 00404 void applyProcessingFunctional ( 00405 ReductiveDotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00406 DotList2D const& dotList, 00407 BlockLattice2D<T1,Descriptor1>& lattice1, 00408 BlockLattice2D<T2,Descriptor2>& lattice2 ) 00409 { 00410 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00411 executeDataProcessor( generator, lattice1, lattice2 ); 00412 functional.getStatistics() = generator.getFunctional().getStatistics(); 00413 } 00414 00415 /* *************** ReductiveDotProcessing2D_SS ****************************************** */ 00416 00417 template<typename T1, typename T2> 00418 void applyProcessingFunctional ( 00419 ReductiveDotProcessingFunctional2D_SS<T1,T2>& functional, 00420 DotList2D const& dotList, 00421 ScalarField2D<T1>& field1, 00422 ScalarField2D<T2>& field2 ) 00423 { 00424 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00425 executeDataProcessor( generator, field1, field2 ); 00426 functional.getStatistics() = generator.getFunctional().getStatistics(); 00427 } 00428 00429 /* *************** ReductiveDotProcessing2D_TT ****************************************** */ 00430 00431 template<typename T1, int nDim1, typename T2, int nDim2> 00432 void applyProcessingFunctional ( 00433 ReductiveDotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00434 DotList2D const& dotList, 00435 TensorField2D<T1,nDim1>& field1, 00436 TensorField2D<T2,nDim2>& field2 ) 00437 { 00438 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00439 executeDataProcessor( generator, field1, field2 ); 00440 functional.getStatistics() = generator.getFunctional().getStatistics(); 00441 } 00442 00443 00444 /* *************** ReductiveDotProcessing2D_NN ****************************************** */ 00445 00446 template<typename T1, typename T2> 00447 void applyProcessingFunctional ( 00448 ReductiveDotProcessingFunctional2D_NN<T1,T2>& functional, 00449 DotList2D const& dotList, 00450 NTensorField2D<T1>& field1, 00451 NTensorField2D<T2>& field2 ) 00452 { 00453 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00454 executeDataProcessor( generator, field1, field2 ); 00455 functional.getStatistics() = generator.getFunctional().getStatistics(); 00456 } 00457 00458 00459 /* *************** ReductiveDotProcessing2D_ST ****************************************** */ 00460 00461 template<typename T1, typename T2, int nDim> 00462 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00463 DotList2D const& dotList, 00464 ScalarField2D<T1>& field1, 00465 TensorField2D<T2,nDim>& field2 ) 00466 { 00467 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00468 executeDataProcessor( generator, field1, field2 ); 00469 functional.getStatistics() = generator.getFunctional().getStatistics(); 00470 } 00471 00472 00473 /* *************** ReductiveDotProcessing2D_SN ****************************************** */ 00474 00475 template<typename T1, typename T2> 00476 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_SN<T1,T2>& functional, 00477 DotList2D const& dotList, 00478 ScalarField2D<T1>& field1, 00479 NTensorField2D<T2>& field2 ) 00480 { 00481 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00482 executeDataProcessor( generator, field1, field2 ); 00483 functional.getStatistics() = generator.getFunctional().getStatistics(); 00484 } 00485 00486 00487 /* *************** ReductiveDotProcessing2D_LS ****************************************** */ 00488 00489 template<typename T1, template<typename U> class Descriptor, typename T2> 00490 void applyProcessingFunctional ( 00491 ReductiveDotProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00492 DotList2D const& dotList, 00493 BlockLattice2D<T1,Descriptor>& lattice, 00494 ScalarField2D<T2>& field ) 00495 { 00496 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00497 executeDataProcessor( generator, lattice, field ); 00498 functional.getStatistics() = generator.getFunctional().getStatistics(); 00499 } 00500 00501 /* *************** ReductiveDotProcessing2D_LT ****************************************** */ 00502 00503 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00504 void applyProcessingFunctional ( 00505 ReductiveDotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00506 DotList2D const& dotList, 00507 BlockLattice2D<T1,Descriptor>& lattice, 00508 TensorField2D<T2,nDim>& field ) 00509 { 00510 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00511 executeDataProcessor( generator, lattice, field ); 00512 functional.getStatistics() = generator.getFunctional().getStatistics(); 00513 } 00514 00515 00516 /* *************** ReductiveDotProcessing2D_LN ****************************************** */ 00517 00518 template<typename T1, template<typename U> class Descriptor, typename T2> 00519 void applyProcessingFunctional ( 00520 ReductiveDotProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00521 DotList2D const& dotList, 00522 BlockLattice2D<T1,Descriptor>& lattice, 00523 NTensorField2D<T2>& field ) 00524 { 00525 ReductiveDotProcessorGenerator2D generator(functional.clone(), dotList); 00526 executeDataProcessor( generator, lattice, field ); 00527 functional.getStatistics() = generator.getFunctional().getStatistics(); 00528 } 00529 00530 00531 /* *************** BoundedReductiveLatticeBoxProcessing2D **************************** */ 00532 00533 template<typename T, template<typename U> class Descriptor> 00534 void applyProcessingFunctional ( 00535 BoundedReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>& functional, 00536 Box2D domain, 00537 std::vector<BlockLattice2D<T,Descriptor>*> lattices, 00538 plint boundaryWidth ) 00539 { 00540 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00541 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00542 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00543 } 00544 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00545 } 00546 00547 00548 /* *************** BoundedReductiveScalarFieldBoxProcessing2D ************************ */ 00549 00550 template<typename T> 00551 void applyProcessingFunctional ( 00552 BoundedReductiveScalarFieldBoxProcessingFunctional2D<T>& functional, 00553 Box2D domain, 00554 std::vector<ScalarField2D<T>*> fields, 00555 plint boundaryWidth ) 00556 { 00557 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00558 for (pluint iField=0; iField<fields.size(); ++iField) { 00559 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00560 } 00561 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00562 } 00563 00564 00565 /* *************** BoundedReductiveTensorFieldBoxProcessing2D ************************ */ 00566 00567 template<typename T, int nDim> 00568 void applyProcessingFunctional ( 00569 BoundedReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>& functional, 00570 Box2D domain, 00571 std::vector<TensorField2D<T,nDim>*> fields, plint boundaryWidth ) 00572 { 00573 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00574 for (pluint iField=0; iField<fields.size(); ++iField) { 00575 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00576 } 00577 applyProcessingFunctional(functional, domain, 00578 atomicBlocks, boundaryWidth); 00579 } 00580 00581 /* *************** BoundedReductiveNTensorFieldBoxProcessing2D ************************ */ 00582 00583 template<typename T> 00584 void applyProcessingFunctional ( 00585 BoundedReductiveNTensorFieldBoxProcessingFunctional2D<T>& functional, 00586 Box2D domain, 00587 std::vector<NTensorField2D<T>*> fields, plint boundaryWidth ) 00588 { 00589 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00590 for (pluint iField=0; iField<fields.size(); ++iField) { 00591 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00592 } 00593 applyProcessingFunctional(functional, domain, 00594 atomicBlocks, boundaryWidth); 00595 } 00596 00597 /* *************** BoundedReductiveBoxProcessing2D_L ********************************* */ 00598 00599 template<typename T, template<typename U> class Descriptor> 00600 void applyProcessingFunctional ( 00601 BoundedReductiveBoxProcessingFunctional2D_L<T,Descriptor>& functional, 00602 Box2D domain, BlockLattice2D<T,Descriptor>& lattice, plint boundaryWidth ) 00603 { 00604 std::vector<AtomicBlock2D*> atomicBlocks(1); 00605 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 00606 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00607 } 00608 00609 00610 /* *************** BoundedReductiveBoxProcessing2D_S ********************************* */ 00611 00612 template<typename T> 00613 void applyProcessingFunctional ( 00614 BoundedReductiveBoxProcessingFunctional2D_S<T>& functional, 00615 Box2D domain, ScalarField2D<T>& field, plint boundaryWidth ) 00616 { 00617 std::vector<AtomicBlock2D*> atomicBlocks(1); 00618 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 00619 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00620 } 00621 00622 /* *************** BoundedReductiveBoxProcessing2D_T ********************************* */ 00623 00624 template<typename T, int nDim> 00625 void applyProcessingFunctional ( 00626 BoundedReductiveBoxProcessingFunctional2D_T<T,nDim>& functional, 00627 Box2D domain, TensorField2D<T,nDim>& field, plint boundaryWidth ) 00628 { 00629 std::vector<AtomicBlock2D*> atomicBlocks(1); 00630 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 00631 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00632 } 00633 00634 /* *************** BoundedReductiveBoxProcessing2D_N ********************************* */ 00635 00636 template<typename T> 00637 void applyProcessingFunctional ( 00638 BoundedReductiveBoxProcessingFunctional2D_N<T>& functional, 00639 Box2D domain, NTensorField2D<T>& field, plint boundaryWidth ) 00640 { 00641 std::vector<AtomicBlock2D*> atomicBlocks(1); 00642 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 00643 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00644 } 00645 00646 /* *************** BoundedReductiveBoxProcessing2D_LL********************************* */ 00647 00648 template<typename T1, template<typename U1> class Descriptor1, 00649 typename T2, template<typename U2> class Descriptor2> 00650 void applyProcessingFunctional ( 00651 BoundedReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00652 Box2D domain, 00653 BlockLattice2D<T1,Descriptor1>& lattice1, 00654 BlockLattice2D<T2,Descriptor2>& lattice2, 00655 plint boundaryWidth ) 00656 { 00657 std::vector<AtomicBlock2D*> atomicBlocks(2); 00658 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice1); 00659 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&lattice2); 00660 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00661 } 00662 00663 00664 /* *************** BoundedReductiveBoxProcessing2D_SS ****************************************** */ 00665 00666 template<typename T1, typename T2> 00667 void applyProcessingFunctional ( 00668 BoundedReductiveBoxProcessingFunctional2D_SS<T1,T2>& functional, 00669 Box2D domain, 00670 ScalarField2D<T1>& field1, 00671 ScalarField2D<T2>& field2, 00672 plint boundaryWidth ) 00673 { 00674 std::vector<AtomicBlock2D*> atomicBlocks(2); 00675 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 00676 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 00677 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00678 } 00679 00680 /* *************** BoundedReductiveBoxProcessing2D_TT ********************************** */ 00681 00682 template<typename T1, int nDim1, typename T2, int nDim2> 00683 void applyProcessingFunctional ( 00684 BoundedReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00685 Box2D domain, 00686 TensorField2D<T1,nDim1>& field1, 00687 TensorField2D<T2,nDim2>& field2, 00688 plint boundaryWidth ) 00689 { 00690 std::vector<AtomicBlock2D*> atomicBlocks(2); 00691 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 00692 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 00693 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00694 } 00695 00696 00697 /* *************** BoundedReductiveBoxProcessing2D_NN ********************************** */ 00698 00699 template<typename T1, typename T2> 00700 void applyProcessingFunctional ( 00701 BoundedReductiveBoxProcessingFunctional2D_NN<T1,T2>& functional, 00702 Box2D domain, 00703 NTensorField2D<T1>& field1, 00704 NTensorField2D<T2>& field2, 00705 plint boundaryWidth ) 00706 { 00707 std::vector<AtomicBlock2D*> atomicBlocks(2); 00708 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 00709 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 00710 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00711 } 00712 00713 00714 /* *************** BoundedReductiveBoxProcessing2D_ST ******************************** */ 00715 00716 template<typename T1, typename T2, int nDim> 00717 void applyProcessingFunctional ( 00718 BoundedReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00719 Box2D domain, 00720 ScalarField2D<T1>& field1, 00721 TensorField2D<T2,nDim>& field2, 00722 plint boundaryWidth ) 00723 { 00724 std::vector<AtomicBlock2D*> atomicBlocks(2); 00725 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 00726 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 00727 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00728 } 00729 00730 /* *************** BoundedReductiveBoxProcessing2D_SN ******************************** */ 00731 00732 template<typename T1, typename T2> 00733 void applyProcessingFunctional ( 00734 BoundedReductiveBoxProcessingFunctional2D_SN<T1,T2>& functional, 00735 Box2D domain, 00736 ScalarField2D<T1>& field1, 00737 NTensorField2D<T2>& field2, 00738 plint boundaryWidth ) 00739 { 00740 std::vector<AtomicBlock2D*> atomicBlocks(2); 00741 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 00742 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 00743 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00744 } 00745 00746 00747 /* *************** BoundedReductiveBoxProcessing2D_LS ******************************** */ 00748 00749 template<typename T1, template<typename U> class Descriptor, typename T2> 00750 void applyProcessingFunctional ( 00751 BoundedReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00752 Box2D domain, 00753 BlockLattice2D<T1,Descriptor>& lattice, 00754 ScalarField2D<T2>& field, 00755 plint boundaryWidth ) 00756 { 00757 std::vector<AtomicBlock2D*> atomicBlocks(2); 00758 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 00759 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 00760 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00761 } 00762 00763 /* *************** BoundedReductiveBoxProcessing2D_LT ****************************************** */ 00764 00765 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00766 void applyProcessingFunctional ( 00767 BoundedReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00768 Box2D domain, 00769 BlockLattice2D<T1,Descriptor>& lattice, 00770 TensorField2D<T2,nDim>& field, 00771 plint boundaryWidth ) 00772 { 00773 std::vector<AtomicBlock2D*> atomicBlocks(2); 00774 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 00775 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 00776 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00777 } 00778 00779 /* *************** BoundedReductiveBoxProcessing2D_LN ****************************************** */ 00780 00781 template<typename T1, template<typename U> class Descriptor, typename T2> 00782 void applyProcessingFunctional ( 00783 BoundedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00784 Box2D domain, 00785 BlockLattice2D<T1,Descriptor>& lattice, 00786 NTensorField2D<T2>& field, 00787 plint boundaryWidth ) 00788 { 00789 std::vector<AtomicBlock2D*> atomicBlocks(2); 00790 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 00791 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 00792 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00793 } 00794 00795 } // namespace plb 00796 00797 #endif // REDUCTIVE_DATA_PROCESSOR_WRAPPER_2D_HH
1.6.3
1.6.3