diff --git a/bin/tools/buildParaViewFunctions b/bin/tools/buildParaViewFunctions index cf04183f80bdd5ddc849cc897bc14ba186ff3e91..7231ad140e79cab6a0cb4c1c55ee4b0c0bbb34d1 100644 --- a/bin/tools/buildParaViewFunctions +++ b/bin/tools/buildParaViewFunctions @@ -140,6 +140,7 @@ buildParaView () { # set general options addCMakeVariable "BUILD_SHARED_LIBS:BOOL=ON" + addCMakeVariable "VTK_USE_RPATH:BOOL=OFF" addCMakeVariable "CMAKE_BUILD_TYPE:STRING=Release" # set paraview environment diff --git a/src/OpenFOAM/db/Time/TimeIO.C b/src/OpenFOAM/db/Time/TimeIO.C index fc3ad8857cca9f384296f6ab8ad3588179b248a1..c74b67438989c0d2e577d725f3aa17755a33914d 100644 --- a/src/OpenFOAM/db/Time/TimeIO.C +++ b/src/OpenFOAM/db/Time/TimeIO.C @@ -44,6 +44,7 @@ void Foam::Time::readDict() ); } + scalar oldWriteInterval = writeInterval_; if (controlDict_.readIfPresent("writeInterval", writeInterval_)) { if (writeControl_ == wcTimeStep && label(writeInterval_) < 1) @@ -58,6 +59,22 @@ void Foam::Time::readDict() controlDict_.lookup("writeFrequency") >> writeInterval_; } + if (oldWriteInterval != writeInterval_) + { + switch(writeControl_) + { + case wcRunTime: + case wcAdjustableRunTime: + // Recalculate outputTimeIndex_ to be in units of current + // writeInterval. + outputTimeIndex_ *= oldWriteInterval/writeInterval_; + break; + + default: + break; + } + } + if (controlDict_.readIfPresent("purgeWrite", purgeWrite_)) { if (purgeWrite_ < 0) diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C index 218087f7748435f5638052e36addf1914d20cd8d..7bbe58ff8f9d5575fbb1a341e11e455056d29272 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C @@ -248,7 +248,7 @@ Foam::label Foam::autoRefineDriver::surfaceOnlyRefine refineParams.keepPoints()[0], refineParams.curvature(), - PtrList<featureEdgeMesh>(0), // dummy featureMeshes; + PtrList<featureEdgeMesh>(), // dummy featureMeshes; labelList(0), // dummy featureLevels; false, // featureRefinement @@ -389,7 +389,7 @@ Foam::label Foam::autoRefineDriver::shellRefine refineParams.keepPoints()[0], refineParams.curvature(), - PtrList<featureEdgeMesh>(0), // dummy featureMeshes; + PtrList<featureEdgeMesh>(), // dummy featureMeshes; labelList(0), // dummy featureLevels; false, // featureRefinement diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/duplicatePoints.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/duplicatePoints.C index df9434deec81aaf97b11142f6f0317402091f830..ee915cfa5efbf33e4cb93dbd9de0e997bbfb210b 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/duplicatePoints.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/duplicatePoints.C @@ -155,17 +155,35 @@ void Foam::duplicatePoints::setRefinement zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; } - meshMod.modifyFace - ( - newFace, // modified face - faceI, // label of face being modified - mesh_.faceOwner()[faceI], // owner - -1, // neighbour - false, // face flip - patches.whichPatch(faceI), // patch for face - zoneID, // zone for face - zoneFlip // face flip in zone - ); + + if (mesh_.isInternalFace(faceI)) + { + meshMod.modifyFace + ( + newFace, // modified face + faceI, // label of face being modified + mesh_.faceOwner()[faceI], // owner + mesh_.faceNeighbour()[faceI], // neighbour + false, // face flip + -1, // patch for face + zoneID, // zone for face + zoneFlip // face flip in zone + ); + } + else + { + meshMod.modifyFace + ( + newFace, // modified face + faceI, // label of face being modified + mesh_.faceOwner()[faceI], // owner + -1, // neighbour + false, // face flip + patches.whichPatch(faceI), // patch for face + zoneID, // zone for face + zoneFlip // face flip in zone + ); + } } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C index 9470a8d861174574fc03118e7f3c741f8c9a4b6b..bbfe0cf684445793b31441ce4be322eacae9396d 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C @@ -43,15 +43,22 @@ class minEqOpFace { public: - void operator()( face& x, const face& y ) const + void operator()(face& x, const face& y) const { - forAll(x, i) + if (x.size() > 0) { - x[i] = min(x[i], y[i]); + label j = 0; + forAll(x, i) + { + x[i] = min(x[i], y[j]); + + j = y.rcIndex(j); + } } }; }; + // Dummy transform for faces. Used in synchronisation void transformList ( @@ -103,6 +110,7 @@ bool Foam::localPointRegion::isDuplicate void Foam::localPointRegion::countPointRegions ( const polyMesh& mesh, + const boolList& candidatePoint, const Map<label>& candidateFace, faceList& minRegion ) @@ -120,7 +128,7 @@ void Foam::localPointRegion::countPointRegions forAllConstIter(Map<label>, candidateFace, iter) { - label faceI = iter(); + label faceI = iter.key(); if (!mesh.isInternalFace(faceI)) { @@ -137,43 +145,75 @@ void Foam::localPointRegion::countPointRegions forAll(f, fp) { label pointI = f[fp]; - label region = minRegion[faceI][fp]; - if (minPointRegion[pointI] == -1) - { - minPointRegion[pointI] = region; - } - else if (minPointRegion[pointI] != region) + // Even points which were not candidates for splitting might + // be on multiple baffles that are being split so check. + + if (candidatePoint[pointI]) { - // Multiple regions for this point. Add. - Map<label>::iterator iter = meshPointMap_.find(pointI); - if (iter != meshPointMap_.end()) + label region = minRegion[faceI][fp]; + + if (minPointRegion[pointI] == -1) { - labelList& regions = pointRegions[iter()]; - if (findIndex(regions, region) == -1) - { - label sz = regions.size(); - regions.setSize(sz+1); - regions[sz] = region; - } + minPointRegion[pointI] = region; } - else + else if (minPointRegion[pointI] != region) { - label localPointI = meshPointMap_.size(); - meshPointMap_.insert(pointI, localPointI); - labelList regions(2); - regions[0] = minPointRegion[pointI]; - regions[1] = region; - pointRegions.append(regions); + // Multiple regions for this point. Add. + Map<label>::iterator iter = meshPointMap_.find(pointI); + if (iter != meshPointMap_.end()) + { + labelList& regions = pointRegions[iter()]; + if (findIndex(regions, region) == -1) + { + label sz = regions.size(); + regions.setSize(sz+1); + regions[sz] = region; + } + } + else + { + label localPointI = meshPointMap_.size(); + meshPointMap_.insert(pointI, localPointI); + labelList regions(2); + regions[0] = minPointRegion[pointI]; + regions[1] = region; + pointRegions.append(regions); + } + + label meshFaceMapI = meshFaceMap_.size(); + meshFaceMap_.insert(faceI, meshFaceMapI); } + } + } + } + } + minPointRegion.clear(); + // Add internal faces that use any duplicated point. Can only have one + // region! + forAllConstIter(Map<label>, candidateFace, iter) + { + label faceI = iter.key(); + + if (mesh.isInternalFace(faceI)) + { + const face& f = mesh.faces()[faceI]; + + forAll(f, fp) + { + // Note: candidatePoint test not really necessary but + // speeds up rejection. + if (candidatePoint[f[fp]] && meshPointMap_.found(f[fp])) + { label meshFaceMapI = meshFaceMap_.size(); meshFaceMap_.insert(faceI, meshFaceMapI); } } } } - minPointRegion.clear(); + + // Transfer to member data pointRegions.shrink(); pointRegions_.setSize(pointRegions.size()); @@ -285,7 +325,7 @@ void Foam::localPointRegion::calcPointRegions faceList minRegion(mesh.nFaces()); forAllConstIter(Map<label>, candidateFace, iter) { - label faceI = iter(); + label faceI = iter.key(); const face& f = mesh.faces()[faceI]; if (mesh.isInternalFace(faceI)) @@ -391,7 +431,7 @@ void Foam::localPointRegion::calcPointRegions // Count regions per point - countPointRegions(mesh, candidateFace, minRegion); + countPointRegions(mesh, candidatePoint, candidateFace, minRegion); minRegion.clear(); diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H index e9c03a37e596fe7330b47f8708428a8a5f48e87f..95d05d3aedf29c775c65c9e68583fe06a86d35ce 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H @@ -92,6 +92,7 @@ class localPointRegion void countPointRegions ( const polyMesh& mesh, + const boolList& candidatePoint, const Map<label>& candidateFace, faceList& minRegion );