$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_INITIALIZER_FUNCTIONAL_3D_H 00029 #define DATA_INITIALIZER_FUNCTIONAL_3D_H 00030 00031 #include "core/globalDefs.h" 00032 #include "atomicBlock/dataProcessingFunctional3D.h" 00033 #include "core/dynamics.h" 00034 00035 namespace plb { 00036 00037 /* *************** PART I ******************************************** */ 00038 /* *************** Initialization of the block-lattice *************** */ 00039 /* ******************************************************************* */ 00040 00041 template<typename T, template<class U> class Descriptor> 00042 struct OneCellFunctional3D { 00043 virtual ~OneCellFunctional3D(); 00044 virtual OneCellFunctional3D<T,Descriptor>* clone() const =0; 00045 virtual void execute(Cell<T,Descriptor>& cell) const =0; 00046 virtual BlockDomain::DomainT appliesTo() const; 00047 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00048 virtual void setscale(int dxScale, int dtScale); 00049 }; 00050 00051 template<typename T, template<class U> class Descriptor> 00052 struct OneCellIndexedFunctional3D { 00053 virtual ~OneCellIndexedFunctional3D(); 00054 virtual OneCellIndexedFunctional3D<T,Descriptor>* clone() const =0; 00055 virtual void execute(plint iX, plint iY, plint iZ, Cell<T,Descriptor>& cell) const =0; 00056 virtual BlockDomain::DomainT appliesTo() const; 00057 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00058 virtual void setscale(int dxScale, int dtScale); 00059 }; 00060 00061 struct DomainFunctional3D { 00062 virtual ~DomainFunctional3D() { } 00063 virtual bool operator() (plint iX, plint iY, plint iZ) const =0; 00064 virtual DomainFunctional3D* clone() const =0; 00065 }; 00066 00067 template<typename T, template<class U> class Descriptor> 00068 class GenericLatticeFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> 00069 { 00070 public: 00071 GenericLatticeFunctional3D(OneCellFunctional3D<T,Descriptor>* f_); 00072 GenericLatticeFunctional3D(GenericLatticeFunctional3D<T,Descriptor> const& rhs); 00073 ~GenericLatticeFunctional3D(); 00074 GenericLatticeFunctional3D<T,Descriptor>& operator=(GenericLatticeFunctional3D<T,Descriptor> const& rhs); 00075 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00076 virtual GenericLatticeFunctional3D<T,Descriptor>* clone() const; 00077 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00078 virtual BlockDomain::DomainT appliesTo() const; 00079 virtual void setscale(int dxScale, int dtScale); 00080 private: 00081 OneCellFunctional3D<T,Descriptor>* f; 00082 }; 00083 00084 template<typename T, template<class U> class Descriptor> 00085 class GenericIndexedLatticeFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> 00086 { 00087 public: 00088 GenericIndexedLatticeFunctional3D(OneCellIndexedFunctional3D<T,Descriptor>* f_); 00089 GenericIndexedLatticeFunctional3D(GenericIndexedLatticeFunctional3D<T,Descriptor> const& rhs); 00090 ~GenericIndexedLatticeFunctional3D(); 00091 GenericIndexedLatticeFunctional3D<T,Descriptor>& operator=(GenericIndexedLatticeFunctional3D<T,Descriptor> const& rhs); 00092 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00093 virtual GenericIndexedLatticeFunctional3D<T,Descriptor>* clone() const; 00094 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00095 virtual BlockDomain::DomainT appliesTo() const; 00096 virtual void setscale(int dxScale, int dtScale); 00097 private: 00098 OneCellIndexedFunctional3D<T,Descriptor>* f; 00099 }; 00100 00101 00102 /* *************** Class InstantiateDynamicsFunctional3D ************* */ 00103 00104 template<typename T, template<typename U> class Descriptor> 00105 class InstantiateDynamicsFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> { 00106 public: 00107 InstantiateDynamicsFunctional3D(Dynamics<T,Descriptor>* dynamics_); 00108 InstantiateDynamicsFunctional3D(InstantiateDynamicsFunctional3D<T,Descriptor> const& rhs); 00109 InstantiateDynamicsFunctional3D<T,Descriptor>& operator= ( 00110 InstantiateDynamicsFunctional3D<T,Descriptor> const& rhs ); 00111 ~InstantiateDynamicsFunctional3D(); 00112 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00113 virtual BlockDomain::DomainT appliesTo() const; 00114 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00115 virtual InstantiateDynamicsFunctional3D<T,Descriptor>* clone() const ; 00116 private: 00117 Dynamics<T,Descriptor>* dynamics; 00118 }; 00119 00120 /* ************* Class InstantiateComplexDomainDynamicsFunctional3D ** */ 00121 00122 template<typename T, template<typename U> class Descriptor> 00123 class InstantiateComplexDomainDynamicsFunctional3D 00124 : public BoxProcessingFunctional3D_L<T,Descriptor> 00125 { 00126 public: 00127 InstantiateComplexDomainDynamicsFunctional3D( Dynamics<T,Descriptor>* dynamics_, 00128 DomainFunctional3D* domain_ ); 00129 InstantiateComplexDomainDynamicsFunctional3D ( 00130 InstantiateComplexDomainDynamicsFunctional3D<T,Descriptor> const& rhs ); 00131 InstantiateComplexDomainDynamicsFunctional3D<T,Descriptor>& operator= ( 00132 InstantiateComplexDomainDynamicsFunctional3D<T,Descriptor> const& rhs ); 00133 ~InstantiateComplexDomainDynamicsFunctional3D(); 00134 virtual void process(Box3D boundingBox, BlockLattice3D<T,Descriptor>& lattice); 00135 virtual BlockDomain::DomainT appliesTo() const; 00136 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00137 virtual InstantiateComplexDomainDynamicsFunctional3D<T,Descriptor>* clone() const; 00138 private: 00139 Dynamics<T,Descriptor>* dynamics; 00140 DomainFunctional3D* domain; 00141 }; 00142 00143 00144 /* ************* Class InstantiateDotDynamicsFunctional3D ******************* */ 00145 00146 template<typename T, template<typename U> class Descriptor> 00147 class InstantiateDotDynamicsFunctional3D : public DotProcessingFunctional3D_L<T,Descriptor> { 00148 public: 00149 InstantiateDotDynamicsFunctional3D(Dynamics<T,Descriptor>* dynamics_); 00150 InstantiateDotDynamicsFunctional3D(InstantiateDotDynamicsFunctional3D<T,Descriptor> const& rhs); 00151 InstantiateDotDynamicsFunctional3D<T,Descriptor>& operator= ( 00152 InstantiateDotDynamicsFunctional3D<T,Descriptor> const& rhs ); 00153 ~InstantiateDotDynamicsFunctional3D(); 00154 virtual void process(DotList3D const& dotList, BlockLattice3D<T,Descriptor>& lattice); 00155 virtual BlockDomain::DomainT appliesTo() const; 00156 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00157 virtual InstantiateDotDynamicsFunctional3D<T,Descriptor>* clone() const; 00158 private: 00159 Dynamics<T,Descriptor>* dynamics; 00160 }; 00161 00162 00163 /* ************* Class DynamicsFromMaskFunctional3D ************************ */ 00164 00166 template<typename T, template<typename U> class Descriptor> 00167 class DynamicsFromMaskFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,bool> { 00168 public: 00169 DynamicsFromMaskFunctional3D(Dynamics<T,Descriptor>* dynamics_, bool whichFlag_); 00170 DynamicsFromMaskFunctional3D(DynamicsFromMaskFunctional3D<T,Descriptor> const& rhs); 00171 DynamicsFromMaskFunctional3D<T,Descriptor>& operator= ( 00172 DynamicsFromMaskFunctional3D<T,Descriptor> const& rhs ); 00173 ~DynamicsFromMaskFunctional3D(); 00174 virtual void process ( 00175 Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00176 ScalarField3D<bool>& mask ); 00177 virtual BlockDomain::DomainT appliesTo() const; 00178 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00179 virtual DynamicsFromMaskFunctional3D<T,Descriptor>* clone() const; 00180 private: 00181 Dynamics<T,Descriptor>* dynamics; 00182 bool whichFlag; 00183 }; 00184 00185 00186 /* ************* Class DynamicsFromIntMaskFunctional3D ************************ */ 00187 00189 template<typename T, template<typename U> class Descriptor> 00190 class DynamicsFromIntMaskFunctional3D : public BoxProcessingFunctional3D_LS<T,Descriptor,int> { 00191 public: 00192 DynamicsFromIntMaskFunctional3D(Dynamics<T,Descriptor>* dynamics_, int whichFlag_); 00193 DynamicsFromIntMaskFunctional3D(DynamicsFromIntMaskFunctional3D<T,Descriptor> const& rhs); 00194 DynamicsFromIntMaskFunctional3D<T,Descriptor>& operator= ( 00195 DynamicsFromIntMaskFunctional3D<T,Descriptor> const& rhs ); 00196 ~DynamicsFromIntMaskFunctional3D(); 00197 virtual void process ( 00198 Box3D domain, BlockLattice3D<T,Descriptor>& lattice, 00199 ScalarField3D<int>& mask ); 00200 virtual BlockDomain::DomainT appliesTo() const; 00201 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00202 virtual DynamicsFromIntMaskFunctional3D<T,Descriptor>* clone() const; 00203 private: 00204 Dynamics<T,Descriptor>* dynamics; 00205 int whichFlag; 00206 }; 00207 00208 /* *************** Class RecomposeFromFlowVariablesFunctional3D ******************* */ 00209 00210 template<typename T, template<typename U> class Descriptor> 00211 class RecomposeFromFlowVariablesFunctional3D : public BoxProcessingFunctional3D 00212 { 00213 public: 00214 virtual void processGenericBlocks(Box3D domain, 00215 std::vector<AtomicBlock3D*> atomicBlocks); 00216 virtual RecomposeFromFlowVariablesFunctional3D<T,Descriptor>* clone() const; 00217 virtual BlockDomain::DomainT appliesTo() const; 00218 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00219 }; 00220 00221 00222 /* ************* Class AssignOmegaFunctional3D ******************* */ 00223 00224 template<typename T, template<typename U> class Descriptor> 00225 class AssignOmegaFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> 00226 { 00227 public: 00228 AssignOmegaFunctional3D(T omega); 00229 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00230 virtual AssignOmegaFunctional3D<T,Descriptor>* clone() const; 00231 virtual BlockDomain::DomainT appliesTo() const; 00232 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00233 private: 00234 T omega; 00235 }; 00236 00237 /* ************* Class SetConstBoundaryVelocityFunctional3D ******************* */ 00238 00239 template<typename T, template<typename U> class Descriptor> 00240 class SetConstBoundaryVelocityFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> 00241 { 00242 public: 00243 SetConstBoundaryVelocityFunctional3D(Array<T,Descriptor<T>::d> velocity); 00244 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00245 virtual SetConstBoundaryVelocityFunctional3D<T,Descriptor>* clone() const; 00246 virtual BlockDomain::DomainT appliesTo() const; 00247 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00248 private: 00249 Array<T,Descriptor<T>::d> u; 00250 }; 00251 00252 00253 /* ************* Class SetCustomBoundaryVelocityFunctional3D ******************* */ 00254 00255 template<typename T, template<typename U> class Descriptor, class VelocityFunction> 00256 class SetCustomBoundaryVelocityFunctional3D : public OneCellIndexedFunctional3D<T,Descriptor> 00257 { 00258 public: 00259 SetCustomBoundaryVelocityFunctional3D(VelocityFunction f_); 00260 virtual SetCustomBoundaryVelocityFunctional3D<T,Descriptor,VelocityFunction>* clone() const; 00261 virtual void execute(plint iX, plint iY, plint iZ, Cell<T,Descriptor>& cell) const; 00262 virtual void setscale(int dxScale, int dtScale); 00263 private: 00264 VelocityFunction f; 00265 T velocityScale; 00266 }; 00267 00268 00269 /* ************* Class SetConstBoundaryDensityFunctional3D ******************* */ 00270 00271 template<typename T, template<typename U> class Descriptor> 00272 class SetConstBoundaryDensityFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> 00273 { 00274 public: 00275 SetConstBoundaryDensityFunctional3D(T rho_); 00276 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00277 virtual SetConstBoundaryDensityFunctional3D<T,Descriptor>* clone() const; 00278 virtual BlockDomain::DomainT appliesTo() const; 00279 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00280 private: 00281 T rho; 00282 }; 00283 00284 00285 /* ************* Class SetCustomBoundaryDensityFunctional3D ******************* */ 00286 00287 template<typename T, template<typename U> class Descriptor, class DensityFunction> 00288 class SetCustomBoundaryDensityFunctional3D : public OneCellIndexedFunctional3D<T,Descriptor> 00289 { 00290 public: 00291 SetCustomBoundaryDensityFunctional3D(DensityFunction f_); 00292 virtual void execute(plint iX, plint iY, plint iZ, Cell<T,Descriptor>& cell) const; 00293 virtual SetCustomBoundaryDensityFunctional3D<T,Descriptor,DensityFunction>* clone() const; 00294 private: 00295 DensityFunction f; 00296 }; 00297 00298 00299 /* ************* Class IniConstEquilibriumFunctional3D ******************* */ 00300 00301 template<typename T, template<typename U> class Descriptor> 00302 class IniConstEquilibriumFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> 00303 { 00304 public: 00305 IniConstEquilibriumFunctional3D(T density_, Array<T,Descriptor<T>::d> velocity, T temperature); 00306 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00307 virtual IniConstEquilibriumFunctional3D<T,Descriptor>* clone() const; 00308 virtual BlockDomain::DomainT appliesTo() const; 00309 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00310 private: 00311 T rhoBar; 00312 Array<T,Descriptor<T>::d> j; 00313 T jSqr; 00314 T thetaBar; 00315 }; 00316 00317 00318 /* ************* Class IniCustomEquilibriumFunctional3D ******************* */ 00319 00320 template<typename T, template<typename U> class Descriptor, class RhoUFunction> 00321 class IniCustomEquilibriumFunctional3D : public OneCellIndexedFunctional3D<T,Descriptor> 00322 { 00323 public: 00324 IniCustomEquilibriumFunctional3D(RhoUFunction f_); 00325 virtual void execute(plint iX, plint iY, plint iZ, Cell<T,Descriptor>& cell) const; 00326 virtual IniCustomEquilibriumFunctional3D<T,Descriptor,RhoUFunction>* clone() const; 00327 virtual void setscale(int dxScale, int dtScale); 00328 private: 00329 RhoUFunction f; 00330 T velocityScale; 00331 }; 00332 00333 /* ************* Class IniCustomThermalEquilibriumFunctional3D ******************* */ 00334 00335 template<typename T, template<typename U> class Descriptor, class RhoVelTempFunction> 00336 class IniCustomThermalEquilibriumFunctional3D : public OneCellIndexedFunctional3D<T,Descriptor> 00337 { 00338 public: 00339 IniCustomThermalEquilibriumFunctional3D(RhoVelTempFunction f_); 00340 virtual void execute(plint iX, plint iY, plint iZ, Cell<T,Descriptor>& cell) const; 00341 virtual IniCustomThermalEquilibriumFunctional3D<T,Descriptor,RhoVelTempFunction>* clone() const; 00342 virtual void setscale(int dxScale, int dtScale); 00343 private: 00344 RhoVelTempFunction f; 00345 T velocityScale; 00346 }; 00347 00348 00349 /* ************* Class StripeOffDensityOffsetFunctional3D ******************* */ 00350 00351 template<typename T, template<typename U> class Descriptor> 00352 class StripeOffDensityOffsetFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> 00353 { 00354 public: 00355 StripeOffDensityOffsetFunctional3D(T deltaRho_); 00356 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00357 virtual StripeOffDensityOffsetFunctional3D<T,Descriptor>* clone() const; 00358 virtual BlockDomain::DomainT appliesTo() const; 00359 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00360 private: 00361 T deltaRho; 00362 }; 00363 00364 /* ************* Class InstantiateCompositeDynamicsFunctional3D ******************* */ 00365 00366 template<typename T, template<typename U> class Descriptor> 00367 class InstantiateCompositeDynamicsFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> { 00368 public: 00369 InstantiateCompositeDynamicsFunctional3D(CompositeDynamics<T,Descriptor>* compositeDynamics_); 00370 InstantiateCompositeDynamicsFunctional3D(InstantiateCompositeDynamicsFunctional3D<T,Descriptor> const& rhs); 00371 InstantiateCompositeDynamicsFunctional3D<T,Descriptor>& operator= ( 00372 InstantiateCompositeDynamicsFunctional3D<T,Descriptor> const& rhs ); 00373 ~InstantiateCompositeDynamicsFunctional3D(); 00374 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00375 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00376 virtual InstantiateCompositeDynamicsFunctional3D<T,Descriptor>* clone() const; 00377 private: 00378 CompositeDynamics<T,Descriptor>* compositeDynamics; 00379 }; 00380 00381 00382 00383 /* ************* Class SetExternalScalarFunctional3D ******************* */ 00384 00385 template<typename T, template<typename U> class Descriptor> 00386 class SetExternalScalarFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> { 00387 public: 00388 SetExternalScalarFunctional3D(int whichScalar_, T externalScalar_); 00389 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00390 virtual BlockDomain::DomainT appliesTo() const; 00391 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00392 virtual SetExternalScalarFunctional3D<T,Descriptor>* clone() const; 00393 private: 00394 int whichScalar; 00395 T externalScalar; 00396 }; 00397 00398 00399 /* ************* Class SetExternalVectorFunctional3D ******************* */ 00400 00401 template<typename T, template<typename U> class Descriptor> 00402 class SetExternalVectorFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> { 00403 public: 00404 SetExternalVectorFunctional3D ( 00405 int vectorStartsAt_, Array<T,Descriptor<T>::d> const& externalVector_ ); 00406 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice); 00407 virtual BlockDomain::DomainT appliesTo() const; 00408 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00409 virtual SetExternalVectorFunctional3D<T,Descriptor>* clone() const; 00410 private: 00411 int vectorStartsAt; 00412 Array<T,Descriptor<T>::d> externalVector; 00413 }; 00414 00415 /* ************* Class SetExternalVectorFromTensorFieldFunctional3D ******************* */ 00416 00417 template<typename T, template<typename U> class Descriptor, int nDim> 00418 class SetExternalVectorFromTensorFieldFunctional3D : public BoxProcessingFunctional3D_LT<T,Descriptor, T, nDim> { 00419 public: 00420 SetExternalVectorFromTensorFieldFunctional3D ( 00421 int vectorStartsAt_ ); 00422 virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice, TensorField3D<T,nDim>& tensor); 00423 virtual BlockDomain::DomainT appliesTo() const; 00424 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00425 virtual SetExternalVectorFromTensorFieldFunctional3D<T,Descriptor,nDim>* clone() const; 00426 private: 00427 int vectorStartsAt; 00428 }; 00429 00430 00431 /* ************* Class InterpolatePopulationsFunctional3D ******************* */ 00432 00433 template<typename T, template<typename U> class Descriptor> 00434 class InterpolatePopulationsFunctional3D : public BoxProcessingFunctional3D_LL<T,Descriptor, T,Descriptor> 00435 { 00436 public: 00437 InterpolatePopulationsFunctional3D(plint minIter_, plint maxIter_); 00438 virtual void process( Box3D domain, BlockLattice3D<T,Descriptor>& lattice1, 00439 BlockLattice3D<T,Descriptor>& lattice2 ); 00440 virtual BlockDomain::DomainT appliesTo() const; 00441 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00442 virtual InterpolatePopulationsFunctional3D<T,Descriptor>* clone() const; 00443 private: 00444 plint minIter, maxIter; 00445 }; 00446 00447 00448 /* *************** PART II ******************************************* */ 00449 /* *************** Initialization of scalar- and tensor-fields ******* */ 00450 /* ******************************************************************* */ 00451 00452 template<typename T> 00453 class IniConstScalarFunctional3D : public BoxProcessingFunctional3D_S<T> 00454 { 00455 public: 00456 IniConstScalarFunctional3D(T value_); 00457 virtual void process(Box3D domain, ScalarField3D<T>& field); 00458 virtual IniConstScalarFunctional3D<T>* clone() const; 00459 virtual BlockDomain::DomainT appliesTo() const; 00460 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00461 private: 00462 T value; 00463 }; 00464 00465 template<typename T> 00466 class MaskedIniConstScalarFunctional3D : public BoxProcessingFunctional3D_SS<T,int> 00467 { 00468 public: 00469 MaskedIniConstScalarFunctional3D(int flag_, T value_); 00470 virtual void process( Box3D domain, 00471 ScalarField3D<T>& field, ScalarField3D<int>& mask); 00472 virtual MaskedIniConstScalarFunctional3D<T>* clone() const; 00473 virtual BlockDomain::DomainT appliesTo() const; 00474 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00475 private: 00476 int flag; 00477 T value; 00478 }; 00479 00480 template<typename T, class Function> 00481 class SetToScalarFunctionFunctional3D : public BoxProcessingFunctional3D_S<T> 00482 { 00483 public: 00484 SetToScalarFunctionFunctional3D(Function f_); 00485 virtual void process(Box3D domain, ScalarField3D<T>& field); 00486 virtual SetToScalarFunctionFunctional3D<T,Function>* clone() const; 00487 virtual BlockDomain::DomainT appliesTo() const; 00488 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00489 private: 00490 Function f; 00491 }; 00492 00493 template<typename T, int nDim> 00494 class IniConstTensorFunctional3D : public BoxProcessingFunctional3D_T<T,nDim> 00495 { 00496 public: 00497 IniConstTensorFunctional3D(Array<T,nDim> const& value_); 00498 virtual void process(Box3D domain, TensorField3D<T,nDim>& field); 00499 virtual IniConstTensorFunctional3D<T,nDim>* clone() const; 00500 virtual BlockDomain::DomainT appliesTo() const; 00501 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00502 private: 00503 Array<T,nDim> value; 00504 }; 00505 00506 template<typename T, int nDim> 00507 class MaskedIniConstTensorFunctional3D : public BoxProcessingFunctional3D_ST<int,T,nDim> 00508 { 00509 public: 00510 MaskedIniConstTensorFunctional3D(int flag_, Array<T,nDim> const& value_); 00511 virtual void process( Box3D domain, 00512 ScalarField3D<int>& mask, TensorField3D<T,nDim>& field ); 00513 virtual MaskedIniConstTensorFunctional3D<T,nDim>* clone() const; 00514 virtual BlockDomain::DomainT appliesTo() const; 00515 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00516 private: 00517 int flag; 00518 Array<T,nDim> value; 00519 }; 00520 00521 template<typename T, int nDim, class Function> 00522 class SetToTensorFunctionFunctional3D : public BoxProcessingFunctional3D_T<T,nDim> 00523 { 00524 public: 00525 SetToTensorFunctionFunctional3D(Function f_); 00526 virtual void process(Box3D domain, TensorField3D<T,nDim>& field); 00527 virtual SetToTensorFunctionFunctional3D<T,nDim,Function>* clone() const; 00528 virtual BlockDomain::DomainT appliesTo() const; 00529 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00530 private: 00531 Function f; 00532 }; 00533 00534 00535 template<typename T> 00536 class SetToCoordinateFunctional3D : public BoxProcessingFunctional3D_S<T> 00537 { 00538 public: 00539 SetToCoordinateFunctional3D(plint index_); 00540 virtual void process(Box3D domain, ScalarField3D<T>& field); 00541 virtual SetToCoordinateFunctional3D<T>* clone() const; 00542 virtual BlockDomain::DomainT appliesTo() const; 00543 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00544 private: 00545 plint index; 00546 }; 00547 00548 template<typename T> 00549 class SetToCoordinatesFunctional3D : public BoxProcessingFunctional3D_T<T,3> 00550 { 00551 public: 00552 SetToCoordinatesFunctional3D(); 00553 virtual void process(Box3D domain, TensorField3D<T,3>& field); 00554 virtual SetToCoordinatesFunctional3D<T>* clone() const; 00555 virtual BlockDomain::DomainT appliesTo() const; 00556 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00557 }; 00558 00559 template<typename T, int nDim> 00560 class SetTensorComponentFunctional3D : public BoxProcessingFunctional3D_ST<T,T,nDim> 00561 { 00562 public: 00563 SetTensorComponentFunctional3D(int whichDim_); 00564 virtual void process(Box3D domain, ScalarField3D<T>& scalarField, 00565 TensorField3D<T,nDim>& tensorField); 00566 virtual SetTensorComponentFunctional3D<T,nDim>* clone() const; 00567 virtual BlockDomain::DomainT appliesTo() const; 00568 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const; 00569 private: 00570 int whichDim; 00571 }; 00572 00573 } // namespace plb 00574 00575 #endif // DATA_INITIALIZER_FUNCTIONAL_3D_H 00576 00577 // Explicitly include generic algorithms which are never precompiled (not even in precompiled version) 00578 #include "dataProcessors/dataInitializerGenerics3D.h"
1.6.3
1.6.3