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