|
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_3D_HH 00027 #define DATA_PROCESSING_FUNCTIONAL_3D_HH 00028 00029 #include "atomicBlock/dataProcessorWrapper3D.h" 00030 #include "atomicBlock/blockLattice3D.h" 00031 #include "atomicBlock/dataField3D.h" 00032 #include "atomicBlock/dataProcessor3D.h" 00033 #include "core/plbDebug.h" 00034 00035 namespace plb { 00036 00037 /* *************** BoxProcessing3D_L ******************************************* */ 00038 00039 template<typename T, template<typename U> class Descriptor> 00040 void BoxProcessingFunctional3D_L<T,Descriptor>::processGenericBlocks ( 00041 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00042 { 00043 process(domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00044 } 00045 00046 template<typename T, template<typename U> class Descriptor> 00047 void MaskedBoxProcessingFunctional3D_L<T,Descriptor>::processGenericBlocks ( 00048 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00049 { 00050 process( domain, 00051 dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0]), 00052 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1]) 00053 ); 00054 } 00055 00056 /* *************** BoxProcessing3D_S ******************************************* */ 00057 00058 template<typename T> 00059 void BoxProcessingFunctional3D_S<T>::processGenericBlocks ( 00060 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00061 { 00062 process(domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00063 } 00064 00065 /* *************** BoxProcessing3D_T ******************************************* */ 00066 00067 template<typename T, int nDim> 00068 void BoxProcessingFunctional3D_T<T,nDim>::processGenericBlocks ( 00069 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00070 { 00071 process(domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00072 } 00073 00074 /* *************** BoxProcessing3D_N ******************************************* */ 00075 00076 template<typename T> 00077 void BoxProcessingFunctional3D_N<T>::processGenericBlocks ( 00078 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00079 { 00080 process(domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00081 } 00082 00083 /* *************** MaskedBoxProcessing3D_N ******************************************* */ 00084 00085 template<typename T> 00086 void MaskedBoxProcessingFunctional3D_N<T>::processGenericBlocks ( 00087 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00088 { 00089 process(domain, 00090 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00091 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00092 } 00093 00094 /* *************** BoxProcessing3D_LL******************************************* */ 00095 00096 template<typename T1, template<typename U1> class Descriptor1, 00097 typename T2, template<typename U2> class Descriptor2> 00098 void BoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processGenericBlocks ( 00099 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00100 { 00101 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00102 process ( domain, 00103 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00104 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00105 } 00106 00107 00108 /* *************** BoxProcessing3D_SS ****************************************** */ 00109 00110 template<typename T1, typename T2> 00111 void BoxProcessingFunctional3D_SS<T1,T2>::processGenericBlocks ( 00112 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00113 { 00114 process ( domain, 00115 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00116 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00117 } 00118 00119 00120 /* *************** BoxProcessing3D_TT ****************************************** */ 00121 00122 template<typename T1, int nDim1, typename T2, int nDim2> 00123 void BoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processGenericBlocks ( 00124 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00125 { 00126 process ( domain, 00127 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00128 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00129 } 00130 00131 00132 /* *************** BoxProcessing3D_NN ****************************************** */ 00133 00134 template<typename T1, typename T2> 00135 void BoxProcessingFunctional3D_NN<T1,T2>::processGenericBlocks ( 00136 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00137 { 00138 process ( domain, 00139 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00140 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00141 } 00142 00143 00144 /* *************** MaskedBoxProcessing3D_NN ****************************************** */ 00145 00146 template<typename T1, typename T2> 00147 void MaskedBoxProcessingFunctional3D_NN<T1,T2>::processGenericBlocks ( 00148 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00149 { 00150 process ( domain, 00151 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00152 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00153 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 00154 } 00155 00156 00157 /* *************** BoxProcessing3D_ST ****************************************** */ 00158 00159 template<typename T1, typename T2, int nDim> 00160 void BoxProcessingFunctional3D_ST<T1,T2,nDim>::processGenericBlocks ( 00161 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00162 { 00163 process ( domain, 00164 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00165 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00166 } 00167 00168 00169 /* *************** BoxProcessing3D_SN ****************************************** */ 00170 00171 template<typename T1, typename T2> 00172 void BoxProcessingFunctional3D_SN<T1,T2>::processGenericBlocks ( 00173 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00174 { 00175 process ( domain, 00176 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00177 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00178 } 00179 00180 00181 /* *************** BoxProcessing3D_LS ****************************************** */ 00182 00183 template<typename T1, template<typename U> class Descriptor, typename T2> 00184 void BoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processGenericBlocks ( 00185 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00186 { 00187 process ( domain, 00188 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00189 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00190 } 00191 00192 /* *************** BoxProcessing3D_LT ****************************************** */ 00193 00194 template<typename T1, template<typename U> class Descriptor, 00195 typename T2, int nDim> 00196 void BoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processGenericBlocks ( 00197 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00198 { 00199 process ( domain, 00200 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00201 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00202 } 00203 00204 /* *************** BoxProcessing3D_LN ****************************************** */ 00205 00206 template<typename T1, template<typename U> class Descriptor, typename T2> 00207 void BoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processGenericBlocks ( 00208 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00209 { 00210 process ( domain, 00211 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00212 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00213 } 00214 00215 /* *************** MaskedBoxProcessing3D_LN ****************************************** */ 00216 00217 template<typename T1, template<typename U> class Descriptor, typename T2> 00218 void MaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processGenericBlocks ( 00219 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00220 { 00221 process ( domain, 00222 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00223 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00224 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 00225 } 00226 00227 /* *************** LatticeBoxProcessing3D ************************************** */ 00228 00229 template<typename T, template<typename U> class Descriptor> 00230 void LatticeBoxProcessingFunctional3D<T,Descriptor>::processGenericBlocks ( 00231 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00232 { 00233 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 00234 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 00235 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 00236 } 00237 process(domain, lattices); 00238 } 00239 00240 /* *************** ScalarFieldBoxProcessing3D *********************************** */ 00241 00242 template<typename T> 00243 void ScalarFieldBoxProcessingFunctional3D<T>::processGenericBlocks ( 00244 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00245 { 00246 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 00247 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00248 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 00249 } 00250 process(domain, fields); 00251 } 00252 00253 /* *************** TensorFieldBoxProcessing3D *********************************** */ 00254 00255 template<typename T, int nDim> 00256 void TensorFieldBoxProcessingFunctional3D<T,nDim>::processGenericBlocks ( 00257 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00258 { 00259 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 00260 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00261 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 00262 } 00263 process(domain, fields); 00264 } 00265 00266 /* *************** NTensorFieldBoxProcessing3D *********************************** */ 00267 00268 template<typename T> 00269 void NTensorFieldBoxProcessingFunctional3D<T>::processGenericBlocks ( 00270 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00271 { 00272 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 00273 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00274 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 00275 } 00276 process(domain, fields); 00277 } 00278 00279 00280 template<typename T> 00281 void MaskedNTensorFieldBoxProcessingFunctional3D<T>::processGenericBlocks ( 00282 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00283 { 00284 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()-1); 00285 for (pluint iField=0; iField<atomicBlocks.size()-1; ++iField) { 00286 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 00287 } 00288 NTensorField3D<int>& mask = dynamic_cast<NTensorField3D<int>&>(*atomicBlocks.back()); 00289 process(domain, fields, mask); 00290 } 00291 00292 /* *************** DotProcessing3D_L ******************************************* */ 00293 00294 template<typename T, template<typename U> class Descriptor> 00295 void DotProcessingFunctional3D_L<T,Descriptor>::processGenericBlocks ( 00296 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00297 { 00298 process(dotList, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00299 } 00300 00301 /* *************** DotProcessing3D_S ******************************************* */ 00302 00303 template<typename T> 00304 void DotProcessingFunctional3D_S<T>::processGenericBlocks ( 00305 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00306 { 00307 process(dotList, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00308 } 00309 00310 /* *************** DotProcessing3D_T ******************************************* */ 00311 00312 template<typename T, int nDim> 00313 void DotProcessingFunctional3D_T<T,nDim>::processGenericBlocks ( 00314 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00315 { 00316 process(dotList, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00317 } 00318 00319 /* *************** DotProcessing3D_N ******************************************* */ 00320 00321 template<typename T> 00322 void DotProcessingFunctional3D_N<T>::processGenericBlocks ( 00323 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00324 { 00325 process(dotList, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00326 } 00327 00328 /* *************** DotProcessing3D_LL******************************************* */ 00329 00330 template<typename T1, template<typename U1> class Descriptor1, 00331 typename T2, template<typename U2> class Descriptor2> 00332 void DotProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processGenericBlocks ( 00333 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) { 00334 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00335 process ( dotList, 00336 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00337 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00338 } 00339 00340 00341 /* *************** DotProcessing3D_SS ****************************************** */ 00342 00343 template<typename T1, typename T2> 00344 void DotProcessingFunctional3D_SS<T1,T2>::processGenericBlocks ( 00345 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00346 { 00347 process ( dotList, 00348 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00349 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00350 } 00351 00352 00353 /* *************** DotProcessing3D_TT ****************************************** */ 00354 00355 template<typename T1, int nDim1, typename T2, int nDim2> 00356 void DotProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processGenericBlocks ( 00357 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00358 { 00359 process ( dotList, 00360 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00361 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00362 } 00363 00364 00365 /* *************** DotProcessing3D_NN ****************************************** */ 00366 00367 template<typename T1, typename T2> 00368 void DotProcessingFunctional3D_NN<T1,T2>::processGenericBlocks ( 00369 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00370 { 00371 process ( dotList, 00372 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00373 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00374 } 00375 00376 00377 /* *************** DotProcessing3D_ST ****************************************** */ 00378 00379 template<typename T1, typename T2, int nDim> 00380 void DotProcessingFunctional3D_ST<T1,T2,nDim>::processGenericBlocks ( 00381 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00382 { 00383 process ( dotList, 00384 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00385 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00386 } 00387 00388 00389 /* *************** DotProcessing3D_SN ****************************************** */ 00390 00391 template<typename T1, typename T2> 00392 void DotProcessingFunctional3D_SN<T1,T2>::processGenericBlocks ( 00393 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00394 { 00395 process ( dotList, 00396 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00397 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00398 } 00399 00400 00401 /* *************** DotProcessing3D_LS ****************************************** */ 00402 00403 template<typename T1, template<typename U> class Descriptor, typename T2> 00404 void DotProcessingFunctional3D_LS<T1,Descriptor,T2>::processGenericBlocks ( 00405 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00406 { 00407 process ( dotList, 00408 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00409 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00410 } 00411 00412 00413 /* *************** DotProcessing3D_LT ****************************************** */ 00414 00415 template<typename T1, template<typename U> class Descriptor, 00416 typename T2, int nDim> 00417 void DotProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processGenericBlocks ( 00418 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00419 { 00420 process ( dotList, 00421 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00422 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00423 } 00424 00425 /* *************** DotProcessing3D_LN ****************************************** */ 00426 00427 template<typename T1, template<typename U> class Descriptor, typename T2> 00428 void DotProcessingFunctional3D_LN<T1,Descriptor,T2>::processGenericBlocks ( 00429 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00430 { 00431 process ( dotList, 00432 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00433 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00434 } 00435 00436 /* *************** LatticeDotProcessing3D ******************************************* */ 00437 00438 template<typename T, template<typename U> class Descriptor> 00439 void LatticeDotProcessingFunctional3D<T,Descriptor>::processGenericBlocks ( 00440 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00441 { 00442 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 00443 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 00444 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*> ( 00445 atomicBlocks[iLattice] ); 00446 } 00447 process(dotList, lattices); 00448 } 00449 00450 /* *************** ScalarFieldDotProcessing3D ********************************* */ 00451 00452 template<typename T> 00453 void ScalarFieldDotProcessingFunctional3D<T>::processGenericBlocks ( 00454 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00455 { 00456 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 00457 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00458 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 00459 } 00460 process(dotList, fields); 00461 } 00462 00463 /* *************** TensorFieldDotProcessing3D ********************************* */ 00464 00465 template<typename T, int nDim> 00466 void TensorFieldDotProcessingFunctional3D<T,nDim>::processGenericBlocks ( 00467 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00468 { 00469 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 00470 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00471 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 00472 } 00473 process(dotList, fields); 00474 } 00475 00476 /* *************** TensorFieldDotProcessing3D ********************************* */ 00477 00478 template<typename T> 00479 void NTensorFieldDotProcessingFunctional3D<T>::processGenericBlocks ( 00480 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00481 { 00482 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 00483 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00484 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 00485 } 00486 process(dotList, fields); 00487 } 00488 00489 /* *************** BoundedBoxProcessing3D_L ******************************************* */ 00490 00491 template<typename T, template<typename U> class Descriptor> 00492 void BoundedBoxProcessingFunctional3D_L<T,Descriptor>::processBulkGeneric ( 00493 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00494 { 00495 processBulk(domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00496 } 00497 00498 template<typename T, template<typename U> class Descriptor> 00499 void BoundedBoxProcessingFunctional3D_L<T,Descriptor>::processPlaneGeneric ( 00500 int direction, int orientation, 00501 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00502 { 00503 processPlane(direction, orientation, domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00504 } 00505 00506 template<typename T, template<typename U> class Descriptor> 00507 void BoundedBoxProcessingFunctional3D_L<T,Descriptor>::processEdgeGeneric ( 00508 int plane, int normal1, int normal2, 00509 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00510 { 00511 processEdge(plane,normal1,normal2, domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00512 } 00513 00514 template<typename T, template<typename U> class Descriptor> 00515 void BoundedBoxProcessingFunctional3D_L<T,Descriptor>::processCornerGeneric ( 00516 int normalX, int normalY, int normalZ, 00517 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00518 { 00519 processCorner(normalX, normalY, normalZ, domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00520 } 00521 00522 /* *************** BoundedBoxProcessing3D_S ******************************************* */ 00523 00524 template<typename T> 00525 void BoundedBoxProcessingFunctional3D_S<T>::processBulkGeneric ( 00526 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00527 { 00528 processBulk(domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00529 } 00530 00531 template<typename T> 00532 void BoundedBoxProcessingFunctional3D_S<T>::processPlaneGeneric ( 00533 int direction, int orientation, 00534 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00535 { 00536 processPlane(direction, orientation, domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00537 } 00538 00539 template<typename T> 00540 void BoundedBoxProcessingFunctional3D_S<T>::processEdgeGeneric ( 00541 int plane, int normal1, int normal2, 00542 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00543 { 00544 processEdge(plane,normal1,normal2, domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00545 } 00546 00547 template<typename T> 00548 void BoundedBoxProcessingFunctional3D_S<T>::processCornerGeneric ( 00549 int normalX, int normalY, int normalZ, 00550 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00551 { 00552 processCorner(normalX, normalY, normalZ, domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00553 } 00554 00555 /* *************** BoundedBoxProcessing3D_T ******************************************* */ 00556 00557 template<typename T, int nDim> 00558 void BoundedBoxProcessingFunctional3D_T<T,nDim>::processBulkGeneric ( 00559 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00560 { 00561 processBulk(domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00562 } 00563 00564 template<typename T, int nDim> 00565 void BoundedBoxProcessingFunctional3D_T<T,nDim>::processPlaneGeneric ( 00566 int direction, int orientation, 00567 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00568 { 00569 processPlane(direction, orientation, domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00570 } 00571 00572 template<typename T, int nDim> 00573 void BoundedBoxProcessingFunctional3D_T<T,nDim>::processEdgeGeneric ( 00574 int plane, int normal1, int normal2, 00575 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00576 { 00577 processEdge(plane,normal1,normal2, domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00578 } 00579 00580 template<typename T, int nDim> 00581 void BoundedBoxProcessingFunctional3D_T<T,nDim>::processCornerGeneric ( 00582 int normalX, int normalY, int normalZ, 00583 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00584 { 00585 processCorner(normalX, normalY, normalZ, domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00586 } 00587 00588 00589 /* *************** BoundedBoxProcessing3D_N ******************************************* */ 00590 00591 template<typename T> 00592 void BoundedBoxProcessingFunctional3D_N<T>::processBulkGeneric ( 00593 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00594 { 00595 processBulk(domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00596 } 00597 00598 template<typename T> 00599 void BoundedBoxProcessingFunctional3D_N<T>::processPlaneGeneric ( 00600 int direction, int orientation, 00601 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00602 { 00603 processPlane(direction, orientation, domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00604 } 00605 00606 template<typename T> 00607 void BoundedBoxProcessingFunctional3D_N<T>::processEdgeGeneric ( 00608 int plane, int normal1, int normal2, 00609 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00610 { 00611 processEdge(plane,normal1,normal2, domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00612 } 00613 00614 template<typename T> 00615 void BoundedBoxProcessingFunctional3D_N<T>::processCornerGeneric ( 00616 int normalX, int normalY, int normalZ, 00617 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00618 { 00619 processCorner(normalX, normalY, normalZ, domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00620 } 00621 00622 00623 /* *************** BoundedMaskedBoxProcessing3D_N ******************************************* */ 00624 00625 template<typename T> 00626 void BoundedMaskedBoxProcessingFunctional3D_N<T>::processBulkGeneric ( 00627 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00628 { 00629 processBulk(domain, 00630 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00631 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00632 } 00633 00634 template<typename T> 00635 void BoundedMaskedBoxProcessingFunctional3D_N<T>::processPlaneGeneric ( 00636 int direction, int orientation, 00637 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00638 { 00639 processPlane(direction, orientation, domain, 00640 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00641 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00642 } 00643 00644 template<typename T> 00645 void BoundedMaskedBoxProcessingFunctional3D_N<T>::processEdgeGeneric ( 00646 int plane, int normal1, int normal2, 00647 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00648 { 00649 processEdge(plane,normal1,normal2, domain, 00650 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00651 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00652 } 00653 00654 template<typename T> 00655 void BoundedMaskedBoxProcessingFunctional3D_N<T>::processCornerGeneric ( 00656 int normalX, int normalY, int normalZ, 00657 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00658 { 00659 processCorner(normalX, normalY, normalZ, domain, 00660 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00661 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00662 } 00663 00664 00665 /* *************** BoundedBoxProcessing3D_LL ****************************************** */ 00666 00667 template<typename T1, template<typename U1> class Descriptor1, 00668 typename T2, template<typename U2> class Descriptor2> 00669 void BoundedBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processBulkGeneric ( 00670 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00671 { 00672 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00673 processBulk( domain, 00674 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00675 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00676 } 00677 00678 template<typename T1, template<typename U1> class Descriptor1, 00679 typename T2, template<typename U2> class Descriptor2> 00680 void BoundedBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processPlaneGeneric ( 00681 int direction, int orientation, 00682 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00683 { 00684 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00685 processPlane( direction, orientation, domain, 00686 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00687 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00688 } 00689 00690 template<typename T1, template<typename U1> class Descriptor1, 00691 typename T2, template<typename U2> class Descriptor2> 00692 void BoundedBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processEdgeGeneric ( 00693 int plane, int normal1, int normal2, 00694 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00695 { 00696 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00697 processEdge( plane,normal1,normal2, domain, 00698 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00699 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00700 } 00701 00702 template<typename T1, template<typename U1> class Descriptor1, 00703 typename T2, template<typename U2> class Descriptor2> 00704 void BoundedBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processCornerGeneric ( 00705 int normalX, int normalY, int normalZ, 00706 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00707 { 00708 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00709 processCorner( normalX, normalY, normalZ, domain, 00710 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00711 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00712 } 00713 00714 /* *************** BoundedBoxProcessing3D_SS ****************************************** */ 00715 00716 template<typename T1, typename T2> 00717 void BoundedBoxProcessingFunctional3D_SS<T1,T2>::processBulkGeneric ( 00718 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00719 { 00720 processBulk( domain, 00721 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00722 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00723 } 00724 00725 template<typename T1, typename T2> 00726 void BoundedBoxProcessingFunctional3D_SS<T1,T2>::processPlaneGeneric ( 00727 int direction, int orientation, 00728 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00729 { 00730 processPlane( direction, orientation, domain, 00731 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00732 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00733 } 00734 00735 template<typename T1, typename T2> 00736 void BoundedBoxProcessingFunctional3D_SS<T1,T2>::processEdgeGeneric ( 00737 int plane, int normal1, int normal2, 00738 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00739 { 00740 processEdge( plane,normal1,normal2, domain, 00741 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00742 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00743 } 00744 00745 template<typename T1, typename T2> 00746 void BoundedBoxProcessingFunctional3D_SS<T1,T2>::processCornerGeneric ( 00747 int normalX, int normalY, int normalZ, 00748 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00749 { 00750 processCorner( normalX, normalY, normalZ, domain, 00751 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00752 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00753 } 00754 00755 /* *************** BoundedBoxProcessing3D_TT ****************************************** */ 00756 00757 template<typename T1, int nDim1, typename T2, int nDim2> 00758 void BoundedBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processBulkGeneric ( 00759 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00760 { 00761 processBulk( domain, 00762 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00763 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00764 } 00765 00766 template<typename T1, int nDim1, typename T2, int nDim2> 00767 void BoundedBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processPlaneGeneric ( 00768 int direction, int orientation, 00769 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00770 { 00771 processPlane( direction, orientation, domain, 00772 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00773 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00774 } 00775 00776 template<typename T1, int nDim1, typename T2, int nDim2> 00777 void BoundedBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processEdgeGeneric ( 00778 int plane, int normal1, int normal2, 00779 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00780 { 00781 processEdge( plane,normal1,normal2, domain, 00782 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00783 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00784 } 00785 00786 template<typename T1, int nDim1, typename T2, int nDim2> 00787 void BoundedBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processCornerGeneric ( 00788 int normalX, int normalY, int normalZ, 00789 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00790 { 00791 processCorner( normalX, normalY, normalZ, domain, 00792 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00793 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00794 } 00795 00796 /* *************** BoundedBoxProcessing3D_NN ****************************************** */ 00797 00798 template<typename T1, typename T2> 00799 void BoundedBoxProcessingFunctional3D_NN<T1,T2>::processBulkGeneric ( 00800 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00801 { 00802 processBulk( domain, 00803 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00804 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00805 } 00806 00807 template<typename T1, typename T2> 00808 void BoundedBoxProcessingFunctional3D_NN<T1,T2>::processPlaneGeneric ( 00809 int direction, int orientation, 00810 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00811 { 00812 processPlane( direction, orientation, domain, 00813 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00814 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00815 } 00816 00817 template<typename T1, typename T2> 00818 void BoundedBoxProcessingFunctional3D_NN<T1,T2>::processEdgeGeneric ( 00819 int plane, int normal1, int normal2, 00820 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00821 { 00822 processEdge( plane,normal1,normal2, domain, 00823 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00824 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00825 } 00826 00827 template<typename T1, typename T2> 00828 void BoundedBoxProcessingFunctional3D_NN<T1,T2>::processCornerGeneric ( 00829 int normalX, int normalY, int normalZ, 00830 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00831 { 00832 processCorner( normalX, normalY, normalZ, domain, 00833 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00834 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00835 } 00836 00837 00838 /* *************** BoundedMaskedBoxProcessing3D_NN ****************************************** */ 00839 00840 template<typename T1, typename T2> 00841 void BoundedMaskedBoxProcessingFunctional3D_NN<T1,T2>::processBulkGeneric ( 00842 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00843 { 00844 processBulk( domain, 00845 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00846 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00847 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 00848 } 00849 00850 template<typename T1, typename T2> 00851 void BoundedMaskedBoxProcessingFunctional3D_NN<T1,T2>::processPlaneGeneric ( 00852 int direction, int orientation, 00853 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00854 { 00855 processPlane( direction, orientation, domain, 00856 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00857 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00858 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 00859 } 00860 00861 template<typename T1, typename T2> 00862 void BoundedMaskedBoxProcessingFunctional3D_NN<T1,T2>::processEdgeGeneric ( 00863 int plane, int normal1, int normal2, 00864 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00865 { 00866 processEdge( plane,normal1,normal2, domain, 00867 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00868 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00869 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 00870 } 00871 00872 template<typename T1, typename T2> 00873 void BoundedMaskedBoxProcessingFunctional3D_NN<T1,T2>::processCornerGeneric ( 00874 int normalX, int normalY, int normalZ, 00875 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00876 { 00877 processCorner( normalX, normalY, normalZ, domain, 00878 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00879 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00880 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 00881 } 00882 00883 /* *************** BoundedBoxProcessing3D_ST ****************************************** */ 00884 00885 template<typename T1, typename T2, int nDim> 00886 void BoundedBoxProcessingFunctional3D_ST<T1,T2,nDim>::processBulkGeneric ( 00887 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00888 { 00889 processBulk( domain, 00890 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00891 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00892 } 00893 00894 template<typename T1, typename T2, int nDim> 00895 void BoundedBoxProcessingFunctional3D_ST<T1,T2,nDim>::processPlaneGeneric ( 00896 int direction, int orientation, 00897 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00898 { 00899 processPlane( direction, orientation, domain, 00900 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00901 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00902 } 00903 00904 template<typename T1, typename T2, int nDim> 00905 void BoundedBoxProcessingFunctional3D_ST<T1,T2,nDim>::processEdgeGeneric ( 00906 int plane, int normal1, int normal2, 00907 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00908 { 00909 processEdge( plane,normal1,normal2, domain, 00910 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00911 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00912 } 00913 00914 template<typename T1, typename T2, int nDim> 00915 void BoundedBoxProcessingFunctional3D_ST<T1,T2,nDim>::processCornerGeneric ( 00916 int normalX, int normalY, int normalZ, 00917 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00918 { 00919 processCorner( normalX, normalY, normalZ, domain, 00920 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00921 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00922 } 00923 00924 /* *************** BoundedBoxProcessing3D_SN ****************************************** */ 00925 00926 template<typename T1, typename T2> 00927 void BoundedBoxProcessingFunctional3D_SN<T1,T2>::processBulkGeneric ( 00928 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00929 { 00930 processBulk( domain, 00931 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00932 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00933 } 00934 00935 template<typename T1, typename T2> 00936 void BoundedBoxProcessingFunctional3D_SN<T1,T2>::processPlaneGeneric ( 00937 int direction, int orientation, 00938 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00939 { 00940 processPlane( direction, orientation, domain, 00941 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00942 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00943 } 00944 00945 template<typename T1, typename T2> 00946 void BoundedBoxProcessingFunctional3D_SN<T1,T2>::processEdgeGeneric ( 00947 int plane, int normal1, int normal2, 00948 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00949 { 00950 processEdge( plane,normal1,normal2, domain, 00951 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00952 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00953 } 00954 00955 template<typename T1, typename T2> 00956 void BoundedBoxProcessingFunctional3D_SN<T1,T2>::processCornerGeneric ( 00957 int normalX, int normalY, int normalZ, 00958 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00959 { 00960 processCorner( normalX, normalY, normalZ, domain, 00961 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00962 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00963 } 00964 00965 /* *************** BoundedBoxProcessing3D_LS ****************************************** */ 00966 00967 template<typename T1, template<typename U> class Descriptor, typename T2> 00968 void BoundedBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processBulkGeneric ( 00969 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00970 { 00971 processBulk( domain, 00972 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00973 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00974 } 00975 00976 template<typename T1, template<typename U> class Descriptor, typename T2> 00977 void BoundedBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processPlaneGeneric ( 00978 int direction, int orientation, 00979 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00980 { 00981 processPlane( direction, orientation, domain, 00982 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00983 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00984 } 00985 00986 template<typename T1, template<typename U> class Descriptor, typename T2> 00987 void BoundedBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processEdgeGeneric ( 00988 int plane, int normal1, int normal2, 00989 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00990 { 00991 processEdge( plane,normal1,normal2, domain, 00992 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00993 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00994 } 00995 00996 template<typename T1, template<typename U> class Descriptor, typename T2> 00997 void BoundedBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processCornerGeneric ( 00998 int normalX, int normalY, int normalZ, 00999 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01000 { 01001 processCorner( normalX, normalY, normalZ, domain, 01002 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01003 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 01004 } 01005 01006 /* *************** BoundedBoxProcessing3D_LT ****************************************** */ 01007 01008 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01009 void BoundedBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processBulkGeneric ( 01010 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01011 { 01012 processBulk( domain, 01013 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01014 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 01015 } 01016 01017 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01018 void BoundedBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processPlaneGeneric ( 01019 int direction, int orientation, 01020 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01021 { 01022 processPlane( direction, orientation, domain, 01023 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01024 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 01025 } 01026 01027 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01028 void BoundedBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processEdgeGeneric ( 01029 int plane, int normal1, int normal2, 01030 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01031 { 01032 processEdge( plane,normal1,normal2, domain, 01033 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01034 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 01035 } 01036 01037 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01038 void BoundedBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processCornerGeneric ( 01039 int normalX, int normalY, int normalZ, 01040 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01041 { 01042 processCorner( normalX, normalY, normalZ, domain, 01043 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01044 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 01045 } 01046 01047 /* *************** BoundedBoxProcessing3D_LN ****************************************** */ 01048 01049 template<typename T1, template<typename U> class Descriptor, typename T2> 01050 void BoundedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processBulkGeneric ( 01051 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01052 { 01053 processBulk( domain, 01054 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01055 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 01056 } 01057 01058 template<typename T1, template<typename U> class Descriptor, typename T2> 01059 void BoundedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processPlaneGeneric ( 01060 int direction, int orientation, 01061 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01062 { 01063 processPlane( direction, orientation, domain, 01064 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01065 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 01066 } 01067 01068 template<typename T1, template<typename U> class Descriptor, typename T2> 01069 void BoundedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processEdgeGeneric ( 01070 int plane, int normal1, int normal2, 01071 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01072 { 01073 processEdge( plane,normal1,normal2, domain, 01074 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01075 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 01076 } 01077 01078 template<typename T1, template<typename U> class Descriptor, typename T2> 01079 void BoundedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processCornerGeneric ( 01080 int normalX, int normalY, int normalZ, 01081 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01082 { 01083 processCorner( normalX, normalY, normalZ, domain, 01084 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01085 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 01086 } 01087 01088 /* *************** BoundedMaskedBoxProcessing3D_LN ****************************************** */ 01089 01090 template<typename T1, template<typename U> class Descriptor, typename T2> 01091 void BoundedMaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processBulkGeneric ( 01092 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01093 { 01094 processBulk( domain, 01095 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01096 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 01097 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 01098 } 01099 01100 template<typename T1, template<typename U> class Descriptor, typename T2> 01101 void BoundedMaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processPlaneGeneric ( 01102 int direction, int orientation, 01103 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01104 { 01105 processPlane( direction, orientation, domain, 01106 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01107 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 01108 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 01109 } 01110 01111 template<typename T1, template<typename U> class Descriptor, typename T2> 01112 void BoundedMaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processEdgeGeneric ( 01113 int plane, int normal1, int normal2, 01114 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01115 { 01116 processEdge( plane,normal1,normal2, domain, 01117 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01118 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 01119 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 01120 } 01121 01122 template<typename T1, template<typename U> class Descriptor, typename T2> 01123 void BoundedMaskedBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processCornerGeneric ( 01124 int normalX, int normalY, int normalZ, 01125 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01126 { 01127 processCorner( normalX, normalY, normalZ, domain, 01128 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01129 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 01130 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 01131 } 01132 01133 /* *************** BoundedLatticeBoxProcessing3D ******************************************* */ 01134 01135 template<typename T, template<typename U> class Descriptor> 01136 void BoundedLatticeBoxProcessingFunctional3D<T,Descriptor>::processBulkGeneric ( 01137 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01138 { 01139 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 01140 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 01141 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 01142 } 01143 processBulk(domain, lattices); 01144 } 01145 01146 template<typename T, template<typename U> class Descriptor> 01147 void BoundedLatticeBoxProcessingFunctional3D<T,Descriptor>::processPlaneGeneric ( 01148 int direction, int orientation, 01149 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01150 { 01151 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 01152 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 01153 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 01154 } 01155 processPlane(direction, orientation, domain, lattices); 01156 } 01157 01158 template<typename T, template<typename U> class Descriptor> 01159 void BoundedLatticeBoxProcessingFunctional3D<T,Descriptor>::processEdgeGeneric ( 01160 int plane, int normal1, int normal2, 01161 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01162 { 01163 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 01164 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 01165 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 01166 } 01167 processEdge(plane,normal1,normal2, domain, lattices); 01168 } 01169 01170 template<typename T, template<typename U> class Descriptor> 01171 void BoundedLatticeBoxProcessingFunctional3D<T,Descriptor>::processCornerGeneric ( 01172 int normalX, int normalY, int normalZ, 01173 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01174 { 01175 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 01176 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 01177 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 01178 } 01179 processCorner(normalX, normalY, normalZ, domain, lattices); 01180 } 01181 01182 /* *************** BoundedScalarFieldBoxProcessing3D ******************************************* */ 01183 01184 template<typename T> 01185 void BoundedScalarFieldBoxProcessingFunctional3D<T>::processBulkGeneric ( 01186 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01187 { 01188 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 01189 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01190 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 01191 } 01192 processBulk(domain, fields); 01193 } 01194 01195 template<typename T> 01196 void BoundedScalarFieldBoxProcessingFunctional3D<T>::processPlaneGeneric ( 01197 int direction, int orientation, 01198 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01199 { 01200 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 01201 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01202 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 01203 } 01204 processPlane(direction, orientation, domain, fields); 01205 } 01206 01207 template<typename T> 01208 void BoundedScalarFieldBoxProcessingFunctional3D<T>::processEdgeGeneric ( 01209 int plane, int normal1, int normal2, 01210 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01211 { 01212 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 01213 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01214 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 01215 } 01216 processEdge(plane,normal1,normal2, domain, fields); 01217 } 01218 01219 template<typename T> 01220 void BoundedScalarFieldBoxProcessingFunctional3D<T>::processCornerGeneric ( 01221 int normalX, int normalY, int normalZ, 01222 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01223 { 01224 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 01225 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01226 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 01227 } 01228 processCorner(normalX, normalY, normalZ, domain, fields); 01229 } 01230 01231 01232 /* *************** BoundedTensorFieldBoxProcessing3D ******************************************* */ 01233 01234 template<typename T, int nDim> 01235 void BoundedTensorFieldBoxProcessingFunctional3D<T,nDim>::processBulkGeneric ( 01236 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01237 { 01238 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 01239 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01240 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 01241 } 01242 processBulk(domain, fields); 01243 } 01244 01245 template<typename T, int nDim> 01246 void BoundedTensorFieldBoxProcessingFunctional3D<T,nDim>::processPlaneGeneric ( 01247 int direction, int orientation, 01248 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01249 { 01250 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 01251 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01252 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 01253 } 01254 processPlane(direction, orientation, domain, fields); 01255 } 01256 01257 template<typename T, int nDim> 01258 void BoundedTensorFieldBoxProcessingFunctional3D<T,nDim>::processEdgeGeneric ( 01259 int plane, int normal1, int normal2, 01260 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01261 { 01262 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 01263 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01264 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 01265 } 01266 processEdge(plane,normal1,normal2, domain, fields); 01267 } 01268 01269 template<typename T, int nDim> 01270 void BoundedTensorFieldBoxProcessingFunctional3D<T,nDim>::processCornerGeneric ( 01271 int normalX, int normalY, int normalZ, 01272 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01273 { 01274 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 01275 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01276 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 01277 } 01278 processCorner(normalX, normalY, normalZ, domain, fields); 01279 } 01280 01281 /* *************** BoundedNTensorFieldBoxProcessing3D ******************************************* */ 01282 01283 template<typename T> 01284 void BoundedNTensorFieldBoxProcessingFunctional3D<T>::processBulkGeneric ( 01285 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01286 { 01287 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 01288 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01289 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 01290 } 01291 processBulk(domain, fields); 01292 } 01293 01294 template<typename T> 01295 void BoundedNTensorFieldBoxProcessingFunctional3D<T>::processPlaneGeneric ( 01296 int direction, int orientation, 01297 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01298 { 01299 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 01300 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01301 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 01302 } 01303 processPlane(direction, orientation, domain, fields); 01304 } 01305 01306 template<typename T> 01307 void BoundedNTensorFieldBoxProcessingFunctional3D<T>::processEdgeGeneric ( 01308 int plane, int normal1, int normal2, 01309 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01310 { 01311 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 01312 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01313 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 01314 } 01315 processEdge(plane,normal1,normal2, domain, fields); 01316 } 01317 01318 template<typename T> 01319 void BoundedNTensorFieldBoxProcessingFunctional3D<T>::processCornerGeneric ( 01320 int normalX, int normalY, int normalZ, 01321 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01322 { 01323 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 01324 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01325 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 01326 } 01327 processCorner(normalX, normalY, normalZ, domain, fields); 01328 } 01329 01330 } // namespace plb 01331 01332 #endif // DATA_PROCESSING_FUNCTIONAL_3D_HH