resqpy 4.15.0__tar.gz → 4.15.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. {resqpy-4.15.0 → resqpy-4.15.2}/PKG-INFO +1 -1
  2. {resqpy-4.15.0 → resqpy-4.15.2}/pyproject.toml +1 -1
  3. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/__init__.py +1 -1
  4. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/__init__.py +2 -2
  5. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/attribute_property_set.py +24 -15
  6. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/rq_import/_import_nexus.py +75 -48
  7. resqpy-4.15.2/resqpy/rq_import/_import_vdb_all_grids.py +120 -0
  8. resqpy-4.15.0/resqpy/rq_import/_import_vdb_all_grids.py +0 -108
  9. {resqpy-4.15.0 → resqpy-4.15.2}/LICENSE +0 -0
  10. {resqpy-4.15.0 → resqpy-4.15.2}/README.md +0 -0
  11. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/crs.py +0 -0
  12. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/__init__.py +0 -0
  13. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_add_edges_per_column_property_array.py +0 -0
  14. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_add_faults.py +0 -0
  15. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_add_one_blocked_well_property.py +0 -0
  16. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_add_one_grid_property_array.py +0 -0
  17. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_add_single_cell_grid.py +0 -0
  18. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_add_wells_from_ascii_file.py +0 -0
  19. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_add_zone_by_layer_property.py +0 -0
  20. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_coarsened_grid.py +0 -0
  21. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_common.py +0 -0
  22. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_copy_grid.py +0 -0
  23. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_drape_to_surface.py +0 -0
  24. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_extract_box.py +0 -0
  25. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_extract_box_for_well.py +0 -0
  26. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_fault_throw_scaling.py +0 -0
  27. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_gather_ensemble.py +0 -0
  28. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_interpolated_grid.py +0 -0
  29. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_local_depth_adjustment.py +0 -0
  30. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_refined_grid.py +0 -0
  31. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_tilted_grid.py +0 -0
  32. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_unsplit_grid.py +0 -0
  33. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_zonal_grid.py +0 -0
  34. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/derived_model/_zone_layer_ranges_from_array.py +0 -0
  35. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/fault/__init__.py +0 -0
  36. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/fault/_gcs_functions.py +0 -0
  37. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/fault/_grid_connection_set.py +0 -0
  38. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/__init__.py +0 -0
  39. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_cell_properties.py +0 -0
  40. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_connection_sets.py +0 -0
  41. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_create_grid_xml.py +0 -0
  42. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_defined_geometry.py +0 -0
  43. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_extract_functions.py +0 -0
  44. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_face_functions.py +0 -0
  45. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_faults.py +0 -0
  46. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_grid.py +0 -0
  47. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_grid_types.py +0 -0
  48. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_intervals_info.py +0 -0
  49. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_moved_functions.py +0 -0
  50. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_pillars.py +0 -0
  51. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_pixel_maps.py +0 -0
  52. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_points_functions.py +0 -0
  53. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_regular_grid.py +0 -0
  54. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_transmissibility.py +0 -0
  55. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_write_hdf5_from_caches.py +0 -0
  56. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_write_nexus_corp.py +0 -0
  57. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid/_xyz.py +0 -0
  58. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid_surface/__init__.py +0 -0
  59. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid_surface/_blocked_well_populate.py +0 -0
  60. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid_surface/_find_faces.py +0 -0
  61. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid_surface/_grid_skin.py +0 -0
  62. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid_surface/_grid_surface.py +0 -0
  63. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid_surface/_trajectory_intersects.py +0 -0
  64. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/grid_surface/grid_surface_cuda.py +0 -0
  65. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/lines/__init__.py +0 -0
  66. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/lines/_common.py +0 -0
  67. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/lines/_polyline.py +0 -0
  68. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/lines/_polyline_set.py +0 -0
  69. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/model/__init__.py +0 -0
  70. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/model/_catalogue.py +0 -0
  71. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/model/_context.py +0 -0
  72. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/model/_forestry.py +0 -0
  73. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/model/_grids.py +0 -0
  74. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/model/_hdf5.py +0 -0
  75. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/model/_model.py +0 -0
  76. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/model/_xml.py +0 -0
  77. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/multi_processing/__init__.py +0 -0
  78. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/multi_processing/_multiprocessing.py +0 -0
  79. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/multi_processing/wrappers/__init__.py +0 -0
  80. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/multi_processing/wrappers/blocked_well_mp.py +0 -0
  81. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/multi_processing/wrappers/grid_surface_mp.py +0 -0
  82. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/multi_processing/wrappers/mesh_mp.py +0 -0
  83. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/__init__.py +0 -0
  84. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/ab_toolbox.py +0 -0
  85. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/base.py +0 -0
  86. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/box_utilities.py +0 -0
  87. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/class_dict.py +0 -0
  88. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/consolidation.py +0 -0
  89. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/data/build.py +0 -0
  90. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/data/properties.json +0 -0
  91. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/dataframe.py +0 -0
  92. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/exceptions.py +0 -0
  93. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/factors.py +0 -0
  94. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/fine_coarse.py +0 -0
  95. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/grid_functions.py +0 -0
  96. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/intersection.py +0 -0
  97. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/keyword_files.py +0 -0
  98. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/load_data.py +0 -0
  99. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/point_inclusion.py +0 -0
  100. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/random_seed.py +0 -0
  101. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/read_nexus_fault.py +0 -0
  102. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/relperm.py +0 -0
  103. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/simple_lines.py +0 -0
  104. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/time.py +0 -0
  105. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/trademark.py +0 -0
  106. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/transmission.py +0 -0
  107. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/triangulation.py +0 -0
  108. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/uuid.py +0 -0
  109. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/vdb.py +0 -0
  110. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/vector_utilities.py +0 -0
  111. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/volume.py +0 -0
  112. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/wellspec_keywords.py +0 -0
  113. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/write_data.py +0 -0
  114. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/write_hdf5.py +0 -0
  115. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/xml_et.py +0 -0
  116. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/xml_namespaces.py +0 -0
  117. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/olio/zmap_reader.py +0 -0
  118. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/__init__.py +0 -0
  119. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/_utils.py +0 -0
  120. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/boundary_feature.py +0 -0
  121. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/boundary_feature_interpretation.py +0 -0
  122. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/earth_model_interpretation.py +0 -0
  123. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/fault_interpretation.py +0 -0
  124. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/fluid_boundary_feature.py +0 -0
  125. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/frontier_feature.py +0 -0
  126. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/generic_interpretation.py +0 -0
  127. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/genetic_boundary_feature.py +0 -0
  128. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/geobody_boundary_interpretation.py +0 -0
  129. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/geobody_feature.py +0 -0
  130. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/geobody_interpretation.py +0 -0
  131. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/geologic_unit_feature.py +0 -0
  132. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/horizon_interpretation.py +0 -0
  133. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/organization_feature.py +0 -0
  134. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/rock_fluid_unit_feature.py +0 -0
  135. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/structural_organization_interpretation.py +0 -0
  136. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/tectonic_boundary_feature.py +0 -0
  137. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/wellbore_feature.py +0 -0
  138. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/organize/wellbore_interpretation.py +0 -0
  139. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/_collection_add_part.py +0 -0
  140. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/_collection_create_xml.py +0 -0
  141. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/_collection_get_attributes.py +0 -0
  142. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/_collection_support.py +0 -0
  143. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/_property.py +0 -0
  144. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/grid_property_collection.py +0 -0
  145. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/property_collection.py +0 -0
  146. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/property_common.py +0 -0
  147. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/property_kind.py +0 -0
  148. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/string_lookup.py +0 -0
  149. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/well_interval_property.py +0 -0
  150. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/well_interval_property_collection.py +0 -0
  151. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/well_log.py +0 -0
  152. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/property/well_log_collection.py +0 -0
  153. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/rq_import/__init__.py +0 -0
  154. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/rq_import/_add_ab_properties.py +0 -0
  155. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/rq_import/_add_surfaces.py +0 -0
  156. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/rq_import/_grid_from_cp.py +0 -0
  157. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/rq_import/_import_vdb_ensemble.py +0 -0
  158. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/strata/__init__.py +0 -0
  159. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/strata/_binary_contact_interpretation.py +0 -0
  160. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/strata/_geologic_unit_interpretation.py +0 -0
  161. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/strata/_strata_common.py +0 -0
  162. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/strata/_stratigraphic_column.py +0 -0
  163. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/strata/_stratigraphic_column_rank.py +0 -0
  164. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/strata/_stratigraphic_unit_feature.py +0 -0
  165. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/strata/_stratigraphic_unit_interpretation.py +0 -0
  166. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/__init__.py +0 -0
  167. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/_base_surface.py +0 -0
  168. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/_combined_surface.py +0 -0
  169. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/_mesh.py +0 -0
  170. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/_pointset.py +0 -0
  171. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/_surface.py +0 -0
  172. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/_tri_mesh.py +0 -0
  173. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/_tri_mesh_stencil.py +0 -0
  174. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/surface/_triangulated_patch.py +0 -0
  175. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/time_series/__init__.py +0 -0
  176. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/time_series/_any_time_series.py +0 -0
  177. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/time_series/_from_nexus_summary.py +0 -0
  178. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/time_series/_functions.py +0 -0
  179. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/time_series/_geologic_time_series.py +0 -0
  180. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/time_series/_time_duration.py +0 -0
  181. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/time_series/_time_series.py +0 -0
  182. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/unstructured/__init__.py +0 -0
  183. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/unstructured/_hexa_grid.py +0 -0
  184. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/unstructured/_prism_grid.py +0 -0
  185. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/unstructured/_pyramid_grid.py +0 -0
  186. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/unstructured/_tetra_grid.py +0 -0
  187. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/unstructured/_unstructured_grid.py +0 -0
  188. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/weights_and_measures/__init__.py +0 -0
  189. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/weights_and_measures/nexus_units.py +0 -0
  190. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/weights_and_measures/weights_and_measures.py +0 -0
  191. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/__init__.py +0 -0
  192. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/_blocked_well.py +0 -0
  193. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/_deviation_survey.py +0 -0
  194. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/_md_datum.py +0 -0
  195. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/_trajectory.py +0 -0
  196. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/_wellbore_frame.py +0 -0
  197. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/_wellbore_marker.py +0 -0
  198. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/_wellbore_marker_frame.py +0 -0
  199. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/blocked_well_frame.py +0 -0
  200. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/well_object_funcs.py +0 -0
  201. {resqpy-4.15.0 → resqpy-4.15.2}/resqpy/well/well_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: resqpy
