|
Palabos
Version 1.0
|
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 DATA_PROCESSOR_WRAPPER_3D_HH 00027 #define DATA_PROCESSOR_WRAPPER_3D_HH 00028 00029 #include "atomicBlock/dataProcessorWrapper3D.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 LatticeBoxProcessingFunctional3D<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 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), atomicBlocks ); 00051 } 00052 00053 template<typename T, template<typename U> class Descriptor> 00054 void integrateProcessingFunctional ( 00055 LatticeBoxProcessingFunctional3D<T,Descriptor>* functional, 00056 Box3D domain, 00057 std::vector<BlockLattice3D<T,Descriptor>*> lattices, plint level ) 00058 { 00059 std::vector<AtomicBlock3D*> atomicBlocks(lattices.size()); 00060 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00061 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock3D*>(lattices[iLattice]); 00062 } 00063 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00064 atomicBlocks, level ); 00065 } 00066 00067 00068 /* *************** ScalarFieldBoxProcessing3D ******************************* */ 00069 00070 template<typename T> 00071 void applyProcessingFunctional(ScalarFieldBoxProcessingFunctional3D<T>* functional, 00072 Box3D domain, 00073 std::vector<ScalarField3D<T>*> fields ) 00074 { 00075 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00076 for (pluint iField=0; iField<fields.size(); ++iField) { 00077 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00078 } 00079 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), atomicBlocks ); 00080 } 00081 00082 template<typename T> 00083 void integrateProcessingFunctional(ScalarFieldBoxProcessingFunctional3D<T>* functional, 00084 Box3D domain, 00085 std::vector<ScalarField3D<T>*> fields, plint level ) 00086 { 00087 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00088 for (pluint iField=0; iField<fields.size(); ++iField) { 00089 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00090 } 00091 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00092 atomicBlocks, level ); 00093 } 00094 00095 00096 /* *************** TensorFieldBoxProcessing3D ******************************* */ 00097 00098 template<typename T, int nDim> 00099 void applyProcessingFunctional ( 00100 TensorFieldBoxProcessingFunctional3D<T,nDim>* functional, 00101 Box3D domain, 00102 std::vector<TensorField3D<T,nDim>*> fields ) 00103 { 00104 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00105 for (pluint iField=0; iField<fields.size(); ++iField) { 00106 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00107 } 00108 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), atomicBlocks ); 00109 } 00110 00111 template<typename T, int nDim> 00112 void integrateProcessingFunctional ( 00113 TensorFieldBoxProcessingFunctional3D<T,nDim>* functional, 00114 Box3D domain, 00115 std::vector<TensorField3D<T,nDim>*> fields, plint level ) 00116 { 00117 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00118 for (pluint iField=0; iField<fields.size(); ++iField) { 00119 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00120 } 00121 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00122 atomicBlocks, level ); 00123 } 00124 00125 /* *************** NTensorFieldBoxProcessing3D ******************************* */ 00126 00127 template<typename T> 00128 void applyProcessingFunctional ( 00129 NTensorFieldBoxProcessingFunctional3D<T>* functional, 00130 Box3D domain, 00131 std::vector<NTensorField3D<T>*> fields ) 00132 { 00133 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00134 for (pluint iField=0; iField<fields.size(); ++iField) { 00135 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00136 } 00137 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), atomicBlocks ); 00138 } 00139 00140 template<typename T> 00141 void integrateProcessingFunctional ( 00142 NTensorFieldBoxProcessingFunctional3D<T>* functional, 00143 Box3D domain, 00144 std::vector<NTensorField3D<T>*> fields, plint level ) 00145 { 00146 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00147 for (pluint iField=0; iField<fields.size(); ++iField) { 00148 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00149 } 00150 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00151 atomicBlocks, level ); 00152 } 00153 00154 /* *************** BoxProcessing3D_L ******************************************* */ 00155 00156 template<typename T, template<typename U> class Descriptor> 00157 void applyProcessingFunctional(BoxProcessingFunctional3D_L<T,Descriptor>* functional, 00158 Box3D domain, BlockLattice3D<T,Descriptor>& lattice) 00159 { 00160 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), lattice ); 00161 } 00162 00163 template<typename T, template<typename U> class Descriptor> 00164 void integrateProcessingFunctional ( 00165 BoxProcessingFunctional3D_L<T,Descriptor>* functional, 00166 Box3D domain, BlockLattice3D<T,Descriptor>& lattice, plint level ) 00167 { 00168 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), lattice, level ); 00169 } 00170 00171 00172 /* *************** BoxProcessing3D_S ******************************************* */ 00173 00174 template<typename T> 00175 void applyProcessingFunctional(BoxProcessingFunctional3D_S<T>* functional, 00176 Box3D domain, ScalarField3D<T>& field) 00177 { 00178 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), field ); 00179 } 00180 00181 template<typename T> 00182 void integrateProcessingFunctional(BoxProcessingFunctional3D_S<T>* functional, 00183 Box3D domain, ScalarField3D<T>& field, plint level) 00184 { 00185 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), field, level ); 00186 } 00187 00188 00189 /* *************** BoxProcessing3D_T ******************************************* */ 00190 00191 template<typename T, int nDim> 00192 void applyProcessingFunctional(BoxProcessingFunctional3D_T<T,nDim>* functional, 00193 Box3D domain, TensorField3D<T,nDim>& field) 00194 { 00195 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), field ); 00196 } 00197 00198 template<typename T, int nDim> 00199 void integrateProcessingFunctional(BoxProcessingFunctional3D_T<T,nDim>* functional, 00200 Box3D domain, TensorField3D<T,nDim>& field, 00201 plint level) 00202 { 00203 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), field, level ); 00204 } 00205 00206 /* *************** BoxProcessing3D_N ******************************************* */ 00207 00208 template<typename T> 00209 void applyProcessingFunctional(BoxProcessingFunctional3D_N<T>* functional, 00210 Box3D domain, NTensorField3D<T>& field) 00211 { 00212 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), field ); 00213 } 00214 00215 template<typename T> 00216 void integrateProcessingFunctional(BoxProcessingFunctional3D_N<T>* functional, 00217 Box3D domain, NTensorField3D<T>& field, 00218 plint level) 00219 { 00220 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), field, level ); 00221 } 00222 00223 /* *************** BoxProcessing3D_LL******************************************* */ 00224 00225 template<typename T1, template<typename U1> class Descriptor1, 00226 typename T2, template<typename U2> class Descriptor2> 00227 void applyProcessingFunctional ( 00228 BoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 00229 Box3D domain, 00230 BlockLattice3D<T1,Descriptor1>& lattice1, 00231 BlockLattice3D<T2,Descriptor2>& lattice2 ) 00232 { 00233 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00234 lattice1, lattice2 ); 00235 } 00236 00237 template<typename T1, template<typename U1> class Descriptor1, 00238 typename T2, template<typename U2> class Descriptor2> 00239 void integrateProcessingFunctional ( 00240 BoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional, Box3D domain, 00241 BlockLattice3D<T1,Descriptor1>& lattice1, 00242 BlockLattice3D<T2,Descriptor2>& lattice2, plint level ) 00243 { 00244 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00245 lattice1, lattice2, level ); 00246 } 00247 00248 00249 /* *************** BoxProcessing3D_SS ****************************************** */ 00250 00251 template<typename T1, typename T2> 00252 void applyProcessingFunctional(BoxProcessingFunctional3D_SS<T1,T2>* functional, 00253 Box3D domain, 00254 ScalarField3D<T1>& field1, 00255 ScalarField3D<T2>& field2 ) 00256 { 00257 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00258 field1, field2 ); 00259 } 00260 00261 template<typename T1, typename T2> 00262 void integrateProcessingFunctional(BoxProcessingFunctional3D_SS<T1,T2>* functional, 00263 Box3D domain, 00264 ScalarField3D<T1>& field1, 00265 ScalarField3D<T2>& field2, plint level) 00266 { 00267 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00268 field1, field2, level ); 00269 } 00270 00271 00272 /* *************** BoxProcessing3D_TT ****************************************** */ 00273 00274 template<typename T1, int nDim1, typename T2, int nDim2> 00275 void applyProcessingFunctional ( 00276 BoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional, 00277 Box3D domain, 00278 TensorField3D<T1,nDim1>& field1, 00279 TensorField3D<T2,nDim2>& field2 ) 00280 { 00281 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00282 field1, field2 ); 00283 } 00284 00285 template<typename T1, int nDim1, typename T2, int nDim2> 00286 void integrateProcessingFunctional ( 00287 BoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional, 00288 Box3D domain, 00289 TensorField3D<T1,nDim1>& field1, 00290 TensorField3D<T2,nDim2>& field2, plint level) 00291 { 00292 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00293 field1, field2, level ); 00294 } 00295 00296 00297 /* *************** BoxProcessing3D_NN ****************************************** */ 00298 00299 template<typename T1, typename T2> 00300 void applyProcessingFunctional ( 00301 BoxProcessingFunctional3D_NN<T1,T2>* functional, 00302 Box3D domain, 00303 NTensorField3D<T1>& field1, 00304 NTensorField3D<T2>& field2 ) 00305 { 00306 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00307 field1, field2 ); 00308 } 00309 00310 template<typename T1, typename T2> 00311 void integrateProcessingFunctional ( 00312 BoxProcessingFunctional3D_NN<T1,T2>* functional, 00313 Box3D domain, 00314 NTensorField3D<T1>& field1, 00315 NTensorField3D<T2>& field2, plint level) 00316 { 00317 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00318 field1, field2, level ); 00319 } 00320 00321 00322 /* *************** BoxProcessing3D_ST ****************************************** */ 00323 00324 template<typename T1, typename T2, int nDim> 00325 void applyProcessingFunctional(BoxProcessingFunctional3D_ST<T1,T2,nDim>* functional, 00326 Box3D domain, 00327 ScalarField3D<T1>& field1, 00328 TensorField3D<T2,nDim>& field2 ) 00329 { 00330 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00331 field1, field2 ); 00332 } 00333 00334 template<typename T1, typename T2, int nDim> 00335 void integrateProcessingFunctional(BoxProcessingFunctional3D_ST<T1,T2,nDim>* functional, 00336 Box3D domain, 00337 ScalarField3D<T1>& field1, 00338 TensorField3D<T2,nDim>& field2, plint level) 00339 { 00340 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00341 field1, field2, level ); 00342 } 00343 00344 00345 /* *************** BoxProcessing3D_SN ****************************************** */ 00346 00347 template<typename T1, typename T2> 00348 void applyProcessingFunctional(BoxProcessingFunctional3D_SN<T1,T2>* functional, 00349 Box3D domain, 00350 ScalarField3D<T1>& field1, 00351 NTensorField3D<T2>& field2 ) 00352 { 00353 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00354 field1, field2 ); 00355 } 00356 00357 template<typename T1, typename T2> 00358 void integrateProcessingFunctional(BoxProcessingFunctional3D_SN<T1,T2>* functional, 00359 Box3D domain, 00360 ScalarField3D<T1>& field1, 00361 NTensorField3D<T2>& field2, plint level) 00362 { 00363 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00364 field1, field2, level ); 00365 } 00366 00367 00368 /* *************** BoxProcessing3D_LS ****************************************** */ 00369 00370 template<typename T1, template<typename U> class Descriptor, typename T2> 00371 void applyProcessingFunctional ( 00372 BoxProcessingFunctional3D_LS<T1,Descriptor,T2>* functional, 00373 Box3D domain, 00374 BlockLattice3D<T1,Descriptor>& lattice, 00375 ScalarField3D<T2>& field ) 00376 { 00377 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00378 lattice, field ); 00379 } 00380 00381 template<typename T1, template<typename U> class Descriptor, typename T2> 00382 void integrateProcessingFunctional ( 00383 BoxProcessingFunctional3D_LS<T1,Descriptor,T2>* functional, 00384 Box3D domain, 00385 BlockLattice3D<T1,Descriptor>& lattice, 00386 ScalarField3D<T2>& field, plint level ) 00387 { 00388 addInternalProcessor( BoxProcessorGenerator3D(functional, domain), 00389 lattice, field, level ); 00390 } 00391 00392 00393 /* *************** BoxProcessing3D_LT ****************************************** */ 00394 00395 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00396 void applyProcessingFunctional ( 00397 BoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional, 00398 Box3D domain, 00399 BlockLattice3D<T1,Descriptor>& lattice, 00400 TensorField3D<T2,nDim>& field ) 00401 { 00402 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00403 lattice, field ); 00404 } 00405 00406 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00407 void integrateProcessingFunctional ( 00408 BoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional, 00409 Box3D domain, 00410 BlockLattice3D<T1,Descriptor>& lattice, 00411 TensorField3D<T2,nDim>& field, plint level ) 00412 { 00413 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00414 lattice, field ); 00415 } 00416 00417 /* *************** BoxProcessing3D_LN ****************************************** */ 00418 00419 template<typename T1, template<typename U> class Descriptor, typename T2> 00420 void applyProcessingFunctional ( 00421 BoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional, 00422 Box3D domain, 00423 BlockLattice3D<T1,Descriptor>& lattice, 00424 NTensorField3D<T2>& field ) 00425 { 00426 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00427 lattice, field ); 00428 } 00429 00430 template<typename T1, template<typename U> class Descriptor, typename T2> 00431 void integrateProcessingFunctional ( 00432 BoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional, 00433 Box3D domain, 00434 BlockLattice3D<T1,Descriptor>& lattice, 00435 NTensorField3D<T2>& field, plint level ) 00436 { 00437 executeDataProcessor( BoxProcessorGenerator3D(functional, domain), 00438 lattice, field ); 00439 } 00440 00441 /* *************** LatticeDotProcessing3D ****************************************** */ 00442 00443 template<typename T, template<typename U> class Descriptor> 00444 void applyProcessingFunctional ( 00445 LatticeDotProcessingFunctional3D<T,Descriptor>* functional, 00446 DotList3D const& dotList, 00447 std::vector<BlockLattice3D<T,Descriptor>*> lattices ) 00448 { 00449 std::vector<AtomicBlock3D*> atomicBlocks(lattices.size()); 00450 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00451 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock3D*>(lattices[iLattice]); 00452 } 00453 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), atomicBlocks ); 00454 } 00455 00456 00457 template<typename T, template<typename U> class Descriptor> 00458 void integrateProcessingFunctional ( 00459 LatticeDotProcessingFunctional3D<T,Descriptor>* functional, 00460 DotList3D const& dotList, 00461 std::vector<BlockLattice3D<T,Descriptor>*> lattices, plint level ) 00462 { 00463 std::vector<AtomicBlock3D*> atomicBlocks(lattices.size()); 00464 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00465 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock3D*>(lattices[iLattice]); 00466 } 00467 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00468 atomicBlocks, level ); 00469 } 00470 00471 00472 /* *************** ScalarFieldDotProcessing3D ****************************************** */ 00473 00474 template<typename T> 00475 void applyProcessingFunctional(ScalarFieldDotProcessingFunctional3D<T>* functional, 00476 DotList3D const& dotList, 00477 std::vector<ScalarField3D<T>*> fields ) 00478 { 00479 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00480 for (pluint iField=0; iField<fields.size(); ++iField) { 00481 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00482 } 00483 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), atomicBlocks ); 00484 } 00485 00486 00487 template<typename T> 00488 void integrateProcessingFunctional(ScalarFieldDotProcessingFunctional3D<T>* functional, 00489 DotList3D const& dotList, 00490 std::vector<ScalarField3D<T>*> fields, plint level ) 00491 { 00492 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00493 for (pluint iField=0; iField<fields.size(); ++iField) { 00494 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00495 } 00496 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00497 atomicBlocks, level ); 00498 } 00499 00500 00501 /* *************** TensorFieldDotProcessing3D ****************************************** */ 00502 00503 template<typename T, int nDim> 00504 void applyProcessingFunctional ( 00505 TensorFieldDotProcessingFunctional3D<T,nDim>* functional, 00506 DotList3D const& dotList, 00507 std::vector<TensorField3D<T,nDim>*> fields ) 00508 { 00509 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00510 for (pluint iField=0; iField<fields.size(); ++iField) { 00511 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00512 } 00513 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), atomicBlocks ); 00514 } 00515 00516 template<typename T, int nDim> 00517 void integrateProcessingFunctional ( 00518 TensorFieldDotProcessingFunctional3D<T,nDim>* functional, 00519 DotList3D const& dotList, 00520 std::vector<TensorField3D<T,nDim>*> fields, plint level ) 00521 { 00522 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00523 for (pluint iField=0; iField<fields.size(); ++iField) { 00524 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00525 } 00526 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00527 atomicBlocks, level ); 00528 } 00529 00530 /* *************** NTensorFieldDotProcessing3D ****************************************** */ 00531 00532 template<typename T> 00533 void applyProcessingFunctional ( 00534 NTensorFieldDotProcessingFunctional3D<T>* functional, 00535 DotList3D const& dotList, 00536 std::vector<NTensorField3D<T>*> fields ) 00537 { 00538 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00539 for (pluint iField=0; iField<fields.size(); ++iField) { 00540 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00541 } 00542 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), atomicBlocks ); 00543 } 00544 00545 template<typename T> 00546 void integrateProcessingFunctional ( 00547 NTensorFieldDotProcessingFunctional3D<T>* functional, 00548 DotList3D const& dotList, 00549 std::vector<NTensorField3D<T>*> fields, plint level ) 00550 { 00551 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00552 for (pluint iField=0; iField<fields.size(); ++iField) { 00553 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00554 } 00555 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00556 atomicBlocks, level ); 00557 } 00558 00559 /* *************** DotProcessing3D_L ******************************************* */ 00560 00561 template<typename T, template<typename U> class Descriptor> 00562 void applyProcessingFunctional(DotProcessingFunctional3D_L<T,Descriptor>* functional, 00563 DotList3D const& dotList, 00564 BlockLattice3D<T,Descriptor>& lattice) 00565 { 00566 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), lattice ); 00567 } 00568 00569 template<typename T, template<typename U> class Descriptor> 00570 void integrateProcessingFunctional(DotProcessingFunctional3D_L<T,Descriptor>* functional, 00571 DotList3D const& dotList, 00572 BlockLattice3D<T,Descriptor>& lattice, plint level) 00573 { 00574 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), lattice, level ); 00575 } 00576 00577 00578 /* *************** DotProcessing3D_S ******************************************* */ 00579 00580 template<typename T> 00581 void applyProcessingFunctional(DotProcessingFunctional3D_S<T>* functional, 00582 DotList3D const& dotList, ScalarField3D<T>& field) 00583 { 00584 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), field ); 00585 } 00586 00587 template<typename T> 00588 void integrateProcessingFunctional(DotProcessingFunctional3D_S<T>* functional, 00589 DotList3D const& dotList, ScalarField3D<T>& field, 00590 plint level) 00591 { 00592 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), field, level ); 00593 } 00594 00595 00596 /* *************** DotProcessing3D_T ******************************************* */ 00597 00598 template<typename T, int nDim> 00599 void applyProcessingFunctional(DotProcessingFunctional3D_T<T,nDim>* functional, 00600 DotList3D const& dotList, 00601 TensorField3D<T,nDim>& field) 00602 { 00603 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), field ); 00604 } 00605 00606 template<typename T, int nDim> 00607 void integrateProcessingFunctional(DotProcessingFunctional3D_T<T,nDim>* functional, 00608 DotList3D const& dotList, 00609 TensorField3D<T,nDim>& field, plint level) 00610 { 00611 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), field, level ); 00612 } 00613 00614 00615 /* *************** DotProcessing3D_N ******************************************* */ 00616 00617 template<typename T> 00618 void applyProcessingFunctional(DotProcessingFunctional3D_N<T>* functional, 00619 DotList3D const& dotList, 00620 NTensorField3D<T>& field) 00621 { 00622 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), field ); 00623 } 00624 00625 template<typename T> 00626 void integrateProcessingFunctional(DotProcessingFunctional3D_N<T>* functional, 00627 DotList3D const& dotList, 00628 NTensorField3D<T>& field, plint level) 00629 { 00630 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), field, level ); 00631 } 00632 00633 00634 /* *************** DotProcessing3D_LL******************************************* */ 00635 00636 template<typename T1, template<typename U1> class Descriptor1, 00637 typename T2, template<typename U2> class Descriptor2> 00638 void applyProcessingFunctional ( 00639 DotProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 00640 DotList3D const& dotList, 00641 BlockLattice3D<T1,Descriptor1>& lattice1, 00642 BlockLattice3D<T2,Descriptor2>& lattice2 ) 00643 { 00644 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00645 lattice1, lattice2 ); 00646 } 00647 00648 template<typename T1, template<typename U1> class Descriptor1, 00649 typename T2, template<typename U2> class Descriptor2> 00650 void integrateProcessingFunctional ( 00651 DotProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 00652 DotList3D const& dotList, 00653 BlockLattice3D<T1,Descriptor1>& lattice1, 00654 BlockLattice3D<T2,Descriptor2>& lattice2, plint level ) 00655 { 00656 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00657 lattice1, lattice2, level ); 00658 } 00659 00660 00661 /* *************** DotProcessing3D_SS ****************************************** */ 00662 00663 template<typename T1, typename T2> 00664 void applyProcessingFunctional ( 00665 DotProcessingFunctional3D_SS<T1,T2>* functional, 00666 DotList3D const& dotList, 00667 ScalarField3D<T1>& field1, 00668 ScalarField3D<T2>& field2 ) 00669 { 00670 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00671 field1, field2 ); 00672 } 00673 00674 template<typename T1, typename T2> 00675 void integrateProcessingFunctional(DotProcessingFunctional3D_SS<T1,T2>* functional, 00676 DotList3D const& dotList, 00677 ScalarField3D<T1>& field1, 00678 ScalarField3D<T2>& field2, plint level) 00679 { 00680 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00681 field1, field2, level ); 00682 } 00683 00684 00685 /* *************** DotProcessing3D_TT ****************************************** */ 00686 00687 template<typename T1, int nDim1, typename T2, int nDim2> 00688 void applyProcessingFunctional ( 00689 DotProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional, 00690 DotList3D const& dotList, 00691 TensorField3D<T1,nDim1>& field1, 00692 TensorField3D<T2,nDim2>& field2 ) 00693 { 00694 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00695 field1, field2 ); 00696 } 00697 00698 template<typename T1, int nDim1, typename T2, int nDim2> 00699 void integrateProcessingFunctional ( 00700 DotProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional, 00701 DotList3D const& dotList, 00702 TensorField3D<T1,nDim1>& field1, 00703 TensorField3D<T2,nDim2>& field2, plint level ) 00704 { 00705 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00706 field1, field2, level ); 00707 } 00708 00709 00710 /* *************** DotProcessing3D_NN ****************************************** */ 00711 00712 template<typename T1, typename T2> 00713 void applyProcessingFunctional ( 00714 DotProcessingFunctional3D_NN<T1,T2>* functional, 00715 DotList3D const& dotList, 00716 NTensorField3D<T1>& field1, 00717 NTensorField3D<T2>& field2 ) 00718 { 00719 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00720 field1, field2 ); 00721 } 00722 00723 template<typename T1, typename T2> 00724 void integrateProcessingFunctional ( 00725 DotProcessingFunctional3D_NN<T1,T2>* functional, 00726 DotList3D const& dotList, 00727 NTensorField3D<T1>& field1, 00728 NTensorField3D<T2>& field2, plint level ) 00729 { 00730 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00731 field1, field2, level ); 00732 } 00733 00734 00735 /* *************** DotProcessing3D_ST ****************************************** */ 00736 00737 template<typename T1, typename T2, int nDim> 00738 void applyProcessingFunctional(DotProcessingFunctional3D_ST<T1,T2,nDim>* functional, 00739 DotList3D const& dotList, 00740 ScalarField3D<T1>& field1, 00741 TensorField3D<T2,nDim>& field2 ) 00742 { 00743 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00744 field1, field2 ); 00745 } 00746 00747 template<typename T1, typename T2, int nDim> 00748 void integrateProcessingFunctional(DotProcessingFunctional3D_ST<T1,T2,nDim>* functional, 00749 DotList3D const& dotList, 00750 ScalarField3D<T1>& field1, 00751 TensorField3D<T2,nDim>& field2, plint level) 00752 { 00753 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00754 field1, field2, level ); 00755 } 00756 00757 00758 /* *************** DotProcessing3D_SN ****************************************** */ 00759 00760 template<typename T1, typename T2> 00761 void applyProcessingFunctional(DotProcessingFunctional3D_SN<T1,T2>* functional, 00762 DotList3D const& dotList, 00763 ScalarField3D<T1>& field1, 00764 NTensorField3D<T2>& field2 ) 00765 { 00766 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00767 field1, field2 ); 00768 } 00769 00770 template<typename T1, typename T2> 00771 void integrateProcessingFunctional(DotProcessingFunctional3D_SN<T1,T2>* functional, 00772 DotList3D const& dotList, 00773 ScalarField3D<T1>& field1, 00774 NTensorField3D<T2>& field2, plint level) 00775 { 00776 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00777 field1, field2, level ); 00778 } 00779 00780 00781 /* *************** DotProcessing3D_LS ****************************************** */ 00782 00783 template<typename T1, template<typename U> class Descriptor, typename T2> 00784 void applyProcessingFunctional ( 00785 DotProcessingFunctional3D_LS<T1,Descriptor,T2>* functional, 00786 DotList3D const& dotList, 00787 BlockLattice3D<T1,Descriptor>& lattice, 00788 ScalarField3D<T2>& field ) 00789 { 00790 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00791 lattice, field ); 00792 } 00793 00794 template<typename T1, template<typename U> class Descriptor, typename T2> 00795 void integrateProcessingFunctional ( 00796 DotProcessingFunctional3D_LS<T1,Descriptor,T2>* functional, 00797 DotList3D const& dotList, 00798 BlockLattice3D<T1,Descriptor>& lattice, 00799 ScalarField3D<T2>& field, plint level ) 00800 { 00801 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00802 lattice, field, level ); 00803 } 00804 00805 00806 /* *************** DotProcessing3D_LT ****************************************** */ 00807 00808 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00809 void applyProcessingFunctional ( 00810 DotProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional, 00811 DotList3D const& dotList, 00812 BlockLattice3D<T1,Descriptor>& lattice, 00813 TensorField3D<T2,nDim>& field ) 00814 { 00815 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00816 lattice, field ); 00817 } 00818 00819 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00820 void integrateProcessingFunctional ( 00821 DotProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional, 00822 DotList3D const& dotList, 00823 BlockLattice3D<T1,Descriptor>& lattice, 00824 TensorField3D<T2,nDim>& field, plint level) 00825 { 00826 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00827 lattice, field, level ); 00828 } 00829 00830 00831 /* *************** DotProcessing3D_LN ****************************************** */ 00832 00833 template<typename T1, template<typename U> class Descriptor, typename T2> 00834 void applyProcessingFunctional ( 00835 DotProcessingFunctional3D_LN<T1,Descriptor,T2>* functional, 00836 DotList3D const& dotList, 00837 BlockLattice3D<T1,Descriptor>& lattice, 00838 NTensorField3D<T2>& field ) 00839 { 00840 executeDataProcessor( DotProcessorGenerator3D(functional, dotList), 00841 lattice, field ); 00842 } 00843 00844 template<typename T1, template<typename U> class Descriptor, typename T2> 00845 void integrateProcessingFunctional ( 00846 DotProcessingFunctional3D_LN<T1,Descriptor,T2>* functional, 00847 DotList3D const& dotList, 00848 BlockLattice3D<T1,Descriptor>& lattice, 00849 NTensorField3D<T2>& field, plint level) 00850 { 00851 addInternalProcessor( DotProcessorGenerator3D(functional, dotList), 00852 lattice, field, level ); 00853 } 00854 00855 00856 /* *************** BoundedLatticeBoxProcessing3D **************************** */ 00857 00858 template<typename T, template<typename U> class Descriptor> 00859 void applyProcessingFunctional ( 00860 BoundedLatticeBoxProcessingFunctional3D<T,Descriptor>* functional, 00861 Box3D domain, 00862 std::vector<BlockLattice3D<T,Descriptor>*> lattices, 00863 plint boundaryWidth ) 00864 { 00865 std::vector<AtomicBlock3D*> atomicBlocks(lattices.size()); 00866 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00867 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock3D*>(lattices[iLattice]); 00868 } 00869 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00870 } 00871 00872 template<typename T, template<typename U> class Descriptor> 00873 void integrateProcessingFunctional ( 00874 BoundedLatticeBoxProcessingFunctional3D<T,Descriptor>* functional, 00875 Box3D domain, 00876 std::vector<BlockLattice3D<T,Descriptor>*> lattices, 00877 plint boundaryWidth, plint level ) 00878 { 00879 std::vector<AtomicBlock3D*> atomicBlocks(lattices.size()); 00880 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00881 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock3D*>(lattices[iLattice]); 00882 } 00883 integrateProcessingFunctional(functional, domain, atomicBlocks, 00884 boundaryWidth, level); 00885 } 00886 00887 00888 /* *************** BoundedScalarFieldBoxProcessing3D ************************ */ 00889 00890 template<typename T> 00891 void applyProcessingFunctional ( 00892 BoundedScalarFieldBoxProcessingFunctional3D<T>* functional, 00893 Box3D domain, 00894 std::vector<ScalarField3D<T>*> fields, 00895 plint boundaryWidth ) 00896 { 00897 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00898 for (pluint iField=0; iField<fields.size(); ++iField) { 00899 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00900 } 00901 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00902 } 00903 00904 template<typename T> 00905 void integrateProcessingFunctional ( 00906 BoundedScalarFieldBoxProcessingFunctional3D<T>* functional, 00907 Box3D domain, 00908 std::vector<ScalarField3D<T>*> fields, 00909 plint boundaryWidth, plint level ) 00910 { 00911 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00912 for (pluint iField=0; iField<fields.size(); ++iField) { 00913 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00914 } 00915 integrateProcessingFunctional(functional, domain, atomicBlocks, 00916 boundaryWidth, level); 00917 } 00918 00919 00920 /* *************** BoundedTensorFieldBoxProcessing3D ************************ */ 00921 00922 template<typename T, int nDim> 00923 void applyProcessingFunctional ( 00924 BoundedTensorFieldBoxProcessingFunctional3D<T,nDim>* functional, 00925 Box3D domain, 00926 std::vector<TensorField3D<T,nDim>*> fields, plint boundaryWidth ) 00927 { 00928 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00929 for (pluint iField=0; iField<fields.size(); ++iField) { 00930 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00931 } 00932 applyProcessingFunctional(functional, domain, 00933 atomicBlocks, boundaryWidth); 00934 } 00935 00936 template<typename T, int nDim> 00937 void integrateProcessingFunctional ( 00938 BoundedTensorFieldBoxProcessingFunctional3D<T,nDim>* functional, 00939 Box3D domain, 00940 std::vector<TensorField3D<T,nDim>*> fields, 00941 plint boundaryWidth, plint level ) 00942 { 00943 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00944 for (pluint iField=0; iField<fields.size(); ++iField) { 00945 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00946 } 00947 integrateProcessingFunctional(functional, domain, 00948 atomicBlocks, boundaryWidth, level); 00949 } 00950 00951 /* *************** BoundedNTensorFieldBoxProcessing3D ************************ */ 00952 00953 template<typename T> 00954 void applyProcessingFunctional ( 00955 BoundedNTensorFieldBoxProcessingFunctional3D<T>* functional, 00956 Box3D domain, 00957 std::vector<NTensorField3D<T>*> fields, plint boundaryWidth ) 00958 { 00959 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00960 for (pluint iField=0; iField<fields.size(); ++iField) { 00961 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00962 } 00963 applyProcessingFunctional(functional, domain, 00964 atomicBlocks, boundaryWidth); 00965 } 00966 00967 template<typename T> 00968 void integrateProcessingFunctional ( 00969 BoundedNTensorFieldBoxProcessingFunctional3D<T>* functional, 00970 Box3D domain, 00971 std::vector<NTensorField3D<T>*> fields, 00972 plint boundaryWidth, plint level ) 00973 { 00974 std::vector<AtomicBlock3D*> atomicBlocks(fields.size()); 00975 for (pluint iField=0; iField<fields.size(); ++iField) { 00976 atomicBlocks[iField] = dynamic_cast<AtomicBlock3D*>(fields[iField]); 00977 } 00978 integrateProcessingFunctional(functional, domain, 00979 atomicBlocks, boundaryWidth, level); 00980 } 00981 00982 /* *************** BoundedBoxProcessing3D_L ********************************* */ 00983 00984 template<typename T, template<typename U> class Descriptor> 00985 void applyProcessingFunctional ( 00986 BoundedBoxProcessingFunctional3D_L<T,Descriptor>* functional, 00987 Box3D domain, BlockLattice3D<T,Descriptor>& lattice, plint boundaryWidth ) 00988 { 00989 std::vector<AtomicBlock3D*> atomicBlocks(1); 00990 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice); 00991 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00992 } 00993 00994 template<typename T, template<typename U> class Descriptor> 00995 void integrateProcessingFunctional ( 00996 BoundedBoxProcessingFunctional3D_L<T,Descriptor>* functional, 00997 Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00998 plint boundaryWidth, plint level ) 00999 { 01000 std::vector<AtomicBlock3D*> atomicBlocks(1); 01001 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice); 01002 integrateProcessingFunctional(functional, domain, atomicBlocks, 01003 boundaryWidth, level); 01004 } 01005 01006 01007 /* *************** BoundedBoxProcessing3D_S ********************************* */ 01008 01009 template<typename T> 01010 void applyProcessingFunctional ( 01011 BoundedBoxProcessingFunctional3D_S<T>* functional, 01012 Box3D domain, ScalarField3D<T>& field, plint boundaryWidth ) 01013 { 01014 std::vector<AtomicBlock3D*> atomicBlocks(1); 01015 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field); 01016 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01017 } 01018 01019 template<typename T> 01020 void integrateProcessingFunctional ( 01021 BoundedBoxProcessingFunctional3D_S<T>* functional, 01022 Box3D domain, ScalarField3D<T>& field, 01023 plint boundaryWidth, plint level ) 01024 { 01025 std::vector<AtomicBlock3D*> atomicBlocks(1); 01026 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field); 01027 integrateProcessingFunctional(functional, domain, atomicBlocks, 01028 boundaryWidth, level); 01029 } 01030 01031 01032 /* *************** BoundedBoxProcessing3D_T ********************************* */ 01033 01034 template<typename T, int nDim> 01035 void applyProcessingFunctional ( 01036 BoundedBoxProcessingFunctional3D_T<T,nDim>* functional, 01037 Box3D domain, TensorField3D<T,nDim>& field, plint boundaryWidth ) 01038 { 01039 std::vector<AtomicBlock3D*> atomicBlocks(1); 01040 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field); 01041 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01042 } 01043 01044 template<typename T, int nDim> 01045 void integrateProcessingFunctional ( 01046 BoundedBoxProcessingFunctional3D_T<T,nDim>* functional, 01047 Box3D domain, TensorField3D<T,nDim>& field, 01048 plint boundaryWidth, plint level ) 01049 { 01050 std::vector<AtomicBlock3D*> atomicBlocks(1); 01051 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field); 01052 integrateProcessingFunctional(functional, domain, atomicBlocks, 01053 boundaryWidth, level); 01054 } 01055 01056 /* *************** BoundedBoxProcessing3D_N ********************************* */ 01057 01058 template<typename T> 01059 void applyProcessingFunctional ( 01060 BoundedBoxProcessingFunctional3D_N<T>* functional, 01061 Box3D domain, NTensorField3D<T>& field, plint boundaryWidth ) 01062 { 01063 std::vector<AtomicBlock3D*> atomicBlocks(1); 01064 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field); 01065 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01066 } 01067 01068 template<typename T> 01069 void integrateProcessingFunctional ( 01070 BoundedBoxProcessingFunctional3D_N<T>* functional, 01071 Box3D domain, NTensorField3D<T>& field, 01072 plint boundaryWidth, plint level ) 01073 { 01074 std::vector<AtomicBlock3D*> atomicBlocks(1); 01075 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field); 01076 integrateProcessingFunctional(functional, domain, atomicBlocks, 01077 boundaryWidth, level); 01078 } 01079 01080 /* *************** BoundedBoxProcessing3D_LL********************************* */ 01081 01082 template<typename T1, template<typename U1> class Descriptor1, 01083 typename T2, template<typename U2> class Descriptor2> 01084 void applyProcessingFunctional ( 01085 BoundedBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 01086 Box3D domain, 01087 BlockLattice3D<T1,Descriptor1>& lattice1, 01088 BlockLattice3D<T2,Descriptor2>& lattice2, 01089 plint boundaryWidth ) 01090 { 01091 std::vector<AtomicBlock3D*> atomicBlocks(2); 01092 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice1); 01093 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&lattice2); 01094 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01095 } 01096 01097 template<typename T1, template<typename U1> class Descriptor1, 01098 typename T2, template<typename U2> class Descriptor2> 01099 void integrateProcessingFunctional ( 01100 BoundedBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 01101 Box3D domain, 01102 BlockLattice3D<T1,Descriptor1>& lattice1, 01103 BlockLattice3D<T2,Descriptor2>& lattice2, 01104 plint boundaryWidth, plint level ) 01105 { 01106 std::vector<AtomicBlock3D*> atomicBlocks(2); 01107 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice1); 01108 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&lattice2); 01109 integrateProcessingFunctional(functional, domain, atomicBlocks, 01110 boundaryWidth, level); 01111 } 01112 01113 01114 /* *************** BoundedBoxProcessing3D_SS ****************************************** */ 01115 01116 template<typename T1, typename T2> 01117 void applyProcessingFunctional ( 01118 BoundedBoxProcessingFunctional3D_SS<T1,T2>* functional, 01119 Box3D domain, 01120 ScalarField3D<T1>& field1, 01121 ScalarField3D<T2>& field2, 01122 plint boundaryWidth ) 01123 { 01124 std::vector<AtomicBlock3D*> atomicBlocks(2); 01125 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01126 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01127 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01128 } 01129 01130 template<typename T1, typename T2> 01131 void integrateProcessingFunctional ( 01132 BoundedBoxProcessingFunctional3D_SS<T1,T2>* functional, 01133 Box3D domain, 01134 ScalarField3D<T1>& field1, 01135 ScalarField3D<T2>& field2, 01136 plint boundaryWidth, plint level ) 01137 { 01138 std::vector<AtomicBlock3D*> atomicBlocks(2); 01139 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01140 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01141 integrateProcessingFunctional(functional, domain, atomicBlocks, 01142 boundaryWidth, level); 01143 } 01144 01145 /* *************** BoundedBoxProcessing3D_TT ********************************** */ 01146 01147 template<typename T1, int nDim1, typename T2, int nDim2> 01148 void applyProcessingFunctional ( 01149 BoundedBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional, 01150 Box3D domain, 01151 TensorField3D<T1,nDim1>& field1, 01152 TensorField3D<T2,nDim2>& field2, 01153 plint boundaryWidth ) 01154 { 01155 std::vector<AtomicBlock3D*> atomicBlocks(2); 01156 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01157 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01158 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01159 } 01160 01161 template<typename T1, int nDim1, typename T2, int nDim2> 01162 void integrateProcessingFunctional ( 01163 BoundedBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional, 01164 Box3D domain, 01165 TensorField3D<T1,nDim1>& field1, 01166 TensorField3D<T2,nDim2>& field2, 01167 plint boundaryWidth, plint level ) 01168 { 01169 std::vector<AtomicBlock3D*> atomicBlocks(2); 01170 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01171 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01172 integrateProcessingFunctional(functional, domain, atomicBlocks, 01173 boundaryWidth, level); 01174 } 01175 01176 01177 /* *************** BoundedBoxProcessing3D_NN ********************************** */ 01178 01179 template<typename T1, typename T2> 01180 void applyProcessingFunctional ( 01181 BoundedBoxProcessingFunctional3D_NN<T1,T2>* functional, 01182 Box3D domain, 01183 NTensorField3D<T1>& field1, 01184 NTensorField3D<T2>& field2, 01185 plint boundaryWidth ) 01186 { 01187 std::vector<AtomicBlock3D*> atomicBlocks(2); 01188 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01189 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01190 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01191 } 01192 01193 template<typename T1, typename T2> 01194 void integrateProcessingFunctional ( 01195 BoundedBoxProcessingFunctional3D_NN<T1,T2>* functional, 01196 Box3D domain, 01197 NTensorField3D<T1>& field1, 01198 NTensorField3D<T2>& field2, 01199 plint boundaryWidth, plint level ) 01200 { 01201 std::vector<AtomicBlock3D*> atomicBlocks(2); 01202 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01203 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01204 integrateProcessingFunctional(functional, domain, atomicBlocks, 01205 boundaryWidth, level); 01206 } 01207 01208 01209 /* *************** BoundedBoxProcessing3D_ST ******************************** */ 01210 01211 template<typename T1, typename T2, int nDim> 01212 void applyProcessingFunctional ( 01213 BoundedBoxProcessingFunctional3D_ST<T1,T2,nDim>* functional, 01214 Box3D domain, 01215 ScalarField3D<T1>& field1, 01216 TensorField3D<T2,nDim>& field2, 01217 plint boundaryWidth ) 01218 { 01219 std::vector<AtomicBlock3D*> atomicBlocks(2); 01220 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01221 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01222 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01223 } 01224 01225 template<typename T1, typename T2, int nDim> 01226 void integrateProcessingFunctional ( 01227 BoundedBoxProcessingFunctional3D_ST<T1,T2,nDim>* functional, 01228 Box3D domain, 01229 ScalarField3D<T1>& field1, 01230 TensorField3D<T2,nDim>& field2, 01231 plint boundaryWidth, plint level ) 01232 { 01233 std::vector<AtomicBlock3D*> atomicBlocks(2); 01234 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01235 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01236 integrateProcessingFunctional(functional, domain, atomicBlocks, 01237 boundaryWidth, level); 01238 } 01239 01240 01241 /* *************** BoundedBoxProcessing3D_SN ******************************** */ 01242 01243 template<typename T1, typename T2> 01244 void applyProcessingFunctional ( 01245 BoundedBoxProcessingFunctional3D_SN<T1,T2>* functional, 01246 Box3D domain, 01247 ScalarField3D<T1>& field1, 01248 NTensorField3D<T2>& field2, 01249 plint boundaryWidth ) 01250 { 01251 std::vector<AtomicBlock3D*> atomicBlocks(2); 01252 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01253 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01254 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01255 } 01256 01257 template<typename T1, typename T2> 01258 void integrateProcessingFunctional ( 01259 BoundedBoxProcessingFunctional3D_SN<T1,T2>* functional, 01260 Box3D domain, 01261 ScalarField3D<T1>& field1, 01262 NTensorField3D<T2>& field2, 01263 plint boundaryWidth, plint level ) 01264 { 01265 std::vector<AtomicBlock3D*> atomicBlocks(2); 01266 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&field1); 01267 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field2); 01268 integrateProcessingFunctional(functional, domain, atomicBlocks, 01269 boundaryWidth, level); 01270 } 01271 01272 01273 /* *************** BoundedBoxProcessing3D_LS ******************************** */ 01274 01275 template<typename T1, template<typename U> class Descriptor, typename T2> 01276 void applyProcessingFunctional ( 01277 BoundedBoxProcessingFunctional3D_LS<T1,Descriptor,T2>* functional, 01278 Box3D domain, 01279 BlockLattice3D<T1,Descriptor>& lattice, 01280 ScalarField3D<T2>& field, 01281 plint boundaryWidth ) 01282 { 01283 std::vector<AtomicBlock3D*> atomicBlocks(2); 01284 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice); 01285 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field); 01286 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01287 } 01288 01289 template<typename T1, template<typename U> class Descriptor, typename T2> 01290 void integrateProcessingFunctional ( 01291 BoundedBoxProcessingFunctional3D_LS<T1,Descriptor,T2>* functional, 01292 Box3D domain, 01293 BlockLattice3D<T1,Descriptor>& lattice, 01294 ScalarField3D<T2>& field, 01295 plint boundaryWidth, plint level ) 01296 { 01297 std::vector<AtomicBlock3D*> atomicBlocks(2); 01298 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice); 01299 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field); 01300 integrateProcessingFunctional(functional, domain, atomicBlocks, 01301 boundaryWidth, level); 01302 } 01303 01304 01305 /* *************** BoundedBoxProcessing3D_LT ****************************************** */ 01306 01307 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01308 void applyProcessingFunctional ( 01309 BoundedBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional, 01310 Box3D domain, 01311 BlockLattice3D<T1,Descriptor>& lattice, 01312 TensorField3D<T2,nDim>& field, 01313 plint boundaryWidth ) 01314 { 01315 std::vector<AtomicBlock3D*> atomicBlocks(2); 01316 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice); 01317 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field); 01318 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01319 } 01320 01321 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01322 void integrateProcessingFunctional ( 01323 BoundedBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional, 01324 Box3D domain, 01325 BlockLattice3D<T1,Descriptor>& lattice, 01326 TensorField3D<T2,nDim>& field, 01327 plint boundaryWidth, plint level ) 01328 { 01329 std::vector<AtomicBlock3D*> atomicBlocks(2); 01330 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice); 01331 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field); 01332 integrateProcessingFunctional(functional, domain, atomicBlocks, 01333 boundaryWidth, level); 01334 } 01335 01336 /* *************** BoundedBoxProcessing3D_LN ****************************************** */ 01337 01338 template<typename T1, template<typename U> class Descriptor, typename T2> 01339 void applyProcessingFunctional ( 01340 BoundedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional, 01341 Box3D domain, 01342 BlockLattice3D<T1,Descriptor>& lattice, 01343 NTensorField3D<T2>& field, 01344 plint boundaryWidth ) 01345 { 01346 std::vector<AtomicBlock3D*> atomicBlocks(2); 01347 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice); 01348 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field); 01349 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01350 } 01351 01352 template<typename T1, template<typename U> class Descriptor, typename T2> 01353 void integrateProcessingFunctional ( 01354 BoundedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional, 01355 Box3D domain, 01356 BlockLattice3D<T1,Descriptor>& lattice, 01357 NTensorField3D<T2>& field, 01358 plint boundaryWidth, plint level ) 01359 { 01360 std::vector<AtomicBlock3D*> atomicBlocks(2); 01361 atomicBlocks[0] = dynamic_cast<AtomicBlock3D*>(&lattice); 01362 atomicBlocks[1] = dynamic_cast<AtomicBlock3D*>(&field); 01363 integrateProcessingFunctional(functional, domain, atomicBlocks, 01364 boundaryWidth, level); 01365 } 01366 01367 } // namespace plb 01368 01369 #endif // DATA_PROCESSOR_WRAPPER_3D_HH