mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
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:
parent
edbeb4dfb1
commit
ac9b9b2699
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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 );
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user