Palabos  Version 1.0
dataProcessorWrapper3D.hh
Go to the documentation of this file.
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