From 7544110b0b36a933f80229c6a55260f2a2c95634 Mon Sep 17 00:00:00 2001 From: henry <Henry Weller h.weller@opencfd.co.uk> Date: Sun, 12 Oct 2008 11:44:29 +0100 Subject: [PATCH] Improved extendedStencil handling. --- .../fvMesh/extendedStencil/extendedStencil.H | 4 +-- .../extendedStencilTemplates.C | 31 +++++++++++++++++-- .../schemes/quadraticFit/quadraticFit.H | 2 +- .../schemes/quadraticFit/quadraticFitData.C | 24 +++++++++++--- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H b/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H index 1d00972403b..ad2f4e1b0b0 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H @@ -123,9 +123,9 @@ public: List<List<T> >& stencilFld ) const; - //- Given weights interpolate vol field + //- Calculate weighted sum of vol field template<class Type> - tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > interpolate + tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > weightedSum ( const GeometricField<Type, fvPatchField, volMesh>& fld, const List<List<scalar> >& stencilWeights diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilTemplates.C b/src/finiteVolume/fvMesh/extendedStencil/extendedStencilTemplates.C index a408621dc4c..31adb48392a 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilTemplates.C +++ b/src/finiteVolume/fvMesh/extendedStencil/extendedStencilTemplates.C @@ -77,7 +77,7 @@ void Foam::extendedStencil::collectData template<class Type> Foam::tmp<Foam::GeometricField<Type, Foam::fvsPatchField, Foam::surfaceMesh> > -Foam::extendedStencil::interpolate +Foam::extendedStencil::weightedSum ( const GeometricField<Type, fvPatchField, volMesh>& fld, const List<List<scalar> >& stencilWeights @@ -120,7 +120,34 @@ Foam::extendedStencil::interpolate sf[faceI] += stField[i]*stWeight[i]; } } - // And what for boundaries? + + // Coupled boundaries + /* + typename GeometricField<Type, fvsPatchField, surfaceMesh>:: + GeometricBoundaryField& bSfCorr = sf.boundaryField(); + forAll(bSfCorr, patchi) + { + fvsPatchField<Type>& pSfCorr = bSfCorr[patchi]; + + if (pSfCorr.coupled()) + { + label faceI = pSfCorr.patch().patch().start(); + + forAll(pSfCorr, i) + { + const List<Type>& stField = stencilFld[faceI]; + const List<scalar>& stWeight = stencilWeights[faceI]; + + forAll(stField, j) + { + pSfCorr[i] += stField[j]*stWeight[j]; + } + + faceI++; + } + } + } + */ return tsfCorr; } diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFit.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFit.H index 412b454015d..9db49968628 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFit.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFit.H @@ -122,7 +122,7 @@ public: const extendedStencil& stencil = cfd.stencil(); const List<scalarList>& f = cfd.fit(); - return stencil.interpolate(vf, f); + return stencil.weightedSum(vf, f); } }; diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFitData.C index 79f9107e97f..52cf371c70c 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFitData.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFitData.C @@ -41,6 +41,8 @@ namespace Foam // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +static int count = 0; + Foam::quadraticFitData::quadraticFitData ( const fvMesh& mesh, @@ -114,13 +116,15 @@ Foam::quadraticFitData::quadraticFitData interpPolySize[faci] = calcFit(stencilPoints[faci], faci); } - interpPolySize.write(); + Pout<< "count = " << count << endl; if (debug) { Info<< "quadraticFitData::quadraticFitData() :" << "Finished constructing polynomialFit data" << endl; + + interpPolySize.write(); } } @@ -270,8 +274,8 @@ Foam::label Foam::quadraticFitData::calcFit //goodFit = (fit0 > 0 && fit1 > 0); goodFit = - (mag(fit0 - w[faci])/w[faci] < 0.5) - && (mag(fit1 - (1 - w[faci]))/(1 - w[faci]) < 0.5); + (mag(fit0 - w[faci])/w[faci] < 0.15) + && (mag(fit1 - (1 - w[faci]))/(1 - w[faci]) < 0.15); //scalar w0Err = fit0/w[faci]; //scalar w1Err = fit1/(1 - w[faci]); @@ -312,11 +316,21 @@ Foam::label Foam::quadraticFitData::calcFit } } - //static const scalar alpha = 1.5; - //static const scalar beta = alpha/0.5; + // static const scalar L = 0.1; + // static const scalar R = 0.2; + + // static const scalar beta = 1.0/(R - L); + // static const scalar alpha = R*beta; if (goodFit) { + if ((mag(fit_[faci][0] - w[faci])/w[faci] < 0.15) + && (mag(fit_[faci][1] - (1 - w[faci]))/(1 - w[faci]) < 0.15)) + { + count++; + //Pout<< "fit " << mag(fit_[faci][0] - w[faci])/w[faci] << " " << mag(fit_[faci][1] - (1 - w[faci]))/(1 - w[faci]) << endl; + } + // scalar limiter = // max // ( -- GitLab