3
- Version: 4.15.0
3
+ Version: 4.15.2
4
4
  Summary: Python API for working with RESQML models
5
5
  Home-page: https://github.com/bp/resqpy
6
6
  License: MIT
@@ -9,7 +9,7 @@ build-backend = "poetry.masonry.api"
9
9
 
10
10
  [tool.poetry]
11
11
  name = "resqpy"
12
- version = "4.15.0" # Set at build time
12
+ version = "4.15.2" # Set at build time
13
13
  description = "Python API for working with RESQML models"
14
14
  authors = ["BP"]
15
15
  license = "MIT"
@@ -28,6 +28,6 @@
28
28
 
29
29
  import logging
30
30
 
31
- __version__ = "4.15.0" # Set at build time
31
+ __version__ = "4.15.2" # Set at build time
32
32
  log = logging.getLogger(__name__)
33
33
  log.info(f"Imported resqpy version {__version__}")
@@ -8,7 +8,7 @@ __all__ = [
8
8
  'reformat_column_edges_from_resqml_format', 'same_property_kind', 'selective_version_of_collection',
9
9
  'supported_local_property_kind_list', 'supported_property_kind_list', 'supported_facet_type_list',
10
10
  'expected_facet_type_dict', 'create_transmisibility_multiplier_property_kind',
11
- 'property_kind_and_facet_from_keyword', 'guess_uom', 'property_parts', 'property_part'
11
+ 'property_kind_and_facet_from_keyword', 'guess_uom', 'property_parts', 'property_part', 'make_aps_key'
12
12
  ]
