$treeview $search $mathjax
|
Palabos
Version 1.1
$projectbrief
|
$projectbrief
|
$searchbox |
00001 /* This file is part of the Palabos library. 00002 * 00003 * Copyright (C) 2011 FlowKit Sarl 00004 * Avenue de Chailly 23 00005 * 1012 Lausanne, Switzerland 00006 * E-mail contact: contact@flowkit.com 00007 * 00008 * The most recent release of Palabos can be downloaded at 00009 * <http://www.palabos.org/> 00010 * 00011 * The library Palabos is free software: you can redistribute it and/or 00012 * modify it under the terms of the GNU Affero General Public License as 00013 * published by the Free Software Foundation, either version 3 of the 00014 * License, or (at your option) any later version. 00015 * 00016 * The library is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Affero General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Affero General Public License 00022 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00023 */ 00024 00025 00026 #ifndef REDUCTIVE_DATA_PROCESSING_FUNCTIONAL_3D_HH 00027 #define REDUCTIVE_DATA_PROCESSING_FUNCTIONAL_3D_HH 00028 00029 #include "atomicBlock/reductiveDataProcessorWrapper3D.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 /* *************** ReductiveBoxProcessing3D_L ******************************************* */ 00038 00039 template<typename T, template<typename U> class Descriptor> 00040 void ReductiveBoxProcessingFunctional3D_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 /* *************** ReductiveBoxProcessing3D_S ******************************************* */ 00047 00048 template<typename T> 00049 void ReductiveBoxProcessingFunctional3D_S<T>::processGenericBlocks ( 00050 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00051 { 00052 process(domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00053 } 00054 00055 /* *************** ReductiveBoxProcessing3D_T ******************************************* */ 00056 00057 template<typename T, int nDim> 00058 void ReductiveBoxProcessingFunctional3D_T<T,nDim>::processGenericBlocks ( 00059 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00060 { 00061 process(domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00062 } 00063 00064 /* *************** ReductiveBoxProcessing3D_N ******************************************* */ 00065 00066 template<typename T> 00067 void ReductiveBoxProcessingFunctional3D_N<T>::processGenericBlocks ( 00068 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00069 { 00070 process(domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00071 } 00072 00073 /* *************** ReductiveBoxProcessing3D_N ******************************************* */ 00074 00075 template<typename T> 00076 void MaskedReductiveBoxProcessingFunctional3D_N<T>::processGenericBlocks ( 00077 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00078 { 00079 process(domain, 00080 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00081 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00082 } 00083 00084 /* *************** ReductiveBoxProcessing3D_LL******************************************* */ 00085 00086 template<typename T1, template<typename U1> class Descriptor1, 00087 typename T2, template<typename U2> class Descriptor2> 00088 void ReductiveBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processGenericBlocks ( 00089 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00090 { 00091 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00092 process ( domain, 00093 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00094 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00095 } 00096 00097 00098 /* *************** ReductiveBoxProcessing3D_SS ****************************************** */ 00099 00100 template<typename T1, typename T2> 00101 void ReductiveBoxProcessingFunctional3D_SS<T1,T2>::processGenericBlocks ( 00102 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00103 { 00104 process ( domain, 00105 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00106 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00107 } 00108 00109 00110 /* *************** ReductiveBoxProcessing3D_TT ****************************************** */ 00111 00112 template<typename T1, int nDim1, typename T2, int nDim2> 00113 void ReductiveBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processGenericBlocks ( 00114 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00115 { 00116 process ( domain, 00117 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00118 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00119 } 00120 00121 /* *************** ReductiveBoxProcessing3D_NN ****************************************** */ 00122 00123 template<typename T1, typename T2> 00124 void ReductiveBoxProcessingFunctional3D_NN<T1,T2>::processGenericBlocks ( 00125 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00126 { 00127 process ( domain, 00128 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00129 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00130 } 00131 00132 00133 /* *************** ReductiveBoxProcessing3D_NN ****************************************** */ 00134 00135 template<typename T1, typename T2> 00136 void MaskedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processGenericBlocks ( 00137 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00138 { 00139 process ( domain, 00140 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00141 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00142 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 00143 } 00144 00145 00146 /* *************** ReductiveBoxProcessing3D_ST ****************************************** */ 00147 00148 template<typename T1, typename T2, int nDim> 00149 void ReductiveBoxProcessingFunctional3D_ST<T1,T2,nDim>::processGenericBlocks ( 00150 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00151 { 00152 process ( domain, 00153 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00154 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00155 } 00156 00157 /* *************** ReductiveBoxProcessing3D_SN ****************************************** */ 00158 00159 template<typename T1, typename T2> 00160 void ReductiveBoxProcessingFunctional3D_SN<T1,T2>::processGenericBlocks ( 00161 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00162 { 00163 process ( domain, 00164 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00165 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00166 } 00167 00168 00169 /* *************** ReductiveBoxProcessing3D_LS ****************************************** */ 00170 00171 template<typename T1, template<typename U> class Descriptor, typename T2> 00172 void ReductiveBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processGenericBlocks ( 00173 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00174 { 00175 process ( domain, 00176 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00177 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00178 } 00179 00180 /* *************** ReductiveBoxProcessing3D_LT ****************************************** */ 00181 00182 template<typename T1, template<typename U> class Descriptor, 00183 typename T2, int nDim> 00184 void ReductiveBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processGenericBlocks ( 00185 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00186 { 00187 process ( domain, 00188 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00189 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00190 } 00191 00192 /* *************** ReductiveBoxProcessing3D_LN ****************************************** */ 00193 00194 template<typename T1, template<typename U> class Descriptor, typename T2> 00195 void ReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processGenericBlocks ( 00196 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00197 { 00198 process ( domain, 00199 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00200 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00201 } 00202 00203 /* *************** MaskedReductiveBoxProcessing3D_LN ****************************************** */ 00204 00205 template<typename T1, template<typename U> class Descriptor, typename T2> 00206 void MaskedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processGenericBlocks ( 00207 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00208 { 00209 process ( domain, 00210 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00211 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00212 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 00213 } 00214 00215 /* *************** ReductiveLatticeBoxProcessing3D ************************************** */ 00216 00217 template<typename T, template<typename U> class Descriptor> 00218 void ReductiveLatticeBoxProcessingFunctional3D<T,Descriptor>::processGenericBlocks ( 00219 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00220 { 00221 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 00222 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 00223 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 00224 } 00225 process(domain, lattices); 00226 } 00227 00228 /* *************** ReductiveScalarFieldBoxProcessing3D *********************************** */ 00229 00230 template<typename T> 00231 void ReductiveScalarFieldBoxProcessingFunctional3D<T>::processGenericBlocks ( 00232 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00233 { 00234 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 00235 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00236 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 00237 } 00238 process(domain, fields); 00239 } 00240 00241 /* *************** ReductiveTensorFieldBoxProcessing3D *********************************** */ 00242 00243 template<typename T, int nDim> 00244 void ReductiveTensorFieldBoxProcessingFunctional3D<T,nDim>::processGenericBlocks ( 00245 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00246 { 00247 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 00248 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00249 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 00250 } 00251 process(domain, fields); 00252 } 00253 00254 /* *************** ReductiveNTensorFieldBoxProcessing3D *********************************** */ 00255 00256 template<typename T> 00257 void ReductiveNTensorFieldBoxProcessingFunctional3D<T>::processGenericBlocks ( 00258 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00259 { 00260 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 00261 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00262 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 00263 } 00264 process(domain, fields); 00265 } 00266 00267 00268 /* *************** ReductiveDotProcessing3D_L ******************************************* */ 00269 00270 template<typename T, template<typename U> class Descriptor> 00271 void ReductiveDotProcessingFunctional3D_L<T,Descriptor>::processGenericBlocks ( 00272 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00273 { 00274 process(dotList, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00275 } 00276 00277 /* *************** ReductiveDotProcessing3D_S ******************************************* */ 00278 00279 template<typename T> 00280 void ReductiveDotProcessingFunctional3D_S<T>::processGenericBlocks ( 00281 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00282 { 00283 process(dotList, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00284 } 00285 00286 /* *************** ReductiveDotProcessing3D_T ******************************************* */ 00287 00288 template<typename T, int nDim> 00289 void ReductiveDotProcessingFunctional3D_T<T,nDim>::processGenericBlocks ( 00290 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00291 { 00292 process(dotList, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00293 } 00294 00295 /* *************** ReductiveDotProcessing3D_N ******************************************* */ 00296 00297 template<typename T> 00298 void ReductiveDotProcessingFunctional3D_N<T>::processGenericBlocks ( 00299 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00300 { 00301 process(dotList, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00302 } 00303 00304 /* *************** ReductiveDotProcessing3D_LL******************************************* */ 00305 00306 template<typename T1, template<typename U1> class Descriptor1, 00307 typename T2, template<typename U2> class Descriptor2> 00308 void ReductiveDotProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processGenericBlocks ( 00309 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) { 00310 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00311 process ( dotList, 00312 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00313 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00314 } 00315 00316 00317 /* *************** ReductiveDotProcessing3D_SS ****************************************** */ 00318 00319 template<typename T1, typename T2> 00320 void ReductiveDotProcessingFunctional3D_SS<T1,T2>::processGenericBlocks ( 00321 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00322 { 00323 process ( dotList, 00324 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00325 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00326 } 00327 00328 00329 /* *************** ReductiveDotProcessing3D_TT ****************************************** */ 00330 00331 template<typename T1, int nDim1, typename T2, int nDim2> 00332 void ReductiveDotProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processGenericBlocks ( 00333 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00334 { 00335 process ( dotList, 00336 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00337 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00338 } 00339 00340 /* *************** ReductiveDotProcessing3D_NN ****************************************** */ 00341 00342 template<typename T1, typename T2> 00343 void ReductiveDotProcessingFunctional3D_NN<T1,T2>::processGenericBlocks ( 00344 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00345 { 00346 process ( dotList, 00347 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00348 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00349 } 00350 00351 00352 /* *************** ReductiveDotProcessing3D_ST ****************************************** */ 00353 00354 template<typename T1, typename T2, int nDim> 00355 void ReductiveDotProcessingFunctional3D_ST<T1,T2,nDim>::processGenericBlocks ( 00356 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00357 { 00358 process ( dotList, 00359 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00360 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00361 } 00362 00363 /* *************** ReductiveDotProcessing3D_SN ****************************************** */ 00364 00365 template<typename T1, typename T2> 00366 void ReductiveDotProcessingFunctional3D_SN<T1,T2>::processGenericBlocks ( 00367 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00368 { 00369 process ( dotList, 00370 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00371 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00372 } 00373 00374 00375 /* *************** ReductiveDotProcessing3D_LS ****************************************** */ 00376 00377 template<typename T1, template<typename U> class Descriptor, typename T2> 00378 void ReductiveDotProcessingFunctional3D_LS<T1,Descriptor,T2>::processGenericBlocks ( 00379 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00380 { 00381 process ( dotList, 00382 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00383 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00384 } 00385 00386 00387 /* *************** ReductiveDotProcessing3D_LT ****************************************** */ 00388 00389 template<typename T1, template<typename U> class Descriptor, 00390 typename T2, int nDim> 00391 void ReductiveDotProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processGenericBlocks ( 00392 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00393 { 00394 process ( dotList, 00395 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00396 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00397 } 00398 00399 /* *************** ReductiveDotProcessing3D_LN ****************************************** */ 00400 00401 template<typename T1, template<typename U> class Descriptor, typename T2> 00402 void ReductiveDotProcessingFunctional3D_LN<T1,Descriptor,T2>::processGenericBlocks ( 00403 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00404 { 00405 process ( dotList, 00406 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00407 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00408 } 00409 00410 /* *************** ReductiveLatticeDotProcessing3D ******************************************* */ 00411 00412 template<typename T, template<typename U> class Descriptor> 00413 void ReductiveLatticeDotProcessingFunctional3D<T,Descriptor>::processGenericBlocks ( 00414 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00415 { 00416 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 00417 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 00418 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*> ( 00419 atomicBlocks[iLattice] ); 00420 } 00421 process(dotList, lattices); 00422 } 00423 00424 /* *************** ReductiveReductiveScalarFieldDotProcessing3D ********************************* */ 00425 00426 template<typename T> 00427 void ReductiveScalarFieldDotProcessingFunctional3D<T>::processGenericBlocks ( 00428 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00429 { 00430 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 00431 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00432 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 00433 } 00434 process(dotList, fields); 00435 } 00436 00437 /* *************** ReductiveTensorFieldDotProcessing3D ********************************* */ 00438 00439 template<typename T, int nDim> 00440 void ReductiveTensorFieldDotProcessingFunctional3D<T,nDim>::processGenericBlocks ( 00441 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00442 { 00443 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 00444 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00445 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 00446 } 00447 process(dotList, fields); 00448 } 00449 00450 /* *************** ReductiveNTensorFieldDotProcessing3D ********************************* */ 00451 00452 template<typename T> 00453 void ReductiveNTensorFieldDotProcessingFunctional3D<T>::processGenericBlocks ( 00454 DotList3D const& dotList, std::vector<AtomicBlock3D*> atomicBlocks ) 00455 { 00456 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 00457 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 00458 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 00459 } 00460 process(dotList, fields); 00461 } 00462 00463 /* *************** BoundedReductiveBoxProcessing3D_L ******************************************* */ 00464 00465 template<typename T, template<typename U> class Descriptor> 00466 void BoundedReductiveBoxProcessingFunctional3D_L<T,Descriptor>::processBulkGeneric ( 00467 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00468 { 00469 processBulk(domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00470 } 00471 00472 template<typename T, template<typename U> class Descriptor> 00473 void BoundedReductiveBoxProcessingFunctional3D_L<T,Descriptor>::processPlaneGeneric ( 00474 int direction, int orientation, 00475 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00476 { 00477 processPlane(direction, orientation, domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00478 } 00479 00480 template<typename T, template<typename U> class Descriptor> 00481 void BoundedReductiveBoxProcessingFunctional3D_L<T,Descriptor>::processEdgeGeneric ( 00482 int plane, int normal1, int normal2, 00483 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00484 { 00485 processEdge(plane,normal1,normal2, domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00486 } 00487 00488 template<typename T, template<typename U> class Descriptor> 00489 void BoundedReductiveBoxProcessingFunctional3D_L<T,Descriptor>::processCornerGeneric ( 00490 int normalX, int normalY, int normalZ, 00491 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00492 { 00493 processCorner(normalX, normalY, normalZ, domain, dynamic_cast<BlockLattice3D<T,Descriptor>&>(*atomicBlocks[0])); 00494 } 00495 00496 /* *************** BoundedReductiveBoxProcessing3D_S ******************************************* */ 00497 00498 template<typename T> 00499 void BoundedReductiveBoxProcessingFunctional3D_S<T>::processBulkGeneric ( 00500 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00501 { 00502 processBulk(domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00503 } 00504 00505 template<typename T> 00506 void BoundedReductiveBoxProcessingFunctional3D_S<T>::processPlaneGeneric ( 00507 int direction, int orientation, 00508 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00509 { 00510 processPlane(direction, orientation, domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00511 } 00512 00513 template<typename T> 00514 void BoundedReductiveBoxProcessingFunctional3D_S<T>::processEdgeGeneric ( 00515 int plane, int normal1, int normal2, 00516 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00517 { 00518 processEdge(plane,normal1,normal2, domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00519 } 00520 00521 template<typename T> 00522 void BoundedReductiveBoxProcessingFunctional3D_S<T>::processCornerGeneric ( 00523 int normalX, int normalY, int normalZ, 00524 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00525 { 00526 processCorner(normalX, normalY, normalZ, domain, dynamic_cast<ScalarField3D<T>&>(*atomicBlocks[0])); 00527 } 00528 00529 /* *************** BoundedReductiveBoxProcessing3D_T ******************************************* */ 00530 00531 template<typename T, int nDim> 00532 void BoundedReductiveBoxProcessingFunctional3D_T<T,nDim>::processBulkGeneric ( 00533 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00534 { 00535 processBulk(domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00536 } 00537 00538 template<typename T, int nDim> 00539 void BoundedReductiveBoxProcessingFunctional3D_T<T,nDim>::processPlaneGeneric ( 00540 int direction, int orientation, 00541 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00542 { 00543 processPlane(direction, orientation, domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00544 } 00545 00546 template<typename T, int nDim> 00547 void BoundedReductiveBoxProcessingFunctional3D_T<T,nDim>::processEdgeGeneric ( 00548 int plane, int normal1, int normal2, 00549 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00550 { 00551 processEdge(plane,normal1,normal2, domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00552 } 00553 00554 template<typename T, int nDim> 00555 void BoundedReductiveBoxProcessingFunctional3D_T<T,nDim>::processCornerGeneric ( 00556 int normalX, int normalY, int normalZ, 00557 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00558 { 00559 processCorner(normalX, normalY, normalZ, domain, dynamic_cast<TensorField3D<T,nDim>&>(*atomicBlocks[0])); 00560 } 00561 00562 00563 /* *************** BoundedReductiveBoxProcessing3D_N ******************************************* */ 00564 00565 template<typename T> 00566 void BoundedReductiveBoxProcessingFunctional3D_N<T>::processBulkGeneric ( 00567 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00568 { 00569 processBulk(domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00570 } 00571 00572 template<typename T> 00573 void BoundedReductiveBoxProcessingFunctional3D_N<T>::processPlaneGeneric ( 00574 int direction, int orientation, 00575 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00576 { 00577 processPlane(direction, orientation, domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00578 } 00579 00580 template<typename T> 00581 void BoundedReductiveBoxProcessingFunctional3D_N<T>::processEdgeGeneric ( 00582 int plane, int normal1, int normal2, 00583 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00584 { 00585 processEdge(plane,normal1,normal2, domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00586 } 00587 00588 template<typename T> 00589 void BoundedReductiveBoxProcessingFunctional3D_N<T>::processCornerGeneric ( 00590 int normalX, int normalY, int normalZ, 00591 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00592 { 00593 processCorner(normalX, normalY, normalZ, domain, dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0])); 00594 } 00595 00596 00597 /* *************** BoundedMaskedReductiveBoxProcessing3D_N ******************************************* */ 00598 00599 template<typename T> 00600 void BoundedMaskedReductiveBoxProcessingFunctional3D_N<T>::processBulkGeneric ( 00601 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00602 { 00603 processBulk(domain, 00604 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00605 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00606 } 00607 00608 template<typename T> 00609 void BoundedMaskedReductiveBoxProcessingFunctional3D_N<T>::processPlaneGeneric ( 00610 int direction, int orientation, 00611 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00612 { 00613 processPlane(direction, orientation, domain, 00614 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00615 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00616 } 00617 00618 template<typename T> 00619 void BoundedMaskedReductiveBoxProcessingFunctional3D_N<T>::processEdgeGeneric ( 00620 int plane, int normal1, int normal2, 00621 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00622 { 00623 processEdge(plane,normal1,normal2, domain, 00624 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00625 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00626 } 00627 00628 template<typename T> 00629 void BoundedMaskedReductiveBoxProcessingFunctional3D_N<T>::processCornerGeneric ( 00630 int normalX, int normalY, int normalZ, 00631 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00632 { 00633 processCorner(normalX, normalY, normalZ, domain, 00634 dynamic_cast<NTensorField3D<T>&>(*atomicBlocks[0]), 00635 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[1])); 00636 } 00637 00638 00639 /* *************** BoundedReductiveBoxProcessing3D_LL ****************************************** */ 00640 00641 template<typename T1, template<typename U1> class Descriptor1, 00642 typename T2, template<typename U2> class Descriptor2> 00643 void BoundedReductiveBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processBulkGeneric ( 00644 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00645 { 00646 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00647 processBulk( domain, 00648 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00649 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00650 } 00651 00652 template<typename T1, template<typename U1> class Descriptor1, 00653 typename T2, template<typename U2> class Descriptor2> 00654 void BoundedReductiveBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processPlaneGeneric ( 00655 int direction, int orientation, 00656 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00657 { 00658 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00659 processPlane( direction, orientation, domain, 00660 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00661 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00662 } 00663 00664 template<typename T1, template<typename U1> class Descriptor1, 00665 typename T2, template<typename U2> class Descriptor2> 00666 void BoundedReductiveBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processEdgeGeneric ( 00667 int plane, int normal1, int normal2, 00668 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00669 { 00670 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00671 processEdge( plane,normal1,normal2, domain, 00672 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00673 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00674 } 00675 00676 template<typename T1, template<typename U1> class Descriptor1, 00677 typename T2, template<typename U2> class Descriptor2> 00678 void BoundedReductiveBoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2>::processCornerGeneric ( 00679 int normalX, int normalY, int normalZ, 00680 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00681 { 00682 PLB_PRECONDITION( atomicBlocks.size() == 2 ); 00683 processCorner( normalX, normalY, normalZ, domain, 00684 dynamic_cast<BlockLattice3D<T1,Descriptor1>&>(*atomicBlocks[0]), 00685 dynamic_cast<BlockLattice3D<T2,Descriptor2>&>(*atomicBlocks[1]) ); 00686 } 00687 00688 /* *************** BoundedReductiveBoxProcessing3D_SS ****************************************** */ 00689 00690 template<typename T1, typename T2> 00691 void BoundedReductiveBoxProcessingFunctional3D_SS<T1,T2>::processBulkGeneric ( 00692 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00693 { 00694 processBulk( domain, 00695 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00696 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00697 } 00698 00699 template<typename T1, typename T2> 00700 void BoundedReductiveBoxProcessingFunctional3D_SS<T1,T2>::processPlaneGeneric ( 00701 int direction, int orientation, 00702 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00703 { 00704 processPlane( direction, orientation, domain, 00705 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00706 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00707 } 00708 00709 template<typename T1, typename T2> 00710 void BoundedReductiveBoxProcessingFunctional3D_SS<T1,T2>::processEdgeGeneric ( 00711 int plane, int normal1, int normal2, 00712 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00713 { 00714 processEdge( plane,normal1,normal2, domain, 00715 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00716 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00717 } 00718 00719 template<typename T1, typename T2> 00720 void BoundedReductiveBoxProcessingFunctional3D_SS<T1,T2>::processCornerGeneric ( 00721 int normalX, int normalY, int normalZ, 00722 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00723 { 00724 processCorner( normalX, normalY, normalZ, domain, 00725 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00726 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00727 } 00728 00729 /* *************** BoundedReductiveBoxProcessing3D_TT ****************************************** */ 00730 00731 template<typename T1, int nDim1, typename T2, int nDim2> 00732 void BoundedReductiveBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processBulkGeneric ( 00733 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00734 { 00735 processBulk( domain, 00736 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00737 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00738 } 00739 00740 template<typename T1, int nDim1, typename T2, int nDim2> 00741 void BoundedReductiveBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processPlaneGeneric ( 00742 int direction, int orientation, 00743 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00744 { 00745 processPlane( direction, orientation, domain, 00746 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00747 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00748 } 00749 00750 template<typename T1, int nDim1, typename T2, int nDim2> 00751 void BoundedReductiveBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processEdgeGeneric ( 00752 int plane, int normal1, int normal2, 00753 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00754 { 00755 processEdge( plane,normal1,normal2, domain, 00756 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00757 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00758 } 00759 00760 template<typename T1, int nDim1, typename T2, int nDim2> 00761 void BoundedReductiveBoxProcessingFunctional3D_TT<T1,nDim1,T2,nDim2>::processCornerGeneric ( 00762 int normalX, int normalY, int normalZ, 00763 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00764 { 00765 processCorner( normalX, normalY, normalZ, domain, 00766 dynamic_cast<TensorField3D<T1,nDim1>&>(*atomicBlocks[0]), 00767 dynamic_cast<TensorField3D<T2,nDim2>&>(*atomicBlocks[1]) ); 00768 } 00769 00770 /* *************** BoundedReductiveBoxProcessing3D_NN ****************************************** */ 00771 00772 template<typename T1, typename T2> 00773 void BoundedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processBulkGeneric ( 00774 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00775 { 00776 processBulk( domain, 00777 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00778 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00779 } 00780 00781 template<typename T1, typename T2> 00782 void BoundedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processPlaneGeneric ( 00783 int direction, int orientation, 00784 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00785 { 00786 processPlane( direction, orientation, domain, 00787 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00788 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00789 } 00790 00791 template<typename T1, typename T2> 00792 void BoundedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processEdgeGeneric ( 00793 int plane, int normal1, int normal2, 00794 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00795 { 00796 processEdge( plane,normal1,normal2, domain, 00797 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00798 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00799 } 00800 00801 template<typename T1, typename T2> 00802 void BoundedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processCornerGeneric ( 00803 int normalX, int normalY, int normalZ, 00804 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00805 { 00806 processCorner( normalX, normalY, normalZ, domain, 00807 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00808 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00809 } 00810 00811 /* *************** BoundedMaskedReductiveBoxProcessing3D_NN ******************************************* */ 00812 00813 template<typename T1, typename T2> 00814 void BoundedMaskedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processBulkGeneric ( 00815 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00816 { 00817 processBulk(domain, 00818 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00819 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00820 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2])); 00821 } 00822 00823 template<typename T1, typename T2> 00824 void BoundedMaskedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processPlaneGeneric ( 00825 int direction, int orientation, 00826 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00827 { 00828 processPlane(direction, orientation, domain, 00829 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00830 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00831 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2])); 00832 } 00833 00834 template<typename T1, typename T2> 00835 void BoundedMaskedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processEdgeGeneric ( 00836 int plane, int normal1, int normal2, 00837 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00838 { 00839 processEdge(plane,normal1,normal2, domain, 00840 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00841 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00842 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2])); 00843 } 00844 00845 template<typename T1, typename T2> 00846 void BoundedMaskedReductiveBoxProcessingFunctional3D_NN<T1,T2>::processCornerGeneric ( 00847 int normalX, int normalY, int normalZ, 00848 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00849 { 00850 processCorner(normalX, normalY, normalZ, domain, 00851 dynamic_cast<NTensorField3D<T1>&>(*atomicBlocks[0]), 00852 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 00853 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2])); 00854 } 00855 00856 00857 00858 /* *************** BoundedReductiveBoxProcessing3D_ST ****************************************** */ 00859 00860 template<typename T1, typename T2, int nDim> 00861 void BoundedReductiveBoxProcessingFunctional3D_ST<T1,T2,nDim>::processBulkGeneric ( 00862 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00863 { 00864 processBulk( domain, 00865 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00866 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00867 } 00868 00869 template<typename T1, typename T2, int nDim> 00870 void BoundedReductiveBoxProcessingFunctional3D_ST<T1,T2,nDim>::processPlaneGeneric ( 00871 int direction, int orientation, 00872 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00873 { 00874 processPlane( direction, orientation, domain, 00875 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00876 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00877 } 00878 00879 template<typename T1, typename T2, int nDim> 00880 void BoundedReductiveBoxProcessingFunctional3D_ST<T1,T2,nDim>::processEdgeGeneric ( 00881 int plane, int normal1, int normal2, 00882 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00883 { 00884 processEdge( plane,normal1,normal2, domain, 00885 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00886 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00887 } 00888 00889 template<typename T1, typename T2, int nDim> 00890 void BoundedReductiveBoxProcessingFunctional3D_ST<T1,T2,nDim>::processCornerGeneric ( 00891 int normalX, int normalY, int normalZ, 00892 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00893 { 00894 processCorner( normalX, normalY, normalZ, domain, 00895 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00896 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00897 } 00898 00899 /* *************** BoundedReductiveBoxProcessing3D_SN ****************************************** */ 00900 00901 template<typename T1, typename T2> 00902 void BoundedReductiveBoxProcessingFunctional3D_SN<T1,T2>::processBulkGeneric ( 00903 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00904 { 00905 processBulk( domain, 00906 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00907 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00908 } 00909 00910 template<typename T1, typename T2> 00911 void BoundedReductiveBoxProcessingFunctional3D_SN<T1,T2>::processPlaneGeneric ( 00912 int direction, int orientation, 00913 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00914 { 00915 processPlane( direction, orientation, domain, 00916 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00917 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00918 } 00919 00920 template<typename T1, typename T2> 00921 void BoundedReductiveBoxProcessingFunctional3D_SN<T1,T2>::processEdgeGeneric ( 00922 int plane, int normal1, int normal2, 00923 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00924 { 00925 processEdge( plane,normal1,normal2, domain, 00926 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00927 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00928 } 00929 00930 template<typename T1, typename T2> 00931 void BoundedReductiveBoxProcessingFunctional3D_SN<T1,T2>::processCornerGeneric ( 00932 int normalX, int normalY, int normalZ, 00933 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00934 { 00935 processCorner( normalX, normalY, normalZ, domain, 00936 dynamic_cast<ScalarField3D<T1>&>(*atomicBlocks[0]), 00937 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 00938 } 00939 00940 /* *************** BoundedReductiveBoxProcessing3D_LS ****************************************** */ 00941 00942 template<typename T1, template<typename U> class Descriptor, typename T2> 00943 void BoundedReductiveBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processBulkGeneric ( 00944 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00945 { 00946 processBulk( domain, 00947 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00948 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00949 } 00950 00951 template<typename T1, template<typename U> class Descriptor, typename T2> 00952 void BoundedReductiveBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processPlaneGeneric ( 00953 int direction, int orientation, 00954 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00955 { 00956 processPlane( direction, orientation, domain, 00957 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00958 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00959 } 00960 00961 template<typename T1, template<typename U> class Descriptor, typename T2> 00962 void BoundedReductiveBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processEdgeGeneric ( 00963 int plane, int normal1, int normal2, 00964 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00965 { 00966 processEdge( plane,normal1,normal2, domain, 00967 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00968 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00969 } 00970 00971 template<typename T1, template<typename U> class Descriptor, typename T2> 00972 void BoundedReductiveBoxProcessingFunctional3D_LS<T1,Descriptor,T2>::processCornerGeneric ( 00973 int normalX, int normalY, int normalZ, 00974 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00975 { 00976 processCorner( normalX, normalY, normalZ, domain, 00977 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00978 dynamic_cast<ScalarField3D<T2>&>(*atomicBlocks[1]) ); 00979 } 00980 00981 /* *************** BoundedReductiveBoxProcessing3D_LT ****************************************** */ 00982 00983 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00984 void BoundedReductiveBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processBulkGeneric ( 00985 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00986 { 00987 processBulk( domain, 00988 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00989 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 00990 } 00991 00992 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00993 void BoundedReductiveBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processPlaneGeneric ( 00994 int direction, int orientation, 00995 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 00996 { 00997 processPlane( direction, orientation, domain, 00998 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 00999 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 01000 } 01001 01002 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01003 void BoundedReductiveBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processEdgeGeneric ( 01004 int plane, int normal1, int normal2, 01005 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01006 { 01007 processEdge( plane,normal1,normal2, domain, 01008 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01009 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 01010 } 01011 01012 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01013 void BoundedReductiveBoxProcessingFunctional3D_LT<T1,Descriptor,T2,nDim>::processCornerGeneric ( 01014 int normalX, int normalY, int normalZ, 01015 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01016 { 01017 processCorner( normalX, normalY, normalZ, domain, 01018 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01019 dynamic_cast<TensorField3D<T2,nDim>&>(*atomicBlocks[1]) ); 01020 } 01021 01022 /* *************** BoundedReductiveBoxProcessing3D_LN ****************************************** */ 01023 01024 template<typename T1, template<typename U> class Descriptor, typename T2> 01025 void BoundedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processBulkGeneric ( 01026 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01027 { 01028 processBulk( domain, 01029 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01030 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 01031 } 01032 01033 template<typename T1, template<typename U> class Descriptor, typename T2> 01034 void BoundedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processPlaneGeneric ( 01035 int direction, int orientation, 01036 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01037 { 01038 processPlane( direction, orientation, domain, 01039 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01040 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 01041 } 01042 01043 template<typename T1, template<typename U> class Descriptor, typename T2> 01044 void BoundedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processEdgeGeneric ( 01045 int plane, int normal1, int normal2, 01046 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01047 { 01048 processEdge( plane,normal1,normal2, domain, 01049 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01050 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 01051 } 01052 01053 template<typename T1, template<typename U> class Descriptor, typename T2> 01054 void BoundedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processCornerGeneric ( 01055 int normalX, int normalY, int normalZ, 01056 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01057 { 01058 processCorner( normalX, normalY, normalZ, domain, 01059 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01060 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]) ); 01061 } 01062 01063 /* *************** BoundedMaskedReductiveBoxProcessing3D_LN ****************************************** */ 01064 01065 template<typename T1, template<typename U> class Descriptor, typename T2> 01066 void BoundedMaskedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processBulkGeneric ( 01067 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01068 { 01069 processBulk( domain, 01070 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01071 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 01072 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 01073 } 01074 01075 template<typename T1, template<typename U> class Descriptor, typename T2> 01076 void BoundedMaskedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processPlaneGeneric ( 01077 int direction, int orientation, 01078 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01079 { 01080 processPlane( direction, orientation, domain, 01081 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01082 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 01083 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 01084 } 01085 01086 template<typename T1, template<typename U> class Descriptor, typename T2> 01087 void BoundedMaskedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processEdgeGeneric ( 01088 int plane, int normal1, int normal2, 01089 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01090 { 01091 processEdge( plane,normal1,normal2, domain, 01092 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01093 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 01094 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 01095 } 01096 01097 template<typename T1, template<typename U> class Descriptor, typename T2> 01098 void BoundedMaskedReductiveBoxProcessingFunctional3D_LN<T1,Descriptor,T2>::processCornerGeneric ( 01099 int normalX, int normalY, int normalZ, 01100 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01101 { 01102 processCorner( normalX, normalY, normalZ, domain, 01103 dynamic_cast<BlockLattice3D<T1,Descriptor>&>(*atomicBlocks[0]), 01104 dynamic_cast<NTensorField3D<T2>&>(*atomicBlocks[1]), 01105 dynamic_cast<NTensorField3D<int>&>(*atomicBlocks[2]) ); 01106 } 01107 01108 /* *************** BoundedReductiveLatticeBoxProcessing3D ******************************************* */ 01109 01110 template<typename T, template<typename U> class Descriptor> 01111 void BoundedReductiveLatticeBoxProcessingFunctional3D<T,Descriptor>::processBulkGeneric ( 01112 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01113 { 01114 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 01115 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 01116 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 01117 } 01118 processBulk(domain, lattices); 01119 } 01120 01121 template<typename T, template<typename U> class Descriptor> 01122 void BoundedReductiveLatticeBoxProcessingFunctional3D<T,Descriptor>::processPlaneGeneric ( 01123 int direction, int orientation, 01124 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01125 { 01126 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 01127 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 01128 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 01129 } 01130 processPlane(direction, orientation, domain, lattices); 01131 } 01132 01133 template<typename T, template<typename U> class Descriptor> 01134 void BoundedReductiveLatticeBoxProcessingFunctional3D<T,Descriptor>::processEdgeGeneric ( 01135 int plane, int normal1, int normal2, 01136 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01137 { 01138 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 01139 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 01140 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 01141 } 01142 processEdge(plane,normal1,normal2, domain, lattices); 01143 } 01144 01145 template<typename T, template<typename U> class Descriptor> 01146 void BoundedReductiveLatticeBoxProcessingFunctional3D<T,Descriptor>::processCornerGeneric ( 01147 int normalX, int normalY, int normalZ, 01148 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01149 { 01150 std::vector<BlockLattice3D<T,Descriptor>*> lattices(atomicBlocks.size()); 01151 for (pluint iLattice=0; iLattice<atomicBlocks.size(); ++iLattice) { 01152 lattices[iLattice] = dynamic_cast<BlockLattice3D<T,Descriptor>*>(atomicBlocks[iLattice]); 01153 } 01154 processCorner(normalX, normalY, normalZ, domain, lattices); 01155 } 01156 01157 /* *************** BoundedReductiveScalarFieldBoxProcessing3D ******************************************* */ 01158 01159 template<typename T> 01160 void BoundedReductiveScalarFieldBoxProcessingFunctional3D<T>::processBulkGeneric ( 01161 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01162 { 01163 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 01164 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01165 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 01166 } 01167 processBulk(domain, fields); 01168 } 01169 01170 template<typename T> 01171 void BoundedReductiveScalarFieldBoxProcessingFunctional3D<T>::processPlaneGeneric ( 01172 int direction, int orientation, 01173 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01174 { 01175 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 01176 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01177 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 01178 } 01179 processPlane(direction, orientation, domain, fields); 01180 } 01181 01182 template<typename T> 01183 void BoundedReductiveScalarFieldBoxProcessingFunctional3D<T>::processEdgeGeneric ( 01184 int plane, int normal1, int normal2, 01185 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01186 { 01187 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 01188 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01189 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 01190 } 01191 processEdge(plane,normal1,normal2, domain, fields); 01192 } 01193 01194 template<typename T> 01195 void BoundedReductiveScalarFieldBoxProcessingFunctional3D<T>::processCornerGeneric ( 01196 int normalX, int normalY, int normalZ, 01197 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01198 { 01199 std::vector<ScalarField3D<T>*> fields(atomicBlocks.size()); 01200 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01201 fields[iField] = dynamic_cast<ScalarField3D<T>*>(atomicBlocks[iField]); 01202 } 01203 processCorner(normalX, normalY, normalZ, domain, fields); 01204 } 01205 01206 01207 /* *************** BoundedReductiveTensorFieldBoxProcessing3D ******************************************* */ 01208 01209 template<typename T, int nDim> 01210 void BoundedReductiveTensorFieldBoxProcessingFunctional3D<T,nDim>::processBulkGeneric ( 01211 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01212 { 01213 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 01214 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01215 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 01216 } 01217 processBulk(domain, fields); 01218 } 01219 01220 template<typename T, int nDim> 01221 void BoundedReductiveTensorFieldBoxProcessingFunctional3D<T,nDim>::processPlaneGeneric ( 01222 int direction, int orientation, 01223 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01224 { 01225 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 01226 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01227 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 01228 } 01229 processPlane(direction, orientation, domain, fields); 01230 } 01231 01232 template<typename T, int nDim> 01233 void BoundedReductiveTensorFieldBoxProcessingFunctional3D<T,nDim>::processEdgeGeneric ( 01234 int plane, int normal1, int normal2, 01235 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01236 { 01237 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 01238 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01239 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 01240 } 01241 processEdge(plane,normal1,normal2, domain, fields); 01242 } 01243 01244 template<typename T, int nDim> 01245 void BoundedReductiveTensorFieldBoxProcessingFunctional3D<T,nDim>::processCornerGeneric ( 01246 int normalX, int normalY, int normalZ, 01247 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01248 { 01249 std::vector<TensorField3D<T,nDim>*> fields(atomicBlocks.size()); 01250 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01251 fields[iField] = dynamic_cast<TensorField3D<T,nDim>*>(atomicBlocks[iField]); 01252 } 01253 processCorner(normalX, normalY, normalZ, domain, fields); 01254 } 01255 01256 /* *************** BoundedReductiveNTensorFieldBoxProcessing3D ******************************************* */ 01257 01258 template<typename T> 01259 void BoundedReductiveNTensorFieldBoxProcessingFunctional3D<T>::processBulkGeneric ( 01260 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01261 { 01262 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 01263 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01264 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 01265 } 01266 processBulk(domain, fields); 01267 } 01268 01269 template<typename T> 01270 void BoundedReductiveNTensorFieldBoxProcessingFunctional3D<T>::processPlaneGeneric ( 01271 int direction, int orientation, 01272 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01273 { 01274 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 01275 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01276 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 01277 } 01278 processPlane(direction, orientation, domain, fields); 01279 } 01280 01281 template<typename T> 01282 void BoundedReductiveNTensorFieldBoxProcessingFunctional3D<T>::processEdgeGeneric ( 01283 int plane, int normal1, int normal2, 01284 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01285 { 01286 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 01287 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01288 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 01289 } 01290 processEdge(plane,normal1,normal2, domain, fields); 01291 } 01292 01293 template<typename T> 01294 void BoundedReductiveNTensorFieldBoxProcessingFunctional3D<T>::processCornerGeneric ( 01295 int normalX, int normalY, int normalZ, 01296 Box3D domain, std::vector<AtomicBlock3D*> atomicBlocks ) 01297 { 01298 std::vector<NTensorField3D<T>*> fields(atomicBlocks.size()); 01299 for (pluint iField=0; iField<atomicBlocks.size(); ++iField) { 01300 fields[iField] = dynamic_cast<NTensorField3D<T>*>(atomicBlocks[iField]); 01301 } 01302 processCorner(normalX, normalY, normalZ, domain, fields); 01303 } 01304 01305 } // namespace plb 01306 01307 #endif // REDUCTIVE_DATA_PROCESSING_FUNCTIONAL_3D_HH
1.6.3
1.6.3