-
Notifications
You must be signed in to change notification settings - Fork 20
Blockmodel Summary
- 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
- 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
- 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. :)
- 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_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
- 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
- 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
- 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.
- 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
- ...