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

View File

@@ -18,6 +18,14 @@
#include "RigFracture.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RigFractureData::RigFractureData()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -50,4 +58,19 @@ const std::vector<cvf::Vec3f>& RigFracture::nodeCoords() const
return m_nodeCoords;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigFracture::setFractureData(const std::vector<RigFractureData>& data)
{
m_fractureData = data;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::vector<RigFractureData>& RigFracture::fractureData() const
{
return m_fractureData;
}

View File

@@ -26,6 +26,17 @@
#include <vector>
class RigFractureData
{
public:
RigFractureData();
size_t gridIndex;
size_t cellindex;
double transmissibility;
};
//==================================================================================================
///
//==================================================================================================
@@ -39,8 +50,12 @@ public:
const std::vector<cvf::uint>& polygonIndices() const;
const std::vector<cvf::Vec3f>& nodeCoords() const;
void setFractureData(const std::vector<RigFractureData>& data);
const std::vector<RigFractureData>& fractureData() const; //Access frac data
private:
std::vector<cvf::uint> m_polygonIndices;
std::vector<cvf::Vec3f> m_nodeCoords;
std::vector<RigFractureData> m_fractureData;
};