SlideShare a Scribd company logo
1 of 27
Download to read offline
OpenFOAM
Spatial
Interpolation
Fumiya Nozaki
Last Updated: 16 June 2014
English
2
FVM discretization
𝛻𝜓 𝑑𝑉
𝑉
= 𝑑𝑺 ∙ 𝜓
𝑆
= 𝑺 𝑓 ∙ 𝜓 𝑓
𝑓
Values at
face centers
 Most spatial derivative terms are first integrated over a cell volume 𝑉
and then converted to integrals over the cell surface bounding the
volume using Gauss’s theorem
Gauss’s theorem
Spatial
discretization
3
Interpolation from cells to faces
Owner cell
center
Neighbour cell
center
Face
center
𝜓 𝑃 𝜓 𝑁
𝜓 𝑓
 What we need is some algebraic relational expressions
𝜓 𝑓 = 𝑓 𝜓 𝑃, 𝜓 𝑁
 Typical interpolation schemes in OpenFOAM
 upwind
 linearUpwind
 linear
 limitedLinear
etc.
Many other schemes are available for use
in the spatial interpolation [1].
4
Available interpolation schemes in OpenFOAM
𝜓 𝑓 = 𝑓 𝜓 𝑃, 𝜓 𝑁
5
Specification of interpolation schemes
gradSchemes
{
default Gauss linear;
}
divSchemes
{
default none;
div(phi,U) bounded Gauss linearUpwind grad(U);
div((nuEff*(T(grad(U))))) Gauss linear;
}
laplacianSchemes
{
default Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
 Interpolation schemes are chosen on a term-by-term basis
gradSchemes
{
default Gauss linear;
}
divSchemes
{
default none;
div(phi,U) bounded Gauss linearUpwind grad(U);
div((nuEff*dev(T(grad(U))))) Gauss linear;
}
laplacianSchemes
{
default Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
6
Specification of interpolation schemes
 Interpolation schemes are chosen on a term-by-term basis
𝛻𝑝 𝑑𝑉
𝑉
= 𝑑𝑺 ∙ 𝑝
𝑆
= 𝑺 𝑓 ∙ 𝑝 𝑓
𝑓
7
Specification of interpolation schemes
gradSchemes
{
default Gauss linear;
}
divSchemes
{
default none;
div(phi,U) bounded Gauss linearUpwind grad(U);
div((nuEff*(T(grad(U))))) Gauss linear;
}
laplacianSchemes
{
default Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
 Interpolation schemes are chosen on a term-by-term basis
𝛻 ∙ 𝜈 𝛻𝒖 𝑇
𝑑𝑉
𝑉
= 𝑑𝑺 ∙ 𝜈 𝛻𝒖 𝑇
𝑆
= 𝑺 𝑓 ∙ 𝜈 𝛻𝒖 𝑇
𝑓
𝑓
𝛻 ∙ 𝑼𝑼 𝑑𝑉
𝑉
= 𝑑𝑺 ∙ 𝑼𝑼
𝑆
= 𝑺 𝑓 ∙ 𝑼 𝑓 𝑼 𝑓
𝑓
= 𝐹𝑼 𝑓
𝑓
8
Specification of interpolation schemes
gradSchemes
{
default Gauss linear;
}
divSchemes
{
default none;
div(phi,U) bounded Gauss linearUpwind grad(U);
div((nuEff*dev(T(grad(U))))) Gauss linear;
}
laplacianSchemes
{
default Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
 Interpolation schemes are chosen on a term-by-term basis
𝛻 ∙ Γ𝛻𝜙 𝑑𝑉
𝑉
= 𝑑𝑺 ∙ Γ𝛻𝜙
𝑆
= Γ𝑓 𝑺 𝑓 ∙ 𝛻𝜙 𝑓
𝑓
9
Let’s look into
the code!
10
surfaceInterpolationScheme.C
0322 //- Return the face-interpolate of the given cell field
0323 // with explicit correction
0324 template<class Type>
0325 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
0326 surfaceInterpolationScheme<Type>::interpolate
0327 (
0328 const GeometricField<Type, fvPatchField, volMesh>& vf
0329 ) const
0330 {
0331 if (surfaceInterpolation::debug)
0332 {
0333 Info<< "surfaceInterpolationScheme<Type>::interpolate"
0334 "(const GeometricField<Type, fvPatchField, volMesh>&) : "
0335 "interpolating "
0336 << vf.type() << " "
0337 << vf.name()
0338 << " from cells to faces"
0339 << endl;
0340 }
0341
0342 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tsf
0343 = interpolate(vf, weights(vf));
0344
0345 if (corrected())
0346 {
0347 tsf() += correction(vf);
0348 }
0349
0350 return tsf;
0351 }
surfaceInterpolationScheme.C
Without explicit correction
Addition of explicit correction
11
surfaceInterpolationScheme.C
0322 //- Return the face-interpolate of the given cell field
0323 // with explicit correction
0324 template<class Type>
0325 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
0326 surfaceInterpolationScheme<Type>::interpolate
0327 (
0328 const GeometricField<Type, fvPatchField, volMesh>& vf
0329 ) const
0330 {
0331 if (surfaceInterpolation::debug)
0332 {
0333 Info<< "surfaceInterpolationScheme<Type>::interpolate"
0334 "(const GeometricField<Type, fvPatchField, volMesh>&) : "
0335 "interpolating "
0336 << vf.type() << " "
0337 << vf.name()
0338 << " from cells to faces"
0339 << endl;
0340 }
0341
0342 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tsf
0343 = interpolate(vf, weights(vf));
0344
0345 if (corrected())
0346 {
0347 tsf() += correction(vf);
0348 }
0349
0350 return tsf;
0351 }
surfaceInterpolationScheme.C
“weights()” are different
depending on the
interpolation scheme.
12
surfaceInterpolationScheme.C
0322 //- Return the face-interpolate of the given cell field
0323 // with explicit correction
0324 template<class Type>
0325 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
0326 surfaceInterpolationScheme<Type>::interpolate
0327 (
0328 const GeometricField<Type, fvPatchField, volMesh>& vf
0329 ) const
0330 {
0331 if (surfaceInterpolation::debug)
0332 {
0333 Info<< "surfaceInterpolationScheme<Type>::interpolate"
0334 "(const GeometricField<Type, fvPatchField, volMesh>&) : "
0335 "interpolating "
0336 << vf.type() << " "
0337 << vf.name()
0338 << " from cells to faces"
0339 << endl;
0340 }
0341
0342 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tsf
0343 = interpolate(vf, weights(vf));
0344
0345 if (corrected())
0346 {
0347 tsf() += correction(vf);
0348 }
0349
0350 return tsf;
0351 }
surfaceInterpolationScheme.C
“interpolate()” calculates
interpolated face value
without explicit correction.
Turn to the next page.
13
surfaceInterpolationScheme.C
0266 const surfaceScalarField& lambdas = tlambdas();
0267
0268 const Field<Type>& vfi = vf.internalField();
0269 const scalarField& lambda = lambdas.internalField();
0270
0271 const fvMesh& mesh = vf.mesh();
0272 const labelUList& P = mesh.owner();
0273 const labelUList& N = mesh.neighbour();
0274
0275 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tsf
0276 (
0277 new GeometricField<Type, fvsPatchField, surfaceMesh>
0278 (
0279 IOobject
0280 (
0281 "interpolate("+vf.name()+')',
0282 vf.instance(),
0283 vf.db()
0284 ),
0285 mesh,
0286 vf.dimensions()
0287 )
0288 );
0289 GeometricField<Type, fvsPatchField, surfaceMesh>& sf = tsf();
0290
0291 Field<Type>& sfi = sf.internalField();
0292
0293 for (register label fi=0; fi<P.size(); fi++)
0294 {
0295 sfi[fi] = lambda[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]];
0296 }
surfaceInterpolationScheme.C
sfi[fi] represents the
interpolated value at
the fi-th face center.
14
First look into “upwind” scheme
Table 4.6: Interpolation schemes [1]
upwind
Flow directions are considered.
15
Calculation of weights
0128 //- Return the interpolation weighting factors
0129 tmp<surfaceScalarField> weights() const
0130 {
0131 return pos(this->faceFlux_);
0132 }
0133
0134 //- Return the interpolation weighting factors
0135 virtual tmp<surfaceScalarField> weights
0136 (
0137 const GeometricField<Type, fvPatchField, volMesh>&
0138 ) const
0139 {
0140 return weights();
0141 }
upwind.H
 l. 0131
𝑤𝑒𝑖𝑔ℎ𝑡𝑠() facei =
1
0
if 𝑓𝑎𝑐𝑒𝐹𝑙𝑢𝑥 facei > 0
if 𝑓𝑎𝑐𝑒𝐹𝑙𝑢𝑥 facei ≤ 0
upwind
16
Explicit correction
0175 //- Return true if this scheme uses an explicit correction
0176 virtual bool corrected() const
0177 {
0178 return false;
0179 }
surfaceInterpolationScheme.H
 For “upwind” scheme, corrected() returns “false”
So, “upwind” interpolation has no explicit correction.
 Evaluation of the interpolated value
• If phi[facei] > 0
sfi[fi] = lambda[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]
= weights()[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]
= 1*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]
= vfi[P[fi]] = owner cell value
• If phi[facei] ≦ 0
sfi[fi] = lambda[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]
= 0*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]
= vfi[N[fi]] = neighbour cell value
upwind
17
Interpolated valueupwind
phi[facei] > 0 phi[facei] ≦ 0
owner neighbour owner neighbour
owner is the upstream cell neighbour is the upstream cell
𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢
= 𝝍 𝒐𝒘𝒏𝒆𝒓 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢
𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢
= 𝝍 𝒏𝒆𝒊𝒈𝒉𝒃𝒐𝒖𝒓 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢
18
Linear upwind differencing
Table 4.6: Interpolation schemes [1]
linearUpwind
Flow directions are considered.
19
Explicit correctionlinearUpwind
 “weights” are same as that of “upwind” scheme
 For “linearUpwind” scheme, corrected() returns “true”
 Calculation of explicit correction term
0139 //- Return true if this scheme uses an explicit correction
0140 virtual bool corrected() const
0141 {
0142 return true;
0143 }
linearUpwind.H
0085 forAll(faceFlux, facei)
0086 {
0087 label celli = (faceFlux[facei] > 0) ? owner[facei] : neighbour[facei];
0088 sfCorr[facei] = (Cf[facei] - C[celli]) & gradVf[celli];
0089 }
linearUpwind.C
𝒓 ∙ 𝛻𝜓 𝑢𝑝𝑠𝑡𝑟𝑒𝑎𝑚 𝑐𝑒𝑙𝑙
label of an upstream cell
• Upstream cell is judged by the
sign of the face flux field “phi”
(faceFlux means phi in the
above code)
20
Interpolated value
phi[facei] > 0 phi[facei] ≦ 0
owner neighbour owner neighbour
upstream cell
𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢 = 𝝍 𝒖𝒑𝒔𝒕𝒓𝒆𝒂𝒎 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢
+ 𝒓 ∙ 𝜵𝝍 𝒖𝒑𝒔𝒕𝒓𝒆𝒂𝒎 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢
linearUpwind
Center of
upstream cell
Face
center
𝒓
𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢 = 𝝍 𝒖𝒑𝒔𝒕𝒓𝒆𝒂𝒎 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢
+ 𝒓 ∙ 𝜵𝝍 𝒖𝒑𝒔𝒕𝒓𝒆𝒂𝒎 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢
21
Discretization of gradient
gradSchemes
{
grad(psi) Gauss linear;
}
interpolationSchemes
{
interpolate(psi) linearUpwind phi grad(psi);
}
 Specification of the discretization scheme of gradient term 𝛻𝑝
The same strings have to be specified.
“fvSchemes” file
linearUpwind
22
Linear interpolation with symmetric weighting
Table 4.6: Interpolation schemes [1]
midPoint
Flow directions are not considered.
23
Calculation of weightsmidPoint
0095 //- Return the interpolation weighting factors
0096 tmp<surfaceScalarField> weights
0097 (
0098 const GeometricField<Type, fvPatchField, volMesh>&
0099 ) const
0100 {
0101 tmp<surfaceScalarField> taw
0102 (
0103 new surfaceScalarField
0104 (
0105 IOobject
0106 (
0107 "midPointWeights",
0108 this->mesh().time().timeName(),
0109 this->mesh()
0110 ),
0111 this->mesh(),
0112 dimensionedScalar("0.5", dimless, 0.5)
0113 )
0114 );
0115
0116 surfaceScalarField::GeometricBoundaryField& awbf =
0117 taw().boundaryField();
0118
0119 forAll(awbf, patchi)
0120 {
0121 if (!awbf[patchi].coupled())
0122 {
0123 awbf[patchi] = 1.0;
0124 }
0125 }
0126
0127 return taw;
0128 }
midPoint.H
weights on the
internal faces are 0.5
24
Explicit correction
 For “midPoint” scheme, corrected() returns “false”
So, “midPoint” interpolation has no explicit correction.
 Evaluation of the interpolated value
sfi[fi] = lambda[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]
= weights()[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]
= 0.5*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]
= 0.5*(vfi[P[fi]] + vfi[N[fi]])
= 0.5*(owner cell value + neighbour cell value)
Arithmetic mean
midPoint
0175 //- Return true if this scheme uses an explicit correction
0176 virtual bool corrected() const
0177 {
0178 return false;
0179 }
surfaceInterpolationScheme.H
25
Interpolated valuemidPoint
owner neighbour
𝟏
𝟐
𝝍 𝒐𝒘𝒏𝒆𝒓 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢 + 𝝍 𝒏𝒆𝒊𝒈𝒉𝒃𝒐𝒖𝒓 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢
𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢 =
Arithmetic mean
26
References
[1] User Guide http://foam.sourceforge.net/docs/Guides-a4/UserGuide.pdf
(accessed 06/15/2014)
27
Thank
You!

