diff --git a/applications/solvers/multiphase/bubbleFoam/wallFunctions.H b/applications/solvers/multiphase/bubbleFoam/wallFunctions.H index bc9e93c63dfda8a7cebd087277b66547b16f7bf2..0d047468408c219a0cdb91d6f5fd81d4341b0de0 100644 --- a/applications/solvers/multiphase/bubbleFoam/wallFunctions.H +++ b/applications/solvers/multiphase/bubbleFoam/wallFunctions.H @@ -4,6 +4,7 @@ scalar Cmu25 = ::pow(Cmu.value(), 0.25); scalar Cmu75 = ::pow(Cmu.value(), 0.75); scalar kappa_ = kappa.value(); + scalar nub_ = nub.value(); const fvPatchList& patches = mesh.boundary(); @@ -32,7 +33,7 @@ if (isA<wallFvPatch>(currPatch)) { - const scalarField& nuw = nutb.boundaryField()[patchi]; + const scalarField& nutbw = nutb.boundaryField()[patchi]; scalarField magFaceGradU(mag(Ub.boundaryField()[patchi].snGrad())); @@ -43,7 +44,7 @@ scalar yPlus = Cmu25*y[patchi][facei] *::sqrt(k[faceCelli]) - /nub.value(); + /nub_; // For corner cells (with two boundary or more faces), @@ -59,7 +60,7 @@ if (yPlus > 11.6) { G[faceCelli] += - nuw[facei]*magFaceGradU[facei] + (nutbw[facei] + nub_)*magFaceGradU[facei] *Cmu25*::sqrt(k[faceCelli]) /(kappa_*y[patchi][facei]); } diff --git a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCodeContext.C b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCodeContext.C index 81c1a50ceb7d4256e3b04a79dea884429b822a93..93d6ebbdd722790aecec848957251fed5e51fae2 100644 --- a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCodeContext.C +++ b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCodeContext.C @@ -46,7 +46,6 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict) const entry& codeEntry = dict.lookupEntry("code", false, false); code_ = stringOps::trim(codeEntry.stream()); stringOps::inplaceExpand(code_, dict); - addLineDirective(code_, codeEntry.startLineNumber(), dict.name()); } // note: removes any leading/trailing whitespace @@ -64,7 +63,6 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict) { include_ = stringOps::trim(includePtr->stream()); stringOps::inplaceExpand(include_, dict); - addLineDirective(include_, includePtr->startLineNumber(), dict.name()); } // optional @@ -92,6 +90,28 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict) OSHA1stream os; os << include_ << options_ << libs_ << localCode_ << code_; sha1_ = os.digest(); + + + + // Add line number after calculating sha1 since includes processorDDD + // in path which differs between processors. + + { + const entry& codeEntry = dict.lookupEntry("code", false, false); + addLineDirective(code_, codeEntry.startLineNumber(), dict.name()); + } + if (includePtr) + { + addLineDirective(include_, includePtr->startLineNumber(), dict.name()); + } + if (optionsPtr) + { + addLineDirective(options_, optionsPtr->startLineNumber(), dict.name()); + } + if (libsPtr) + { + addLineDirective(libs_, libsPtr->startLineNumber(), dict.name()); + } } diff --git a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C index c1a2b66f1ebc447bfa45f9dbebed2fe54fade000..85590cc5e27b74172509fe2e4a205c3e4062e1da 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C +++ b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -96,7 +96,8 @@ void Foam::plane::calcPntAndVec " const point&,\n" " const point&\n" ")\n" - ) << "Bad points." << abort(FatalError); + ) << "Bad points:" << point1 << ' ' << point2 << ' ' << point3 + << abort(FatalError); } unitVector_ = line12 ^ line23; @@ -112,7 +113,8 @@ void Foam::plane::calcPntAndVec " const point&,\n" " const point&\n" ")\n" - ) << "Plane normal defined with zero length" + ) << "Plane normal defined with zero length" << nl + << "Bad points:" << point1 << ' ' << point2 << ' ' << point3 << abort(FatalError); } @@ -137,7 +139,7 @@ Foam::plane::plane(const vector& normalVector) else { FatalErrorIn("plane::plane(const vector&)") - << "plane normal has zero length" + << "plane normal has zero length. basePoint:" << basePoint_ << abort(FatalError); } } @@ -158,7 +160,7 @@ Foam::plane::plane(const point& basePoint, const vector& normalVector) else { FatalErrorIn("plane::plane(const point&, const vector&)") - << "plane normal has zero length" + << "plane normal has zero length. basePoint:" << basePoint_ << abort(FatalError); } } @@ -228,8 +230,7 @@ Foam::plane::plane(const dictionary& dict) ( "plane::plane(const dictionary&)", dict - ) - << "Invalid plane type: " << planeType + ) << "Invalid plane type: " << planeType << abort(FatalIOError); } } @@ -250,7 +251,7 @@ Foam::plane::plane(Istream& is) else { FatalErrorIn("plane::plane(Istream& is)") - << "plane normal has zero length" + << "plane normal has zero length. basePoint:" << basePoint_ << abort(FatalError); } } diff --git a/src/OpenFOAM/primitives/strings/wordRe/wordRe.H b/src/OpenFOAM/primitives/strings/wordRe/wordRe.H index 8fd3eabc63d6f4fbffdea305303bb3b05923dc79..4136aa02cb524588f4b4df17e68ff8d08f28e08b 100644 --- a/src/OpenFOAM/primitives/strings/wordRe/wordRe.H +++ b/src/OpenFOAM/primitives/strings/wordRe/wordRe.H @@ -52,6 +52,7 @@ SourceFiles #include "word.H" #include "regExp.H" +#include "keyType.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -60,7 +61,6 @@ namespace Foam // Forward declaration of friend functions and operators class wordRe; - class Istream; class Ostream; @@ -119,6 +119,9 @@ public: //- Construct as copy inline wordRe(const wordRe&); + //- Construct from keyType + inline wordRe(const keyType&, const compOption=LITERAL); + //- Construct as copy of word inline wordRe(const word&); @@ -206,6 +209,10 @@ public: //- Copy word, never a regular expression inline const wordRe& operator=(const word&); + //- Copy keyType, auto-test for regular expression + // Always case sensitive + inline const wordRe& operator=(const keyType&); + //- Copy string, auto-test for regular expression // Always case sensitive inline const wordRe& operator=(const string&); diff --git a/src/OpenFOAM/primitives/strings/wordRe/wordReI.H b/src/OpenFOAM/primitives/strings/wordRe/wordReI.H index 713c003064180706e4dc31781682e40a1a6b9630..fcbd1c384562015228967b69300937456b236ba1 100644 --- a/src/OpenFOAM/primitives/strings/wordRe/wordReI.H +++ b/src/OpenFOAM/primitives/strings/wordRe/wordReI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -65,6 +65,18 @@ inline Foam::wordRe::wordRe(const word& str) {} +inline Foam::wordRe::wordRe(const keyType& str, const compOption opt) +: + word(str, false), + re_() +{ + if (str.isPattern()) + { + compile(opt); + } +} + + inline Foam::wordRe::wordRe(const char* str, const compOption opt) : word(str, false), @@ -236,6 +248,17 @@ inline const Foam::wordRe& Foam::wordRe::operator=(const word& str) } +inline const Foam::wordRe& Foam::wordRe::operator=(const keyType& str) +{ + string::operator=(str); + if (str.isPattern()) + { + compile(); + } + return *this; +} + + inline const Foam::wordRe& Foam::wordRe::operator=(const string& str) { string::operator=(str); diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C index 0d5d6ef768677b7d56667389b52731329edd5902..e10e44d1efa510878a0a8a2c01e0ace3f250d1da 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -109,6 +109,12 @@ bool Foam::combineFaces::validFace return false; } + bool isNonManifold = bigFace.checkPointManifold(false, NULL); + if (isNonManifold) + { + return false; + } + // Check for convexness face f(getOutsideFace(bigFace)); @@ -984,6 +990,7 @@ void Foam::combineFaces::setUnrefinement zoneFlip // face flip in zone ) ); + restoredFaces.insert(masterFaceI, masterFaceI); // Add the previously removed faces for (label i = 1; i < faces.size(); i++) @@ -991,7 +998,7 @@ void Foam::combineFaces::setUnrefinement //Pout<< "Restoring removed face with vertices " << faces[i] // << endl; - meshMod.setAction + label faceI = meshMod.setAction ( polyAddFace ( @@ -1007,6 +1014,7 @@ void Foam::combineFaces::setUnrefinement zoneFlip // zoneFlip ) ); + restoredFaces.insert(faceI, masterFaceI); } // Clear out restored set diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C index 9d8e9ba2ca2176f6ff13875d855470a4e16202b8..4441e3a00de078662809233350415c82eaf1a97b 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -302,6 +302,35 @@ void Foam::polyTopoChange::getMergeSets } +bool Foam::polyTopoChange::hasValidPoints(const face& f) const +{ + forAll(f, fp) + { + if (f[fp] < 0 || f[fp] >= points_.size()) + { + return false; + } + } + return true; +} + + +Foam::pointField Foam::polyTopoChange::facePoints(const face& f) const +{ + pointField points(f.size()); + forAll(f, fp) + { + if (f[fp] < 0 && f[fp] >= points_.size()) + { + FatalErrorIn("polyTopoChange::facePoints(const face&) const") + << "Problem." << abort(FatalError); + } + points[fp] = points_[f[fp]]; + } + return points; +} + + void Foam::polyTopoChange::checkFace ( const face& f, @@ -329,7 +358,14 @@ void Foam::polyTopoChange::checkFace << "f:" << f << " faceI(-1 if added face):" << faceI << " own:" << own << " nei:" << nei - << " patchI:" << patchI << abort(FatalError); + << " patchI:" << patchI << nl; + if (hasValidPoints(f)) + { + FatalError + << "points (removed points marked with " + << vector::max << ") " << facePoints(f); + } + FatalError << abort(FatalError); } } else @@ -344,7 +380,14 @@ void Foam::polyTopoChange::checkFace << "f:" << f << " faceI(-1 if added face):" << faceI << " own:" << own << " nei:" << nei - << " patchI:" << patchI << abort(FatalError); + << " patchI:" << patchI << nl; + if (hasValidPoints(f)) + { + FatalError + << "points (removed points marked with " + << vector::max << ") : " << facePoints(f); + } + FatalError << abort(FatalError); } if (nei <= own) @@ -358,7 +401,14 @@ void Foam::polyTopoChange::checkFace << "f:" << f << " faceI(-1 if added face):" << faceI << " own:" << own << " nei:" << nei - << " patchI:" << patchI << abort(FatalError); + << " patchI:" << patchI << nl; + if (hasValidPoints(f)) + { + FatalError + << "points (removed points marked with " + << vector::max << ") : " << facePoints(f); + } + FatalError << abort(FatalError); } } @@ -373,7 +423,14 @@ void Foam::polyTopoChange::checkFace << "f:" << f << " faceI(-1 if added face):" << faceI << " own:" << own << " nei:" << nei - << " patchI:" << patchI << abort(FatalError); + << " patchI:" << patchI << nl; + if (hasValidPoints(f)) + { + FatalError + << "points (removed points marked with " + << vector::max << ") : " << facePoints(f); + } + FatalError << abort(FatalError); } if (faceI >= 0 && faceI < faces_.size() && faceRemoved(faceI)) { @@ -386,7 +443,14 @@ void Foam::polyTopoChange::checkFace << "f:" << f << " faceI(-1 if added face):" << faceI << " own:" << own << " nei:" << nei - << " patchI:" << patchI << abort(FatalError); + << " patchI:" << patchI << nl; + if (hasValidPoints(f)) + { + FatalError + << "points (removed points marked with " + << vector::max << ") : " << facePoints(f); + } + FatalError << abort(FatalError); } forAll(f, fp) { @@ -401,7 +465,14 @@ void Foam::polyTopoChange::checkFace << "f:" << f << " faceI(-1 if added face):" << faceI << " own:" << own << " nei:" << nei - << " patchI:" << patchI << abort(FatalError); + << " patchI:" << patchI << nl; + if (hasValidPoints(f)) + { + FatalError + << "points (removed points marked with " + << vector::max << ") : " << facePoints(f); + } + FatalError << abort(FatalError); } } } @@ -729,8 +800,16 @@ void Foam::polyTopoChange::getFaceOrder << " neighbour " << faceNeighbour_[faceI] << " region " << region_[faceI] << endl << "This is usually caused by not specifying a patch for" - << " a boundary face." - << abort(FatalError); + << " a boundary face." << nl + << "Switch on the polyTopoChange::debug flag to catch" + << " this error earlier." << nl; + if (hasValidPoints(faces_[faceI])) + { + FatalError + << "points (removed points marked with " + << vector::max << ") " << facePoints(faces_[faceI]); + } + FatalError << abort(FatalError); } } } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H index 1e5ae305ff10926ec17541bab9b2e421b2cf7e68..48b7862646b6968fde7a52a5b18b6573a679454c 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -239,6 +239,12 @@ class polyTopoChange List<objectMap>& cellsFromCells ); + //- Are all face vertices valid + bool hasValidPoints(const face&) const; + + //- Return face points + pointField facePoints(const face& f) const; + //- Check inputs to modFace or addFace void checkFace ( diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 95ca51d2f6ae317721c9fbc1fe88fc8ff5b8e5b3..446b64460a033bb4f0c04ebe953614cd0d4a6656 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -208,9 +208,6 @@ $(interpolation)/interpolationPoint/pointMVCWeight.C $(interpolation)/interpolationPoint/makeInterpolationPoint.C volPointInterpolation = interpolation/volPointInterpolation -/* -$(volPointInterpolation)/pointPatchInterpolation/pointPatchInterpolation.C -*/ $(volPointInterpolation)/volPointInterpolation.C surfaceInterpolation = interpolation/surfaceInterpolation diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C index 88f0bc01c9d3a01fe7c980a3147b5087607ae843..3440de6f66fd77a80aa8dfc777546125bcbcc188 100644 --- a/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C +++ b/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C @@ -56,7 +56,7 @@ Foam::fv::correctedSnGrad<Type>::fullGradCorrection gradScheme<Type>::New ( mesh, - mesh.gradScheme(vf.name()) + mesh.gradScheme("grad(" + vf.name() + ')') )().grad(vf, "grad(" + vf.name() + ')') ); tssf().rename("snGradCorr(" + vf.name() + ')'); @@ -108,7 +108,7 @@ Foam::fv::correctedSnGrad<Type>::correction gradScheme<typename pTraits<Type>::cmptType>::New ( mesh, - mesh.gradScheme(ssf.name()) + mesh.gradScheme("grad(" + ssf.name() + ')') )() //gaussGrad<typename pTraits<Type>::cmptType>(mesh) .grad(vf.component(cmpt)) diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwind.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwind.H index 6c00e4deb237d75829f6f45f6c796ab649342e90..13b98512df680f03e1d89f12f104f58af6a6257c 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwind.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwind.H @@ -111,7 +111,16 @@ public: mesh.gradScheme(gradSchemeName_) ) ) - {} + { + if (!schemeData.eof()) + { + IOWarningIn("linearUpwind(const fvMesh&, Istream&)", schemeData) + << "unexpected additional entries in stream." << nl + << " Only the name of the gradient scheme in the" + " 'gradSchemes' dictionary should be specified." + << endl; + } + } //- Construct from faceFlux and Istream linearUpwind @@ -131,7 +140,16 @@ public: mesh.gradScheme(gradSchemeName_) ) ) - {} + { + if (!schemeData.eof()) + { + IOWarningIn("linearUpwind(const fvMesh&, Istream&)", schemeData) + << "unexpected additional entries in stream." << nl + << " Only the name of the gradient scheme in the" + " 'gradSchemes' dictionary should be specified." + << endl; + } + } // Member Functions diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwindV.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwindV.H index 262d54115db81ec24feb58b905593da4d9bbe610..ce07b1017bfe555861ae749b0e5ff3bd83c77fff 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwindV.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearUpwind/linearUpwindV.H @@ -110,7 +110,13 @@ public: mesh.gradScheme(gradSchemeName_) ) ) - {} + { + IOWarningIn("linearUpwindV(const fvMesh&, Istream&)", schemeData) + << "unexpected additional entries in stream." << nl + << " Only the name of the gradient scheme in the" + " 'gradSchemes' dictionary should be specified." + << endl; + } //- Construct from faceFlux and Istream linearUpwindV @@ -130,7 +136,13 @@ public: mesh.gradScheme(gradSchemeName_) ) ) - {} + { + IOWarningIn("linearUpwindV(const fvMesh&, Istream&)", schemeData) + << "unexpected additional entries in stream." << nl + << " Only the name of the gradient scheme in the" + " 'gradSchemes' dictionary should be specified." + << endl; + } // Member Functions diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C index cdaa9f83c773bee458239028bcd93945698b072d..a1e274d2c0862e4f95237a8f38728267d578461b 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C @@ -2615,9 +2615,12 @@ void Foam::autoLayerDriver::addLayers extrudeStatus ); - Info<< "Extruding " << countExtrusion(pp, extrudeStatus) - << " out of " << returnReduce(pp().size(), sumOp<label>()) - << " faces. Removed extrusion at " << nTotChanged << " faces." + label nExtruded = countExtrusion(pp, extrudeStatus); + label nTotFaces = returnReduce(pp().size(), sumOp<label>()); + Info<< "Extruding " << nExtruded + << " out of " << nTotFaces + << " faces (" << 100.0*nExtruded/nTotFaces << "%)." + << " Removed extrusion at " << nTotChanged << " faces." << endl; if (nTotChanged == 0) diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C index dc16bd760f8f7b1985f380517979c69b54642034..6cc8d7c7bb5f7122f037386f0d1256ecab65c460 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C @@ -277,7 +277,11 @@ Foam::label Foam::meshRefinement::mergePatchFacesUndo } } - // Get all sets of faces that can be merged + // Get all sets of faces that can be merged. Since only faces on the same + // patch get merged there is no risk of e.g. patchID faces getting merged + // with original patches (or even processor patches). There is a risk + // though of original patchfaces getting merged if they make a small + // angle. Would be pretty weird starting mesh though. labelListList allFaceSets ( faceCombiner.getMergeSets @@ -352,27 +356,20 @@ Foam::label Foam::meshRefinement::mergePatchFacesUndo // Get the kept faces that need to be recalculated. // Merging two boundary faces might shift the cell centre // (unless the faces are absolutely planar) - labelHashSet retestFaces(6*allFaceSets.size()); + labelHashSet retestFaces(2*allFaceSets.size()); forAll(allFaceSets, setI) { label oldMasterI = allFaceSets[setI][0]; - - label faceI = map().reverseFaceMap()[oldMasterI]; - - // faceI is always uncoupled boundary face - const cell& cFaces = mesh_.cells()[mesh_.faceOwner()[faceI]]; - - forAll(cFaces, i) - { - retestFaces.insert(cFaces[i]); - } + retestFaces.insert(map().reverseFaceMap()[oldMasterI]); } - updateMesh(map, retestFaces.toc()); + updateMesh(map, growFaceCellFace(retestFaces)); if (debug) { // Check sync + Pout<< "Checking sync after initial merging " << nFaceSets + << " faces." << endl; checkData(); Pout<< "Writing initial merged-faces mesh to time " @@ -555,26 +552,18 @@ Foam::label Foam::meshRefinement::mergePatchFacesUndo // Get the kept faces that need to be recalculated. // Merging two boundary faces might shift the cell centre // (unless the faces are absolutely planar) - labelHashSet retestFaces(6*restoredFaces.size()); + labelHashSet retestFaces(2*restoredFaces.size()); - forAll(restoredFaces, setI) + forAllConstIter(Map<label>, restoredFaces, iter) { - label faceI = restoredFaces[setI]; - // faceI is always uncoupled boundary face - const cell& cFaces = mesh_.cells()[mesh_.faceOwner()[faceI]]; - - forAll(cFaces, i) - { - retestFaces.insert(cFaces[i]); - } + retestFaces.insert(iter.key()); } - // Experimental:restore all points/face/cells in maps updateMesh ( map, - retestFaces.toc(), + growFaceCellFace(retestFaces), restoredPoints, restoredFaces, restoredCells @@ -583,6 +572,8 @@ Foam::label Foam::meshRefinement::mergePatchFacesUndo if (debug) { // Check sync + Pout<< "Checking sync after restoring " << retestFaces.size() + << " faces." << endl; checkData(); Pout<< "Writing merged-faces mesh to time " @@ -635,7 +626,26 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::doRemovePoints mesh_.setInstance(timeName()); pointRemover.updateMesh(map); - updateMesh(map, labelList(0)); + + + // Retest all affected faces and all the cells using them + labelHashSet retestFaces(pointRemover.savedFaceLabels().size()); + forAll(pointRemover.savedFaceLabels(), i) + { + label faceI = pointRemover.savedFaceLabels()[i]; + if (faceI >= 0) + { + retestFaces.insert(faceI); + } + } + updateMesh(map, growFaceCellFace(retestFaces)); + + if (debug) + { + // Check sync + Pout<< "Checking sync after removing points." << endl; + checkData(); + } return map; } @@ -689,7 +699,25 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::doRestorePoints mesh_.setInstance(timeName()); pointRemover.updateMesh(map); - updateMesh(map, labelList(0)); + + labelHashSet retestFaces(2*facesToRestore.size()); + forAll(facesToRestore, i) + { + label faceI = map().reverseFaceMap()[facesToRestore[i]]; + if (faceI >= 0) + { + retestFaces.insert(faceI); + } + } + updateMesh(map, growFaceCellFace(retestFaces)); + + if (debug) + { + // Check sync + Pout<< "Checking sync after restoring points on " + << facesToRestore.size() << " faces." << endl; + checkData(); + } return map; } diff --git a/src/parallel/decompose/scotchDecomp/scotchDecomp.C b/src/parallel/decompose/scotchDecomp/scotchDecomp.C index 7efb29d40ca2f29542e59130777f8e785c1c8a49..17ff685d49e2cfd6b32342b79e128f0d97f65aed 100644 --- a/src/parallel/decompose/scotchDecomp/scotchDecomp.C +++ b/src/parallel/decompose/scotchDecomp/scotchDecomp.C @@ -65,7 +65,7 @@ License The current default mapping strategy in Scotch can be seen by using the "-vs" option of program gmap. It is, to date: - b + r { job=t, map=t, @@ -76,11 +76,17 @@ License { asc=b { - bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005}, - org=f{move=80,pass=-1,bal=0.005}, + bnd= + ( + d{pass=40,dif=1,rem=1} + | + ) + f{move=80,pass=-1,bal=0.002491}, + org=f{move=80,pass=-1,bal=0.002491}, width=3 }, - low=h{pass=10}f{move=80,pass=-1,bal=0.0005}, + low=h{pass=10} + f{move=80,pass=-1,bal=0.002491}, type=h, vert=80, rat=0.8 @@ -89,11 +95,17 @@ License { asc=b { - bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005}, - org=f{move=80,pass=-1,bal=0.005}, + bnd= + ( + d{pass=40,dif=1,rem=1} + | + ) + f{move=80,pass=-1,bal=0.002491}, + org=f{move=80,pass=-1,bal=0.002491}, width=3 }, - low=h{pass=10}f{move=80,pass=-1,bal=0.0005}, + low=h{pass=10} + f{move=80,pass=-1,bal=0.002491}, type=h, vert=80, rat=0.8 @@ -102,6 +114,9 @@ License } + Note: instead of gmap run gpart <nProcs> -vs <grfFile> + where <grfFile> can be obtained by running with 'writeGraph=true' + \*---------------------------------------------------------------------------*/ #include "scotchDecomp.H" diff --git a/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C b/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C index 54ebb5aa9a1ea91346f23e6335a5c670128a4760..1c9d53d391861712c843b0f50c42fa6e28398108 100644 --- a/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C +++ b/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C @@ -390,7 +390,7 @@ void kOmegaSST::correct() } tmp<volTensorField> tgradU = fvc::grad(U_); - volScalarField S2(magSqr(symm(tgradU()))); + volScalarField S2(2*magSqr(symm(tgradU()))); volScalarField GbyMu((tgradU() && dev(twoSymm(tgradU())))); volScalarField G("RASModel::G", mut_*GbyMu); tgradU.clear(); @@ -448,7 +448,7 @@ void kOmegaSST::correct() // Re-calculate viscosity - mut_ = a1_*rho_*k_/max(a1_*omega_, F2()*sqrt(2.0*S2)); + mut_ = a1_*rho_*k_/max(a1_*omega_, F2()*sqrt(S2)); mut_.correctBoundaryConditions(); // Re-calculate thermal diffusivity diff --git a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C index c94f2f1bad0e0907182a015749f6587e299f8907..f8ab7acf602464c0e1c04a12913f047eac8f423f 100644 --- a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C +++ b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -328,7 +328,7 @@ kOmegaSSTSAS::kOmegaSSTSAS bound(k_, kMin_); bound(omega_, omegaMin_); - updateSubGridScaleFields(magSqr(2.0*symm(fvc::grad(U)))); + updateSubGridScaleFields(2.0*magSqr(symm(fvc::grad(U)))); printCoeffs(); } @@ -345,7 +345,7 @@ void kOmegaSSTSAS::correct(const tmp<volTensorField>& gradU) y_.correct(); } - volScalarField S2(magSqr(2.0*symm(gradU()))); + volScalarField S2(2.0*magSqr(symm(gradU()))); gradU.clear(); volVectorField gradK(fvc::grad(k_)); diff --git a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H index 5ff2022a296b13f657a082023bb3ef2f25c6e45e..bf7ef1b54abf2a592639cfd6fffe962dbaf1badb 100644 --- a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H +++ b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H @@ -28,6 +28,12 @@ Description kOmegaSSTSAS LES turbulence model for incompressible flows References: + Evaluation of the SST-SAS model: Channel flow, asymmetric diffuser and axi- + symmetric hill + European Conference on Computational Fluid Dynamics + ECCOMAS CFD 2006 + Lars Davison + A Scale-Adaptive Simulation Model using Two-Equation Models AIAA 2005-1095 F. R. Menter and Y. Egorov diff --git a/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C b/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C index 9e34f054b7c84c34da220c8336f45754fa79275b..6baeaf5a0ed226d49157978d9d2813cb4a4e2b4b 100644 --- a/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C +++ b/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C @@ -347,8 +347,8 @@ void kOmegaSST::correct() y_.correct(); } - const volScalarField S2(magSqr(symm(fvc::grad(U_)))); - volScalarField G("RASModel::G", nut_*2*S2); + const volScalarField S2(2*magSqr(symm(fvc::grad(U_)))); + volScalarField G("RASModel::G", nut_*S2); // Update omega and G at the wall omega_.boundaryField().updateCoeffs(); @@ -368,7 +368,7 @@ void kOmegaSST::correct() - fvm::Sp(fvc::div(phi_), omega_) - fvm::laplacian(DomegaEff(F1), omega_) == - gamma(F1)*2*S2 + gamma(F1)*S2 - fvm::Sp(beta(F1)*omega_, omega_) - fvm::SuSp ( @@ -402,7 +402,7 @@ void kOmegaSST::correct() // Re-calculate viscosity - nut_ = a1_*k_/max(a1_*omega_, F2()*sqrt(2*S2)); + nut_ = a1_*k_/max(a1_*omega_, F2()*sqrt(S2)); nut_.correctBoundaryConditions(); } diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes index 641e6fd3be40cecf656c784660dcf46cb5d8f539..fa9f78a717235ee45937773133b9172255eab4f5 100644 --- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,epsilon) Gauss upwind; div(phi,R) Gauss upwind; div(R) Gauss linear; - div(Ji,Ii_h) Gauss linearUpwind Gauss linear; //Gauss upwind; + div(Ji,Ii_h) Gauss linearUpwind grad(Ii_h); div((muEff*dev2(T(grad(U))))) Gauss linear; } diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes index 9a1e63c22091e59ecf0ab5af1e19ee2d4edaf68e..bc70aee53f10b174191fb7d18f0a6a5e8c9ff835 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,epsilon) Gauss upwind; div(phi,R) Gauss upwind; div(R) Gauss linear; - div(Ji,Ii_h) Gauss linearUpwind Gauss linear; //Gauss upwind; + div(Ji,Ii_h) Gauss linearUpwind grad(U); div((muEff*dev2(T(grad(U))))) Gauss linear; } diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/fvSchemes b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/fvSchemes index 9a1e63c22091e59ecf0ab5af1e19ee2d4edaf68e..bc70aee53f10b174191fb7d18f0a6a5e8c9ff835 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/fvSchemes +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,epsilon) Gauss upwind; div(phi,R) Gauss upwind; div(R) Gauss linear; - div(Ji,Ii_h) Gauss linearUpwind Gauss linear; //Gauss upwind; + div(Ji,Ii_h) Gauss linearUpwind grad(U); div((muEff*dev2(T(grad(U))))) Gauss linear; } diff --git a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/Allrun b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/Allrun index 99209508d7e56c0d6c77b41dd3d2f0e7ddae8ef3..d30f1362fcadcbec82ad6537e7b846d481719847 100755 --- a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/Allrun +++ b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/Allrun @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash cd ${0%/*} || exit 1 # run from this directory # Source tutorial run functions diff --git a/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes b/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes index 74a0e5bc10c9e3d904bc9bc9dfffee3599b95715..64136cf6f85bc76d01e02e800b7049660e03d753 100644 --- a/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes +++ b/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes @@ -30,8 +30,8 @@ gradSchemes divSchemes { default none; - div(phi,U) Gauss linearUpwind Gauss linear; - div(phi,nuTilda) Gauss linearUpwind Gauss linear; + div(phi,U) Gauss linearUpwind grad(U); + div(phi,nuTilda) Gauss linearUpwind grad(nuTilda); div((nuEff*dev(T(grad(U))))) Gauss linear; } diff --git a/tutorials/multiphase/LTSInterFoam/wigleyHull/system/fvSchemes b/tutorials/multiphase/LTSInterFoam/wigleyHull/system/fvSchemes index 77c9b176542b5a0b7bf6f36500b78b47d274e170..77816cabb7317e4849c79954bbed1c64a42d7dc2 100644 --- a/tutorials/multiphase/LTSInterFoam/wigleyHull/system/fvSchemes +++ b/tutorials/multiphase/LTSInterFoam/wigleyHull/system/fvSchemes @@ -27,7 +27,7 @@ gradSchemes divSchemes { - div(rho*phi,U) Gauss linearUpwind Gauss linear; + div(rho*phi,U) Gauss linearUpwind grad(U); div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss interfaceCompression; div(phi,k) Gauss upwind; diff --git a/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes b/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes index c7632224d4e3942a8a5f13cc74b517943e348650..c3762a5d7aa2413c5c5793d409b56387380f6058 100644 --- a/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes +++ b/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes @@ -27,9 +27,9 @@ interpolationSchemes divSchemes { default none; - div(rhoPhi,U) Gauss linearUpwind Gauss linear 1; - div(phi,omega) Gauss linearUpwind Gauss linear 1; - div(phi,k) Gauss linearUpwind Gauss linear 1; + div(rhoPhi,U) Gauss linearUpwind grad(U); + div(phi,omega) Gauss linearUpwind grad(omega); + div(phi,k) Gauss linearUpwind grad(k); div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss interfaceCompression;