Opm Flow Simulations: use editors for wconprod/wconinje parameters (#12969)

* Add field editors for open well keywords.
* Clean up keyword handling a bit
This commit is contained in:
JJ authored and GitHub committed 2025-10-02 14:52:19 +02:00
1 parent be283f39b4
commit e91ec80f89
12 files changed
+572 -110

No files matched your search

@@ -38,6 +38,8 @@
#include "RimEclipseCaseCollection.h"
#include "RimEclipseCaseEnsemble.h"
#include "RimFishbones.h"
#include "RimKeywordWconinje.h"
#include "RimKeywordWconprod.h"
#include "RimOilField.h"
#include "RimPerforationInterval.h"
#include "RimProject.h"
@@ -56,6 +58,8 @@
#include "cafPdmUiPushButtonEditor.h"
#include "cafProgressInfo.h"
#include "opm/input/eclipse/Deck/DeckKeyword.hpp"
#include <QFile>
#include <QFileInfo>
#include <QMessageBox>
@@ -106,7 +110,13 @@ RimOpmFlowJob::RimOpmFlowJob()
m_wellOpenKeyword.uiCapability()->setUiEditorTypeName( caf::PdmUiComboBoxEditor::uiEditorTypeName() );
m_wellOpenKeyword.xmlCapability()->disableIO();
CAF_PDM_InitField( &m_wellOpenText, "WellOpenText", QString( "'GRUP' 5000 4* 100 20 5" ), "Open Well Parameters" );
CAF_PDM_InitFieldNoDefault( &m_wconprodKeyword, "WconprodKeyword", "WCONPROD Settings" );
m_wconprodKeyword = new RimKeywordWconprod();
m_wconprodKeyword.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_wconinjeKeyword, "WconinjeKeyword", "WCONINJE Settings" );
m_wconinjeKeyword = new RimKeywordWconinje();
m_wconinjeKeyword.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitField( &m_openTimeStep, "OpenTimeStep", 0, " " );
CAF_PDM_InitField( &m_endTimeStep, "EndTimeStep", 0, " " );
@@ -212,7 +222,16 @@ void RimOpmFlowJob::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
wellGrp->add( &m_wellPath );
wellGrp->add( &m_wellOpenKeyword );
wellGrp->add( &m_wellOpenText );
if ( m_wellOpenKeyword() == "WCONPROD" )
{
auto wconGrp = wellGrp->addNewGroup( "WCONPROD Settings" );
m_wconprodKeyword->uiOrdering( wconGrp );
}
else
{
auto wconGrp = wellGrp->addNewGroup( "WCONINJE Settings" );
m_wconinjeKeyword->uiOrdering( wconGrp );
}
wellGrp->add( &m_wellOpenType );
@@ -322,17 +341,6 @@ void RimOpmFlowJob::fieldChangedByUi( const caf::PdmFieldHandle* changedField, c
m_currentRunId = 0;
}
}
else if ( changedField == &m_wellOpenKeyword )
{
if ( newValue.toString() == "WCONPROD" )
{
m_wellOpenText.setValueWithFieldChanged( "'GRUP' 5000 4* 100 20 5" );
}
else
{
m_wellOpenText.setValueWithFieldChanged( "'GRUP' 6500 1* 350" );
}
}
else if ( changedField == &m_openSelectButton )
{
m_openSelectButton = false;
@@ -592,7 +600,8 @@ bool RimOpmFlowJob::onPrepare()
return false;
}
if ( m_wellPath->completionSettings()->wellName().isEmpty() )
auto wellNameInDeck = m_wellPath->completionSettings()->wellName();
if ( wellNameInDeck.isEmpty() )
{
RiaLogging::error( "Selected Well Path does not have a WELL NAME set, please check the completion settings." );
return false;
@@ -651,12 +660,16 @@ bool RimOpmFlowJob::onPrepare()
QFile::remove( wellTempFile() );
}
QString openWellText = generateBasicOpenWellText();
Opm::DeckKeyword openKeyword = m_wconinjeKeyword->keyword( wellNameInDeck );
if ( m_wellOpenKeyword() == "WCONPROD" )
{
openKeyword = m_wconprodKeyword->keyword( wellNameInDeck );
}
// open new well at selected timestep
if ( m_wellOpenType == WellOpenType::OPEN_AT_DATE )
{
if ( !m_deckFile->openWellAtTimeStep( m_openTimeStep(), openWellText.toStdString() ) )
if ( !m_deckFile->openWellAtTimeStep( m_openTimeStep(), openKeyword ) )
{
RiaLogging::error( "Unable to open new well at selected timestep in DATA file." );
return false;
@@ -664,7 +677,7 @@ bool RimOpmFlowJob::onPrepare()
}
else
{
if ( !m_deckFile->openWellAtDeckPosition( mergePosition, openWellText.toStdString() ) )
if ( !m_deckFile->openWellAtDeckPosition( mergePosition, openKeyword ) )
{
RiaLogging::error( "Unable to open new well at selected position in DATA file." );
return false;
@@ -931,28 +944,6 @@ std::string RimOpmFlowJob::exportMswWellSettings( int timeStep )
return fileContent.toStdString();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimOpmFlowJob::generateBasicOpenWellText()
{
auto cs = m_wellPath->completionSettings();
QString wellText = m_wellOpenKeyword() + "\n";
if ( m_wellOpenKeyword() == "WCONPROD" )
{
wellText += QString( "'%1' 'OPEN' %2 /\n" ).arg( cs->wellNameForExport() ).arg( m_wellOpenText );
}
else if ( m_wellOpenKeyword() == "WCONINJE" )
{
wellText += QString( "'%1' 'WATER' 'OPEN' %2 /\n" ).arg( cs->wellNameForExport() ).arg( m_wellOpenText );
}
wellText += "/\n";
return wellText;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------