|
Palabos
Version 1.0
|
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