diff --git a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp index 9b30bf862e..db3f0a02f9 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp @@ -69,6 +69,8 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi(bool onlyWe CAF_PDM_InitFieldNoDefault(&compdatExport, "compdatExport", "Export", "", " ", ""); 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(&includeFishbones, "IncludeFishbones", true, "Include Fishbones", "", "", ""); @@ -167,7 +169,8 @@ void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, c generalExportSettings->add(&folder); generalExportSettings->add(&caseToApply); generalExportSettings->add(&compdatExport); - + generalExportSettings->add(&useLateralNTG); + generalExportSettings->add(&wellSelection); if(!m_onlyWellPathCollectionSelected) wellSelection.setValue(SELECTED_WELLS); diff --git a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h index aad6e31304..a135e9690c 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h +++ b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h @@ -60,7 +60,7 @@ public: caf::PdmField wellSelection; caf::PdmField compdatExport; - + caf::PdmField useLateralNTG; caf::PdmField includePerforations; caf::PdmField includeFishbones; diff --git a/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp b/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp index 626e1d73b7..b2570e7b17 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp @@ -128,7 +128,8 @@ std::vector RicFishbonesTransmissibilityCalculationFeatureImp wellBorePart.lengthsInCell, wellBorePart.skinFactor, wellBorePart.wellRadius, - cellIndex); + cellIndex, + settings.useLateralNTG); } else @@ -140,6 +141,7 @@ std::vector RicFishbonesTransmissibilityCalculationFeatureImp wellBorePart.skinFactor, wellBorePart.wellRadius, cellIndex, + settings.useLateralNTG, numberOfLaterals, mainBoreDirection); diff --git a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp index e734ba0413..9f588b295b 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp @@ -736,7 +736,8 @@ std::vector RicWellPathExportCompletionDataFeature::generateP cell.internalCellLengths, interval->skinFactor(), interval->diameter(unitSystem) / 2, - cell.cellIndex); + cell.cellIndex, + settings.useLateralNTG); @@ -1001,6 +1002,7 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibility(RimEcli double skinFactor, double wellRadius, size_t cellIndex, + bool useLateralNTG, size_t volumeScaleConstant, CellDirection directionForVolumeScaling) { @@ -1020,6 +1022,15 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibility(RimEcli eclipseCase->results(RiaDefines::MATRIX_MODEL)->findOrLoadScalarResult(RiaDefines::STATIC_NATIVE, "PERMZ"); cvf::ref 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 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 dy = dyAccessObject->cellScalarGlobIdx(cellIndex); double dz = dzAccessObject->cellScalarGlobIdx(cellIndex); @@ -1036,9 +1047,9 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibility(RimEcli if (directionForVolumeScaling == CellDirection::DIR_K) dz = dz / volumeScaleConstant; } - double transx = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.x(), permy, permz, dy, dz, wellRadius, skinFactor, darcy); - double transy = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.y(), permx, permz, dx, dz, wellRadius, skinFactor, darcy); - double transz = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.z(), permy, permx, dy, dx, wellRadius, skinFactor, darcy); + double transx = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.x() * latNtg, permy, permz, dy, dz, wellRadius, skinFactor, darcy); + double transy = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.y() * latNtg, permx, permz, dx, dz, wellRadius, skinFactor, darcy); + double transz = RigTransmissibilityEquations::wellBoreTransmissibilityComponent(internalCellLengths.z() * ntg, permy, permx, dy, dx, wellRadius, skinFactor, darcy); return RigTransmissibilityEquations::totalConnectionFactor(transx, transy, transz); } @@ -1069,6 +1080,14 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibilityAsEclips eclipseCase->results(RiaDefines::MATRIX_MODEL)->findOrLoadScalarResult(RiaDefines::STATIC_NATIVE, "PERMZ"); cvf::ref 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 ntgAccessObject = RigResultAccessorFactory::createFromUiResultName(eclipseCaseData, 0, RiaDefines::MATRIX_MODEL, 0, "NTG"); + ntg = ntgAccessObject->cellScalarGlobIdx(cellIndex); + } + double dx = dxAccessObject->cellScalarGlobIdx(cellIndex); double dy = dyAccessObject->cellScalarGlobIdx(cellIndex); double dz = dzAccessObject->cellScalarGlobIdx(cellIndex); @@ -1090,7 +1109,7 @@ double RicWellPathExportCompletionDataFeature::calculateTransmissibilityAsEclips } 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; diff --git a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.h b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.h index 505019a04e..0740247c5a 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.h +++ b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.h @@ -148,6 +148,7 @@ public: double skinFactor, double wellRadius, size_t cellIndex, + bool useLateralNTG, size_t volumeScaleConstant = 1, CellDirection directionForVolumeScaling = CellDirection::DIR_I); static double calculateTransmissibilityAsEclipseDoes(RimEclipseCase* eclipseCase,