Fesapi 2.9.0.1
This project provides C++ classes which allow an easy access in import and export to the Energistics standards.
|
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>
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" |
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.
|
virtualdefault |
Destructor does nothing since the memory is managed by the gSOAP context.
|
finalvirtual |
Gets the geometry kind of this IJK grid.
Reimplemented from resqml2::AbstractIjkGridRepresentation.
|
overridevirtual |
Gets all the XYZ points of the current block. XYZ points are given in the local CRS. Block information must be loaded.
std::invalid_argument | If this grid is truncated. |
std::invalid_argument | If the block information is not loaded. |
std::invalid_argument | If xyzPoints is nullptr . |
[out] | xyzPoints | A 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.
|
overridevirtual |
Gets all the XYZ points of a particular sequence of K interfaces. XYZ points are given in the local CRS.
std::invalid_argument | If this grid is truncated. |
std::out_of_range | If kInterfaceStart > getKCellCount() or kInterfaceEnd > getKCellCount() + getKGapsCount(). |
std::range_error | If kInterfaceStart > kInterfaceEnd . |
std::invalid_argument | If xyzPoints is nullptr . |
kInterfaceStart | The K index of the starting interface taken from zero to getKCellCount(). | |
kInterfaceEnd | The K index of the ending interface taken from zero to getKCellCount() + getKGapsCount(). | |
[out] | xyzPoints | A 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.
|
finalvirtual |
Checks whether the node geometry dataset is compressed or not.
std::invalid_argument | If this grid has no geometry. |
Reimplemented from resqml2::AbstractIjkGridRepresentation.
|
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.
std::invalid_argument | If points is nullptr . |
std::invalid_argument | If (splitCoordinateLineCount != 0 && (pillarOfCoordinateLine == nullptr || splitCoordinateLineColumnCumulativeCount == nullptr || splitCoordinateLineColumns == nullptr)) . |
std::invalid_argument | If proxy is nullptr and no default HDF proxy is defined in the repository. |
std::invalid_argument | If localCrs is nullptr and no default local 3d CRS is defined. |
mostComplexPillarGeometry | The most complex pillar geometry which occurs on this reservoir grid. | |
kDirectionKind | The 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). | |
isRightHanded | Indicates that the IJK grid is right handed, as determined by the triple product of tangent vectors in the I, J, and K directions. | |
[in] | points | XYZ 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. |
|
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.
std::invalid_argument | If points is nullptr . |
std::invalid_argument | If (splitCoordinateLineCount != 0 && (pillarOfCoordinateLine == nullptr || splitCoordinateLineColumnCumulativeCount == nullptr || splitCoordinateLineColumns == nullptr)) . |
std::invalid_argument | If proxy is nullptr and no default HDF proxy is defined in the repository. |
std::invalid_argument | If localCrs is nullptr and no default local 3d CRS is defined. |
mostComplexPillarGeometry | The most complex pillar geometry which occurs on this reservoir grid. | |
kDirectionKind | The 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). | |
isRightHanded | Indicates that the IJK grid is right handed, as determined by the triple product of tangent vectors in the I, J, and K directions. | |
[in] | points | XYZ 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. |