diff --git a/applications/utilities/mesh/generation/foamyQuadMesh/CV2D.C b/applications/utilities/mesh/generation/foamyQuadMesh/CV2D.C index deb0605aa098c83c5ff777c8b41928dd91d767a6..0ce6e785b61d8c0f63cd6caeaabddeb91f5bcaa9 100644 --- a/applications/utilities/mesh/generation/foamyQuadMesh/CV2D.C +++ b/applications/utilities/mesh/generation/foamyQuadMesh/CV2D.C @@ -542,7 +542,7 @@ void Foam::CV2D::newPoints() alignmentDirsB[0].x() ); - Field<vector2D> alignmentDirs(2); + Field<vector2D> alignmentDirs(alignmentDirsA); forAll(alignmentDirsA, aA) { diff --git a/src/OpenFOAM/db/IOobject/IOobject.C b/src/OpenFOAM/db/IOobject/IOobject.C index 74844aea826feb5f199db842a71e227743d3916c..65fddffbbcbffcead3a73779e3c939e6d0701531 100644 --- a/src/OpenFOAM/db/IOobject/IOobject.C +++ b/src/OpenFOAM/db/IOobject/IOobject.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -323,8 +323,8 @@ Foam::fileName Foam::IOobject::filePath() const ) { fileName parentObjectPath = - rootPath()/caseName() - /".."/instance()/db_.dbDir()/local()/name(); + rootPath()/time().globalCaseName() + /instance()/db_.dbDir()/local()/name(); if (isFile(parentObjectPath)) { diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C index 1eb31e15fc38d8a9864042a358597e35c5c77cff..94c8b9cac4682b4c14ec552d69311c8a5e776663 100644 --- a/src/OpenFOAM/db/Time/Time.C +++ b/src/OpenFOAM/db/Time/Time.C @@ -386,7 +386,9 @@ Foam::Time::Time : TimePaths ( + args.parRunControl().parRun(), args.rootPath(), + args.globalCaseName(), args.caseName(), systemName, constantName @@ -702,13 +704,27 @@ Foam::instantList Foam::Time::times() const Foam::word Foam::Time::findInstancePath(const instant& t) const { - instantList timeDirs = findTimes(path(), constant()); + const fileName directory = path(); + const word& constantName = constant(); + + // Read directory entries into a list + fileNameList dirEntries(readDir(directory, fileName::DIRECTORY)); + + forAll(dirEntries, i) + { + scalar timeValue; + if (readScalar(dirEntries[i].c_str(), timeValue) && t.equal(timeValue)) + { + return dirEntries[i]; + } + } - forAllReverse(timeDirs, timeI) + if (t.equal(0.0)) { - if (timeDirs[timeI] == t) + // Looking for 0 or constant. 0 already checked above. + if (isDir(directory/constantName)) { - return timeDirs[timeI].name(); + return constantName; } } diff --git a/src/OpenFOAM/db/Time/TimePaths.C b/src/OpenFOAM/db/Time/TimePaths.C index b97398b87659898b7898aec4261d70ee4f796e1e..29f2c6967e55b38fa06147fcc368b58a04612e6b 100644 --- a/src/OpenFOAM/db/Time/TimePaths.C +++ b/src/OpenFOAM/db/Time/TimePaths.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,11 +35,41 @@ Foam::TimePaths::TimePaths const word& constantName ) : - processorCase_(caseName.find("processor") != string::npos), + processorCase_(false), rootPath_(rootPath), case_(caseName), system_(systemName), constant_(constantName) +{ + std::string::size_type pos = caseName.find("processor"); + if (pos != string::npos) + { + processorCase_ = true; + globalCaseName_ = caseName(pos-1); + } + else + { + globalCaseName_ = caseName; + } +} + + +Foam::TimePaths::TimePaths +( + const bool processorCase, + const fileName& rootPath, + const fileName& globalCaseName, + const fileName& caseName, + const word& systemName, + const word& constantName +) +: + processorCase_(processorCase), + rootPath_(rootPath), + globalCaseName_(globalCaseName), + case_(caseName), + system_(systemName), + constant_(constantName) {} diff --git a/src/OpenFOAM/db/Time/TimePaths.H b/src/OpenFOAM/db/Time/TimePaths.H index 3f261be6444d921abdddb93241d1311c38a1071e..0f5e1b11fd4384d07c4bc9865803e973bf0f11eb 100644 --- a/src/OpenFOAM/db/Time/TimePaths.H +++ b/src/OpenFOAM/db/Time/TimePaths.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,10 +52,11 @@ class TimePaths // Private data bool processorCase_; - fileName rootPath_; - fileName case_; - word system_; - word constant_; + const fileName rootPath_; + fileName globalCaseName_; + const fileName case_; + const word system_; + const word constant_; public: @@ -72,6 +73,18 @@ public: ); + //- Construct given database name, rootPath and casePath + TimePaths + ( + const bool processorCase, + const fileName& rootPath, + const fileName& globalCaseName, + const fileName& caseName, + const word& systemName, + const word& constantName + ); + + // Member functions //- Return true if this is a processor case @@ -86,6 +99,12 @@ public: return rootPath_; } + //- Return global case name + const fileName& globalCaseName() const + { + return globalCaseName_; + } + //- Return case name const fileName& caseName() const { diff --git a/src/OpenFOAM/db/Time/instant/instant.C b/src/OpenFOAM/db/Time/instant/instant.C index 46f6bb73f181dba4d467621f820e4130cdfda806..bcbe24e55db7705a76d1598a7ac9dcd7894621a9 100644 --- a/src/OpenFOAM/db/Time/instant/instant.C +++ b/src/OpenFOAM/db/Time/instant/instant.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,15 +54,19 @@ Foam::instant::instant(const word& tname) {} +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::instant::equal(const scalar b) const +{ + return (value_ < b + SMALL && value_ > b - SMALL); +} + + // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // bool Foam::operator==(const instant& a, const instant& b) { - return - ( - a.value_ < b.value_ + SMALL - && a.value_ > b.value_ - SMALL - ); + return a.equal(b.value_); } diff --git a/src/OpenFOAM/db/Time/instant/instant.H b/src/OpenFOAM/db/Time/instant/instant.H index 9682d8e3f7eefdf7ddad825e67e842d825dc1317..be3ea4e011362b6cf8a4c7394f8398b871a63527 100644 --- a/src/OpenFOAM/db/Time/instant/instant.H +++ b/src/OpenFOAM/db/Time/instant/instant.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -99,10 +99,10 @@ public: instant(const scalar, const word&); //- Construct from time value - instant(const scalar); + explicit instant(const scalar); //- Construct from word - instant(const word&); + explicit instant(const word&); // Member Functions @@ -133,6 +133,9 @@ public: return name_; } + //- Comparison used for instants to be equal + bool equal(const scalar) const; + // Friend Operators