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

multiDataProcessorWrapper3D.h

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 
00039 #ifndef MULTI_DATA_PROCESSOR_WRAPPER_3D_H
00040 #define MULTI_DATA_PROCESSOR_WRAPPER_3D_H
00041 
00042 #include "atomicBlock/dataProcessingFunctional3D.h"
00043 
00044 namespace plb {
00045 
00046 class MultiBlock3D;
00047 template<typename T, template<typename U> class Descriptor> class MultiBlockLattice3D;
00048 template<typename T> class MultiScalarField3D;
00049 template<typename T, int nDim> class MultiTensorField3D;
00050 template<typename T> class MultiNTensorField3D;
00051 
00052 /* *************** Generic wrappers, boxed functionals ********************** */
00053 
00056 void applyProcessingFunctional(BoxProcessingFunctional3D* functional,
00057                                Box3D domain,
00058                                std::vector<MultiBlock3D*> multiBlocks);
00059 
00062 void integrateProcessingFunctional(BoxProcessingFunctional3D* functional,
00063                                    Box3D domain,
00064                                    std::vector<MultiBlock3D*> multiBlocks,
00065                                    plint level=0);
00066 
00070 template<typename T, template<typename U> class Descriptor>
00071 void applyProcessingFunctional (
00072         LatticeBoxProcessingFunctional3D<T,Descriptor>* functional,
00073         Box3D domain,
00074         std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices );
00075 
00079 template<typename T, template<typename U> class Descriptor>
00080 void integrateProcessingFunctional (
00081         LatticeBoxProcessingFunctional3D<T,Descriptor>* functional,
00082         Box3D domain,
00083         std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices, plint level=0 );
00084 
00088 template<typename T>
00089 void applyProcessingFunctional (
00090         ScalarFieldBoxProcessingFunctional3D<T>* functional,
00091         Box3D domain,
00092         std::vector<MultiScalarField3D<T>*> fields );
00093 
00097 template<typename T>
00098 void integrateProcessingFunctional (
00099         ScalarFieldBoxProcessingFunctional3D<T>* functional,
00100         Box3D domain,
00101         std::vector<MultiScalarField3D<T>*> fields, plint level=0 );
00102 
00106 template<typename T, int nDim>
00107 void applyProcessingFunctional (
00108         TensorFieldBoxProcessingFunctional3D<T,nDim>* functional,
00109         Box3D domain,
00110         std::vector<MultiTensorField3D<T,nDim>*> fields );
00111 
00115 template<typename T, int nDim>
00116 void integrateProcessingFunctional (
00117         TensorFieldBoxProcessingFunctional3D<T,nDim>* functional,
00118         Box3D domain,
00119         std::vector<MultiTensorField3D<T,nDim>*> fields, plint level=0 );
00120 
00121 
00125 template<typename T>
00126 void applyProcessingFunctional (
00127         NTensorFieldBoxProcessingFunctional3D<T>* functional,
00128         Box3D domain,
00129         std::vector<MultiNTensorField3D<T>*> fields );
00130 
00134 template<typename T>
00135 void applyProcessingFunctional (
00136         MaskedNTensorFieldBoxProcessingFunctional3D<T>* functional,
00137         Box3D domain,
00138         std::vector<MultiNTensorField3D<T>*> fields,
00139         MultiNTensorField3D<int>& mask);
00140 
00144 template<typename T>
00145 void integrateProcessingFunctional (
00146         NTensorFieldBoxProcessingFunctional3D<T>* functional,
00147         Box3D domain,
00148         std::vector<MultiNTensorField3D<T>*> fields, plint level=0 );
00149 
00153 template<typename T>
00154 void integrateProcessingFunctional (
00155         MaskedNTensorFieldBoxProcessingFunctional3D<T>* functional,
00156         Box3D domain,
00157         std::vector<MultiNTensorField3D<T>*> fields,
00158         MultiNTensorField3D<int>& mask,
00159         plint level=0 );
00160 
00161 
00162 /* *************** Typed wrappers with a single argument, boxed functionals * */
00163 
00164 template<typename T, template<typename U> class Descriptor>
00165 void applyProcessingFunctional(BoxProcessingFunctional3D_L<T,Descriptor>* functional,
00166                                Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice);
00167 
00168 template<typename T, template<typename U> class Descriptor>
00169 void integrateProcessingFunctional(BoxProcessingFunctional3D_L<T,Descriptor>* functional,
00170                                    Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00171                                    plint level=0);
00172 
00173 template<typename T, template<typename U> class Descriptor>
00174 void applyProcessingFunctional(MaskedBoxProcessingFunctional3D_L<T,Descriptor>* functional,
00175                                Box3D domain,
00176                                MultiBlockLattice3D<T,Descriptor>& lattice,
00177                                MultiNTensorField3D<int>& mask);
00178 
00179 template<typename T, template<typename U> class Descriptor>
00180 void integrateProcessingFunctional(BoxProcessingFunctional3D_L<T,Descriptor>* functional,
00181                                    Box3D domain,
00182                                    MultiBlockLattice3D<T,Descriptor>& lattice,
00183                                    MultiNTensorField3D<int>& mask,
00184                                    plint level=0);
00185 
00186 template<typename T>
00187 void applyProcessingFunctional(BoxProcessingFunctional3D_S<T>* functional,
00188                                Box3D domain, MultiScalarField3D<T>& field);
00189 template<typename T>
00190 void integrateProcessingFunctional(BoxProcessingFunctional3D_S<T>* functional,
00191                                    Box3D domain, MultiScalarField3D<T>& field,
00192                                    plint level=0);
00193 
00194 template<typename T, int nDim>
00195 void applyProcessingFunctional(BoxProcessingFunctional3D_T<T,nDim>* functional,
00196                                Box3D domain, MultiTensorField3D<T,nDim>& field);
00197 template<typename T, int nDim>
00198 void integrateProcessingFunctional(BoxProcessingFunctional3D_T<T,nDim>* functional,
00199                                    Box3D domain, MultiTensorField3D<T,nDim>& field,
00200                                    plint level=0);
00201 
00202 template<typename T>
00203 void applyProcessingFunctional(BoxProcessingFunctional3D_N<T>* functional,
00204                                Box3D domain, MultiNTensorField3D<T>& field);
00205 template<typename T>
00206 void integrateProcessingFunctional(BoxProcessingFunctional3D_N<T>* functional,
00207                                    Box3D domain, MultiNTensorField3D<T>& field,
00208                                    plint level=0);
00209 
00210 template<typename T>
00211 void applyProcessingFunctional(MaskedBoxProcessingFunctional3D_N<T>* functional,
00212                                Box3D domain,
00213                                MultiNTensorField3D<T>& field,
00214                                MultiNTensorField3D<int>& mask);
00215 template<typename T>
00216 void integrateProcessingFunctional(MaskedBoxProcessingFunctional3D_N<T>* functional,
00217                                    Box3D domain,
00218                                    MultiNTensorField3D<T>& field,
00219                                    MultiNTensorField3D<int>& mask,
00220                                    plint level=0);
00221 
00222 /* *************** Typed wrappers with two arguments ************************ */
00223 
00224 template<typename T1, template<typename U1> class Descriptor1,
00225          typename T2, template<typename U2> class Descriptor2>
00226 void applyProcessingFunctional (
00227         BoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00228         Box3D domain,
00229         MultiBlockLattice3D<T1,Descriptor1>& lattice1,
00230         MultiBlockLattice3D<T2,Descriptor2>& lattice2 );
00231 
00232 template<typename T1, template<typename U1> class Descriptor1,
00233          typename T2, template<typename U2> class Descriptor2>
00234 void integrateProcessingFunctional (
00235         BoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00236         Box3D domain,
00237         MultiBlockLattice3D<T1,Descriptor1>& lattice1,
00238         MultiBlockLattice3D<T2,Descriptor2>& lattice2, plint level=0 );
00239 
00240 template<typename T1, typename T2>
00241 void applyProcessingFunctional(BoxProcessingFunctional3D_SS<T1,T2>* functional,
00242                                Box3D domain,
00243                                MultiScalarField3D<T1>& field1,
00244                                MultiScalarField3D<T2>& field2);
00245 
00246 template<typename T1, typename T2>
00247 void integrateProcessingFunctional(BoxProcessingFunctional3D_SS<T1,T2>* functional,
00248                                    Box3D domain,
00249                                    MultiScalarField3D<T1>& field1,
00250                                    MultiScalarField3D<T2>& field2, plint level=0);
00251 
00252 template<typename T1, int nDim1, typename T2, int nDim2>
00253 void applyProcessingFunctional (
00254         BoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional,
00255         Box3D domain,
00256         MultiTensorField3D<T1,nDim1>& field1,
00257         MultiTensorField3D<T2,nDim2>& field2 );
00258 
00259 template<typename T1, int nDim1, typename T2, int nDim2>
00260 void integrateProcessingFunctional (
00261         BoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional, Box3D domain,
00262         MultiTensorField3D<T1,nDim1>& field1,
00263         MultiTensorField3D<T2,nDim2>& field2, plint level=0 );
00264 
00265 template<typename T1, typename T2>
00266 void applyProcessingFunctional (
00267         BoxProcessingFunctional3D_NN<T1,T2>* functional,
00268         Box3D domain,
00269         MultiNTensorField3D<T1>& field1,
00270         MultiNTensorField3D<T2>& field2 );
00271 
00272 template<typename T1, typename T2>
00273 void integrateProcessingFunctional (
00274         BoxProcessingFunctional3D_NN<T1,T2>* functional, Box3D domain,
00275         MultiNTensorField3D<T1>& field1,
00276         MultiNTensorField3D<T2>& field2, plint level=0 );
00277 
00278 template<typename T1, typename T2>
00279 void applyProcessingFunctional (
00280         MaskedBoxProcessingFunctional3D_NN<T1,T2>* functional,
00281         Box3D domain,
00282         MultiNTensorField3D<T1>& field1,
00283         MultiNTensorField3D<T2>& field2,
00284         MultiNTensorField3D<int>& mask );
00285 
00286 template<typename T1, typename T2>
00287 void integrateProcessingFunctional (
00288         MaskedBoxProcessingFunctional3D_NN<T1,T2>* functional, Box3D domain,
00289         MultiNTensorField3D<T1>& field1,
00290         MultiNTensorField3D<T2>& field2,
00291         MultiNTensorField3D<int>& mask,
00292         plint level=0 );
00293 
00294 template<typename T1, typename T2, int nDim>
00295 void applyProcessingFunctional(BoxProcessingFunctional3D_ST<T1,T2,nDim>* functional,
00296                                Box3D domain,
00297                                MultiScalarField3D<T1>& field1,
00298                                MultiTensorField3D<T2,nDim>& field2);
00299 
00300 template<typename T1, typename T2, int nDim>
00301 void integrateProcessingFunctional(BoxProcessingFunctional3D_ST<T1,T2,nDim>* functional,
00302                                    Box3D domain,
00303                                    MultiScalarField3D<T1>& field1,
00304                                    MultiTensorField3D<T2,nDim>& field2, plint level=0);
00305 
00306 template<typename T1, typename T2>
00307 void applyProcessingFunctional(BoxProcessingFunctional3D_SN<T1,T2>* functional,
00308                                Box3D domain,
00309                                MultiScalarField3D<T1>& field1,
00310                                MultiNTensorField3D<T2>& field2);
00311 
00312 template<typename T1, typename T2>
00313 void integrateProcessingFunctional(BoxProcessingFunctional3D_SN<T1,T2>* functional,
00314                                    Box3D domain,
00315                                    MultiScalarField3D<T1>& field1,
00316                                    MultiNTensorField3D<T2>& field2, plint level=0);
00317 
00318 template<typename T1, template<typename U> class Descriptor, typename T2>
00319 void applyProcessingFunctional (
00320         BoxProcessingFunctional3D_LS<T1,Descriptor,T2>* functional,
00321         Box3D domain,
00322         MultiBlockLattice3D<T1,Descriptor>& lattice,
00323         MultiScalarField3D<T2>& field );
00324 
00325 template<typename T1, template<typename U> class Descriptor, typename T2>
00326 void integrateProcessingFunctional (
00327         BoxProcessingFunctional3D_LS<T1,Descriptor,T2>* functional,
00328         Box3D domain,
00329         MultiBlockLattice3D<T1,Descriptor>& lattice,
00330         MultiScalarField3D<T2>& field, plint level=0 );
00331 
00332 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00333 void applyProcessingFunctional (
00334         BoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional,
00335         Box3D domain,
00336         MultiBlockLattice3D<T1,Descriptor>& lattice,
00337         MultiTensorField3D<T2,nDim>& field );
00338 
00339 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00340 void integrateProcessingFunctional (
00341         BoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional,
00342         Box3D domain,
00343         MultiBlockLattice3D<T1,Descriptor>& lattice,
00344         MultiTensorField3D<T2,nDim>& field, plint level=0 );
00345 
00346 template<typename T1, template<typename U> class Descriptor, typename T2>
00347 void applyProcessingFunctional (
00348         BoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional,
00349         Box3D domain,
00350         MultiBlockLattice3D<T1,Descriptor>& lattice,
00351         MultiNTensorField3D<T2>& field );
00352 
00353 template<typename T1, template<typename U> class Descriptor, typename T2>
00354 void integrateProcessingFunctional (
00355         BoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional,
00356         Box3D domain,
00357         MultiBlockLattice3D<T1,Descriptor>& lattice,
00358         MultiNTensorField3D<T2>& field, plint level=0 );
00359 
00360 template<typename T1, template<typename U> class Descriptor, typename T2>
00361 void applyProcessingFunctional (
00362         MaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional,
00363         Box3D domain,
00364         MultiBlockLattice3D<T1,Descriptor>& lattice,
00365         MultiNTensorField3D<T2>& field,
00366         MultiNTensorField3D<int>& mask );
00367 
00368 template<typename T1, template<typename U> class Descriptor, typename T2>
00369 void integrateProcessingFunctional (
00370         MaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional,
00371         Box3D domain,
00372         MultiBlockLattice3D<T1,Descriptor>& lattice,
00373         MultiNTensorField3D<T2>& field,
00374         MultiNTensorField3D<int>& mask,
00375         plint level=0 );
00376 
00377 
00378 /* *************** Generic wrappers, dotted functionals ********************* */
00379 
00380 void applyProcessingFunctional(DotProcessingFunctional3D* functional,
00381                                DotList3D const& dotList,
00382                                std::vector<MultiBlock3D*> multiBlocks);
00383 
00384 void integrateProcessingFunctional(DotProcessingFunctional3D* functional,
00385                                    DotList3D const& dotList,
00386                                    std::vector<MultiBlock3D*> multiBlocks,
00387                                    plint level=0);
00388 
00389 template<typename T, template<typename U> class Descriptor>
00390 void applyProcessingFunctional (
00391         LatticeDotProcessingFunctional3D<T,Descriptor>* functional,
00392         DotList3D const& dotList,
00393         std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices );
00394 
00395 template<typename T, template<typename U> class Descriptor>
00396 void integrateProcessingFunctional (
00397         LatticeDotProcessingFunctional3D<T,Descriptor>* functional,
00398         DotList3D const& dotList,
00399         std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices, plint level=0 );
00400 
00401 template<typename T>
00402 void applyProcessingFunctional (
00403         ScalarFieldDotProcessingFunctional3D<T>* functional,
00404         DotList3D const& dotList,
00405         std::vector<MultiScalarField3D<T>*> fields );
00406 
00407 template<typename T>
00408 void integrateProcessingFunctional (
00409         ScalarFieldDotProcessingFunctional3D<T>* functional,
00410         DotList3D const& dotList,
00411         std::vector<MultiScalarField3D<T>*> fields, plint level=0 );
00412 
00413 template<typename T, int nDim>
00414 void applyProcessingFunctional (
00415         TensorFieldDotProcessingFunctional3D<T,nDim>* functional,
00416         DotList3D const& dotList,
00417         std::vector<MultiTensorField3D<T,nDim>*> fields );
00418 
00419 template<typename T, int nDim>
00420 void integrateProcessingFunctional (
00421         TensorFieldDotProcessingFunctional3D<T,nDim>* functional,
00422         DotList3D const& dotList,
00423         std::vector<MultiTensorField3D<T,nDim>*> fields, plint level=0 );
00424 
00425 
00426 /* *************** Typed wrappers with a single argument, dotted functionals* */
00427 
00428 template<typename T, template<typename U> class Descriptor>
00429 void applyProcessingFunctional (
00430         DotProcessingFunctional3D_L<T,Descriptor>* functional,
00431         DotList3D const& dotList,
00432         MultiBlockLattice3D<T,Descriptor>& lattice );
00433 
00434 template<typename T, template<typename U> class Descriptor>
00435 void integrateProcessingFunctional (
00436         DotProcessingFunctional3D_L<T,Descriptor>* functional,
00437         DotList3D const& dotList,
00438         MultiBlockLattice3D<T,Descriptor>& lattice, plint level=0 );
00439 
00440 template<typename T>
00441 void applyProcessingFunctional(DotProcessingFunctional3D_S<T>* functional,
00442                                DotList3D const& dotList,
00443                                MultiScalarField3D<T>& field);
00444 
00445 template<typename T>
00446 void integrateProcessingFunctional(DotProcessingFunctional3D_S<T>* functional,
00447                                    DotList3D const& dotList,
00448                                    MultiScalarField3D<T>& field, plint level=0);
00449 
00450 template<typename T, int nDim>
00451 void applyProcessingFunctional(DotProcessingFunctional3D_T<T,nDim>* functional,
00452                                DotList3D const& dotList,
00453                                MultiTensorField3D<T,nDim>& field);
00454 
00455 template<typename T, int nDim>
00456 void integrateProcessingFunctional(DotProcessingFunctional3D_T<T,nDim>* functional,
00457                                    DotList3D const& dotList,
00458                                    MultiTensorField3D<T,nDim>& field, plint level=0);
00459 
00460 /* *************** Typed wrappers with two arguments, dotted functionals* *****/
00461 
00463 template<typename T1, template<typename U1> class Descriptor1,
00464          typename T2, template<typename U2> class Descriptor2>
00465 void applyProcessingFunctional (
00466         DotProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00467         DotList3D const& dotList,
00468         MultiBlockLattice3D<T1,Descriptor1>& lattice1,
00469         MultiBlockLattice3D<T2,Descriptor2>& lattice2 );
00470 
00471 template<typename T1, template<typename U1> class Descriptor1,
00472          typename T2, template<typename U2> class Descriptor2>
00473 void integrateProcessingFunctional (
00474         DotProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00475         DotList3D const& dotList,
00476         MultiBlockLattice3D<T1,Descriptor1>& lattice1,
00477         MultiBlockLattice3D<T2,Descriptor2>& lattice2, plint level=0 );
00478 
00479 template<typename T1, typename T2>
00480 void applyProcessingFunctional(DotProcessingFunctional3D_SS<T1,T2>* functional,
00481                                DotList3D const& dotList,
00482                                MultiScalarField3D<T1>& field1,
00483                                MultiScalarField3D<T2>& field2);
00484 
00485 template<typename T1, typename T2>
00486 void integrateProcessingFunctional(DotProcessingFunctional3D_SS<T1,T2>* functional,
00487                                    DotList3D const& dotList,
00488                                    MultiScalarField3D<T1>& field1,
00489                                    MultiScalarField3D<T2>& field2, plint level=0);
00490 
00492 template<typename T1, int nDim1, typename T2, int nDim2>
00493 void applyProcessingFunctional (
00494         DotProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional,
00495         DotList3D const& dotList,
00496         MultiTensorField3D<T1,nDim1>& field1,
00497         MultiTensorField3D<T2,nDim2>& field2 );
00498 
00499 template<typename T1, int nDim1, typename T2, int nDim2>
00500 void integrateProcessingFunctional (
00501         DotProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional,
00502         DotList3D const& dotList,
00503         MultiTensorField3D<T1,nDim1>& field1,
00504         MultiTensorField3D<T2,nDim2>& field2, plint level=0 );
00505 
00506 template<typename T1, typename T2, int nDim>
00507 void applyProcessingFunctional (
00508         DotProcessingFunctional3D_ST<T1,T2,nDim>* functional,
00509         DotList3D const& dotList,
00510         MultiScalarField3D<T1>& field1,
00511         MultiTensorField3D<T2,nDim>& field2 );
00512 
00513 template<typename T1, typename T2, int nDim>
00514 void integrateProcessingFunctional (
00515         DotProcessingFunctional3D_ST<T1,T2,nDim>* functional,
00516         DotList3D const& dotList,
00517         MultiScalarField3D<T1>& field1,
00518         MultiTensorField3D<T2,nDim>& field2, plint level=0 );
00519 
00520 template<typename T1, template<typename U> class Descriptor, typename T2>
00521 void applyProcessingFunctional (
00522         DotProcessingFunctional3D_LS<T1,Descriptor,T2>* functional,
00523         DotList3D const& dotList,
00524         MultiBlockLattice3D<T1,Descriptor>& lattice,
00525         MultiScalarField3D<T2>& field );
00526 
00527 template<typename T1, template<typename U> class Descriptor, typename T2>
00528 void integrateProcessingFunctional (
00529         DotProcessingFunctional3D_LS<T1,Descriptor,T2>* functional,
00530         DotList3D const& dotList,
00531         MultiBlockLattice3D<T1,Descriptor>& lattice,
00532         MultiScalarField3D<T2>& field, plint level=0 );
00533 
00534 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00535 void applyProcessingFunctional (
00536         DotProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional,
00537         DotList3D const& dotList,
00538         MultiBlockLattice3D<T1,Descriptor>& lattice,
00539         MultiTensorField3D<T2,nDim>& field );
00540 
00541 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00542 void integrateProcessingFunctional (
00543         DotProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional,
00544         DotList3D const& dotList,
00545         MultiBlockLattice3D<T1,Descriptor>& lattice,
00546         MultiTensorField3D<T2,nDim>& field, plint level=0 );
00547 
00548 
00549 /* *************** Generic wrappers, bounded and boxed functionals ********** */
00550 
00551 void applyProcessingFunctional(BoundedBoxProcessingFunctional3D* functional,
00552                                Box3D domain, std::vector<MultiBlock3D*> multiBlocks,
00553                                plint boundaryWidth );
00554 
00555 void integrateProcessingFunctional (
00556         BoundedBoxProcessingFunctional3D* functional,
00557         Box3D domain, std::vector<MultiBlock3D*> multiBlocks,
00558         plint boundaryWidth, plint level=0 );
00559 
00560 
00561 template<typename T, template<typename U> class Descriptor>
00562 void applyProcessingFunctional (
00563         BoundedLatticeBoxProcessingFunctional3D<T,Descriptor>* functional,
00564         Box3D domain,
00565         std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices,
00566         plint boundaryWidth = Descriptor<T>::vicinity );
00567 
00568 template<typename T, template<typename U> class Descriptor>
00569 void integrateProcessingFunctional (
00570         BoundedLatticeBoxProcessingFunctional3D<T,Descriptor>* functional,
00571         Box3D domain, std::vector<MultiBlockLattice3D<T,Descriptor>*> lattices,
00572         plint boundaryWidth = Descriptor<T>::vicinity, plint level=0 );
00573 
00574 template<typename T>
00575 void applyProcessingFunctional (
00576         BoundedScalarFieldBoxProcessingFunctional3D<T>* functional,
00577         Box3D domain, std::vector<MultiScalarField3D<T>*> fields,
00578         plint boundaryWidth );
00579 
00580 template<typename T>
00581 void integrateProcessingFunctional (
00582         BoundedScalarFieldBoxProcessingFunctional3D<T>* functional,
00583         Box3D domain, std::vector<MultiScalarField3D<T>*> fields,
00584         plint boundaryWidth );
00585 
00586 template<typename T, int nDim>
00587 void applyProcessingFunctional (
00588         BoundedTensorFieldBoxProcessingFunctional3D<T,nDim>* functional,
00589         Box3D domain, std::vector<MultiTensorField3D<T,nDim>*> fields,
00590         plint boundaryWidth );
00591 
00592 template<typename T, int nDim>
00593 void integrateProcessingFunctional (
00594         BoundedTensorFieldBoxProcessingFunctional3D<T,nDim>* functional,
00595         Box3D domain,
00596         std::vector<MultiTensorField3D<T,nDim>*> fields, plint boundaryWidth );
00597 
00598 
00599 /* ** Typed wrappers with a single argument, bounded and boxed functionals * */
00600 
00601 template<typename T, template<typename U> class Descriptor>
00602 void applyProcessingFunctional (
00603         BoundedBoxProcessingFunctional3D_L<T,Descriptor>* functional,
00604         Box3D domain,
00605         MultiBlockLattice3D<T,Descriptor>& lattice,
00606         plint boundaryWidth = Descriptor<T>::vicinity );
00607 
00608 template<typename T, template<typename U> class Descriptor>
00609 void integrateProcessingFunctional (
00610         BoundedBoxProcessingFunctional3D_L<T,Descriptor>* functional,
00611         Box3D domain,
00612         MultiBlockLattice3D<T,Descriptor>& lattice,
00613         plint boundaryWidth = Descriptor<T>::vicinity, plint level=0 );
00614 
00615 template<typename T>
00616 void applyProcessingFunctional(BoundedBoxProcessingFunctional3D_S<T>* functional,
00617                                Box3D domain, MultiScalarField3D<T>& field,
00618                                plint boundaryWidth);
00619 
00620 template<typename T>
00621 void integrateProcessingFunctional(BoundedBoxProcessingFunctional3D_S<T>* functional,
00622                                    Box3D domain, MultiScalarField3D<T>& field,
00623                                    plint boundaryWidth, plint level=0);
00624 
00625 template<typename T, int nDim>
00626 void applyProcessingFunctional(BoundedBoxProcessingFunctional3D_T<T,nDim>* functional,
00627                                Box3D domain, MultiTensorField3D<T,nDim>& field,
00628                                plint boundaryWidth);
00629 
00630 template<typename T, int nDim>
00631 void integrateProcessingFunctional (
00632         BoundedBoxProcessingFunctional3D_T<T,nDim>* functional,
00633         Box3D domain,
00634         MultiTensorField3D<T,nDim>& field,
00635         plint boundaryWidth, plint level=0 );
00636 
00637 
00638 template<typename T>
00639 void applyProcessingFunctional(BoundedBoxProcessingFunctional3D_N<T>* functional,
00640                                Box3D domain, MultiNTensorField3D<T>& field,
00641                                plint boundaryWidth);
00642 
00643 template<typename T>
00644 void integrateProcessingFunctional (
00645         BoundedBoxProcessingFunctional3D_N<T>* functional,
00646         Box3D domain,
00647         MultiNTensorField3D<T>& field,
00648         plint boundaryWidth, plint level=0 );
00649 
00650 
00651 template<typename T>
00652 void applyProcessingFunctional(BoundedMaskedBoxProcessingFunctional3D_N<T>* functional,
00653                                Box3D domain,
00654                                MultiNTensorField3D<T>& field,
00655                                MultiNTensorField3D<int>& mask,
00656                                plint boundaryWidth);
00657 
00658 template<typename T>
00659 void integrateProcessingFunctional (
00660         BoundedMaskedBoxProcessingFunctional3D_N<T>* functional,
00661         Box3D domain,
00662         MultiNTensorField3D<T>& field,
00663         MultiNTensorField3D<int>& mask,
00664         plint boundaryWidth, plint level=0 );
00665 
00666 
00667 /* ** Typed wrappers with two arguments, bounded and boxed functionals *** */
00668 
00669 template<typename T1, template<typename U1> class Descriptor1,
00670          typename T2, template<typename U2> class Descriptor2>
00671 void applyProcessingFunctional (
00672         BoundedBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00673         Box3D domain,
00674         MultiBlockLattice3D<T1,Descriptor1>& lattice1,
00675         MultiBlockLattice3D<T2,Descriptor2>& lattice2,
00676         plint boundaryWidth = Descriptor1<T1>::vicinity );
00677 
00678 template<typename T1, template<typename U1> class Descriptor1,
00679          typename T2, template<typename U2> class Descriptor2>
00680 void integrateProcessingFunctional (
00681         BoundedBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00682         Box3D domain,
00683         MultiBlockLattice3D<T1,Descriptor1>& lattice1,
00684         MultiBlockLattice3D<T2,Descriptor2>& lattice2,
00685         plint boundaryWidth = Descriptor1<T1>::vicinity, plint level=0 );
00686 
00687 template<typename T1, typename T2>
00688 void applyProcessingFunctional (
00689         BoundedBoxProcessingFunctional3D_SS<T1,T2>* functional,
00690         Box3D domain,
00691         MultiScalarField3D<T1>& field1,
00692         MultiScalarField3D<T2>& field2,
00693         plint boundaryWidth );
00694 
00695 template<typename T1, typename T2>
00696 void integrateProcessingFunctional (
00697         BoundedBoxProcessingFunctional3D_SS<T1,T2>* functional,
00698         Box3D domain,
00699         MultiScalarField3D<T1>& field1,
00700         MultiScalarField3D<T2>& field2,
00701         plint boundaryWidth, plint level=0 );
00702 
00703 template<typename T1, int nDim1, typename T2, int nDim2>
00704 void applyProcessingFunctional (
00705         BoundedBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional,
00706         Box3D domain,
00707         MultiTensorField3D<T1,nDim1>& field1,
00708         MultiTensorField3D<T2,nDim2>& field2,
00709         plint boundaryWidth );
00710 
00711 template<typename T1, int nDim1, typename T2, int nDim2>
00712 void integrateProcessingFunctional (
00713         BoundedBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>* functional,
00714         Box3D domain,
00715         MultiTensorField3D<T1,nDim1>& field1,
00716         MultiTensorField3D<T2,nDim2>& field2,
00717         plint boundaryWidth, plint level=0 );
00718 
00719 template<typename T1, typename T2>
00720 void applyProcessingFunctional (
00721         BoundedBoxProcessingFunctional3D_NN<T1,T2>* functional,
00722         Box3D domain,
00723         MultiNTensorField3D<T1>& field1,
00724         MultiNTensorField3D<T2>& field2,
00725         plint boundaryWidth );
00726 
00727 template<typename T1, typename T2>
00728 void integrateProcessingFunctional (
00729         BoundedBoxProcessingFunctional3D_NN<T1,T2>* functional,
00730         Box3D domain,
00731         MultiNTensorField3D<T1>& field1,
00732         MultiNTensorField3D<T2>& field2,
00733         plint boundaryWidth, plint level=0 );
00734 
00735 template<typename T1, typename T2>
00736 void applyProcessingFunctional (
00737         BoundedMaskedBoxProcessingFunctional3D_NN<T1,T2>* functional,
00738         Box3D domain,
00739         MultiNTensorField3D<T1>& field1,
00740         MultiNTensorField3D<T2>& field2,
00741         MultiNTensorField3D<int>& mask,
00742         plint boundaryWidth );
00743 
00744 template<typename T1, typename T2>
00745 void integrateProcessingFunctional (
00746         BoundedMaskedBoxProcessingFunctional3D_NN<T1,T2>* functional,
00747         Box3D domain,
00748         MultiNTensorField3D<T1>& field1,
00749         MultiNTensorField3D<T2>& field2,
00750         MultiNTensorField3D<int>& mask,
00751         plint boundaryWidth, plint level=0 );
00752 
00753 template<typename T1, typename T2, int nDim>
00754 void applyProcessingFunctional (
00755         BoundedBoxProcessingFunctional3D_ST<T1,T2,nDim>* functional,
00756         Box3D domain,
00757         MultiScalarField3D<T1>& field1,
00758         MultiTensorField3D<T2,nDim>& field2,
00759         plint boundaryWidth );
00760 
00761 template<typename T1, typename T2, int nDim>
00762 void integrateProcessingFunctional (
00763         BoundedBoxProcessingFunctional3D_ST<T1,T2,nDim>* functional,
00764         Box3D domain,
00765         MultiScalarField3D<T1>& field1,
00766         MultiTensorField3D<T2,nDim>& field2,
00767         plint boundaryWidth, plint level=0 );
00768 
00769 template<typename T1, template<typename U> class Descriptor, typename T2>
00770 void applyProcessingFunctional (
00771         BoundedBoxProcessingFunctional3D_LS<T1,Descriptor,T2>* functional,
00772         Box3D domain,
00773         MultiBlockLattice3D<T1,Descriptor>& lattice,
00774         MultiScalarField3D<T2>& field,
00775         plint boundaryWidth = Descriptor<T1>::vicinity );
00776 
00777 template<typename T1, template<typename U> class Descriptor, typename T2>
00778 void integrateProcessingFunctional (
00779         BoundedBoxProcessingFunctional3D_LS<T1,Descriptor,T2>* functional,
00780         Box3D domain,
00781         MultiBlockLattice3D<T1,Descriptor>& lattice,
00782         MultiScalarField3D<T2>& field,
00783         plint boundaryWidth = Descriptor<T1>::vicinity, plint level=0 );
00784 
00785 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00786 void applyProcessingFunctional (
00787         BoundedBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional,
00788         Box3D domain,
00789         MultiBlockLattice3D<T1,Descriptor>& lattice,
00790         MultiTensorField3D<T2,nDim>& field,
00791         plint boundaryWidth = Descriptor<T1>::vicinity );
00792 
00793 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00794 void integrateProcessingFunctional (
00795         BoundedBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>* functional,
00796         Box3D domain,
00797         MultiBlockLattice3D<T1,Descriptor>& lattice,
00798         MultiTensorField3D<T2,nDim>& field,
00799         plint boundaryWidth = Descriptor<T1>::vicinity, plint level=0 );
00800 
00801 template<typename T1, template<typename U> class Descriptor, typename T2>
00802 void applyProcessingFunctional (
00803         BoundedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional,
00804         Box3D domain,
00805         MultiBlockLattice3D<T1,Descriptor>& lattice,
00806         MultiNTensorField3D<T2>& field,
00807         plint boundaryWidth = Descriptor<T1>::vicinity );
00808 
00809 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00810 void integrateProcessingFunctional (
00811         BoundedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional,
00812         Box3D domain,
00813         MultiBlockLattice3D<T1,Descriptor>& lattice,
00814         MultiNTensorField3D<T2>& field,
00815         plint boundaryWidth = Descriptor<T1>::vicinity, plint level=0 );
00816 
00817 template<typename T1, template<typename U> class Descriptor, typename T2>
00818 void applyProcessingFunctional (
00819         BoundedMaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional,
00820         Box3D domain,
00821         MultiBlockLattice3D<T1,Descriptor>& lattice,
00822         MultiNTensorField3D<T2>& field,
00823         MultiNTensorField3D<int>& mask,
00824         plint boundaryWidth = Descriptor<T1>::vicinity );
00825 
00826 template<typename T1, template<typename U> class Descriptor, typename T2>
00827 void integrateProcessingFunctional (
00828         BoundedMaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>* functional,
00829         Box3D domain,
00830         MultiBlockLattice3D<T1,Descriptor>& lattice,
00831         MultiNTensorField3D<T2>& field,
00832         MultiNTensorField3D<int>& mask,
00833         plint boundaryWidth = Descriptor<T1>::vicinity, plint level=0 );
00834 
00835 }  // namespace plb
00836 
00837 #endif  // MULTI_DATA_PROCESSOR_WRAPPER_3D_H