Fesapi 2.9.0.1
This project provides C++ classes which allow an easy access in import and export to the Energistics standards.
Loading...
Searching...
No Matches
Public Member Functions | List of all members
resqml2::IjkGridExplicitRepresentation Class Referenceabstract

An IJK Grid explicit representation defines each cell corner position by means of XYZ coordinates. Adjacent cell corner are supposed to be located the same so they are not repeated unless you define split lines or split nodes. More...

#include <IjkGridExplicitRepresentation.h>

Inheritance diagram for resqml2::IjkGridExplicitRepresentation:
resqml2::AbstractIjkGridRepresentation

Public Member Functions

virtual ~IjkGridExplicitRepresentation ()=default
 
void getXyzPointsOfKInterfaceSequence (unsigned int kInterfaceStart, unsigned int kInterfaceEnd, double *xyzPoints) override
 Gets all the XYZ points of a particular sequence of K interfaces. XYZ points are given in the local CRS.
 
void getXyzPointsOfBlock (double *xyzPoints) override
 Gets all the XYZ points of the current block. XYZ points are given in the local CRS. Block information must be loaded.
 
virtual void setGeometryAsCoordinateLineNodes (gsoap_resqml2_0_1::resqml20__PillarShape mostComplexPillarGeometry, gsoap_resqml2_0_1::resqml20__KDirection kDirectionKind, bool isRightHanded, double const *points, eml2 ::AbstractHdfProxy *proxy=nullptr, uint64_t splitCoordinateLineCount=0, unsigned int const *pillarOfCoordinateLine=nullptr, unsigned int const *splitCoordinateLineColumnCumulativeCount=nullptr, unsigned int const *splitCoordinateLineColumns=nullptr, int8_t const *definedPillars=nullptr, resqml2 ::AbstractLocal3dCrs *localCrs=nullptr)=0
 Sets the geometry of this IJK grid as explicit coordinate line nodes. See RESQML Usage, Technical guide and Enterprise Architect diagrams for details.
 
virtual void setGeometryAsCoordinateLineNodesUsingExistingDatasets (gsoap_resqml2_0_1::resqml20__PillarShape mostComplexPillarGeometry, gsoap_resqml2_0_1::resqml20__KDirection kDirectionKind, bool isRightHanded, const std::string &points, eml2 ::AbstractHdfProxy *proxy=nullptr, uint64_t splitCoordinateLineCount=0, const std::string &pillarOfCoordinateLine="", const std::string &splitCoordinateLineColumnCumulativeCount="", const std::string &splitCoordinateLineColumns="", const std::string &definedPillars="", resqml2 ::AbstractLocal3dCrs *localCrs=nullptr)=0
 Sets the geometry of this IJK grid as explicit coordinate line nodes. See RESQML Usage, Technical guide and Enterprise Architect diagrams for details. Same as setGeometryAsCoordinateLineNodes where the hdf datasets are already written in the the file.
 
bool isNodeGeometryCompressed () const final
 
geometryKind getGeometryKind () const final
 
- Public Member Functions inherited from resqml2::AbstractIjkGridRepresentation
 AbstractIjkGridRepresentation (common ::DataObjectRepository *repo, const std::string &guid, const std::string &title, unsigned int iCount, unsigned int jCount, unsigned int kCount, bool *kGaps=nullptr, eml2 ::AbstractHdfProxy *proxy=nullptr)
 
 AbstractIjkGridRepresentation (resqml2 ::AbstractFeatureInterpretation *interp, const std::string &guid, const std::string &title, unsigned int iCount, unsigned int jCount, unsigned int kCount, bool *kGaps=nullptr, eml2 ::AbstractHdfProxy *proxy=nullptr)
 
 AbstractIjkGridRepresentation (gsoap_resqml2_0_1::eml20__DataObjectReference *partialObject, bool withTruncatedPillars=false)
 
virtual ~AbstractIjkGridRepresentation ()
 
