Fix regression test issues

* Fix eternal loop causing the application to hang
* Revert changes related to file well path introduced in 70bb22
* Use some iterations to find representative cells for computation of cell sizes
This commit is contained in:
Magne Sjaastad 2023-02-16 20:05:12 +01:00 committed by GitHub
parent edbeb4dfb1
commit ac9b9b2699
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 107 additions and 74 deletions

View File

@ -49,6 +49,7 @@
#include "RimEclipseCase.h"
#include "RimEclipseCaseCollection.h"
#include "RimEnsembleWellLogsCollection.h"
#include "RimFileWellPath.h"
#include "RimFlowPlotCollection.h"
#include "RimFormationNamesCollection.h"
#include "RimFractureTemplate.h"
@ -486,6 +487,17 @@ void RimProject::setProjectFileNameAndUpdateDependencies( const QString& project
}
wellPathImport->updateFilePaths();
auto* wellPathColl = RimTools::wellPathCollection();
if ( wellPathColl )
{
for ( auto wellPath : wellPathColl->allWellPaths() )
{
if ( auto fileWellPath = dynamic_cast<RimFileWellPath*>( wellPath ) )
{
fileWellPath->updateFilePathsFromProjectPath( oldProjectPath, newProjectPath );
}
}
}
}
//--------------------------------------------------------------------------------------------------
@ -1526,8 +1538,9 @@ void RimProject::transferPathsToGlobalPathList()
{
if ( summaryCase->displayNameType() == RimCaseDisplayNameTools::DisplayName::CUSTOM )
{
// At this point, after the replace of variables into caf::FilePath objects, the variable name is stored in
// the summary case object. Read out the variable name and append "_name" for custom summary variables.
// At this point, after the replace of variables into caf::FilePath objects, the variable name is
// stored in the summary case object. Read out the variable name and append "_name" for custom
// summary variables.
QString variableName = summaryCase->summaryHeaderFilename();
variableName = variableName.remove( RiaVariableMapper::variableToken() );
@ -1546,8 +1559,9 @@ void RimProject::transferPathsToGlobalPathList()
{
if ( gridCase->displayNameType() == RimCaseDisplayNameTools::DisplayName::CUSTOM )
{
// At this point, after the replace of variables into caf::FilePath objects, the variable name is stored in
// the summary case object. Read out the variable name and append "_name" for custom summary variables.
// At this point, after the replace of variables into caf::FilePath objects, the variable name is
// stored in the summary case object. Read out the variable name and append "_name" for custom
// summary variables.
QString variableName = gridCase->gridFileName();
variableName = variableName.remove( RiaVariableMapper::variableToken() );
@ -1606,8 +1620,8 @@ void RimProject::distributePathsFromGlobalPathList()
}
else if ( variableName.contains( RiaVariableMapper::postfixName() + RiaVariableMapper::variableToken() ) )
{
// The variable name is not found in the variable list, but the name indicates a variable. Reset to full
// case name.
// The variable name is not found in the variable list, but the name indicates a variable. Reset
// to full case name.
summaryCase->setDisplayNameOption( RimCaseDisplayNameTools::DisplayName::FULL_CASE_NAME );
}
}
@ -1627,8 +1641,8 @@ void RimProject::distributePathsFromGlobalPathList()
}
else if ( variableName.contains( RiaVariableMapper::postfixName() + RiaVariableMapper::variableToken() ) )
{
// The variable name is not found in the variable list, but the name indicates a variable. Reset to full
// case name.
// The variable name is not found in the variable list, but the name indicates a variable. Reset
// to full case name.
gridCase->setDisplayNameType( RimCaseDisplayNameTools::DisplayName::FULL_CASE_NAME );
}
}

View File

