Palabos  Version 1.0
dataProcessingFunctional2D.hh
Go to the documentation of this file.
00001 /* This file is part of the Palabos library.
00002  *
00003  * Copyright (C) 2011 FlowKit Sarl
00004  * Avenue de Chailly 23
00005  * 1012 Lausanne, Switzerland
00006  * E-mail contact: contact@flowkit.com
00007  *
00008  * The most recent release of Palabos can be downloaded at 
00009  * <http://www.palabos.org/>
00010  *
00011  * The library Palabos is free software: you can redistribute it and/or
00012  * modify it under the terms of the GNU Affero General Public License as
00013  * published by the Free Software Foundation, either version 3 of the
00014  * License, or (at your option) any later version.
00015  *
00016  * The library is distributed in the hope that it will be useful,
00017  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  * GNU Affero General Public License for more details.
00020  *
00021  * You should have received a copy of the GNU Affero General Public License
00022  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00023 */
00024 
00025 
00026 #ifndef DATA_PROCESSING_FUNCTIONAL_2D_HH
00027 #define DATA_PROCESSING_FUNCTIONAL_2D_HH
00028 
00029 #include "atomicBlock/dataProcessorWrapper2D.h"
00030 #include "atomicBlock/blockLattice2D.h"
00031 #include "atomicBlock/dataField2D.h"
00032 #include "atomicBlock/dataProcessor2D.h"
00033 #include "core/plbDebug.h"
00034 
00035 namespace plb {
00036 
00037 /* *************** BoxProcessing2D_L ******************************************* */
00038 
00039 template<typename T, template<typename U> class Descriptor>
00040 void BoxProcessingFunctional2D_L<T,Descriptor>::processGenericBlocks (
00041         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00042 {
00043     process(domain, dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00044 }
00045 
00046 
00047 template<typename T, template<typename U> class Descriptor>
00048 void MaskedBoxProcessingFunctional2D_L<T,Descriptor>::processGenericBlocks (
00049         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00050 {
00051     process( domain,
00052              dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]),
00053              dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1])
00054            );
00055 }
00056 /* *************** BoxProcessing2D_S ******************************************* */
00057 
00058 template<typename T>
00059 void BoxProcessingFunctional2D_S<T>::processGenericBlocks (
00060         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00061 {
00062     process(domain, dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00063 }
00064 
00065 /* *************** BoxProcessing2D_T ******************************************* */
00066 
00067 template<typename T, int nDim>
00068 void BoxProcessingFunctional2D_T<T,nDim>::processGenericBlocks (
00069         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00070 {
00071     process(domain, dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00072 }
00073 
00074 /* *************** BoxProcessing2D_N ******************************************* */
00075 
00076 template<typename T>
00077 void BoxProcessingFunctional2D_N<T>::processGenericBlocks (
00078         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00079 {
00080     process(domain, dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00081 }
00082 
00083 /* *************** MaskedBoxProcessing2D_N ******************************************* */
00084 
00085 template<typename T>
00086 void MaskedBoxProcessingFunctional2D_N<T>::processGenericBlocks (
00087         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00088 {
00089     process( domain,
00090              dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]),
00091              dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1]) );
00092 
00093 }
00094 
00095 /* *************** BoxProcessing2D_LL******************************************* */
00096 
00097 template<typename T1, template<typename U1> class Descriptor1,
00098          typename T2, template<typename U2> class Descriptor2>
00099 void BoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::processGenericBlocks (
00100         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00101 {
00102     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00103     process ( domain,
00104               dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00105               dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00106 }
00107 
00108 
00109 /* *************** BoxProcessing2D_SS ****************************************** */
00110 
00111 template<typename T1, typename T2>
00112 void BoxProcessingFunctional2D_SS<T1,T2>::processGenericBlocks (
00113         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00114 {
00115     process ( domain,
00116               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00117               dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00118 }
00119 
00120 
00121 /* *************** BoxProcessing2D_TT ****************************************** */
00122 
00123 template<typename T1, int nDim1, typename T2, int nDim2>
00124 void BoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processGenericBlocks (
00125         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00126 {
00127     process ( domain,
00128               dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00129               dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00130 }
00131 
00132 
00133 /* *************** BoxProcessing2D_NN ****************************************** */
00134 
00135 template<typename T1, typename T2>
00136 void BoxProcessingFunctional2D_NN<T1,T2>::processGenericBlocks (
00137         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00138 {
00139     process ( domain,
00140               dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00141               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00142 }
00143 
00144 
00145 /* *************** MaskedBoxProcessing2D_NN ****************************************** */
00146 
00147 template<typename T1, typename T2>
00148 void MaskedBoxProcessingFunctional2D_NN<T1,T2>::processGenericBlocks (
00149         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00150 {
00151     process ( domain,
00152               dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00153               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00154               dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00155 }
00156 
00157 
00158 /* *************** BoxProcessing2D_ST ****************************************** */
00159 
00160 template<typename T1, typename T2, int nDim>
00161 void BoxProcessingFunctional2D_ST<T1,T2,nDim>::processGenericBlocks (
00162         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00163 {
00164     process ( domain,
00165               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00166               dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00167 }
00168 
00169 
00170 /* *************** BoxProcessing2D_SN ****************************************** */
00171 
00172 template<typename T1, typename T2>
00173 void BoxProcessingFunctional2D_SN<T1,T2>::processGenericBlocks (
00174         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00175 {
00176     process ( domain,
00177               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00178               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00179 }
00180 
00181 
00182 /* *************** BoxProcessing2D_LS ****************************************** */
00183 
00184 template<typename T1, template<typename U> class Descriptor, typename T2>
00185 void BoxProcessingFunctional2D_LS<T1,Descriptor,T2>::processGenericBlocks (
00186         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00187 {
00188     process ( domain,
00189               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00190               dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00191 }
00192 
00193 /* *************** BoxProcessing2D_LT ****************************************** */
00194 
00195 template<typename T1, template<typename U> class Descriptor,
00196          typename T2, int nDim>
00197 void BoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processGenericBlocks (
00198         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00199 {
00200     process ( domain,
00201               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00202               dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00203 }
00204 
00205 /* *************** BoxProcessing2D_LN ****************************************** */
00206 
00207 template<typename T1, template<typename U> class Descriptor, typename T2>
00208 void BoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processGenericBlocks (
00209         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00210 {
00211     process ( domain,
00212               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00213               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00214 }
00215 
00216 /* *************** BoxProcessing2D_LN ****************************************** */
00217 
00218 template<typename T1, template<typename U> class Descriptor, typename T2>
00219 void MaskedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processGenericBlocks (
00220         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00221 {
00222     process ( domain,
00223               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00224               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00225               dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00226 }
00227 
00228 /* *************** LatticeBoxProcessing2D ************************************** */
00229 
00230 template<typename T, template<typename U> class Descriptor>
00231 void LatticeBoxProcessingFunctional2D<T,Descriptor>::processGenericBlocks (
00232         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00233 {
00234     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
00235     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
00236         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*>(atomicBlocks[iLattice]);
00237     }
00238     process(domain, lattices);
00239 }
00240 
00241 /* *************** ScalarFieldBoxProcessing2D *********************************** */
00242 
00243 template<typename T>
00244 void ScalarFieldBoxProcessingFunctional2D<T>::processGenericBlocks (
00245         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00246 {
00247     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
00248     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00249         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
00250     }
00251     process(domain, fields);
00252 }
00253 
00254 /* *************** TensorFieldBoxProcessing2D *********************************** */
00255 
00256 template<typename T, int nDim>
00257 void TensorFieldBoxProcessingFunctional2D<T,nDim>::processGenericBlocks (
00258         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00259 {
00260     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
00261     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00262         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
00263     }
00264     process(domain, fields);
00265 }
00266 
00267 
00268 /* *************** NTensorFieldBoxProcessing2D *********************************** */
00269 
00270 template<typename T>
00271 void NTensorFieldBoxProcessingFunctional2D<T>::processGenericBlocks (
00272         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00273 {
00274     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
00275     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00276         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
00277     }
00278     process(domain, fields);
00279 }
00280 
00281 
00282 template<typename T>
00283 void MaskedNTensorFieldBoxProcessingFunctional2D<T>::processGenericBlocks (
00284         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00285 {
00286     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size()-1);
00287     for (pluint iField=0; iField<atomicBlocks.size()-1; ++iField) {
00288         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
00289     }
00290     NTensorField2D<int>& mask = dynamic_cast<NTensorField2D<int>&>(*atomicBlocks.back());
00291     process(domain, fields, mask);
00292 }
00293 
00294 /* *************** DotProcessing2D_L ******************************************* */
00295 
00296 template<typename T, template<typename U> class Descriptor>
00297 void DotProcessingFunctional2D_L<T,Descriptor>::processGenericBlocks (
00298         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00299 {
00300     process(dotList, dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00301 }
00302 
00303 /* *************** DotProcessing2D_S ******************************************* */
00304 
00305 template<typename T>
00306 void DotProcessingFunctional2D_S<T>::processGenericBlocks (
00307         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00308 {
00309     process(dotList, dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00310 }
00311 
00312 /* *************** DotProcessing2D_T ******************************************* */
00313 
00314 template<typename T, int nDim>
00315 void DotProcessingFunctional2D_T<T,nDim>::processGenericBlocks (
00316         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00317 {
00318     process(dotList, dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00319 }
00320 
00321 /* *************** DotProcessing2D_N ******************************************* */
00322 
00323 template<typename T>
00324 void DotProcessingFunctional2D_N<T>::processGenericBlocks (
00325         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00326 {
00327     process(dotList, dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00328 }
00329 
00330 /* *************** DotProcessing2D_LL******************************************* */
00331 
00332 template<typename T1, template<typename U1> class Descriptor1,
00333          typename T2, template<typename U2> class Descriptor2>
00334 void DotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::processGenericBlocks (
00335         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks ) {
00336     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00337     process ( dotList,
00338               dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00339               dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00340 }
00341 
00342 
00343 /* *************** DotProcessing2D_SS ****************************************** */
00344 
00345 template<typename T1, typename T2>
00346 void DotProcessingFunctional2D_SS<T1,T2>::processGenericBlocks (
00347         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00348 {
00349     process ( dotList,
00350               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00351               dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00352 }
00353 
00354 
00355 /* *************** DotProcessing2D_TT ****************************************** */
00356 
00357 template<typename T1, int nDim1, typename T2, int nDim2>
00358 void DotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processGenericBlocks (
00359         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00360 {
00361     process ( dotList,
00362               dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00363               dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00364 }
00365 
00366 
00367 /* *************** DotProcessing2D_NN ****************************************** */
00368 
00369 template<typename T1, typename T2>
00370 void DotProcessingFunctional2D_NN<T1,T2>::processGenericBlocks (
00371         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00372 {
00373     process ( dotList,
00374               dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00375               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00376 }
00377 
00378 
00379 /* *************** DotProcessing2D_ST ****************************************** */
00380 
00381 template<typename T1, typename T2, int nDim>
00382 void DotProcessingFunctional2D_ST<T1,T2,nDim>::processGenericBlocks (
00383         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00384 {
00385     process ( dotList,
00386               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00387               dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00388 }
00389 
00390 
00391 /* *************** DotProcessing2D_SN ****************************************** */
00392 
00393 template<typename T1, typename T2>
00394 void DotProcessingFunctional2D_SN<T1,T2>::processGenericBlocks (
00395         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00396 {
00397     process ( dotList,
00398               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00399               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00400 }
00401 
00402 
00403 /* *************** DotProcessing2D_LS ****************************************** */
00404 
00405 template<typename T1, template<typename U> class Descriptor, typename T2>
00406 void DotProcessingFunctional2D_LS<T1,Descriptor,T2>::processGenericBlocks (
00407         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00408 {
00409     process ( dotList,
00410               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00411               dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00412 }
00413 
00414 
00415 /* *************** DotProcessing2D_LT ****************************************** */
00416 
00417 template<typename T1, template<typename U> class Descriptor,
00418          typename T2, int nDim>
00419 void DotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processGenericBlocks (
00420         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00421 {
00422     process ( dotList,
00423               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00424               dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00425 }
00426 
00427 /* *************** DotProcessing2D_LN ****************************************** */
00428 
00429 template<typename T1, template<typename U> class Descriptor, typename T2>
00430 void DotProcessingFunctional2D_LN<T1,Descriptor,T2>::processGenericBlocks (
00431         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00432 {
00433     process ( dotList,
00434               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00435               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00436 }
00437 
00438 /* *************** LatticeDotProcessing2D ******************************************* */
00439 
00440 template<typename T, template<typename U> class Descriptor>
00441 void LatticeDotProcessingFunctional2D<T,Descriptor>::processGenericBlocks (
00442         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00443 {
00444     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
00445     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
00446         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*> (
00447                 atomicBlocks[iLattice] );
00448     }
00449     process(dotList, lattices);
00450 }
00451 
00452 /* *************** ScalarFieldDotProcessing2D ********************************* */
00453 
00454 template<typename T>
00455 void ScalarFieldDotProcessingFunctional2D<T>::processGenericBlocks (
00456         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00457 {
00458     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
00459     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00460         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
00461     }
00462     process(dotList, fields);
00463 }
00464 
00465 /* *************** TensorFieldDotProcessing2D ********************************* */
00466 
00467 template<typename T, int nDim>
00468 void TensorFieldDotProcessingFunctional2D<T,nDim>::processGenericBlocks (
00469         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00470 {
00471     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
00472     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00473         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
00474     }
00475     process(dotList, fields);
00476 }
00477 
00478 /* *************** NTensorFieldDotProcessing2D ********************************* */
00479 
00480 template<typename T>
00481 void NTensorFieldDotProcessingFunctional2D<T>::processGenericBlocks (
00482         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00483 {
00484     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
00485     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00486         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
00487     }
00488     process(dotList, fields);
00489 }
00490 
00491 /* *************** BoundedBoxProcessing2D_L ********************************* */
00492 
00493 template<typename T, template<typename U> class Descriptor>
00494 void BoundedBoxProcessingFunctional2D_L<T,Descriptor>::processBulkGeneric (
00495         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00496 {
00497     processBulk(domain, dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00498 }
00499 
00500 template<typename T, template<typename U> class Descriptor>
00501 void BoundedBoxProcessingFunctional2D_L<T,Descriptor>::processEdgeGeneric (
00502         int direction, int orientation,
00503         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00504 {
00505     processEdge(direction, orientation, domain,
00506                 dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00507 }
00508 
00509 template<typename T, template<typename U> class Descriptor>
00510 void BoundedBoxProcessingFunctional2D_L<T,Descriptor>::processCornerGeneric (
00511         int normalX, int normalY,
00512         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00513 {
00514     processCorner(normalX, normalY, domain,
00515                   dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00516 }
00517 
00518 /* *************** BoundedBoxProcessing2D_S ******************************************* */
00519 
00520 template<typename T>
00521 void BoundedBoxProcessingFunctional2D_S<T>::processBulkGeneric (
00522         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00523 {
00524     processBulk(domain, dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00525 }
00526 
00527 template<typename T>
00528 void BoundedBoxProcessingFunctional2D_S<T>::processEdgeGeneric (
00529         int direction, int orientation,
00530         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00531 {
00532     processEdge(direction, orientation, domain,
00533                 dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00534 }
00535 
00536 template<typename T>
00537 void BoundedBoxProcessingFunctional2D_S<T>::processCornerGeneric (
00538         int normalX, int normalY,
00539         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00540 {
00541     processCorner(normalX, normalY, domain,
00542                   dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00543 }
00544 
00545 /* *************** BoundedBoxProcessing2D_T ********************************* */
00546 
00547 template<typename T, int nDim>
00548 void BoundedBoxProcessingFunctional2D_T<T,nDim>::processBulkGeneric (
00549         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00550 {
00551     processBulk(domain, dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00552 }
00553 
00554 template<typename T, int nDim>
00555 void BoundedBoxProcessingFunctional2D_T<T,nDim>::processEdgeGeneric (
00556         int direction, int orientation,
00557         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00558 {
00559     processEdge(direction, orientation, domain,
00560                 dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00561 }
00562 
00563 template<typename T, int nDim>
00564 void BoundedBoxProcessingFunctional2D_T<T,nDim>::processCornerGeneric (
00565         int normalX, int normalY,
00566         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00567 {
00568     processCorner(normalX, normalY, domain,
00569                   dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00570 }
00571 
00572 /* *************** BoundedBoxProcessing2D_N ********************************* */
00573 
00574 template<typename T>
00575 void BoundedBoxProcessingFunctional2D_N<T>::processBulkGeneric (
00576         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00577 {
00578     processBulk(domain, dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00579 }
00580 
00581 template<typename T>
00582 void BoundedBoxProcessingFunctional2D_N<T>::processEdgeGeneric (
00583         int direction, int orientation,
00584         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00585 {
00586     processEdge(direction, orientation, domain,
00587                 dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00588 }
00589 
00590 template<typename T>
00591 void BoundedBoxProcessingFunctional2D_N<T>::processCornerGeneric (
00592         int normalX, int normalY,
00593         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00594 {
00595     processCorner(normalX, normalY, domain,
00596                   dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00597 }
00598 
00599 /* *************** BoundedMaskedBoxProcessing2D_N ********************************* */
00600 
00601 template<typename T>
00602 void BoundedMaskedBoxProcessingFunctional2D_N<T>::processBulkGeneric (
00603         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00604 {
00605     processBulk( domain,
00606                  dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]),
00607                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1]) );
00608 }
00609 
00610 template<typename T>
00611 void BoundedMaskedBoxProcessingFunctional2D_N<T>::processEdgeGeneric (
00612         int direction, int orientation,
00613         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00614 {
00615     processEdge(direction, orientation, domain,
00616                 dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]),
00617                 dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1]) );
00618 }
00619 
00620 template<typename T>
00621 void BoundedMaskedBoxProcessingFunctional2D_N<T>::processCornerGeneric (
00622         int normalX, int normalY,
00623         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00624 {
00625     processCorner(normalX, normalY, domain,
00626                   dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]),
00627                   dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1]));
00628 }
00629 
00630 /* *************** BoundedBoxProcessing2D_LL ****************************************** */
00631 
00632 template<typename T1, template<typename U1> class Descriptor1,
00633          typename T2, template<typename U2> class Descriptor2>
00634 void BoundedBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::
00635     processBulkGeneric( Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00636 {
00637     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00638     processBulk( domain,
00639                  dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00640                  dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00641 }
00642 
00643 template<typename T1, template<typename U1> class Descriptor1,
00644          typename T2, template<typename U2> class Descriptor2>
00645 void BoundedBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::
00646     processEdgeGeneric( int direction, int orientation,
00647                         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00648 {
00649     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00650     processEdge( direction, orientation, domain,
00651                  dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00652                  dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00653 }
00654 
00655 template<typename T1, template<typename U1> class Descriptor1,
00656          typename T2, template<typename U2> class Descriptor2>
00657 void BoundedBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::
00658     processCornerGeneric( int normalX, int normalY,
00659                           Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00660 {
00661     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00662     processCorner( normalX, normalY, domain,
00663                    dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00664                    dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00665 }
00666 
00667 /* *************** BoundedBoxProcessing2D_SS ****************************************** */
00668 
00669 template<typename T1, typename T2>
00670 void BoundedBoxProcessingFunctional2D_SS<T1,T2>::processBulkGeneric (
00671         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00672 {
00673     processBulk( domain,
00674                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00675                  dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00676 }
00677 
00678 template<typename T1, typename T2>
00679 void BoundedBoxProcessingFunctional2D_SS<T1,T2>::processEdgeGeneric (
00680         int direction, int orientation,
00681         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00682 {
00683     processEdge( direction, orientation, domain,
00684                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00685                  dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00686 }
00687 
00688 template<typename T1, typename T2>
00689 void BoundedBoxProcessingFunctional2D_SS<T1,T2>::processCornerGeneric (
00690         int normalX, int normalY,
00691         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00692 {
00693     processCorner( normalX, normalY, domain,
00694                    dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00695                    dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00696 }
00697 
00698 /* *************** BoundedBoxProcessing2D_TT ****************************************** */
00699 
00700 template<typename T1, int nDim1, typename T2, int nDim2>
00701 void BoundedBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processBulkGeneric (
00702         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00703 {
00704     processBulk( domain,
00705                  dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00706                  dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00707 }
00708 
00709 template<typename T1, int nDim1, typename T2, int nDim2>
00710 void BoundedBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processEdgeGeneric (
00711         int direction, int orientation,
00712         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00713 {
00714     processEdge( direction, orientation, domain,
00715                  dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00716                  dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00717 }
00718 
00719 template<typename T1, int nDim1, typename T2, int nDim2>
00720 void BoundedBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processCornerGeneric (
00721         int normalX, int normalY,
00722         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00723 {
00724     processCorner( normalX, normalY, domain,
00725                    dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00726                    dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00727 }
00728 
00729 /* *************** BoundedBoxProcessing2D_NN ****************************************** */
00730 
00731 template<typename T1, typename T2>
00732 void BoundedBoxProcessingFunctional2D_NN<T1,T2>::processBulkGeneric (
00733         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00734 {
00735     processBulk( domain,
00736                  dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00737                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00738 }
00739 
00740 template<typename T1, typename T2>
00741 void BoundedBoxProcessingFunctional2D_NN<T1,T2>::processEdgeGeneric (
00742         int direction, int orientation,
00743         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00744 {
00745     processEdge( direction, orientation, domain,
00746                  dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00747                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00748 }
00749 
00750 template<typename T1, typename T2>
00751 void BoundedBoxProcessingFunctional2D_NN<T1,T2>::processCornerGeneric (
00752         int normalX, int normalY,
00753         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00754 {
00755     processCorner( normalX, normalY, domain,
00756                    dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00757                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00758 }
00759 
00760 /* *************** BoundedMaskedBoxProcessing2D_NN ****************************************** */
00761 
00762 template<typename T1, typename T2>
00763 void BoundedMaskedBoxProcessingFunctional2D_NN<T1,T2>::processBulkGeneric (
00764         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00765 {
00766     processBulk( domain,
00767                  dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00768                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00769                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00770 }
00771 
00772 template<typename T1, typename T2>
00773 void BoundedMaskedBoxProcessingFunctional2D_NN<T1,T2>::processEdgeGeneric (
00774         int direction, int orientation,
00775         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00776 {
00777     processEdge( direction, orientation, domain,
00778                  dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00779                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00780                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00781 }
00782 
00783 template<typename T1, typename T2>
00784 void BoundedMaskedBoxProcessingFunctional2D_NN<T1,T2>::processCornerGeneric (
00785         int normalX, int normalY,
00786         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00787 {
00788     processCorner( normalX, normalY, domain,
00789                    dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00790                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00791                    dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00792 }
00793 
00794 /* *************** BoundedBoxProcessing2D_ST ****************************************** */
00795 
00796 template<typename T1, typename T2, int nDim>
00797 void BoundedBoxProcessingFunctional2D_ST<T1,T2,nDim>::processBulkGeneric (
00798         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00799 {
00800     processBulk( domain,
00801                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00802                  dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00803 }
00804 
00805 template<typename T1, typename T2, int nDim>
00806 void BoundedBoxProcessingFunctional2D_ST<T1,T2,nDim>::processEdgeGeneric (
00807         int direction, int orientation,
00808         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00809 {
00810     processEdge( direction, orientation, domain,
00811                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00812                  dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00813 }
00814 
00815 template<typename T1, typename T2, int nDim>
00816 void BoundedBoxProcessingFunctional2D_ST<T1,T2,nDim>::processCornerGeneric (
00817         int normalX, int normalY,
00818         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00819 {
00820     processCorner( normalX, normalY, domain,
00821                    dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00822                    dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00823 }
00824 
00825 /* *************** BoundedBoxProcessing2D_SN ****************************************** */
00826 
00827 template<typename T1, typename T2>
00828 void BoundedBoxProcessingFunctional2D_SN<T1,T2>::processBulkGeneric (
00829         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00830 {
00831     processBulk( domain,
00832                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00833                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00834 }
00835 
00836 template<typename T1, typename T2>
00837 void BoundedBoxProcessingFunctional2D_SN<T1,T2>::processEdgeGeneric (
00838         int direction, int orientation,
00839         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00840 {
00841     processEdge( direction, orientation, domain,
00842                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00843                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00844 }
00845 
00846 template<typename T1, typename T2>
00847 void BoundedBoxProcessingFunctional2D_SN<T1,T2>::processCornerGeneric (
00848         int normalX, int normalY,
00849         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00850 {
00851     processCorner( normalX, normalY, domain,
00852                    dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00853                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00854 }
00855 
00856 /* *************** BoundedBoxProcessing2D_LS ****************************************** */
00857 
00858 template<typename T1, template<typename U> class Descriptor, typename T2>
00859 void BoundedBoxProcessingFunctional2D_LS<T1,Descriptor,T2>::processBulkGeneric (
00860         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00861 {
00862     processBulk( domain,
00863                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00864                  dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00865 }
00866 
00867 template<typename T1, template<typename U> class Descriptor, typename T2>
00868 void BoundedBoxProcessingFunctional2D_LS<T1,Descriptor,T2>::processEdgeGeneric (
00869         int direction, int orientation,
00870         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00871 {
00872     processEdge( direction, orientation, domain,
00873                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00874                  dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00875 }
00876 
00877 template<typename T1, template<typename U> class Descriptor, typename T2>
00878 void BoundedBoxProcessingFunctional2D_LS<T1,Descriptor,T2>::processCornerGeneric (
00879         int normalX, int normalY,
00880         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00881 {
00882     processCorner( normalX, normalY, domain,
00883                    dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00884                    dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00885 }
00886 
00887 /* *************** BoundedBoxProcessing2D_LT ****************************************** */
00888 
00889 template<typename T1, template<typename U> class Descriptor,
00890          typename T2, int nDim>
00891 void BoundedBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processBulkGeneric (
00892         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00893 {
00894     processBulk( domain,
00895                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00896                  dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00897 }
00898 
00899 template<typename T1, template<typename U> class Descriptor,
00900          typename T2, int nDim>
00901 void BoundedBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processEdgeGeneric (
00902         int direction, int orientation,
00903         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00904 {
00905     processEdge( direction, orientation, domain,
00906                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00907                  dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00908 }
00909 
00910 template<typename T1, template<typename U> class Descriptor,
00911          typename T2, int nDim>
00912 void BoundedBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processCornerGeneric (
00913         int normalX, int normalY,
00914         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00915 {
00916     processCorner( normalX, normalY, domain,
00917                    dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00918                    dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00919 }
00920 
00921 /* *************** BoundedBoxProcessing2D_LN ****************************************** */
00922 
00923 template<typename T1, template<typename U> class Descriptor, typename T2>
00924 void BoundedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processBulkGeneric (
00925         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00926 {
00927     processBulk( domain,
00928                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00929                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00930 }
00931 
00932 template<typename T1, template<typename U> class Descriptor, typename T2>
00933 void BoundedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processEdgeGeneric (
00934         int direction, int orientation,
00935         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00936 {
00937     processEdge( direction, orientation, domain,
00938                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00939                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00940 }
00941 
00942 template<typename T1, template<typename U> class Descriptor, typename T2>
00943 void BoundedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processCornerGeneric (
00944         int normalX, int normalY,
00945         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00946 {
00947     processCorner( normalX, normalY, domain,
00948                    dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00949                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00950 }
00951 
00952 /* *************** BoundedMaskedBoxProcessing2D_LN ****************************************** */
00953 
00954 template<typename T1, template<typename U> class Descriptor, typename T2>
00955 void BoundedMaskedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processBulkGeneric (
00956         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00957 {
00958     processBulk( domain,
00959                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00960                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00961                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00962 }
00963 
00964 template<typename T1, template<typename U> class Descriptor, typename T2>
00965 void BoundedMaskedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processEdgeGeneric (
00966         int direction, int orientation,
00967         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00968 {
00969     processEdge( direction, orientation, domain,
00970                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00971                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00972                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00973 }
00974 
00975 template<typename T1, template<typename U> class Descriptor, typename T2>
00976 void BoundedMaskedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processCornerGeneric (
00977         int normalX, int normalY,
00978         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00979 {
00980     processCorner( normalX, normalY, domain,
00981                    dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00982                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00983                    dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00984 }
00985 
00986 /* *************** BoundedLatticeBoxProcessing2D ********************************* */
00987 
00988 template<typename T, template<typename U> class Descriptor>
00989 void BoundedLatticeBoxProcessingFunctional2D<T,Descriptor>::processBulkGeneric (
00990         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00991 {
00992     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
00993     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
00994         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*> (
00995                 atomicBlocks[iLattice] );
00996     }
00997     processBulk(domain, lattices);
00998 }
00999 
01000 template<typename T, template<typename U> class Descriptor>
01001 void BoundedLatticeBoxProcessingFunctional2D<T,Descriptor>::processEdgeGeneric (
01002         int direction, int orientation,
01003         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01004 {
01005     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
01006     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
01007         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*> (
01008                 atomicBlocks[iLattice] );
01009     }
01010     processEdge(direction, orientation, domain, lattices);
01011 }
01012 
01013 template<typename T, template<typename U> class Descriptor>
01014 void BoundedLatticeBoxProcessingFunctional2D<T,Descriptor>::processCornerGeneric (
01015         int normalX, int normalY,
01016         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01017 {
01018     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
01019     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
01020         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*> (
01021                 atomicBlocks[iLattice] );
01022     }
01023     processCorner(normalX, normalY, domain, lattices);
01024 }
01025 
01026 /* *************** BoundedScalarFieldBoxProcessing2D ************************ */
01027 
01028 template<typename T>
01029 void BoundedScalarFieldBoxProcessingFunctional2D<T>::processBulkGeneric (
01030         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01031 {
01032     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
01033     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01034         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
01035     }
01036     processBulk(domain, fields);
01037 }
01038 
01039 template<typename T>
01040 void BoundedScalarFieldBoxProcessingFunctional2D<T>::processEdgeGeneric (
01041         int direction, int orientation,
01042         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01043 {
01044     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
01045     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01046         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
01047     }
01048     processEdge(direction, orientation, domain, fields);
01049 }
01050 
01051 template<typename T>
01052 void BoundedScalarFieldBoxProcessingFunctional2D<T>::processCornerGeneric (
01053         int normalX, int normalY,
01054         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01055 {
01056     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
01057     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01058         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
01059     }
01060     processCorner(normalX, normalY, domain, fields);
01061 }
01062 
01063 
01064 /* *************** BoundedTensorFieldBoxProcessing2D ************************ */
01065 
01066 template<typename T, int nDim>
01067 void BoundedTensorFieldBoxProcessingFunctional2D<T,nDim>::processBulkGeneric (
01068         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01069 {
01070     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
01071     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01072         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
01073     }
01074     processBulk(domain, fields);
01075 }
01076 
01077 template<typename T, int nDim>
01078 void BoundedTensorFieldBoxProcessingFunctional2D<T,nDim>::processEdgeGeneric (
01079         int direction, int orientation,
01080         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01081 {
01082     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
01083     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01084         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
01085     }
01086     processEdge(direction, orientation, domain, fields);
01087 }
01088 
01089 template<typename T, int nDim>
01090 void BoundedTensorFieldBoxProcessingFunctional2D<T,nDim>::processCornerGeneric (
01091         int normalX, int normalY,
01092         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01093 {
01094     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
01095     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01096         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
01097     }
01098     processCorner(normalX, normalY, domain, fields);
01099 }
01100 
01101 /* *************** BoundedNTensorFieldBoxProcessing2D ************************ */
01102 
01103 template<typename T>
01104 void BoundedNTensorFieldBoxProcessingFunctional2D<T>::processBulkGeneric (
01105         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01106 {
01107     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
01108     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01109         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
01110     }
01111     processBulk(domain, fields);
01112 }
01113 
01114 template<typename T>
01115 void BoundedNTensorFieldBoxProcessingFunctional2D<T>::processEdgeGeneric (
01116         int direction, int orientation,
01117         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01118 {
01119     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
01120     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01121         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
01122     }
01123     processEdge(direction, orientation, domain, fields);
01124 }
01125 
01126 template<typename T>
01127 void BoundedNTensorFieldBoxProcessingFunctional2D<T>::processCornerGeneric (
01128         int normalX, int normalY,
01129         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01130 {
01131     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
01132     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01133         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
01134     }
01135     processCorner(normalX, normalY, domain, fields);
01136 }
01137 
01138 }  // namespace plb
01139 
01140 #endif  // DATA_PROCESSING_FUNCTIONAL_2D_HH