unsigned int getICellCount () const
 
void setICellCount (unsigned int iCount)
 
unsigned int getJCellCount () const
 
void setJCellCount (unsigned int jCount)
 Sets the count of cells in the J direction.
 
uint64_t getCellCount () const final
 
unsigned int getColumnCount () const
 
unsigned int getPillarCount () const
 
uint64_t getKGapsCount () const
 
void getKGaps (bool *kGaps) const
 
uint64_t getFaceCount () const
 
unsigned int getIPillarFromGlobalIndex (unsigned int globalIndex) const
 
unsigned int getJPillarFromGlobalIndex (unsigned int globalIndex) const
 
unsigned int getGlobalIndexPillarFromIjIndex (unsigned int iPillar, unsigned int jPillar) const
 
unsigned int getIColumnFromGlobalIndex (unsigned int globalIndex) const
 
unsigned int getJColumnFromGlobalIndex (unsigned int globalIndex) const
 
unsigned int getGlobalIndexColumnFromIjIndex (unsigned int iColumn, unsigned int jColumn) const
 
unsigned int getGlobalIndexCellFromIjkIndex (unsigned int iCell, unsigned int jCell, unsigned int kCell) const
 
bool isRightHanded () const
 
void getPillarsOfSplitCoordinateLines (unsigned int *pillarIndices, bool reverseIAxis=false, bool reverseJAxis=false) const
 
void getColumnsOfSplitCoordinateLines (unsigned int *columnIndices, bool reverseIAxis=false, bool reverseJAxis=false) const
 
void getColumnCountOfSplitCoordinateLines (unsigned int *columnIndexCountPerSplitCoordinateLine) const
 
uint64_t getSplitCoordinateLineCount () const
 
uint64_t getBlockSplitCoordinateLineCount () const
 
uint64_t getSplitNodeCount () const
 
void getPillarGeometryIsDefined (bool *pillarGeometryIsDefined, bool reverseIAxis=false, bool reverseJAxis=false) const
 
bool hasCellGeometryIsDefinedFlags () const
 
void getCellGeometryIsDefinedFlags (bool *cellGeometryIsDefinedFlags, bool reverseIAxis=false, bool reverseJAxis=false, bool reverseKAxis=false) const
 
void setCellGeometryIsDefinedFlags (uint8_t *cellGeometryIsDefinedFlags, eml2 ::AbstractHdfProxy *proxy=nullptr)
 
void setAllCellGeometryFlagsToDefined ()
 
void loadSplitInformation ()
 
void loadBlockInformation (unsigned int iInterfaceStart, unsigned int iInterfaceEnd, unsigned int jInterfaceStart, unsigned int jInterfaceEnd, unsigned int kInterfaceStart, unsigned int kInterfaceEnd)
 
void unloadSplitInformation ()
 
bool isColumnEdgeSplitted (unsigned int iColumn, unsigned int jColumn, unsigned int edge) const
 Checks either a given column edge is splitted or not. This method requires that you have already loaded the split information.
 
uint64_t getXyzPointIndexFromCellCorner (unsigned int iCell, unsigned int jCell, unsigned int kCell, unsigned int corner) const
 Gets the XYZ point index in the HDF dataset from the corner of a cell. This method requires that you have already loaded the split information.
 
void getXyzPointOfBlockFromCellCorner (unsigned int iCell, unsigned int jCell, unsigned int kCell, unsigned int corner, const double *xyzPoints, double &x, double &y, double &z) const
 Gets the x, y and z values of the corner of a cell of a given block. This method requires that you have already both loaded the block information and get the geometry of the block thanks to getXyzPointsOfBlock().
 
uint64_t getXyzPointCountOfKInterface () const
 
uint64_t getXyzPointCountOfBlock () const
 
void getXyzPointsOfKInterface (unsigned int kInterface, double *xyzPoints)
 
gsoap_resqml2_0_1::resqml20__KDirection getKDirection () const override
 
