$treeview $search $mathjax
Palabos  Version 1.1
$projectbrief
$projectbrief
$searchbox

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