Lithological Rule which describes the arrangement of facies in the MonoGaussian or the biGaussian space.
Let us first describe the structure of the Rule in the MonoGaussian case. The Rule is defined by a set of codes that constitue a grammar, explained hereafter. The idea is to consider an axis (representing the Gaussian scale) and to define thresholds along this axis.
Each threshold is coded using "S" symbol. It is followed by the description of the Rule contents on the left side of the threshold first, then on its right side. On any side, we can imagine to define another threshold (using the code "S" again) or a Facies (using the code "F" followed by the Facies rank).
In the following example, we consider the following string (set of codes): "S1", "S2", "F4", "F1", "S3", "F3", "F2" (Note that the symbol "S" has been 'decorated' by an optional rank). This corresponds to the following arrangement:
- Define Threshold S1 first
- On the left of S1, define Threshold S2
- On the left of S2, define Facies F4
- On the right of S2 (and left of S1), define Facies F1
- On the right of S1, define Threshold S3
- On the left of S3 (and the right of S1), define Facies F3
- On the right of S3, define Facies F2 This is one way to define following arrangement of Facies and Thresholds along the Gaussian axis: F4 | S2 | F1 | S1 | F3 | S3 | F2 Note that the same result would be obtained with the following string: "S1", "S3", "F2", "F3", "S2", "F1", "F4"
In the BiGaussian case, the Rule is defined with a string (set of codes) that is similar to the one used in the MonoGaussian case, but with the addition of a new symbol "T" that is used to define thresholds along the second Gaussian axis. When a "T" threshold is used, it must be followed by the description of the Rule contents on the left side of the threshold first, then on its right side.
Note that a convenient representation of the Rule is to consider it as a Square with the first Gaussian axis as the horizontal axis and the second Gaussian axis as the vertical axis. Due to this representation, we must switch from "left and right" to "below and above" when describing the Rule contents on the two sides of a "T" threshold.
The following simple BiGaussian example is considered: "S1", "T1", "F4", "F1", "T2", "F3", "F2" This corresponds to the following arrangement:
- Define Threshold S1 first (vertical split of the Square)
- On the left of S1, define Threshold T1 (horizontal split of the left part of the Square)
- On the bottom of T1 (and left of S1), define Facies F4
- On the top of T1 (and left of S1), define Facies F1
- On the right of S1, define Threshold T2 (horizontal split of the right part of the Square)
- On the bottom of T2 (and right of S1), define Facies F3
- On the top of T2 (and right of S1), define Facies F2 This is one way to define following arrangement of Facies and Thresholds along the two Gaussian axes: F1 | S1 | F3 —+-—+— T1 | | T2 —+-—+— F4 | S1 | F2 —+-—+—
|
| | Rule (double rho=0.) |
| |
| | Rule (const 1 &icodes) |
| | Create a Rule from a vector of integers.
|
| |
| | Rule (const Rule &m) |
| |
| Rule & | operator= (const Rule &m) |
| |
| virtual | ~Rule () |
| |
| String | toString (const AStringFormat *strfmt=nullptr) const override |
| | ICloneable Interface.
|
| |
| String | getNFName () const override |
| | ASerializable Interface.
|
| |
| Id | resetFromNames (const VectorString &nodnames, double rho=0.) |
| |
| Id | resetFromFaciesCount (Id nfacies, double rho=0.) |
| |
| virtual String | displaySpecific () const |
| |
| virtual Id | particularities (Db *db, const Db *dbprop, Model *model, Id flag_grid_check, Id flag_stat) const |
| |
| virtual bool | checkModel (const Model *model, Id nvar=0) const |
| |
| virtual Id | gaus2facData (const PropDef &propdef, Db *dbin, Db *dbout, const VectorBool &flag_used, Id ipgs, Id isimu, Id nbsimu) const |
| |
| virtual Id | gaus2facResult (const PropDef &propdef, Db *dbout, const VectorBool &flag_used, Id ipgs, Id isimu, Id nbsimu) const |
| |
| virtual Id | evaluateBounds (const PropDef &propdef, Db *dbin, Db *dbout, Id isimu, Id igrf, Id ipgs, Id nbsimu) const |
| |
| Id | getFlagProp () const |
| |
| const ERule & | getModeRule () const |
| |
| double | getRho () const |
| |
| const Node * | getMainNode () const |
| |
| void | setFlagProp (Id flagProp) |
| |
| void | setRho (double rho) const |
| |
| void | setModeRule (const ERule &modeRule) |
| | TODO : Check if mutable is really necessary.
|
| |
| Id | setProportions (const 1 &proportions=1(), bool flagGaussian=true) const |
| |
| Id | statistics (Id verbose, Id *node_tot, Id *nfac_tot, Id *nmax_tot, Id *ny1_tot, Id *ny2_tot, double *prop_tot) const |
| |
| Id | getNFacies () const |
| |
| Id | getNGRF () const |
| |
| Id | getNY1 () const |
| |
| Id | getNY2 () const |
| |
| bool | isYUsed (Id igrf) const |
| |
| VectorBool | whichGRFUsed () const |
| |
| double | getProportion (Id facies) |
| |
| std::array< double, 4 > | getThresh (Id facies) const |
| |
| | getThreshFromRectangle (Id rect, Id *facies) |
| |
| Id | getFaciesFromGaussian (double y1, double y2) const |
| |
| | getNodes () const |
| |
| void | updateShift () const |
| |
| VectorString | getFaciesNames () const |
| |
| | getFaciesColors () const |
| |
| | getFaciesValues () const |
| |
| String | getFaciesName (Id facies) const |
| |
| Id | getFaciesColor (Id facies) const |
| |
| Id | getFaciesValue (Id facies) const |
| |
| String | getFaciesColorName (Id facies) const |
| |
| double | getScore () const |
| |
| void | setFaciesNames (const VectorString &facnames) |
| |
| void | setFaciesColors (const 1 &faccols) |
| |
| void | setFaciesValues (const 1 &facvalues) |
| |
| void | setFaciesName (Id facies, const String &name) |
| |
| void | setFaciesValue (Id facies, Id value) |
| |
| void | setFaciesColorByName (Id facies, const String &color) |
| |
| void | setFaciesColorByHexa (Id facies, const String &hexa) |
| |
| void | setFaciesColorByInt (Id facies, const Id &value) |
| |
| void | setCharacteristics (Id facies, const String &name=String(), const String &color=String(), Id value=ITEST) |
| | Define the characteristics of a given facies.
|
| |
| void | setScore (double score) |
| |
| String | namesPrint () const |
| |
| | AStringable () |
| |
| | AStringable (const AStringable &r) |
| |
| AStringable & | operator= (const AStringable &r) |
| |
| virtual | ~AStringable () |
| |
| virtual void | display (const AStringFormat *strfmt=nullptr) const final |
| |
| virtual void | display (Id level) const final |
| |
| void | printConcreteClassName () const |
| |
| | ASerializable () |
| |
| | ASerializable (const ASerializable &r)=default |
| |
| ASerializable & | operator= (const ASerializable &r)=default |
| |
| | ASerializable (ASerializable &&r) noexcept=default |
| |
| ASerializable & | operator= (ASerializable &&r) noexcept=default |
| |
| virtual | ~ASerializable ()=default |
| |
| bool | dumpToNF (const String &NFFilename, const EFormatNF &format=EFormatNF::fromKey("DEFAULT")) const |
| | Dump the contents of an object into an Output File using a given Output NF Format.
|
| |
| void | setDefaultFormatNF (const EFormatNF &format) |
| |
| | ICloneable () |
| |
| virtual | ~ICloneable () |
| |
| virtual ICloneable * | clone () const =0 |
| |
| std::shared_ptr< ICloneable > | cloneShared () const |
| |
| std::unique_ptr< ICloneable > | cloneUnique () const |
| |