More Related Content

What's hot

OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
Fumiya Nozaki
 
CFD for Rotating Machinery using OpenFOAM
CFD for Rotating Machinery using OpenFOAMCFD for Rotating Machinery using OpenFOAM
CFD for Rotating Machinery using OpenFOAM
Fumiya Nozaki
 
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
takuyayamamoto1800
 
OpenFOAMにおける混相流計算
OpenFOAMにおける混相流計算OpenFOAMにおける混相流計算
OpenFOAMにおける混相流計算
takuyayamamoto1800
 
OpenFoamの混相流solver interFoamのパラメータによる解の変化
OpenFoamの混相流solver interFoamのパラメータによる解の変化OpenFoamの混相流solver interFoamのパラメータによる解の変化
OpenFoamの混相流solver interFoamのパラメータによる解の変化
takuyayamamoto1800
 

What's hot (20)

OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
 
OpenFOAMの壁関数
OpenFOAMの壁関数OpenFOAMの壁関数
OpenFOAMの壁関数
 
Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0
Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0
Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0
 
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
 
OpenFOAM LES乱流モデルカスタマイズ
OpenFOAM LES乱流モデルカスタマイズOpenFOAM LES乱流モデルカスタマイズ
OpenFOAM LES乱流モデルカスタマイズ
 
CFD for Rotating Machinery using OpenFOAM
CFD for Rotating Machinery using OpenFOAMCFD for Rotating Machinery using OpenFOAM
CFD for Rotating Machinery using OpenFOAM
 
