Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 #ifndef porousZone_H
00064 #define porousZone_H
00065
00066 #include <OpenFOAM/dictionary.H>
00067 #include <meshTools/coordinateSystem.H>
00068 #include <meshTools/coordinateSystems.H>
00069 #include <OpenFOAM/wordList.H>
00070 #include <OpenFOAM/labelList.H>
00071 #include <OpenFOAM/dimensionedScalar.H>
00072 #include <OpenFOAM/dimensionedTensor.H>
00073 #include <OpenFOAM/primitiveFieldsFwd.H>
00074 #include <finiteVolume/volFieldsFwd.H>
00075 #include <finiteVolume/fvMatricesFwd.H>
00076
00077 #include <finiteVolume/fvMesh.H>
00078
00079
00080
00081 namespace Foam
00082 {
00083
00084 class fvMesh;
00085
00086
00087
00088
00089
00090 class porousZone
00091 {
00092
00093
00094
00095 word name_;
00096
00097
00098 const fvMesh& mesh_;
00099
00100
00101 dictionary dict_;
00102
00103
00104 label cellZoneID_;
00105
00106
00107 coordinateSystem coordSys_;
00108
00109
00110
00111
00112 scalar porosity_;
00113
00114
00115 scalar C0_;
00116
00117
00118 scalar C1_;
00119
00120
00121 dimensionedTensor D_;
00122
00123
00124 dimensionedTensor F_;
00125
00126
00127
00128
00129
00130 static void adjustNegativeResistance(dimensionedVector& resist);
00131
00132
00133 template<class RhoFieldType>
00134 void addPowerLawResistance
00135 (
00136 scalarField& Udiag,
00137 const labelList& cells,
00138 const scalarField& V,
00139 const RhoFieldType& rho,
00140 const vectorField& U
00141 ) const;
00142
00143
00144 template<class RhoFieldType>
00145 void addViscousInertialResistance
00146 (
00147 scalarField& Udiag,
00148 vectorField& Usource,
00149 const labelList& cells,
00150 const scalarField& V,
00151 const RhoFieldType& rho,
00152 const scalarField& mu,
00153 const vectorField& U
00154 ) const;
00155
00156
00157
00158 template<class RhoFieldType>
00159 void addPowerLawResistance
00160 (
00161 tensorField& AU,
00162 const labelList& cells,
00163 const RhoFieldType& rho,
00164 const vectorField& U
00165 ) const;
00166
00167
00168 template<class RhoFieldType>
00169 void addViscousInertialResistance
00170 (
00171 tensorField& AU,
00172 const labelList& cells,
00173 const RhoFieldType& rho,
00174 const scalarField& mu,
00175 const vectorField& U
00176 ) const;
00177
00178
00179
00180 porousZone(const porousZone&);
00181
00182
00183 void operator=(const porousZone&);
00184
00185
00186 public:
00187
00188
00189
00190
00191 porousZone(const word& name, const fvMesh&, const dictionary&);
00192
00193
00194 autoPtr<porousZone> clone() const
00195 {
00196 notImplemented("autoPtr<porousZone> clone() const");
00197 return autoPtr<porousZone>(NULL);
00198 }
00199
00200
00201 class iNew
00202 {
00203
00204 const fvMesh& mesh_;
00205
00206 public:
00207
00208 iNew(const fvMesh& mesh)
00209 :
00210 mesh_(mesh)
00211 {}
00212
00213 autoPtr<porousZone> operator()(Istream& is) const
00214 {
00215 word name(is);
00216 dictionary dict(is);
00217
00218 return autoPtr<porousZone>(new porousZone(name, mesh_, dict));
00219 }
00220 };
00221
00222
00223
00224 virtual ~porousZone()
00225 {}
00226
00227
00228
00229
00230
00231
00232
00233 const word& zoneName() const
00234 {
00235 return name_;
00236 }
00237
00238
00239 const fvMesh& mesh() const
00240 {
00241 return mesh_;
00242 }
00243
00244
00245 label zoneId() const
00246 {
00247 return cellZoneID_;
00248 }
00249
00250
00251 const dictionary& dict() const
00252 {
00253 return dict_;
00254 }
00255
00256
00257 const coordinateSystem& coordSys() const
00258 {
00259 return coordSys_;
00260 }
00261
00262
00263 const point& origin() const
00264 {
00265 return coordSys_.origin();
00266 }
00267
00268
00269 vector axis() const
00270 {
00271 return coordSys_.axis();
00272 }
00273
00274
00275 scalar porosity() const
00276 {
00277 return porosity_;
00278 }
00279
00280
00281 scalar& porosity()
00282 {
00283 return porosity_;
00284 }
00285
00286
00287
00288 template<class Type>
00289 void modifyDdt(fvMatrix<Type>&) const;
00290
00291
00292
00293 void addResistance(fvVectorMatrix& UEqn) const;
00294
00295
00296
00297
00298 void addResistance
00299 (
00300 const fvVectorMatrix& UEqn,
00301 volTensorField& AU,
00302 bool correctAUprocBC = true
00303 ) const;
00304
00305
00306 virtual void writeDict(Ostream&, bool subDict = true) const;
00307
00308
00309
00310
00311 friend Ostream& operator<<(Ostream&, const porousZone&);
00312 };
00313
00314
00315
00316
00317 }
00318
00319
00320
00321 #ifdef NoRepository
00322 # include <finiteVolume/porousZoneTemplates.C>
00323 #endif
00324
00325
00326
00327 #endif
00328
00329