$treeview $search $mathjax
Palabos  Version 1.1
$projectbrief
$projectbrief
$searchbox

dataInitializerFunctional3D.h

Go to the documentation of this file.
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"