From dfa9d0787d22fba225bbb1eda762c66e6029c93a Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Tue, 28 Nov 2017 13:01:08 +0000 Subject: [PATCH] fileOperation: Corrected processor counting for moving mesh cases Also resolves bug-report https://bugs.openfoam.org/view.php?id=2774 --- .../decomposePar/decomposePar.C | 7 +++++ src/OSspecific/POSIX/POSIX.C | 26 +++++++++++++++++++ .../fileOperation/fileOperation.C | 9 +------ 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index 635fac75a..f95e42516 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -272,6 +272,7 @@ int main(int argc, char *argv[]) #include "setRootCase.H" + bool region = args.optionFound("region"); bool allRegions = args.optionFound("allRegions"); bool writeCellDist = args.optionFound("cellDist"); bool copyZero = args.optionFound("copyZero"); @@ -403,6 +404,12 @@ int main(int argc, char *argv[]) Info<< "Using existing processor directories" << nl; } + if (region || allRegions) + { + procDirsProblem = false; + forceOverwrite = false; + } + if (forceOverwrite) { Info<< "Removing " << nProcs diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C index deaa19ddf..da911a2de 100644 --- a/src/OSspecific/POSIX/POSIX.C +++ b/src/OSspecific/POSIX/POSIX.C @@ -827,6 +827,32 @@ bool Foam::cp(const fileName& src, const fileName& dest, const bool followLink) return false; } + char* realSrcPath = realpath(src.c_str(), nullptr); + char* realDestPath = realpath(destFile.c_str(), nullptr); + const bool samePath = strcmp(realSrcPath, realDestPath) == 0; + + if (POSIX::debug && samePath) + { + InfoInFunction + << "Attempt to copy " << realSrcPath << " to itself" << endl; + } + + if (realSrcPath) + { + free(realSrcPath); + } + + if (realDestPath) + { + free(realDestPath); + } + + // Do not copy over self when src is actually a link to dest + if (samePath) + { + return false; + } + // Copy files fileNameList contents = readDir(src, fileName::FILE, false, followLink); forAll(contents, i) diff --git a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C index 5949754fe..110849d57 100644 --- a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C +++ b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C @@ -591,14 +591,7 @@ Foam::label Foam::fileOperation::nProcs label nProcs = 0; while ( - isDir - ( - dir - /(word("processor") + name(nProcs)) - /"constant" - /local - /polyMesh::meshSubDir - ) + isDir(dir/(word("processor") + name(nProcs))) ) { ++nProcs;