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

multiDataProcessorWrapper2D.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_2D_H
00040 #define MULTI_DATA_PROCESSOR_WRAPPER_2D_H
00041 
00042 #include "atomicBlock/dataProcessingFunctional2D.h"
00043 
00044 namespace plb {
00045 
00046 class MultiBlock2D;
00047 template<typename T, template<typename U> class Descriptor> class MultiBlockLattice2D;
00048 template<typename T> class MultiScalarField2D;
00049 template<typename T, int nDim> class MultiTensorField2D;
00050 template<typename T> class MultiNTensorField2D;
00051 
00052 /* *************** Generic wrappers, boxed functionals ********************** */
00053 
00056 void applyProcessingFunctional(BoxProcessingFunctional2D* functional,
00057                                Box2D domain,
00058                                std::vector<MultiBlock2D*> multiBlocks);
00059 
00062 void integrateProcessingFunctional(BoxProcessingFunctional2D* functional,
00063                                    Box2D domain,
00064                                    std::vector<MultiBlock2D*> multiBlocks,
00065                                    plint level=0);
00066 
00070 template<typename T, template<typename U> class Descriptor>
00071 void applyProcessingFunctional (
00072         LatticeBoxProcessingFunctional2D<T,Descriptor>* functional,
00073         Box2D domain,
00074         std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices );
00075 
00079 template<typename T, template<typename U> class Descriptor>
00080 void integrateProcessingFunctional (
00081         LatticeBoxProcessingFunctional2D<T,Descriptor>* functional,
00082         Box2D domain,
00083         std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices, plint level=0 );
00084 
00088 template<typename T>
00089 void applyProcessingFunctional (
00090         ScalarFieldBoxProcessingFunctional2D<T>* functional,
00091         Box2D domain,
00092         std::vector<MultiScalarField2D<T>*> fields );
00093 
00097 template<typename T>
00098 void integrateProcessingFunctional (
00099         ScalarFieldBoxProcessingFunctional2D<T>* functional,
00100         Box2D domain,
00101         std::vector<MultiScalarField2D<T>*> fields, plint level=0 );
00102 
00106 template<typename T, int nDim>
00107 void applyProcessingFunctional (
00108         TensorFieldBoxProcessingFunctional2D<T,nDim>* functional,
00109         Box2D domain,
00110         std::vector<MultiTensorField2D<T,nDim>*> fields );
00111 
00115 template<typename T, int nDim>
00116 void integrateProcessingFunctional (
00117         TensorFieldBoxProcessingFunctional2D<T,nDim>* functional,
00118         Box2D domain,
00119         std::vector<MultiTensorField2D<T,nDim>*> fields, plint level=0 );
00120 
00124 template<typename T>
00125 void applyProcessingFunctional (
00126         NTensorFieldBoxProcessingFunctional2D<T>* functional,
00127         Box2D domain,
00128         std::vector<MultiNTensorField2D<T>*> fields );
00129 
00133 template<typename T>
00134 void applyProcessingFunctional (
00135         MaskedNTensorFieldBoxProcessingFunctional2D<T>* functional,
00136         Box2D domain,
00137         std::vector<MultiNTensorField2D<T>*> fields,
00138         MultiNTensorField2D<int>& mask);
00139 
00143 template<typename T>
00144 void integrateProcessingFunctional (
00145         NTensorFieldBoxProcessingFunctional2D<T>* functional,
00146         Box2D domain,
00147         std::vector<MultiNTensorField2D<T>*> fields, plint level=0 );
00148 
00152 template<typename T>
00153 void integrateProcessingFunctional (
00154         MaskedNTensorFieldBoxProcessingFunctional2D<T>* functional,
00155         Box2D domain,
00156         std::vector<MultiNTensorField2D<T>*> fields,
00157         MultiNTensorField2D<int>& mask,
00158         plint level=0 );
00159 
00160 
00161 /* *************** Typed wrappers with a single argument, boxed functionals * */
00162 
00163 template<typename T, template<typename U> class Descriptor>
00164 void applyProcessingFunctional(BoxProcessingFunctional2D_L<T,Descriptor>* functional,
00165                                Box2D domain, MultiBlockLattice2D<T,Descriptor>& lattice);
00166 
00167 template<typename T, template<typename U> class Descriptor>
00168 void integrateProcessingFunctional(BoxProcessingFunctional2D_L<T,Descriptor>* functional,
00169                                    Box2D domain, MultiBlockLattice2D<T,Descriptor>& lattice,
00170                                    plint level=0);
00171 
00172 template<typename T, template<typename U> class Descriptor>
00173 void applyProcessingFunctional(MaskedBoxProcessingFunctional2D_L<T,Descriptor>* functional,
00174                                Box2D domain,
00175                                MultiBlockLattice2D<T,Descriptor>& lattice,
00176                                MultiNTensorField2D<int>& mask);
00177 
00178 template<typename T, template<typename U> class Descriptor>
00179 void integrateProcessingFunctional(MaskedBoxProcessingFunctional2D_L<T,Descriptor>* functional,
00180                                    Box2D domain,
00181                                    MultiBlockLattice2D<T,Descriptor>& lattice,
00182                                    MultiNTensorField2D<int>& mask,
00183                                    plint level=0);
00184 
00185 template<typename T>
00186 void applyProcessingFunctional(BoxProcessingFunctional2D_S<T>* functional,
00187                                Box2D domain, MultiScalarField2D<T>& field);
00188 template<typename T>
00189 void integrateProcessingFunctional(BoxProcessingFunctional2D_S<T>* functional,
00190                                    Box2D domain, MultiScalarField2D<T>& field,
00191                                    plint level=0);
00192 
00193 template<typename T, int nDim>
00194 void applyProcessingFunctional(BoxProcessingFunctional2D_T<T,nDim>* functional,
00195                                Box2D domain, MultiTensorField2D<T,nDim>& field);
00196 template<typename T, int nDim>
00197 void integrateProcessingFunctional(BoxProcessingFunctional2D_T<T,nDim>* functional,
00198                                    Box2D domain, MultiTensorField2D<T,nDim>& field,
00199                                    plint level=0);
00200 
00201 template<typename T>
00202 void applyProcessingFunctional(BoxProcessingFunctional2D_N<T>* functional,
00203                                Box2D domain, MultiNTensorField2D<T>& field);
00204 template<typename T>
00205 void integrateProcessingFunctional(BoxProcessingFunctional2D_N<T>* functional,
00206                                    Box2D domain, MultiNTensorField2D<T>& field,
00207                                    plint level=0);
00208 
00209 template<typename T>
00210 void applyProcessingFunctional(MaskedBoxProcessingFunctional2D_N<T>* functional,
00211                                Box2D domain,
00212                                MultiNTensorField2D<T>& field,
00213                                MultiNTensorField2D<int>& mask);
00214 template<typename T>
00215 void integrateProcessingFunctional(MaskedBoxProcessingFunctional2D_N<T>* functional,
00216                                    Box2D domain,
00217                                    MultiNTensorField2D<T>& field,
00218                                    MultiNTensorField2D<int>& mask,
00219                                    plint level=0);
00220 
00221 /* *************** Typed wrappers with two arguments ************************ */
00222 
00223 template<typename T1, template<typename U1> class Descriptor1,
00224          typename T2, template<typename U2> class Descriptor2>
00225 void applyProcessingFunctional (
00226         BoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00227         Box2D domain,
00228         MultiBlockLattice2D<T1,Descriptor1>& lattice1,
00229         MultiBlockLattice2D<T2,Descriptor2>& lattice2 );
00230 
00231 template<typename T1, template<typename U1> class Descriptor1,
00232          typename T2, template<typename U2> class Descriptor2>
00233 void integrateProcessingFunctional (
00234         BoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00235         Box2D domain,
00236         MultiBlockLattice2D<T1,Descriptor1>& lattice1,
00237         MultiBlockLattice2D<T2,Descriptor2>& lattice2, plint level=0 );
00238 
00239 template<typename T1, typename T2>
00240 void applyProcessingFunctional(BoxProcessingFunctional2D_SS<T1,T2>* functional,
00241                                Box2D domain,
00242                                MultiScalarField2D<T1>& field1,
00243                                MultiScalarField2D<T2>& field2);
00244 
00245 template<typename T1, typename T2>
00246 void integrateProcessingFunctional(BoxProcessingFunctional2D_SS<T1,T2>* functional,
00247                                    Box2D domain,
00248                                    MultiScalarField2D<T1>& field1,
00249                                    MultiScalarField2D<T2>& field2, plint level=0);
00250 
00251 template<typename T1, int nDim1, typename T2, int nDim2>
00252 void applyProcessingFunctional (
00253         BoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional,
00254         Box2D domain,
00255         MultiTensorField2D<T1,nDim1>& field1,
00256         MultiTensorField2D<T2,nDim2>& field2 );
00257 
00258 template<typename T1, int nDim1, typename T2, int nDim2>
00259 void integrateProcessingFunctional (
00260         BoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional, Box2D domain,
00261         MultiTensorField2D<T1,nDim1>& field1,
00262         MultiTensorField2D<T2,nDim2>& field2, plint level=0 );
00263 
00264 template<typename T1, typename T2>
00265 void applyProcessingFunctional (
00266         BoxProcessingFunctional2D_NN<T1,T2>* functional,
00267         Box2D domain,
00268         MultiNTensorField2D<T1>& field1,
00269         MultiNTensorField2D<T2>& field2 );
00270 
00271 template<typename T1, typename T2>
00272 void integrateProcessingFunctional (
00273         BoxProcessingFunctional2D_NN<T1,T2>* functional, Box2D domain,
00274         MultiNTensorField2D<T1>& field1,
00275         MultiNTensorField2D<T2>& field2, plint level=0 );
00276 
00277 template<typename T1, typename T2>
00278 void applyProcessingFunctional (
00279         MaskedBoxProcessingFunctional2D_NN<T1,T2>* functional,
00280         Box2D domain,
00281         MultiNTensorField2D<T1>& field1,
00282         MultiNTensorField2D<T2>& field2,
00283         MultiNTensorField2D<int>& mask );
00284 
00285 template<typename T1, typename T2>
00286 void integrateProcessingFunctional (
00287         MaskedBoxProcessingFunctional2D_NN<T1,T2>* functional, Box2D domain,
00288         MultiNTensorField2D<T1>& field1,
00289         MultiNTensorField2D<T2>& field2,
00290         MultiNTensorField2D<int>& mask,
00291         plint level=0 );
00292 
00293 template<typename T1, typename T2, int nDim>
00294 void applyProcessingFunctional(BoxProcessingFunctional2D_ST<T1,T2,nDim>* functional,
00295                                Box2D domain,
00296                                MultiScalarField2D<T1>& field1,
00297                                MultiTensorField2D<T2,nDim>& field2);
00298 
00299 template<typename T1, typename T2, int nDim>
00300 void integrateProcessingFunctional(BoxProcessingFunctional2D_ST<T1,T2,nDim>* functional,
00301                                    Box2D domain,
00302                                    MultiScalarField2D<T1>& field1,
00303                                    MultiTensorField2D<T2,nDim>& field2, plint level=0);
00304 
00305 template<typename T1, typename T2>
00306 void applyProcessingFunctional(BoxProcessingFunctional2D_SN<T1,T2>* functional,
00307                                Box2D domain,
00308                                MultiScalarField2D<T1>& field1,
00309                                MultiNTensorField2D<T2>& field2);
00310 
00311 template<typename T1, typename T2>
00312 void integrateProcessingFunctional(BoxProcessingFunctional2D_SN<T1,T2>* functional,
00313                                    Box2D domain,
00314                                    MultiScalarField2D<T1>& field1,
00315                                    MultiNTensorField2D<T2>& field2, plint level=0);
00316 
00317 template<typename T1, template<typename U> class Descriptor, typename T2>
00318 void applyProcessingFunctional (
00319         BoxProcessingFunctional2D_LS<T1,Descriptor,T2>* functional,
00320         Box2D domain,
00321         MultiBlockLattice2D<T1,Descriptor>& lattice,
00322         MultiScalarField2D<T2>& field );
00323 
00324 template<typename T1, template<typename U> class Descriptor, typename T2>
00325 void integrateProcessingFunctional (
00326         BoxProcessingFunctional2D_LS<T1,Descriptor,T2>* functional,
00327         Box2D domain,
00328         MultiBlockLattice2D<T1,Descriptor>& lattice,
00329         MultiScalarField2D<T2>& field, plint level=0 );
00330 
00331 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00332 void applyProcessingFunctional (
00333         BoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional,
00334         Box2D domain,
00335         MultiBlockLattice2D<T1,Descriptor>& lattice,
00336         MultiTensorField2D<T2,nDim>& field );
00337 
00338 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00339 void integrateProcessingFunctional (
00340         BoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional,
00341         Box2D domain,
00342         MultiBlockLattice2D<T1,Descriptor>& lattice,
00343         MultiTensorField2D<T2,nDim>& field, plint level=0 );
00344 
00345 template<typename T1, template<typename U> class Descriptor, typename T2>
00346 void applyProcessingFunctional (
00347         BoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00348         Box2D domain,
00349         MultiBlockLattice2D<T1,Descriptor>& lattice,
00350         MultiNTensorField2D<T2>& field );
00351 
00352 template<typename T1, template<typename U> class Descriptor, typename T2>
00353 void integrateProcessingFunctional (
00354         BoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00355         Box2D domain,
00356         MultiBlockLattice2D<T1,Descriptor>& lattice,
00357         MultiNTensorField2D<T2>& field, plint level=0 );
00358 
00359 template<typename T1, template<typename U> class Descriptor, typename T2>
00360 void applyProcessingFunctional (
00361         MaskedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00362         Box2D domain,
00363         MultiBlockLattice2D<T1,Descriptor>& lattice,
00364         MultiNTensorField2D<T2>& field,
00365         MultiNTensorField2D<int>& mask );
00366 
00367 template<typename T1, template<typename U> class Descriptor, typename T2>
00368 void integrateProcessingFunctional (
00369         MaskedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00370         Box2D domain,
00371         MultiBlockLattice2D<T1,Descriptor>& lattice,
00372         MultiNTensorField2D<T2>& field,
00373         MultiNTensorField2D<int>& mask,
00374         plint level=0 );
00375 
00376 
00377 /* *************** Generic wrappers, dotted functionals ********************* */
00378 
00379 void applyProcessingFunctional(DotProcessingFunctional2D* functional,
00380                                DotList2D const& dotList,
00381                                std::vector<MultiBlock2D*> multiBlocks);
00382 
00383 void integrateProcessingFunctional(DotProcessingFunctional2D* functional,
00384                                    DotList2D const& dotList,
00385                                    std::vector<MultiBlock2D*> multiBlocks,
00386                                    plint level=0);
00387 
00388 template<typename T, template<typename U> class Descriptor>
00389 void applyProcessingFunctional (
00390         LatticeDotProcessingFunctional2D<T,Descriptor>* functional,
00391         DotList2D const& dotList,
00392         std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices );
00393 
00394 template<typename T, template<typename U> class Descriptor>
00395 void integrateProcessingFunctional (
00396         LatticeDotProcessingFunctional2D<T,Descriptor>* functional,
00397         DotList2D const& dotList,
00398         std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices, plint level=0 );
00399 
00400 template<typename T>
00401 void applyProcessingFunctional (
00402         ScalarFieldDotProcessingFunctional2D<T>* functional,
00403         DotList2D const& dotList,
00404         std::vector<MultiScalarField2D<T>*> fields );
00405 
00406 template<typename T>
00407 void integrateProcessingFunctional (
00408         ScalarFieldDotProcessingFunctional2D<T>* functional,
00409         DotList2D const& dotList,
00410         std::vector<MultiScalarField2D<T>*> fields, plint level=0 );
00411 
00412 template<typename T, int nDim>
00413 void applyProcessingFunctional (
00414         TensorFieldDotProcessingFunctional2D<T,nDim>* functional,
00415         DotList2D const& dotList,
00416         std::vector<MultiTensorField2D<T,nDim>*> fields );
00417 
00418 template<typename T, int nDim>
00419 void integrateProcessingFunctional (
00420         TensorFieldDotProcessingFunctional2D<T,nDim>* functional,
00421         DotList2D const& dotList,
00422         std::vector<MultiTensorField2D<T,nDim>*> fields, plint level=0 );
00423 
00424 template<typename T>
00425 void applyProcessingFunctional (
00426         NTensorFieldDotProcessingFunctional2D<T>* functional,
00427         DotList2D const& dotList,
00428         std::vector<MultiNTensorField2D<T>*> fields );
00429 
00430 template<typename T>
00431 void integrateProcessingFunctional (
00432         NTensorFieldDotProcessingFunctional2D<T>* functional,
00433         DotList2D const& dotList,
00434         std::vector<MultiNTensorField2D<T>*> fields, plint level=0 );
00435 
00436 
00437 /* *************** Typed wrappers with a single argument, dotted functionals* */
00438 
00439 template<typename T, template<typename U> class Descriptor>
00440 void applyProcessingFunctional (
00441         DotProcessingFunctional2D_L<T,Descriptor>* functional,
00442         DotList2D const& dotList,
00443         MultiBlockLattice2D<T,Descriptor>& lattice );
00444 
00445 template<typename T, template<typename U> class Descriptor>
00446 void integrateProcessingFunctional (
00447         DotProcessingFunctional2D_L<T,Descriptor>* functional,
00448         DotList2D const& dotList,
00449         MultiBlockLattice2D<T,Descriptor>& lattice, plint level=0 );
00450 
00451 template<typename T>
00452 void applyProcessingFunctional(DotProcessingFunctional2D_S<T>* functional,
00453                                DotList2D const& dotList,
00454                                MultiScalarField2D<T>& field);
00455 
00456 template<typename T>
00457 void integrateProcessingFunctional(DotProcessingFunctional2D_S<T>* functional,
00458                                    DotList2D const& dotList,
00459                                    MultiScalarField2D<T>& field, plint level=0);
00460 
00461 template<typename T, int nDim>
00462 void applyProcessingFunctional(DotProcessingFunctional2D_T<T,nDim>* functional,
00463                                DotList2D const& dotList,
00464                                MultiTensorField2D<T,nDim>& field);
00465 
00466 template<typename T, int nDim>
00467 void integrateProcessingFunctional(DotProcessingFunctional2D_T<T,nDim>* functional,
00468                                    DotList2D const& dotList,
00469                                    MultiTensorField2D<T,nDim>& field, plint level=0);
00470 
00471 template<typename T>
00472 void applyProcessingFunctional(DotProcessingFunctional2D_N<T>* functional,
00473                                DotList2D const& dotList,
00474                                MultiNTensorField2D<T>& field);
00475 
00476 template<typename T>
00477 void integrateProcessingFunctional(DotProcessingFunctional2D_N<T>* functional,
00478                                    DotList2D const& dotList,
00479                                    MultiNTensorField2D<T>& field, plint level=0);
00480 
00481 /* *************** Typed wrappers with two arguments, dotted functionals* *****/
00482 
00484 template<typename T1, template<typename U1> class Descriptor1,
00485          typename T2, template<typename U2> class Descriptor2>
00486 void applyProcessingFunctional (
00487         DotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00488         DotList2D const& dotList,
00489         MultiBlockLattice2D<T1,Descriptor1>& lattice1,
00490         MultiBlockLattice2D<T2,Descriptor2>& lattice2 );
00491 
00492 template<typename T1, template<typename U1> class Descriptor1,
00493          typename T2, template<typename U2> class Descriptor2>
00494 void integrateProcessingFunctional (
00495         DotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00496         DotList2D const& dotList,
00497         MultiBlockLattice2D<T1,Descriptor1>& lattice1,
00498         MultiBlockLattice2D<T2,Descriptor2>& lattice2, plint level=0 );
00499 
00500 template<typename T1, typename T2>
00501 void applyProcessingFunctional(DotProcessingFunctional2D_SS<T1,T2>* functional,
00502                                DotList2D const& dotList,
00503                                MultiScalarField2D<T1>& field1,
00504                                MultiScalarField2D<T2>& field2);
00505 
00506 template<typename T1, typename T2>
00507 void integrateProcessingFunctional(DotProcessingFunctional2D_SS<T1,T2>* functional,
00508                                    DotList2D const& dotList,
00509                                    MultiScalarField2D<T1>& field1,
00510                                    MultiScalarField2D<T2>& field2, plint level=0);
00511 
00513 template<typename T1, int nDim1, typename T2, int nDim2>
00514 void applyProcessingFunctional (
00515         DotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional,
00516         DotList2D const& dotList,
00517         MultiTensorField2D<T1,nDim1>& field1,
00518         MultiTensorField2D<T2,nDim2>& field2 );
00519 
00520 template<typename T1, int nDim1, typename T2, int nDim2>
00521 void integrateProcessingFunctional (
00522         DotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional,
00523         DotList2D const& dotList,
00524         MultiTensorField2D<T1,nDim1>& field1,
00525         MultiTensorField2D<T2,nDim2>& field2, plint level=0 );
00526 
00527 template<typename T1, int nDim1, typename T2, int nDim2>
00528 void applyProcessingFunctional (
00529         DotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional,
00530         DotList2D const& dotList,
00531         MultiTensorField2D<T1,nDim1>& field1,
00532         MultiTensorField2D<T2,nDim2>& field2 );
00533 
00534 template<typename T1, typename T2>
00535 void integrateProcessingFunctional (
00536         DotProcessingFunctional2D_NN<T1,T2>* functional,
00537         DotList2D const& dotList,
00538         MultiNTensorField2D<T1>& field1,
00539         MultiNTensorField2D<T2>& field2, plint level=0 );
00540 
00541 template<typename T1, typename T2, int nDim>
00542 void applyProcessingFunctional (
00543         DotProcessingFunctional2D_ST<T1,T2,nDim>* functional,
00544         DotList2D const& dotList,
00545         MultiScalarField2D<T1>& field1,
00546         MultiTensorField2D<T2,nDim>& field2 );
00547 
00548 template<typename T1, typename T2, int nDim>
00549 void integrateProcessingFunctional (
00550         DotProcessingFunctional2D_ST<T1,T2,nDim>* functional,
00551         DotList2D const& dotList,
00552         MultiScalarField2D<T1>& field1,
00553         MultiTensorField2D<T2,nDim>& field2, plint level=0 );
00554 
00555 template<typename T1, typename T2>
00556 void applyProcessingFunctional (
00557         DotProcessingFunctional2D_SN<T1,T2>* functional,
00558         DotList2D const& dotList,
00559         MultiScalarField2D<T1>& field1,
00560         MultiNTensorField2D<T2>& field2 );
00561 
00562 template<typename T1, typename T2>
00563 void integrateProcessingFunctional (
00564         DotProcessingFunctional2D_SN<T1,T2>* functional,
00565         DotList2D const& dotList,
00566         MultiScalarField2D<T1>& field1,
00567         MultiNTensorField2D<T2>& field2, plint level=0 );
00568 
00569 template<typename T1, template<typename U> class Descriptor, typename T2>
00570 void applyProcessingFunctional (
00571         DotProcessingFunctional2D_LS<T1,Descriptor,T2>* functional,
00572         DotList2D const& dotList,
00573         MultiBlockLattice2D<T1,Descriptor>& lattice,
00574         MultiScalarField2D<T2>& field );
00575 
00576 template<typename T1, template<typename U> class Descriptor, typename T2>
00577 void integrateProcessingFunctional (
00578         DotProcessingFunctional2D_LS<T1,Descriptor,T2>* functional,
00579         DotList2D const& dotList,
00580         MultiBlockLattice2D<T1,Descriptor>& lattice,
00581         MultiScalarField2D<T2>& field, plint level=0 );
00582 
00583 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00584 void applyProcessingFunctional (
00585         DotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional,
00586         DotList2D const& dotList,
00587         MultiBlockLattice2D<T1,Descriptor>& lattice,
00588         MultiTensorField2D<T2,nDim>& field );
00589 
00590 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00591 void integrateProcessingFunctional (
00592         DotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional,
00593         DotList2D const& dotList,
00594         MultiBlockLattice2D<T1,Descriptor>& lattice,
00595         MultiTensorField2D<T2,nDim>& field, plint level=0 );
00596 
00597 template<typename T1, template<typename U> class Descriptor, typename T2>
00598 void applyProcessingFunctional (
00599         DotProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00600         DotList2D const& dotList,
00601         MultiBlockLattice2D<T1,Descriptor>& lattice,
00602         MultiNTensorField2D<T2>& field );
00603 
00604 template<typename T1, template<typename U> class Descriptor, typename T2>
00605 void integrateProcessingFunctional (
00606         DotProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00607         DotList2D const& dotList,
00608         MultiBlockLattice2D<T1,Descriptor>& lattice,
00609         MultiNTensorField2D<T2>& field, plint level=0 );
00610 
00611 
00612 /* *************** Generic wrappers, bounded and boxed functionals ********** */
00613 
00614 void applyProcessingFunctional(BoundedBoxProcessingFunctional2D* functional,
00615                                Box2D domain, std::vector<MultiBlock2D*> multiBlocks,
00616                                plint boundaryWidth );
00617 
00618 void integrateProcessingFunctional (
00619         BoundedBoxProcessingFunctional2D* functional,
00620         Box2D domain, std::vector<MultiBlock2D*> multiBlocks,
00621         plint boundaryWidth, plint level=0 );
00622 
00623 
00624 template<typename T, template<typename U> class Descriptor>
00625 void applyProcessingFunctional (
00626         BoundedLatticeBoxProcessingFunctional2D<T,Descriptor>* functional,
00627         Box2D domain,
00628         std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices,
00629         plint boundaryWidth = Descriptor<T>::vicinity );
00630 
00631 template<typename T, template<typename U> class Descriptor>
00632 void integrateProcessingFunctional (
00633         BoundedLatticeBoxProcessingFunctional2D<T,Descriptor>* functional,
00634         Box2D domain, std::vector<MultiBlockLattice2D<T,Descriptor>*> lattices,
00635         plint boundaryWidth = Descriptor<T>::vicinity, plint level=0 );
00636 
00637 template<typename T>
00638 void applyProcessingFunctional (
00639         BoundedScalarFieldBoxProcessingFunctional2D<T>* functional,
00640         Box2D domain, std::vector<MultiScalarField2D<T>*> fields,
00641         plint boundaryWidth );
00642 
00643 template<typename T>
00644 void integrateProcessingFunctional (
00645         BoundedScalarFieldBoxProcessingFunctional2D<T>* functional,
00646         Box2D domain, std::vector<MultiScalarField2D<T>*> fields,
00647         plint boundaryWidth );
00648 
00649 template<typename T, int nDim>
00650 void applyProcessingFunctional (
00651         BoundedTensorFieldBoxProcessingFunctional2D<T,nDim>* functional,
00652         Box2D domain, std::vector<MultiTensorField2D<T,nDim>*> fields,
00653         plint boundaryWidth );
00654 
00655 template<typename T, int nDim>
00656 void integrateProcessingFunctional (
00657         BoundedTensorFieldBoxProcessingFunctional2D<T,nDim>* functional,
00658         Box2D domain,
00659         std::vector<MultiTensorField2D<T,nDim>*> fields, plint boundaryWidth );
00660 
00661 template<typename T>
00662 void applyProcessingFunctional (
00663         BoundedNTensorFieldBoxProcessingFunctional2D<T>* functional,
00664         Box2D domain, std::vector<MultiNTensorField2D<T>*> fields,
00665         plint boundaryWidth );
00666 
00667 template<typename T>
00668 void integrateProcessingFunctional (
00669         BoundedNTensorFieldBoxProcessingFunctional2D<T>* functional,
00670         Box2D domain,
00671         std::vector<MultiNTensorField2D<T>*> fields, plint boundaryWidth );
00672 
00673 
00674 /* ** Typed wrappers with a single argument, bounded and boxed functionals * */
00675 
00676 template<typename T, template<typename U> class Descriptor>
00677 void applyProcessingFunctional (
00678         BoundedBoxProcessingFunctional2D_L<T,Descriptor>* functional,
00679         Box2D domain,
00680         MultiBlockLattice2D<T,Descriptor>& lattice,
00681         plint boundaryWidth = Descriptor<T>::vicinity );
00682 
00683 template<typename T, template<typename U> class Descriptor>
00684 void integrateProcessingFunctional (
00685         BoundedBoxProcessingFunctional2D_L<T,Descriptor>* functional,
00686         Box2D domain,
00687         MultiBlockLattice2D<T,Descriptor>& lattice,
00688         plint boundaryWidth = Descriptor<T>::vicinity, plint level=0 );
00689 
00690 template<typename T>
00691 void applyProcessingFunctional(BoundedBoxProcessingFunctional2D_S<T>* functional,
00692                                Box2D domain, MultiScalarField2D<T>& field,
00693                                plint boundaryWidth);
00694 
00695 template<typename T>
00696 void integrateProcessingFunctional(BoundedBoxProcessingFunctional2D_S<T>* functional,
00697                                    Box2D domain, MultiScalarField2D<T>& field,
00698                                    plint boundaryWidth, plint level=0);
00699 
00700 template<typename T, int nDim>
00701 void applyProcessingFunctional(BoundedBoxProcessingFunctional2D_T<T,nDim>* functional,
00702                                Box2D domain, MultiTensorField2D<T,nDim>& field,
00703                                plint boundaryWidth);
00704 
00705 template<typename T, int nDim>
00706 void integrateProcessingFunctional (
00707         BoundedBoxProcessingFunctional2D_T<T,nDim>* functional,
00708         Box2D domain,
00709         MultiTensorField2D<T,nDim>& field,
00710         plint boundaryWidth, plint level=0 );
00711 
00712 template<typename T>
00713 void applyProcessingFunctional(BoundedBoxProcessingFunctional2D_N<T>* functional,
00714                                Box2D domain, MultiNTensorField2D<T>& field,
00715                                plint boundaryWidth);
00716 
00717 template<typename T>
00718 void integrateProcessingFunctional (
00719         BoundedBoxProcessingFunctional2D_N<T>* functional,
00720         Box2D domain,
00721         MultiNTensorField2D<T>& field,
00722         plint boundaryWidth, plint level=0 );
00723 
00724 
00725 template<typename T>
00726 void applyProcessingFunctional(BoundedMaskedBoxProcessingFunctional2D_N<T>* functional,
00727                                Box2D domain,
00728                                MultiNTensorField2D<T>& field,
00729                                MultiNTensorField2D<int>& mask,
00730                                plint boundaryWidth);
00731 
00732 template<typename T>
00733 void integrateProcessingFunctional (
00734         BoundedMaskedBoxProcessingFunctional2D_N<T>* functional,
00735         Box2D domain,
00736         MultiNTensorField2D<T>& field,
00737         MultiNTensorField2D<int>& mask,
00738         plint boundaryWidth, plint level=0 );
00739 
00740 
00741 /* ** Typed wrappers with two arguments, bounded and boxed functionals *** */
00742 
00743 template<typename T1, template<typename U1> class Descriptor1,
00744          typename T2, template<typename U2> class Descriptor2>
00745 void applyProcessingFunctional (
00746         BoundedBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00747         Box2D domain,
00748         MultiBlockLattice2D<T1,Descriptor1>& lattice1,
00749         MultiBlockLattice2D<T2,Descriptor2>& lattice2,
00750         plint boundaryWidth = Descriptor1<T1>::vicinity );
00751 
00752 template<typename T1, template<typename U1> class Descriptor1,
00753          typename T2, template<typename U2> class Descriptor2>
00754 void integrateProcessingFunctional (
00755         BoundedBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional,
00756         Box2D domain,
00757         MultiBlockLattice2D<T1,Descriptor1>& lattice1,
00758         MultiBlockLattice2D<T2,Descriptor2>& lattice2,
00759         plint boundaryWidth = Descriptor1<T1>::vicinity, plint level=0 );
00760 
00761 template<typename T1, typename T2>
00762 void applyProcessingFunctional (
00763         BoundedBoxProcessingFunctional2D_SS<T1,T2>* functional,
00764         Box2D domain,
00765         MultiScalarField2D<T1>& field1,
00766         MultiScalarField2D<T2>& field2,
00767         plint boundaryWidth );
00768 
00769 template<typename T1, typename T2>
00770 void integrateProcessingFunctional (
00771         BoundedBoxProcessingFunctional2D_SS<T1,T2>* functional,
00772         Box2D domain,
00773         MultiScalarField2D<T1>& field1,
00774         MultiScalarField2D<T2>& field2,
00775         plint boundaryWidth, plint level=0 );
00776 
00777 template<typename T1, int nDim1, typename T2, int nDim2>
00778 void applyProcessingFunctional (
00779         BoundedBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional,
00780         Box2D domain,
00781         MultiTensorField2D<T1,nDim1>& field1,
00782         MultiTensorField2D<T2,nDim2>& field2,
00783         plint boundaryWidth );
00784 
00785 template<typename T1, int nDim1, typename T2, int nDim2>
00786 void integrateProcessingFunctional (
00787         BoundedBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional,
00788         Box2D domain,
00789         MultiTensorField2D<T1,nDim1>& field1,
00790         MultiTensorField2D<T2,nDim2>& field2,
00791         plint boundaryWidth, plint level=0 );
00792 
00793 template<typename T1, typename T2>
00794 void applyProcessingFunctional (
00795         BoundedBoxProcessingFunctional2D_NN<T1,T2>* functional,
00796         Box2D domain,
00797         MultiNTensorField2D<T1>& field1,
00798         MultiNTensorField2D<T2>& field2,
00799         plint boundaryWidth );
00800 
00801 template<typename T1, typename T2>
00802 void integrateProcessingFunctional (
00803         BoundedBoxProcessingFunctional2D_NN<T1,T2>* functional,
00804         Box2D domain,
00805         MultiNTensorField2D<T1>& field1,
00806         MultiNTensorField2D<T2>& field2,
00807         plint boundaryWidth, plint level=0 );
00808 
00809 template<typename T1, typename T2>
00810 void applyProcessingFunctional (
00811         BoundedMaskedBoxProcessingFunctional2D_NN<T1,T2>* functional,
00812         Box2D domain,
00813         MultiNTensorField2D<T1>& field1,
00814         MultiNTensorField2D<T2>& field2,
00815         MultiNTensorField2D<int>& mask,
00816         plint boundaryWidth );
00817 
00818 template<typename T1, typename T2>
00819 void integrateProcessingFunctional (
00820         BoundedMaskedBoxProcessingFunctional2D_NN<T1,T2>* functional,
00821         Box2D domain,
00822         MultiNTensorField2D<T1>& field1,
00823         MultiNTensorField2D<T2>& field2,
00824         MultiNTensorField2D<int>& mask,
00825         plint boundaryWidth, plint level=0 );
00826 
00827 template<typename T1, typename T2, int nDim>
00828 void applyProcessingFunctional (
00829         BoundedBoxProcessingFunctional2D_ST<T1,T2,nDim>* functional,
00830         Box2D domain,
00831         MultiScalarField2D<T1>& field1,
00832         MultiTensorField2D<T2,nDim>& field2,
00833         plint boundaryWidth );
00834 
00835 template<typename T1, typename T2, int nDim>
00836 void integrateProcessingFunctional (
00837         BoundedBoxProcessingFunctional2D_ST<T1,T2,nDim>* functional,
00838         Box2D domain,
00839         MultiScalarField2D<T1>& field1,
00840         MultiTensorField2D<T2,nDim>& field2,
00841         plint boundaryWidth, plint level=0 );
00842 
00843 template<typename T1, typename T2>
00844 void applyProcessingFunctional (
00845         BoundedBoxProcessingFunctional2D_SN<T1,T2>* functional,
00846         Box2D domain,
00847         MultiScalarField2D<T1>& field1,
00848         MultiNTensorField2D<T2>& field2,
00849         plint boundaryWidth );
00850 
00851 template<typename T1, typename T2>
00852 void integrateProcessingFunctional (
00853         BoundedBoxProcessingFunctional2D_SN<T1,T2>* functional,
00854         Box2D domain,
00855         MultiScalarField2D<T1>& field1,
00856         MultiNTensorField2D<T2>& field2,
00857         plint boundaryWidth, plint level=0 );
00858 
00859 template<typename T1, template<typename U> class Descriptor, typename T2>
00860 void applyProcessingFunctional (
00861         BoundedBoxProcessingFunctional2D_LS<T1,Descriptor,T2>* functional,
00862         Box2D domain,
00863         MultiBlockLattice2D<T1,Descriptor>& lattice,
00864         MultiScalarField2D<T2>& field,
00865         plint boundaryWidth = Descriptor<T1>::vicinity );
00866 
00867 template<typename T1, template<typename U> class Descriptor, typename T2>
00868 void integrateProcessingFunctional (
00869         BoundedBoxProcessingFunctional2D_LS<T1,Descriptor,T2>* functional,
00870         Box2D domain,
00871         MultiBlockLattice2D<T1,Descriptor>& lattice,
00872         MultiScalarField2D<T2>& field,
00873         plint boundaryWidth = Descriptor<T1>::vicinity, plint level=0 );
00874 
00875 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00876 void applyProcessingFunctional (
00877         BoundedBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional,
00878         Box2D domain,
00879         MultiBlockLattice2D<T1,Descriptor>& lattice,
00880         MultiTensorField2D<T2,nDim>& field,
00881         plint boundaryWidth = Descriptor<T1>::vicinity );
00882 
00883 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim>
00884 void integrateProcessingFunctional (
00885         BoundedBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional,
00886         Box2D domain,
00887         MultiBlockLattice2D<T1,Descriptor>& lattice,
00888         MultiTensorField2D<T2,nDim>& field,
00889         plint boundaryWidth = Descriptor<T1>::vicinity, plint level=0 );
00890 
00891 template<typename T1, template<typename U> class Descriptor, typename T2>
00892 void applyProcessingFunctional (
00893         BoundedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00894         Box2D domain,
00895         MultiBlockLattice2D<T1,Descriptor>& lattice,
00896         MultiNTensorField2D<T2>& field,
00897         plint boundaryWidth = Descriptor<T1>::vicinity );
00898 
00899 template<typename T1, template<typename U> class Descriptor, typename T2>
00900 void integrateProcessingFunctional (
00901         BoundedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00902         Box2D domain,
00903         MultiBlockLattice2D<T1,Descriptor>& lattice,
00904         MultiNTensorField2D<T2>& field,
00905         plint boundaryWidth = Descriptor<T1>::vicinity, plint level=0 );
00906 
00907 template<typename T1, template<typename U> class Descriptor, typename T2>
00908 void applyProcessingFunctional (
00909         BoundedMaskedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00910         Box2D domain,
00911         MultiBlockLattice2D<T1,Descriptor>& lattice,
00912         MultiNTensorField2D<T2>& field,
00913         MultiNTensorField2D<int>& mask,
00914         plint boundaryWidth = Descriptor<T1>::vicinity );
00915 
00916 template<typename T1, template<typename U> class Descriptor, typename T2>
00917 void integrateProcessingFunctional (
00918         BoundedMaskedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional,
00919         Box2D domain,
00920         MultiBlockLattice2D<T1,Descriptor>& lattice,
00921         MultiNTensorField2D<T2>& field,
00922         MultiNTensorField2D<int>& mask,
00923         plint boundaryWidth = Descriptor<T1>::vicinity, plint level=0 );
00924 
00925 }  // namespace plb
00926 
00927 #endif  // MULTI_DATA_PROCESSOR_WRAPPER_2D_H