Customization of LES turbulence model in OpenFOAM
Customization of LES turbulence	 model in OpenFOAMCustomization of LES turbulence	 model in OpenFOAM
Customization of LES turbulence model in OpenFOAM
 
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
 
OpenFOAMのinterfoamによる誤差
OpenFOAMのinterfoamによる誤差OpenFOAMのinterfoamによる誤差
OpenFOAMのinterfoamによる誤差
 
OpenFOAMによる気液2相流解析の基礎と設定例
OpenFOAMによる気液2相流解析の基礎と設定例OpenFOAMによる気液2相流解析の基礎と設定例
OpenFOAMによる気液2相流解析の基礎と設定例
 
Basic Boundary Conditions in OpenFOAM v2.4
Basic Boundary Conditions in OpenFOAM v2.4Basic Boundary Conditions in OpenFOAM v2.4
Basic Boundary Conditions in OpenFOAM v2.4
 
OpenFOAMにおける混相流計算
OpenFOAMにおける混相流計算OpenFOAMにおける混相流計算
OpenFOAMにおける混相流計算
 
OpenFoamの混相流solver interFoamのパラメータによる解の変化
OpenFoamの混相流solver interFoamのパラメータによる解の変化OpenFoamの混相流solver interFoamのパラメータによる解の変化
OpenFoamの混相流solver interFoamのパラメータによる解の変化
 
