mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1910 Use NTG for transmissibility calculations of Perforations and fishbones and as std eclipse calculation as basis for WPIMULT
This commit is contained in:
@@ -70,6 +70,8 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi(bool onlyWe
|
|||||||
|
|
||||||
CAF_PDM_InitField(&timeStep, "TimeStepIndex", 0, "Time Step", "", "", "");
|
CAF_PDM_InitField(&timeStep, "TimeStepIndex", 0, "Time Step", "", "", "");
|
||||||
|
|
||||||
|
CAF_PDM_InitField(&useLateralNTG, "UseLateralNTG", false, "Use NTG Horizontally", "", "", "");
|
||||||
|
|
||||||
CAF_PDM_InitField(&includePerforations, "IncludePerforations", true, "Include Perforations", "", "", "");
|
CAF_PDM_InitField(&includePerforations, "IncludePerforations", true, "Include Perforations", "", "", "");
|
||||||
CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Include Fishbones", "", "", "");
|
CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Include Fishbones", "", "", "");
|
||||||
#ifdef USE_PROTOTYPE_FEATURE_FRACTURES
|
#ifdef USE_PROTOTYPE_FEATURE_FRACTURES
|
||||||
@@ -167,6 +169,7 @@ void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, c
|
|||||||
generalExportSettings->add(&folder);
|
generalExportSettings->add(&folder);
|
||||||
generalExportSettings->add(&caseToApply);
|
generalExportSettings->add(&caseToApply);
|
||||||
generalExportSettings->add(&compdatExport);
|
generalExportSettings->add(&compdatExport);
|
||||||
|
generalExportSettings->add(&useLateralNTG);
|
||||||
|
|
||||||
generalExportSettings->add(&wellSelection);
|
generalExportSettings->add(&wellSelection);
|
||||||
if(!m_onlyWellPathCollectionSelected) wellSelection.setValue(SELECTED_WELLS);
|
if(!m_onlyWellPathCollectionSelected) wellSelection.setValue(SELECTED_WELLS);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public:
|
|||||||
caf::PdmField<WellSelectionType> wellSelection;
|
caf::PdmField<WellSelectionType> wellSelection;
|
||||||
caf::PdmField<CompdatExportType> compdatExport;
|
caf::PdmField<CompdatExportType> compdatExport;
|
||||||
|
|
||||||
|
caf::PdmField<bool> useLateralNTG;
|
||||||
caf::PdmField<bool> includePerforations;
|
caf::PdmField<bool> includePerforations;
|
||||||
caf::PdmField<bool> includeFishbones;
|
caf::PdmField<bool> includeFishbones;
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,8 @@ std::vector<RigCompletionData> RicFishbonesTransmissibilityCalculationFeatureImp
|
|||||||
wellBorePart.lengthsInCell,
|
wellBorePart.lengthsInCell,
|
||||||
wellBorePart.skinFactor,
|
wellBorePart.skinFactor,
|
||||||
wellBorePart.wellRadius,
|
wellBorePart.wellRadius,
|
||||||
cellIndex);
|
cellIndex,
|
||||||
|
settings.useLateralNTG);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -140,6 +141,7 @@ std::vector<RigCompletionData> RicFishbonesTransmissibilityCalculationFeatureImp
|
|||||||
wellBorePart.skinFactor,
|
wellBorePart.skinFactor,
|
||||||
wellBorePart.wellRadius,
|
wellBorePart.wellRadius,
|
||||||
cellIndex,
|
cellIndex,
|
||||||
|
settings.useLateralNTG,
|
||||||
numberOfLaterals,
|
numberOfLaterals,
|
||||||
mainBoreDirection);
|
mainBoreDirection);
|
||||||
|
|
||||||
|
|||||||
@@ -736,7 +736,8 @@ std::vector<RigCompletionData> RicWellPathExportCompletionDataFeature::generateP
|
|||||||
cell.internalCellLengths,
|
cell.internalCellLengths,
|
||||||
interval->skinFactor(),
|
interval->skinFactor(),
|
||||||
interval->diameter(unitSystem) / 2,
|
interval->diameter(unitSystem) / 2,
|
||||||
cell.cellIndex);
|
cell.cellIndex,
|
||||||
|
settings.useLateralNTG);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1001,6 +1002,7 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibility(RimEcli
|
|||||||
double skinFactor,
|
double skinFactor,
|
||||||
double wellRadius,
|
double wellRadius,
|
||||||
size_t cellIndex,
|
size_t cellIndex,
|
||||||
|
bool useLateralNTG,
|
||||||
size_t volumeScaleConstant,
|
size_t volumeScaleConstant,
|
||||||
CellDirection directionForVolumeScaling)
|
CellDirection directionForVolumeScaling)
|
||||||
{
|
{
|
||||||
@@ -1020,6 +1022,15 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibility(RimEcli
|
|||||||
eclipseCase->results(RiaDefines::MATRIX_MODEL)->findOrLoadScalarResult(RiaDefines::STATIC_NATIVE, "PERMZ");
|
eclipseCase->results(RiaDefines::MATRIX_MODEL)->findOrLoadScalarResult(RiaDefines::STATIC_NATIVE, "PERMZ");
|
||||||
cvf::ref<RigResultAccessor> permzAccessObject = RigResultAccessorFactory::createFromUiResultName(eclipseCaseData, 0, RiaDefines::MATRIX_MODEL, 0, "PERMZ");
|
cvf::ref<RigResultAccessor> permzAccessObject = RigResultAccessorFactory::createFromUiResultName(eclipseCaseData, 0, RiaDefines::MATRIX_MODEL, 0, "PERMZ");
|
||||||
|
|
||||||
|
double ntg = 1.0;
|
||||||
|
size_t ntgResIdx = eclipseCase->results(RiaDefines::MATRIX_MODEL)->findOrLoadScalarResult(RiaDefines::STATIC_NATIVE, "NTG");
|
||||||
|
if (ntgResIdx != cvf::UNDEFINED_SIZE_T)
|
||||||
|
{
|
||||||
|
cvf::ref<RigResultAccessor> ntgAccessObject = RigResultAccessorFactory::createFromUiResultName(eclipseCaseData, 0, RiaDefines::MATRIX_MODEL, 0, "NTG");
|
||||||
|
ntg = ntgAccessObject->cellScalarGlobIdx(cellIndex);
|
||||||
|
}
|
||||||
|
double latNtg = useLateralNTG ? ntg : 1.0;
|
||||||
|
|
||||||
double dx = dxAccessObject->cellScalarGlobIdx(cellIndex);
|
double dx = dxAccessObject->cellScalarGlobIdx(cellIndex);
|
||||||
double dy = dyAccessObject->cellScalarGlobIdx(cellIndex);
|
double dy = dyAccessObject->cellScalarGlobIdx(cellIndex);
|
||||||
double dz = dzAccessObject->cellScalarGlobIdx(cellIndex);
|
double dz = dzAccessObject->cellScalarGlobIdx(cellIndex);
|
||||||
@@ -1036,9 +1047,9 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibility(RimEcli
|
|||||||
if (directionForVolumeScaling == CellDirection::DIR_K) dz = dz / volumeScaleConstant;
|
if (directionForVolumeScaling == CellDirection::DIR_K) dz = dz / volumeScaleConstant;
|
||||||
}
|
}
|
||||||
|
|
||||||
double transx = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.x(), permy, permz, dy, dz, wellRadius, skinFactor, darcy);
|
double transx = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.x() * latNtg, permy, permz, dy, dz, wellRadius, skinFactor, darcy);
|
||||||
double transy = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.y(), permx, permz, dx, dz, wellRadius, skinFactor, darcy);
|
double transy = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.y() * latNtg, permx, permz, dx, dz, wellRadius, skinFactor, darcy);
|
||||||
double transz = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.z(), permy, permx, dy, dx, wellRadius, skinFactor, darcy);
|
double transz = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.z() * ntg, permy, permx, dy, dx, wellRadius, skinFactor, darcy);
|
||||||
|
|
||||||
return RigTransmissibilityEquations::totalConnectionFactor(transx, transy, transz);
|
return RigTransmissibilityEquations::totalConnectionFactor(transx, transy, transz);
|
||||||
}
|
}
|
||||||
@@ -1069,6 +1080,14 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibilityAsEclips
|
|||||||
eclipseCase->results(RiaDefines::MATRIX_MODEL)->findOrLoadScalarResult(RiaDefines::STATIC_NATIVE, "PERMZ");
|
eclipseCase->results(RiaDefines::MATRIX_MODEL)->findOrLoadScalarResult(RiaDefines::STATIC_NATIVE, "PERMZ");
|
||||||
cvf::ref<RigResultAccessor> permzAccessObject = RigResultAccessorFactory::createFromUiResultName(eclipseCaseData, 0, RiaDefines::MATRIX_MODEL, 0, "PERMZ");
|
cvf::ref<RigResultAccessor> permzAccessObject = RigResultAccessorFactory::createFromUiResultName(eclipseCaseData, 0, RiaDefines::MATRIX_MODEL, 0, "PERMZ");
|
||||||
|
|
||||||
|
double ntg = 1.0;
|
||||||
|
size_t ntgResIdx = eclipseCase->results(RiaDefines::MATRIX_MODEL)->findOrLoadScalarResult(RiaDefines::STATIC_NATIVE, "NTG");
|
||||||
|
if (ntgResIdx != cvf::UNDEFINED_SIZE_T)
|
||||||
|
{
|
||||||
|
cvf::ref<RigResultAccessor> ntgAccessObject = RigResultAccessorFactory::createFromUiResultName(eclipseCaseData, 0, RiaDefines::MATRIX_MODEL, 0, "NTG");
|
||||||
|
ntg = ntgAccessObject->cellScalarGlobIdx(cellIndex);
|
||||||
|
}
|
||||||
|
|
||||||
double dx = dxAccessObject->cellScalarGlobIdx(cellIndex);
|
double dx = dxAccessObject->cellScalarGlobIdx(cellIndex);
|
||||||
double dy = dyAccessObject->cellScalarGlobIdx(cellIndex);
|
double dy = dyAccessObject->cellScalarGlobIdx(cellIndex);
|
||||||
double dz = dzAccessObject->cellScalarGlobIdx(cellIndex);
|
double dz = dzAccessObject->cellScalarGlobIdx(cellIndex);
|
||||||
@@ -1090,7 +1109,7 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibilityAsEclips
|
|||||||
}
|
}
|
||||||
else if (direction == CellDirection::DIR_K)
|
else if (direction == CellDirection::DIR_K)
|
||||||
{
|
{
|
||||||
trans = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(dz, permy, permx, dy, dx, wellRadius, skinFactor, darcy);
|
trans = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(dz * ntg, permy, permx, dy, dx, wellRadius, skinFactor, darcy);
|
||||||
}
|
}
|
||||||
|
|
||||||
return trans;
|
return trans;
|
||||||
|
|||||||
@@ -148,6 +148,7 @@ public:
|
|||||||
double skinFactor,
|
double skinFactor,
|
||||||
double wellRadius,
|
double wellRadius,
|
||||||
size_t cellIndex,
|
size_t cellIndex,
|
||||||
|
bool useLateralNTG,
|
||||||
size_t volumeScaleConstant = 1,
|
size_t volumeScaleConstant = 1,
|
||||||
CellDirection directionForVolumeScaling = CellDirection::DIR_I);
|
CellDirection directionForVolumeScaling = CellDirection::DIR_I);
|
||||||
static double calculateTransmissibilityAsEclipseDoes(RimEclipseCase* eclipseCase,
|
static double calculateTransmissibilityAsEclipseDoes(RimEclipseCase* eclipseCase,
|
||||||
|
|||||||
Reference in New Issue
Block a user