diff --git a/applications/solvers/multiphase/interFoam/overInterDyMFoam/createDyMControls.H b/applications/solvers/multiphase/interFoam/overInterDyMFoam/createDyMControls.H index 00673cec24..4864523375 100644 --- a/applications/solvers/multiphase/interFoam/overInterDyMFoam/createDyMControls.H +++ b/applications/solvers/multiphase/interFoam/overInterDyMFoam/createDyMControls.H @@ -28,3 +28,8 @@ bool ddtCorr ( pimple.dict().lookupOrDefault("ddtCorr", true) ); + +bool adjustFringe +( + pimple.dict().lookupOrDefault("oversetAdjustPhi", false) +); diff --git a/applications/solvers/multiphase/interFoam/overInterDyMFoam/interDyMFoam.C b/applications/solvers/multiphase/interFoam/overInterDyMFoam/interDyMFoam.C index 075676da77..4a986ef175 100644 --- a/applications/solvers/multiphase/interFoam/overInterDyMFoam/interDyMFoam.C +++ b/applications/solvers/multiphase/interFoam/overInterDyMFoam/interDyMFoam.C @@ -65,7 +65,7 @@ int main(int argc, char *argv[]) #include "createTime.H" #include "createDynamicFvMesh.H" #include "initContinuityErrs.H" - #include "createControl.H" + pimpleControl pimple(mesh); #include "createTimeControls.H" #include "createDyMControls.H" #include "createFields.H" diff --git a/applications/solvers/multiphase/interFoam/overInterDyMFoam/pEqn.H b/applications/solvers/multiphase/interFoam/overInterDyMFoam/pEqn.H index c11ce1dba5..0c63e22006 100644 --- a/applications/solvers/multiphase/interFoam/overInterDyMFoam/pEqn.H +++ b/applications/solvers/multiphase/interFoam/overInterDyMFoam/pEqn.H @@ -46,6 +46,13 @@ phiHbyA += phig; + if (adjustFringe) + { + fvc::makeRelative(phiHbyA, U); + oversetAdjustPhi(phiHbyA, U); + fvc::makeAbsolute(phiHbyA, U); + } + // Update the pressure BCs to ensure flux consistency constrainPressure(p_rgh, U, phiHbyA, rAUf, MRF); @@ -72,7 +79,8 @@ "minGradP", fvc::reconstruct((phig - p_rghEqn.flux())/rAUf) ); - U = HbyA + rAU*cellMask*minGradP; + //U = HbyA + rAU*cellMask*minGradP; + U = fvc::reconstruct(phi); U.correctBoundaryConditions(); fvOptions.correct(U); } diff --git a/applications/solvers/multiphase/interFoam/overInterDyMFoam/readControls.H b/applications/solvers/multiphase/interFoam/overInterDyMFoam/readControls.H index 0df2a74f30..d8481c8870 100644 --- a/applications/solvers/multiphase/interFoam/overInterDyMFoam/readControls.H +++ b/applications/solvers/multiphase/interFoam/overInterDyMFoam/readControls.H @@ -11,5 +11,6 @@ moveMeshOuterCorrectors = massFluxInterpolation = pimple.dict().lookupOrDefault("massFluxInterpolation", false); -ddtCorr = - pimple.dict().lookupOrDefault("ddtCorr", true); \ No newline at end of file +ddtCorr = pimple.dict().lookupOrDefault("ddtCorr", true); + +adjustFringe = pimple.dict().lookupOrDefault("oversetAdjustPhi", false); diff --git a/src/fileFormats/nas/NASCore.C b/src/fileFormats/nas/NASCore.C index 98cefac905..705f3e62c0 100644 --- a/src/fileFormats/nas/NASCore.C +++ b/src/fileFormats/nas/NASCore.C @@ -34,28 +34,33 @@ Foam::fileFormats::NASCore::NASCore() // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // -Foam::scalar Foam::fileFormats::NASCore::parseNASCoord -( - const string& s -) +Foam::scalar Foam::fileFormats::NASCore::parseNASCoord(const string& s) { - size_t expSign = s.find_last_of("+-"); + scalar value = 0; - if (expSign != string::npos && expSign > 0 && !isspace(s[expSign-1])) + const size_t expSign = s.find_last_of("+-"); + + if (expSign != std::string::npos && expSign > 0 && !isspace(s[expSign-1])) { - scalar mantissa = readScalar(IStringStream(s.substr(0, expSign))()); - scalar exponent = readScalar(IStringStream(s.substr(expSign+1))()); + scalar exponent = 0; + + // Parse as per strtod/strtof - allowing trailing space or [Ee] + readScalar(s.substr(0, expSign).c_str(), value); // mantissa + readScalar(s.substr(expSign+1).c_str(), exponent); if (s[expSign] == '-') { exponent = -exponent; } - return mantissa * pow(10, exponent); + + value *= ::pow(10, exponent); } else { - return readScalar(IStringStream(s)()); + readScalar(s.c_str(), value); } + + return value; } diff --git a/src/fileFormats/nas/NASCore.H b/src/fileFormats/nas/NASCore.H index e19a040569..ebe3dabb97 100644 --- a/src/fileFormats/nas/NASCore.H +++ b/src/fileFormats/nas/NASCore.H @@ -55,8 +55,8 @@ public: // Public Member Functions - //- Do weird things to extract number - static scalar parseNASCoord(const string&); + //- Extract numbers from things like "-2.358-8" (same as "-2.358e-8") + static scalar parseNASCoord(const string& s); // Constructors diff --git a/src/finiteVolume/fvMatrices/solvers/isoAdvection/isoCutCell/isoCutCell.C b/src/finiteVolume/fvMatrices/solvers/isoAdvection/isoCutCell/isoCutCell.C index 33563d728d..30aaa5f72b 100644 --- a/src/finiteVolume/fvMatrices/solvers/isoAdvection/isoCutCell/isoCutCell.C +++ b/src/finiteVolume/fvMatrices/solvers/isoAdvection/isoCutCell/isoCutCell.C @@ -361,6 +361,23 @@ Foam::label Foam::isoCutCell::calcSubCell // Cell cut at least at one face cellStatus_ = 0; calcIsoFaceCentreAndArea(); + + // In the rare but occuring cases where a cell is only touched at a + // point or a line the isoFaceArea_ will have zero length and here the + // cell should be treated as either completely empty or full. + if (mag(isoFaceArea_) < 10*SMALL) + { + if (fullySubFaces_.empty()) + { + // Cell fully above isosurface + cellStatus_ = 1; + } + else + { + // Cell fully below isosurface + cellStatus_ = -1; + } + } } else if (fullySubFaces_.empty()) { diff --git a/src/surfMesh/triSurface/interfaces/NAS/readNAS.C b/src/surfMesh/triSurface/interfaces/NAS/readNAS.C index f40226dc05..4c6cdb1eb8 100644 --- a/src/surfMesh/triSurface/interfaces/NAS/readNAS.C +++ b/src/surfMesh/triSurface/interfaces/NAS/readNAS.C @@ -35,6 +35,7 @@ Description \*---------------------------------------------------------------------------*/ #include "triSurface.H" +#include "NASCore.H" #include "IFstream.H" #include "StringStream.H" @@ -46,25 +47,9 @@ namespace Foam // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // Do weird things to extract number -static scalar parseNASCoord(const string& s) +static inline scalar parseNASCoord(const string& s) { - size_t expSign = s.find_last_of("+-"); - - if (expSign != string::npos && expSign > 0 && !isspace(s[expSign-1])) - { - scalar mantissa = readScalar(IStringStream(s.substr(0, expSign))()); - scalar exponent = readScalar(IStringStream(s.substr(expSign+1))()); - - if (s[expSign] == '-') - { - exponent = -exponent; - } - return mantissa*pow(10, exponent); - } - else - { - return readScalar(IStringStream(s)()); - } + return fileFormats::NASCore::parseNASCoord(s); } @@ -300,8 +285,8 @@ bool triSurface::readNAS(const fileName& fName) // GRID* 126 0 -5.55999875E+02 -5.68730474E+02 // * 2.14897901E+02 label index = - readLabel(IStringStream(readNASToken(line, 8, linei))()); - readNASToken(line, 8, linei); + readLabel(IStringStream(readNASToken(line, 16, linei))()); + readNASToken(line, 16, linei); scalar x = parseNASCoord(readNASToken(line, 16, linei)); scalar y = parseNASCoord(readNASToken(line, 16, linei)); diff --git a/tutorials/multiphase/overInterDyMFoam/floatingBody/background/system/fvSchemes b/tutorials/multiphase/overInterDyMFoam/floatingBody/background/system/fvSchemes index a7cd9fea3a..9c0e331c99 100644 --- a/tutorials/multiphase/overInterDyMFoam/floatingBody/background/system/fvSchemes +++ b/tutorials/multiphase/overInterDyMFoam/floatingBody/background/system/fvSchemes @@ -57,6 +57,11 @@ oversetInterpolation method inverseDistance; } +oversetInterpolationRequired +{ + alpha.water; +} + fluxRequired { default no; diff --git a/tutorials/multiphase/overInterDyMFoam/floatingBody/background/system/fvSolution b/tutorials/multiphase/overInterDyMFoam/floatingBody/background/system/fvSolution index f7341ee5c0..04bfe4172a 100644 --- a/tutorials/multiphase/overInterDyMFoam/floatingBody/background/system/fvSolution +++ b/tutorials/multiphase/overInterDyMFoam/floatingBody/background/system/fvSolution @@ -85,6 +85,8 @@ PIMPLE ddtCorr yes; correctPhi no; + oversetAdjustPhi no; + moveMeshOuterCorrectors no; turbOnFinalIterOnly no; }