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

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