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 #ifndef fixedBlended_H
00044 #define fixedBlended_H
00045
00046 #include <finiteVolume/surfaceInterpolationScheme.H>
00047
00048
00049
00050 namespace Foam
00051 {
00052
00053
00054
00055
00056
00057 template<class Type>
00058 class fixedBlended
00059 :
00060 public surfaceInterpolationScheme<Type>
00061 {
00062
00063
00064 const scalar blendingFactor_;
00065
00066
00067
00068
00069 tmp<surfaceInterpolationScheme<Type> > tScheme1_;
00070
00071
00072 tmp<surfaceInterpolationScheme<Type> > tScheme2_;
00073
00074
00075
00076 fixedBlended(const fixedBlended&);
00077
00078
00079 void operator=(const fixedBlended&);
00080
00081
00082 public:
00083
00084
00085 TypeName("fixedBlended");
00086
00087
00088
00089
00090
00091
00092
00093 fixedBlended
00094 (
00095 const fvMesh& mesh,
00096 Istream& is
00097 )
00098 :
00099 surfaceInterpolationScheme<Type>(mesh),
00100 blendingFactor_(readScalar(is)),
00101 tScheme1_
00102 (
00103 surfaceInterpolationScheme<Type>::New(mesh, is)
00104 ),
00105 tScheme2_
00106 (
00107 surfaceInterpolationScheme<Type>::New(mesh, is)
00108 )
00109 {
00110 if (blendingFactor_ < 0 || blendingFactor_ > 1)
00111 {
00112 FatalIOErrorIn("fixedBlended(const fvMesh&, Istream&)", is)
00113 << "coefficient = " << blendingFactor_
00114 << " should be >= 0 and <= 1"
00115 << exit(FatalIOError);
00116 }
00117 if (surfaceInterpolationScheme<Type>::debug)
00118 {
00119 Info<<"fixedBlended: " << blendingFactor_
00120 << "*" << tScheme1_().type()
00121 << " + (1-" << blendingFactor_ << ")*"
00122 << tScheme2_().type()
00123 <<endl;
00124 }
00125 }
00126
00127
00128
00129 fixedBlended
00130 (
00131 const fvMesh& mesh,
00132 const surfaceScalarField& faceFlux,
00133 Istream& is
00134 )
00135 :
00136 surfaceInterpolationScheme<Type>(mesh),
00137 blendingFactor_(readScalar(is)),
00138 tScheme1_
00139 (
00140 surfaceInterpolationScheme<Type>::New(mesh, faceFlux, is)
00141 ),
00142 tScheme2_
00143 (
00144 surfaceInterpolationScheme<Type>::New(mesh, faceFlux, is)
00145 )
00146 {
00147 if (blendingFactor_ < 0 || blendingFactor_ > 1)
00148 {
00149 FatalIOErrorIn("fixedBlended(const fvMesh&, Istream&)", is)
00150 << "coefficient = " << blendingFactor_
00151 << " should be >= 0 and <= 1"
00152 << exit(FatalIOError);
00153 }
00154 if (surfaceInterpolationScheme<Type>::debug)
00155 {
00156 Info<<"fixedBlended: " << blendingFactor_
00157 << "*" << tScheme1_().type()
00158 << " + (1-" << blendingFactor_ << ")*"
00159 << tScheme2_().type()
00160 <<endl;
00161 }
00162 }
00163
00164
00165
00166
00167
00168 tmp<surfaceScalarField>
00169 weights
00170 (
00171 const GeometricField<Type, fvPatchField, volMesh>& vf
00172 ) const
00173 {
00174 return
00175 blendingFactor_*tScheme1_().weights(vf)
00176 + (scalar(1.0) - blendingFactor_)*tScheme2_().weights(vf);
00177 }
00178
00179
00180
00181
00182 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
00183 interpolate
00184 (
00185 const GeometricField<Type, fvPatchField, volMesh>& vf
00186 ) const
00187 {
00188 return
00189 blendingFactor_*tScheme1_().interpolate(vf)
00190 + (scalar(1.0) - blendingFactor_)*tScheme2_().interpolate(vf);
00191 }
00192
00193
00194
00195 virtual bool corrected() const
00196 {
00197 return tScheme1_().corrected() || tScheme2_().corrected();
00198 }
00199
00200
00201
00202
00203 virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
00204 correction
00205 (
00206 const GeometricField<Type, fvPatchField, volMesh>& vf
00207 ) const
00208 {
00209 if (tScheme1_().corrected())
00210 {
00211 if (tScheme2_().corrected())
00212 {
00213 return
00214 (
00215 blendingFactor_
00216 * tScheme1_().correction(vf)
00217 + (scalar(1.0) - blendingFactor_)
00218 * tScheme2_().correction(vf)
00219 );
00220 }
00221 else
00222 {
00223 return
00224 (
00225 blendingFactor_
00226 * tScheme1_().correction(vf)
00227 );
00228 }
00229 }
00230 else if (tScheme2_().corrected())
00231 {
00232 return
00233 (
00234 (scalar(1.0) - blendingFactor_)
00235 * tScheme2_().correction(vf)
00236 );
00237 }
00238 else
00239 {
00240 return tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
00241 (
00242 NULL
00243 );
00244 }
00245 }
00246 };
00247
00248
00249
00250
00251 }
00252
00253
00254
00255 #endif
00256
00257