Of tutorials v1806
Of tutorials v1806Of tutorials v1806
Of tutorials v1806
 
OpenFOAM Training v5-1-en
OpenFOAM Training v5-1-enOpenFOAM Training v5-1-en
OpenFOAM Training v5-1-en
 
How to chtmultiregionfoam
How to chtmultiregionfoamHow to chtmultiregionfoam
How to chtmultiregionfoam
 
OpenFOAMにおけるDEM計算の力モデルの解読
OpenFOAMにおけるDEM計算の力モデルの解読OpenFOAMにおけるDEM計算の力モデルの解読
OpenFOAMにおけるDEM計算の力モデルの解読
 
ParaviewでのParticle Tracerを用いた可視化
ParaviewでのParticle Tracerを用いた可視化ParaviewでのParticle Tracerを用いた可視化
ParaviewでのParticle Tracerを用いた可視化
 
OpenFOAMソルバの実行時ベイズ最適化
OpenFOAMソルバの実行時ベイズ最適化OpenFOAMソルバの実行時ベイズ最適化
OpenFOAMソルバの実行時ベイズ最適化
 
multiDimAMR
multiDimAMRmultiDimAMR
multiDimAMR
 

Similar to Spatial Interpolation Schemes in OpenFOAM

Raices de ecuaciones
Raices de ecuacionesRaices de ecuaciones
Raices de ecuaciones
Natalia
 
Raices de ecuaciones
Raices de ecuacionesRaices de ecuaciones
Raices de ecuaciones
Natalia
 
Vlsiexpt 11 12
Vlsiexpt 11 12Vlsiexpt 11 12
Vlsiexpt 11 12
JINCY Soju
 

Similar to Spatial Interpolation Schemes in OpenFOAM (20)

