Skip to content

Blockmodel Summary

Rowan Cockett edited this page Mar 1, 2019 · 1 revision

OMF v2 Block Model Formats

image

  • Regular Block Model
  • Tensor Block Model
  • Regular Sub Block Model
    • Every sub block is the same size
  • OcTree Sub Block Model
    • Every sub block must divide by 2
    • Maximum number of recursions is 8
  • Arbitrary Sub Block Model
    • Parent cells can be divided into any amount of children
    • Decision: OMF v2 format will not validate the arbitrary sub block model geometry. That is, there may be holes in the sub-blocked parent block or sub-blocks may overlap

Project

  • name
  • description
  • coordinate_referecnce_system (see above)
  • units
  • metadata
    • vendor = JSON serializable vendor specific metadata that is not validated
  • Etc. To be defined and discussed

All Block Models

  • name
  • description
  • Orientation of Block Model
    • Implementation is via through three axis vectors and a corner that define a bounding box in the project CRS. The method is explicitly not (a) rotation matrices, which may have skew and or (b) rotations which may be applied in other orders (ZYX vs YXZ) and not be consistent.
    • Note, these axis vectors are not normalized, such that the extent is easy to calculate and show a bounding box in the CRS.
    • axis_u (Vector3)
    • axis_v (Vector3)
    • axis_w (Vector3)
    • corner (Vector3, p.k.a origin)
      • Minimum u/v/w
  • Attribute List - list of standard OMF attributes.

Methods

  • num_blocks: return the number of blocks in the model.
  • Including other implementation methods that will be discussed on GitHub
  • These are to make all our lives easier. :)

Regular Block Model

  • block_size = [i, j, k], doubles
  • block_count = [ni, nj, nk], integers

Note: Counting for Attributes - index counts on the i direction (the fastest moving), then j then k. Docs → include a for loop, and the equivalent f/c ordering (for python/fortran/c wrapping) I,J,K indices are implicitly defined through the above unwrapping that is standardized in the format.

Tensor Block Model

  • tensor_u = double array of spacings
  • tensor_v = double array of spacings
  • tensor_w = double array of spacings

Note: block_size is tensor_u[i] and block_count is len(tensor_u). Counting for attributes is the same as Regular Block Model

Regular Sub-Block Model

  • parent_block_size = [i,j,k], doubles
  • parent_block_count = [ni, nj, nk], integers
  • sub_block_count = [ni_c, nj_c, nk_c] Note, the size is implicit (i/ni_c)
  • is_sub_blocked = [bool array], len == ninjnk

Note: Counting for Attributes - index counts on the i direction (the fastest moving), then j then k. Iterate over children first. Methods: Are you sub blocked Get me the children blocks

OcTree Sub Block Model

  • parent_block_size = [i,j,k], doubles
  • parent_block_count = [ni, nj, nk], integers
  • level ...

Examples: Require pictures, to be provided by Dassault

Implementation: To be discussed on GitHub Document: Discuss storage benefits and translation between OcTree and Arbitrary Sub Block Model

Arbitrary Sub-Block Model

  • parent_block_size = [i,j,k], doubles
  • parent_block_count = [ni, nj, nk], integers
  • is_sub_blocked = [bool array] len == ninjnk
  • sub_block_count = [integer array]
  • sub_block_centroids = [Vector3 array double]
  • sub_block_sizes = [Vector3 array double]

Implementation: To be discussed on GitHub Possible look to CSR sparse matrix storage

Methods:

  • Are you sub blocked
  • Get me the children blocks
  • Sub blocked parent number (or, ijk index)

This supports “seam” models - using parent blocks that are columns, and subdivided to track the height of the seam. If the top and bottom need to track a surface - use null values on the outside to fill out the bounding box of the block model element.

Attributes

  • Metadata
    • name
    • description
    • units
    • uuid
    • date_created
    • date_modified
    • null_value (default null is NaN for FloatArrays)
    • default_value
    • hexagon.precision = 0.001
      • This is an example of vendor specific metadata, that may in future be standardized.
  • ScalarAttribute
    • type=UInt8/16, Int8/16/32/64, Float32/64
    • To Be Added
      • Boolean
  • Vector3Attribute
  • Vector2Attribute
  • StringAttribute
  • ...