virtual common::DataObjectReference getHdfProxyDor () const override
 
virtual uint64_t getXyzPointCountOfPatch (unsigned int patchIndex) const override
 
virtual void getXyzPointsOfPatch (unsigned int patchIndex, double *xyzPoints) const override
 Gets all the xyz points of a particular patch of this representation. xyz points are given in the local CRS.
 
std::string getXmlTag () const final
 
uint64_t getPatchCount () const override
 
virtual std::string getXmlNamespace () const override
 

Additional Inherited Members

- Public Types inherited from resqml2::AbstractIjkGridRepresentation
enum class  geometryKind {
  UNKNOWN = 0 , EXPLICIT = 1 , PARAMETRIC = 2 , LATTICE = 3 ,
  NO_GEOMETRY = 4
}
 
- Static Public Attributes inherited from resqml2::AbstractIjkGridRepresentation
static constexpr char const * XML_TAG = "IjkGridRepresentation"
 
static constexpr char const * XML_TAG_TRUNCATED = "TruncatedIjkGridRepresentation"
 

Detailed Description

An IJK Grid explicit representation defines each cell corner position by means of XYZ coordinates. Adjacent cell corner are supposed to be located the same so they are not repeated unless you define split lines or split nodes.

Constructor & Destructor Documentation

◆ ~IjkGridExplicitRepresentation()

virtual resqml2::IjkGridExplicitRepresentation::~IjkGridExplicitRepresentation ( )
virtualdefault

Destructor does nothing since the memory is managed by the gSOAP context.

Member Function Documentation

◆ getGeometryKind()

geometryKind resqml2::IjkGridExplicitRepresentation::getGeometryKind ( ) const
finalvirtual

Gets the geometry kind of this IJK grid.

Returns
The geometry kind of this IJK grid.

Reimplemented from resqml2::AbstractIjkGridRepresentation.

◆ getXyzPointsOfBlock()

void resqml2::IjkGridExplicitRepresentation::getXyzPointsOfBlock ( double * xyzPoints)
overridevirtual

Gets all the XYZ points of the current block. XYZ points are given in the local CRS. Block information must be loaded.

Exceptions
std::invalid_argumentIf this grid is truncated.
std::invalid_argumentIf the block information is not loaded.
std::invalid_argumentIf xyzPoints is nullptr.
Parameters
[out]xyzPointsA linearized 2d array where the first (quickest) dimension is coordinate dimension (XYZ) and second dimension is vertex dimension. It must be pre allocated with a size of 3 * getXyzPointCountOfBlock().

Reimplemented from resqml2::AbstractIjkGridRepresentation.

◆ getXyzPointsOfKInterfaceSequence()

void resqml2::IjkGridExplicitRepresentation::getXyzPointsOfKInterfaceSequence ( unsigned int kInterfaceStart,
unsigned int kInterfaceEnd,
double * xyzPoints )
overridevirtual

Gets all the XYZ points of a particular sequence of K interfaces. XYZ points are given in the local CRS.

Exceptions
std::invalid_argumentIf this grid is truncated.
std::out_of_rangeIf kInterfaceStart > getKCellCount() or kInterfaceEnd > getKCellCount() + getKGapsCount().
std::range_errorIf kInterfaceStart > kInterfaceEnd.
std::invalid_argumentIf xyzPoints is nullptr.
Parameters
kInterfaceStartThe K index of the starting interface taken from zero to getKCellCount().
kInterfaceEndThe K index of the ending interface taken from zero to getKCellCount() + getKGapsCount().
[out]xyzPointsA linearized 2d array where the first (quickest) dimension is coordinate dimension (XYZ) and second dimension is vertex dimension. It must be preallocated with a size of 3 * getXyzPointCountOfKInterface() * (kInterfaceEnd - kInterfaceStart + 1).

Reimplemented from resqml2::AbstractIjkGridRepresentation.

