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

reductiveDataProcessingFunctional2D.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 REDUCTIVE_DATA_PROCESSING_FUNCTIONAL_2D_HH
00027 #define REDUCTIVE_DATA_PROCESSING_FUNCTIONAL_2D_HH
00028 
00029 #include "atomicBlock/reductiveDataProcessorWrapper2D.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 /* *************** ReductiveBoxProcessing2D_L ******************************************* */
00038 
00039 template<typename T, template<typename U> class Descriptor>
00040 void ReductiveBoxProcessingFunctional2D_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 /* *************** ReductiveBoxProcessing2D_S ******************************************* */
00047 
00048 template<typename T>
00049 void ReductiveBoxProcessingFunctional2D_S<T>::processGenericBlocks (
00050         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00051 {
00052     process(domain, dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00053 }
00054 
00055 /* *************** ReductiveBoxProcessing2D_T ******************************************* */
00056 
00057 template<typename T, int nDim>
00058 void ReductiveBoxProcessingFunctional2D_T<T,nDim>::processGenericBlocks (
00059         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00060 {
00061     process(domain, dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00062 }
00063 
00064 /* *************** ReductiveBoxProcessing2D_N ******************************************* */
00065 
00066 template<typename T>
00067 void ReductiveBoxProcessingFunctional2D_N<T>::processGenericBlocks (
00068         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00069 {
00070     process(domain, dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00071 }
00072 
00073 /* *************** MaskedReductiveBoxProcessing2D_N ******************************************* */
00074 
00075 template<typename T>
00076 void MaskedReductiveBoxProcessingFunctional2D_N<T>::processGenericBlocks (
00077         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00078 {
00079     process(domain,
00080             dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]),
00081             dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1]));
00082 }
00083 
00084 /* *************** ReductiveBoxProcessing2D_LL******************************************* */
00085 
00086 template<typename T1, template<typename U1> class Descriptor1,
00087          typename T2, template<typename U2> class Descriptor2>
00088 void ReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::processGenericBlocks (
00089         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00090 {
00091     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00092     process ( domain,
00093               dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00094               dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00095 }
00096 
00097 
00098 /* *************** ReductiveBoxProcessing2D_SS ****************************************** */
00099 
00100 template<typename T1, typename T2>
00101 void ReductiveBoxProcessingFunctional2D_SS<T1,T2>::processGenericBlocks (
00102         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00103 {
00104     process ( domain,
00105               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00106               dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00107 }
00108 
00109 
00110 /* *************** ReductiveBoxProcessing2D_TT ****************************************** */
00111 
00112 template<typename T1, int nDim1, typename T2, int nDim2>
00113 void ReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processGenericBlocks (
00114         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00115 {
00116     process ( domain,
00117               dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00118               dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00119 }
00120 
00121 
00122 /* *************** ReductiveBoxProcessing2D_NN ****************************************** */
00123 
00124 template<typename T1, typename T2>
00125 void ReductiveBoxProcessingFunctional2D_NN<T1,T2>::processGenericBlocks (
00126         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00127 {
00128     process ( domain,
00129               dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00130               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00131 }
00132 
00133 
00134 /* *************** MaskedReductiveBoxProcessing2D_NN ****************************************** */
00135 
00136 template<typename T1, typename T2>
00137 void MaskedReductiveBoxProcessingFunctional2D_NN<T1,T2>::processGenericBlocks (
00138         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00139 {
00140     process ( domain,
00141               dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00142               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00143               dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00144 }
00145 
00146 
00147 /* *************** ReductiveBoxProcessing2D_ST ****************************************** */
00148 
00149 template<typename T1, typename T2, int nDim>
00150 void ReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>::processGenericBlocks (
00151         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00152 {
00153     process ( domain,
00154               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00155               dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00156 }
00157 
00158 
00159 /* *************** ReductiveBoxProcessing2D_SN ****************************************** */
00160 
00161 template<typename T1, typename T2>
00162 void ReductiveBoxProcessingFunctional2D_SN<T1,T2>::processGenericBlocks (
00163         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00164 {
00165     process ( domain,
00166               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00167               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00168 }
00169 
00170 
00171 /* *************** ReductiveBoxProcessing2D_LS ****************************************** */
00172 
00173 template<typename T1, template<typename U> class Descriptor, typename T2>
00174 void ReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>::processGenericBlocks (
00175         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00176 {
00177     process ( domain,
00178               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00179               dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00180 }
00181 
00182 /* *************** ReductiveBoxProcessing2D_LT ****************************************** */
00183 
00184 template<typename T1, template<typename U> class Descriptor,
00185          typename T2, int nDim>
00186 void ReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processGenericBlocks (
00187         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00188 {
00189     process ( domain,
00190               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00191               dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00192 }
00193 
00194 /* *************** ReductiveBoxProcessing2D_LN ****************************************** */
00195 
00196 template<typename T1, template<typename U> class Descriptor, typename T2>
00197 void ReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processGenericBlocks (
00198         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00199 {
00200     process ( domain,
00201               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00202               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00203 }
00204 
00205 /* *************** MaskedReductiveBoxProcessing2D_LN ****************************************** */
00206 
00207 template<typename T1, template<typename U> class Descriptor, typename T2>
00208 void MaskedReductiveBoxProcessingFunctional2D_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               dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00215 }
00216 
00217 /* *************** ReductiveLatticeBoxProcessing2D ************************************** */
00218 
00219 template<typename T, template<typename U> class Descriptor>
00220 void ReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>::processGenericBlocks (
00221         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00222 {
00223     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
00224     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
00225         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*>(atomicBlocks[iLattice]);
00226     }
00227     process(domain, lattices);
00228 }
00229 
00230 /* *************** ReductiveScalarFieldBoxProcessing2D *********************************** */
00231 
00232 template<typename T>
00233 void ReductiveScalarFieldBoxProcessingFunctional2D<T>::processGenericBlocks (
00234         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00235 {
00236     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
00237     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00238         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
00239     }
00240     process(domain, fields);
00241 }
00242 
00243 /* *************** ReductiveTensorFieldBoxProcessing2D *********************************** */
00244 
00245 template<typename T, int nDim>
00246 void ReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>::processGenericBlocks (
00247         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00248 {
00249     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
00250     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00251         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
00252     }
00253     process(domain, fields);
00254 }
00255 
00256 
00257 /* *************** ReductiveNTensorFieldBoxProcessing2D *********************************** */
00258 
00259 template<typename T>
00260 void ReductiveNTensorFieldBoxProcessingFunctional2D<T>::processGenericBlocks (
00261         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00262 {
00263     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
00264     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00265         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
00266     }
00267     process(domain, fields);
00268 }
00269 
00270 
00271 /* *************** ReductiveDotProcessing2D_L ******************************************* */
00272 
00273 template<typename T, template<typename U> class Descriptor>
00274 void ReductiveDotProcessingFunctional2D_L<T,Descriptor>::processGenericBlocks (
00275         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00276 {
00277     process(dotList, dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00278 }
00279 
00280 /* *************** ReductiveDotProcessing2D_S ******************************************* */
00281 
00282 template<typename T>
00283 void ReductiveDotProcessingFunctional2D_S<T>::processGenericBlocks (
00284         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00285 {
00286     process(dotList, dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00287 }
00288 
00289 /* *************** ReductiveDotProcessing2D_T ******************************************* */
00290 
00291 template<typename T, int nDim>
00292 void ReductiveDotProcessingFunctional2D_T<T,nDim>::processGenericBlocks (
00293         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00294 {
00295     process(dotList, dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00296 }
00297 
00298 /* *************** ReductiveDotProcessing2D_N ******************************************* */
00299 
00300 template<typename T>
00301 void ReductiveDotProcessingFunctional2D_N<T>::processGenericBlocks (
00302         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00303 {
00304     process(dotList, dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00305 }
00306 
00307 /* *************** ReductiveDotProcessing2D_LL******************************************* */
00308 
00309 template<typename T1, template<typename U1> class Descriptor1,
00310          typename T2, template<typename U2> class Descriptor2>
00311 void ReductiveDotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::processGenericBlocks (
00312         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks ) {
00313     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00314     process ( dotList,
00315               dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00316               dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00317 }
00318 
00319 
00320 /* *************** ReductiveDotProcessing2D_SS ****************************************** */
00321 
00322 template<typename T1, typename T2>
00323 void ReductiveDotProcessingFunctional2D_SS<T1,T2>::processGenericBlocks (
00324         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00325 {
00326     process ( dotList,
00327               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00328               dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00329 }
00330 
00331 
00332 /* *************** ReductiveDotProcessing2D_TT ****************************************** */
00333 
00334 template<typename T1, int nDim1, typename T2, int nDim2>
00335 void ReductiveDotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processGenericBlocks (
00336         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00337 {
00338     process ( dotList,
00339               dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00340               dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00341 }
00342 
00343 
00344 /* *************** ReductiveDotProcessing2D_NN ****************************************** */
00345 
00346 template<typename T1, typename T2>
00347 void ReductiveDotProcessingFunctional2D_NN<T1,T2>::processGenericBlocks (
00348         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00349 {
00350     process ( dotList,
00351               dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00352               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00353 }
00354 
00355 
00356 /* *************** ReductiveDotProcessing2D_ST ****************************************** */
00357 
00358 template<typename T1, typename T2, int nDim>
00359 void ReductiveDotProcessingFunctional2D_ST<T1,T2,nDim>::processGenericBlocks (
00360         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00361 {
00362     process ( dotList,
00363               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00364               dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00365 }
00366 
00367 
00368 /* *************** ReductiveDotProcessing2D_SN ****************************************** */
00369 
00370 template<typename T1, typename T2>
00371 void ReductiveDotProcessingFunctional2D_SN<T1,T2>::processGenericBlocks (
00372         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00373 {
00374     process ( dotList,
00375               dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00376               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00377 }
00378 
00379 
00380 /* *************** ReductiveDotProcessing2D_LS ****************************************** */
00381 
00382 template<typename T1, template<typename U> class Descriptor, typename T2>
00383 void ReductiveDotProcessingFunctional2D_LS<T1,Descriptor,T2>::processGenericBlocks (
00384         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00385 {
00386     process ( dotList,
00387               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00388               dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00389 }
00390 
00391 
00392 /* *************** ReductiveDotProcessing2D_LT ****************************************** */
00393 
00394 template<typename T1, template<typename U> class Descriptor,
00395          typename T2, int nDim>
00396 void ReductiveDotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processGenericBlocks (
00397         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00398 {
00399     process ( dotList,
00400               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00401               dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00402 }
00403 
00404 /* *************** ReductiveDotProcessing2D_LN ****************************************** */
00405 
00406 template<typename T1, template<typename U> class Descriptor, typename T2>
00407 void ReductiveDotProcessingFunctional2D_LN<T1,Descriptor,T2>::processGenericBlocks (
00408         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00409 {
00410     process ( dotList,
00411               dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00412               dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00413 }
00414 
00415 /* *************** ReductiveLatticeDotProcessing2D ******************************************* */
00416 
00417 template<typename T, template<typename U> class Descriptor>
00418 void ReductiveLatticeDotProcessingFunctional2D<T,Descriptor>::processGenericBlocks (
00419         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00420 {
00421     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
00422     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
00423         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*> (
00424                 atomicBlocks[iLattice] );
00425     }
00426     process(dotList, lattices);
00427 }
00428 
00429 /* *************** ReductiveReductiveScalarFieldDotProcessing2D ********************************* */
00430 
00431 template<typename T>
00432 void ReductiveScalarFieldDotProcessingFunctional2D<T>::processGenericBlocks (
00433         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00434 {
00435     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
00436     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00437         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
00438     }
00439     process(dotList, fields);
00440 }
00441 
00442 /* *************** ReductiveTensorFieldDotProcessing2D ********************************* */
00443 
00444 template<typename T, int nDim>
00445 void ReductiveTensorFieldDotProcessingFunctional2D<T,nDim>::processGenericBlocks (
00446         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00447 {
00448     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
00449     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00450         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
00451     }
00452     process(dotList, fields);
00453 }
00454 
00455 /* *************** ReductiveNTensorFieldDotProcessing2D ********************************* */
00456 
00457 template<typename T>
00458 void ReductiveNTensorFieldDotProcessingFunctional2D<T>::processGenericBlocks (
00459         DotList2D const& dotList, std::vector<AtomicBlock2D*> atomicBlocks )
00460 {
00461     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
00462     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
00463         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
00464     }
00465     process(dotList, fields);
00466 }
00467 
00468 /* *************** BoundedReductiveBoxProcessing2D_L ********************************* */
00469 
00470 template<typename T, template<typename U> class Descriptor>
00471 void BoundedReductiveBoxProcessingFunctional2D_L<T,Descriptor>::processBulkGeneric (
00472         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00473 {
00474     processBulk(domain, dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00475 }
00476 
00477 template<typename T, template<typename U> class Descriptor>
00478 void BoundedReductiveBoxProcessingFunctional2D_L<T,Descriptor>::processEdgeGeneric (
00479         int direction, int orientation,
00480         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00481 {
00482     processEdge(direction, orientation, domain,
00483                 dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00484 }
00485 
00486 template<typename T, template<typename U> class Descriptor>
00487 void BoundedReductiveBoxProcessingFunctional2D_L<T,Descriptor>::processCornerGeneric (
00488         int normalX, int normalY,
00489         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00490 {
00491     processCorner(normalX, normalY, domain,
00492                   dynamic_cast<BlockLattice2D<T,Descriptor>&>(*atomicBlocks[0]));
00493 }
00494 
00495 /* *************** BoundedReductiveBoxProcessing2D_S ******************************************* */
00496 
00497 template<typename T>
00498 void BoundedReductiveBoxProcessingFunctional2D_S<T>::processBulkGeneric (
00499         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00500 {
00501     processBulk(domain, dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00502 }
00503 
00504 template<typename T>
00505 void BoundedReductiveBoxProcessingFunctional2D_S<T>::processEdgeGeneric (
00506         int direction, int orientation,
00507         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00508 {
00509     processEdge(direction, orientation, domain,
00510                 dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00511 }
00512 
00513 template<typename T>
00514 void BoundedReductiveBoxProcessingFunctional2D_S<T>::processCornerGeneric (
00515         int normalX, int normalY,
00516         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00517 {
00518     processCorner(normalX, normalY, domain,
00519                   dynamic_cast<ScalarField2D<T>&>(*atomicBlocks[0]));
00520 }
00521 
00522 /* *************** BoundedReductiveBoxProcessing2D_T ********************************* */
00523 
00524 template<typename T, int nDim>
00525 void BoundedReductiveBoxProcessingFunctional2D_T<T,nDim>::processBulkGeneric (
00526         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00527 {
00528     processBulk(domain, dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00529 }
00530 
00531 template<typename T, int nDim>
00532 void BoundedReductiveBoxProcessingFunctional2D_T<T,nDim>::processEdgeGeneric (
00533         int direction, int orientation,
00534         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00535 {
00536     processEdge(direction, orientation, domain,
00537                 dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00538 }
00539 
00540 template<typename T, int nDim>
00541 void BoundedReductiveBoxProcessingFunctional2D_T<T,nDim>::processCornerGeneric (
00542         int normalX, int normalY,
00543         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00544 {
00545     processCorner(normalX, normalY, domain,
00546                   dynamic_cast<TensorField2D<T,nDim>&>(*atomicBlocks[0]));
00547 }
00548 
00549 /* *************** BoundedReductiveBoxProcessing2D_N ********************************* */
00550 
00551 template<typename T>
00552 void BoundedReductiveBoxProcessingFunctional2D_N<T>::processBulkGeneric (
00553         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00554 {
00555     processBulk(domain, dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00556 }
00557 
00558 template<typename T>
00559 void BoundedReductiveBoxProcessingFunctional2D_N<T>::processEdgeGeneric (
00560         int direction, int orientation,
00561         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00562 {
00563     processEdge(direction, orientation, domain,
00564                 dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00565 }
00566 
00567 template<typename T>
00568 void BoundedReductiveBoxProcessingFunctional2D_N<T>::processCornerGeneric (
00569         int normalX, int normalY,
00570         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00571 {
00572     processCorner(normalX, normalY, domain,
00573                   dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]));
00574 }
00575 
00576 /* *************** BoundedMaskedReductiveBoxProcessing2D_N ********************************* */
00577 
00578 template<typename T>
00579 void BoundedMaskedReductiveBoxProcessingFunctional2D_N<T>::processBulkGeneric (
00580         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00581 {
00582     processBulk(domain,
00583                 dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]),
00584                 dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1]));
00585 }
00586 
00587 template<typename T>
00588 void BoundedMaskedReductiveBoxProcessingFunctional2D_N<T>::processEdgeGeneric (
00589         int direction, int orientation,
00590         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00591 {
00592     processEdge(direction, orientation, domain,
00593                 dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]),
00594                 dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1]));
00595 }
00596 
00597 template<typename T>
00598 void BoundedMaskedReductiveBoxProcessingFunctional2D_N<T>::processCornerGeneric (
00599         int normalX, int normalY,
00600         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00601 {
00602     processCorner(normalX, normalY, domain,
00603                   dynamic_cast<NTensorField2D<T>&>(*atomicBlocks[0]),
00604                   dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[1]));
00605 }
00606 
00607 /* *************** BoundedReductiveBoxProcessing2D_LL ****************************************** */
00608 
00609 template<typename T1, template<typename U1> class Descriptor1,
00610          typename T2, template<typename U2> class Descriptor2>
00611 void BoundedReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::
00612     processBulkGeneric( Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00613 {
00614     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00615     processBulk( domain,
00616                  dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00617                  dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00618 }
00619 
00620 template<typename T1, template<typename U1> class Descriptor1,
00621          typename T2, template<typename U2> class Descriptor2>
00622 void BoundedReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::
00623     processEdgeGeneric( int direction, int orientation,
00624                         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00625 {
00626     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00627     processEdge( direction, orientation, domain,
00628                  dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00629                  dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00630 }
00631 
00632 template<typename T1, template<typename U1> class Descriptor1,
00633          typename T2, template<typename U2> class Descriptor2>
00634 void BoundedReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>::
00635     processCornerGeneric( int normalX, int normalY,
00636                           Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00637 {
00638     PLB_PRECONDITION( atomicBlocks.size() == 2 );
00639     processCorner( normalX, normalY, domain,
00640                    dynamic_cast<BlockLattice2D<T1,Descriptor1>&>(*atomicBlocks[0]),
00641                    dynamic_cast<BlockLattice2D<T2,Descriptor2>&>(*atomicBlocks[1]) );
00642 }
00643 
00644 /* *************** BoundedReductiveBoxProcessing2D_SS ****************************************** */
00645 
00646 template<typename T1, typename T2>
00647 void BoundedReductiveBoxProcessingFunctional2D_SS<T1,T2>::processBulkGeneric (
00648         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00649 {
00650     processBulk( domain,
00651                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00652                  dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00653 }
00654 
00655 template<typename T1, typename T2>
00656 void BoundedReductiveBoxProcessingFunctional2D_SS<T1,T2>::processEdgeGeneric (
00657         int direction, int orientation,
00658         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00659 {
00660     processEdge( direction, orientation, domain,
00661                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00662                  dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00663 }
00664 
00665 template<typename T1, typename T2>
00666 void BoundedReductiveBoxProcessingFunctional2D_SS<T1,T2>::processCornerGeneric (
00667         int normalX, int normalY,
00668         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00669 {
00670     processCorner( normalX, normalY, domain,
00671                    dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00672                    dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00673 }
00674 
00675 /* *************** BoundedReductiveBoxProcessing2D_TT ****************************************** */
00676 
00677 template<typename T1, int nDim1, typename T2, int nDim2>
00678 void BoundedReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processBulkGeneric (
00679         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00680 {
00681     processBulk( domain,
00682                  dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00683                  dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00684 }
00685 
00686 template<typename T1, int nDim1, typename T2, int nDim2>
00687 void BoundedReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processEdgeGeneric (
00688         int direction, int orientation,
00689         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00690 {
00691     processEdge( direction, orientation, domain,
00692                  dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00693                  dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00694 }
00695 
00696 template<typename T1, int nDim1, typename T2, int nDim2>
00697 void BoundedReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>::processCornerGeneric (
00698         int normalX, int normalY,
00699         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00700 {
00701     processCorner( normalX, normalY, domain,
00702                    dynamic_cast<TensorField2D<T1,nDim1>&>(*atomicBlocks[0]),
00703                    dynamic_cast<TensorField2D<T2,nDim2>&>(*atomicBlocks[1]) );
00704 }
00705 
00706 /* *************** BoundedReductiveBoxProcessing2D_NN ****************************************** */
00707 
00708 template<typename T1, typename T2>
00709 void BoundedReductiveBoxProcessingFunctional2D_NN<T1,T2>::processBulkGeneric (
00710         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00711 {
00712     processBulk( domain,
00713                  dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00714                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00715 }
00716 
00717 template<typename T1, typename T2>
00718 void BoundedReductiveBoxProcessingFunctional2D_NN<T1,T2>::processEdgeGeneric (
00719         int direction, int orientation,
00720         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00721 {
00722     processEdge( direction, orientation, domain,
00723                  dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00724                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00725 }
00726 
00727 template<typename T1, typename T2>
00728 void BoundedReductiveBoxProcessingFunctional2D_NN<T1,T2>::processCornerGeneric (
00729         int normalX, int normalY,
00730         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00731 {
00732     processCorner( normalX, normalY, domain,
00733                    dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00734                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00735 }
00736 
00737 /* *************** BoundedMaskedReductiveBoxProcessing2D_NN ****************************************** */
00738 
00739 template<typename T1, typename T2>
00740 void BoundedMaskedReductiveBoxProcessingFunctional2D_NN<T1,T2>::processBulkGeneric (
00741         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00742 {
00743     processBulk( domain,
00744                  dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00745                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00746                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00747 }
00748 
00749 template<typename T1, typename T2>
00750 void BoundedMaskedReductiveBoxProcessingFunctional2D_NN<T1,T2>::processEdgeGeneric (
00751         int direction, int orientation,
00752         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00753 {
00754     processEdge( direction, orientation, domain,
00755                  dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00756                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00757                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00758 }
00759 
00760 template<typename T1, typename T2>
00761 void BoundedMaskedReductiveBoxProcessingFunctional2D_NN<T1,T2>::processCornerGeneric (
00762         int normalX, int normalY,
00763         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00764 {
00765     processCorner( normalX, normalY, domain,
00766                    dynamic_cast<NTensorField2D<T1>&>(*atomicBlocks[0]),
00767                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00768                    dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00769 }
00770 
00771 /* *************** BoundedReductiveBoxProcessing2D_ST ****************************************** */
00772 
00773 template<typename T1, typename T2, int nDim>
00774 void BoundedReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>::processBulkGeneric (
00775         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00776 {
00777     processBulk( domain,
00778                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00779                  dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00780 }
00781 
00782 template<typename T1, typename T2, int nDim>
00783 void BoundedReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>::processEdgeGeneric (
00784         int direction, int orientation,
00785         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00786 {
00787     processEdge( direction, orientation, domain,
00788                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00789                  dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00790 }
00791 
00792 template<typename T1, typename T2, int nDim>
00793 void BoundedReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>::processCornerGeneric (
00794         int normalX, int normalY,
00795         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00796 {
00797     processCorner( normalX, normalY, domain,
00798                    dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00799                    dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00800 }
00801 
00802 /* *************** BoundedReductiveBoxProcessing2D_SN ****************************************** */
00803 
00804 template<typename T1, typename T2>
00805 void BoundedReductiveBoxProcessingFunctional2D_SN<T1,T2>::processBulkGeneric (
00806         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00807 {
00808     processBulk( domain,
00809                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00810                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00811 }
00812 
00813 template<typename T1, typename T2>
00814 void BoundedReductiveBoxProcessingFunctional2D_SN<T1,T2>::processEdgeGeneric (
00815         int direction, int orientation,
00816         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00817 {
00818     processEdge( direction, orientation, domain,
00819                  dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00820                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00821 }
00822 
00823 template<typename T1, typename T2>
00824 void BoundedReductiveBoxProcessingFunctional2D_SN<T1,T2>::processCornerGeneric (
00825         int normalX, int normalY,
00826         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00827 {
00828     processCorner( normalX, normalY, domain,
00829                    dynamic_cast<ScalarField2D<T1>&>(*atomicBlocks[0]),
00830                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00831 }
00832 
00833 /* *************** BoundedReductiveBoxProcessing2D_LS ****************************************** */
00834 
00835 template<typename T1, template<typename U> class Descriptor, typename T2>
00836 void BoundedReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>::processBulkGeneric (
00837         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00838 {
00839     processBulk( domain,
00840                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00841                  dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00842 }
00843 
00844 template<typename T1, template<typename U> class Descriptor, typename T2>
00845 void BoundedReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>::processEdgeGeneric (
00846         int direction, int orientation,
00847         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00848 {
00849     processEdge( direction, orientation, domain,
00850                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00851                  dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00852 }
00853 
00854 template<typename T1, template<typename U> class Descriptor, typename T2>
00855 void BoundedReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>::processCornerGeneric (
00856         int normalX, int normalY,
00857         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00858 {
00859     processCorner( normalX, normalY, domain,
00860                    dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00861                    dynamic_cast<ScalarField2D<T2>&>(*atomicBlocks[1]) );
00862 }
00863 
00864 /* *************** BoundedReductiveBoxProcessing2D_LT ****************************************** */
00865 
00866 template<typename T1, template<typename U> class Descriptor,
00867          typename T2, int nDim>
00868 void BoundedReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processBulkGeneric (
00869         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00870 {
00871     processBulk( domain,
00872                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00873                  dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00874 }
00875 
00876 template<typename T1, template<typename U> class Descriptor,
00877          typename T2, int nDim>
00878 void BoundedReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processEdgeGeneric (
00879         int direction, int orientation,
00880         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00881 {
00882     processEdge( direction, orientation, domain,
00883                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00884                  dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00885 }
00886 
00887 template<typename T1, template<typename U> class Descriptor,
00888          typename T2, int nDim>
00889 void BoundedReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>::processCornerGeneric (
00890         int normalX, int normalY,
00891         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00892 {
00893     processCorner( normalX, normalY, domain,
00894                    dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00895                    dynamic_cast<TensorField2D<T2,nDim>&>(*atomicBlocks[1]) );
00896 }
00897 
00898 /* *************** BoundedReductiveBoxProcessing2D_LN ****************************************** */
00899 
00900 template<typename T1, template<typename U> class Descriptor, typename T2>
00901 void BoundedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processBulkGeneric (
00902         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00903 {
00904     processBulk( domain,
00905                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00906                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00907 }
00908 
00909 template<typename T1, template<typename U> class Descriptor, typename T2>
00910 void BoundedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processEdgeGeneric (
00911         int direction, int orientation,
00912         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00913 {
00914     processEdge( direction, orientation, domain,
00915                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00916                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00917 }
00918 
00919 template<typename T1, template<typename U> class Descriptor, typename T2>
00920 void BoundedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processCornerGeneric (
00921         int normalX, int normalY,
00922         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00923 {
00924     processCorner( normalX, normalY, domain,
00925                    dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00926                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]) );
00927 }
00928 
00929 /* *************** BoundedMaskedReductiveBoxProcessing2D_LN ****************************************** */
00930 
00931 template<typename T1, template<typename U> class Descriptor, typename T2>
00932 void BoundedMaskedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processBulkGeneric (
00933         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00934 {
00935     processBulk( domain,
00936                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00937                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00938                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00939 }
00940 
00941 template<typename T1, template<typename U> class Descriptor, typename T2>
00942 void BoundedMaskedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processEdgeGeneric (
00943         int direction, int orientation,
00944         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00945 {
00946     processEdge( direction, orientation, domain,
00947                  dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00948                  dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00949                  dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00950 }
00951 
00952 template<typename T1, template<typename U> class Descriptor, typename T2>
00953 void BoundedMaskedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>::processCornerGeneric (
00954         int normalX, int normalY,
00955         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00956 {
00957     processCorner( normalX, normalY, domain,
00958                    dynamic_cast<BlockLattice2D<T1,Descriptor>&>(*atomicBlocks[0]),
00959                    dynamic_cast<NTensorField2D<T2>&>(*atomicBlocks[1]),
00960                    dynamic_cast<NTensorField2D<int>&>(*atomicBlocks[2]) );
00961 }
00962 
00963 /* *************** BoundedReductiveLatticeBoxProcessing2D ********************************* */
00964 
00965 template<typename T, template<typename U> class Descriptor>
00966 void BoundedReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>::processBulkGeneric (
00967         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00968 {
00969     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
00970     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
00971         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*> (
00972                 atomicBlocks[iLattice] );
00973     }
00974     processBulk(domain, lattices);
00975 }
00976 
00977 template<typename T, template<typename U> class Descriptor>
00978 void BoundedReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>::processEdgeGeneric (
00979         int direction, int orientation,
00980         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00981 {
00982     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
00983     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
00984         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*> (
00985                 atomicBlocks[iLattice] );
00986     }
00987     processEdge(direction, orientation, domain, lattices);
00988 }
00989 
00990 template<typename T, template<typename U> class Descriptor>
00991 void BoundedReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>::processCornerGeneric (
00992         int normalX, int normalY,
00993         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
00994 {
00995     std::vector<BlockLattice2D<T,Descriptor>*> lattices(atomicBlocks.size());
00996     for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) {
00997         lattices[iLattice] = dynamic_cast<BlockLattice2D<T,Descriptor>*> (
00998                 atomicBlocks[iLattice] );
00999     }
01000     processCorner(normalX, normalY, domain, lattices);
01001 }
01002 
01003 /* *************** BoundedReductiveScalarFieldBoxProcessing2D ************************ */
01004 
01005 template<typename T>
01006 void BoundedReductiveScalarFieldBoxProcessingFunctional2D<T>::processBulkGeneric (
01007         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01008 {
01009     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
01010     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01011         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
01012     }
01013     processBulk(domain, fields);
01014 }
01015 
01016 template<typename T>
01017 void BoundedReductiveScalarFieldBoxProcessingFunctional2D<T>::processEdgeGeneric (
01018         int direction, int orientation,
01019         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01020 {
01021     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
01022     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01023         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
01024     }
01025     processEdge(direction, orientation, domain, fields);
01026 }
01027 
01028 template<typename T>
01029 void BoundedReductiveScalarFieldBoxProcessingFunctional2D<T>::processCornerGeneric (
01030         int normalX, int normalY,
01031         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01032 {
01033     std::vector<ScalarField2D<T>*> fields(atomicBlocks.size());
01034     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01035         fields[iField] = dynamic_cast<ScalarField2D<T>*>(atomicBlocks[iField]);
01036     }
01037     processCorner(normalX, normalY, domain, fields);
01038 }
01039 
01040 
01041 /* *************** BoundedReductiveTensorFieldBoxProcessing2D ************************ */
01042 
01043 template<typename T, int nDim>
01044 void BoundedReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>::processBulkGeneric (
01045         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01046 {
01047     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
01048     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01049         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
01050     }
01051     processBulk(domain, fields);
01052 }
01053 
01054 template<typename T, int nDim>
01055 void BoundedReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>::processEdgeGeneric (
01056         int direction, int orientation,
01057         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01058 {
01059     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
01060     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01061         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
01062     }
01063     processEdge(direction, orientation, domain, fields);
01064 }
01065 
01066 template<typename T, int nDim>
01067 void BoundedReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>::processCornerGeneric (
01068         int normalX, int normalY,
01069         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01070 {
01071     std::vector<TensorField2D<T,nDim>*> fields(atomicBlocks.size());
01072     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01073         fields[iField] = dynamic_cast<TensorField2D<T,nDim>*>(atomicBlocks[iField]);
01074     }
01075     processCorner(normalX, normalY, domain, fields);
01076 }
01077 
01078 /* *************** BoundedReductiveNTensorFieldBoxProcessing2D ************************ */
01079 
01080 template<typename T>
01081 void BoundedReductiveNTensorFieldBoxProcessingFunctional2D<T>::processBulkGeneric (
01082         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01083 {
01084     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
01085     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01086         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
01087     }
01088     processBulk(domain, fields);
01089 }
01090 
01091 template<typename T>
01092 void BoundedReductiveNTensorFieldBoxProcessingFunctional2D<T>::processEdgeGeneric (
01093         int direction, int orientation,
01094         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01095 {
01096     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
01097     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01098         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
01099     }
01100     processEdge(direction, orientation, domain, fields);
01101 }
01102 
01103 template<typename T>
01104 void BoundedReductiveNTensorFieldBoxProcessingFunctional2D<T>::processCornerGeneric (
01105         int normalX, int normalY,
01106         Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks )
01107 {
01108     std::vector<NTensorField2D<T>*> fields(atomicBlocks.size());
01109     for (pluint iField=0; iField<atomicBlocks.size(); ++iField) {
01110         fields[iField] = dynamic_cast<NTensorField2D<T>*>(atomicBlocks[iField]);
01111     }
01112     processCorner(normalX, normalY, domain, fields);
01113 }
01114 
01115 }  // namespace plb
01116 
01117 #endif  // REDUCTIVE_DATA_PROCESSING_FUNCTIONAL_2D_HH