Modeling and Structural Analysis of a Wing [FSI ANSYS&MATLAB]
 Modeling and Structural Analysis of a Wing [FSI ANSYS&MATLAB]  Modeling and Structural Analysis of a Wing [FSI ANSYS&MATLAB]
Modeling and Structural Analysis of a Wing [FSI ANSYS&MATLAB]
 
Mat lab vlm
Mat lab vlmMat lab vlm
Mat lab vlm
 
A Numerical Method For Friction Problems With Multiple Contacts
A Numerical Method For Friction Problems With Multiple ContactsA Numerical Method For Friction Problems With Multiple Contacts
A Numerical Method For Friction Problems With Multiple Contacts
 
AllPosters
AllPostersAllPosters
AllPosters
 
Raices de ecuaciones
Raices de ecuacionesRaices de ecuaciones
Raices de ecuaciones
 
Raices de ecuaciones
Raices de ecuacionesRaices de ecuaciones
Raices de ecuaciones
 
Vlsiexpt 11 12
Vlsiexpt 11 12Vlsiexpt 11 12
Vlsiexpt 11 12
 
Bisection method
Bisection methodBisection method
Bisection method
 
C Programming by Süleyman Kondakci
C Programming by Süleyman KondakciC Programming by Süleyman Kondakci
C Programming by Süleyman Kondakci
 
White box testing
White box testingWhite box testing
White box testing
 
MUMS: Transition & SPUQ Workshop - Gradient-Free Construction of Active Subsp...
MUMS: Transition & SPUQ Workshop - Gradient-Free Construction of Active Subsp...MUMS: Transition & SPUQ Workshop - Gradient-Free Construction of Active Subsp...
MUMS: Transition & SPUQ Workshop - Gradient-Free Construction of Active Subsp...
 
7 decision-control
7 decision-control7 decision-control
7 decision-control
 
SLIDES_PEGASUS_CALISE
SLIDES_PEGASUS_CALISESLIDES_PEGASUS_CALISE
SLIDES_PEGASUS_CALISE
 
Java Performance Puzzlers
Java Performance PuzzlersJava Performance Puzzlers
Java Performance Puzzlers
 
Cme434 project
Cme434 projectCme434 project
Cme434 project
 
conditional.ppt
conditional.pptconditional.ppt
conditional.ppt
 
Es272 ch6
Es272 ch6Es272 ch6
Es272 ch6
 
Exploiting vectorization with ISPC
Exploiting vectorization with ISPCExploiting vectorization with ISPC
Exploiting vectorization with ISPC
 
What is c
What is cWhat is c
What is c
 
B61301007 matlab documentation
B61301007 matlab documentationB61301007 matlab documentation
B61301007 matlab documentation
 

More from Fumiya Nozaki

CAESES Free チュートリアル
CAESES Free チュートリアルCAESES Free チュートリアル
CAESES Free チュートリアル
Fumiya Nozaki
 
CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
Fumiya Nozaki
 
ParaView による可視化 Tips
ParaView による可視化 TipsParaView による可視化 Tips
ParaView による可視化 Tips
Fumiya Nozaki
 
Adjoint Shape Optimization using OpenFOAM
Adjoint Shape Optimization using OpenFOAMAdjoint Shape Optimization using OpenFOAM
Adjoint Shape Optimization using OpenFOAM
Fumiya Nozaki
 
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみたオープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
Fumiya Nozaki
 

More from Fumiya Nozaki (10)

blockCoupledSwirlTestチュートリアル
blockCoupledSwirlTestチュートリアルblockCoupledSwirlTestチュートリアル
blockCoupledSwirlTestチュートリアル
 
CAESES Free チュートリアル
CAESES Free チュートリアルCAESES Free チュートリアル
CAESES Free チュートリアル
 
CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
 
ParaView による可視化 Tips
ParaView による可視化 TipsParaView による可視化 Tips
ParaView による可視化 Tips
 
OpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能についてOpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能について
 
無償のモデリングソフトウェアCAESESを使ってみた
無償のモデリングソフトウェアCAESESを使ってみた無償のモデリングソフトウェアCAESESを使ってみた
無償のモデリングソフトウェアCAESESを使ってみた
 
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
 
Adjoint Shape Optimization using OpenFOAM
Adjoint Shape Optimization using OpenFOAMAdjoint Shape Optimization using OpenFOAM
Adjoint Shape Optimization using OpenFOAM
 
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみたオープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
 
OpenFOAM を用いた Adjoint 形状最適化事例1
OpenFOAM を用いた Adjoint 形状最適化事例1OpenFOAM を用いた Adjoint 形状最適化事例1
OpenFOAM を用いた Adjoint 形状最適化事例1
 