◆ isNodeGeometryCompressed()

bool resqml2::IjkGridExplicitRepresentation::isNodeGeometryCompressed ( ) const
finalvirtual

Checks whether the node geometry dataset is compressed or not.

Exceptions
std::invalid_argumentIf this grid has no geometry.
Returns
True if the node geometry dataset is compressed, false if not.

Reimplemented from resqml2::AbstractIjkGridRepresentation.

◆ setGeometryAsCoordinateLineNodes()

virtual void resqml2::IjkGridExplicitRepresentation::setGeometryAsCoordinateLineNodes ( gsoap_resqml2_0_1::resqml20__PillarShape mostComplexPillarGeometry,
gsoap_resqml2_0_1::resqml20__KDirection kDirectionKind,
bool isRightHanded,
double const * points,
eml2 ::AbstractHdfProxy * proxy = nullptr,
uint64_t splitCoordinateLineCount = 0,
unsigned int const * pillarOfCoordinateLine = nullptr,
unsigned int const * splitCoordinateLineColumnCumulativeCount = nullptr,
unsigned int const * splitCoordinateLineColumns = nullptr,
int8_t const * definedPillars = nullptr,
resqml2 ::AbstractLocal3dCrs * localCrs = nullptr )
pure virtual

Sets the geometry of this IJK grid as explicit coordinate line nodes. See RESQML Usage, Technical guide and Enterprise Architect diagrams for details.

Exceptions
std::invalid_argumentIf points is nullptr.
std::invalid_argumentIf (splitCoordinateLineCount != 0 && (pillarOfCoordinateLine == nullptr || splitCoordinateLineColumnCumulativeCount == nullptr || splitCoordinateLineColumns == nullptr)).
std::invalid_argumentIf proxy is nullptr and no default HDF proxy is defined in the repository.
std::invalid_argumentIf localCrs is nullptr and no default local 3d CRS is defined.
Parameters
mostComplexPillarGeometryThe most complex pillar geometry which occurs on this reservoir grid.
kDirectionKindThe direction of the K axis on the earth. It is not directly related to Z of the vertical CRS but to the physical earth (as the vertical CRS is).
isRightHandedIndicates that the IJK grid is right handed, as determined by the triple product of tangent vectors in the I, J, and K directions.
[in]pointsXYZ double triplets ordered by i then j then split then k. Count must be ((iCellCount+1) * (jCellCount+1) + splitCoordinateLineCount) * kCellCount.
[in,out]proxy(Optional) The HDF proxy where all numerical values will be stored. If nullptr, then the default HDF proxy of the repository will be used.
splitCoordinateLineCount(Optional) The count of split coordinate line. A grid pillar is splitted in up to 4 coordinate lines.
[in]pillarOfCoordinateLine(Optional) For each split coordinate line, indicates which pillar it belongs to. Pillars are identified by their absolute 1d index (iPillar + jPillar * iPillarCount) where iPillarCount == iCellCount+1. Count is splitCoordinateLineCount.
[in]splitCoordinateLineColumnCumulativeCount(Optional) For each split coordinate line, indicates how many columns of the ijk grid are incident to it (minimum is one and maximum is 3) + the count of all incident columns of previous spit coordinate lines in the array. For example {1, 4, 6} would mean that the first split coordinate line is incident to only one column, the second split coordinate line is incident to 4 - 1 = 3 columns and the third column is incident to 6 - 4 = 2 columns. Count is splitCoordinateLineCount.
[in]splitCoordinateLineColumns(Optional) For each split coordinate line, indicates which columns are incident to it. Count is the last value in the splitCoordinateLineColumnCumulativeCount array. Columns are identified by their absolute 1d index (iColumn + jColumn * iColumnCount) where Column == Cell.
[in]definedPillars(Optional) For each pillar : 0 if pillar is not defined (i.e points equal to NaN) else the pillar is defined. This information overrides any pillar geometry information. If null, then all pillars are assumed to be defined.
[in]localCrs(Optional) The local CRS where the points are given. If nullptr (default) then the default CRS of the repository will be used.