@ -279,6 +279,19 @@ bool RimFileWellPath::isStoredInCache() const
return !id().isEmpty();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFileWellPath::updateFilePathsFromProjectPath( const QString& newProjectPath, const QString& oldProjectPath )
{
QString newCacheFileName = getCacheFileName();
if ( caf::Utils::fileExists( newCacheFileName ) )
{
m_filePathInCache = newCacheFileName;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -336,16 +349,3 @@ void RimFileWellPath::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFileWellPath::initAfterRead()
{
QString newCacheFileName = getCacheFileName();
if ( caf::Utils::fileExists( newCacheFileName ) )
{
m_filePathInCache = newCacheFileName;
}
}

View File

@ -30,6 +30,7 @@ public:
void setFilepath( const QString& path );
bool readWellPathFile( QString* errorMessage, RifWellPathImporter* wellPathImporter, bool setWellNameForExport );
int wellPathIndexInFile() const; // -1 means none.
void updateFilePathsFromProjectPath( const QString& newProjectPath, const QString& oldProjectPath );
void setWellPathIndexInFile( int index );
static QString getCacheDirectoryPath();
@ -42,7 +43,6 @@ private:
bool isStoredInCache() const;
QString getCacheFileName();
void initAfterRead() override;
void setupBeforeSave() override;
void ensureWellPathStartAtSeaLevel( RigWellPath* wellPath );

View File

@ -370,64 +370,83 @@ void StructGridInterface::computeCharacteristicCellSize( const std::vector<size_
ubyte faceConnNegK[4];
cellFaceVertexIndices( StructGridInterface::NEG_K, faceConnNegK );
double iLengthAccumulated = 0.0;
double jLengthAccumulated = 0.0;
double kLengthAccumulated = 0.0;
cvf::Vec3d cornerVerts[8];
size_t evaluatedCellCount = 0;
// Evaluate N-th cells, compute the stride between each index
size_t stride = std::max( size_t( 1 ), globalCellIndices.size() / 100 );
size_t i, j, k = 0;
size_t index = 0;
while ( index < globalCellIndices.size() - 1 )
double tolerance = 0.2;
int iterationIndex = 0;
const int iterationMaxCount = 3;
while ( iterationIndex < iterationMaxCount )
{
size_t cellIndex = globalCellIndices[index];
ijkFromCellIndex( cellIndex, &i, &j, &k );
if ( isCellValid( i, j, k ) )
if ( iterationIndex > 0 )
{
cellCornerVertices( cellIndex, cornerVerts );
cvf::BoundingBox bb;
for ( const auto& v : cornerVerts )
{
bb.add( v );
}
// Exclude cells with very small volumes
const double tolerance = 0.2;
if ( bb.extent().z() < tolerance ) continue;
iLengthAccumulated += ( cornerVerts[faceConnPosI[0]] - cornerVerts[faceConnNegI[0]] ).lengthSquared();
iLengthAccumulated += ( cornerVerts[faceConnPosI[1]] - cornerVerts[faceConnNegI[3]] ).lengthSquared();
iLengthAccumulated += ( cornerVerts[faceConnPosI[2]] - cornerVerts[faceConnNegI[2]] ).lengthSquared();
iLengthAccumulated += ( cornerVerts[faceConnPosI[3]] - cornerVerts[faceConnNegI[1]] ).lengthSquared();
jLengthAccumulated += ( cornerVerts[faceConnPosJ[0]] - cornerVerts[faceConnNegJ[0]] ).lengthSquared();
jLengthAccumulated += ( cornerVerts[faceConnPosJ[1]] - cornerVerts[faceConnNegJ[3]] ).lengthSquared();
jLengthAccumulated += ( cornerVerts[faceConnPosJ[2]] - cornerVerts[faceConnNegJ[2]] ).lengthSquared();
jLengthAccumulated += ( cornerVerts[faceConnPosJ[3]] - cornerVerts[faceConnNegJ[1]] ).lengthSquared();
kLengthAccumulated += ( cornerVerts[faceConnPosK[0]] - cornerVerts[faceConnNegK[0]] ).lengthSquared();
kLengthAccumulated += ( cornerVerts[faceConnPosK[1]] - cornerVerts[faceConnNegK[3]] ).lengthSquared();
kLengthAccumulated += ( cornerVerts[faceConnPosK[2]] - cornerVerts[faceConnNegK[2]] ).lengthSquared();
kLengthAccumulated += ( cornerVerts[faceConnPosK[3]] - cornerVerts[faceConnNegK[1]] ).lengthSquared();
evaluatedCellCount++;
// Divide tolerance by a factor for each iteration
tolerance = tolerance / 10.0;
}
index += stride;
}
double iLengthAccumulated = 0.0;
double jLengthAccumulated = 0.0;
double kLengthAccumulated = 0.0;
double divisor = evaluatedCellCount * 4.0;
cvf::Vec3d cornerVerts[8];
size_t evaluatedCellCount = 0;
if ( divisor > 0.0 )
{
m_characteristicCellSizeI = cvf::Math::sqrt( iLengthAccumulated / divisor );
m_characteristicCellSizeJ = cvf::Math::sqrt( jLengthAccumulated / divisor );
m_characteristicCellSizeK = cvf::Math::sqrt( kLengthAccumulated / divisor );
// Evaluate N-th cells, compute the stride between each index
size_t stride = std::max( size_t( 1 ), globalCellIndices.size() / 100 );
size_t i, j, k = 0;
size_t index = 0;
while ( index < globalCellIndices.size() - 1 )
{
size_t cellIndex = globalCellIndices[index];
ijkFromCellIndex( cellIndex, &i, &j, &k );
if ( isCellValid( i, j, k ) )
{
cellCornerVertices( cellIndex, cornerVerts );
cvf::BoundingBox bb;
for ( const auto& v : cornerVerts )
{
bb.add( v );
}
// Exclude cells with very small volumes
if ( bb.extent().z() > tolerance )
{
iLengthAccumulated += ( cornerVerts[faceConnPosI[0]] - cornerVerts[faceConnNegI[0]] ).lengthSquared();
iLengthAccumulated += ( cornerVerts[faceConnPosI[1]] - cornerVerts[faceConnNegI[3]] ).lengthSquared();
iLengthAccumulated += ( cornerVerts[faceConnPosI[2]] - cornerVerts[faceConnNegI[2]] ).lengthSquared();
iLengthAccumulated += ( cornerVerts[faceConnPosI[3]] - cornerVerts[faceConnNegI[1]] ).lengthSquared();
jLengthAccumulated += ( cornerVerts[faceConnPosJ[0]] - cornerVerts[faceConnNegJ[0]] ).lengthSquared();
jLengthAccumulated += ( cornerVerts[faceConnPosJ[1]] - cornerVerts[faceConnNegJ[3]] ).lengthSquared();
jLengthAccumulated += ( cornerVerts[faceConnPosJ[2]] - cornerVerts[faceConnNegJ[2]] ).lengthSquared();
jLengthAccumulated += ( cornerVerts[faceConnPosJ[3]] - cornerVerts[faceConnNegJ[1]] ).lengthSquared();
kLengthAccumulated += ( cornerVerts[faceConnPosK[0]] - cornerVerts[faceConnNegK[0]] ).lengthSquared();
kLengthAccumulated += ( cornerVerts[faceConnPosK[1]] - cornerVerts[faceConnNegK[3]] ).lengthSquared();
kLengthAccumulated += ( cornerVerts[faceConnPosK[2]] - cornerVerts[faceConnNegK[2]] ).lengthSquared();
kLengthAccumulated += ( cornerVerts[faceConnPosK[3]] - cornerVerts[faceConnNegK[1]] ).lengthSquared();
evaluatedCellCount++;
}
}
index += stride;
}
iterationIndex++;
if ( evaluatedCellCount > 10 || iterationIndex == iterationMaxCount )
{
double divisor = evaluatedCellCount * 4.0;
if ( divisor > 0.0 )
{
m_characteristicCellSizeI = cvf::Math::sqrt( iLengthAccumulated / divisor );
m_characteristicCellSizeJ = cvf::Math::sqrt( jLengthAccumulated / divisor );
m_characteristicCellSizeK = cvf::Math::sqrt( kLengthAccumulated / divisor );
return;
}
}
}
}