diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index 65dd679ecd..a26179507a 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -566,7 +566,7 @@ int main(int argc, char *argv[]) IOobject ( "cellProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::MUST_READ, @@ -579,7 +579,7 @@ int main(int argc, char *argv[]) IOobject ( "boundaryProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::MUST_READ, @@ -603,7 +603,7 @@ int main(int argc, char *argv[]) IOobject ( "faceProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::MUST_READ, @@ -645,7 +645,7 @@ int main(int argc, char *argv[]) IOobject ( "pointProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::MUST_READ, diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C index 2940577d16..e310cc758f 100644 --- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C @@ -269,7 +269,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( this->polyMesh::name(), // region name of undecomposed mesh - "constant", + pointsInstance(), processorDb ), xferMove(procPoints), @@ -620,7 +620,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( "pointProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::NO_READ, @@ -635,7 +635,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( "faceProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::NO_READ, @@ -650,7 +650,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( "cellProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::NO_READ, @@ -665,7 +665,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( "boundaryProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::NO_READ, diff --git a/applications/utilities/postProcessing/wall/yPlusLES/Make/options b/applications/utilities/postProcessing/wall/yPlusLES/Make/options index 79fbbac91e..f6131ce41c 100644 --- a/applications/utilities/postProcessing/wall/yPlusLES/Make/options +++ b/applications/utilities/postProcessing/wall/yPlusLES/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/incompressible/LES/LESModel \ -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ diff --git a/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C b/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C index 82ee27fa0a..67dc0df3f0 100644 --- a/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C +++ b/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C @@ -34,6 +34,7 @@ Description #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" #include "LESModel.H" #include "nearWallDist.H" +#include "wallDist.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -49,7 +50,18 @@ int main(int argc, char *argv[]) { runTime.setTime(timeDirs[timeI], timeI); Info<< "Time = " << runTime.timeName() << endl; - mesh.readUpdate(); + fvMesh::readUpdateState state = mesh.readUpdate(); + + // Wall distance + if (timeI == 0 || state != fvMesh::UNCHANGED) + { + Info<< "Calculating wall distance\n" << endl; + wallDist y(mesh, true); + Info<< "Writing wall distance to field " + << y.name() << nl << endl; + y.write(); + } + volScalarField yPlus ( @@ -116,6 +128,9 @@ int main(int argc, char *argv[]) } } + Info<< "Writing yPlus to field " + << yPlus.name() << nl << endl; + yPlus.write(); } diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/Make/options b/applications/utilities/postProcessing/wall/yPlusRAS/Make/options index 89632547e0..9ec5fca52b 100644 --- a/applications/utilities/postProcessing/wall/yPlusRAS/Make/options +++ b/applications/utilities/postProcessing/wall/yPlusRAS/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C index 7d1e4796f2..a93712263e 100644 --- a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C +++ b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C @@ -34,6 +34,7 @@ Description #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" #include "RASModel.H" #include "wallFvPatch.H" +#include "wallDist.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -49,7 +50,17 @@ int main(int argc, char *argv[]) { runTime.setTime(timeDirs[timeI], timeI); Info<< "Time = " << runTime.timeName() << endl; - mesh.readUpdate(); + fvMesh::readUpdateState state = mesh.readUpdate(); + + // Wall distance + if (timeI == 0 || state != fvMesh::UNCHANGED) + { + Info<< "Calculating wall distance\n" << endl; + wallDist y(mesh, true); + Info<< "Writing wall distance to field " + << y.name() << nl << endl; + y.write(); + } volScalarField yPlus ( @@ -106,6 +117,9 @@ int main(int argc, char *argv[]) } } + Info<< "Writing yPlus to field " + << yPlus.name() << nl << endl; + yPlus.write(); } diff --git a/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C b/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C index a33e49b828..f1e1cd2780 100644 --- a/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C +++ b/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C @@ -153,37 +153,40 @@ Foam::label Foam::scotchDecomp::decompose const dictionary& scotchCoeffs = decompositionDict_.subDict("scotchCoeffs"); - Switch writeGraph(scotchCoeffs.lookup("writeGraph")); - - if (writeGraph) + if (scotchCoeffs.found("writeGraph")) { - OFstream str(mesh_.time().path() / mesh_.name() + ".grf"); + Switch writeGraph(scotchCoeffs.lookup("writeGraph")); - Info<< "Dumping Scotch graph file to " << str.name() << endl - << "Use this in combination with gpart." << endl; - - label version = 0; - str << version << nl; - // Numer of vertices - str << xadj.size()-1 << ' ' << adjncy.size() << nl; - // Numbering starts from 0 - label baseval = 0; - // Has weights? - label hasEdgeWeights = 0; - label hasVertexWeights = 0; - label numericflag = 10*hasEdgeWeights+hasVertexWeights; - str << baseval << ' ' << numericflag << nl; - for (label cellI = 0; cellI < xadj.size()-1; cellI++) + if (writeGraph) { - label start = xadj[cellI]; - label end = xadj[cellI+1]; - str << end-start; + OFstream str(mesh_.time().path() / mesh_.name() + ".grf"); - for (label i = start; i < end; i++) + Info<< "Dumping Scotch graph file to " << str.name() << endl + << "Use this in combination with gpart." << endl; + + label version = 0; + str << version << nl; + // Numer of vertices + str << xadj.size()-1 << ' ' << adjncy.size() << nl; + // Numbering starts from 0 + label baseval = 0; + // Has weights? + label hasEdgeWeights = 0; + label hasVertexWeights = 0; + label numericflag = 10*hasEdgeWeights+hasVertexWeights; + str << baseval << ' ' << numericflag << nl; + for (label cellI = 0; cellI < xadj.size()-1; cellI++) { - str << ' ' << adjncy[i]; + label start = xadj[cellI]; + label end = xadj[cellI+1]; + str << end-start; + + for (label i = start; i < end; i++) + { + str << ' ' << adjncy[i]; + } + str << nl; } - str << nl; } } } diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C index 5ad5dca8cd..5eae3a9f80 100644 --- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C +++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C @@ -480,7 +480,7 @@ void Foam::fvMatrix::setReference const bool forceReference ) { - if (celli >= 0 && (psi_.needReference() || forceReference)) + if ((forceReference || psi_.needReference()) && celli >= 0) { source()[celli] += diag()[celli]*value; diag()[celli] += diag()[celli]; diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.C b/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.C index 1ff00db7ba..38804ccbc1 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.C @@ -31,168 +31,6 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// Calculates per face a list of global cell/face indices. -void Foam::extendedStencil::calcFaceStencil -( - const labelListList& globalCellCells, - labelListList& faceStencil -) -{ - const polyBoundaryMesh& patches = mesh_.boundaryMesh(); - const label nBnd = mesh_.nFaces()-mesh_.nInternalFaces(); - const labelList& own = mesh_.faceOwner(); - const labelList& nei = mesh_.faceNeighbour(); - - - // Determine neighbouring global cell Cells - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - labelListList neiGlobalCellCells(nBnd); - forAll(patches, patchI) - { - const polyPatch& pp = patches[patchI]; - - if (pp.coupled()) - { - label faceI = pp.start(); - - forAll(pp, i) - { - neiGlobalCellCells[faceI-mesh_.nInternalFaces()] = - globalCellCells[own[faceI]]; - faceI++; - } - } - } - syncTools::swapBoundaryFaceList(mesh_, neiGlobalCellCells, false); - - - - // Construct stencil in global numbering - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - faceStencil.setSize(mesh_.nFaces()); - - labelHashSet faceStencilSet; - - for (label faceI = 0; faceI < mesh_.nInternalFaces(); faceI++) - { - faceStencilSet.clear(); - - const labelList& ownCCells = globalCellCells[own[faceI]]; - label globalOwn = ownCCells[0]; - // Insert cellCells - forAll(ownCCells, i) - { - faceStencilSet.insert(ownCCells[i]); - } - - const labelList& neiCCells = globalCellCells[nei[faceI]]; - label globalNei = neiCCells[0]; - // Insert cellCells - forAll(neiCCells, i) - { - faceStencilSet.insert(neiCCells[i]); - } - - // Guarantee owner first, neighbour second. - faceStencil[faceI].setSize(faceStencilSet.size()); - label n = 0; - faceStencil[faceI][n++] = globalOwn; - faceStencil[faceI][n++] = globalNei; - forAllConstIter(labelHashSet, faceStencilSet, iter) - { - if (iter.key() != globalOwn && iter.key() != globalNei) - { - faceStencil[faceI][n++] = iter.key(); - } - } - //Pout<< "internalface:" << faceI << " toc:" << faceStencilSet.toc() - // << " faceStencil:" << faceStencil[faceI] << endl; - } - forAll(patches, patchI) - { - const polyPatch& pp = patches[patchI]; - label faceI = pp.start(); - - if (pp.coupled()) - { - forAll(pp, i) - { - faceStencilSet.clear(); - - const labelList& ownCCells = globalCellCells[own[faceI]]; - label globalOwn = ownCCells[0]; - forAll(ownCCells, i) - { - faceStencilSet.insert(ownCCells[i]); - } - - // And the neighbours of the coupled cell - const labelList& neiCCells = - neiGlobalCellCells[faceI-mesh_.nInternalFaces()]; - label globalNei = neiCCells[0]; - forAll(neiCCells, i) - { - faceStencilSet.insert(neiCCells[i]); - } - - // Guarantee owner first, neighbour second. - faceStencil[faceI].setSize(faceStencilSet.size()); - label n = 0; - faceStencil[faceI][n++] = globalOwn; - faceStencil[faceI][n++] = globalNei; - forAllConstIter(labelHashSet, faceStencilSet, iter) - { - if (iter.key() != globalOwn && iter.key() != globalNei) - { - faceStencil[faceI][n++] = iter.key(); - } - } - - //Pout<< "coupledface:" << faceI - // << " toc:" << faceStencilSet.toc() - // << " faceStencil:" << faceStencil[faceI] << endl; - - faceI++; - } - } - else if (!isA(pp)) - { - forAll(pp, i) - { - faceStencilSet.clear(); - - const labelList& ownCCells = globalCellCells[own[faceI]]; - label globalOwn = ownCCells[0]; - forAll(ownCCells, i) - { - faceStencilSet.insert(ownCCells[i]); - } - - // Guarantee owner first, neighbour second. - faceStencil[faceI].setSize(faceStencilSet.size()); - label n = 0; - faceStencil[faceI][n++] = globalOwn; - forAllConstIter(labelHashSet, faceStencilSet, iter) - { - if (iter.key() != globalOwn) - { - faceStencil[faceI][n++] = iter.key(); - } - } - - //Pout<< "boundaryface:" << faceI - // << " toc:" << faceStencilSet.toc() - // << " faceStencil:" << faceStencil[faceI] << endl; - - faceI++; - } - } - } -} - - Foam::autoPtr Foam::extendedStencil::calcDistributeMap ( const globalIndex& globalNumbering, diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H b/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H index 6faff8f3a6..a1c6d41474 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H @@ -75,13 +75,6 @@ protected: // Protected Member Functions - //- Collect cell neighbours into extended stencil - void calcFaceStencil - ( - const labelListList& globalCellCells, - labelListList& faceStencil - ); - //- Calculate distribute map autoPtr calcDistributeMap ( diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C index 18585bc645..7f432462b1 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::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::calcFit for(label i=0; i maxCoeff) { maxCoeff = mag(coeffsi[i]); @@ -229,7 +236,8 @@ void Foam::FitData::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::calcFit // ( // "FitData::calcFit" // "(const List& 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::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; + } } } diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.C index 38a275aeb5..a6b699d20d 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.C +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.C @@ -45,25 +45,23 @@ namespace RASModels scalar mutRoughWallFunctionFvPatchScalarField::fnRough ( const scalar KsPlus, - const scalar Cs, - const scalar kappa + const scalar Cs ) const { - // Set deltaB based on non-dimensional roughness height - scalar deltaB = 0.0; + // Return fn based on non-dimensional roughness height + if (KsPlus < 90.0) { - deltaB = - 1.0/kappa - *log((KsPlus - 2.25)/87.75 + Cs*KsPlus) - *sin(0.4258*(log(KsPlus) - 0.811)); + return pow + ( + (KsPlus - 2.25)/87.75 + Cs*KsPlus, + sin(0.4258*(log(KsPlus) - 0.811)) + ); } else { - deltaB = 1.0/kappa*log(1.0 + Cs*KsPlus); + return (1.0 + Cs*KsPlus); } - - return exp(min(deltaB*kappa, 50.0)); } @@ -216,8 +214,8 @@ void mutRoughWallFunctionFvPatchScalarField::updateCoeffs() scalar yPlusLamNew = yPlusLam; if (KsPlus > 2.25) { - Edash = E/fnRough(KsPlus, Cs_[faceI], kappa); - yPlusLam = rasModel.yPlusLam(kappa, Edash); + Edash = E/fnRough(KsPlus, Cs_[faceI]); + yPlusLamNew = rasModel.yPlusLam(kappa, Edash); } if (debug) @@ -231,7 +229,9 @@ void mutRoughWallFunctionFvPatchScalarField::updateCoeffs() if (yPlus > yPlusLamNew) { - mutw[faceI] = muw[faceI]*(yPlus*kappa/log(Edash*yPlus) - 1); + mutw[faceI] = + muw[faceI] + *(yPlus*kappa/log(max(Edash*yPlus, 1+1e-4)) - 1); } else { diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.H index 88209f4184..b12ad6bc57 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.H +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.H @@ -83,12 +83,7 @@ class mutRoughWallFunctionFvPatchScalarField // Private member functions //- Compute the roughness function - scalar fnRough - ( - const scalar KsPlus, - const scalar Cs, - const scalar kappa - ) const; + scalar fnRough(const scalar KsPlus, const scalar Cs) const; public: diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.C index 7b6e14493e..afb08a5d52 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.C +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.C @@ -45,8 +45,7 @@ namespace RASModels scalar nutRoughWallFunctionFvPatchScalarField::fnRough ( const scalar KsPlus, - const scalar Cs, - const scalar kappa + const scalar Cs ) const { // Return fn based on non-dimensional roughness height @@ -205,7 +204,7 @@ void nutRoughWallFunctionFvPatchScalarField::updateCoeffs() if (KsPlus > 2.25) { - Edash = E/fnRough(KsPlus, Cs_[faceI], kappa); + Edash = E/fnRough(KsPlus, Cs_[faceI]); } if (yPlus > yPlusLam) diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.H index 968c5c3f8f..3371cbaa6d 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.H +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.H @@ -80,12 +80,7 @@ class nutRoughWallFunctionFvPatchScalarField // Private member functions //- Compute the roughness function - scalar fnRough - ( - const scalar KsPlus, - const scalar Cs, - const scalar kappa - ) const; + scalar fnRough(const scalar KsPlus, const scalar Cs) const; public: