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 "MaxwellianThermal.H"
00027
00028
00029
00030 template <class CloudType>
00031 Foam::MaxwellianThermal<CloudType>::MaxwellianThermal
00032 (
00033 const dictionary& dict,
00034 CloudType& cloud
00035 )
00036 :
00037 WallInteractionModel<CloudType>(dict, cloud, typeName)
00038 {}
00039
00040
00041
00042
00043 template <class CloudType>
00044 Foam::MaxwellianThermal<CloudType>::~MaxwellianThermal()
00045 {}
00046
00047
00048
00049
00050 template <class CloudType>
00051 void Foam::MaxwellianThermal<CloudType>::correct
00052 (
00053 const wallPolyPatch& wpp,
00054 const label faceId,
00055 vector& U,
00056 scalar& Ei,
00057 label typeId
00058 )
00059 {
00060 label wppIndex = wpp.index();
00061
00062 label wppLocalFace = wpp.whichFace(faceId);
00063
00064 vector nw = wpp.faceAreas()[wppLocalFace];
00065
00066
00067 nw /= mag(nw);
00068
00069
00070 scalar magUn = U & nw;
00071
00072
00073 vector Ut = U - magUn*nw;
00074
00075 CloudType& cloud(this->owner());
00076
00077 Random& rndGen(cloud.rndGen());
00078
00079 while (mag(Ut) < SMALL)
00080 {
00081
00082
00083
00084
00085 U = vector
00086 (
00087 U.x()*(0.8 + 0.2*rndGen.scalar01()),
00088 U.y()*(0.8 + 0.2*rndGen.scalar01()),
00089 U.z()*(0.8 + 0.2*rndGen.scalar01())
00090 );
00091
00092 magUn = U & nw;
00093
00094 Ut = U - magUn*nw;
00095 }
00096
00097
00098 vector tw1 = Ut/mag(Ut);
00099
00100
00101 vector tw2 = nw^tw1;
00102
00103 scalar T = cloud.boundaryT().boundaryField()[wppIndex][wppLocalFace];
00104
00105 scalar mass = cloud.constProps(typeId).mass();
00106
00107 scalar iDof = cloud.constProps(typeId).internalDegreesOfFreedom();
00108
00109 U =
00110 sqrt(CloudType::kb*T/mass)
00111 *(
00112 rndGen.GaussNormal()*tw1
00113 + rndGen.GaussNormal()*tw2
00114 - sqrt(-2.0*log(max(1 - rndGen.scalar01(), VSMALL)))*nw
00115 );
00116
00117 U += cloud.boundaryU().boundaryField()[wppIndex][wppLocalFace];
00118
00119 Ei = cloud.equipartitionInternalEnergy(T, iDof);
00120 }
00121
00122
00123