$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 00028 #ifndef DATA_ANALYSIS_FUNCTIONAL_3D_H 00029 #define DATA_ANALYSIS_FUNCTIONAL_3D_H 00030 00031 #include "core/globalDefs.h" 00032 #include "core/array.h" 00033 #include "atomicBlock/dataProcessingFunctional3D.h" 00034 #include "atomicBlock/reductiveDataProcessingFunctional3D.h" 00035 #include "latticeBoltzmann/geometricOperationTemplates.h" 00036 00037 namespace plb { 00038 00039 /* *************** PART I ******************************************** */ 00040 /* *************** Analysis of the block-lattice ********************* */ 00041 /* ******************************************************************* */ 00042 00043 /* *************** Reductive Data Functionals for BlockLattice ******* */ 00044 00045 template<typename T, template<typename U> class Descriptor> 00046 class BoxSumRhoBarFunctional3D : 00047 public ReductiveBoxProcessingFunctional3D_L<T,Descriptor> 00048 { 00049 public: 00050 BoxSumRhoBarFunctional3D(); 00051 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00052 virtual BoxSumRhoBarFunctional3D<T,Descriptor>* clone() const; 00053 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00054 modified[0] = modif::nothing; 00055 } 00056 T getSumRhoBar() const; 00057 private: 00058 plint sumRhoBarId; 00059 }; 00060 00061 template<typename T, template<typename U> class Descriptor> 00062 class BoxSumEnergyFunctional3D : 00063 public ReductiveBoxProcessingFunctional3D_L<T,Descriptor> 00064 { 00065 public: 00066 BoxSumEnergyFunctional3D(); 00067 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00068 virtual BoxSumEnergyFunctional3D<T,Descriptor>* clone() const; 00069 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00070 modified[0] = modif::nothing; 00071 } 00072 T getSumEnergy() const; 00073 virtual void getDimensionsX(std::vector<int>& dimensions) const; 00074 virtual void getDimensionsT(std::vector<int>& dimensions) const; 00075 private: 00076 plint sumEnergyId; 00077 }; 00078 00079 template<typename T, template<typename U> class Descriptor, class BoolMask> 00080 class CountLatticeElementsFunctional3D : 00081 public ReductiveBoxProcessingFunctional3D_L<T,Descriptor> 00082 { 00083 public: 00084 CountLatticeElementsFunctional3D(BoolMask boolMask_); 00085 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00086 virtual CountLatticeElementsFunctional3D<T,Descriptor,BoolMask>* clone() const; 00087 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00088 modified[0] = modif::nothing; 00089 } 00090 plint getCount() const; 00091 private: 00092 plint countId; 00093 BoolMask boolMask; 00094 }; 00095 00096 00097 template<typename T, template<typename U> class Descriptor> 00098 class DensitySingleProbe3D : 00099 public ReductiveBoxProcessingFunctional3D_L<T,Descriptor> 00100 { 00101 public: 00102 DensitySingleProbe3D(std::vector<Array<T,3> > const& positions_); 00103 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00104 virtual DensitySingleProbe3D<T,Descriptor>* clone() const; 00105 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00106 modified[0] = modif::nothing; 00107 } 00108 std::vector<T> getDensities() const; 00109 private: 00110 std::vector<Array<T,3> > positions; 00111 std::vector<plint> densityIds; 00112 }; 00113 00114 template<typename T, template<typename U> class Descriptor> 00115 class VelocitySingleProbe3D : 00116 public ReductiveBoxProcessingFunctional3D_L<T,Descriptor> 00117 { 00118 public: 00119 VelocitySingleProbe3D(std::vector<Array<T,3> > const& positions_); 00120 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00121 virtual VelocitySingleProbe3D<T,Descriptor>* clone() const; 00122 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00123 modified[0] = modif::nothing; 00124 } 00125 std::vector<Array<T,3> > getVelocities() const; 00126 private: 00127 std::vector<Array<T,3> > positions; 00128 std::vector<Array<plint,3> > velIds; 00129 }; 00130 00131 template<typename T, template<typename U> class Descriptor> 00132 class VorticitySingleProbe3D : 00133 public ReductiveBoxProcessingFunctional3D_L<T,Descriptor> 00134 { 00135 public: 00136 VorticitySingleProbe3D(std::vector<Array<T,3> > const& positions_); 00137 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00138 virtual VorticitySingleProbe3D<T,Descriptor>* clone() const; 00139 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00140 modified[0] = modif::nothing; 00141 } 00142 std::vector<Array<T,3> > getVorticities() const; 00143 private: 00144 std::vector<Array<T,3> > positions; 00145 std::vector<Array<plint,3> > vorticityIds; 00146 }; 00147 00148 /* *************** Data Functionals for BlockLattice ***************** */ 00149 00150 template<typename T, template<typename U> class Descriptor> 00151 class CopyPopulationsFunctional3D : 00152 public BoxProcessingFunctional3D_LL<T,Descriptor,T,Descriptor> 00153 { 00154 public: 00155 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& latticeFrom, 00156 BlockLattice3D<T,Descriptor>& latticeTo); 00157 virtual CopyPopulationsFunctional3D<T,Descriptor>* clone() const; 00158 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00159 virtual BlockDomain::DomainT appliesTo() const; 00160 }; 00161 00162 template<typename T1, template<typename U1> class Descriptor1, typename T2, template<typename U2> class Descriptor2> 00163 class CopyConvertPopulationsFunctional3D : public BoxProcessingFunctional3D_LL<T1,Descriptor1,T2,Descriptor2> 00164 { 00165 public: 00166 virtual void process(Box3D domain, BlockLattice3D<T1,Descriptor1>& latticeFrom, 00167 BlockLattice3D<T2,Descriptor2>& latticeTo); 00168 virtual CopyConvertPopulationsFunctional3D<T1,Descriptor1,T2,Descriptor2>* clone() const; 00169 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00170 virtual BlockDomain::DomainT appliesTo() const; 00171 }; 00172 00173 template<typename T, template<typename U> class Descriptor> 00174 class LatticeCopyAllFunctional3D : 00175 public BoxProcessingFunctional3D_LL<T,Descriptor,T,Descriptor> 00176 { 00177 public: 00178 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& latticeFrom, 00179 BlockLattice3D<T,Descriptor>& latticeTo); 00180 virtual LatticeCopyAllFunctional3D<T,Descriptor>* clone() const; 00181 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00182 virtual BlockDomain::DomainT appliesTo() const; 00183 }; 00184 00185 template<typename T, template<typename U> class Descriptor> 00186 class LatticeRegenerateFunctional3D : 00187 public BoxProcessingFunctional3D_LL<T,Descriptor,T,Descriptor> 00188 { 00189 public: 00190 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& latticeFrom, 00191 BlockLattice3D<T,Descriptor>& latticeTo); 00192 virtual LatticeRegenerateFunctional3D<T,Descriptor>* clone() const; 00193 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00194 }; 00195 00196 template<typename T, template<typename U> class Descriptor> 00197 class BoxDensityFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00198 { 00199 public: 00200 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00201 ScalarField3D<T>& scalarField); 00202 virtual BoxDensityFunctional3D<T,Descriptor>* clone() const; 00203 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00204 virtual BlockDomain::DomainT appliesTo() const; 00205 }; 00206 00207 template<typename T, template<typename U> class Descriptor> 00208 class BoxRhoBarFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00209 { 00210 public: 00211 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00212 ScalarField3D<T>& scalarField); 00213 virtual BoxRhoBarFunctional3D<T,Descriptor>* clone() const; 00214 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00215 virtual BlockDomain::DomainT appliesTo() const; 00216 }; 00217 00218 template<typename T, template<typename U> class Descriptor> 00219 class BoxRhoBarJfunctional3D : public BoxProcessingFunctional3D 00220 { 00221 public: 00222 virtual void processGenericBlocks(Box3D domain, std::vector<AtomicBlock3D*> fields); 00223 virtual BoxRhoBarJfunctional3D<T,Descriptor>* clone() const; 00224 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00225 }; 00226 00227 template<typename T, template<typename U> class Descriptor> 00228 class PackedRhoBarJfunctional3D : public BoxProcessingFunctional3D_LN<T,Descriptor,T> 00229 { 00230 public: 00231 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00232 NTensorField3D<T>& rhoBarJ); 00233 virtual PackedRhoBarJfunctional3D<T,Descriptor>* clone() const; 00234 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00235 }; 00236 00237 template<typename T, template<typename U> class Descriptor> 00238 class BoxKineticEnergyFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00239 { 00240 public: 00241 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00242 ScalarField3D<T>& scalarField); 00243 virtual BoxKineticEnergyFunctional3D<T,Descriptor>* clone() const; 00244 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00245 virtual BlockDomain::DomainT appliesTo() const; 00246 }; 00247 00248 template<typename T, template<typename U> class Descriptor> 00249 class BoxVelocityNormFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00250 { 00251 public: 00252 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00253 ScalarField3D<T>& scalarField); 00254 virtual BoxVelocityNormFunctional3D<T,Descriptor>* clone() const; 00255 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00256 virtual BlockDomain::DomainT appliesTo() const; 00257 }; 00258 00259 template<typename T, template<typename U> class Descriptor> 00260 class BoxVelocityComponentFunctional3D : 00261 public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00262 { 00263 public: 00264 BoxVelocityComponentFunctional3D(int iComponent); 00265 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00266 ScalarField3D<T>& scalarField); 00267 virtual BoxVelocityComponentFunctional3D<T,Descriptor>* clone() const; 00268 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00269 virtual BlockDomain::DomainT appliesTo() const; 00270 private: 00271 int iComponent; 00272 }; 00273 00274 template<typename T, template<typename U> class Descriptor> 00275 class BoxVelocityFunctional3D : 00276 public BoxProcessingFunctional3D_LT<T,Descriptor, T,Descriptor<T>::d> 00277 { 00278 public: 00279 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00280 TensorField3D<T, Descriptor<T>::d>& tensorField); 00281 virtual BoxVelocityFunctional3D<T,Descriptor>* clone() const; 00282 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00283 virtual BlockDomain::DomainT appliesTo() const; 00284 }; 00285 00286 template<typename T, template<typename U> class Descriptor> 00287 class BoxTemperatureFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00288 { 00289 public: 00290 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00291 ScalarField3D<T>& scalarField); 00292 virtual BoxTemperatureFunctional3D<T,Descriptor>* clone() const; 00293 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00294 virtual BlockDomain::DomainT appliesTo() const; 00295 }; 00296 00297 template<typename T, template<typename U> class Descriptor> 00298 class BoxDeviatoricStressFunctional3D : 00299 public BoxProcessingFunctional3D_LT<T,Descriptor, T,SymmetricTensor<T,Descriptor>::n> 00300 { 00301 public: 00302 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00303 TensorField3D<T, SymmetricTensor<T,Descriptor>::n>& PiNeq); 00304 virtual BoxDeviatoricStressFunctional3D<T,Descriptor>* clone() const; 00305 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00306 virtual BlockDomain::DomainT appliesTo() const; 00307 }; 00308 00309 template<typename T, template<typename U> class Descriptor> 00310 class BoxStrainRateFromStressFunctional3D : 00311 public BoxProcessingFunctional3D_LT<T,Descriptor, T,SymmetricTensor<T,Descriptor>::n> 00312 { 00313 public: 00314 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00315 TensorField3D<T, SymmetricTensor<T,Descriptor>::n>& S); 00316 virtual BoxStrainRateFromStressFunctional3D<T,Descriptor>* clone() const; 00317 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00318 virtual BlockDomain::DomainT appliesTo() const; 00319 }; 00320 00321 template<typename T, template<typename U> class Descriptor> 00322 class BoxPopulationFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00323 { 00324 public: 00325 BoxPopulationFunctional3D(plint iComponent_); 00326 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00327 ScalarField3D<T>& population); 00328 virtual BoxPopulationFunctional3D<T,Descriptor>* clone() const; 00329 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00330 virtual BlockDomain::DomainT appliesTo() const; 00331 private: 00332 plint iComponent; 00333 }; 00334 00335 template<typename T, template<typename U> class Descriptor> 00336 class BoxEquilibriumFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00337 { 00338 public: 00339 BoxEquilibriumFunctional3D(plint iComponent_); 00340 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00341 ScalarField3D<T>& equilibrium); 00342 virtual BoxEquilibriumFunctional3D<T,Descriptor>* clone() const; 00343 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00344 virtual BlockDomain::DomainT appliesTo() const; 00345 private: 00346 plint iComponent; 00347 }; 00348 00349 template<typename T, template<typename U> class Descriptor> 00350 class BoxAllPopulationsFunctional3D : public BoxProcessingFunctional3D_LT<T,Descriptor,T,Descriptor<T>::q> 00351 { 00352 public: 00353 BoxAllPopulationsFunctional3D(); 00354 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00355 TensorField3D<T,Descriptor<T>::q>& populations); 00356 virtual BoxAllPopulationsFunctional3D<T,Descriptor>* clone() const; 00357 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00358 virtual BlockDomain::DomainT appliesTo() const; 00359 }; 00360 00361 template<typename T, template<typename U> class Descriptor> 00362 class BoxAllPopulationsToLatticeFunctional3D : public BoxProcessingFunctional3D_LT<T,Descriptor,T,Descriptor<T>::q> 00363 { 00364 public: 00365 BoxAllPopulationsToLatticeFunctional3D(); 00366 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00367 TensorField3D<T,Descriptor<T>::q>& populations); 00368 virtual BoxAllPopulationsToLatticeFunctional3D<T,Descriptor>* clone() const; 00369 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00370 virtual BlockDomain::DomainT appliesTo() const; 00371 }; 00372 00373 template<typename T, template<typename U> class Descriptor> 00374 class BoxOmegaFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,T> 00375 { 00376 public: 00377 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00378 ScalarField3D<T>& scalarField); 00379 virtual BoxOmegaFunctional3D<T,Descriptor>* clone() const; 00380 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00381 virtual BlockDomain::DomainT appliesTo() const; 00382 }; 00383 00384 /* *************** PART II ******************************************* */ 00385 /* *************** Analysis of the scalar-field ********************** */ 00386 /* ******************************************************************* */ 00387 00388 /* *************** Reductive Data Functionals for ScalarField ******** */ 00389 00394 template<typename T> 00395 class BoxScalarSumFunctional3D : public ReductiveBoxProcessingFunctional3D_S<T> 00396 { 00397 public: 00398 BoxScalarSumFunctional3D(); 00399 virtual void process(Box3D domain, ScalarField3D<T>& scalarField); 00400 virtual BoxScalarSumFunctional3D<T>* clone() const; 00401 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00402 modified[0] = modif::nothing; 00403 } 00404 T getSumScalar() const; 00405 private: 00406 plint sumScalarId; 00407 }; 00408 00413 template<typename T> 00414 class MaskedBoxScalarAverageFunctional3D : public ReductiveBoxProcessingFunctional3D_SS<T,int> 00415 { 00416 public: 00417 MaskedBoxScalarAverageFunctional3D(int flag_); 00418 virtual void process( Box3D domain, 00419 ScalarField3D<T>& scalarField, 00420 ScalarField3D<int>& mask ); 00421 virtual MaskedBoxScalarAverageFunctional3D<T>* clone() const; 00422 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00423 modified[0] = modif::nothing; 00424 modified[1] = modif::nothing; 00425 } 00426 T getAverageScalar() const; 00427 private: 00428 plint averageScalarId; 00429 int flag; 00430 }; 00435 template<typename T> 00436 class BoxScalarMinFunctional3D : public ReductiveBoxProcessingFunctional3D_S<T> 00437 { 00438 public: 00439 BoxScalarMinFunctional3D(); 00440 virtual void process(Box3D domain, ScalarField3D<T>& scalarField); 00441 virtual BoxScalarMinFunctional3D<T>* clone() const; 00442 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00443 modified[0] = modif::nothing; 00444 } 00445 T getMinScalar() const; 00446 private: 00447 plint maxScalarId; 00448 }; 00449 00454 template<typename T> 00455 class BoxScalarMaxFunctional3D : public ReductiveBoxProcessingFunctional3D_S<T> 00456 { 00457 public: 00458 BoxScalarMaxFunctional3D(); 00459 virtual void process(Box3D domain, ScalarField3D<T>& scalarField); 00460 virtual BoxScalarMaxFunctional3D<T>* clone() const; 00461 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00462 modified[0] = modif::nothing; 00463 } 00464 T getMaxScalar() const; 00465 private: 00466 plint maxScalarId; 00467 }; 00468 00473 template<typename T> 00474 class BoundedBoxScalarSumFunctional3D : 00475 public BoundedReductiveBoxProcessingFunctional3D_S<T> 00476 { 00477 public: 00478 BoundedBoxScalarSumFunctional3D(); 00479 virtual void processBulk(Box3D domain, ScalarField3D<T>& scalarField); 00480 virtual void processPlane( int direction, int orientation, Box3D domain, 00481 ScalarField3D<T>& scalarField ); 00482 virtual void processEdge( int plane, int normal1, int normal2, 00483 Box3D domain, ScalarField3D<T>& scalarField ); 00484 virtual void processCorner( int normalX, int normalY, int normalZ, 00485 Box3D domain, ScalarField3D<T>& scalarField ); 00486 virtual BoundedBoxScalarSumFunctional3D<T>* clone() const; 00487 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00488 modified[0] = modif::nothing; 00489 } 00490 T getSumScalar() const; 00491 private: 00492 plint sumScalarId; 00493 }; 00494 00495 00496 template<typename T, class BoolMask> 00497 class CountScalarElementsFunctional3D : public ReductiveBoxProcessingFunctional3D_S<T> 00498 { 00499 public: 00500 CountScalarElementsFunctional3D(BoolMask boolMask_); 00501 virtual void process(Box3D domain, ScalarField3D<T>& field); 00502 virtual CountScalarElementsFunctional3D<T,BoolMask>* clone() const; 00503 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00504 modified[0] = modif::nothing; 00505 } 00506 plint getCount() const; 00507 private: 00508 plint countId; 00509 BoolMask boolMask; 00510 }; 00511 00512 00513 /* *************** Data Functionals for scalar-fields **************** */ 00514 00515 template<typename T> 00516 class ComputeScalarSqrtFunctional3D : public BoxProcessingFunctional3D_SS<T,T> 00517 { 00518 public: 00519 virtual void process(Box3D domain, ScalarField3D<T>& A, 00520 ScalarField3D<T>& B); 00521 virtual ComputeScalarSqrtFunctional3D<T>* clone() const; 00522 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00523 virtual BlockDomain::DomainT appliesTo() const; 00524 }; 00525 00526 template<typename T> 00527 class ComputeAbsoluteValueFunctional3D : public BoxProcessingFunctional3D_SS<T,T> 00528 { 00529 public: 00530 virtual void process(Box3D domain, ScalarField3D<T>& A, 00531 ScalarField3D<T>& B); 00532 virtual ComputeAbsoluteValueFunctional3D<T>* clone() const; 00533 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00534 virtual BlockDomain::DomainT appliesTo() const; 00535 }; 00536 00537 template<typename T1, typename T2> 00538 class CopyConvertScalarFunctional3D : public BoxProcessingFunctional3D_SS<T1,T2> 00539 { 00540 public: 00541 virtual void process(Box3D domain, ScalarField3D<T1>& field1, ScalarField3D<T2>& field2); 00542 virtual CopyConvertScalarFunctional3D<T1,T2>* clone() const; 00543 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00544 virtual BlockDomain::DomainT appliesTo() const; 00545 }; 00546 00547 template<typename T> 00548 class ExtractScalarSubDomainFunctional3D : public BoxProcessingFunctional3D_SS<T,T> 00549 { 00550 public: 00551 virtual void process(Box3D domain, ScalarField3D<T>& field1, 00552 ScalarField3D<T>& field2); 00553 virtual ExtractScalarSubDomainFunctional3D<T>* clone() const; 00554 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00555 virtual BlockDomain::DomainT appliesTo() const; 00556 }; 00557 00558 template<typename T, class Function> 00559 class ApplyScalarFunctional3D : public BoxProcessingFunctional3D_S<T> { 00560 public: 00561 ApplyScalarFunctional3D(Function f_); 00562 virtual void process(Box3D domain, ScalarField3D<T>& field); 00563 virtual ApplyScalarFunctional3D<T,Function>* clone() const; 00564 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00565 virtual BlockDomain::DomainT appliesTo() const; 00566 private: 00567 Function f; 00568 }; 00569 00570 template<typename T, class EvalFunction> 00571 class EvaluateScalarFunctional3D : public BoxProcessingFunctional3D_SS<T,T> { 00572 public: 00573 EvaluateScalarFunctional3D(EvalFunction f_); 00574 virtual void process(Box3D domain, ScalarField3D<T>& field, 00575 ScalarField3D<T>& result); 00576 virtual EvaluateScalarFunctional3D<T,EvalFunction>* clone() const; 00577 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00578 virtual BlockDomain::DomainT appliesTo() const; 00579 private: 00580 EvalFunction f; 00581 }; 00582 00583 template<typename T> 00584 class A_plus_alpha_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00585 { 00586 public: 00587 A_plus_alpha_functional3D(T alpha_); 00588 virtual void process(Box3D domain, ScalarField3D<T>& A, 00589 ScalarField3D<T>& result); 00590 virtual A_plus_alpha_functional3D<T>* clone() const; 00591 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00592 virtual BlockDomain::DomainT appliesTo() const; 00593 private: 00594 T alpha; 00595 00596 }; 00597 00598 template<typename T> 00599 class A_lt_alpha_functional3D : public BoxProcessingFunctional3D_SS<T,int> 00600 { 00601 public: 00602 A_lt_alpha_functional3D(T alpha_); 00603 virtual void process(Box3D domain, ScalarField3D<T>& A, 00604 ScalarField3D<int>& result); 00605 virtual A_lt_alpha_functional3D<T>* clone() const; 00606 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00607 virtual BlockDomain::DomainT appliesTo() const; 00608 private: 00609 T alpha; 00610 }; 00611 00612 template<typename T> 00613 class A_gt_alpha_functional3D : public BoxProcessingFunctional3D_SS<T,int> 00614 { 00615 public: 00616 A_gt_alpha_functional3D(T alpha_); 00617 virtual void process(Box3D domain, ScalarField3D<T>& A, 00618 ScalarField3D<int>& result); 00619 virtual A_gt_alpha_functional3D<T>* clone() const; 00620 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00621 virtual BlockDomain::DomainT appliesTo() const; 00622 private: 00623 T alpha; 00624 }; 00625 00626 template<typename T> 00627 class A_minus_alpha_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00628 { 00629 public: 00630 A_minus_alpha_functional3D(T alpha_); 00631 virtual void process(Box3D domain, ScalarField3D<T>& A, 00632 ScalarField3D<T>& result); 00633 virtual A_minus_alpha_functional3D<T>* clone() const; 00634 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00635 virtual BlockDomain::DomainT appliesTo() const; 00636 private: 00637 T alpha; 00638 }; 00639 00640 template<typename T> 00641 class Alpha_minus_A_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00642 { 00643 public: 00644 Alpha_minus_A_functional3D(T alpha_); 00645 virtual void process(Box3D domain, ScalarField3D<T>& A, 00646 ScalarField3D<T>& result); 00647 virtual Alpha_minus_A_functional3D<T>* clone() const; 00648 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00649 virtual BlockDomain::DomainT appliesTo() const; 00650 private: 00651 T alpha; 00652 }; 00653 00654 template<typename T> 00655 class A_times_alpha_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00656 { 00657 public: 00658 A_times_alpha_functional3D(T alpha_); 00659 virtual void process(Box3D domain, ScalarField3D<T>& A, 00660 ScalarField3D<T>& result); 00661 virtual A_times_alpha_functional3D<T>* clone() const; 00662 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00663 virtual BlockDomain::DomainT appliesTo() const; 00664 private: 00665 T alpha; 00666 }; 00667 00668 template<typename T> 00669 class A_dividedBy_alpha_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00670 { 00671 public: 00672 A_dividedBy_alpha_functional3D(T alpha_); 00673 virtual void process(Box3D domain, ScalarField3D<T>& A, 00674 ScalarField3D<T>& result); 00675 virtual A_dividedBy_alpha_functional3D<T>* clone() const; 00676 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00677 virtual BlockDomain::DomainT appliesTo() const; 00678 private: 00679 T alpha; 00680 }; 00681 00682 template<typename T> 00683 class Alpha_dividedBy_A_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00684 { 00685 public: 00686 Alpha_dividedBy_A_functional3D(T alpha_); 00687 virtual void process(Box3D domain, ScalarField3D<T>& A, 00688 ScalarField3D<T>& result); 00689 virtual Alpha_dividedBy_A_functional3D<T>* clone() const; 00690 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00691 virtual BlockDomain::DomainT appliesTo() const; 00692 private: 00693 T alpha; 00694 }; 00695 00696 template<typename T> 00697 class A_plus_alpha_inplace_functional3D : public BoxProcessingFunctional3D_S<T> 00698 { 00699 public: 00700 A_plus_alpha_inplace_functional3D(T alpha_); 00701 virtual void process(Box3D domain, ScalarField3D<T>& A); 00702 virtual A_plus_alpha_inplace_functional3D<T>* clone() const; 00703 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00704 virtual BlockDomain::DomainT appliesTo() const; 00705 private: 00706 T alpha; 00707 }; 00708 00709 template<typename T> 00710 class A_minus_alpha_inplace_functional3D : public BoxProcessingFunctional3D_S<T> 00711 { 00712 public: 00713 A_minus_alpha_inplace_functional3D(T alpha_); 00714 virtual void process(Box3D domain, ScalarField3D<T>& A); 00715 virtual A_minus_alpha_inplace_functional3D<T>* clone() const; 00716 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00717 virtual BlockDomain::DomainT appliesTo() const; 00718 private: 00719 T alpha; 00720 }; 00721 00722 template<typename T> 00723 class A_times_alpha_inplace_functional3D : public BoxProcessingFunctional3D_S<T> 00724 { 00725 public: 00726 A_times_alpha_inplace_functional3D(T alpha_); 00727 virtual void process(Box3D domain, ScalarField3D<T>& A); 00728 virtual A_times_alpha_inplace_functional3D<T>* clone() const; 00729 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00730 virtual BlockDomain::DomainT appliesTo() const; 00731 private: 00732 T alpha; 00733 }; 00734 00735 template<typename T> 00736 class A_dividedBy_alpha_inplace_functional3D : public BoxProcessingFunctional3D_S<T> 00737 { 00738 public: 00739 A_dividedBy_alpha_inplace_functional3D(T alpha_); 00740 virtual void process(Box3D domain, ScalarField3D<T>& A); 00741 virtual A_dividedBy_alpha_inplace_functional3D<T>* clone() const; 00742 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00743 virtual BlockDomain::DomainT appliesTo() const; 00744 private: 00745 T alpha; 00746 }; 00747 00748 00749 template<typename T> 00750 class A_lt_B_functional3D : public BoxProcessingFunctional3D 00751 { 00752 public: 00753 virtual void processGenericBlocks(Box3D domain, std::vector<AtomicBlock3D*> scalarFields); 00754 virtual A_lt_B_functional3D<T>* clone() const; 00755 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00756 virtual BlockDomain::DomainT appliesTo() const; 00757 }; 00758 00759 template<typename T> 00760 class A_gt_B_functional3D : public BoxProcessingFunctional3D 00761 { 00762 public: 00763 virtual void processGenericBlocks(Box3D domain, std::vector<AtomicBlock3D*> scalarFields); 00764 virtual A_gt_B_functional3D<T>* clone() const; 00765 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00766 virtual BlockDomain::DomainT appliesTo() const; 00767 }; 00768 00769 template<typename T> 00770 class A_plus_B_functional3D : public ScalarFieldBoxProcessingFunctional3D<T> 00771 { 00772 public: 00773 virtual void process(Box3D domain, std::vector<ScalarField3D<T>*> scalarFields); 00774 virtual A_plus_B_functional3D<T>* clone() const; 00775 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00776 virtual BlockDomain::DomainT appliesTo() const; 00777 }; 00778 00779 template<typename T> 00780 class A_minus_B_functional3D : public ScalarFieldBoxProcessingFunctional3D<T> 00781 { 00782 public: 00783 virtual void process(Box3D domain, std::vector<ScalarField3D<T>*> scalarFields); 00784 virtual A_minus_B_functional3D<T>* clone() const; 00785 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00786 virtual BlockDomain::DomainT appliesTo() const; 00787 }; 00788 00789 template<typename T> 00790 class A_times_B_functional3D : public ScalarFieldBoxProcessingFunctional3D<T> 00791 { 00792 public: 00793 virtual void process(Box3D domain, std::vector<ScalarField3D<T>*> scalarFields); 00794 virtual A_times_B_functional3D<T>* clone() const; 00795 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00796 virtual BlockDomain::DomainT appliesTo() const; 00797 }; 00798 00799 template<typename T> 00800 class A_dividedBy_B_functional3D : public ScalarFieldBoxProcessingFunctional3D<T> 00801 { 00802 public: 00803 virtual void process(Box3D domain, std::vector<ScalarField3D<T>*> scalarFields); 00804 virtual A_dividedBy_B_functional3D<T>* clone() const; 00805 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00806 virtual BlockDomain::DomainT appliesTo() const; 00807 }; 00808 00809 template<typename T> 00810 class A_plus_B_inplace_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00811 { 00812 public: 00813 virtual void process(Box3D domain, ScalarField3D<T>& A, ScalarField3D<T>& B); 00814 virtual A_plus_B_inplace_functional3D<T>* clone() const; 00815 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00816 virtual BlockDomain::DomainT appliesTo() const; 00817 }; 00818 00819 template<typename T> 00820 class A_minus_B_inplace_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00821 { 00822 public: 00823 virtual void process(Box3D domain, ScalarField3D<T>& A, ScalarField3D<T>& B); 00824 virtual A_minus_B_inplace_functional3D<T>* clone() const; 00825 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00826 virtual BlockDomain::DomainT appliesTo() const; 00827 }; 00828 00829 template<typename T> 00830 class A_times_B_inplace_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00831 { 00832 public: 00833 virtual void process(Box3D domain, ScalarField3D<T>& A, ScalarField3D<T>& B); 00834 virtual A_times_B_inplace_functional3D<T>* clone() const; 00835 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00836 virtual BlockDomain::DomainT appliesTo() const; 00837 }; 00838 00839 template<typename T> 00840 class A_dividedBy_B_inplace_functional3D : public BoxProcessingFunctional3D_SS<T,T> 00841 { 00842 public: 00843 virtual void process(Box3D domain, ScalarField3D<T>& A, ScalarField3D<T>& B); 00844 virtual A_dividedBy_B_inplace_functional3D<T>* clone() const; 00845 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00846 virtual BlockDomain::DomainT appliesTo() const; 00847 }; 00848 00849 00850 /* *************** PART III ****************************************** */ 00851 /* *************** Analysis of the tensor-field ********************** */ 00852 /* ******************************************************************* */ 00853 00854 template<typename T, int nDim> 00855 class ComputeTensorSqrtFunctional3D : public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 00856 { 00857 public: 00858 virtual void process(Box3D domain, TensorField3D<T,nDim>& A, 00859 TensorField3D<T,nDim>& B); 00860 virtual ComputeTensorSqrtFunctional3D<T,nDim>* clone() const; 00861 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00862 virtual BlockDomain::DomainT appliesTo() const; 00863 }; 00864 00865 template<typename T, int nDim, class BoolMask> 00866 class CountTensorElementsFunctional3D : 00867 public ReductiveBoxProcessingFunctional3D_T<T,nDim> 00868 { 00869 public: 00870 CountTensorElementsFunctional3D(BoolMask boolMask_); 00871 virtual void process(Box3D domain, TensorField3D<T,nDim>& field); 00872 virtual CountTensorElementsFunctional3D<T,nDim,BoolMask>* clone() const; 00873 plint getCount() const; 00874 private: 00875 plint countId; 00876 BoolMask boolMask; 00877 }; 00878 00879 template<typename T1, typename T2, int nDim> 00880 class CopyConvertTensorFunctional3D : public BoxProcessingFunctional3D_TT<T1,nDim,T2,nDim> 00881 { 00882 public: 00883 virtual void process(Box3D domain, TensorField3D<T1,nDim>& field1, TensorField3D<T2,nDim>& field2); 00884 virtual CopyConvertTensorFunctional3D<T1,T2,nDim>* clone() const; 00885 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00886 virtual BlockDomain::DomainT appliesTo() const; 00887 }; 00888 00889 template<typename T, int nDim> 00890 class ExtractTensorSubDomainFunctional3D : 00891 public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 00892 { 00893 public: 00894 virtual void process(Box3D domain, TensorField3D<T,nDim>& field1, 00895 TensorField3D<T,nDim>& field2); 00896 virtual ExtractTensorSubDomainFunctional3D<T,nDim>* clone() const; 00897 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00898 virtual BlockDomain::DomainT appliesTo() const; 00899 }; 00900 00901 template<typename T, int nDim> 00902 class ExtractTensorComponentFunctional3D : 00903 public BoxProcessingFunctional3D_ST<T,T,nDim> 00904 { 00905 public: 00906 ExtractTensorComponentFunctional3D(int iComponent_); 00907 virtual void process(Box3D domain, ScalarField3D<T>& scalarField, 00908 TensorField3D<T,nDim>& tensorField ); 00909 virtual ExtractTensorComponentFunctional3D<T,nDim>* clone() const; 00910 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00911 virtual BlockDomain::DomainT appliesTo() const; 00912 private: 00913 int iComponent; 00914 }; 00915 00916 template<typename T, int nDim> 00917 class ComputeNormFunctional3D : public BoxProcessingFunctional3D_ST<T,T,nDim> 00918 { 00919 public: 00920 virtual void process(Box3D domain, ScalarField3D<T>& scalarField, 00921 TensorField3D<T,nDim>& tensorField); 00922 virtual ComputeNormFunctional3D<T,nDim>* clone() const; 00923 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00924 virtual BlockDomain::DomainT appliesTo() const; 00925 }; 00926 00927 template<typename T, int nDim> 00928 class ComputeNormSqrFunctional3D : public BoxProcessingFunctional3D_ST<T,T,nDim> 00929 { 00930 public: 00931 virtual void process(Box3D domain, ScalarField3D<T>& scalarField, 00932 TensorField3D<T,nDim>& tensorField); 00933 virtual ComputeNormSqrFunctional3D<T,nDim>* clone() const; 00934 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00935 virtual BlockDomain::DomainT appliesTo() const; 00936 }; 00937 00938 template<typename T> 00939 class ComputeSymmetricTensorNormFunctional3D : 00940 public BoxProcessingFunctional3D_ST<T,T,6> 00941 { 00942 public: 00943 virtual void process(Box3D domain, ScalarField3D<T>& scalarField, 00944 TensorField3D<T,6>& tensorField); 00945 virtual ComputeSymmetricTensorNormFunctional3D<T>* clone() const; 00946 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00947 virtual BlockDomain::DomainT appliesTo() const; 00948 }; 00949 00950 template<typename T> 00951 class ComputeSymmetricTensorNormSqrFunctional3D : 00952 public BoxProcessingFunctional3D_ST<T,T,6> 00953 { 00954 public: 00955 virtual void process(Box3D domain, ScalarField3D<T>& scalarField, 00956 TensorField3D<T,6>& tensorField); 00957 virtual ComputeSymmetricTensorNormSqrFunctional3D<T>* clone() const; 00958 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00959 virtual BlockDomain::DomainT appliesTo() const; 00960 }; 00961 00962 template<typename T> 00963 class ComputeSymmetricTensorTraceFunctional3D : 00964 public BoxProcessingFunctional3D_ST<T,T,6> 00965 { 00966 public: 00967 virtual void process(Box3D domain, ScalarField3D<T>& scalarField, 00968 TensorField3D<T,6>& tensorField); 00969 virtual ComputeSymmetricTensorTraceFunctional3D<T>* clone() const; 00970 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00971 virtual BlockDomain::DomainT appliesTo() const; 00972 }; 00973 00974 template<typename T> 00975 class BoxBulkGradientFunctional3D : 00976 public BoxProcessingFunctional3D_ST<T,T,3> 00977 { 00978 public: 00979 virtual void process(Box3D domain, ScalarField3D<T>& phi, 00980 TensorField3D<T,3>& gradient); 00981 virtual BoxBulkGradientFunctional3D<T>* clone() const; 00982 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00983 virtual BlockDomain::DomainT appliesTo() const; 00984 }; 00985 00986 template<typename T> 00987 class BoxGradientFunctional3D : 00988 public BoundedBoxProcessingFunctional3D_ST<T,T,3> 00989 { 00990 public: 00991 virtual void processBulk( Box3D domain, ScalarField3D<T>& phi, 00992 TensorField3D<T,3>& gradient ); 00993 virtual void processPlane( int direction, int orientation, Box3D domain, 00994 ScalarField3D<T>& phi, 00995 TensorField3D<T,3>& gradient ); 00996 virtual void processEdge( int plane, int normal1, int normal2, Box3D domain, 00997 ScalarField3D<T>& phi, 00998 TensorField3D<T,3>& gradient ); 00999 virtual void processCorner( int normalX, int normalY, int normalZ, Box3D domain, 01000 ScalarField3D<T>& phi, 01001 TensorField3D<T,3>& gradient ); 01002 virtual BoxGradientFunctional3D<T>* clone() const; 01003 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01004 virtual BlockDomain::DomainT appliesTo() const; 01005 }; 01006 01007 template<typename T, int nDim> 01008 class BoxBulkVorticityFunctional3D : 01009 public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 01010 { 01011 public: 01012 virtual void process(Box3D domain, TensorField3D<T,nDim>& velocity, 01013 TensorField3D<T,nDim>& vorticity); 01014 virtual BoxBulkVorticityFunctional3D<T,nDim>* clone() const; 01015 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01016 virtual BlockDomain::DomainT appliesTo() const; 01017 }; 01018 01019 template<typename T, int nDim> 01020 class BoxVorticityFunctional3D : 01021 public BoundedBoxProcessingFunctional3D_TT<T,nDim,T,nDim> 01022 { 01023 public: 01024 virtual void processBulk( Box3D domain, TensorField3D<T,nDim>& velocity, 01025 TensorField3D<T,nDim>& vorticity ); 01026 virtual void processPlane( int direction, int orientation, Box3D domain, 01027 TensorField3D<T,nDim>& velocity, 01028 TensorField3D<T,nDim>& vorticity ); 01029 virtual void processEdge( int plane, int normal1, int normal2, Box3D domain, 01030 TensorField3D<T,nDim>& velocity, 01031 TensorField3D<T,nDim>& vorticity ); 01032 virtual void processCorner( int normalX, int normalY, int normalZ, Box3D domain, 01033 TensorField3D<T,nDim>& velocity, 01034 TensorField3D<T,nDim>& vorticity ); 01035 virtual BoxVorticityFunctional3D<T,nDim>* clone() const; 01036 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01037 virtual BlockDomain::DomainT appliesTo() const; 01038 }; 01039 01040 template<typename T, int nDim> 01041 class BoxBulkStrainRateFunctional3D : 01042 public BoxProcessingFunctional3D_TT<T,nDim,T,SymmetricTensorImpl<T,nDim>::n> 01043 { 01044 public: 01045 virtual void process(Box3D domain, TensorField3D<T,nDim>& velocity, 01046 TensorField3D<T,SymmetricTensorImpl<T,nDim>::n>& S); 01047 virtual BoxBulkStrainRateFunctional3D<T,nDim>* clone() const; 01048 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01049 virtual BlockDomain::DomainT appliesTo() const; 01050 }; 01051 01052 template<typename T, int nDim> 01053 class BoxStrainRateFunctional3D : 01054 public BoundedBoxProcessingFunctional3D_TT<T,nDim,T,SymmetricTensorImpl<T,nDim>::n> 01055 { 01056 public: 01057 virtual void processBulk( Box3D domain, TensorField3D<T,nDim>& velocity, 01058 TensorField3D<T,SymmetricTensorImpl<T,nDim>::n>& S ); 01059 virtual void processPlane( int direction, int orientation, Box3D domain, 01060 TensorField3D<T,nDim>& velocity, 01061 TensorField3D<T,SymmetricTensorImpl<T,nDim>::n>& S ); 01062 virtual void processEdge( int plane, int normal1, int normal2, Box3D domain, 01063 TensorField3D<T,nDim>& velocity, 01064 TensorField3D<T,SymmetricTensorImpl<T,nDim>::n>& S ); 01065 virtual void processCorner( int normalX, int normalY, int normalZ, Box3D domain, 01066 TensorField3D<T,nDim>& velocity, 01067 TensorField3D<T,SymmetricTensorImpl<T,nDim>::n>& S ); 01068 virtual BoxStrainRateFunctional3D<T,nDim>* clone() const; 01069 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01070 virtual BlockDomain::DomainT appliesTo() const; 01071 }; 01072 01073 template<typename T> 01074 class BoxQcriterionFunctional3D : public BoxProcessingFunctional3D 01075 { 01076 public: 01077 virtual void processGenericBlocks(Box3D domain, std::vector<AtomicBlock3D*> fields); 01078 virtual BoxQcriterionFunctional3D<T>* clone() const; 01079 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01080 virtual BlockDomain::DomainT appliesTo() const; 01081 }; 01082 01083 template<typename T, int nDim> 01084 class BoxBulkDivergenceFunctional3D : 01085 public BoxProcessingFunctional3D_ST<T,T,nDim> 01086 { 01087 public: 01088 virtual void process(Box3D domain, ScalarField3D<T>& divergence, 01089 TensorField3D<T,nDim>& velocity); 01090 virtual BoxBulkDivergenceFunctional3D<T,nDim>* clone() const; 01091 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01092 virtual BlockDomain::DomainT appliesTo() const; 01093 }; 01094 01095 template<typename T, int nDim> 01096 class Tensor_A_plus_B_functional3D : public TensorFieldBoxProcessingFunctional3D<T,nDim> 01097 { 01098 public: 01099 virtual void process(Box3D domain, std::vector<TensorField3D<T,nDim>*> tensorFields); 01100 virtual Tensor_A_plus_B_functional3D<T,nDim>* clone() const; 01101 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01102 virtual BlockDomain::DomainT appliesTo() const; 01103 }; 01104 01105 template<typename T, int nDim> 01106 class Tensor_A_minus_B_functional3D : public TensorFieldBoxProcessingFunctional3D<T,nDim> 01107 { 01108 public: 01109 virtual void process(Box3D domain, std::vector<TensorField3D<T,nDim>*> tensorFields); 01110 virtual Tensor_A_minus_B_functional3D<T,nDim>* clone() const; 01111 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01112 virtual BlockDomain::DomainT appliesTo() const; 01113 }; 01114 01115 template<typename T, int nDim> 01116 class Tensor_A_times_B_functional3D : public TensorFieldBoxProcessingFunctional3D<T,nDim> 01117 { 01118 public: 01119 virtual void process(Box3D domain, std::vector<TensorField3D<T,nDim>*> tensorFields); 01120 virtual Tensor_A_times_B_functional3D<T,nDim>* clone() const; 01121 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01122 virtual BlockDomain::DomainT appliesTo() const; 01123 }; 01124 01125 template<typename T, int nDim> 01126 class Tensor_A_dividedBy_B_functional3D : public TensorFieldBoxProcessingFunctional3D<T,nDim> 01127 { 01128 public: 01129 virtual void process(Box3D domain, std::vector<TensorField3D<T,nDim>*> tensorFields); 01130 virtual Tensor_A_dividedBy_B_functional3D<T,nDim>* clone() const; 01131 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01132 virtual BlockDomain::DomainT appliesTo() const; 01133 }; 01134 01135 template<typename T, int nDim> 01136 class Tensor_A_plus_B_inplace_functional3D : 01137 public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 01138 { 01139 public: 01140 virtual void process(Box3D domain, TensorField3D<T,nDim>& A, 01141 TensorField3D<T,nDim>& B); 01142 virtual Tensor_A_plus_B_inplace_functional3D<T,nDim>* clone() const; 01143 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01144 virtual BlockDomain::DomainT appliesTo() const; 01145 }; 01146 01147 template<typename T, int nDim> 01148 class Tensor_A_minus_B_inplace_functional3D : 01149 public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 01150 { 01151 public: 01152 virtual void process(Box3D domain, TensorField3D<T,nDim>& A, 01153 TensorField3D<T,nDim>& B); 01154 virtual Tensor_A_minus_B_inplace_functional3D<T,nDim>* clone() const; 01155 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01156 virtual BlockDomain::DomainT appliesTo() const; 01157 }; 01158 01159 template<typename T, int nDim> 01160 class Tensor_A_times_B_inplace_functional3D : 01161 public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 01162 { 01163 public: 01164 virtual void process(Box3D domain, TensorField3D<T,nDim>& A, 01165 TensorField3D<T,nDim>& B); 01166 virtual Tensor_A_times_B_inplace_functional3D<T,nDim>* clone() const; 01167 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01168 virtual BlockDomain::DomainT appliesTo() const; 01169 }; 01170 01171 template<typename T, int nDim> 01172 class Tensor_A_times_alpha_functional3D : public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 01173 { 01174 public: 01175 Tensor_A_times_alpha_functional3D(T alpha_); 01176 virtual void process(Box3D domain, TensorField3D<T,nDim>& A, 01177 TensorField3D<T,nDim>& result); 01178 virtual Tensor_A_times_alpha_functional3D<T,nDim>* clone() const; 01179 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01180 virtual BlockDomain::DomainT appliesTo() const; 01181 private: 01182 T alpha; 01183 }; 01184 01185 template<typename T, int nDim> 01186 class Tensor_A_times_alpha_inplace_functional3D : 01187 public BoxProcessingFunctional3D_T<T,nDim> 01188 { 01189 public: 01190 Tensor_A_times_alpha_inplace_functional3D(T alpha_); 01191 virtual void process(Box3D domain, TensorField3D<T,nDim>& A); 01192 virtual Tensor_A_times_alpha_inplace_functional3D<T,nDim>* clone() const; 01193 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01194 virtual BlockDomain::DomainT appliesTo() const; 01195 private: 01196 T alpha; 01197 }; 01198 01199 template<typename T, int nDim> 01200 class Tensor_A_dividedBy_B_inplace_functional3D : 01201 public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 01202 { 01203 public: 01204 virtual void process(Box3D domain, TensorField3D<T,nDim>& A, 01205 TensorField3D<T,nDim>& B); 01206 virtual Tensor_A_dividedBy_B_inplace_functional3D<T,nDim>* clone() const; 01207 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01208 virtual BlockDomain::DomainT appliesTo() const; 01209 }; 01210 01211 /* ************* Class LBMsmoothen3D ******************* */ 01212 01213 template<typename T, template<typename U> class Descriptor> 01214 class LBMsmoothen3D : public BoxProcessingFunctional3D_SS<T,T> 01215 { 01216 public: 01217 virtual void process(Box3D domain, 01218 ScalarField3D<T>& data, ScalarField3D<T>& result); 01219 virtual LBMsmoothen3D<T,Descriptor>* clone() const; 01220 virtual BlockDomain::DomainT appliesTo() const; 01221 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01222 }; 01223 01224 } // namespace plb 01225 01226 #endif // DATA_ANALYSIS_FUNCTIONAL_3D_H 01227 01228 // Explicitly include generic algorithms which are never precompiled (not even in precompiled version) 01229 #include "dataProcessors/dataAnalysisGenerics3D.h" 01230
1.6.3
1.6.3