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

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