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

dataInitializerFunctional2D.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_2D_H
00029 #define DATA_INITIALIZER_FUNCTIONAL_2D_H
00030 
00031 #include "core/globalDefs.h"
00032 #include "atomicBlock/dataProcessingFunctional2D.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 OneCellFunctional2D {
00043     virtual ~OneCellFunctional2D();
00044     virtual OneCellFunctional2D<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 OneCellIndexedFunctional2D {
00053     virtual ~OneCellIndexedFunctional2D();
00054     virtual OneCellIndexedFunctional2D<T,Descriptor>* clone() const =0;
00055     virtual void execute(plint iX, plint iY, 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 DomainFunctional2D {
00062     virtual ~DomainFunctional2D() { }
00063     virtual bool operator() (plint iX, plint iY) const =0;
00064     virtual DomainFunctional2D* clone() const =0;
00065 };
00066 
00067 template<typename T, template<class U> class Descriptor>
00068 class GenericLatticeFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor>
00069 {
00070 public:
00071     GenericLatticeFunctional2D(OneCellFunctional2D<T,Descriptor>* f_);
00072     GenericLatticeFunctional2D(GenericLatticeFunctional2D<T,Descriptor> const& rhs);
00073     ~GenericLatticeFunctional2D();
00074     GenericLatticeFunctional2D<T,Descriptor>& operator=(GenericLatticeFunctional2D<T,Descriptor> const& rhs);
00075     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00076     virtual GenericLatticeFunctional2D<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     OneCellFunctional2D<T,Descriptor>* f;
00082 };
00083 
00084 template<typename T, template<class U> class Descriptor>
00085 class GenericIndexedLatticeFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor>
00086 {
00087 public:
00088     GenericIndexedLatticeFunctional2D(OneCellIndexedFunctional2D<T,Descriptor>* f_);
00089     GenericIndexedLatticeFunctional2D(GenericIndexedLatticeFunctional2D<T,Descriptor> const& rhs);
00090     ~GenericIndexedLatticeFunctional2D();
00091     GenericIndexedLatticeFunctional2D<T,Descriptor>& operator=(GenericIndexedLatticeFunctional2D<T,Descriptor> const& rhs);
00092     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00093     virtual GenericIndexedLatticeFunctional2D<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     OneCellIndexedFunctional2D<T,Descriptor>* f;
00099 };
00100 
00101 
00102 /* *************** Class InstantiateDynamicsFunctional2D ************* */
00103 
00104 template<typename T, template<typename U> class Descriptor>
00105 class InstantiateDynamicsFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor> {
00106 public:
00107     InstantiateDynamicsFunctional2D(Dynamics<T,Descriptor>* dynamics_);
00108     InstantiateDynamicsFunctional2D(InstantiateDynamicsFunctional2D<T,Descriptor> const& rhs);
00109     InstantiateDynamicsFunctional2D<T,Descriptor>& operator= (
00110             InstantiateDynamicsFunctional2D<T,Descriptor> const& rhs );
00111     ~InstantiateDynamicsFunctional2D();
00112     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00113     virtual BlockDomain::DomainT appliesTo() const;
00114     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00115     virtual InstantiateDynamicsFunctional2D<T,Descriptor>* clone() const ;
00116 private:
00117     Dynamics<T,Descriptor>* dynamics;
00118 };
00119 
00120 /* ************* Class InstantiateComplexDomainDynamicsFunctional2D ** */
00121 
00122 template<typename T, template<typename U> class Descriptor>
00123 class InstantiateComplexDomainDynamicsFunctional2D
00124     : public BoxProcessingFunctional2D_L<T,Descriptor>
00125 {
00126 public:
00127     InstantiateComplexDomainDynamicsFunctional2D( Dynamics<T,Descriptor>* dynamics_,
00128                                                   DomainFunctional2D* domain_ );
00129     InstantiateComplexDomainDynamicsFunctional2D (
00130             InstantiateComplexDomainDynamicsFunctional2D<T,Descriptor> const& rhs );
00131     InstantiateComplexDomainDynamicsFunctional2D<T,Descriptor>& operator= (
00132             InstantiateComplexDomainDynamicsFunctional2D<T,Descriptor> const& rhs );
00133     ~InstantiateComplexDomainDynamicsFunctional2D();
00134     virtual void process(Box2D boundingBox, BlockLattice2D<T,Descriptor>& lattice);
00135     virtual BlockDomain::DomainT appliesTo() const;
00136     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00137     virtual InstantiateComplexDomainDynamicsFunctional2D<T,Descriptor>* clone() const;
00138 private:
00139     Dynamics<T,Descriptor>* dynamics;
00140     DomainFunctional2D* domain;
00141 };
00142 
00143 
00144 /* ************* Class InstantiateDotDynamicsFunctional2D ******************* */
00145 
00146 template<typename T, template<typename U> class Descriptor>
00147 class InstantiateDotDynamicsFunctional2D : public DotProcessingFunctional2D_L<T,Descriptor> {
00148 public:
00149     InstantiateDotDynamicsFunctional2D(Dynamics<T,Descriptor>* dynamics_);
00150     InstantiateDotDynamicsFunctional2D(InstantiateDotDynamicsFunctional2D<T,Descriptor> const& rhs);
00151     InstantiateDotDynamicsFunctional2D<T,Descriptor>& operator= (
00152             InstantiateDotDynamicsFunctional2D<T,Descriptor> const& rhs );
00153     ~InstantiateDotDynamicsFunctional2D();
00154     virtual void process(DotList2D const& dotList, BlockLattice2D<T,Descriptor>& lattice);
00155     virtual BlockDomain::DomainT appliesTo() const;
00156     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00157     virtual InstantiateDotDynamicsFunctional2D<T,Descriptor>* clone() const;
00158 private:
00159     Dynamics<T,Descriptor>* dynamics;
00160 };
00161 
00162 
00163 /* ************* Class DynamicsFromMaskFunctional2D ************************ */
00164 
00166 template<typename T, template<typename U> class Descriptor>
00167 class DynamicsFromMaskFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,bool> {
00168 public:
00169     DynamicsFromMaskFunctional2D(Dynamics<T,Descriptor>* dynamics_, bool whichFlag_);
00170     DynamicsFromMaskFunctional2D(DynamicsFromMaskFunctional2D<T,Descriptor> const& rhs);
00171     DynamicsFromMaskFunctional2D<T,Descriptor>& operator= (
00172             DynamicsFromMaskFunctional2D<T,Descriptor> const& rhs );
00173     ~DynamicsFromMaskFunctional2D();
00174     virtual void process (
00175             Box2D domain, BlockLattice2D<T,Descriptor>& lattice,
00176                           ScalarField2D<bool>& mask );
00177     virtual BlockDomain::DomainT appliesTo() const;
00178     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00179     virtual DynamicsFromMaskFunctional2D<T,Descriptor>* clone() const;
00180 private:
00181     Dynamics<T,Descriptor>* dynamics;
00182     bool whichFlag;
00183 };
00184 
00185 
00186 /* ************* Class DynamicsFromIntMaskFunctional2D ************************ */
00187 
00189 template<typename T, template<typename U> class Descriptor>
00190 class DynamicsFromIntMaskFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,int> {
00191 public:
00192     DynamicsFromIntMaskFunctional2D(Dynamics<T,Descriptor>* dynamics_, int whichFlag_);
00193     DynamicsFromIntMaskFunctional2D(DynamicsFromIntMaskFunctional2D<T,Descriptor> const& rhs);
00194     DynamicsFromIntMaskFunctional2D<T,Descriptor>& operator= (
00195             DynamicsFromIntMaskFunctional2D<T,Descriptor> const& rhs );
00196     ~DynamicsFromIntMaskFunctional2D();
00197     virtual void process (
00198             Box2D domain, BlockLattice2D<T,Descriptor>& lattice,
00199                           ScalarField2D<int>& mask );
00200     virtual BlockDomain::DomainT appliesTo() const;
00201     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00202     virtual DynamicsFromIntMaskFunctional2D<T,Descriptor>* clone() const;
00203 private:
00204     Dynamics<T,Descriptor>* dynamics;
00205     int whichFlag;
00206 };
00207 
00208 /* *************** Class RecomposeFromFlowVariablesFunctional2D ******************* */
00209 
00210 template<typename T, template<typename U> class Descriptor>
00211 class RecomposeFromFlowVariablesFunctional2D : public BoxProcessingFunctional2D
00212 {
00213 public:
00214     virtual void processGenericBlocks(Box2D domain,
00215                                       std::vector<AtomicBlock2D*> atomicBlocks);
00216     virtual RecomposeFromFlowVariablesFunctional2D<T,Descriptor>* clone() const;
00217     virtual BlockDomain::DomainT appliesTo() const;
00218     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00219 };
00220 
00221 /* ************* Class AssignOmegaFunctional2D ******************* */
00222 
00223 template<typename T, template<typename U> class Descriptor>
00224 class AssignOmegaFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor>
00225 {
00226 public:
00227     AssignOmegaFunctional2D(T omega);
00228     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00229     virtual AssignOmegaFunctional2D<T,Descriptor>* clone() const;
00230     virtual BlockDomain::DomainT appliesTo() const;
00231     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00232 private:
00233     T omega;
00234 };
00235 
00236 /* ************* Class SetConstBoundaryVelocityFunctional2D ******************* */
00237 
00238 template<typename T, template<typename U> class Descriptor>
00239 class SetConstBoundaryVelocityFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor>
00240 {
00241 public:
00242     SetConstBoundaryVelocityFunctional2D(Array<T,Descriptor<T>::d> velocity);
00243     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00244     virtual SetConstBoundaryVelocityFunctional2D<T,Descriptor>* clone() const;
00245     virtual BlockDomain::DomainT appliesTo() const;
00246     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00247 private:
00248     Array<T,Descriptor<T>::d> u;
00249 };
00250 
00251 
00252 /* ************* Class SetCustomBoundaryVelocityFunctional2D ******************* */
00253 
00254 template<typename T, template<typename U> class Descriptor, class VelocityFunction>
00255 class SetCustomBoundaryVelocityFunctional2D : public OneCellIndexedFunctional2D<T,Descriptor>
00256 {
00257 public:
00258     SetCustomBoundaryVelocityFunctional2D(VelocityFunction f_);
00259     virtual SetCustomBoundaryVelocityFunctional2D<T,Descriptor,VelocityFunction>* clone() const;
00260     virtual void execute(plint iX, plint iY, Cell<T,Descriptor>& cell) const;
00261     virtual void setscale(int dxScale, int dtScale);
00262 private:
00263     VelocityFunction f;
00264     T velocityScale;
00265 };
00266 
00267 
00268 /* ************* Class SetConstBoundaryDensityFunctional2D ******************* */
00269 
00270 template<typename T, template<typename U> class Descriptor>
00271 class SetConstBoundaryDensityFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor>
00272 {
00273 public:
00274     SetConstBoundaryDensityFunctional2D(T rho_);
00275     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00276     virtual SetConstBoundaryDensityFunctional2D<T,Descriptor>* clone() const;
00277     virtual BlockDomain::DomainT appliesTo() const;
00278     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00279 private:
00280     T rho;
00281 };
00282 
00283 /* ************* Class SetConstBoundaryTemperatureFunctional2D ******************* */
00284 
00285 template<typename T, template<typename U> class Descriptor>
00286 class SetConstBoundaryTemperatureFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor>
00287 {
00288 public:
00289     SetConstBoundaryTemperatureFunctional2D(T temperature_);
00290     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00291     virtual SetConstBoundaryTemperatureFunctional2D<T,Descriptor>* clone() const;
00292     virtual BlockDomain::DomainT appliesTo() const;
00293     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00294 private:
00295     T temperature;
00296 };
00297 
00298 /* ************* Class SetCustomBoundaryDensityFunctional2D ******************* */
00299 
00300 template<typename T, template<typename U> class Descriptor, class DensityFunction>
00301 class SetCustomBoundaryDensityFunctional2D : public OneCellIndexedFunctional2D<T,Descriptor>
00302 {
00303 public:
00304     SetCustomBoundaryDensityFunctional2D(DensityFunction f_);
00305     virtual void execute(plint iX, plint iY, Cell<T,Descriptor>& cell) const;
00306     virtual SetCustomBoundaryDensityFunctional2D<T,Descriptor,DensityFunction>* clone() const;
00307 private:
00308     DensityFunction f;
00309 };
00310 
00311 /* ************* Class SetCustomBoundaryTemperatureFunctional2D ******************* */
00312 
00313 template<typename T, template<typename U> class Descriptor, class TemperatureFunction>
00314 class SetCustomBoundaryTemperatureFunctional2D : public OneCellIndexedFunctional2D<T,Descriptor>
00315 {
00316 public:
00317     SetCustomBoundaryTemperatureFunctional2D(TemperatureFunction f_);
00318     virtual void execute(plint iX, plint iY, Cell<T,Descriptor>& cell) const;
00319     virtual SetCustomBoundaryTemperatureFunctional2D<T,Descriptor,TemperatureFunction>* clone() const;
00320 private:
00321     TemperatureFunction f;
00322 };
00323 
00324 
00325 /* ************* Class IniConstEquilibriumFunctional2D ******************* */
00326 
00327 template<typename T, template<typename U> class Descriptor>
00328 class IniConstEquilibriumFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor>
00329 {
00330 public:
00331     IniConstEquilibriumFunctional2D(T density_, Array<T,Descriptor<T>::d> velocity, T temperature);
00332     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00333     virtual IniConstEquilibriumFunctional2D<T,Descriptor>* clone() const;
00334     virtual BlockDomain::DomainT appliesTo() const;
00335     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00336 private:
00337     T rhoBar;
00338     Array<T,Descriptor<T>::d> j;
00339     T jSqr;
00340     T thetaBar;
00341 };
00342 
00343 
00344 /* ************* Class IniCustomEquilibriumFunctional2D ******************* */
00345 
00346 template<typename T, template<typename U> class Descriptor, class RhoUFunction>
00347 class IniCustomEquilibriumFunctional2D : public OneCellIndexedFunctional2D<T,Descriptor>
00348 {
00349 public:
00350     IniCustomEquilibriumFunctional2D(RhoUFunction f_);
00351     virtual void execute(plint iX, plint iY, Cell<T,Descriptor>& cell) const;
00352     virtual IniCustomEquilibriumFunctional2D<T,Descriptor,RhoUFunction>* clone() const;
00353     virtual void setscale(int dxScale, int dtScale);
00354 private:
00355     RhoUFunction f;
00356     T velocityScale;
00357 };
00358 
00359 /* ************* Class IniCustomThermalEquilibriumFunctional2D ******************* */
00360 
00361 template<typename T, template<typename U> class Descriptor, class RhoVelThetaFunction>
00362 class IniCustomThermalEquilibriumFunctional2D : public OneCellIndexedFunctional2D<T,Descriptor>
00363 {
00364 public:
00365     IniCustomThermalEquilibriumFunctional2D(RhoVelThetaFunction f_);
00366     virtual void execute(plint iX, plint iY, Cell<T,Descriptor>& cell) const;
00367     virtual IniCustomThermalEquilibriumFunctional2D<T,Descriptor,RhoVelThetaFunction>* clone() const;
00368     virtual void setscale(int dxScale, int dtScale);
00369 private:
00370     RhoVelThetaFunction f;
00371     T velocityScale;
00372 };
00373 
00374 
00375 /* ************* Class StripeOffDensityOffsetFunctional2D ******************* */
00376 
00377 template<typename T, template<typename U> class Descriptor>
00378 class StripeOffDensityOffsetFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor>
00379 {
00380 public:
00381     StripeOffDensityOffsetFunctional2D(T deltaRho_);
00382     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00383     virtual StripeOffDensityOffsetFunctional2D<T,Descriptor>* clone() const;
00384     virtual BlockDomain::DomainT appliesTo() const;
00385     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00386 private:
00387     T deltaRho;
00388 };
00389 
00390 /* ************* Class InstantiateCompositeDynamicsFunctional2D ******************* */
00391 
00392 template<typename T, template<typename U> class Descriptor>
00393 class InstantiateCompositeDynamicsFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor> {
00394 public:
00395     InstantiateCompositeDynamicsFunctional2D(CompositeDynamics<T,Descriptor>* compositeDynamics_);
00396     InstantiateCompositeDynamicsFunctional2D(InstantiateCompositeDynamicsFunctional2D<T,Descriptor> const& rhs);
00397     InstantiateCompositeDynamicsFunctional2D<T,Descriptor>& operator= (
00398             InstantiateCompositeDynamicsFunctional2D<T,Descriptor> const& rhs );
00399     ~InstantiateCompositeDynamicsFunctional2D();
00400     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00401     virtual BlockDomain::DomainT appliesTo() const;
00402     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00403     virtual InstantiateCompositeDynamicsFunctional2D<T,Descriptor>* clone() const;
00404 private:
00405     CompositeDynamics<T,Descriptor>* compositeDynamics;
00406 };
00407 
00408 
00409 /* ************* Class SetExternalScalarFunctional2D ******************* */
00410 
00411 template<typename T, template<typename U> class Descriptor>
00412 class SetExternalScalarFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor> {
00413 public:
00414     SetExternalScalarFunctional2D(int whichScalar_, T externalScalar_);
00415     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00416     virtual BlockDomain::DomainT appliesTo() const;
00417     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00418     virtual SetExternalScalarFunctional2D<T,Descriptor>* clone() const;
00419 private:
00420     int whichScalar;
00421     T externalScalar;
00422 };
00423 
00424 /* ************* Class SetExternalScalarFunctional2D ******************* */
00425 
00426 template<typename T, template<typename U> class Descriptor>
00427 class SetExternalScalarFromScalarFieldFunctional2D : public BoxProcessingFunctional2D_LS<T,Descriptor,T> {
00428 public:
00429     SetExternalScalarFromScalarFieldFunctional2D(int whichScalar_);
00430     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, ScalarField2D<T> &field);
00431     virtual BlockDomain::DomainT appliesTo() const;
00432     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00433     virtual SetExternalScalarFromScalarFieldFunctional2D<T,Descriptor>* clone() const;
00434 private:
00435     int whichScalar;
00436 };
00437 
00438 
00439 /* ************* Class SetExternalVectorFunctional2D ******************* */
00440 
00441 template<typename T, template<typename U> class Descriptor>
00442 class SetExternalVectorFunctional2D : public BoxProcessingFunctional2D_L<T,Descriptor> {
00443 public:
00444     SetExternalVectorFunctional2D (
00445             int vectorStartsAt_, Array<T,Descriptor<T>::d> const& externalVector_ );
00446     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice);
00447     virtual BlockDomain::DomainT appliesTo() const;
00448     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00449     virtual SetExternalVectorFunctional2D<T,Descriptor>* clone() const;
00450 private:
00451     int vectorStartsAt;
00452     Array<T,Descriptor<T>::d> externalVector;
00453 };
00454 
00455 /* ************* Class SetExternalVectorFromTensorFieldFunctional2D ******************* */
00456 
00457 template<typename T, template<typename U> class Descriptor, int nDim>
00458 class SetExternalVectorFromTensorFieldFunctional2D : public BoxProcessingFunctional2D_LT<T,Descriptor, T, nDim> {
00459 public:
00460     SetExternalVectorFromTensorFieldFunctional2D (
00461             int vectorStartsAt_ );
00462     virtual void process(Box2D domain, BlockLattice2D<T,Descriptor>& lattice, TensorField2D<T,nDim>& tensor);
00463     virtual BlockDomain::DomainT appliesTo() const;
00464     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00465     virtual SetExternalVectorFromTensorFieldFunctional2D<T,Descriptor,nDim>* clone() const;
00466 private:
00467     int vectorStartsAt;
00468 };
00469 
00470 
00471 /* *************** PART II ******************************************* */
00472 /* *************** Initialization of scalar- and tensor-fields ******* */
00473 /* ******************************************************************* */
00474 
00475 template<typename T>
00476 class IniConstScalarFunctional2D : public BoxProcessingFunctional2D_S<T>
00477 {
00478 public:
00479     IniConstScalarFunctional2D(T value_);
00480     virtual void process(Box2D domain, ScalarField2D<T>& field);
00481     virtual IniConstScalarFunctional2D<T>* clone() const;
00482     virtual BlockDomain::DomainT appliesTo() const;
00483     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00484 private:
00485     T value;
00486 };
00487 
00488 template<typename T>
00489 class MaskedIniConstScalarFunctional2D : public BoxProcessingFunctional2D_SS<T,int>
00490 {
00491 public:
00492     MaskedIniConstScalarFunctional2D(int flag_, T value_);
00493     virtual void process( Box2D domain, ScalarField2D<T>& field,
00494                                         ScalarField2D<int>& mask );
00495     virtual MaskedIniConstScalarFunctional2D<T>* clone() const;
00496     virtual BlockDomain::DomainT appliesTo() const;
00497     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00498 private:
00499     int flag;
00500     T value;
00501 };
00502 
00503 template<typename T, class Function>
00504 class SetToScalarFunctionFunctional2D : public BoxProcessingFunctional2D_S<T>
00505 {
00506 public:
00507     SetToScalarFunctionFunctional2D(Function f_);
00508     virtual void process(Box2D domain, ScalarField2D<T>& field);
00509     virtual SetToScalarFunctionFunctional2D<T,Function>* clone() const;
00510     virtual BlockDomain::DomainT appliesTo() const;
00511     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00512 private:
00513     Function f;
00514 };
00515 
00516 template<typename T, int nDim>
00517 class IniConstTensorFunctional2D : public BoxProcessingFunctional2D_T<T,nDim>
00518 {
00519 public:
00520     IniConstTensorFunctional2D(Array<T,nDim> const& value_);
00521     virtual void process(Box2D domain, TensorField2D<T,nDim>& field);
00522     virtual IniConstTensorFunctional2D<T,nDim>* clone() const;
00523     virtual BlockDomain::DomainT appliesTo() const;
00524     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00525 private:
00526     Array<T,nDim> value;
00527 };
00528 
00529 template<typename T, int nDim>
00530 class MaskedIniConstTensorFunctional2D : public BoxProcessingFunctional2D_ST<int,T,nDim>
00531 {
00532 public:
00533     MaskedIniConstTensorFunctional2D(int flag_, Array<T,nDim> const& value_);
00534     virtual void process( Box2D domain,
00535                           ScalarField2D<int>& mask,
00536                           TensorField2D<T,nDim>& field );
00537     virtual MaskedIniConstTensorFunctional2D<T,nDim>* clone() const;
00538     virtual BlockDomain::DomainT appliesTo() const;
00539     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00540 private:
00541     int flag;
00542     Array<T,nDim> value;
00543 };
00544 
00545 template<typename T, int nDim, class Function>
00546 class SetToTensorFunctionFunctional2D : public BoxProcessingFunctional2D_T<T,nDim>
00547 {
00548 public:
00549     SetToTensorFunctionFunctional2D(Function f_);
00550     virtual void process(Box2D domain, TensorField2D<T,nDim>& field);
00551     virtual SetToTensorFunctionFunctional2D<T,nDim,Function>* clone() const;
00552     virtual BlockDomain::DomainT appliesTo() const;
00553     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00554 private:
00555     Function f;
00556 };
00557 
00558 template<typename T>
00559 class SetToCoordinateFunctional2D : public BoxProcessingFunctional2D_S<T>
00560 {
00561 public:
00562     SetToCoordinateFunctional2D(plint index_);
00563     virtual void process(Box2D domain, ScalarField2D<T>& field);
00564     virtual SetToCoordinateFunctional2D<T>* clone() const;
00565     virtual BlockDomain::DomainT appliesTo() const;
00566     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00567 private:
00568     plint index;
00569 };
00570 
00571 template<typename T>
00572 class SetToCoordinatesFunctional2D : public BoxProcessingFunctional2D_T<T,2>
00573 {
00574 public:
00575     SetToCoordinatesFunctional2D();
00576     virtual void process(Box2D domain, TensorField2D<T,2>& field);
00577     virtual SetToCoordinatesFunctional2D<T>* clone() const;
00578     virtual BlockDomain::DomainT appliesTo() const;
00579     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00580 };
00581 
00582 template<typename T, int nDim>
00583 class SetTensorComponentFunctional2D : public BoxProcessingFunctional2D_ST<T,T,nDim>
00584 {
00585 public:
00586     SetTensorComponentFunctional2D(int whichDim_);
00587     virtual void process(Box2D domain, ScalarField2D<T>& scalarField,
00588                                        TensorField2D<T,nDim>& tensorField);
00589     virtual SetTensorComponentFunctional2D<T,nDim>* clone() const;
00590     virtual BlockDomain::DomainT appliesTo() const;
00591     virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
00592 private:
00593     int whichDim;
00594 };
00595 
00596 }  // namespace plb
00597 
00598 #endif  // DATA_INITIALIZER_FUNCTIONAL_2D_H
00599 
00600 // Explicitly include generic algorithms which are never precompiled (not even in precompiled version)
00601 #include "dataProcessors/dataInitializerGenerics2D.h"