diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C index 18585bc645d1db5b13784960fd315f3e8165d824..7f432462b1376577857571a4c3a6d365b86c6524 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C @@ -191,6 +191,13 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit ); } + // Additional weighting for constant and linear terms + for(label i = 0; i < B.n(); i++) + { + B[i][0] *= wts[0]; + B[i][1] *= wts[0]; + } + // Set the fit label stencilSize = C.size(); coeffsi.setSize(stencilSize); @@ -205,7 +212,7 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit for(label i=0; i<stencilSize; i++) { - coeffsi[i] = wts[i]*svd.VSinvUt()[0][i]; + coeffsi[i] = wts[0]*wts[i]*svd.VSinvUt()[0][i]; if (mag(coeffsi[i]) > maxCoeff) { maxCoeff = mag(coeffsi[i]); @@ -229,7 +236,8 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit // << " sing vals " << svd.S() << endl; // } - if (!goodFit) // (not good fit so increase weight in the centre) + if (!goodFit) // (not good fit so increase weight in the centre and weight + // for constant and linear terms) { // if (iIt == 7) // { @@ -237,7 +245,10 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit // ( // "FitData<Polynomial>::calcFit" // "(const List<point>& C, const label facei" - // ) << "Cannot fit face " << facei + // ) << "Cannot fit face " << facei << " iteration " << iIt + // << " with sum of weights " << sum(coeffsi) << nl + // << " Weights " << coeffsi << nl + // << " Linear weights " << wLin << " " << 1 - wLin << nl // << " sing vals " << svd.S() << endl; // } @@ -249,6 +260,12 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit B[0][j] *= 10; B[1][j] *= 10; } + + for(label i = 0; i < B.n(); i++) + { + B[i][0] *= 10; + B[i][1] *= 10; + } } }