13
13
 
14
14
  from .property_common import property_collection_for_keyword, \
@@ -30,7 +30,7 @@ from .property_common import property_collection_for_keyword, \
30
30
  from .property_kind import PropertyKind, create_transmisibility_multiplier_property_kind
31
31
  from .string_lookup import StringLookup
32
32
  from .property_collection import PropertyCollection
33
- from .attribute_property_set import AttributePropertySet, ApsProperty
33
+ from .attribute_property_set import AttributePropertySet, ApsProperty, make_aps_key
34
34
  from .grid_property_collection import GridPropertyCollection
35
35
  from ._property import Property
36
36
  from .well_interval_property import WellIntervalProperty
@@ -236,21 +236,12 @@ class AttributePropertySet(rqp.PropertyCollection):
236
236
 
237
237
  def _key(self, part):
238
238
  """Returns the key (attribute name) for a given part."""
239
- if self.key_mode == 'pk':
240
- key = self.property_kind_for_part(part)
241
- facet = self.facet_for_part(part)
242
- if facet is not None:
243
- key += f'_{facet}'
244
- else:
245
- key = self.citation_title_for_part(part)
246
- key = key.replace(' ', '_')
247
- ti = self.time_index_for_part(part)
248
- if ti is not None:
249
- key += f'_t{ti}'
250
- r = self.realization_for_part(part)
251
- if r is not None:
252
- key += f'_r{r}'
253
- return key
239
+ return make_aps_key(self.key_mode,
240
+ property_kind = self.property_kind_for_part(part),
241
+ title = self.citation_title_for_part(part),
242
+ facet = self.facet_for_part(part),
243
+ time_index = self.time_index_for_part(part),
244
+ realization = self.realization_for_part(part))
254
245
 
255
246
  def _make_attributes(self):
256
247
  """Setup individual properties with attribute style read access to metadata."""
@@ -262,3 +253,21 @@ class AttributePropertySet(rqp.PropertyCollection):
262
253
  def __len__(self):
263
254
  """Returns the number of properties in the set."""
264
255
  return self.number_of_parts()
256
+
257
+
258
+ def make_aps_key(key_mode, property_kind = None, title = None, facet = None, time_index = None, realization = None):
259
+ """Contructs the key (attribute name) for a property based on metadata items."""
260
+ if key_mode == 'pk':
261
+ assert property_kind is not None
262
+ key = property_kind
263
+ if facet is not None:
264
+ key += f'_{facet}'
265
+ else:
266
+ assert title is not None
267
+ key = title
268
+ key = key.replace(' ', '_')
269
+ if time_index is not None:
270
+ key += f'_t{time_index}'
271
+ if realization is not None:
272
+ key += f'_r{realization}'
273
+ return key
@@ -67,55 +67,78 @@ def import_nexus(
67
67
  ensemble_size_limit = None,
68
68
  grid_title = 'ROOT',
69
69
  mode = 'w',
70
- progress_fn = None):
71
- """Read a simulation grid geometry and optionally grid properties.
72
-
73
- Input may be from nexus ascii input files, or nexus vdb output.
74
-
75
- Arguments:
76
- resqml_file_root (str): output path and file name without .epc or .h5 extension
77
- extent_ijk (triple float, optional): ijk extents (fortran ordering)
78
- vdb_file (str, optional): vdb input file, either this or corp_file should be not None. Required if importing from a vdb
79
- vdb_case (str, optional): required if the vdb contains more than one case. If None, first case in vdb is used
80
- corp_file (str, optional): required if importing from corp ascii file. corp ascii input file: nexus corp data without keyword
81
- corp_bin_file (str, optional): required if importing from corp binary file
82
- corp_xy_units (str, default 'm'): xy length units
83
- corp_z_units (str, default 'm'): z length units
84
- corp_z_inc_down (bool, default True): if True z values increase with depth
85
- ijk_handedness (str, default 'right'): 'right' or 'left'
86
- corp_eight_mode (bool, default False): if True the ordering of corner point data is in nexus EIGHT mode
87
- geometry_defined_everywhere (bool, default True): if False then inactive cells are marked as not having geometry
88
- treat_as_nan (float, default None): if a value is provided corner points with this value will be assigned nan
89
- active_mask_file (str, default None): ascii property file holding values 0 or 1, with 1 indicating active cells
90
- use_binary (bool, default False): if True a cached binary version of ascii files will be used (pure binary, not corp bin format)
91
- resqml_xy_units (str, default 'm'): output xy units for resqml file
92
- resqml_z_units (str, default 'm'): output z units for resqml file
93
- resqml_z_inc_down (bool, default True): if True z values increase with depth for output resqml file
94
- shift_to_local (bool, default False): if True then a local origin will be used in the CRS
95
- local_origin_place (str, default 'centre'): 'centre' or 'minimum'. If 'centre' the local origin is placed at the centre of the grid; ignored if shift_to_local is False
96
- max_z_void (float, default 0.1): maximum z gap between vertically neighbouring corner points. Vertical gaps greater than this will introduce k gaps into resqml grid. Units are corp z units
97
- split_pillars (bool, default True): if False an unfaulted grid will be generated
98
- split_tolerance (float, default 0.01): maximum distance between neighbouring corner points before a pillar is considered 'split'. Applies to each of x, y, z differences
99
- property_array_files (list, default None): list of (filename, keyword, uom, time_index, null_value, discrete)
100
- summary_file (str, default None): nexus output summary file, used to extract timestep dates when loading recurrent data from vdb
101
- vdb_static_properties (bool, default True): if True, static vdb properties are imported (only relevant if vdb_file is not None)
102
- vdb_recurrent_properties (bool, default False): # if True, recurrent vdb properties are imported (only relevant if vdb_file is not None)
103
- timestep_selection (str, default 'all): 'first', 'last', 'first and last', 'all', or list of ints being reporting timestep numbers. Ignored if vdb_recurrent_properties is False
104
- use_compressed_time_series (bool, default True): generates reduced time series containing timesteps with recurrent properties from vdb, rather than full nexus summary time series
105
- decoarsen (bool, default True): where ICOARSE is present, redistribute data to uncoarse cells
106
- ab_property_list (list, default None): list of (file_name, keyword, property_kind, facet_type, facet, uom, time_index, null_value, discrete)
107
- create_property_set (bool, default False): if True a resqml PropertySet is created
108
- ensemble_case_dirs_root (str, default None): path up to but excluding realisation number
109
- ensemble_property_dictionary (str, default None): dictionary mapping title (or keyword) to (filename, property_kind, facet_type, facet, uom, time_index, null_value, discrete)
110
- ensemble_size_limit (int, default None): if present processing of ensemble will terminate after this number of cases is reached
111
- grid_title (str, default 'ROOT'): grid citation title
112
- mode (str, default 'w'): 'w' or 'a', mode to write or append to hdf5
113
- progress_fn (function, default None): if present function must have one floating argument with value increasing from 0 to 1, and is called at intervals to indicate progress
114
-
115
- Returns:
116
- resqml model in memory & written to disc
70
+ progress_fn = None,
71
+ vdb_property_list = None):
72
+ """Read a Nexus grid geometry (from ascii input or vdb) and optionally grid properties.
73
+
74
+ arguments:
75
+ - resqml_file_root (str): output path and file name without .epc or .h5 extension
76
+ - extent_ijk (triple float, optional): ijk extents (fortran ordering)
77
+ - vdb_file (str, optional): vdb input file, either this or corp_file should be not None;
78
+ required if importing from a vdb
79
+ - vdb_case (str, optional): required if the vdb contains more than one case;
80
+ if None, first case in vdb is used
81
+ - corp_file (str, optional): required if importing from corp ascii file;
82
+ corp ascii input file containing nexus corp data without keyword
83
+ - corp_bin_file (str, optional): required if importing from corp binary file
84
+ - corp_xy_units (str, default 'm'): xy length units
85
+ - corp_z_units (str, default 'm'): z length units
86
+ - corp_z_inc_down (bool, default True): if True z values increase with depth
87
+ - ijk_handedness (str, default 'right'): 'right' or 'left'
88
+ - corp_eight_mode (bool, default False): if True the ordering of corner point data
89
+ is in nexus EIGHT mode
90
+ - geometry_defined_everywhere (bool, default True): if False then inactive cells are
91
+ marked as not having geometry
92
+ - treat_as_nan (float, default None): if a value is provided corner points with
93
+ this value will be assigned not-a-number
94
+ - active_mask_file (str, default None): ascii property file holding values 0 or 1,
95
+ with 1 indicating active cells
96
+ - use_binary (bool, default False): if True a cached binary version of ascii files
97
+ will be used (pure binary, not corp bin format)
98
+ - resqml_xy_units (str, default 'm'): output xy units for resqml file
99
+ - resqml_z_units (str, default 'm'): output z units for resqml file
100
+ - resqml_z_inc_down (bool, default True): if True z values increase with depth for
101
+ output resqml file
102
+ - shift_to_local (bool, default False): if True then a local origin will be used in the CRS
103
+ - local_origin_place (str, default 'centre'): 'centre' or 'minimum'; if 'centre' the
104
+ local origin is placed at the centre of the grid; ignored if shift_to_local is False
105
+ - max_z_void (float, default 0.1): maximum z gap between vertically neighbouring corner points;
106
+ vertical gaps greater than this will introduce k gaps into resqml grid; units are corp z units
107
+ - split_pillars (bool, default True): if False an unfaulted grid will be generated
108
+ - split_tolerance (float, default 0.01): maximum distance between neighbouring corner points
109
+ before a pillar is considered 'split'; applies to each of x, y, z differences
110
+ - property_array_files (list, default None): list of (filename, keyword, uom, time_index, null_value, discrete)
111
+ - summary_file (str, default None): nexus output summary file, used to extract timestep dates
112
+ when loading recurrent data from vdb
113
+ - vdb_static_properties (bool, default True): if True, static vdb properties are imported;
114
+ only relevant if vdb_file is not None; see also vdb_property_list
115
+ - vdb_recurrent_properties (bool, default False): if True, recurrent vdb properties are imported;
116
+ only relevant if vdb_file is not None; see also vdb_property_list
117
+ - timestep_selection (str, default 'all): 'first', 'last', 'first and last', 'all',
118
+ or list of ints being reporting timestep numbers; ignored if vdb_recurrent_properties is False
119
+ - use_compressed_time_series (bool, default True): generates reduced time series containing
120
+ timesteps with recurrent properties from vdb, rather than full nexus summary time series
121
+ - decoarsen (bool, default True): where ICOARSE is present, redistribute data to uncoarse cells
122
+ - ab_property_list (list, optional): list of
123
+ (file_name, keyword, property_kind, facet_type, facet, uom, time_index, null_value, discrete)
124
+ - create_property_set (bool, default False): if True a resqml PropertySet is created
125
+ - ensemble_case_dirs_root (str, optional): path up to but excluding realisation number
126
+ - ensemble_property_dictionary (str, optional): dictionary mapping title (or keyword) to
127
+ (filename, property_kind, facet_type, facet, uom, time_index, null_value, discrete)
128
+ - ensemble_size_limit (int, optional): if present processing of ensemble will terminate
129
+ after this number of cases is reached
130
+ - grid_title (str, default 'ROOT'): grid citation title
131
+ - mode (str, default 'w'): 'w' or 'a', mode to write or append to hdf5
132
+ - progress_fn (function, default None): if present function must have one floating argument
133
+ with value increasing from 0.0 to 1.0, and is called at intervals to indicate progress
134
+ - vdb_property_list (list of str, optional): list of vdb static and/or recurrent properties to
135
+ include in the import; if None, all properties are imported; vdb_static_properties and
136
+ vdb_recurrent_properties boolean arguments must also be set True for respective properties
137
+ to be included; ignored if not importing from vdb
138
+
139
+ returns:
140
+ - resqml model in memory & written to disc
117
141
  """
118
-
119
142
  if resqml_file_root.endswith('.epc'):
120
143
  resqml_file_root = resqml_file_root[:-4]
121
144
  assert mode in ['w', 'a']
@@ -333,6 +356,8 @@ def import_nexus(
333
356
  prop_import_collection = rp.GridPropertyCollection()
334
357
  prop_import_collection.set_grid(grid)
335
358
  for keyword in props:
359
+ if vdb_property_list is not None and keyword not in vdb_property_list:
360
+ continue
336
361
  prop_import_collection.import_vdb_static_property_to_cache(vdbase, keyword, grid_name = grid_title)
337
362
  # if active_mask is not None:
338
363
  # prop_import_collection.add_cached_array_to_imported_list(active_mask, active_mask_file, 'ACTIVE', property_kind = 'active',
@@ -520,6 +545,8 @@ def import_nexus(
520
545
  for keyword in recur_prop_list:
521
546
  if vdb.bad_keyword(keyword):
522
547
  continue
548
+ if vdb_property_list is not None and keyword not in vdb_property_list:
549
+ continue
523
550
  prop_kind, facet_type, facet = rp.property_kind_and_facet_from_keyword(keyword)
524
551
  step_import_collection.import_vdb_recurrent_property_to_cache(
525
552
  vdbase,
@@ -0,0 +1,120 @@
1
+ """_import_vdb_all_grids.py: Module to import a vdb into resqml format."""
2
+
3
+ # Nexus is a registered trademark of the Halliburton Company
4
+
5
+ import logging
6
+
7
+ log = logging.getLogger(__name__)
8
+
9
+ import resqpy.olio.vdb as vdb
10
+ import resqpy.rq_import as rqi
11
+
12
+
13
+ def import_vdb_all_grids(resqml_file_root,
14
+ extent_ijk = None,
15
+ vdb_file = None,
16
+ vdb_case = None,
17
+ corp_xy_units = 'm',
18
+ corp_z_units = 'm',
19
+ corp_z_inc_down = True,
20
+ ijk_handedness = 'right',
21
+ geometry_defined_everywhere = True,
22
+ treat_as_nan = None,
23
+ resqml_xy_units = 'm',
24
+ resqml_z_units = 'm',
25
+ resqml_z_inc_down = True,
26
+ shift_to_local = False,
27
+ local_origin_place = 'centre',
28
+ max_z_void = 0.1,
29
+ split_pillars = True,
30
+ split_tolerance = 0.01,
31
+ vdb_static_properties = True,
32
+ vdb_recurrent_properties = False,
33
+ decoarsen = True,
34
+ timestep_selection = 'all',
35
+ create_property_set = False,
36
+ vdb_property_list = None):
37
+ """Creates a RESQML dataset containing grids and grid properties, including LGRs, for a single realisation.
38
+
39
+ arguments:
40
+ - resqml_file_root (str): output path and file name without .epc or .h5 extension
41
+ - extent_ijk (triple float, optional): ijk extents (fortran ordering)
42
+ - vdb_file (str, optional): vdb input file, either this or corp_file should be not None;
43
+ required if importing from a vdb
44
+ - vdb_case (str, optional): required if the vdb contains more than one case;
45
+ if None, first case in vdb is used
46
+ - corp_xy_units (str, default 'm'): xy length units
47
+ - corp_z_units (str, default 'm'): z length units
48
+ - corp_z_inc_down (bool, default True): if True z values increase with depth
49
+ - ijk_handedness (str, default 'right'): 'right' or 'left'
50
+ - geometry_defined_everywhere (bool, default True): if False then inactive cells are marked
51
+ as not having geometry
52
+ - treat_as_nan (float, default None): if a value is provided corner points with this value
53
+ will be assigned nan (not-a-number)
54
+ - resqml_xy_units (str, default 'm'): output xy units for resqml file
55
+ - resqml_z_units (str, default 'm'): output z units for resqml file
56
+ - resqml_z_inc_down (bool, default True): if True z values increase with depth in output resqml file
57
+ - shift_to_local (bool, default False): if True then a local origin will be used in the CRS
58
+ - local_origin_place (str, default 'centre'): 'centre' or 'minimum'; if 'centre' the local origin
59
+ is placed at the centre of the grid; ignored if shift_to_local is False
60
+ - max_z_void (float, default 0.1): maximum z gap between vertically neighbouring corner points;
61
+ vertical gaps greater than this will introduce k gaps into resqml grid; units are corp z units
62
+ - split_pillars (bool, default True): if False an unfaulted grid will be generated
63
+ - split_tolerance (float, default 0.01): maximum distance between neighbouring corner points
64
+ before a pillar is considered 'split'; applies to each of x, y, z differences
65
+ - vdb_static_properties (bool, default True): if True, static vdb properties are imported;
66
+ only relevant if vdb_file is not None; see also vdb_property_list
67
+ - vdb_recurrent_properties (bool, default False): if True, recurrent vdb properties are imported;
68
+ only relevant if vdb_file is not None; see also vdb_property_list
69
+ - decoarsen (bool, default True): where ICOARSE is present, redistribute data to uncoarse cells
70
+ - timestep_selection (str, default 'all): 'first', 'last', 'first and last', 'all', or list of ints
71
+ being reporting timestep numbers to include; ignored if vdb_recurrent_properties is False
72
+ - create_property_set (bool, default False): if True a resqml PropertySet is created
73
+ - vdb_property_list (list of str, optional): list of vdb static and/or recurrent properties to
74
+ include in the import; if None, all properties are imported; vdb_static_properties and
75
+ vdb_recurrent_properties boolean arguments must also be set True for respective properties
76
+ to be included; ignored if not importing from vdb
77
+ """
78
+ vdbase = vdb.VDB(vdb_file)
79
+ case_list = vdbase.cases()
80
+ assert len(case_list) > 0, 'no cases found in vdb'
81
+ if vdb_case is None:
82
+ vdb_case = case_list[0]
83
+ else:
84
+ assert vdb_case in case_list, 'case ' + vdb_case + ' not found in vdb: ' + vdb_file
85
+ vdbase.set_use_case(vdb_case)
86
+ grid_list = vdbase.list_of_grids()
87
+ index = 0
88
+ for grid_name in grid_list:
89
+ if grid_name.upper().startswith('SMALLGRIDS'):
90
+ log.warning('vdb import skipping small grids')
91
+ continue
92
+ log.debug('importing vdb data for grid ' + str(grid_name))
93
+ rqi.import_nexus(
94
+ resqml_file_root,
95
+ extent_ijk = extent_ijk if grid_name == 'ROOT' else None, # 3 element numpy vector applicable to ROOT
96
+ vdb_file = vdb_file,
97
+ vdb_case = vdb_case, # if None, first case in vdb is used (usually a vdb only holds one case)
98
+ corp_xy_units = corp_xy_units,
99
+ corp_z_units = corp_z_units,
100
+ corp_z_inc_down = corp_z_inc_down,
101
+ ijk_handedness = ijk_handedness,
102
+ geometry_defined_everywhere = geometry_defined_everywhere,
103
+ treat_as_nan = treat_as_nan,
104
+ resqml_xy_units = resqml_xy_units,
105
+ resqml_z_units = resqml_z_units,
106
+ resqml_z_inc_down = resqml_z_inc_down,
107
+ shift_to_local = shift_to_local,
108
+ local_origin_place = local_origin_place, # 'centre' or 'minimum'
109
+ max_z_void = max_z_void, # vertical gaps greater than this will introduce k gaps intp resqml grid
110
+ split_pillars = split_pillars, # NB: some LGRs may be unsplit even if ROOT is split
111
+ split_tolerance = split_tolerance, # applies to each of x, y, z differences
112
+ vdb_static_properties = vdb_static_properties, # if True, static vdb properties are imported
113
+ vdb_recurrent_properties = vdb_recurrent_properties,
114
+ decoarsen = decoarsen,
115
+ timestep_selection = timestep_selection,
116
+ create_property_set = create_property_set,
117
+ grid_title = grid_name,
118
+ mode = 'w' if index == 0 else 'a',
119
+ vdb_property_list = vdb_property_list)
120
+ index += 1
@@ -1,108 +0,0 @@
1
- """_import_vdb_all_grids.py: Module to import a vdb into resqml format."""
2
-
3
- # Nexus is a registered trademark of the Halliburton Company
4
-
5
- import logging
6
-
7
- log = logging.getLogger(__name__)
8
-
9
- import resqpy.olio.vdb as vdb
10
- import resqpy.rq_import as rqi
11
-
12
-
13
- def import_vdb_all_grids(
14
- resqml_file_root, # output path and file name without .epc or .h5 extension
15
- extent_ijk = None, # 3 element numpy vector applicable to ROOT
16
- vdb_file = None,
17
- vdb_case = None, # if None, first case in vdb is used (usually a vdb only holds one case)
18
- corp_xy_units = 'm',
19
- corp_z_units = 'm',
20
- corp_z_inc_down = True,
21
- ijk_handedness = 'right',
22
- geometry_defined_everywhere = True,
23
- treat_as_nan = None,
24
- resqml_xy_units = 'm',
25
- resqml_z_units = 'm',
26
- resqml_z_inc_down = True,
27
- shift_to_local = False,
28
- local_origin_place = 'centre', # 'centre' or 'minimum'
29
- max_z_void = 0.1, # vertical gaps greater than this will introduce k gaps intp resqml grid
30
- split_pillars = True,
31
- split_tolerance = 0.01, # applies to each of x, y, z differences
32
- vdb_static_properties = True,
33
- # if True, static vdb properties are imported (only relevant if vdb_file is not None)
34
- vdb_recurrent_properties = False,
35
- decoarsen = True,
36
- timestep_selection = 'all',
37
- # 'first', 'last', 'first and last', 'all', or list of ints being reporting timestep numbers
38
- create_property_set = False):
39
- """Creates a RESQML dataset containing grids and grid properties, including LGRs, for a single realisation.
40
-
41
- Arguments:
42
- resqml_file_root (str): output path and file name without .epc or .h5 extension
43
- extent_ijk (triple float, optional): ijk extents (fortran ordering)
44
- vdb_file (str, optional): vdb input file, either this or corp_file should be not None. Required if importing from a vdb
45
- vdb_case (str, optional): required if the vdb contains more than one case. If None, first case in vdb is used
46
- corp_xy_units (str, default 'm'): xy length units
47
- corp_z_units (str, default 'm'): z length units
48
- corp_z_inc_down (bool, default True): if True z values increase with depth
49
- ijk_handedness (str, default 'right'): 'right' or 'left'
50
- geometry_defined_everywhere (bool, default True): if False then inactive cells are marked as not having geometry
51
- treat_as_nan (float, default None): if a value is provided corner points with this value will be assigned nan
52
- resqml_xy_units (str, default 'm'): output xy units for resqml file
53
- resqml_z_units (str, default 'm'): output z units for resqml file
54
- resqml_z_inc_down (bool, default True): if True z values increase with depth for output resqml file
55
- shift_to_local (bool, default False): if True then a local origin will be used in the CRS
56
- local_origin_place (str, default 'centre'): 'centre' or 'minimum'. If 'centre' the local origin is placed at the centre of the grid; ignored if shift_to_local is False
57
- max_z_void (float, default 0.1): maximum z gap between vertically neighbouring corner points. Vertical gaps greater than this will introduce k gaps into resqml grid. Units are corp z units
58
- split_pillars (bool, default True): if False an unfaulted grid will be generated
59
- split_tolerance (float, default 0.01): maximum distance between neighbouring corner points before a pillar is considered 'split'. Applies to each of x, y, z differences
60
- vdb_static_properties (bool, default True): if True, static vdb properties are imported (only relevant if vdb_file is not None)
61
- vdb_recurrent_properties (bool, default False): # if True, recurrent vdb properties are imported (only relevant if vdb_file is not None)
62
- decoarsen (bool, default True): where ICOARSE is present, redistribute data to uncoarse cells
63
- timestep_selection (str, default 'all): 'first', 'last', 'first and last', 'all', or list of ints being reporting timestep numbers. Ignored if vdb_recurrent_properties is False
64
- create_property_set (bool, default False): if True a resqml PropertySet is created
65
- """
66
-
67
- vdbase = vdb.VDB(vdb_file)
68
- case_list = vdbase.cases()
69
- assert len(case_list) > 0, 'no cases found in vdb'
70
- if vdb_case is None:
71
- vdb_case = case_list[0]
72
- else:
73
- assert vdb_case in case_list, 'case ' + vdb_case + ' not found in vdb: ' + vdb_file
74
- vdbase.set_use_case(vdb_case)
75
- grid_list = vdbase.list_of_grids()
76
- index = 0
77
- for grid_name in grid_list:
78
- if grid_name.upper().startswith('SMALLGRIDS'):
79
- log.warning('vdb import skipping small grids')
80
- continue
81
- log.debug('importing vdb data for grid ' + str(grid_name))
82
- rqi.import_nexus(
83
- resqml_file_root,
84
- extent_ijk = extent_ijk if grid_name == 'ROOT' else None, # 3 element numpy vector applicable to ROOT
85
- vdb_file = vdb_file,
86
- vdb_case = vdb_case, # if None, first case in vdb is used (usually a vdb only holds one case)
87
- corp_xy_units = corp_xy_units,
88
- corp_z_units = corp_z_units,
89
- corp_z_inc_down = corp_z_inc_down,
90
- ijk_handedness = ijk_handedness,
91
- geometry_defined_everywhere = geometry_defined_everywhere,
92
- treat_as_nan = treat_as_nan,
93
- resqml_xy_units = resqml_xy_units,
94
- resqml_z_units = resqml_z_units,
95
- resqml_z_inc_down = resqml_z_inc_down,
96
- shift_to_local = shift_to_local,
97
- local_origin_place = local_origin_place, # 'centre' or 'minimum'
98
- max_z_void = max_z_void, # vertical gaps greater than this will introduce k gaps intp resqml grid
99
- split_pillars = split_pillars, # NB: some LGRs may be unsplit even if ROOT is split
100
- split_tolerance = split_tolerance, # applies to each of x, y, z differences
101
- vdb_static_properties = vdb_static_properties, # if True, static vdb properties are imported
102
- vdb_recurrent_properties = vdb_recurrent_properties,
103
- decoarsen = decoarsen,
104
- timestep_selection = timestep_selection,
105
- create_property_set = create_property_set,
106
- grid_title = grid_name,
107
- mode = 'w' if index == 0 else 'a')
108
- index += 1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes