#1041 - pre-proto - started on function to calculate transmissibility. Not yet complete.

This commit is contained in:
astridkbjorke
2017-01-10 15:29:38 +01:00
parent 524f39e434
commit dc1e29c419
6 changed files with 119 additions and 0 deletions

View File

@@ -24,6 +24,8 @@
#include "RimFractureDefinition.h"
#include "RimView.h"
#define _USE_MATH_DEFINES
#include <math.h> //TODO: Is this OK? What about cmath?
#include "cafPdmUiDoubleSliderEditor.h"
#include "cvfMatrix4.h"
@@ -127,6 +129,38 @@ void RimFracture::computeGeometry()
m_recomputeGeometry = false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFracture::computeTransmissibility()
{
std::vector<RigFractureData> fracDataVec;
// Finne ijk-er for alle celler...
//For now, only consider center cell:
std::vector<std::pair<size_t, size_t>> fracCells = getFracturedCells();
for (auto fracCell : fracCells)
{
// RigFractureData* fracData = new RigFractureData;
//TODO: get correct input values...
double area = 2.468;
double fractureLength = 1.2345;
double flowLength = 2.718281828;
double c = 0.008527; // TODO: Get value with units, is defined in RimReservoirCellResultsStorage
double transmissibility = 8 * c * attachedFractureDefinition()->permeability * area /
( flowLength + (attachedFractureDefinition()->skinFactor * fractureLength)/M_PI );
// fracData.cellindex = 0;
// fracDataVec.push_back(fracData);
}
m_rigFracture->setFractureData(fracDataVec);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -168,6 +202,18 @@ void RimFracture::defineEditorAttribute(const caf::PdmFieldHandle* field, QStrin
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<std::pair<size_t, size_t>> RimFracture::getFracturedCells()
{
//TODO: Remove this? For now returning empty vector since function
// is not yet implemented for well path fractures
std::vector<std::pair<size_t, size_t>> cells;
return cells;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -47,8 +47,12 @@ public:
virtual cvf::Vec3d centerPointForFracture() = 0;
virtual RimFractureDefinition* attachedFractureDefinition() = 0;
virtual std::vector<std::pair<size_t, size_t>> getFracturedCells();
bool hasValidGeometry() const;
void computeGeometry();
void computeTransmissibility();
void setRecomputeGeometryFlag();

View File

@@ -41,6 +41,7 @@
#include <QToolBox>
#include <QList>
#include "RigGridBase.h"
@@ -159,6 +160,33 @@ void RimSimWellFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedFiel
if (proj) proj->createDisplayModelAndRedrawAllViews();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<std::pair<size_t, size_t>> RimSimWellFracture::getFracturedCells()
{
std::vector<std::pair<size_t, size_t>> cells;
size_t gridindex = 0; //TODO! For now assuming only one grid
caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(this);
if (!objHandle) return cells;
RimEclipseView* mainView = nullptr;
objHandle->firstAncestorOrThisOfType(mainView);
if (!mainView) return cells;
const RigMainGrid* mainGrid = mainView->mainGrid();
if (!mainGrid) return cells;
size_t gridCellIndex = mainGrid->cellIndexFromIJK(m_i - 1, m_j - 1, m_k - 1); // cellIndexFromIJK uses 0-based indexing
cells.push_back(std::make_pair(gridCellIndex, gridindex));
return cells;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -60,6 +60,9 @@ public:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
virtual std::vector<std::pair<size_t, size_t>> getFracturedCells() override;
protected:
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering);
cvf::Vec3d fracturePositionForUi() const;