#1910 Use NTG for transmissibility calculations of Perforations and fishbones and as std eclipse calculation as basis for WPIMULT

This commit is contained in:
Jacob Støren
2017-09-20 15:24:29 +02:00
parent b0554516dd
commit 7429b21fff
5 changed files with 33 additions and 8 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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,