Recently uploaded

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Spatial Interpolation Schemes in OpenFOAM

  • 2. 2 FVM discretization 𝛻𝜓 𝑑𝑉 𝑉 = 𝑑𝑺 ∙ 𝜓 𝑆 = 𝑺 𝑓 ∙ 𝜓 𝑓 𝑓 Values at face centers  Most spatial derivative terms are first integrated over a cell volume 𝑉 and then converted to integrals over the cell surface bounding the volume using Gauss’s theorem Gauss’s theorem Spatial discretization
  • 3. 3 Interpolation from cells to faces Owner cell center Neighbour cell center Face center 𝜓 𝑃 𝜓 𝑁 𝜓 𝑓  What we need is some algebraic relational expressions 𝜓 𝑓 = 𝑓 𝜓 𝑃, 𝜓 𝑁
  • 4.  Typical interpolation schemes in OpenFOAM  upwind  linearUpwind  linear  limitedLinear etc. Many other schemes are available for use in the spatial interpolation [1]. 4 Available interpolation schemes in OpenFOAM 𝜓 𝑓 = 𝑓 𝜓 𝑃, 𝜓 𝑁
  • 5. 5 Specification of interpolation schemes gradSchemes { default Gauss linear; } divSchemes { default none; div(phi,U) bounded Gauss linearUpwind grad(U); div((nuEff*(T(grad(U))))) Gauss linear; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; }  Interpolation schemes are chosen on a term-by-term basis
  • 6. gradSchemes { default Gauss linear; } divSchemes { default none; div(phi,U) bounded Gauss linearUpwind grad(U); div((nuEff*dev(T(grad(U))))) Gauss linear; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; } 6 Specification of interpolation schemes  Interpolation schemes are chosen on a term-by-term basis 𝛻𝑝 𝑑𝑉 𝑉 = 𝑑𝑺 ∙ 𝑝 𝑆 = 𝑺 𝑓 ∙ 𝑝 𝑓 𝑓
  • 7. 7 Specification of interpolation schemes gradSchemes { default Gauss linear; } divSchemes { default none; div(phi,U) bounded Gauss linearUpwind grad(U); div((nuEff*(T(grad(U))))) Gauss linear; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; }  Interpolation schemes are chosen on a term-by-term basis 𝛻 ∙ 𝜈 𝛻𝒖 𝑇 𝑑𝑉 𝑉 = 𝑑𝑺 ∙ 𝜈 𝛻𝒖 𝑇 𝑆 = 𝑺 𝑓 ∙ 𝜈 𝛻𝒖 𝑇 𝑓 𝑓 𝛻 ∙ 𝑼𝑼 𝑑𝑉 𝑉 = 𝑑𝑺 ∙ 𝑼𝑼 𝑆 = 𝑺 𝑓 ∙ 𝑼 𝑓 𝑼 𝑓 𝑓 = 𝐹𝑼 𝑓 𝑓
  • 8. 8 Specification of interpolation schemes gradSchemes { default Gauss linear; } divSchemes { default none; div(phi,U) bounded Gauss linearUpwind grad(U); div((nuEff*dev(T(grad(U))))) Gauss linear; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; }  Interpolation schemes are chosen on a term-by-term basis 𝛻 ∙ Γ𝛻𝜙 𝑑𝑉 𝑉 = 𝑑𝑺 ∙ Γ𝛻𝜙 𝑆 = Γ𝑓 𝑺 𝑓 ∙ 𝛻𝜙 𝑓 𝑓
  • 10. 10 surfaceInterpolationScheme.C 0322 //- Return the face-interpolate of the given cell field 0323 // with explicit correction 0324 template<class Type> 0325 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > 0326 surfaceInterpolationScheme<Type>::interpolate 0327 ( 0328 const GeometricField<Type, fvPatchField, volMesh>& vf 0329 ) const 0330 { 0331 if (surfaceInterpolation::debug) 0332 { 0333 Info<< "surfaceInterpolationScheme<Type>::interpolate" 0334 "(const GeometricField<Type, fvPatchField, volMesh>&) : " 0335 "interpolating " 0336 << vf.type() << " " 0337 << vf.name() 0338 << " from cells to faces" 0339 << endl; 0340 } 0341 0342 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tsf 0343 = interpolate(vf, weights(vf)); 0344 0345 if (corrected()) 0346 { 0347 tsf() += correction(vf); 0348 } 0349 0350 return tsf; 0351 } surfaceInterpolationScheme.C Without explicit correction Addition of explicit correction
  • 11. 11 surfaceInterpolationScheme.C 0322 //- Return the face-interpolate of the given cell field 0323 // with explicit correction 0324 template<class Type> 0325 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > 0326 surfaceInterpolationScheme<Type>::interpolate 0327 ( 0328 const GeometricField<Type, fvPatchField, volMesh>& vf 0329 ) const 0330 { 0331 if (surfaceInterpolation::debug) 0332 { 0333 Info<< "surfaceInterpolationScheme<Type>::interpolate" 0334 "(const GeometricField<Type, fvPatchField, volMesh>&) : " 0335 "interpolating " 0336 << vf.type() << " " 0337 << vf.name() 0338 << " from cells to faces" 0339 << endl; 0340 } 0341 0342 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tsf 0343 = interpolate(vf, weights(vf)); 0344 0345 if (corrected()) 0346 { 0347 tsf() += correction(vf); 0348 } 0349 0350 return tsf; 0351 } surfaceInterpolationScheme.C “weights()” are different depending on the interpolation scheme.
  • 12. 12 surfaceInterpolationScheme.C 0322 //- Return the face-interpolate of the given cell field 0323 // with explicit correction 0324 template<class Type> 0325 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > 0326 surfaceInterpolationScheme<Type>::interpolate 0327 ( 0328 const GeometricField<Type, fvPatchField, volMesh>& vf 0329 ) const 0330 { 0331 if (surfaceInterpolation::debug) 0332 { 0333 Info<< "surfaceInterpolationScheme<Type>::interpolate" 0334 "(const GeometricField<Type, fvPatchField, volMesh>&) : " 0335 "interpolating " 0336 << vf.type() << " " 0337 << vf.name() 0338 << " from cells to faces" 0339 << endl; 0340 } 0341 0342 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tsf 0343 = interpolate(vf, weights(vf)); 0344 0345 if (corrected()) 0346 { 0347 tsf() += correction(vf); 0348 } 0349 0350 return tsf; 0351 } surfaceInterpolationScheme.C “interpolate()” calculates interpolated face value without explicit correction. Turn to the next page.
  • 13. 13 surfaceInterpolationScheme.C 0266 const surfaceScalarField& lambdas = tlambdas(); 0267 0268 const Field<Type>& vfi = vf.internalField(); 0269 const scalarField& lambda = lambdas.internalField(); 0270 0271 const fvMesh& mesh = vf.mesh(); 0272 const labelUList& P = mesh.owner(); 0273 const labelUList& N = mesh.neighbour(); 0274 0275 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tsf 0276 ( 0277 new GeometricField<Type, fvsPatchField, surfaceMesh> 0278 ( 0279 IOobject 0280 ( 0281 "interpolate("+vf.name()+')', 0282 vf.instance(), 0283 vf.db() 0284 ), 0285 mesh, 0286 vf.dimensions() 0287 ) 0288 ); 0289 GeometricField<Type, fvsPatchField, surfaceMesh>& sf = tsf(); 0290 0291 Field<Type>& sfi = sf.internalField(); 0292 0293 for (register label fi=0; fi<P.size(); fi++) 0294 { 0295 sfi[fi] = lambda[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]]; 0296 } surfaceInterpolationScheme.C sfi[fi] represents the interpolated value at the fi-th face center.
  • 14. 14 First look into “upwind” scheme Table 4.6: Interpolation schemes [1] upwind Flow directions are considered.
  • 15. 15 Calculation of weights 0128 //- Return the interpolation weighting factors 0129 tmp<surfaceScalarField> weights() const 0130 { 0131 return pos(this->faceFlux_); 0132 } 0133 0134 //- Return the interpolation weighting factors 0135 virtual tmp<surfaceScalarField> weights 0136 ( 0137 const GeometricField<Type, fvPatchField, volMesh>& 0138 ) const 0139 { 0140 return weights(); 0141 } upwind.H  l. 0131 𝑤𝑒𝑖𝑔ℎ𝑡𝑠() facei = 1 0 if 𝑓𝑎𝑐𝑒𝐹𝑙𝑢𝑥 facei > 0 if 𝑓𝑎𝑐𝑒𝐹𝑙𝑢𝑥 facei ≤ 0 upwind
  • 16. 16 Explicit correction 0175 //- Return true if this scheme uses an explicit correction 0176 virtual bool corrected() const 0177 { 0178 return false; 0179 } surfaceInterpolationScheme.H  For “upwind” scheme, corrected() returns “false” So, “upwind” interpolation has no explicit correction.  Evaluation of the interpolated value • If phi[facei] > 0 sfi[fi] = lambda[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]] = weights()[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]] = 1*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]] = vfi[P[fi]] = owner cell value • If phi[facei] ≦ 0 sfi[fi] = lambda[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]] = 0*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]] = vfi[N[fi]] = neighbour cell value upwind
  • 17. 17 Interpolated valueupwind phi[facei] > 0 phi[facei] ≦ 0 owner neighbour owner neighbour owner is the upstream cell neighbour is the upstream cell 𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢 = 𝝍 𝒐𝒘𝒏𝒆𝒓 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢 𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢 = 𝝍 𝒏𝒆𝒊𝒈𝒉𝒃𝒐𝒖𝒓 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢
  • 18. 18 Linear upwind differencing Table 4.6: Interpolation schemes [1] linearUpwind Flow directions are considered.
  • 19. 19 Explicit correctionlinearUpwind  “weights” are same as that of “upwind” scheme  For “linearUpwind” scheme, corrected() returns “true”  Calculation of explicit correction term 0139 //- Return true if this scheme uses an explicit correction 0140 virtual bool corrected() const 0141 { 0142 return true; 0143 } linearUpwind.H 0085 forAll(faceFlux, facei) 0086 { 0087 label celli = (faceFlux[facei] > 0) ? owner[facei] : neighbour[facei]; 0088 sfCorr[facei] = (Cf[facei] - C[celli]) & gradVf[celli]; 0089 } linearUpwind.C 𝒓 ∙ 𝛻𝜓 𝑢𝑝𝑠𝑡𝑟𝑒𝑎𝑚 𝑐𝑒𝑙𝑙 label of an upstream cell • Upstream cell is judged by the sign of the face flux field “phi” (faceFlux means phi in the above code)
  • 20. 20 Interpolated value phi[facei] > 0 phi[facei] ≦ 0 owner neighbour owner neighbour upstream cell 𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢 = 𝝍 𝒖𝒑𝒔𝒕𝒓𝒆𝒂𝒎 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢 + 𝒓 ∙ 𝜵𝝍 𝒖𝒑𝒔𝒕𝒓𝒆𝒂𝒎 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢 linearUpwind Center of upstream cell Face center 𝒓
  • 21. 𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢 = 𝝍 𝒖𝒑𝒔𝒕𝒓𝒆𝒂𝒎 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢 + 𝒓 ∙ 𝜵𝝍 𝒖𝒑𝒔𝒕𝒓𝒆𝒂𝒎 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢 21 Discretization of gradient gradSchemes { grad(psi) Gauss linear; } interpolationSchemes { interpolate(psi) linearUpwind phi grad(psi); }  Specification of the discretization scheme of gradient term 𝛻𝑝 The same strings have to be specified. “fvSchemes” file linearUpwind
  • 22. 22 Linear interpolation with symmetric weighting Table 4.6: Interpolation schemes [1] midPoint Flow directions are not considered.
  • 23. 23 Calculation of weightsmidPoint 0095 //- Return the interpolation weighting factors 0096 tmp<surfaceScalarField> weights 0097 ( 0098 const GeometricField<Type, fvPatchField, volMesh>& 0099 ) const 0100 { 0101 tmp<surfaceScalarField> taw 0102 ( 0103 new surfaceScalarField 0104 ( 0105 IOobject 0106 ( 0107 "midPointWeights", 0108 this->mesh().time().timeName(), 0109 this->mesh() 0110 ), 0111 this->mesh(), 0112 dimensionedScalar("0.5", dimless, 0.5) 0113 ) 0114 ); 0115 0116 surfaceScalarField::GeometricBoundaryField& awbf = 0117 taw().boundaryField(); 0118 0119 forAll(awbf, patchi) 0120 { 0121 if (!awbf[patchi].coupled()) 0122 { 0123 awbf[patchi] = 1.0; 0124 } 0125 } 0126 0127 return taw; 0128 } midPoint.H weights on the internal faces are 0.5
  • 24. 24 Explicit correction  For “midPoint” scheme, corrected() returns “false” So, “midPoint” interpolation has no explicit correction.  Evaluation of the interpolated value sfi[fi] = lambda[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]] = weights()[fi]*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]] = 0.5*(vfi[P[fi]] - vfi[N[fi]]) + vfi[N[fi]] = 0.5*(vfi[P[fi]] + vfi[N[fi]]) = 0.5*(owner cell value + neighbour cell value) Arithmetic mean midPoint 0175 //- Return true if this scheme uses an explicit correction 0176 virtual bool corrected() const 0177 { 0178 return false; 0179 } surfaceInterpolationScheme.H
  • 25. 25 Interpolated valuemidPoint owner neighbour 𝟏 𝟐 𝝍 𝒐𝒘𝒏𝒆𝒓 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢 + 𝝍 𝒏𝒆𝒊𝒈𝒉𝒃𝒐𝒖𝒓 𝒄𝒆𝒍𝒍 𝒐𝒇 𝐟𝐚𝐜𝐞𝐢 𝝍 𝒇 𝐟𝐚𝐜𝐞𝐢 = Arithmetic mean
  • 26. 26 References [1] User Guide http://foam.sourceforge.net/docs/Guides-a4/UserGuide.pdf (accessed 06/15/2014)