$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_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"
1.6.3
1.6.3