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 #ifndef limitedCubicV_H
00040 #define limitedCubicV_H
00041
00042 #include <OpenFOAM/vector.H>
00043
00044
00045
00046 namespace Foam
00047 {
00048
00049
00050
00051
00052
00053 template<class LimiterFunc>
00054 class limitedCubicVLimiter
00055 :
00056 public LimiterFunc
00057 {
00058 scalar k_;
00059 scalar twoByk_;
00060
00061 public:
00062
00063 limitedCubicVLimiter(Istream& is)
00064 :
00065 k_(readScalar(is))
00066 {
00067 if (k_ < 0 || k_ > 1)
00068 {
00069 FatalIOErrorIn("limitedCubicVLimiter(Istream& is)", is)
00070 << "coefficient = " << k_
00071 << " should be >= 0 and <= 1"
00072 << exit(FatalIOError);
00073 }
00074
00075
00076 twoByk_ = 2.0/max(k_, SMALL);
00077 }
00078
00079 scalar limiter
00080 (
00081 const scalar cdWeight,
00082 const scalar faceFlux,
00083 const typename LimiterFunc::phiType& phiP,
00084 const typename LimiterFunc::phiType& phiN,
00085 const typename LimiterFunc::gradPhiType& gradcP,
00086 const typename LimiterFunc::gradPhiType& gradcN,
00087 const vector& d
00088 ) const
00089 {
00090 scalar twor = twoByk_*LimiterFunc::r
00091 (
00092 faceFlux, phiP, phiN, gradcP, gradcN, d
00093 );
00094
00095 vector fV = cdWeight*phiP + (1.0 - cdWeight)*phiN;
00096
00097 scalar fVphiP = fV & phiP;
00098 scalar fVphiN = fV & phiN;
00099
00100 scalar fVphiU;
00101
00102 if (faceFlux > 0)
00103 {
00104 fVphiU = fVphiP;
00105 }
00106 else
00107 {
00108 fVphiU = fVphiN;
00109 }
00110
00111
00112 scalar fVphif =
00113 cdWeight*(fVphiP - 0.25*(fV & (d & gradcN)))
00114 + (1 - cdWeight)*(fVphiN + 0.25*(fV & (d & gradcP)));
00115
00116 scalar fVphiCD = cdWeight*fVphiP + (1 - cdWeight)*fVphiN;
00117
00118
00119 scalar cubicLimiter =
00120 (fVphif - fVphiU)/stabilise(fVphiCD - fVphiU, SMALL);
00121
00122
00123 return max(min(min(twor, cubicLimiter), 2), 0);
00124 }
00125 };
00126
00127
00128
00129
00130 }
00131
00132
00133
00134 #endif
00135
00136