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 #include <lagrangianIntermediate/StochasticDispersionRAS.H>
00027
00028
00029
00030 template<class CloudType>
00031 Foam::StochasticDispersionRAS<CloudType>::StochasticDispersionRAS
00032 (
00033 const dictionary& dict,
00034 CloudType& owner
00035 )
00036 :
00037 DispersionRASModel<CloudType>(dict, owner)
00038 {}
00039
00040
00041
00042
00043 template<class CloudType>
00044 Foam::StochasticDispersionRAS<CloudType>::~StochasticDispersionRAS()
00045 {}
00046
00047
00048
00049
00050 template<class CloudType>
00051 bool Foam::StochasticDispersionRAS<CloudType>::active() const
00052 {
00053 return true;
00054 }
00055
00056
00057 template<class CloudType>
00058 Foam::vector Foam::StochasticDispersionRAS<CloudType>::update
00059 (
00060 const scalar dt,
00061 const label celli,
00062 const vector& U,
00063 const vector& Uc,
00064 vector& UTurb,
00065 scalar& tTurb
00066 )
00067 {
00068 const scalar cps = 0.16432;
00069
00070 const volScalarField& k = *this->kPtr_;
00071 const volScalarField& epsilon = *this->epsilonPtr_;
00072
00073 const scalar UrelMag = mag(U - Uc - UTurb);
00074
00075 const scalar tTurbLoc = min
00076 (
00077 k[celli]/epsilon[celli],
00078 cps*pow(k[celli], 1.5)/epsilon[celli]/(UrelMag + SMALL)
00079 );
00080
00081
00082 if (dt < tTurbLoc)
00083 {
00084 tTurb += dt;
00085
00086 if (tTurb > tTurbLoc)
00087 {
00088 tTurb = 0.0;
00089
00090 scalar sigma = sqrt(2.0*k[celli]/3.0);
00091 vector dir = 2.0*this->owner().rndGen().vector01() - vector::one;
00092 dir /= mag(dir) + SMALL;
00093
00094
00095 scalar x1 = 0.0;
00096 scalar x2 = 0.0;
00097 scalar rsq = 10.0;
00098 while ((rsq > 1.0) || (rsq == 0.0))
00099 {
00100 x1 = 2.0*this->owner().rndGen().scalar01() - 1.0;
00101 x2 = 2.0*this->owner().rndGen().scalar01() - 1.0;
00102 rsq = x1*x1 + x2*x2;
00103 }
00104
00105 scalar fac = sqrt(-2.0*log(rsq)/rsq);
00106
00107 fac *= mag(x1);
00108
00109 UTurb = sigma*fac*dir;
00110
00111 }
00112 }
00113 else
00114 {
00115 tTurb = GREAT;
00116 UTurb = vector::zero;
00117 }
00118
00119 return Uc + UTurb;
00120 }
00121
00122
00123