$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 00025 /* Orestis Malaspinas designed some of the classes and concepts contained 00026 * in this file. */ 00027 00028 #ifndef SMAGORINSKY_DYNAMICS_H 00029 #define SMAGORINSKY_DYNAMICS_H 00030 00031 #include "core/globalDefs.h" 00032 #include "core/hierarchicSerializer.h" 00033 #include "basicDynamics/isoThermalDynamics.h" 00034 #include "basicDynamics/externalForceDynamics.h" 00035 #include "complexDynamics/variableOmegaDynamics.h" 00036 00037 namespace plb { 00038 00039 template<typename T, template<typename U> class Descriptor> 00040 class SmagorinskyDynamics : public OmegaFromPiDynamics<T,Descriptor> { 00041 public: 00042 SmagorinskyDynamics(Dynamics<T,Descriptor>* baseDynamics_, T omega0_, T cSmago_, 00043 bool automaticPrepareCollision=true); 00044 SmagorinskyDynamics(HierarchicUnserializer& unserializer); 00046 SmagorinskyDynamics<T,Descriptor>* clone() const; 00048 virtual int getId() const; 00050 virtual void serialize(HierarchicSerializer& serializer) const; 00052 virtual void unserialize(HierarchicUnserializer& unserializer); 00054 virtual T getOmegaFromPiAndRhoBar(Array<T,SymmetricTensor<T,Descriptor>::n> const& PiNeq, T rhoBar) const; 00057 virtual void setOmega(T omega_); 00059 virtual T getOmega() const; 00060 private: 00061 T omega0; //< "Laminar" relaxation parameter, used when the strain-rate is zero. 00062 T cSmago; //< Smagorinsky constant. 00063 T preFactor; //< A factor depending on the Smagorinky constant, used to compute the effective viscosity. 00064 static int id; 00065 }; 00066 00067 template<typename T, template<typename U> class Descriptor> 00068 class SmagorinskyBGKdynamics : public IsoThermalBulkDynamics<T,Descriptor> { 00069 public: 00070 /* *************** Construction / Destruction ************************ */ 00071 SmagorinskyBGKdynamics(T omega0_, T cSmago_); 00072 SmagorinskyBGKdynamics(HierarchicUnserializer& unserializer); 00074 virtual SmagorinskyBGKdynamics<T,Descriptor>* clone() const; 00076 virtual int getId() const; 00078 virtual void serialize(HierarchicSerializer& serializer) const; 00080 virtual void unserialize(HierarchicUnserializer& unserializer); 00082 virtual void collide(Cell<T,Descriptor>& cell, 00083 BlockStatistics& statistics_); 00085 virtual T computeEquilibrium(plint iPop, T rhoBar, Array<T,Descriptor<T>::d> const& j, 00086 T jSqr, T thetaBar=T()) const; 00089 virtual void setOmega(T omega_); 00091 virtual T getOmega() const; 00092 private: 00093 T omega0; //< "Laminar" relaxation parameter, used when the strain-rate is zero. 00094 T cSmago; //< Smagorinsky constant. 00095 T preFactor; //< A factor depending on the Smagorinky constant, used to compute the effective viscosity. 00096 static int id; 00097 }; 00098 00099 template<typename T, template<typename U> class Descriptor> 00100 class GuoExternalForceSmagorinskyBGKdynamics : public IsoThermalBulkDynamics<T,Descriptor> { 00101 public: 00102 /* *************** Construction / Destruction ************************ */ 00103 GuoExternalForceSmagorinskyBGKdynamics(T omega0_, T cSmago_); 00104 GuoExternalForceSmagorinskyBGKdynamics(HierarchicUnserializer& unserializer); 00106 virtual GuoExternalForceSmagorinskyBGKdynamics<T,Descriptor>* clone() const; 00108 virtual int getId() const; 00110 virtual void serialize(HierarchicSerializer& serializer) const; 00112 virtual void unserialize(HierarchicUnserializer& unserializer); 00114 virtual void collide(Cell<T,Descriptor>& cell, 00115 BlockStatistics& statistics_); 00117 virtual void computeVelocity (Cell<T,Descriptor> const& cell, 00118 Array<T,Descriptor<T>::d>& u ) const; 00120 virtual T computeEquilibrium(plint iPop, T rhoBar, Array<T,Descriptor<T>::d> const& j, 00121 T jSqr, T thetaBar=T()) const; 00124 virtual void setOmega(T omega_); 00126 virtual T getOmega() const; 00127 private: 00128 T omega0; //< "Laminar" relaxation parameter, used when the strain-rate is zero. 00129 T cSmago; //< Smagorinsky constant. 00130 static int id; 00131 }; 00132 00133 template<typename T, template<typename U> class Descriptor> 00134 class IncGuoExternalForceSmagorinskyBGKdynamics : public IsoThermalBulkDynamics<T,Descriptor> { 00135 public: 00136 /* *************** Construction / Destruction ************************ */ 00137 IncGuoExternalForceSmagorinskyBGKdynamics(T omega0_, T cSmago_); 00138 IncGuoExternalForceSmagorinskyBGKdynamics(HierarchicUnserializer& unserializer); 00140 virtual IncGuoExternalForceSmagorinskyBGKdynamics<T,Descriptor>* clone() const; 00142 virtual int getId() const; 00144 virtual void serialize(HierarchicSerializer& serializer) const; 00146 virtual void unserialize(HierarchicUnserializer& unserializer); 00148 virtual void collide(Cell<T,Descriptor>& cell, 00149 BlockStatistics& statistics_); 00151 virtual void computeVelocity (Cell<T,Descriptor> const& cell, 00152 Array<T,Descriptor<T>::d>& u ) const; 00154 virtual T computeEquilibrium(plint iPop, T rhoBar, Array<T,Descriptor<T>::d> const& j, 00155 T jSqr, T thetaBar=T()) const; 00158 virtual void setOmega(T omega_); 00160 virtual T getOmega() const; 00162 virtual bool velIsJ() const; 00163 private: 00164 T omega0; //< "Laminar" relaxation parameter, used when the strain-rate is zero. 00165 T cSmago; //< Smagorinsky constant. 00166 static int id; 00167 }; 00168 00169 template<typename T, template<typename U> class Descriptor> 00170 class SmagorinskyRegularizedDynamics : public IsoThermalBulkDynamics<T,Descriptor> { 00171 public: 00172 SmagorinskyRegularizedDynamics(T omega0_, T cSmago_); 00173 00175 virtual SmagorinskyRegularizedDynamics<T,Descriptor>* clone() const; 00177 virtual int getId() const; 00179 virtual void serialize(HierarchicSerializer& serializer) const; 00181 virtual void unserialize(HierarchicUnserializer& unserializer); 00183 virtual void collide(Cell<T,Descriptor>& cell, 00184 BlockStatistics& statistics_); 00186 virtual T computeEquilibrium(plint iPop, T rhoBar, Array<T,Descriptor<T>::d> const& j, 00187 T jSqr, T thetaBar=T()) const; 00190 virtual void setOmega(T omega_); 00192 virtual T getOmega() const; 00193 private: 00194 T omega0; //< "Laminar" relaxation parameter, used when the strain-rate is zero. 00195 T cSmago; //< Smagorinsky constant. 00196 T preFactor; //< A factor depending on the Smagorinky constant, used to compute the effective viscosity. 00197 static int id; 00198 }; 00199 00200 } // namespace plb 00201 00202 #endif // SMAGORINSKY_DYNAMICS_H
1.6.3
1.6.3