$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_2D_H 00029 #define DATA_ANALYSIS_FUNCTIONAL_2D_H 00030 00031 #include "core/globalDefs.h" 00032 #include "atomicBlock/dataProcessingFunctional2D.h" 00033 #include "atomicBlock/reductiveDataProcessingFunctional2D.h" 00034 #include "latticeBoltzmann/geometricOperationTemplates.h" 00035 00036 namespace plb { 00037 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 BoxSumRhoBarFunctional2D : public ReductiveBoxProcessingFunctional2D_L<T,Descriptor> 00047 { 00048 public: 00049 BoxSumRhoBarFunctional2D(); 00050 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice); 00051 virtual BoxSumRhoBarFunctional2D<T,Descriptor>* clone() const; 00052 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00053 modified[0] = modif::nothing; 00054 } 00055 T getSumRhoBar() const; 00056 private: 00057 plint sumRhoBarId; 00058 }; 00059 00060 template<typename T, template<typename U> class Descriptor> 00061 class BoxSumEnergyFunctional2D : public ReductiveBoxProcessingFunctional2D_L<T,Descriptor> 00062 { 00063 public: 00064 BoxSumEnergyFunctional2D(); 00065 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice); 00066 virtual BoxSumEnergyFunctional2D<T,Descriptor>* clone() const; 00067 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00068 modified[0] = modif::nothing; 00069 } 00070 T getSumEnergy() const; 00071 virtual void getDimensionsX(std::vector<int>& dimensions) const; 00072 virtual void getDimensionsT(std::vector<int>& dimensions) const; 00073 private: 00074 plint sumEnergyId; 00075 }; 00076 00077 template<typename T, template<typename U> class Descriptor, class BoolMask> 00078 class CountLatticeElementsFunctional2D : public ReductiveBoxProcessingFunctional2D_L<T,Descriptor> 00079 { 00080 public: 00081 CountLatticeElementsFunctional2D(BoolMask boolMask_); 00082 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice); 00083 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00084 modified[0] = modif::nothing; 00085 } 00086 virtual CountLatticeElementsFunctional2D<T,Descriptor,BoolMask>* clone() const; 00087 plint getCount() const; 00088 private: 00089 plint countId; 00090 BoolMask boolMask; 00091 }; 00092 00093 00094 /* *************** Data Functionals for BlockLattice ***************** */ 00095 00096 template<typename T, template<typename U> class Descriptor> 00097 class CopyPopulationsFunctional2D : 00098 public BoxProcessingFunctional2D_LL<T,Descriptor,T,Descriptor> 00099 { 00100 public: 00101 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& latticeFrom, 00102 BlockLattice2D<T,Descriptor>& latticeTo); 00103 virtual CopyPopulationsFunctional2D<T,Descriptor>* clone() const; 00104 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00105 }; 00106 00107 template<typename T1, template<typename U1> class Descriptor1, typename T2, template<typename U2> class Descriptor2> 00108 class CopyConvertPopulationsFunctional2D : 00109 public BoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2> 00110 { 00111 public: 00112 virtual void process(Box2D domain, BlockLattice2D<T1,Descriptor1>& latticeFrom, 00113 BlockLattice2D<T2,Descriptor2>& latticeTo); 00114 virtual CopyConvertPopulationsFunctional2D<T1,Descriptor1,T2,Descriptor2>* clone() const; 00115 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00116 }; 00117 00118 template<typename T, template<typename U> class Descriptor> 00119 class LatticeCopyAllFunctional2D : 00120 public BoxProcessingFunctional2D_LL<T,Descriptor,T,Descriptor> 00121 { 00122 public: 00123 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& latticeFrom, 00124 BlockLattice2D<T,Descriptor>& latticeTo); 00125 virtual LatticeCopyAllFunctional2D<T,Descriptor>* clone() const; 00126 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00127 virtual BlockDomain::DomainT appliesTo() const; 00128 }; 00129 00130 template<typename T, template<typename U> class Descriptor> 00131 class LatticeRegenerateFunctional2D : 00132 public BoxProcessingFunctional2D_LL<T,Descriptor,T,Descriptor> 00133 { 00134 public: 00135 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& latticeFrom, 00136 BlockLattice2D<T,Descriptor>& latticeTo); 00137 virtual LatticeRegenerateFunctional2D<T,Descriptor>* clone() const; 00138 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00139 }; 00140 00141 00142 template<typename T, template<typename U> class Descriptor> 00143 class BoxDensityFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00144 { 00145 public: 00146 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00147 ScalarField2D<T>& scalarField); 00148 virtual BoxDensityFunctional2D<T,Descriptor>* clone() const; 00149 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00150 virtual BlockDomain::DomainT appliesTo() const; 00151 }; 00152 00153 template<typename T, template<typename U> class Descriptor> 00154 class BoxRhoBarFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00155 { 00156 public: 00157 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00158 ScalarField2D<T>& scalarField); 00159 virtual BoxRhoBarFunctional2D<T,Descriptor>* clone() const; 00160 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00161 virtual BlockDomain::DomainT appliesTo() const; 00162 }; 00163 00164 template<typename T, template<typename U> class Descriptor> 00165 class BoxRhoBarJfunctional2D : public BoxProcessingFunctional2D 00166 { 00167 public: 00168 virtual void processGenericBlocks(Box2D domain, std::vector<AtomicBlock2D*> fields); 00169 virtual BoxRhoBarJfunctional2D<T,Descriptor>* clone() const; 00170 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00171 }; 00172 00173 template<typename T, template<typename U> class Descriptor> 00174 class PackedRhoBarJfunctional2D : public BoxProcessingFunctional2D_LN<T,Descriptor,T> 00175 { 00176 public: 00177 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00178 NTensorField2D<T>& rhoBarJ); 00179 virtual PackedRhoBarJfunctional2D<T,Descriptor>* clone() const; 00180 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00181 }; 00182 00183 template<typename T, template<typename U> class Descriptor> 00184 class BoxKineticEnergyFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00185 { 00186 public: 00187 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00188 ScalarField2D<T>& scalarField); 00189 virtual BoxKineticEnergyFunctional2D<T,Descriptor>* clone() const; 00190 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00191 virtual BlockDomain::DomainT appliesTo() const; 00192 }; 00193 00194 template<typename T, template<typename U> class Descriptor> 00195 class BoxVelocityNormFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00196 { 00197 public: 00198 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00199 ScalarField2D<T>& scalarField); 00200 virtual BoxVelocityNormFunctional2D<T,Descriptor>* clone() const; 00201 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00202 virtual BlockDomain::DomainT appliesTo() const; 00203 }; 00204 00205 template<typename T, template<typename U> class Descriptor> 00206 class BoxVelocityComponentFunctional2D : 00207 public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00208 { 00209 public: 00210 BoxVelocityComponentFunctional2D(int iComponent_); 00211 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00212 ScalarField2D<T>& scalarField); 00213 virtual BoxVelocityComponentFunctional2D<T,Descriptor>* clone() const; 00214 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00215 virtual BlockDomain::DomainT appliesTo() const; 00216 private: 00217 int iComponent; 00218 }; 00219 00220 template<typename T, template<typename U> class Descriptor> 00221 class BoxVelocityFunctional2D : 00222 public BoxProcessingFunctional2D_LT<T,Descriptor, T,Descriptor<T>::d> 00223 { 00224 public: 00225 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00226 TensorField2D<T,Descriptor<T>::d>& tensorField); 00227 virtual BoxVelocityFunctional2D<T,Descriptor>* clone() const; 00228 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00229 virtual BlockDomain::DomainT appliesTo() const; 00230 }; 00231 00232 template<typename T, template<typename U> class Descriptor> 00233 class BoxDeviatoricStressFunctional2D : 00234 public BoxProcessingFunctional2D_LT<T,Descriptor, T,SymmetricTensor<T,Descriptor>::n> 00235 { 00236 public: 00237 virtual void process(Box2D domain, 00238 BlockLattice2D<T,Descriptor>& lattice, 00239 TensorField2D<T, SymmetricTensor<T,Descriptor>::n>& PiNeq); 00240 virtual BoxDeviatoricStressFunctional2D<T,Descriptor>* clone() const; 00241 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00242 virtual BlockDomain::DomainT appliesTo() const; 00243 }; 00244 00245 template<typename T, template<typename U> class Descriptor> 00246 class BoxStrainRateFromStressFunctional2D : 00247 public BoxProcessingFunctional2D_LT<T,Descriptor, T,SymmetricTensor<T,Descriptor>::n> 00248 { 00249 public: 00250 virtual void process(Box2D domain, 00251 BlockLattice2D<T,Descriptor>& lattice, 00252 TensorField2D<T, SymmetricTensor<T,Descriptor>::n>& S); 00253 virtual BoxStrainRateFromStressFunctional2D<T,Descriptor>* clone() const; 00254 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00255 virtual BlockDomain::DomainT appliesTo() const; 00256 }; 00257 00258 template<typename T, template<typename U> class Descriptor> 00259 class BoxTemperatureFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00260 { 00261 public: 00262 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00263 ScalarField2D<T>& scalarField); 00264 virtual BoxTemperatureFunctional2D<T,Descriptor>* clone() const; 00265 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00266 virtual BlockDomain::DomainT appliesTo() const; 00267 }; 00268 00269 template<typename T, template<typename U> class Descriptor> 00270 class BoxSoundSpeedFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00271 { 00272 public: 00273 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00274 ScalarField2D<T>& scalarField); 00275 virtual BoxSoundSpeedFunctional2D<T,Descriptor>* clone() const; 00276 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00277 virtual BlockDomain::DomainT appliesTo() const; 00278 }; 00279 00280 template<typename T, template<typename U> class Descriptor> 00281 class BoxPopulationFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00282 { 00283 public: 00284 BoxPopulationFunctional2D(plint iComponent_); 00285 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00286 ScalarField2D<T>& population); 00287 virtual BoxPopulationFunctional2D<T,Descriptor>* clone() const; 00288 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00289 virtual BlockDomain::DomainT appliesTo() const; 00290 private: 00291 plint iComponent; 00292 }; 00293 00294 template<typename T, template<typename U> class Descriptor> 00295 class BoxEquilibriumFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00296 { 00297 public: 00298 BoxEquilibriumFunctional2D(plint iComponent_); 00299 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00300 ScalarField2D<T>& equilibrium); 00301 virtual BoxEquilibriumFunctional2D<T,Descriptor>* clone() const; 00302 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00303 virtual BlockDomain::DomainT appliesTo() const; 00304 private: 00305 plint iComponent; 00306 }; 00307 00308 template<typename T, template<typename U> class Descriptor> 00309 class BoxAllPopulationsFunctional2D : public BoxProcessingFunctional2D_LT<T,Descriptor,T,Descriptor<T>::q> 00310 { 00311 public: 00312 BoxAllPopulationsFunctional2D(); 00313 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00314 TensorField2D<T,Descriptor<T>::q>& populations); 00315 virtual BoxAllPopulationsFunctional2D<T,Descriptor>* clone() const; 00316 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00317 virtual BlockDomain::DomainT appliesTo() const; 00318 }; 00319 00320 template<typename T, template<typename U> class Descriptor> 00321 class BoxAllPopulationsToLatticeFunctional2D : 00322 public BoxProcessingFunctional2D_LT<T,Descriptor,T,Descriptor<T>::q> 00323 { 00324 public: 00325 BoxAllPopulationsToLatticeFunctional2D(); 00326 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00327 TensorField2D<T,Descriptor<T>::q>& populations); 00328 virtual BoxAllPopulationsToLatticeFunctional2D<T,Descriptor>* clone() const; 00329 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00330 virtual BlockDomain::DomainT appliesTo() const; 00331 }; 00332 00333 template<typename T, template<typename U> class Descriptor> 00334 class BoxOmegaFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> 00335 { 00336 public: 00337 virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00338 ScalarField2D<T>& scalarField); 00339 virtual BoxOmegaFunctional2D<T,Descriptor>* clone() const; 00340 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00341 virtual BlockDomain::DomainT appliesTo() const; 00342 }; 00343 00344 00345 /* *************** PART II ******************************************* */ 00346 /* *************** Analysis of the scalar-field ********************** */ 00347 /* ******************************************************************* */ 00348 00349 /* *************** Reductive Data Functionals for ScalarField ******** */ 00350 00355 template<typename T> 00356 class BoxScalarSumFunctional2D : public ReductiveBoxProcessingFunctional2D_S<T> 00357 { 00358 public: 00359 BoxScalarSumFunctional2D(); 00360 virtual void process(Box2D domain, ScalarField2D<T>& scalarField); 00361 virtual BoxScalarSumFunctional2D<T>* clone() const; 00362 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00363 modified[0] = modif::nothing; 00364 } 00365 T getSumScalar() const; 00366 private: 00367 plint sumScalarId; 00368 }; 00369 00374 template<typename T> 00375 class MaskedBoxScalarAverageFunctional2D : public ReductiveBoxProcessingFunctional2D_SS<T,int> 00376 { 00377 public: 00378 MaskedBoxScalarAverageFunctional2D(int flag_); 00379 virtual void process( Box2D domain, 00380 ScalarField2D<T>& scalarField, 00381 ScalarField2D<int>& mask ); 00382 virtual MaskedBoxScalarAverageFunctional2D<T>* clone() const; 00383 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00384 modified[0] = modif::nothing; 00385 modified[1] = modif::nothing; 00386 } 00387 T getAverageScalar() const; 00388 private: 00389 plint averageScalarId; 00390 int flag; 00391 }; 00392 00397 template<typename T> 00398 class BoxScalarMinFunctional2D : public ReductiveBoxProcessingFunctional2D_S<T> 00399 { 00400 public: 00401 BoxScalarMinFunctional2D(); 00402 virtual void process(Box2D domain, ScalarField2D<T>& scalarField); 00403 virtual BoxScalarMinFunctional2D<T>* clone() const; 00404 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00405 modified[0] = modif::nothing; 00406 } 00407 T getMinScalar() const; 00408 private: 00409 plint maxScalarId; 00410 }; 00411 00416 template<typename T> 00417 class BoxScalarMaxFunctional2D : public ReductiveBoxProcessingFunctional2D_S<T> 00418 { 00419 public: 00420 BoxScalarMaxFunctional2D(); 00421 virtual void process(Box2D domain, ScalarField2D<T>& scalarField); 00422 virtual BoxScalarMaxFunctional2D<T>* clone() const; 00423 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00424 modified[0] = modif::nothing; 00425 } 00426 T getMaxScalar() const; 00427 private: 00428 plint maxScalarId; 00429 }; 00430 00435 template<typename T> 00436 class BoundedBoxScalarSumFunctional2D : public BoundedReductiveBoxProcessingFunctional2D_S<T> 00437 { 00438 public: 00439 BoundedBoxScalarSumFunctional2D(); 00440 virtual void processBulk(Box2D domain, ScalarField2D<T>& scalarField); 00441 virtual void processEdge( int direction, int orientation, Box2D domain, 00442 ScalarField2D<T>& scalarField ); 00443 virtual void processCorner( int normalX, int normalY, Box2D domain, 00444 ScalarField2D<T>& scalarField ); 00445 virtual BoundedBoxScalarSumFunctional2D<T>* clone() const; 00446 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00447 modified[0] = modif::nothing; 00448 } 00449 T getSumScalar() const; 00450 private: 00451 plint sumScalarId; 00452 }; 00453 00454 template<typename T, class BoolMask> 00455 class CountScalarElementsFunctional2D : public ReductiveBoxProcessingFunctional2D_S<T> 00456 { 00457 public: 00458 CountScalarElementsFunctional2D(BoolMask boolMask_); 00459 virtual void process(Box2D domain, ScalarField2D<T>& field); 00460 virtual CountScalarElementsFunctional2D<T,BoolMask>* clone() const; 00461 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00462 modified[0] = modif::nothing; 00463 } 00464 plint getCount() const; 00465 private: 00466 plint countId; 00467 BoolMask boolMask; 00468 }; 00469 00470 /* *************** Data Functionals for scalar-fields **************** */ 00471 00472 template<typename T> 00473 class ComputeAbsoluteValueFunctional2D : public BoxProcessingFunctional2D_SS<T,T> 00474 { 00475 public: 00476 virtual void process(Box2D domain, ScalarField2D<T>& A, 00477 ScalarField2D<T>& B); 00478 virtual ComputeAbsoluteValueFunctional2D<T>* clone() const; 00479 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00480 virtual BlockDomain::DomainT appliesTo() const; 00481 }; 00482 00483 template<typename T> 00484 class ComputeScalarSqrtFunctional2D : public BoxProcessingFunctional2D_SS<T,T> 00485 { 00486 public: 00487 virtual void process(Box2D domain, ScalarField2D<T>& A, 00488 ScalarField2D<T>& B); 00489 virtual ComputeScalarSqrtFunctional2D<T>* clone() const; 00490 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00491 virtual BlockDomain::DomainT appliesTo() const; 00492 }; 00493 00494 template<typename T> 00495 class ComputeScalarLogFunctional2D : public BoxProcessingFunctional2D_SS<T,T> 00496 { 00497 public: 00498 virtual void process(Box2D domain, ScalarField2D<T>& A, 00499 ScalarField2D<T>& B); 00500 virtual ComputeScalarLogFunctional2D<T>* clone() const; 00501 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00502 virtual BlockDomain::DomainT appliesTo() const; 00503 }; 00504 00505 template<typename T1, typename T2> 00506 class CopyConvertScalarFunctional2D : public BoxProcessingFunctional2D_SS<T1,T2> 00507 { 00508 public: 00509 virtual void process(Box2D domain, ScalarField2D<T1>& field1, ScalarField2D<T2>& field2); 00510 virtual CopyConvertScalarFunctional2D<T1,T2>* clone() const; 00511 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00512 virtual BlockDomain::DomainT appliesTo() const; 00513 }; 00514 00515 template<typename T> 00516 class ExtractScalarSubDomainFunctional2D : public BoxProcessingFunctional2D_SS<T,T> 00517 { 00518 public: 00519 virtual void process(Box2D domain, ScalarField2D<T>& field1, ScalarField2D<T>& field2); 00520 virtual ExtractScalarSubDomainFunctional2D<T>* clone() const; 00521 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00522 virtual BlockDomain::DomainT appliesTo() const; 00523 }; 00524 00525 template<typename T, class Function> 00526 class ApplyScalarFunctional2D : public BoxProcessingFunctional2D_S<T> { 00527 public: 00528 ApplyScalarFunctional2D(Function f_); 00529 virtual void process(Box2D domain, ScalarField2D<T>& field); 00530 virtual ApplyScalarFunctional2D<T,Function>* clone() const; 00531 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00532 virtual BlockDomain::DomainT appliesTo() const; 00533 private: 00534 Function f; 00535 }; 00536 00537 template<typename T, class EvalFunction> 00538 class EvaluateScalarFunctional2D : public BoxProcessingFunctional2D_SS<T,T> { 00539 public: 00540 EvaluateScalarFunctional2D(EvalFunction f_); 00541 virtual void process(Box2D domain, ScalarField2D<T>& field, 00542 ScalarField2D<T>& result); 00543 virtual EvaluateScalarFunctional2D<T,EvalFunction>* clone() const; 00544 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00545 virtual BlockDomain::DomainT appliesTo() const; 00546 private: 00547 EvalFunction f; 00548 }; 00549 00550 template<typename T> 00551 class A_lt_alpha_functional2D : public BoxProcessingFunctional2D_SS<T,int> 00552 { 00553 public: 00554 A_lt_alpha_functional2D(T alpha_); 00555 virtual void process(Box2D domain, ScalarField2D<T>& A, 00556 ScalarField2D<int>& result); 00557 virtual A_lt_alpha_functional2D<T>* clone() const; 00558 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00559 virtual BlockDomain::DomainT appliesTo() const; 00560 private: 00561 T alpha; 00562 }; 00563 00564 template<typename T> 00565 class A_gt_alpha_functional2D : public BoxProcessingFunctional2D_SS<T,int> 00566 { 00567 public: 00568 A_gt_alpha_functional2D(T alpha_); 00569 virtual void process(Box2D domain, ScalarField2D<T>& A, 00570 ScalarField2D<int>& result); 00571 virtual A_gt_alpha_functional2D<T>* clone() const; 00572 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00573 virtual BlockDomain::DomainT appliesTo() const; 00574 private: 00575 T alpha; 00576 }; 00577 00578 template<typename T> 00579 class A_plus_alpha_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00580 { 00581 public: 00582 A_plus_alpha_functional2D(T alpha_); 00583 virtual void process(Box2D domain, ScalarField2D<T>& A, 00584 ScalarField2D<T>& result); 00585 virtual A_plus_alpha_functional2D<T>* clone() const; 00586 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00587 virtual BlockDomain::DomainT appliesTo() const; 00588 private: 00589 T alpha; 00590 }; 00591 00592 template<typename T> 00593 class A_minus_alpha_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00594 { 00595 public: 00596 A_minus_alpha_functional2D(T alpha_); 00597 virtual void process(Box2D domain, ScalarField2D<T>& A, 00598 ScalarField2D<T>& result); 00599 virtual A_minus_alpha_functional2D<T>* clone() const; 00600 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00601 virtual BlockDomain::DomainT appliesTo() const; 00602 private: 00603 T alpha; 00604 }; 00605 00606 template<typename T> 00607 class Alpha_minus_A_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00608 { 00609 public: 00610 Alpha_minus_A_functional2D(T alpha_); 00611 virtual void process(Box2D domain, ScalarField2D<T>& A, 00612 ScalarField2D<T>& result); 00613 virtual Alpha_minus_A_functional2D<T>* clone() const; 00614 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00615 virtual BlockDomain::DomainT appliesTo() const; 00616 private: 00617 T alpha; 00618 }; 00619 00620 template<typename T> 00621 class A_times_alpha_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00622 { 00623 public: 00624 A_times_alpha_functional2D(T alpha_); 00625 virtual void process(Box2D domain, ScalarField2D<T>& A, 00626 ScalarField2D<T>& result); 00627 virtual A_times_alpha_functional2D<T>* clone() const; 00628 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00629 virtual BlockDomain::DomainT appliesTo() const; 00630 private: 00631 T alpha; 00632 }; 00633 00634 template<typename T> 00635 class A_dividedBy_alpha_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00636 { 00637 public: 00638 A_dividedBy_alpha_functional2D(T alpha_); 00639 virtual void process(Box2D domain, ScalarField2D<T>& A, 00640 ScalarField2D<T>& result); 00641 virtual A_dividedBy_alpha_functional2D<T>* clone() const; 00642 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00643 virtual BlockDomain::DomainT appliesTo() const; 00644 private: 00645 T alpha; 00646 }; 00647 00648 template<typename T> 00649 class Alpha_dividedBy_A_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00650 { 00651 public: 00652 Alpha_dividedBy_A_functional2D(T alpha_); 00653 virtual void process(Box2D domain, ScalarField2D<T>& A, 00654 ScalarField2D<T>& result); 00655 virtual Alpha_dividedBy_A_functional2D<T>* clone() const; 00656 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00657 virtual BlockDomain::DomainT appliesTo() const; 00658 private: 00659 T alpha; 00660 }; 00661 00662 template<typename T> 00663 class A_plus_alpha_inplace_functional2D : public BoxProcessingFunctional2D_S<T> 00664 { 00665 public: 00666 A_plus_alpha_inplace_functional2D(T alpha_); 00667 virtual void process(Box2D domain, ScalarField2D<T>& A); 00668 virtual A_plus_alpha_inplace_functional2D<T>* clone() const; 00669 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00670 virtual BlockDomain::DomainT appliesTo() const; 00671 private: 00672 T alpha; 00673 }; 00674 00675 template<typename T> 00676 class A_minus_alpha_inplace_functional2D : public BoxProcessingFunctional2D_S<T> 00677 { 00678 public: 00679 A_minus_alpha_inplace_functional2D(T alpha_); 00680 virtual void process(Box2D domain, ScalarField2D<T>& A); 00681 virtual A_minus_alpha_inplace_functional2D<T>* clone() const; 00682 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00683 virtual BlockDomain::DomainT appliesTo() const; 00684 private: 00685 T alpha; 00686 }; 00687 00688 template<typename T> 00689 class A_times_alpha_inplace_functional2D : public BoxProcessingFunctional2D_S<T> 00690 { 00691 public: 00692 A_times_alpha_inplace_functional2D(T alpha_); 00693 virtual void process(Box2D domain, ScalarField2D<T>& A); 00694 virtual A_times_alpha_inplace_functional2D<T>* clone() const; 00695 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00696 virtual BlockDomain::DomainT appliesTo() const; 00697 private: 00698 T alpha; 00699 }; 00700 00701 template<typename T> 00702 class A_dividedBy_alpha_inplace_functional2D : public BoxProcessingFunctional2D_S<T> 00703 { 00704 public: 00705 A_dividedBy_alpha_inplace_functional2D(T alpha_); 00706 virtual void process(Box2D domain, ScalarField2D<T>& A); 00707 virtual A_dividedBy_alpha_inplace_functional2D<T>* clone() const; 00708 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00709 virtual BlockDomain::DomainT appliesTo() const; 00710 private: 00711 T alpha; 00712 }; 00713 00714 00715 template<typename T> 00716 class A_lt_B_functional2D : public BoxProcessingFunctional2D 00717 { 00718 public: 00719 virtual void processGenericBlocks(Box2D domain, std::vector<AtomicBlock2D*> scalarFields); 00720 virtual A_lt_B_functional2D<T>* clone() const; 00721 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00722 virtual BlockDomain::DomainT appliesTo() const; 00723 }; 00724 00725 00726 template<typename T> 00727 class A_gt_B_functional2D : public BoxProcessingFunctional2D 00728 { 00729 public: 00730 virtual void processGenericBlocks(Box2D domain, std::vector<AtomicBlock2D*> scalarFields); 00731 virtual A_gt_B_functional2D<T>* clone() const; 00732 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00733 virtual BlockDomain::DomainT appliesTo() const; 00734 }; 00735 00736 template<typename T> 00737 class A_plus_B_functional2D : public ScalarFieldBoxProcessingFunctional2D<T> 00738 { 00739 public: 00740 virtual void process(Box2D domain, std::vector<ScalarField2D<T>*> scalarFields); 00741 virtual A_plus_B_functional2D<T>* clone() const; 00742 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00743 virtual BlockDomain::DomainT appliesTo() const; 00744 }; 00745 00746 template<typename T> 00747 class A_minus_B_functional2D : public ScalarFieldBoxProcessingFunctional2D<T> 00748 { 00749 public: 00750 virtual void process(Box2D domain, std::vector<ScalarField2D<T>*> scalarFields); 00751 virtual A_minus_B_functional2D<T>* clone() const; 00752 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00753 virtual BlockDomain::DomainT appliesTo() const; 00754 }; 00755 00756 template<typename T> 00757 class A_times_B_functional2D : public ScalarFieldBoxProcessingFunctional2D<T> 00758 { 00759 public: 00760 virtual void process(Box2D domain, std::vector<ScalarField2D<T>*> scalarFields); 00761 virtual A_times_B_functional2D<T>* clone() const; 00762 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00763 virtual BlockDomain::DomainT appliesTo() const; 00764 }; 00765 00766 template<typename T> 00767 class A_dividedBy_B_functional2D : public ScalarFieldBoxProcessingFunctional2D<T> 00768 { 00769 public: 00770 virtual void process(Box2D domain, std::vector<ScalarField2D<T>*> scalarFields); 00771 virtual A_dividedBy_B_functional2D<T>* clone() const; 00772 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00773 virtual BlockDomain::DomainT appliesTo() const; 00774 }; 00775 00776 template<typename T> 00777 class A_plus_B_inplace_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00778 { 00779 public: 00780 virtual void process(Box2D domain, ScalarField2D<T>& A, ScalarField2D<T>& B); 00781 virtual A_plus_B_inplace_functional2D<T>* clone() const; 00782 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00783 virtual BlockDomain::DomainT appliesTo() const; 00784 }; 00785 00786 template<typename T> 00787 class A_minus_B_inplace_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00788 { 00789 public: 00790 virtual void process(Box2D domain, ScalarField2D<T>& A, ScalarField2D<T>& B); 00791 virtual A_minus_B_inplace_functional2D<T>* clone() const; 00792 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00793 virtual BlockDomain::DomainT appliesTo() const; 00794 }; 00795 00796 template<typename T> 00797 class A_times_B_inplace_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00798 { 00799 public: 00800 virtual void process(Box2D domain, ScalarField2D<T>& A, ScalarField2D<T>& B); 00801 virtual A_times_B_inplace_functional2D<T>* clone() const; 00802 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00803 virtual BlockDomain::DomainT appliesTo() const; 00804 }; 00805 00806 template<typename T> 00807 class A_dividedBy_B_inplace_functional2D : public BoxProcessingFunctional2D_SS<T,T> 00808 { 00809 public: 00810 virtual void process(Box2D domain, ScalarField2D<T>& A, ScalarField2D<T>& B); 00811 virtual A_dividedBy_B_inplace_functional2D<T>* clone() const; 00812 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00813 virtual BlockDomain::DomainT appliesTo() const; 00814 }; 00815 00816 /* *************** PART III ****************************************** */ 00817 /* *************** Analysis of the tensor-field ********************** */ 00818 /* ******************************************************************* */ 00819 00820 template<typename T, int nDim> 00821 class ComputeTensorSqrtFunctional2D : public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 00822 { 00823 public: 00824 virtual void process(Box2D domain, TensorField2D<T,nDim>& A, 00825 TensorField2D<T,nDim>& B); 00826 virtual ComputeTensorSqrtFunctional2D<T,nDim>* clone() const; 00827 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00828 virtual BlockDomain::DomainT appliesTo() const; 00829 }; 00830 00831 template<typename T, int nDim, class BoolMask> 00832 class CountTensorElementsFunctional2D : 00833 public ReductiveBoxProcessingFunctional2D_T<T,nDim> 00834 { 00835 public: 00836 CountTensorElementsFunctional2D(BoolMask boolMask_); 00837 virtual void process(Box2D domain, TensorField2D<T,nDim>& field); 00838 virtual CountTensorElementsFunctional2D<T,nDim,BoolMask>* clone() const; 00839 plint getCount() const; 00840 private: 00841 plint countId; 00842 BoolMask boolMask; 00843 }; 00844 00845 template<typename T1, typename T2, int nDim> 00846 class CopyConvertTensorFunctional2D : public BoxProcessingFunctional2D_TT<T1,nDim,T2,nDim> 00847 { 00848 public: 00849 virtual void process(Box2D domain, TensorField2D<T1,nDim>& field1, TensorField2D<T2,nDim>& field2); 00850 virtual CopyConvertTensorFunctional2D<T1,T2,nDim>* clone() const; 00851 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00852 virtual BlockDomain::DomainT appliesTo() const; 00853 }; 00854 00855 template<typename T, int nDim> 00856 class ExtractTensorSubDomainFunctional2D : 00857 public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 00858 { 00859 public: 00860 virtual void process(Box2D domain, TensorField2D<T,nDim>& field1, TensorField2D<T,nDim>& field2); 00861 virtual ExtractTensorSubDomainFunctional2D<T,nDim>* clone() const; 00862 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00863 virtual BlockDomain::DomainT appliesTo() const; 00864 }; 00865 00866 template<typename T, int nDim> 00867 class ExtractTensorComponentFunctional2D : 00868 public BoxProcessingFunctional2D_ST<T,T,nDim> 00869 { 00870 public: 00871 ExtractTensorComponentFunctional2D(int iComponent_); 00872 virtual void process(Box2D domain, ScalarField2D<T>& scalarField, 00873 TensorField2D<T,nDim>& tensorField); 00874 virtual ExtractTensorComponentFunctional2D<T,nDim>* clone() const; 00875 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00876 virtual BlockDomain::DomainT appliesTo() const; 00877 private: 00878 int iComponent; 00879 }; 00880 00881 template<typename T, int nDim> 00882 class ComputeNormFunctional2D : public BoxProcessingFunctional2D_ST<T,T,nDim> 00883 { 00884 public: 00885 virtual void process(Box2D domain, ScalarField2D<T>& scalarField, 00886 TensorField2D<T,nDim>& tensorField); 00887 virtual ComputeNormFunctional2D<T,nDim>* clone() const; 00888 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00889 virtual BlockDomain::DomainT appliesTo() const; 00890 }; 00891 00892 template<typename T, int nDim> 00893 class ComputeNormSqrFunctional2D : public BoxProcessingFunctional2D_ST<T,T,nDim> 00894 { 00895 public: 00896 virtual void process(Box2D domain, ScalarField2D<T>& scalarField, 00897 TensorField2D<T,nDim>& tensorField); 00898 virtual ComputeNormSqrFunctional2D<T,nDim>* clone() const; 00899 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00900 virtual BlockDomain::DomainT appliesTo() const; 00901 }; 00902 00903 template<typename T> 00904 class ComputeSymmetricTensorNormFunctional2D : 00905 public BoxProcessingFunctional2D_ST<T,T,3> 00906 { 00907 public: 00908 virtual void process(Box2D domain, ScalarField2D<T>& scalarField, 00909 TensorField2D<T,3>& tensorField); 00910 virtual ComputeSymmetricTensorNormFunctional2D<T>* clone() const; 00911 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00912 virtual BlockDomain::DomainT appliesTo() const; 00913 }; 00914 00915 template<typename T> 00916 class ComputeSymmetricTensorNormSqrFunctional2D : 00917 public BoxProcessingFunctional2D_ST<T,T,3> 00918 { 00919 public: 00920 virtual void process(Box2D domain, ScalarField2D<T>& scalarField, 00921 TensorField2D<T,3>& tensorField); 00922 virtual ComputeSymmetricTensorNormSqrFunctional2D<T>* clone() const; 00923 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00924 virtual BlockDomain::DomainT appliesTo() const; 00925 }; 00926 00927 template<typename T> 00928 class ComputeSymmetricTensorTraceFunctional2D : 00929 public BoxProcessingFunctional2D_ST<T,T,3> 00930 { 00931 public: 00932 virtual void process(Box2D domain, ScalarField2D<T>& scalarField, 00933 TensorField2D<T,3>& tensorField); 00934 virtual ComputeSymmetricTensorTraceFunctional2D<T>* clone() const; 00935 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00936 virtual BlockDomain::DomainT appliesTo() const; 00937 }; 00938 00939 template<typename T, int nDim> 00940 class BoxBulkVorticityFunctional2D : public BoxProcessingFunctional2D_ST<T,T,nDim> 00941 { 00942 public: 00943 virtual void process(Box2D domain, ScalarField2D<T>& vorticity, 00944 TensorField2D<T,nDim>& velocity); 00945 virtual BoxBulkVorticityFunctional2D<T,nDim>* clone() const; 00946 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00947 virtual BlockDomain::DomainT appliesTo() const; 00948 }; 00949 00950 template<typename T, int nDim> 00951 class BoxVorticityFunctional2D : public BoundedBoxProcessingFunctional2D_ST<T,T,nDim> 00952 { 00953 public: 00954 virtual void processBulk( Box2D domain, ScalarField2D<T>& vorticity, 00955 TensorField2D<T,nDim>& velocity ); 00956 virtual void processEdge( int direction, int orientation, Box2D domain, 00957 ScalarField2D<T>& vorticity, 00958 TensorField2D<T,nDim>& velocity ); 00959 virtual void processCorner( int normalX, int normalY, Box2D domain, 00960 ScalarField2D<T>& vorticity, 00961 TensorField2D<T,nDim>& velocity ); 00962 virtual BoxVorticityFunctional2D<T,nDim>* clone() const; 00963 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00964 virtual BlockDomain::DomainT appliesTo() const; 00965 }; 00966 00967 template<typename T, int nDim> 00968 class BoxBulkStrainRateFunctional2D : 00969 public BoxProcessingFunctional2D_TT<T,nDim,T,SymmetricTensorImpl<T,nDim>::n> 00970 { 00971 public: 00972 virtual void process(Box2D domain, TensorField2D<T,nDim>& velocity, 00973 TensorField2D<T,SymmetricTensorImpl<T,nDim>::n>& S); 00974 virtual BoxBulkStrainRateFunctional2D<T,nDim>* clone() const; 00975 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00976 virtual BlockDomain::DomainT appliesTo() const; 00977 }; 00978 00979 template<typename T, int nDim> 00980 class BoxStrainRateFunctional2D : 00981 public BoundedBoxProcessingFunctional2D_TT<T,nDim,T,SymmetricTensorImpl<T,nDim>::n> 00982 { 00983 public: 00984 virtual void processBulk( Box2D domain, TensorField2D<T,nDim>& velocity, 00985 TensorField2D<T,SymmetricTensorImpl<T,nDim>::n>& S ); 00986 virtual void processEdge( int direction, int orientation, Box2D domain, 00987 TensorField2D<T,nDim>& velocity, 00988 TensorField2D<T,SymmetricTensorImpl<T,nDim>::n>& S ); 00989 virtual void processCorner( int normalX, int normalY, Box2D domain, 00990 TensorField2D<T,nDim>& velocity, 00991 TensorField2D<T,SymmetricTensorImpl<T,nDim>::n>& S ); 00992 virtual BoxStrainRateFunctional2D<T,nDim>* clone() const; 00993 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00994 virtual BlockDomain::DomainT appliesTo() const; 00995 }; 00996 00997 template<typename T, int nDim> 00998 class Tensor_A_times_alpha_functional2D : public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 00999 { 01000 public: 01001 Tensor_A_times_alpha_functional2D(T alpha_); 01002 virtual void process(Box2D domain, TensorField2D<T,nDim>& A, 01003 TensorField2D<T,nDim>& result); 01004 virtual Tensor_A_times_alpha_functional2D<T,nDim>* clone() const; 01005 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01006 virtual BlockDomain::DomainT appliesTo() const; 01007 private: 01008 T alpha; 01009 }; 01010 01011 template<typename T, int nDim> 01012 class Tensor_A_plus_B_functional2D : public TensorFieldBoxProcessingFunctional2D<T,nDim> 01013 { 01014 public: 01015 virtual void process(Box2D domain, std::vector<TensorField2D<T,nDim>*> tensorFields); 01016 virtual Tensor_A_plus_B_functional2D<T,nDim>* clone() const; 01017 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01018 virtual BlockDomain::DomainT appliesTo() const; 01019 }; 01020 01021 template<typename T, int nDim> 01022 class Tensor_A_minus_B_functional2D : public TensorFieldBoxProcessingFunctional2D<T,nDim> 01023 { 01024 public: 01025 virtual void process(Box2D domain, std::vector<TensorField2D<T,nDim>*> tensorFields); 01026 virtual Tensor_A_minus_B_functional2D<T,nDim>* clone() const; 01027 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01028 virtual BlockDomain::DomainT appliesTo() const; 01029 }; 01030 01031 template<typename T, int nDim> 01032 class Tensor_A_times_B_functional2D : public TensorFieldBoxProcessingFunctional2D<T,nDim> 01033 { 01034 public: 01035 virtual void process(Box2D domain, std::vector<TensorField2D<T,nDim>*> tensorFields); 01036 virtual Tensor_A_times_B_functional2D<T,nDim>* clone() const; 01037 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01038 virtual BlockDomain::DomainT appliesTo() const; 01039 }; 01040 01041 template<typename T, int nDim> 01042 class Tensor_A_dividedBy_B_functional2D : public TensorFieldBoxProcessingFunctional2D<T,nDim> 01043 { 01044 public: 01045 virtual void process(Box2D domain, std::vector<TensorField2D<T,nDim>*> tensorFields); 01046 virtual Tensor_A_dividedBy_B_functional2D<T,nDim>* clone() const; 01047 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01048 virtual BlockDomain::DomainT appliesTo() const; 01049 }; 01050 01051 template<typename T, int nDim> 01052 class Tensor_A_plus_B_inplace_functional2D : 01053 public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 01054 { 01055 public: 01056 virtual void process(Box2D domain, TensorField2D<T,nDim>& A, TensorField2D<T,nDim>& B); 01057 virtual Tensor_A_plus_B_inplace_functional2D<T,nDim>* clone() const; 01058 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01059 virtual BlockDomain::DomainT appliesTo() const; 01060 }; 01061 01062 template<typename T, int nDim> 01063 class Tensor_A_minus_B_inplace_functional2D : 01064 public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 01065 { 01066 public: 01067 virtual void process(Box2D domain, TensorField2D<T,nDim>& A, TensorField2D<T,nDim>& B); 01068 virtual Tensor_A_minus_B_inplace_functional2D<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, int nDim> 01074 class Tensor_A_times_B_inplace_functional2D : 01075 public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 01076 { 01077 public: 01078 virtual void process(Box2D domain, TensorField2D<T,nDim>& A, 01079 TensorField2D<T,nDim>& B); 01080 virtual Tensor_A_times_B_inplace_functional2D<T,nDim>* clone() const; 01081 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01082 virtual BlockDomain::DomainT appliesTo() const; 01083 }; 01084 01085 template<typename T, int nDim> 01086 class Tensor_A_times_alpha_inplace_functional2D : 01087 public BoxProcessingFunctional2D_T<T,nDim> 01088 { 01089 public: 01090 Tensor_A_times_alpha_inplace_functional2D(T alpha_); 01091 virtual void process(Box2D domain, TensorField2D<T,nDim>& A); 01092 virtual Tensor_A_times_alpha_inplace_functional2D<T,nDim>* clone() const; 01093 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01094 virtual BlockDomain::DomainT appliesTo() const; 01095 private: 01096 T alpha; 01097 }; 01098 01099 template<typename T, int nDim> 01100 class Tensor_A_dividedBy_B_inplace_functional2D : 01101 public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 01102 { 01103 public: 01104 virtual void process(Box2D domain, TensorField2D<T,nDim>& A, 01105 TensorField2D<T,nDim>& B); 01106 virtual Tensor_A_dividedBy_B_inplace_functional2D<T,nDim>* clone() const; 01107 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 01108 virtual BlockDomain::DomainT appliesTo() const; 01109 }; 01110 01111 } // namespace plb 01112 01113 #endif // DATA_ANALYSIS_FUNCTIONAL_2D_H 01114 01115 // Explicitly include generic algorithms which are never precompiled (not even in precompiled version) 01116 #include "dataProcessors/dataAnalysisGenerics2D.h" 01117
1.6.3
1.6.3