◆ setGeometryAsCoordinateLineNodesUsingExistingDatasets()

virtual void resqml2::IjkGridExplicitRepresentation::setGeometryAsCoordinateLineNodesUsingExistingDatasets ( gsoap_resqml2_0_1::resqml20__PillarShape mostComplexPillarGeometry,
gsoap_resqml2_0_1::resqml20__KDirection kDirectionKind,
bool isRightHanded,
const std::string & points,
eml2 ::AbstractHdfProxy * proxy = nullptr,
uint64_t splitCoordinateLineCount = 0,
const std::string & pillarOfCoordinateLine = "",
const std::string & splitCoordinateLineColumnCumulativeCount = "",
const std::string & splitCoordinateLineColumns = "",
const std::string & definedPillars = "",
resqml2 ::AbstractLocal3dCrs * localCrs = nullptr )
pure virtual

Sets the geometry of this IJK grid as explicit coordinate line nodes. See RESQML Usage, Technical guide and Enterprise Architect diagrams for details. Same as setGeometryAsCoordinateLineNodes where the hdf datasets are already written in the the file.

Exceptions
std::invalid_argumentIf points is nullptr.
std::invalid_argumentIf (splitCoordinateLineCount != 0 && (pillarOfCoordinateLine == nullptr || splitCoordinateLineColumnCumulativeCount == nullptr || splitCoordinateLineColumns == nullptr)).
std::invalid_argumentIf proxy is nullptr and no default HDF proxy is defined in the repository.
std::invalid_argumentIf localCrs is nullptr and no default local 3d CRS is defined.
Parameters
mostComplexPillarGeometryThe most complex pillar geometry which occurs on this reservoir grid.
kDirectionKindThe direction of the K axis on the earth. It is not directly related to Z of the vertical CRS but to the physical earth (as the vertical CRS is).
isRightHandedIndicates that the IJK grid is right handed, as determined by the triple product of tangent vectors in the I, J, and K directions.
[in]pointsXYZ double triplets ordered by i then j then split then k. Count must be ((iCellCount+1) * (jCellCount+1) + splitCoordinateLineCount) * kCellCount.
[in,out]proxy(Optional) The HDF proxy where all numerical values will be stored. If nullptr, then the default HDF proxy of the repository will be used.
splitCoordinateLineCount(Optional) The count of split coordinate line. A grid pillar is splitted in up to 4 coordinate lines.
[in]pillarOfCoordinateLine(Optional) For each split coordinate line, indicates which pillar it belongs to. Pillars are identified by their absolute 1d index (iPillar + jPillar * iPillarCount) where iPillarCount == iCellCount+1. Count is splitCoordinateLineCount.
[in]splitCoordinateLineColumnCumulativeCount(Optional) For each split coordinate line, indicates how many columns of the ijk grid are incident to it (minimum is one and maximum is 3) + the count of all incident columns of previous spit coordinate lines in the array. For example {1, 4, 6} would mean that the first split coordinate line is incident to only one column, the second split coordinate line is incident to 4 - 1 = 3 columns and the third column is incident to 6 - 4 = 2 columns. Count is splitCoordinateLineCount.
[in]splitCoordinateLineColumns(Optional) For each split coordinate line, indicates which columns are incident to it. Count is the last value in the splitCoordinateLineColumnCumulativeCount array. Columns are identified by their absolute 1d index (iColumn + jColumn * iColumnCount) where Column == Cell.
[in]definedPillars(Optional) For each pillar : 0 if pillar is not defined (i.e points equal to NaN) else the pillar is defined. This information overrides any pillar geometry information. If null, then all pillars are assumed to be defined.
[in]localCrs(Optional) The local CRS where the points are given. If nullptr (default) then the default CRS of the repository will be used.

The documentation for this class was generated from the following file: