resqpy 4.9.2__tar.gz → 4.9.5__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {resqpy-4.9.2 → resqpy-4.9.5}/PKG-INFO +2 -4
- {resqpy-4.9.2 → resqpy-4.9.5}/README.md +1 -3
- {resqpy-4.9.2 → resqpy-4.9.5}/pyproject.toml +1 -1
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/__init__.py +1 -1
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid_surface/_find_faces.py +16 -4
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/multi_processing/wrappers/grid_surface_mp.py +6 -2
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/wellspec_keywords.py +1 -1
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/_blocked_well.py +1 -1
- {resqpy-4.9.2 → resqpy-4.9.5}/LICENSE +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/crs.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_add_edges_per_column_property_array.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_add_faults.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_add_one_blocked_well_property.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_add_one_grid_property_array.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_add_single_cell_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_add_wells_from_ascii_file.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_add_zone_by_layer_property.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_coarsened_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_common.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_copy_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_drape_to_surface.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_extract_box.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_extract_box_for_well.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_fault_throw_scaling.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_gather_ensemble.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_interpolated_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_local_depth_adjustment.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_refined_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_tilted_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_unsplit_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_zonal_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/derived_model/_zone_layer_ranges_from_array.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/fault/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/fault/_gcs_functions.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/fault/_grid_connection_set.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_cell_properties.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_connection_sets.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_create_grid_xml.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_defined_geometry.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_extract_functions.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_face_functions.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_faults.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_grid_types.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_intervals_info.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_moved_functions.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_pillars.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_pixel_maps.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_points_functions.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_regular_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_transmissibility.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_write_hdf5_from_caches.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_write_nexus_corp.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid/_xyz.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid_surface/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid_surface/_blocked_well_populate.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid_surface/_grid_skin.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid_surface/_grid_surface.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid_surface/_trajectory_intersects.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/grid_surface/grid_surface_cuda.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/lines/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/lines/_common.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/lines/_polyline.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/lines/_polyline_set.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/model/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/model/_catalogue.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/model/_context.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/model/_forestry.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/model/_grids.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/model/_hdf5.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/model/_model.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/model/_xml.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/multi_processing/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/multi_processing/_multiprocessing.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/multi_processing/wrappers/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/multi_processing/wrappers/blocked_well_mp.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/multi_processing/wrappers/mesh_mp.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/ab_toolbox.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/base.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/box_utilities.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/class_dict.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/consolidation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/data/build.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/data/properties.json +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/dataframe.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/exceptions.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/factors.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/fine_coarse.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/grid_functions.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/intersection.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/keyword_files.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/load_data.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/point_inclusion.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/random_seed.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/read_nexus_fault.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/relperm.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/simple_lines.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/time.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/trademark.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/transmission.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/triangulation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/uuid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/vdb.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/vector_utilities.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/volume.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/write_data.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/write_hdf5.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/xml_et.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/xml_namespaces.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/olio/zmap_reader.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/_utils.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/boundary_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/boundary_feature_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/earth_model_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/fault_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/fluid_boundary_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/frontier_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/generic_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/genetic_boundary_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/geobody_boundary_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/geobody_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/geobody_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/geologic_unit_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/horizon_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/organization_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/rock_fluid_unit_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/structural_organization_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/tectonic_boundary_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/wellbore_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/organize/wellbore_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/_collection_add_part.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/_collection_create_xml.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/_collection_get_attributes.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/_collection_support.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/_property.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/grid_property_collection.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/property_collection.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/property_common.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/property_kind.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/string_lookup.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/well_interval_property.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/well_interval_property_collection.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/well_log.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/property/well_log_collection.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/rq_import/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/rq_import/_add_ab_properties.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/rq_import/_add_surfaces.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/rq_import/_grid_from_cp.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/rq_import/_import_nexus.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/rq_import/_import_vdb_all_grids.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/rq_import/_import_vdb_ensemble.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/strata/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/strata/_binary_contact_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/strata/_geologic_unit_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/strata/_strata_common.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/strata/_stratigraphic_column.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/strata/_stratigraphic_column_rank.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/strata/_stratigraphic_unit_feature.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/strata/_stratigraphic_unit_interpretation.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/surface/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/surface/_base_surface.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/surface/_combined_surface.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/surface/_mesh.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/surface/_pointset.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/surface/_surface.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/surface/_tri_mesh.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/surface/_triangulated_patch.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/time_series/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/time_series/_any_time_series.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/time_series/_from_nexus_summary.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/time_series/_functions.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/time_series/_geologic_time_series.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/time_series/_time_duration.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/time_series/_time_series.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/unstructured/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/unstructured/_hexa_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/unstructured/_prism_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/unstructured/_pyramid_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/unstructured/_tetra_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/unstructured/_unstructured_grid.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/weights_and_measures/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/weights_and_measures/nexus_units.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/weights_and_measures/weights_and_measures.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/__init__.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/_deviation_survey.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/_md_datum.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/_trajectory.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/_wellbore_frame.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/_wellbore_marker.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/_wellbore_marker_frame.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/blocked_well_frame.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/well_object_funcs.py +0 -0
- {resqpy-4.9.2 → resqpy-4.9.5}/resqpy/well/well_utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: resqpy
|
3
|
-
Version: 4.9.
|
3
|
+
Version: 4.9.5
|
4
4
|
Summary: Python API for working with RESQML models
|
5
5
|
Home-page: https://github.com/bp/resqpy
|
6
6
|
License: MIT
|
@@ -48,7 +48,7 @@ you the ability to work with reservoir models programmatically, without having
|
|
48
48
|
to know the details of the RESQML standard.
|
49
49
|
|
50
50
|
The package is written and maintained by bp, and is made available under the MIT
|
51
|
-
license as a contribution to the open
|
51
|
+
license as a contribution to the open source community.
|
52
52
|
|
53
53
|
**resqpy** was created by Andy Beer. For enquires about resqpy, please contact
|
54
54
|
Emma Nesbit (Emma.Nesbit@uk.bp.com)
|
@@ -73,8 +73,6 @@ for, although the RESQML standard does allow for such grids.
|
|
73
73
|
It is envisaged that the code base will be expanded to include other classes of
|
74
74
|
object and more fully cover the options permitted by the RESQML standard.
|
75
75
|
|
76
|
-
Modification functionality at the moment focuses on changes to grid geometry.
|
77
|
-
|
78
76
|
## Installation
|
79
77
|
|
80
78
|
Resqpy can be installed with pip:
|
@@ -16,7 +16,7 @@ you the ability to work with reservoir models programmatically, without having
|
|
16
16
|
to know the details of the RESQML standard.
|
17
17
|
|
18
18
|
The package is written and maintained by bp, and is made available under the MIT
|
19
|
-
license as a contribution to the open
|
19
|
+
license as a contribution to the open source community.
|
20
20
|
|
21
21
|
**resqpy** was created by Andy Beer. For enquires about resqpy, please contact
|
22
22
|
Emma Nesbit (Emma.Nesbit@uk.bp.com)
|
@@ -41,8 +41,6 @@ for, although the RESQML standard does allow for such grids.
|
|
41
41
|
It is envisaged that the code base will be expanded to include other classes of
|
42
42
|
object and more fully cover the options permitted by the RESQML standard.
|
43
43
|
|
44
|
-
Modification functionality at the moment focuses on changes to grid geometry.
|
45
|
-
|
46
44
|
## Installation
|
47
45
|
|
48
46
|
Resqpy can be installed with pip:
|
@@ -182,6 +182,7 @@ def find_faces_to_represent_surface_regular(
|
|
182
182
|
title = None,
|
183
183
|
centres = None,
|
184
184
|
agitate = False,
|
185
|
+
random_agitation = False,
|
185
186
|
feature_type = "fault",
|
186
187
|
progress_fn = None,
|
187
188
|
consistent_side = False,
|
@@ -196,9 +197,11 @@ def find_faces_to_represent_surface_regular(
|
|
196
197
|
title (str, optional): the citation title to use for the grid connection set; defaults to name
|
197
198
|
centres (numpy float array of shape (nk, nj, ni, 3), optional): precomputed cell centre points in
|
198
199
|
local grid space, to avoid possible crs issues; required if grid's crs includes an origin (offset)?
|
199
|
-
agitate (bool, default False): if True, the points of the surface are perturbed by a small
|
200
|
+
agitate (bool, default False): if True, the points of the surface are perturbed by a small
|
200
201
|
offset, which can help if the surface has been built from a regular mesh with a periodic resonance
|
201
202
|
with the grid
|
203
|
+
random_agitation (bool, default False): if True, the agitation is by a small random distance; if False,
|
204
|
+
a constant positive shift of 5.0e-6 is applied to x, y & z values; ignored if agitate is False
|
202
205
|
feature_type (str, default 'fault'): 'fault', 'horizon' or 'geobody boundary'
|
203
206
|
progress_fn (f(x: float), optional): a callback function to be called at intervals by this function;
|
204
207
|
the argument will progress from 0.0 to 1.0 in unspecified and uneven increments
|
@@ -261,7 +264,10 @@ def find_faces_to_represent_surface_regular(
|
|
261
264
|
t, p = surface.triangles_and_points()
|
262
265
|
assert t is not None and p is not None, f"surface {surface.title} is empty"
|
263
266
|
if agitate:
|
264
|
-
|
267
|
+
if random_agitation:
|
268
|
+
p += 1.0e-5 * (np.random.random(p.shape) - 0.5)
|
269
|
+
else:
|
270
|
+
p += 5.0e-6
|
265
271
|
log.debug(f"surface: {surface.title}; p0: {p[0]}; crs uuid: {surface.crs_uuid}")
|
266
272
|
log.debug(f"surface min xyz: {np.min(p, axis = 0)}")
|
267
273
|
log.debug(f"surface max xyz: {np.max(p, axis = 0)}")
|
@@ -495,6 +501,7 @@ def find_faces_to_represent_surface_regular_optimised(
|
|
495
501
|
name,
|
496
502
|
title = None,
|
497
503
|
agitate = False,
|
504
|
+
random_agitation = False,
|
498
505
|
feature_type = "fault",
|
499
506
|
is_curtain = False,
|
500
507
|
progress_fn = None,
|
@@ -509,9 +516,11 @@ def find_faces_to_represent_surface_regular_optimised(
|
|
509
516
|
surface (Surface): the surface to be intersected with the grid
|
510
517
|
name (str): the feature name to use in the grid connection set
|
511
518
|
title (str, optional): the citation title to use for the grid connection set; defaults to name
|
512
|
-
agitate (bool, default False): if True, the points of the surface are perturbed by a small
|
519
|
+
agitate (bool, default False): if True, the points of the surface are perturbed by a small
|
513
520
|
offset, which can help if the surface has been built from a regular mesh with a periodic resonance
|
514
521
|
with the grid
|
522
|
+
random_agitation (bool, default False): if True, the agitation is by a small random distance; if False,
|
523
|
+
a constant positive shift of 5.0e-6 is applied to x, y & z values; ignored if agitate is False
|
515
524
|
feature_type (str, default 'fault'): 'fault', 'horizon' or 'geobody boundary'
|
516
525
|
is_curtain (bool, default False): if True, only the top layer of the grid is processed and the bisector
|
517
526
|
property, if requested, is generated with indexable element columns
|
@@ -591,7 +600,10 @@ def find_faces_to_represent_surface_regular_optimised(
|
|
591
600
|
triangles, points = surface.triangles_and_points()
|
592
601
|
assert (triangles is not None and points is not None), f"surface {surface.title} is empty"
|
593
602
|
if agitate:
|
594
|
-
|
603
|
+
if random_agitation:
|
604
|
+
points += 1.0e-5 * (np.random.random(points.shape) - 0.5)
|
605
|
+
else:
|
606
|
+
points += 5.0e-6
|
595
607
|
# log.debug(f'surface: {surface.title}; p0: {points[0]}; crs uuid: {surface.crs_uuid}')
|
596
608
|
# log.debug(f'surface min xyz: {np.min(points, axis = 0)}')
|
597
609
|
# log.debug(f'surface max xyz: {np.max(points, axis = 0)}')
|
@@ -29,6 +29,7 @@ def find_faces_to_represent_surface_regular_wrapper(
|
|
29
29
|
name: str,
|
30
30
|
title: Optional[str] = None,
|
31
31
|
agitate: bool = False,
|
32
|
+
random_agitation: bool = False,
|
32
33
|
feature_type: str = 'fault',
|
33
34
|
trimmed: bool = False,
|
34
35
|
is_curtain = False,
|
@@ -55,9 +56,11 @@ def find_faces_to_represent_surface_regular_wrapper(
|
|
55
56
|
surface_uuid (UUID or str): UUID (universally unique identifier) of the surface (or point set) object.
|
56
57
|
name (str): the feature name to use in the grid connection set.
|
57
58
|
title (str): the citation title to use for the grid connection set; defaults to name
|
58
|
-
agitate (bool): if True, the points of the surface are perturbed by a small
|
59
|
-
|
59
|
+
agitate (bool): if True, the points of the surface are perturbed by a small offset,
|
60
|
+
which can help if the surface has been built from a regular mesh with a periodic resonance
|
60
61
|
with the grid
|
62
|
+
random_agitation (bool, default False): if True, the agitation is by a small random distance; if False,
|
63
|
+
a constant positive shift of 5.0e-6 is applied to x, y & z values; ignored if agitate is False
|
61
64
|
feature_type (str, default 'fault'): one of 'fault', 'horizon', or 'geobody boundary'
|
62
65
|
trimmed (bool, default True): if True the surface has already been trimmed
|
63
66
|
is_curtain (bool, default False): if True, only the top layer is intersected with the surface and bisector
|
@@ -221,6 +224,7 @@ def find_faces_to_represent_surface_regular_wrapper(
|
|
221
224
|
name,
|
222
225
|
title,
|
223
226
|
agitate,
|
227
|
+
random_agitation,
|
224
228
|
feature_type,
|
225
229
|
is_curtain,
|
226
230
|
progress_fn,
|
@@ -469,7 +469,7 @@ def get_well_data(
|
|
469
469
|
while True:
|
470
470
|
kf.skip_comments(file)
|
471
471
|
if (kf.specific_keyword_next(file, "WELLSPEC") or kf.specific_keyword_next(file, "WELLMOD") or
|
472
|
-
kf.specific_keyword_next(file, "TIME")):
|
472
|
+
kf.specific_keyword_next(file, "TIME") or kf.specific_keyword_next(file, "INCLUDE")):
|
473
473
|
break
|
474
474
|
line = kf.strip_trailing_comment(file.readline())
|
475
475
|
words = line.split()
|
@@ -3485,7 +3485,7 @@ class BlockedWell(BaseResqpy):
|
|
3485
3485
|
facet = gridpc.facet_for_part(part),
|
3486
3486
|
realization = gridpc.realization_for_part(part),
|
3487
3487
|
indexable_element = 'cells')
|
3488
|
-
bwpc.write_hdf5_for_imported_list()
|
3488
|
+
bwpc.write_hdf5_for_imported_list(use_int32 = False)
|
3489
3489
|
bwpc.create_xml_for_imported_list_and_add_parts_to_model(time_series_uuid = time_uuid,
|
3490
3490
|
string_lookup_uuid = sl_uuid)
|
3491
3491
|
else:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|